ZGlmZiAtLWdpdCBhLy5lZGl0b3Jjb25maWcgYi8uZWRpdG9yY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2JiMDYKLS0tIC9kZXYvbnVsbAorKysgYi8uZWRpdG9yY29uZmlnCkBAIC0wLDAgKzEsMTUgQEAKKyMgRWRpdG9yQ29uZmlnIDogaHR0cDovL0VkaXRvckNvbmZpZy5vcmcKKworcm9vdCA9IHRydWUKKworW01ha2VmaWxlKl0KK2luZGVudF9zdHlsZSA9IHRhYgorCitbQ01ha2VMaXN0cy50eHRdCitpbmRlbnRfc3R5bGUgPSB0YWIKK2luZGVudF9zaXplID0gNAorCitbKi57YyxofV0KK2luZGVudF9zdHlsZSA9IHNwYWNlCitpbmRlbnRfc2l6ZSA9IDQKK3RhYl93aWR0aCA9IDgKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDA3YmRlYTcuLjFlYzcwMGYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSwxMTggKzEsNjYgQEAKICouZXhlCiAqLm8KKyoubGEKICoubG8KLSoubG9nCiAqLnB5YwotKi5wYXRjaAorCisjIEV4ZWN1dGFibGVzCisvZXhhbXBsZS9nam9icmVhZAorL3htbGNhdGFsb2cKKy94bWxsaW50CisKKyMgVGVzdCBleGVjdXRhYmxlcworL3J1bnN1aXRlCisvcnVudGVzdAorL3J1bnhtbGNvbmYKKy90ZXN0TW9kdWxlCisvdGVzdFRocmVhZHMKKy90ZXN0YXBpCisvdGVzdGNoYXIKKy90ZXN0ZGljdAorL3Rlc3RsaW1pdHMKKy90ZXN0cGFyc2VyCisvdGVzdHJlY3Vyc2UKKworIyBUZXN0cworL2RiYTEwMDAwMC54bWwKKy9taXNzaW5nLmxzdAorL3J1bnN1aXRlLmxvZworL3J1bnhtbGNvbmYubG9nCisvdGVzdC5vdXQKKy94bWxjb25mCisKKyMgR2VuZXJhdGVkIGJ5IGJ1aWxkIHN5c3RlbQorL2NvbmZpZy5oCisvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oCisvbGlieG1sLTIuMC11bmluc3RhbGxlZC5wYworL2xpYnhtbC0yLjAucGMKKy9saWJ4bWwyLWNvbmZpZy5jbWFrZQorL3htbDItY29uZmlnCisKKyMgQXV0b3Rvb2xzCiAuZGVwcwogLmxpYnMKLS5tZW1kdW1wCi1DT1BZSU5HCi1DVkUtKgotSU5TVEFMTAogTWFrZWZpbGUKIE1ha2VmaWxlLmluCi1hY2xvY2FsLm00Ci1hdXRvbTR0ZS5jYWNoZQotYmlzc2VjdCoKLWNvbXBpbGUKLWNvbmZpZy5ndWVzcwotY29uZmlnLmguaW4KLWNvbmZpZy5oLmlufgotY29uZmlnLmxvZwotY29uZmlnLnN0YXR1cwotY29uZmlnLnN1YgotY29uZmlndXJlCi1jb25maWd1cmV+Ci1kYmExMDAwMDAueG1sCi1kZXBjb21wCi1kb2MvTWFrZWZpbGUKLWRvYy9NYWtlZmlsZS5pbgotZG9jL2RldmhlbHAvTWFrZWZpbGUKLWRvYy9kZXZoZWxwL01ha2VmaWxlLmluCi1kb2MvZXhhbXBsZXMvLmRlcHMKLWRvYy9leGFtcGxlcy9NYWtlZmlsZQotZG9jL2V4YW1wbGVzL01ha2VmaWxlLmluCi1kb2MvZXhhbXBsZXMvaW8xCi1kb2MvZXhhbXBsZXMvaW8yCi1kb2MvZXhhbXBsZXMvcGFyc2UxCi1kb2MvZXhhbXBsZXMvcGFyc2UyCi1kb2MvZXhhbXBsZXMvcGFyc2UzCi1kb2MvZXhhbXBsZXMvcGFyc2U0Ci1kb2MvZXhhbXBsZXMvcmVhZGVyMQotZG9jL2V4YW1wbGVzL3JlYWRlcjIKLWRvYy9leGFtcGxlcy9yZWFkZXIzCi1kb2MvZXhhbXBsZXMvcmVhZGVyNAotZG9jL2V4YW1wbGVzL3Rlc3RXcml0ZXIKLWRvYy9leGFtcGxlcy90cmVlMQotZG9jL2V4YW1wbGVzL3RyZWUyCi1kb2MvZXhhbXBsZXMveHBhdGgxCi1kb2MvZXhhbXBsZXMveHBhdGgyCi1leGFtcGxlLy5kZXBzCi1leGFtcGxlL01ha2VmaWxlCi1leGFtcGxlL01ha2VmaWxlLmluCi1leGFtcGxlL2dqb2JyZWFkCi1pbmNsdWRlL01ha2VmaWxlCi1pbmNsdWRlL01ha2VmaWxlLmluCi1pbmNsdWRlL2xpYnhtbC9NYWtlZmlsZQotaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuaW4KLWluc3RhbGwtc2gKLWxpYnRvb2wKLWxpYnhtbC0yLjAtdW5pbnN0YWxsZWQucGMKLWxpYnhtbC0yLjAucGMKLWxpYnhtbDItY29uZmlnLmNtYWtlCi1saWJ4bWwyLmxhCi1saWJ4bWwyLnNwZWMKLWxpc3QKLWx0bWFpbi5zaAotbG9nCi1taXNzaW5nCi1taXNzaW5nLmxzdAotbTQvbGlidG9vbC5tNAotbTQvbHQqLm00Ci1weS1jb21waWxlCi1weXRob24vLmRlcHMKLXB5dGhvbi8ubGlicwotcHl0aG9uL01ha2VmaWxlCi1weXRob24vTWFrZWZpbGUuaW4KLXB5dGhvbi9nZW5fcHJvZwotcHl0aG9uL2xpYnhtbDItZXhwb3J0LmMKLXB5dGhvbi9saWJ4bWwyLXB5LmMKLXB5dGhvbi9saWJ4bWwyLXB5LmgKLXB5dGhvbi9saWJ4bWwyLnB5Ci1weXRob24vbGlieG1sMmNsYXNzLnB5Ci1weXRob24vbGlieG1sMmNsYXNzLnR4dAotcHl0aG9uL2xpYnhtbDJtb2QubGEKLXB5dGhvbi9zZXR1cC5weQotcHl0aG9uL3Rlc3RzL01ha2VmaWxlCi1weXRob24vdGVzdHMvTWFrZWZpbGUuaW4KLXB5dGhvbi90ZXN0cy90bXAueG1sCi1ydW5zdWl0ZQotcnVudGVzdAotcnVueG1sY29uZgotcnVueG1sY29uZi5sb2cKLXN0YW1wLWgxCi10YWdzCi10ZXN0Lm91dAotdGVzdEF1dG9tYXRhCi10ZXN0TW9kdWxlCi10ZXN0VGhyZWFkcwotdGVzdGFwaQotdGVzdGFwaS5jLm5ldwotdGVzdGNoYXIKLXRlc3RkaWN0Ci10ZXN0ZHNvLmxhCi10ZXN0bGltaXRzCi10ZXN0cmVjdXJzZQotdG1wCi10c3QuYwotdHN0Ci14bWwyLWNvbmZpZwoteG1sY2F0YWxvZwoteG1sY29uZgoteG1sbGludAoteHN0Yy8qLXRlc3QucHkKLXhzdGMvTWFrZWZpbGUKLXhzdGMvTWFrZWZpbGUuaW4KLXhzdGMvVGVzdHMKLXhzdGMveHN0cy0qLnRhci5negorL0lOU1RBTEwKKy9hY2xvY2FsLm00CisvYXV0b200dGUuY2FjaGUKKy9jb21waWxlCisvY29uZmlnLmd1ZXNzCisvY29uZmlnLmguaW4KKy9jb25maWcuaC5pbn4KKy9jb25maWcubG9nCisvY29uZmlnLnN0YXR1cworL2NvbmZpZy5zdWIKKy9jb25maWd1cmUKKy9jb25maWd1cmV+CisvZGVwY29tcAorL2luc3RhbGwtc2gKKy9saWJ0b29sCisvbHRtYWluLnNoCisvbWlzc2luZworL200L2xpYnRvb2wubTQKKy9tNC9sdCoubTQKKy9weS1jb21waWxlCisvc3RhbXAtaDEKZGlmZiAtLWdpdCBhLy5naXRsYWItY2kueW1sIGIvLmdpdGxhYi1jaS55bWwKaW5kZXggOGFhNThlOS4uYjY4NGExNiAxMDA2NDQKLS0tIGEvLmdpdGxhYi1jaS55bWwKKysrIGIvLmdpdGxhYi1jaS55bWwKQEAgLTEsMzcgKzEsMTkgQEAKIC50ZXN0OgotICAjIFRoZSBpbWFnZSB3YXMgZ2VuZXJhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBEb2NrZXJmaWxlLiBJdCBpcyBhbHNvIHVzZWQKLSAgIyBmb3IgbGlieHNsdCwgdGhhdCdzIHdoeSB3ZSBuZWVkIGdpdCBhbmQgbGliZ2NyeXB0LWRldi4KLSAgIwotICAjIEZST00gdWJ1bnR1OjIwLjA0Ci0gICMgRU5WIERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZQotICAjIFJVTiBhcHQtZ2V0IHVwZGF0ZSAmJiBcCi0gICMgICAgIGFwdC1nZXQgdXBncmFkZSAteSAmJiBcCi0gICMgICAgIGFwdC1nZXQgaW5zdGFsbCAteSAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyBcCi0gICMgICAgICAgICBjdXJsIGdpdCBjYS1jZXJ0aWZpY2F0ZXMgXAotICAjICAgICAgICAgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBwa2ctY29uZmlnIFwKLSAgIyAgICAgICAgIG1ha2UgZ2NjIGNsYW5nIGxsdm0gXAotICAjICAgICAgICAgemxpYjFnLWRldiBsaWJsem1hLWRldiBsaWJnY3J5cHQtZGV2IFwKLSAgIyAgICAgICAgIHB5dGhvbi1kZXYgcHl0aG9uMy1kZXYgXAotICAjICAgICAgICAgY21ha2UKLSAgIyBXT1JLRElSIC90ZXN0cwotICAjIFJVTiBjdXJsIGh0dHBzOi8vd3d3LnczLm9yZy9YTUwvVGVzdC94bWx0czIwMDgwODI3LnRhci5neiB8dGFyIHh6CiAgIGltYWdlOiByZWdpc3RyeS5naXRsYWIuZ25vbWUub3JnL2dub21lL2xpYnhtbDIKICAgdmFyaWFibGVzOgogICAgIEJBU0VfQ09ORklHOiAiLS13aXRoLWZ0cCAtLXdpdGgtbGVnYWN5IC0td2l0aC14cHRyLWxvY3MiCisgIGJlZm9yZV9zY3JpcHQ6CisgICAgLSBybSAtcmYgbGlieG1sMi1idWlsZAorICAgIC0gbWtkaXIgbGlieG1sMi1idWlsZAorICAgIC0gbG4gLXMgL3Rlc3RzL3htbGNvbmYgbGlieG1sMi1idWlsZAogICBzY3JpcHQ6Ci0gICAgLSB8Ci0gICAgICBybSAtcmYgYnVpbGQKLSAgICAgIG1rZGlyIGJ1aWxkCi0gICAgICBjZCBidWlsZAotICAgICAgbG4gLXMgL3Rlc3RzL3htbGNvbmYKLSAgICAgIHNoIC4uL2F1dG9nZW4uc2ggJEJBU0VfQ09ORklHICRDT05GSUcKLSAgICAgIG1ha2UgLWokKG5wcm9jKSBWPTEgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCi0gICAgICBtYWtlIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIiBjaGVjaworICAgIC0gc2ggLmdpdGxhYi1jaS90ZXN0LnNoCiAKIGdjYzoKICAgZXh0ZW5kczogLnRlc3QKICAgdmFyaWFibGVzOgotICAgIENGTEFHUzogIi1PMiAtc3RkPWM4OSAtRF9YT1BFTl9TT1VSQ0U9NzAwIgorICAgIENPTkZJRzogIi0td2l0aG91dC10bHMiCisgICAgQ0ZMQUdTOiAiLU8yIC1zdGQ9Yzg5IC1EX1hPUEVOX1NPVVJDRT02MDAiCiAKIGdjYzptaW5pbXVtOgogICBleHRlbmRzOiAudGVzdApAQCAtMzksNiArMjEsMjEgQEAKICAgICBCQVNFX0NPTkZJRzogIi0td2l0aC1taW5pbXVtIgogICAgIENGTEFHUzogIi1PMiIKIAorZ2NjOm1lZGl1bToKKyAgZXh0ZW5kczogLnRlc3QKKyAgdmFyaWFibGVzOgorICAgIEJBU0VfQ09ORklHOiAiLS13aXRoLW1pbmltdW0iCisgICAgQ09ORklHOiAiLS13aXRoLXRocmVhZHMgLS13aXRoLXRyZWUgLS13aXRoLXhwYXRoIC0td2l0aC1vdXRwdXQgLS13aXRoLWh0bWwiCisgICAgQ0ZMQUdTOiAiLU8yIgorCitnY2M6bGVnYWN5OgorICBleHRlbmRzOiAudGVzdAorICBvbmx5OgorICAgIC0gc2NoZWR1bGVzCisgIHZhcmlhYmxlczoKKyAgICBCQVNFX0NPTkZJRzogIi0td2l0aC1sZWdhY3kiCisgICAgQ0ZMQUdTOiAiLU8yIgorCiBnY2M6cHl0aG9uMzoKICAgZXh0ZW5kczogLnRlc3QKICAgdmFyaWFibGVzOgpAQCAtNDksNTMgKzQ2LDg4IEBACiBnY2M6c3RhdGljOgogICBleHRlbmRzOiAudGVzdAogICB2YXJpYWJsZXM6Ci0gICAgQ09ORklHOiAiLS1kaXNhYmxlLXNoYXJlZCAtLXdpdGhvdXQtcHl0aG9uIgorICAgIENPTkZJRzogIi0tZGlzYWJsZS1zaGFyZWQgLS13aXRob3V0LXB5dGhvbiAtLXdpdGhvdXQtbW9kdWxlcyIKICAgICBDRkxBR1M6ICItTzIiCiAKIGNsYW5nOmFzYW46CiAgIGV4dGVuZHM6IC50ZXN0CisgIHRhZ3M6CisgICAgLSBhc2FuCiAgIHZhcmlhYmxlczoKICAgICBDT05GSUc6ICItLXdpdGhvdXQtcHl0aG9uIgogICAgIENDOiBjbGFuZwotICAgIENGTEFHUzogIi1PMiAtZyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZnNhbml0aXplPWFkZHJlc3MsdW5kZWZpbmVkLHVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3csaW1wbGljaXQtY29udmVyc2lvbiAtZm5vLXNhbml0aXplLXJlY292ZXI9YWxsIC1Xbm8tZXJyb3I9Y2FzdC1hbGlnbiIKLSAgICAjIExlYWtTYW5pdGl6ZXIgcmVxdWlyZXMgU1lTX0NBUF9QVFJBQ0UKLSAgICBBU0FOX09QVElPTlM6ICJkZXRlY3RfbGVha3M9MCIKKyAgICBDRkxBR1M6ICItTzIgLWcgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZzYW5pdGl6ZT1hZGRyZXNzLHVuZGVmaW5lZCxpbnRlZ2VyIC1mbm8tc2FuaXRpemUtcmVjb3Zlcj1hbGwiCiAgICAgVUJTQU5fT1BUSU9OUzogInByaW50X3N0YWNrdHJhY2U9MSIKKyAgICBBU0FOX1NZTUJPTElaRVJfUEFUSDogIiRDSV9QUk9KRUNUX0RJUi8uZ2l0bGFiLWNpL2xsdm0tc3ltYm9saXplciIKIAogY2xhbmc6bXNhbjoKICAgZXh0ZW5kczogLnRlc3QKLSAgb25seToKLSAgICAtIHNjaGVkdWxlcworIyAgb25seToKKyMgICAgLSBzY2hlZHVsZXMKICAgdmFyaWFibGVzOgogICAgIENPTkZJRzogIi0td2l0aG91dC1weXRob24gLS13aXRob3V0LXpsaWIgLS13aXRob3V0LWx6bWEiCiAgICAgQ0M6IGNsYW5nCi0gICAgQ0ZMQUdTOiAiLU8yIC1nIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mc2FuaXRpemU9bWVtb3J5IC1Xbm8tZXJyb3I9Y2FzdC1hbGlnbiIKKyAgICBDRkxBR1M6ICItTzIgLWcgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZzYW5pdGl6ZT1tZW1vcnkiCisgICAgTVNBTl9TWU1CT0xJWkVSX1BBVEg6ICIkQ0lfUFJPSkVDVF9ESVIvLmdpdGxhYi1jaS9sbHZtLXN5bWJvbGl6ZXIiCisKKy5taW5ndzoKKyAgdGFnczoKKyAgICAtIHdpbjMyLXBzCisgIHZhcmlhYmxlczoKKyAgICBCQVNFX0NPTkZJRzogIi0td2l0aC1mdHAgLS13aXRoLWxlZ2FjeSAtLXdpdGgteHB0ci1sb2NzIgorICAgICMgRGlzYWJsZWQgZm9yIG5vdywgc2VlICM2NTgKKyAgICBDT05GSUc6ICItLXdpdGhvdXQtcHl0aG9uIgorICAgIENIRVJFX0lOVk9LSU5HOiAieWVzIgorICBiZWZvcmVfc2NyaXB0OgorICAgIC0gJEVudjpQYXRoPSJDOlxtc3lzNjRcdXNyXGJpbjskRW52OlBhdGgiCisgICAgLSBiYXNoIC1sYyAnc2ggLmdpdGxhYi1jaS9zZXR1cF9taW5ndy5zaCBhdXRvdG9vbHMnCisgIHNjcmlwdDoKKyAgICAtIGJhc2ggLWxjICdzaCAuZ2l0bGFiLWNpL3Rlc3Quc2gnCisgIGNhY2hlOgorICAgIGtleTogIiRNU1lTVEVNIgorICAgIHBhdGhzOgorICAgICAgLSBsaWJ4bWwyLWJ1aWxkL3htbGNvbmYvCisKK21pbmd3Onc2NC14ODZfNjQ6c2hhcmVkOgorICBleHRlbmRzOiAubWluZ3cKKyAgdmFyaWFibGVzOgorICAgIENGTEFHUzogIi1PMiIKKyAgICBNU1lTVEVNOiBNSU5HVzY0CisKK21pbmd3Onc2NC1pNjg2OnNoYXJlZDoKKyAgZXh0ZW5kczogLm1pbmd3CisgIG9ubHk6CisgICAgLSBzY2hlZHVsZXMKKyAgdmFyaWFibGVzOgorICAgIENGTEFHUzogIi1PMiIKKyAgICBNU1lTVEVNOiBNSU5HVzMyCisKKyMgRGlzYWJsZWQsIEdDQyBtaXNzaW5nPworLm1pbmd3Om1zeXM6c2hhcmVkOgorICBleHRlbmRzOiAubWluZ3cKKyAgdmFyaWFibGVzOgorICAgIENGTEFHUzogIi1PMiIKKyAgICBNU1lTVEVNOiBNU1lTCiAKIC5jbWFrZTpsaW51eDoKICAgaW1hZ2U6IHJlZ2lzdHJ5LmdpdGxhYi5nbm9tZS5vcmcvZ25vbWUvbGlieG1sMgorICBiZWZvcmVfc2NyaXB0OgorICAgIC0gcm0gLXJmIGxpYnhtbDItYnVpbGQKKyAgICAtIG1rZGlyIGxpYnhtbDItYnVpbGQKKyAgICAtIGxuIC1zIC90ZXN0cy94bWxjb25mIGxpYnhtbDItYnVpbGQKICAgc2NyaXB0OgotICAgIC0gY21ha2UgLURCVUlMRF9TSEFSRURfTElCUz0kQlVJTERfU0hBUkVEX0xJQlMgLURDTUFLRV9JTlNUQUxMX1BSRUZJWD1saWJ4bWwyLWluc3RhbGwgLURDTUFLRV9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvIC1ETElCWE1MMl9YTUxDT05GX1dPUktJTkdfRElSPS90ZXN0cyAtUyAuIC1CIGxpYnhtbDItYnVpbGQKLSAgICAtIGNtYWtlIC0tYnVpbGQgbGlieG1sMi1idWlsZCAtLXRhcmdldCBpbnN0YWxsCi0gICAgLSBta2RpciAtcCBsaWJ4bWwyLWluc3RhbGwvc2hhcmUvbGlieG1sMgotICAgIC0gY3AgQ29weXJpZ2h0IGxpYnhtbDItaW5zdGFsbC9zaGFyZS9saWJ4bWwyCi0gICAgLSBjZCBsaWJ4bWwyLWJ1aWxkCi0gICAgLSBjdGVzdCAtVlYKLSAgYWZ0ZXJfc2NyaXB0OgotICAgIC0gY2QgbGlieG1sMi1pbnN0YWxsCi0gICAgLSB0YXIgLWN6ZiAuLi9saWJ4bWwyLSRDSV9DT01NSVRfU0hPUlRfU0hBLSRDQy0kU1VGRklYLnRhci5neiAqCisgICAgLSBzaCAuZ2l0bGFiLWNpL3Rlc3RfY21ha2Uuc2gKICAgYXJ0aWZhY3RzOgogICAgIHBhdGhzOgotICAgICAgLSBsaWJ4bWwyLSRDSV9DT01NSVRfU0hPUlRfU0hBLSRDQy0kU1VGRklYLnRhci5negorICAgICAgLSBsaWJ4bWwyLSRDSV9DT01NSVRfU0hPUlRfU0hBLSRTVUZGSVgudGFyLmd6CiAgICAgZXhwaXJlX2luOiAxIGRheQogCiBjbWFrZTpsaW51eDpnY2M6c2hhcmVkOgogICBleHRlbmRzOiAuY21ha2U6bGludXgKLSAgb25seToKLSAgICAtIHNjaGVkdWxlcwogICB2YXJpYWJsZXM6CiAgICAgQlVJTERfU0hBUkVEX0xJQlM6ICJPTiIKICAgICBDQzogZ2NjCi0gICAgU1VGRklYOiBzaGFyZWQKKyAgICBTVUZGSVg6IGxpbnV4LWdjYy1zaGFyZWQKIAogY21ha2U6bGludXg6Z2NjOnN0YXRpYzoKICAgZXh0ZW5kczogLmNtYWtlOmxpbnV4CkBAIC0xMDQsNyArMTM2LDcgQEAKICAgdmFyaWFibGVzOgogICAgIEJVSUxEX1NIQVJFRF9MSUJTOiAiT0ZGIgogICAgIENDOiBnY2MKLSAgICBTVUZGSVg6IHN0YXRpYworICAgIFNVRkZJWDogbGludXgtZ2NjLXN0YXRpYwogCiBjbWFrZTpsaW51eDpjbGFuZzpzaGFyZWQ6CiAgIGV4dGVuZHM6IC5jbWFrZTpsaW51eApAQCAtMTEzLDcgKzE0NSw3IEBACiAgIHZhcmlhYmxlczoKICAgICBCVUlMRF9TSEFSRURfTElCUzogIk9OIgogICAgIENDOiBjbGFuZwotICAgIFNVRkZJWDogc2hhcmVkCisgICAgU1VGRklYOiBsaW51eC1jbGFuZy1zaGFyZWQKIAogY21ha2U6bGludXg6Y2xhbmc6c3RhdGljOgogICBleHRlbmRzOiAuY21ha2U6bGludXgKQEAgLTEyMiw0OCArMTU0LDI1IEBACiAgIHZhcmlhYmxlczoKICAgICBCVUlMRF9TSEFSRURfTElCUzogIk9GRiIKICAgICBDQzogY2xhbmcKLSAgICBTVUZGSVg6IHN0YXRpYworICAgIFNVRkZJWDogbGludXgtY2xhbmctc3RhdGljCiAKIC5jbWFrZTptaW5ndzoKICAgdGFnczoKICAgICAtIHdpbjMyLXBzCisgIHZhcmlhYmxlczoKKyAgICBDSEVSRV9JTlZPS0lORzogInllcyIKICAgYmVmb3JlX3NjcmlwdDoKLSAgICAtICJbTmV0LlNlcnZpY2VQb2ludE1hbmFnZXJdOjpTZWN1cml0eVByb3RvY29sID0gW05ldC5TZWN1cml0eVByb3RvY29sVHlwZV06OlRsczEyIgotICAgIC0gJEVudjpQYXRoPSJDOlxtc3lzNjRcJEVudjpNSU5HV19QQVRIXGJpbjtDOlxtc3lzNjRcdXNyXGJpbjskRW52OlBhdGgiCi0gICAgLSBwYWNtYW4gLS1ub2NvbmZpcm0gLVN5dQotICAgIC0gcGFjbWFuIC0tbm9jb25maXJtIC1TCi0gICAgICAgICRFbnY6TUlOR1dfUEFDS0FHRV9QUkVGSVgtY21ha2UKLSAgICAgICAgJEVudjpNSU5HV19QQUNLQUdFX1BSRUZJWC1saWJpY29udgotICAgICAgICAkRW52Ok1JTkdXX1BBQ0tBR0VfUFJFRklYLW5pbmphCi0gICAgICAgICRFbnY6TUlOR1dfUEFDS0FHRV9QUkVGSVgtcHl0aG9uCi0gICAgICAgICRFbnY6TUlOR1dfUEFDS0FHRV9QUkVGSVgtcHl0aG9uMgotICAgICAgICAkRW52Ok1JTkdXX1BBQ0tBR0VfUFJFRklYLXh6Ci0gICAgICAgICRFbnY6TUlOR1dfUEFDS0FHRV9QUkVGSVgtemxpYgotICAgIC0gaWYgKC1ub3QgKFRlc3QtUGF0aCA3emEuZXhlKSkgewotICAgICAgICBJbnZva2UtV2ViUmVxdWVzdCAtVXJpIGh0dHBzOi8vd3d3LjctemlwLm9yZy9hLzd6MTkwMC1leHRyYS43eiAtT3V0RmlsZSA3ejE5MDAtZXh0cmEuN3ogOwotICAgICAgICBjbWFrZSAtRSB0YXIgeGYgN3oxOTAwLWV4dHJhLjd6IDd6YS5leGUKLSAgICAgIH0KLSAgICAtIGlmICgtbm90IChUZXN0LVBhdGggbGlieG1sMi1idWlsZC94bWxjb25mKSkgewotICAgICAgICBJbnZva2UtV2ViUmVxdWVzdCAtVXJpIGh0dHBzOi8vd3d3LnczLm9yZy9YTUwvVGVzdC94bWx0czIwMDgwODI3LnRhci5neiAtT3V0RmlsZSB4bWx0czIwMDgwODI3LnRhci5neiA7Ci0gICAgICAgIC5cN3phLmV4ZSB4IHhtbHRzMjAwODA4MjcudGFyLmd6IC1vbGlieG1sMi1idWlsZAotICAgICAgfQorICAgIC0gJEVudjpQYXRoPSJDOlxtc3lzNjRcdXNyXGJpbjskRW52OlBhdGgiCisgICAgLSBiYXNoIC1sYyAnc2ggLmdpdGxhYi1jaS9zZXR1cF9taW5ndy5zaCBjbWFrZSBuaW5qYScKICAgc2NyaXB0OgotICAgIC0gY21ha2UgLUcgTmluamEgLURCVUlMRF9TSEFSRURfTElCUz0iJEVudjpCVUlMRF9TSEFSRURfTElCUyIgLURDTUFLRV9JTlNUQUxMX1BSRUZJWD1saWJ4bWwyLWluc3RhbGwgLURDTUFLRV9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvIC1TIC4gLUIgbGlieG1sMi1idWlsZAotICAgIC0gY21ha2UgLS1idWlsZCBsaWJ4bWwyLWJ1aWxkIC0tdGFyZ2V0IGluc3RhbGwKLSAgICAtIE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgbGlieG1sMi1pbnN0YWxsXHNoYXJlXGxpYnhtbDIKLSAgICAtIENvcHktSXRlbSBDb3B5cmlnaHQgbGlieG1sMi1pbnN0YWxsXHNoYXJlXGxpYnhtbDIKLSAgICAtIGNkIGxpYnhtbDItYnVpbGQKLSAgICAtIGN0ZXN0IC1WVgotICBhZnRlcl9zY3JpcHQ6Ci0gICAgLSAuXDd6YS5leGUgYSBsaWJ4bWwyLSRFbnY6Q0lfQ09NTUlUX1NIT1JUX1NIQS0kRW52Ok1JTkdXX1BBQ0tBR0VfUFJFRklYLSRFbnY6U1VGRklYLjd6IC5cbGlieG1sMi1pbnN0YWxsXCoKKyAgICAtIGJhc2ggLWxjICdzaCAuZ2l0bGFiLWNpL3Rlc3RfY21ha2Uuc2ggLUcgTmluamEnCiAgIGNhY2hlOgotICAgIGtleTogIiRNSU5HV19QQUNLQUdFX1BSRUZJWCIKKyAgICBrZXk6ICIkTVNZU1RFTSIKICAgICBwYXRoczoKICAgICAgIC0gbGlieG1sMi1idWlsZC94bWxjb25mLwotICAgICAgLSA3emEuZXhlCiAgIGFydGlmYWN0czoKICAgICBwYXRoczoKLSAgICAgIC0gbGlieG1sMi0kRW52OkNJX0NPTU1JVF9TSE9SVF9TSEEtJEVudjpNSU5HV19QQUNLQUdFX1BSRUZJWC0kRW52OlNVRkZJWC43egorICAgICAgLSBsaWJ4bWwyLSRFbnY6Q0lfQ09NTUlUX1NIT1JUX1NIQS0kRW52OlNVRkZJWC50YXIuZ3oKICAgICBleHBpcmVfaW46IDEgZGF5CiAKIGNtYWtlOm1pbmd3Onc2NC1pNjg2OnNoYXJlZDoKQEAgLTE3Miw5ICsxODEsOCBAQAogICAgIC0gc2NoZWR1bGVzCiAgIHZhcmlhYmxlczoKICAgICBCVUlMRF9TSEFSRURfTElCUzogIk9OIgotICAgIE1JTkdXX1BBQ0tBR0VfUFJFRklYOiBtaW5ndy13NjQtaTY4NgotICAgIE1JTkdXX1BBVEg6IG1pbmd3MzIKLSAgICBTVUZGSVg6IHNoYXJlZAorICAgIE1TWVNURU06IE1JTkdXMzIKKyAgICBTVUZGSVg6IG1pbmd3LXc2NC1pNjg2LXNoYXJlZAogCiBjbWFrZTptaW5ndzp3NjQtaTY4NjpzdGF0aWM6CiAgIGV4dGVuZHM6IC5jbWFrZTptaW5ndwpAQCAtMTgyLDE3ICsxOTAsMTUgQEAKICAgICAtIHNjaGVkdWxlcwogICB2YXJpYWJsZXM6CiAgICAgQlVJTERfU0hBUkVEX0xJQlM6ICJPRkYiCi0gICAgTUlOR1dfUEFDS0FHRV9QUkVGSVg6IG1pbmd3LXc2NC1pNjg2Ci0gICAgTUlOR1dfUEFUSDogbWluZ3czMgotICAgIFNVRkZJWDogc3RhdGljCisgICAgTVNZU1RFTTogTUlOR1czMgorICAgIFNVRkZJWDogbWluZ3ctdzY0LWk2ODYtc3RhdGljCiAKIGNtYWtlOm1pbmd3Onc2NC14ODZfNjQ6c2hhcmVkOgogICBleHRlbmRzOiAuY21ha2U6bWluZ3cKICAgdmFyaWFibGVzOgogICAgIEJVSUxEX1NIQVJFRF9MSUJTOiAiT04iCi0gICAgTUlOR1dfUEFDS0FHRV9QUkVGSVg6IG1pbmd3LXc2NC14ODZfNjQKLSAgICBNSU5HV19QQVRIOiBtaW5ndzY0Ci0gICAgU1VGRklYOiBzaGFyZWQKKyAgICBNU1lTVEVNOiBNSU5HVzY0CisgICAgU1VGRklYOiBtaW5ndy13NjQteDg2XzY0LXNoYXJlZAogCiBjbWFrZTptaW5ndzp3NjQteDg2XzY0OnN0YXRpYzoKICAgZXh0ZW5kczogLmNtYWtlOm1pbmd3CkBAIC0yMDAsNDEgKzIwNiwxOSBAQAogICAgIC0gc2NoZWR1bGVzCiAgIHZhcmlhYmxlczoKICAgICBCVUlMRF9TSEFSRURfTElCUzogIk9GRiIKLSAgICBNSU5HV19QQUNLQUdFX1BSRUZJWDogbWluZ3ctdzY0LXg4Nl82NAotICAgIE1JTkdXX1BBVEg6IG1pbmd3NjQKLSAgICBTVUZGSVg6IHN0YXRpYworICAgIE1TWVNURU06IE1JTkdXNjQKKyAgICBTVUZGSVg6IG1pbmd3LXc2NC14ODZfNjQtc3RhdGljCiAKIC5jbWFrZTptc3ZjOgogICB0YWdzOgogICAgIC0gd2luMzItcHMKICAgdmFyaWFibGVzOgorICAgICMgTVNWQyB3YXJucyB3aGVuIGNhc3RpbmcgYGNvbnN0IGNoYXIgKipgIHRvIGB2b2lkICpgIHdoaWNoIGlzIHdyb25nLgorICAgICMgRGlzYWJsZSB3YXJuaW5nIEM0MDkwLgorICAgIENGTEFHUzogL1dYIC93ZDQwOTAKICAgICBDTUFLRV9WRVJTSU9OOiAzLjE5LjQKLSAgYmVmb3JlX3NjcmlwdDoKLSAgICAtICJbTmV0LlNlcnZpY2VQb2ludE1hbmFnZXJdOjpTZWN1cml0eVByb3RvY29sID0gW05ldC5TZWN1cml0eVByb3RvY29sVHlwZV06OlRsczEyIgotICAgIC0gaWYgKC1ub3QgKFRlc3QtUGF0aCBjbWFrZS0kRW52OkNNQUtFX1ZFUlNJT04td2luNjQteDY0KSkgewotICAgICAgICBJbnZva2UtV2ViUmVxdWVzdCAtVXJpIGh0dHA6Ly9naXRodWIuY29tL0tpdHdhcmUvQ01ha2UvcmVsZWFzZXMvZG93bmxvYWQvdiRFbnY6Q01BS0VfVkVSU0lPTi9jbWFrZS0kRW52OkNNQUtFX1ZFUlNJT04td2luNjQteDY0LnppcCAtT3V0RmlsZSBjbWFrZS0kRW52OkNNQUtFX1ZFUlNJT04td2luNjQteDY0LnppcCA7Ci0gICAgICAgIEV4cGFuZC1BcmNoaXZlIGNtYWtlLSRFbnY6Q01BS0VfVkVSU0lPTi13aW42NC14NjQuemlwIC1EZXN0aW5hdGlvblBhdGggLgotICAgICAgfQotICAgIC0gJEVudjpQYXRoPSIkRW52OkNJX1BST0pFQ1RfRElSXGNtYWtlLSRFbnY6Q01BS0VfVkVSU0lPTi13aW42NC14NjRcYmluOyRFbnY6UGF0aCIKLSAgICAtIGlmICgtbm90IChUZXN0LVBhdGggN3phLmV4ZSkpIHsKLSAgICAgICAgSW52b2tlLVdlYlJlcXVlc3QgLVVyaSBodHRwczovL3d3dy43LXppcC5vcmcvYS83ejE5MDAtZXh0cmEuN3ogLU91dEZpbGUgN3oxOTAwLWV4dHJhLjd6IDsKLSAgICAgICAgY21ha2UgLUUgdGFyIHhmIDd6MTkwMC1leHRyYS43eiA3emEuZXhlCi0gICAgICB9Ci0gICAgLSBpZiAoLW5vdCAoVGVzdC1QYXRoIGxpYnhtbDItYnVpbGQveG1sY29uZikpIHsKLSAgICAgICAgSW52b2tlLVdlYlJlcXVlc3QgLVVyaSBodHRwczovL3d3dy53My5vcmcvWE1ML1Rlc3QveG1sdHMyMDA4MDgyNy50YXIuZ3ogLU91dEZpbGUgeG1sdHMyMDA4MDgyNy50YXIuZ3ogOwotICAgICAgICAuXDd6YS5leGUgeCB4bWx0czIwMDgwODI3LnRhci5neiAtb2xpYnhtbDItYnVpbGQKLSAgICAgIH0KICAgc2NyaXB0OgotICAgIC0gY21ha2UgLURCVUlMRF9TSEFSRURfTElCUz0iJEVudjpCVUlMRF9TSEFSRURfTElCUyIgLURDTUFLRV9JTlNUQUxMX1BSRUZJWD1saWJ4bWwyLWluc3RhbGwgLURMSUJYTUwyX1dJVEhfSUNPTlY9T0ZGIC1ETElCWE1MMl9XSVRIX0xaTUE9T0ZGIC1ETElCWE1MMl9XSVRIX1BZVEhPTj1PRkYgLURMSUJYTUwyX1dJVEhfWkxJQj1PRkYgLVMgLiAtQiBsaWJ4bWwyLWJ1aWxkCi0gICAgLSBjbWFrZSAtLWJ1aWxkIGxpYnhtbDItYnVpbGQgLS1jb25maWcgRGVidWcgLS10YXJnZXQgaW5zdGFsbAotICAgIC0gY21ha2UgLS1idWlsZCBsaWJ4bWwyLWJ1aWxkIC0tY29uZmlnIFJlbGVhc2UgLS10YXJnZXQgaW5zdGFsbAotICAgIC0gTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSBsaWJ4bWwyLWluc3RhbGxcc2hhcmVcbGlieG1sMgotICAgIC0gQ29weS1JdGVtIENvcHlyaWdodCBsaWJ4bWwyLWluc3RhbGxcc2hhcmVcbGlieG1sMgotICAgIC0gY2QgbGlieG1sMi1idWlsZAotICAgIC0gY3Rlc3QgLUMgRGVidWcgLVZWCi0gICAgLSBjdGVzdCAtQyBSZWxlYXNlIC1WVgotICBhZnRlcl9zY3JpcHQ6Ci0gICAgLSAuXDd6YS5leGUgYSBsaWJ4bWwyLSRFbnY6Q0lfQ09NTUlUX1NIT1JUX1NIQS0kRW52OkNNQUtFX0dFTkVSQVRPUl9UT09MU0VULSRFbnY6Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLSRFbnY6U1VGRklYLjd6IC5cbGlieG1sMi1pbnN0YWxsXCoKKyAgICAtIC5naXRsYWItY2kvVGVzdC1Nc3ZjCiAgIGNhY2hlOgogICAgIGtleTogIm1zdmMiCiAgICAgcGF0aHM6CmRpZmYgLS1naXQgYS8uZ2l0bGFiLWNpL0RvY2tlcmZpbGUgYi8uZ2l0bGFiLWNpL0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzN2M3ZAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWItY2kvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDE2IEBACisjIFRoZSBpbWFnZSBpcyBhbHNvIHVzZWQgZm9yIGxpYnhzbHQsIHRoYXQncyB3aHkgd2UgbmVlZCBnaXQgYW5kCisjIGxpYmdjcnlwdC1kZXYuCisKK0ZST00gdWJ1bnR1OjIyLjEwCitFTlYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlCitSVU4gYXB0LWdldCB1cGRhdGUgJiYgXAorICAgIGFwdC1nZXQgdXBncmFkZSAteSAmJiBcCisgICAgYXB0LWdldCBpbnN0YWxsIC15IC0tbm8taW5zdGFsbC1yZWNvbW1lbmRzIFwKKyAgICAgICAgY3VybCBnaXQgY2EtY2VydGlmaWNhdGVzIFwKKyAgICAgICAgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBwa2ctY29uZmlnIFwKKyAgICAgICAgbWFrZSBnY2MgY2xhbmcgbGx2bSBcCisgICAgICAgIHpsaWIxZy1kZXYgbGlibHptYS1kZXYgbGliZ2NyeXB0LWRldiBcCisgICAgICAgIHB5dGhvbjItZGV2IHB5dGhvbjMtZGV2IFwKKyAgICAgICAgY21ha2UKK1dPUktESVIgL3Rlc3RzCitSVU4gY3VybCBodHRwczovL3d3dy53My5vcmcvWE1ML1Rlc3QveG1sdHMyMDA4MDgyNy50YXIuZ3ogfHRhciB4egpkaWZmIC0tZ2l0IGEvLmdpdGxhYi1jaS9UZXN0LU1zdmMucHMxIGIvLmdpdGxhYi1jaS9UZXN0LU1zdmMucHMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NmQ3NWMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiLWNpL1Rlc3QtTXN2Yy5wczEKQEAgLTAsMCArMSw0OSBAQAorW05ldC5TZXJ2aWNlUG9pbnRNYW5hZ2VyXTo6U2VjdXJpdHlQcm90b2NvbCA9IFtOZXQuU2VjdXJpdHlQcm90b2NvbFR5cGVdOjpUbHMxMgorCitpZiAoLW5vdCAoVGVzdC1QYXRoIGNtYWtlLSRFbnY6Q01BS0VfVkVSU0lPTi13aW42NC14NjQpKSB7CisgICAgSW52b2tlLVdlYlJlcXVlc3QgYAorICAgICAgICAtVXJpIGh0dHA6Ly9naXRodWIuY29tL0tpdHdhcmUvQ01ha2UvcmVsZWFzZXMvZG93bmxvYWQvdiRFbnY6Q01BS0VfVkVSU0lPTi9jbWFrZS0kRW52OkNNQUtFX1ZFUlNJT04td2luNjQteDY0LnppcCBgCisgICAgICAgIC1PdXRGaWxlIGNtYWtlLSRFbnY6Q01BS0VfVkVSU0lPTi13aW42NC14NjQuemlwCisgICAgRXhwYW5kLUFyY2hpdmUgY21ha2UtJEVudjpDTUFLRV9WRVJTSU9OLXdpbjY0LXg2NC56aXAgLURlc3RpbmF0aW9uUGF0aCAuCit9CiskRW52OlBhdGg9IiRFbnY6Q0lfUFJPSkVDVF9ESVJcY21ha2UtJEVudjpDTUFLRV9WRVJTSU9OLXdpbjY0LXg2NFxiaW47JEVudjpQYXRoIgorCitpZiAoLW5vdCAoVGVzdC1QYXRoIDd6YS5leGUpKSB7CisgICAgSW52b2tlLVdlYlJlcXVlc3QgYAorICAgICAgICAtVXJpIGh0dHBzOi8vd3d3LjctemlwLm9yZy9hLzd6MTkwMC1leHRyYS43eiBgCisgICAgICAgIC1PdXRGaWxlIDd6MTkwMC1leHRyYS43egorICAgIGNtYWtlIC1FIHRhciB4ZiA3ejE5MDAtZXh0cmEuN3ogN3phLmV4ZQorfQorCitpZiAoLW5vdCAoVGVzdC1QYXRoIGxpYnhtbDItYnVpbGQveG1sY29uZikpIHsKKyAgICBJbnZva2UtV2ViUmVxdWVzdCBgCisgICAgICAgIC1VcmkgaHR0cHM6Ly93d3cudzMub3JnL1hNTC9UZXN0L3htbHRzMjAwODA4MjcudGFyLmd6IGAKKyAgICAgICAgLU91dEZpbGUgeG1sdHMyMDA4MDgyNy50YXIuZ3ogOworICAgIC5cN3phLmV4ZSB4IHhtbHRzMjAwODA4MjcudGFyLmd6IC1vbGlieG1sMi1idWlsZAorfQorCitjbWFrZSBgCisgICAgLURCVUlMRF9TSEFSRURfTElCUz0iJEVudjpCVUlMRF9TSEFSRURfTElCUyIgYAorICAgIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9bGlieG1sMi1pbnN0YWxsIGAKKyAgICAtRExJQlhNTDJfV0lUSF9JQ09OVj1PRkYgYAorICAgIC1ETElCWE1MMl9XSVRIX0xaTUE9T0ZGIGAKKyAgICAtRExJQlhNTDJfV0lUSF9QWVRIT049T0ZGIGAKKyAgICAtRExJQlhNTDJfV0lUSF9aTElCPU9GRiBgCisgICAgLVMgLiAtQiBsaWJ4bWwyLWJ1aWxkCitjbWFrZSAtLWJ1aWxkIGxpYnhtbDItYnVpbGQgLS1jb25maWcgRGVidWcgLS10YXJnZXQgaW5zdGFsbAorY21ha2UgLS1idWlsZCBsaWJ4bWwyLWJ1aWxkIC0tY29uZmlnIFJlbGVhc2UgLS10YXJnZXQgaW5zdGFsbAorTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSBsaWJ4bWwyLWluc3RhbGxcc2hhcmVcbGlieG1sMgorQ29weS1JdGVtIENvcHlyaWdodCBsaWJ4bWwyLWluc3RhbGxcc2hhcmVcbGlieG1sMgorCitjZCBsaWJ4bWwyLWJ1aWxkCitjdGVzdCAtQyBEZWJ1ZyAtVlYKK2lmICgkTGFzdEV4aXRDb2RlIC1uZSAwKSB7CisgICAgdGhyb3cgImN0ZXN0IGZhaWxlZCIKK30KK2N0ZXN0IC1DIFJlbGVhc2UgLVZWCitpZiAoJExhc3RFeGl0Q29kZSAtbmUgMCkgeworICAgIHRocm93ICJjdGVzdCBmYWlsZWQiCit9CitjZCAuLgorCisuXDd6YS5leGUgYSBsaWJ4bWwyLSRFbnY6Q0lfQ09NTUlUX1NIT1JUX1NIQS0kRW52OkNNQUtFX0dFTkVSQVRPUl9UT09MU0VULSRFbnY6Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLSRFbnY6U1VGRklYLjd6IC5cbGlieG1sMi1pbnN0YWxsXCoKZGlmZiAtLWdpdCBhLy5naXRsYWItY2kvbGx2bS1zeW1ib2xpemVyIGIvLmdpdGxhYi1jaS9sbHZtLXN5bWJvbGl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2ZjODVlOAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWItY2kvbGx2bS1zeW1ib2xpemVyCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoCisKKyMgTmV3ZXIgdmVyc2lvbnMgb2YgbGx2bS1zeW1ib2xpemVyIHJlcXVpcmUgbGlieG1sMiB0aGVtc2VsdmVzLiBSdW5uaW5nCisjIGEgdGVzdCBwcm9ncmFtIHdpdGggTERfTElCUkFSWV9QQVRIIHNldCB0byAubGlicyBtYWtlcyBsbHZtLXN5bWJvbGl6ZXIKKyMgcGljayB1cCB0aGUgdGVzdGVkIGRldmVsb3BtZW50IHZlcnNpb24gb2YgbGlieG1sMiB3aGljaCBicmVha3MKKyMgY29tcGxldGVseSBpZiB0aGUgYnVpbGQgaXMgaW5zdHJ1bWVudGVkIHdpdGggQVNhbi4gVGhpcyB3cmFwcGVyIHNjcmlwdAorIyBpbnZva2VzIGxsdm0tc3ltYm9saXplciB3aXRoIGFuIGVtcHR5IExEX0xJQlJBUllfUEFUSC4KKworTERfTElCUkFSWV9QQVRIPScnIGxsdm0tc3ltYm9saXplciAiJEAiCmRpZmYgLS1naXQgYS8uZ2l0bGFiLWNpL3NldHVwX21pbmd3LnNoIGIvLmdpdGxhYi1jaS9zZXR1cF9taW5ndy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTYxYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi1jaS9zZXR1cF9taW5ndy5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKworcGFjbWFuIC0tbm9jb25maXJtIC1TeXUKKworcHJlZml4PQoraWYgWyAtbiAiJE1JTkdXX1BBQ0tBR0VfUFJFRklYIiBdOyB0aGVuCisgICAgcHJlZml4PSIke01JTkdXX1BBQ0tBR0VfUFJFRklYfS0iCitmaQorZm9yIG1vZHVsZSBpbiBsaWJpY29udiBweXRob24geHogemxpYiAiJEAiOyBkbworICAgIHBhY21hbiAtLW5vY29uZmlybSAtUyAtLW5lZWRlZCAke3ByZWZpeH0kbW9kdWxlCitkb25lCisKK2lmIFsgISAtZSBsaWJ4bWwyLWJ1aWxkL3htbGNvbmYgXTsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnhtbDItYnVpbGQKKyAgICB3Z2V0IGh0dHBzOi8vd3d3LnczLm9yZy9YTUwvVGVzdC94bWx0czIwMDgwODI3LnRhciAtTyAtIHwKKyAgICAgICB0YXIgLXggLUMgbGlieG1sMi1idWlsZAorZmkKZGlmZiAtLWdpdCBhLy5naXRsYWItY2kvdGVzdC5zaCBiLy5naXRsYWItY2kvdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg5NDJmCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi1jaS90ZXN0LnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCitjZCBsaWJ4bWwyLWJ1aWxkCitzaCAuLi9hdXRvZ2VuLnNoICRCQVNFX0NPTkZJRyAkQ09ORklHCittYWtlIC1qJChucHJvYykgVj0xIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorbWFrZSBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIgY2hlY2sKZGlmZiAtLWdpdCBhLy5naXRsYWItY2kvdGVzdF9jbWFrZS5zaCBiLy5naXRsYWItY2kvdGVzdF9jbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWMyMmE4Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi1jaS90ZXN0X2NtYWtlLnNoCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiIFwKK2NtYWtlICIkQCIgXAorICAgIC1EQlVJTERfU0hBUkVEX0xJQlM9JEJVSUxEX1NIQVJFRF9MSUJTIFwKKyAgICAtRENNQUtFX0lOU1RBTExfUFJFRklYPWxpYnhtbDItaW5zdGFsbCBcCisgICAgLURDTUFLRV9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvIFwKKyAgICAtUyAuIC1CIGxpYnhtbDItYnVpbGQKK2NtYWtlIC0tYnVpbGQgbGlieG1sMi1idWlsZCAtLXRhcmdldCBpbnN0YWxsCisKKyhjZCBsaWJ4bWwyLWJ1aWxkICYmIGN0ZXN0IC1WVikKKworbWtkaXIgLXAgbGlieG1sMi1pbnN0YWxsL3NoYXJlL2xpYnhtbDIKK2NwIENvcHlyaWdodCBsaWJ4bWwyLWluc3RhbGwvc2hhcmUvbGlieG1sMgorKGNkIGxpYnhtbDItaW5zdGFsbCAmJgorICAgIHRhciAtY3pmIC4uL2xpYnhtbDItJENJX0NPTU1JVF9TSE9SVF9TSEEtJFNVRkZJWC50YXIuZ3ogKikKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWZkYzJlNi4uM2EwNzRkYSAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNSkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE4KQogCiBmaWxlKFNUUklOR1MgImNvbmZpZ3VyZS5hYyIgQ09ORklHVVJFX0FDX0xJTkVTKQogZm9yZWFjaChsaW5lICR7Q09ORklHVVJFX0FDX0xJTkVTfSkKQEAgLTE2LDkgKzE2LDExIEBACiBpbmNsdWRlKENoZWNrRnVuY3Rpb25FeGlzdHMpCiBpbmNsdWRlKENoZWNrSW5jbHVkZUZpbGVzKQogaW5jbHVkZShDaGVja0xpYnJhcnlFeGlzdHMpCitpbmNsdWRlKENoZWNrTGlua2VyRmxhZykKIGluY2x1ZGUoQ2hlY2tTdHJ1Y3RIYXNNZW1iZXIpCiBpbmNsdWRlKENoZWNrU3ltYm9sRXhpc3RzKQogaW5jbHVkZShDTWFrZVBhY2thZ2VDb25maWdIZWxwZXJzKQoraW5jbHVkZShGaW5kUGtnQ29uZmlnKQogaW5jbHVkZShHTlVJbnN0YWxsRGlycykKIAogb3B0aW9uKEJVSUxEX1NIQVJFRF9MSUJTICJCdWlsZCBzaGFyZWQgbGlicmFyaWVzIiBPTikKQEAgLTQ0LDEzICs0NiwxMyBAQAogb3B0aW9uKExJQlhNTDJfV0lUSF9QWVRIT04gIkJ1aWxkIFB5dGhvbiBiaW5kaW5ncyIgT04pCiBvcHRpb24oTElCWE1MMl9XSVRIX1JFQURFUiAiQWRkIHRoZSB4bWxSZWFkZXIgcGFyc2luZyBpbnRlcmZhY2UiIE9OKQogb3B0aW9uKExJQlhNTDJfV0lUSF9SRUdFWFBTICJBZGQgUmVndWxhciBFeHByZXNzaW9ucyBzdXBwb3J0IiBPTikKLW9wdGlvbihMSUJYTUwyX1dJVEhfUlVOX0RFQlVHICJBZGQgdGhlIHJ1bnRpbWUgZGVidWdnaW5nIG1vZHVsZSIgT0ZGKQogb3B0aW9uKExJQlhNTDJfV0lUSF9TQVgxICJBZGQgdGhlIG9sZGVyIFNBWDEgaW50ZXJmYWNlIiBPTikKIG9wdGlvbihMSUJYTUwyX1dJVEhfU0NIRU1BUyAiQWRkIFJlbGF4LU5HIGFuZCBTY2hlbWFzIHN1cHBvcnQiIE9OKQogb3B0aW9uKExJQlhNTDJfV0lUSF9TQ0hFTUFUUk9OICJBZGQgU2NoZW1hdHJvbiBzdXBwb3J0IiBPTikKIG9wdGlvbihMSUJYTUwyX1dJVEhfVEVTVFMgIkJ1aWxkIHRlc3RzIiBPTikKIG9wdGlvbihMSUJYTUwyX1dJVEhfVEhSRUFEUyAiQWRkIG11bHRpdGhyZWFkIHN1cHBvcnQiIE9OKQogb3B0aW9uKExJQlhNTDJfV0lUSF9USFJFQURfQUxMT0MgIkFkZCBwZXItdGhyZWFkIG1lbW9yeSIgT0ZGKQorb3B0aW9uKExJQlhNTDJfV0lUSF9UTFMgIkVuYWJsZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSIgT0ZGKQogb3B0aW9uKExJQlhNTDJfV0lUSF9UUkVFICJBZGQgdGhlIERPTSBsaWtlIHRyZWUgbWFuaXB1bGF0aW9uIEFQSXMiIE9OKQogc2V0KExJQlhNTDJfV0lUSF9UUklPIE9GRikKIHNldChMSUJYTUwyX1dJVEhfVU5JQ09ERSBPTikKQEAgLTYzLDQxICs2NSwxNiBAQAogb3B0aW9uKExJQlhNTDJfV0lUSF9aTElCICJVc2UgbGlieiIgT04pCiBzZXQoTElCWE1MMl9YTUxDT05GX1dPUktJTkdfRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSBDQUNIRSBQQVRIICJXb3JraW5nIGRpcmVjdG9yeSBmb3IgWE1MIENvbmZvcm1hbmNlIFRlc3QgU3VpdGUiKQogCi1pZihMSUJYTUwyX1dJVEhfSUNPTlYpCi0JZmluZF9wYWNrYWdlKEljb252IFJFUVVJUkVEKQotZW5kaWYoKQotCi1pZihMSUJYTUwyX1dJVEhfSUNVKQotCWZpbmRfcGFja2FnZShJQ1UgUkVRVUlSRUQgQ09NUE9ORU5UUyBkYXRhIGkxOG4gdWMpCi1lbmRpZigpCi0KLWlmKExJQlhNTDJfV0lUSF9MWk1BKQotCWZpbmRfcGFja2FnZShMaWJMWk1BIFJFUVVJUkVEKQotZW5kaWYoKQotCiBpZihMSUJYTUwyX1dJVEhfUFlUSE9OKQogCWNoZWNrX2luY2x1ZGVfZmlsZXModW5pc3RkLmggSEFWRV9VTklTVERfSCkKIAljaGVja19zeW1ib2xfZXhpc3RzKEZfR0VURkwgZmNudGwuaCBIQVZFX0ZfR0VURkwpCi0JaWYoSEFWRV9VTklTVERfSCBBTkQgSEFWRV9GX0dFVEZMKQotCQlmaW5kX3BhY2thZ2UoUHl0aG9uIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQgUkVRVUlSRUQpCi0JZWxzZSgpCi0JCWZpbmRfcGFja2FnZShQeXRob24yIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQgUkVRVUlSRUQpCi0JCWFkZF9saWJyYXJ5KFB5dGhvbjo6UHl0aG9uIEFMSUFTIFB5dGhvbjI6OlB5dGhvbikKLQkJc2V0KFB5dGhvbl9FWEVDVVRBQkxFICR7UHl0aG9uMl9FWEVDVVRBQkxFfSkKLQkJc2V0KFB5dGhvbl9TSVRFQVJDSCAke1B5dGhvbjJfU0lURUFSQ0h9KQotCWVuZGlmKCkKLQlzZXQoTElCWE1MMl9QWVRIT05fSU5TVEFMTF9ESVIgJHtQeXRob25fU0lURUFSQ0h9IENBQ0hFIFBBVEggIlB5dGhvbiBiaW5kaW5ncyBpbnN0YWxsIGRpcmVjdG9yeSIpCisJZmluZF9wYWNrYWdlKFB5dGhvbiBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50IFJFUVVJUkVEKQorICAgICAgICAjc2V0KExJQlhNTDJfUFlUSE9OX0lOU1RBTExfRElSICR7UHl0aG9uX1NJVEVBUkNIfSBDQUNIRSBQQVRIICJQeXRob24gYmluZGluZ3MgaW5zdGFsbCBkaXJlY3RvcnkiKQorICAgICAgICBzZXQoTElCWE1MMl9QWVRIT05fSU5TVEFMTF9ESVIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L3B5dGhvbiIKKwkgICAgQ0FDSEUgUEFUSCAiUHl0aG9uIGJpbmRpbmdzIGluc3RhbGwgZGlyZWN0b3J5IikKIGVuZGlmKCkKIAotaWYoTElCWE1MMl9XSVRIX1RIUkVBRFMpCi0JZmluZF9wYWNrYWdlKFRocmVhZHMgUkVRVUlSRUQpCi1lbmRpZigpCi0KLWlmKExJQlhNTDJfV0lUSF9aTElCKQotCWZpbmRfcGFja2FnZShaTElCIFJFUVVJUkVEKQotZW5kaWYoKQotCi1mb3JlYWNoKFZBUklBQkxFIElOIElURU1TIFdJVEhfQVVUT01BVEEgV0lUSF9DMTROIFdJVEhfQ0FUQUxPRyBXSVRIX0RFQlVHIFdJVEhfRVhQUiBXSVRIX0ZUUCBXSVRIX0hUTUwgV0lUSF9IVFRQIFdJVEhfSUNPTlYgV0lUSF9JQ1UgV0lUSF9JU084ODU5WCBXSVRIX0xFR0FDWSBXSVRIX0xaTUEgV0lUSF9NRU1fREVCVUcgV0lUSF9NT0RVTEVTIFdJVEhfT1VUUFVUIFdJVEhfUEFUVEVSTiBXSVRIX1BVU0ggV0lUSF9SRUFERVIgV0lUSF9SRUdFWFBTIFdJVEhfUlVOX0RFQlVHIFdJVEhfU0FYMSBXSVRIX1NDSEVNQVMgV0lUSF9TQ0hFTUFUUk9OIFdJVEhfVEhSRUFEUyBXSVRIX1RIUkVBRF9BTExPQyBXSVRIX1RSRUUgV0lUSF9UUklPIFdJVEhfVU5JQ09ERSBXSVRIX1ZBTElEIFdJVEhfV1JJVEVSIFdJVEhfWElOQ0xVREUgV0lUSF9YUEFUSCBXSVRIX1hQVFIgV0lUSF9YUFRSX0xPQ1MgV0lUSF9aTElCKQorZm9yZWFjaChWQVJJQUJMRSBJTiBJVEVNUyBXSVRIX0FVVE9NQVRBIFdJVEhfQzE0TiBXSVRIX0NBVEFMT0cgV0lUSF9ERUJVRyBXSVRIX0VYUFIgV0lUSF9GVFAgV0lUSF9IVE1MIFdJVEhfSFRUUCBXSVRIX0lDT05WIFdJVEhfSUNVIFdJVEhfSVNPODg1OVggV0lUSF9MRUdBQ1kgV0lUSF9MWk1BIFdJVEhfTUVNX0RFQlVHIFdJVEhfTU9EVUxFUyBXSVRIX09VVFBVVCBXSVRIX1BBVFRFUk4gV0lUSF9QVVNIIFdJVEhfUkVBREVSIFdJVEhfUkVHRVhQUyBXSVRIX1NBWDEgV0lUSF9TQ0hFTUFTIFdJVEhfU0NIRU1BVFJPTiBXSVRIX1RIUkVBRFMgV0lUSF9USFJFQURfQUxMT0MgV0lUSF9UUkVFIFdJVEhfVFJJTyBXSVRIX1VOSUNPREUgV0lUSF9WQUxJRCBXSVRIX1dSSVRFUiBXSVRIX1hJTkNMVURFIFdJVEhfWFBBVEggV0lUSF9YUFRSIFdJVEhfWFBUUl9MT0NTIFdJVEhfWkxJQikKIAlpZihMSUJYTUwyXyR7VkFSSUFCTEV9KQogCQlzZXQoJHtWQVJJQUJMRX0gMSkKIAllbHNlKCkKQEAgLTExNiwyMyArOTMsMzIgQEAKIHNldChNT0RVTEVfRVhURU5TSU9OICIke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH0iKQogCiBzZXQoUEFDS0FHRSAibGlieG1sMiIpCi1zZXQoUEFDS0FHRV9CVUdSRVBPUlQgInhtbEBnbm9tZS5vcmciKQogc2V0KFBBQ0tBR0VfTkFNRSAibGlieG1sMiIpCiBzZXQoUEFDS0FHRV9TVFJJTkcgImxpYnhtbDIgJHtWRVJTSU9OfSIpCiBzZXQoUEFDS0FHRV9UQVJOQU1FICJsaWJ4bWwyIikKIHNldChQQUNLQUdFX1VSTCAiaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIiKQogc2V0KFBBQ0tBR0VfVkVSU0lPTiAke1ZFUlNJT059KQogCi1pZihMSUJMWk1BX0ZPVU5EKQotCWxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBMaWJMWk1BOjpMaWJMWk1BKQoraWYoTElCWE1MMl9XSVRIX0lDT05WKQorCWZpbmRfcGFja2FnZShJY29udiBSRVFVSVJFRCkKIGVuZGlmKCkKIAotaWYoVGhyZWFkc19GT1VORCkKK2lmKExJQlhNTDJfV0lUSF9JQ1UpCisJZmluZF9wYWNrYWdlKElDVSBSRVFVSVJFRCBDT01QT05FTlRTIGRhdGEgaTE4biB1YykKK2VuZGlmKCkKKworaWYoTElCWE1MMl9XSVRIX0xaTUEpCisJZmluZF9wYWNrYWdlKExpYkxaTUEgUkVRVUlSRUQpCitlbmRpZigpCisKK2lmKExJQlhNTDJfV0lUSF9USFJFQURTKQorCWZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQorCXNldChUSFJFQURfTElCUyAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQogCWxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBUaHJlYWRzOjpUaHJlYWRzKQogZW5kaWYoKQogCi1pZihaTElCX0ZPVU5EKQotCWxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBaTElCOjpaTElCKQoraWYoTElCWE1MMl9XSVRIX1pMSUIpCisJZmluZF9wYWNrYWdlKFpMSUIgUkVRVUlSRUQpCiBlbmRpZigpCiAKIGlmIChOT1QgTVNWQykKQEAgLTE0NCwyMiArMTMwLDcgQEAKIAlpZihIQVZFX0FUVFJJQlVURV9ERVNUUlVDVE9SKQogCQlzZXQoQVRUUklCVVRFX0RFU1RSVUNUT1IgIl9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IpKSIpCiAJZW5kaWYoKQotCWNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKLQkJI2luY2x1ZGUgPG5ldGRiLmg+Ci0JCWludCBtYWluKCkgeyAodm9pZCkgZ2V0aG9zdGJ5bmFtZSgoY29uc3QgY2hhciopIFwiXCIpOyByZXR1cm4gMDsgfQotCSIgR0VUSE9TVEJZTkFNRV9BUkdfQ0FTVF9DT05TVCkKLQlpZihOT1QgR0VUSE9TVEJZTkFNRV9BUkdfQ0FTVF9DT05TVCkKLQkJc2V0KEdFVEhPU1RCWU5BTUVfQVJHX0NBU1QgIihjaGFyICopIikKLQllbHNlKCkKLQkJc2V0KEdFVEhPU1RCWU5BTUVfQVJHX0NBU1QgIi8qKi8iKQotCWVuZGlmKCkKIAljaGVja19pbmNsdWRlX2ZpbGVzKGFycGEvaW5ldC5oIEhBVkVfQVJQQV9JTkVUX0gpCi0JY2hlY2tfaW5jbHVkZV9maWxlcyhhcnBhL25hbWVzZXIuaCBIQVZFX0FSUEFfTkFNRVNFUl9IKQotCWNoZWNrX3N0cnVjdF9oYXNfbWVtYmVyKCJzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSIgc3NfZmFtaWx5ICJzeXMvc29ja2V0Lmg7c3lzL3R5cGVzLmgiIEhBVkVfU1NfRkFNSUxZKQotCWNoZWNrX3N0cnVjdF9oYXNfbWVtYmVyKCJzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSIgX19zc19mYW1pbHkgInN5cy9zb2NrZXQuaDtzeXMvdHlwZXMuaCIgSEFWRV9CUk9LRU5fU1NfRkFNSUxZKQotCWlmKEhBVkVfQlJPS0VOX1NTX0ZBTUlMWSkKLQkJc2V0KHNzX2ZhbWlseSBfX3NzX2ZhbWlseSkKLQllbmRpZigpCiAJY2hlY2tfZnVuY3Rpb25fZXhpc3RzKGNsYXNzIEhBVkVfQ0xBU1MpCiAJY2hlY2tfaW5jbHVkZV9maWxlcyhkbGZjbi5oIEhBVkVfRExGQ05fSCkKIAljaGVja19saWJyYXJ5X2V4aXN0cyhkbCBkbG9wZW4gIiIgSEFWRV9ETE9QRU4pCkBAIC0xNjcsNyArMTM4LDYgQEAKIAljaGVja19pbmNsdWRlX2ZpbGVzKGZjbnRsLmggSEFWRV9GQ05UTF9IKQogCWNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhmcGNsYXNzIEhBVkVfRlBDTEFTUykKIAljaGVja19mdW5jdGlvbl9leGlzdHMoZnRpbWUgSEFWRV9GVElNRSkKLQljaGVja19mdW5jdGlvbl9leGlzdHMoZ2V0YWRkcmluZm8gSEFWRV9HRVRBRERSSU5GTykKIAljaGVja19mdW5jdGlvbl9leGlzdHMoZ2V0dGltZW9mZGF5IEhBVkVfR0VUVElNRU9GREFZKQogCWNoZWNrX2luY2x1ZGVfZmlsZXMoaW50dHlwZXMuaCBIQVZFX0lOVFRZUEVTX0gpCiAJY2hlY2tfZnVuY3Rpb25fZXhpc3RzKGlzYXNjaWkgSEFWRV9JU0FTQ0lJKQpAQCAtMTc4LDkgKzE0OCw2IEBACiAJY2hlY2tfaW5jbHVkZV9maWxlcyhuZXRkYi5oIEhBVkVfTkVUREJfSCkKIAljaGVja19pbmNsdWRlX2ZpbGVzKG5ldGluZXQvaW4uaCBIQVZFX05FVElORVRfSU5fSCkKIAljaGVja19pbmNsdWRlX2ZpbGVzKHBvbGwuaCBIQVZFX1BPTExfSCkKLQljaGVja19mdW5jdGlvbl9leGlzdHMocHV0ZW52IEhBVkVfUFVURU5WKQotCWNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhyYW5kX3IgSEFWRV9SQU5EX1IpCi0JY2hlY2tfaW5jbHVkZV9maWxlcyhyZXNvbHYuaCBIQVZFX1JFU09MVl9IKQogCWNoZWNrX2xpYnJhcnlfZXhpc3RzKGRsZCBzaGxfbG9hZCAiIiBIQVZFX1NITExPQUQpCiAJY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHN0YXQgSEFWRV9TVEFUKQogCWNoZWNrX2luY2x1ZGVfZmlsZXMoc3RkaW50LmggSEFWRV9TVERJTlRfSCkKQEAgLTE5MCwyMSArMTU3LDkgQEAKIAljaGVja19pbmNsdWRlX2ZpbGVzKHN5cy9zdGF0LmggSEFWRV9TWVNfU1RBVF9IKQogCWNoZWNrX2luY2x1ZGVfZmlsZXMoc3lzL3RpbWViLmggSEFWRV9TWVNfVElNRUJfSCkKIAljaGVja19pbmNsdWRlX2ZpbGVzKHN5cy90aW1lLmggSEFWRV9TWVNfVElNRV9IKQotCWNoZWNrX2luY2x1ZGVfZmlsZXMoc3lzL3R5cGVzLmggSEFWRV9TWVNfVFlQRVNfSCkKIAljaGVja19pbmNsdWRlX2ZpbGVzKHVuaXN0ZC5oIEhBVkVfVU5JU1REX0gpCi0JY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHZhX2NvcHkgSEFWRV9WQV9DT1BZKQotCWNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhfX3ZhX2NvcHkgSEFWRV9fX1ZBX0NPUFkpCi0Jc2V0KExUX09CSkRJUiAiLmxpYnMvIikKLQljaGVja19jX3NvdXJjZV9jb21waWxlcygiCi0JCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0JCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJaW50IG1haW4oKSB7ICh2b2lkKSBzZW5kKDEsIChjb25zdCBjaGFyKikgXCJcIiwgMSwgMSk7IHJldHVybiAwOyB9Ci0JIiBTRU5EX0FSRzJfQ0FTVF9DT05TVCkKLQlpZihOT1QgU0VORF9BUkcyX0NBU1RfQ09OU1QpCi0JCXNldChTRU5EX0FSRzJfQ0FTVCAiKGNoYXIgKikiKQotCWVsc2UoKQotCQlzZXQoU0VORF9BUkcyX0NBU1QgIi8qKi8iKQotCWVuZGlmKCkKKwljaGVja19zeW1ib2xfZXhpc3RzKHZhX2NvcHkgc3RkYXJnLmggSEFWRV9WQV9DT1BZKQorCWNoZWNrX3N5bWJvbF9leGlzdHMoX192YV9jb3B5IHN0ZGFyZy5oIEhBVkVfX19WQV9DT1BZKQogCWNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKIAkJI2luY2x1ZGUgPHN0ZGFyZy5oPgogCQl2b2lkIGEodmFfbGlzdCogYXApIHt9OwpAQCAtMjE4LDcgKzE3Myw2IEBACiAJY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIgogCQkjaW5jbHVkZSA8c3RkZGVmLmg+CiAJCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0JCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAkJaW50IG1haW4oKSB7ICh2b2lkKSBnZXRzb2Nrb3B0KDEsIDEsIDEsIE5VTEwsIChzb2NrbGVuX3QqKSBOVUxMKTsgcmV0dXJuIDA7IH0KIAkiIFhNTF9TT0NLTEVOX1RfU09DS0xFTl9UKQogCWlmKFhNTF9TT0NLTEVOX1RfU09DS0xFTl9UKQpAQCAtMjI3LDcgKzE4MSw2IEBACiAJCWNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKIAkJCSNpbmNsdWRlIDxzdGRkZWYuaD4KIAkJCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0JCQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAJCQlpbnQgbWFpbigpIHsgKHZvaWQpIGdldHNvY2tvcHQoMSwgMSwgMSwgTlVMTCwgKHNpemVfdCopIE5VTEwpOyByZXR1cm4gMDsgfQogCQkiIFhNTF9TT0NLTEVOX1RfU0laRV9UKQogCQlpZihYTUxfU09DS0xFTl9UX1NJWkVfVCkKQEAgLTIzNiw3ICsxODksNiBAQAogCQkJY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIgogCQkJCSNpbmNsdWRlIDxzdGRkZWYuaD4KIAkJCQkjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotCQkJCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAkJCQlpbnQgbWFpbigpIHsgKHZvaWQpIGdldHNvY2tvcHQgKDEsIDEsIDEsIE5VTEwsIChpbnQqKSBOVUxMKTsgcmV0dXJuIDA7IH0KIAkJCSIgWE1MX1NPQ0tMRU5fVF9JTlQpCiAJCQlzZXQoWE1MX1NPQ0tMRU5fVCBpbnQpCkBAIC0yNDQsNiArMTk2LDMyIEBACiAJZW5kaWYoKQogZW5kaWYoKQogCitpZihMSUJYTUwyX1dJVEhfVExTKQorCWNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKAorCQkiX1RocmVhZF9sb2NhbCBpbnQgdjsgaW50IG1haW4oKXtyZXR1cm4gMDt9IgorCQlYTUxfVEhSRUFEX0xPQ0FMX0MxMQorCSkKKwlpZiAoWE1MX1RIUkVBRF9MT0NBTF9DMTEpCisJCXNldChYTUxfVEhSRUFEX0xPQ0FMICJfVGhyZWFkX2xvY2FsIikKKwllbHNlKCkKKwkJY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoCisJCQkiX190aHJlYWQgaW50IHY7IGludCBtYWluKCl7cmV0dXJuIDA7fSIKKwkJCVhNTF9USFJFQURfTE9DQUxfVEhSRUFECisJCSkKKwkJaWYgKFhNTF9USFJFQURfTE9DQUxfVEhSRUFEKQorCQkJc2V0KFhNTF9USFJFQURfTE9DQUwgIl9fdGhyZWFkIikKKwkJZWxzZSgpCisJCQljaGVja19jX3NvdXJjZV9jb21waWxlcygKKwkJCQkiX19kZWNsc3BlYyh0aHJlYWQpIGludCB2OyBpbnQgbWFpbigpe3JldHVybiAwO30iCisJCQkJWE1MX1RIUkVBRF9MT0NBTF9ERUNMU1BFQworCQkJKQorCQkJaWYgKFhNTF9USFJFQURfTE9DQUxfREVDTFNQRUMpCisJCQkJc2V0KFhNTF9USFJFQURfTE9DQUwgIl9fZGVjbHNwZWModGhyZWFkKSIpCisJCQllbmRpZigpCisJCWVuZGlmKCkKKwllbmRpZigpCitlbmRpZigpCisKIHNldCgKIAlMSUJYTUwyX0hEUlMKIAlpbmNsdWRlL2xpYnhtbC9jMTRuLmgKQEAgLTM2MiwyMiArMzQwLDkgQEAKIAogdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTGliWG1sMiBQUklWQVRFIFNZU0NPTkZESVI9IiR7Q01BS0VfSU5TVEFMTF9GVUxMX1NZU0NPTkZESVJ9IikKIAotaWYoTk9UIEJVSUxEX1NIQVJFRF9MSUJTKQotCXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKExpYlhtbDIgSU5URVJGQUNFIExJQlhNTF9TVEFUSUMpCi0Jc2V0KFhNTF9DRkxBR1MgIi1ETElCWE1MX1NUQVRJQyIpCi1lbmRpZigpCi0KLWlmKEJVSUxEX1NIQVJFRF9MSUJTIEFORCBVTklYIEFORCBOT1QgQVBQTEUpCi0JaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJDbGFuZyIgT1IgQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIikKLQkJdGFyZ2V0X2xpbmtfb3B0aW9ucyhMaWJYbWwyIFBSSVZBVEUgIi1XbCwtLXZlcnNpb24tc2NyaXB0PSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWJ4bWwyLnN5bXMiKQotCWVuZGlmKCkKLWVuZGlmKCkKLQogaWYoTElCWE1MMl9XSVRIX1RIUkVBRFMpCiAJdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTGliWG1sMiBQUklWQVRFIF9SRUVOVFJBTlQpCi0JaWYoV0lOMzIpCi0JCXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKExpYlhtbDIgUFJJVkFURSBIQVZFX1dJTjMyX1RIUkVBRFMpCi0JZWxzZSgpCisgICAgICAgIGlmKE5PVCBXSU4zMikKIAkJY2hlY2tfaW5jbHVkZV9maWxlcyhwdGhyZWFkLmggSEFWRV9QVEhSRUFEX0gpCiAJZW5kaWYoKQogZW5kaWYoKQpAQCAtMzkwLDE0ICszNTUsMTYgQEAKIAkkPElOU1RBTExfSU5URVJGQUNFOiQ8SU5TVEFMTF9QUkVGSVg+LyR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfS9saWJ4bWwyPgogKQogCi1pZihIQVZFX0RMT1BFTikKLQl0YXJnZXRfbGlua19saWJyYXJpZXMoTGliWG1sMiBQUklWQVRFIGRsKQotCXNldChNT0RVTEVfUExBVEZPUk1fTElCUyAiLWxkbCIpCi1lbmRpZigpCitpZihMSUJYTUwyX1dJVEhfTU9EVUxFUykKKwlpZihIQVZFX0RMT1BFTikKKwkJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKExpYlhtbDIgUFJJVkFURSBkbCkKKwkJc2V0KE1PRFVMRV9QTEFURk9STV9MSUJTICItbGRsIikKKwllbmRpZigpCiAKLWlmKEhBVkVfU0hMTE9BRCkKLQl0YXJnZXRfbGlua19saWJyYXJpZXMoTGliWG1sMiBQUklWQVRFIGRsZCkKLQlzZXQoTU9EVUxFX1BMQVRGT1JNX0xJQlMgIi1sZGxkIikKKwlpZihIQVZFX1NITExPQUQpCisJCXRhcmdldF9saW5rX2xpYnJhcmllcyhMaWJYbWwyIFBSSVZBVEUgZGxkKQorCQlzZXQoTU9EVUxFX1BMQVRGT1JNX0xJQlMgIi1sZGxkIikKKwllbmRpZigpCiBlbmRpZigpCiAKIGlmKFVOSVgpCkBAIC00MDcsNyArMzc0LDcgQEAKIAogaWYoV0lOMzIpCiAJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKExpYlhtbDIgUFJJVkFURSB3czJfMzIpCi0Jc2V0KFdJTjMyX0VYVFJBX0xJQkFERCAiLWx3czJfMzIiKQorCXNldChXSU5TT0NLX0xJQlMgIi1sd3MyXzMyIikKIGVuZGlmKCkKIAogaWYoTElCWE1MMl9XSVRIX0lDT05WKQpAQCAtNDIwLDI1ICszODcsNjEgQEAKIGlmKExJQlhNTDJfV0lUSF9JQ1UpCiAJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKExpYlhtbDIgUFJJVkFURSBJQ1U6OmRhdGEgSUNVOjppMThuIElDVTo6dWMpCiAJaWYoV0lOMzIpCi0JCXNldChJQ1VfTElCUyAiLWxpY3VkdCAtbGljdWluIC1saWN1dWMiKQorCQlzZXQoSUNVX0xERkxBR1MgIi1saWN1ZHQgLWxpY3VpbiAtbGljdXVjIikKIAllbHNlKCkKLQkJc2V0KElDVV9MSUJTICItbGljdWRhdGEgLWxpY3VpMThuIC1saWN1dWMiKQorCQlzZXQoSUNVX0xERkxBR1MgIi1saWN1ZGF0YSAtbGljdWkxOG4gLWxpY3V1YyIpCisJZW5kaWYoKQorCWxpc3QoQVBQRU5EIFhNTF9QUklWQVRFX0xJQlMgIiR7SUNVX0xERkxBR1N9IikKKwlwa2dfY2hlY2tfbW9kdWxlcyhJQ1VfUEMgSU1QT1JURURfVEFSR0VUIGljdS1pMThuKQorCWlmKElDVV9QQ19GT1VORCkKKwkJbGlzdChBUFBFTkQgWE1MX1BDX1JFUVVJUkVTIGljdS1pMThuKQorCWVsc2UoKQorCQlsaXN0KEFQUEVORCBYTUxfUENfTElCUyAiJHtJQ1VfTERGTEFHU30iKQogCWVuZGlmKCkKIGVuZGlmKCkKIAogaWYoTElCWE1MMl9XSVRIX0xaTUEpCiAJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKExpYlhtbDIgUFJJVkFURSBMaWJMWk1BOjpMaWJMWk1BKQotCXNldChMWk1BX0xJQlMgIi1sbHptYSIpCisJc2V0KExpYkxaTUFfTERGTEFHUyAiLWxsem1hIikKKwlsaXN0KEFQUEVORCBYTUxfUFJJVkFURV9MSUJTICIke0xpYkxaTUFfTERGTEFHU30iKQorCXBrZ19jaGVja19tb2R1bGVzKExpYkxaTUFfUEMgSU1QT1JURURfVEFSR0VUIGxpYmx6bWEpCisJaWYoTGliTFpNQV9QQ19GT1VORCkKKwkJbGlzdChBUFBFTkQgWE1MX1BDX1JFUVVJUkVTIGxpYmx6bWEpCisJZWxzZSgpCisJCWxpc3QoQVBQRU5EIFhNTF9QQ19MSUJTICIke0xpYkxaTUFfTERGTEFHU30iKQorCWVuZGlmKCkKIGVuZGlmKCkKIAogaWYoTElCWE1MMl9XSVRIX1RIUkVBRFMpCiAJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKExpYlhtbDIgUFJJVkFURSBUaHJlYWRzOjpUaHJlYWRzKQotCXNldChUSFJFQURfTElCUyAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQogZW5kaWYoKQogCiBpZihMSUJYTUwyX1dJVEhfWkxJQikKIAl0YXJnZXRfbGlua19saWJyYXJpZXMoTGliWG1sMiBQUklWQVRFIFpMSUI6OlpMSUIpCi0Jc2V0KFpfTElCUyAiLWx6IikKKwlzZXQoWkxJQl9MREZMQUdTICItbHoiKQorCWxpc3QoQVBQRU5EIFhNTF9QUklWQVRFX0xJQlMgIiR7WkxJQl9MREZMQUdTfSIpCisJcGtnX2NoZWNrX21vZHVsZXMoWkxJQl9QQyBJTVBPUlRFRF9UQVJHRVQgemxpYikKKwlpZihaTElCX1BDX0ZPVU5EKQorCQlsaXN0KEFQUEVORCBYTUxfUENfUkVRVUlSRVMgemxpYikKKwllbHNlKCkKKwkJbGlzdChBUFBFTkQgWE1MX1BDX0xJQlMgIiR7WkxJQl9MREZMQUdTfSIpCisJZW5kaWYoKQorZW5kaWYoKQorCitpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkNsYW5nIiBPUiBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiKQorCSMgVGhlc2UgY29tcGlsZXIgZmxhZ3MgY2FuIGJyZWFrIHRoZSBjaGVja3MgYWJvdmUgc28ga2VlcCB0aGVtIGhlcmUuCisJc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXBlZGFudGljIC1XYWxsIC1XZXh0cmEgLVdzaGFkb3cgXAorLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1hbGlnbiAtV3dyaXRlLXN0cmluZ3MgXAorLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyBcCistV25vLWxvbmctbG9uZyAtV25vLWZvcm1hdC1leHRyYS1hcmdzIikKKworCWlmKEJVSUxEX1NIQVJFRF9MSUJTIEFORCBVTklYIEFORCBOT1QgQVBQTEUpCisJCWNoZWNrX2xpbmtlcl9mbGFnKEMgIkxJTktFUjotLXVuZGVmaW5lZC12ZXJzaW9uIiBGTEFHX1VOREVGSU5FRF9WRVJTSU9OKQorCQlpZiAoRkxBR19VTkRFRklORURfVkVSU0lPTikKKwkJCXRhcmdldF9saW5rX29wdGlvbnMoTGliWG1sMiBQUklWQVRFICJMSU5LRVI6LS11bmRlZmluZWQtdmVyc2lvbiIpCisJCWVuZGlmKCkKKwkJdGFyZ2V0X2xpbmtfb3B0aW9ucyhMaWJYbWwyIFBSSVZBVEUgIkxJTktFUjotLXZlcnNpb24tc2NyaXB0PSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWJ4bWwyLnN5bXMiKQorCWVuZGlmKCkKIGVuZGlmKCkKIAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKApAQCAtNTE0LDExICs1MTcsMTEgQEAKIAkJcnVueG1sY29uZgogCQlydW5zdWl0ZQogCQl0ZXN0YXBpCi0JCXRlc3RBdXRvbWF0YQogCQl0ZXN0Y2hhcgogCQl0ZXN0ZGljdAogCQl0ZXN0TW9kdWxlCiAJCXRlc3RsaW1pdHMKKwkJdGVzdHBhcnNlcgogCQl0ZXN0cmVjdXJzZQogCQl0ZXN0VGhyZWFkcwogCSkKQEAgLTUyOSwxMyArNTMyLDExIEBACiAJZW5kZm9yZWFjaCgpCiAJaWYoVGhyZWFkc19GT1VORCkKIAkJZm9yZWFjaChURVNUIHJ1bnRlc3QgdGVzdFRocmVhZHMpCi0JCQlpZihXSU4zMikKLQkJCQl0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucygke1RFU1R9IFBSSVZBVEUgSEFWRV9XSU4zMl9USFJFQURTKQotCQkJZW5kaWYoKQogCQkJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7VEVTVH0gVGhyZWFkczo6VGhyZWFkcykKIAkJZW5kZm9yZWFjaCgpCiAJZW5kaWYoKQogCWFkZF90ZXN0KE5BTUUgcnVudGVzdCBDT01NQU5EIHJ1bnRlc3QgLS1vdXQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKwlhZGRfdGVzdChOQU1FIHJ1bnN1aXRlIENPTU1BTkQgcnVuc3VpdGUgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQogCWlmKEVYSVNUUyAke0xJQlhNTDJfWE1MQ09ORl9XT1JLSU5HX0RJUn0veG1sY29uZi94bWxjb25mLnhtbCkKIAkJYWRkX3Rlc3QoTkFNRSBydW54bWxjb25mIENPTU1BTkQgcnVueG1sY29uZiBXT1JLSU5HX0RJUkVDVE9SWSAke0xJQlhNTDJfWE1MQ09ORl9XT1JLSU5HX0RJUn0pCiAJZW5kaWYoKQpAQCAtNTQ0LDYgKzU0NSw3IEBACiAJZW5kaWYoKQogCWFkZF90ZXN0KE5BTUUgdGVzdGNoYXIgQ09NTUFORCB0ZXN0Y2hhcikKIAlhZGRfdGVzdChOQU1FIHRlc3RkaWN0IENPTU1BTkQgdGVzdGRpY3QpCisJYWRkX3Rlc3QoTkFNRSB0ZXN0cGFyc2VyIENPTU1BTkQgdGVzdHBhcnNlcikKIAlhZGRfdGVzdChOQU1FIHRlc3RyZWN1cnNlIENPTU1BTkQgdGVzdHJlY3Vyc2UgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQogCWFkZF90ZXN0KE5BTUUgdGVzdFRocmVhZHMgQ09NTUFORCB0ZXN0VGhyZWFkcyBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCiBlbmRpZigpCkBAIC01ODUsNiArNTg3LDkgQEAKIAkJUFJFRklYIGxpYgogCQlWRVJTSU9OICR7UFJPSkVDVF9WRVJTSU9OfQogCSkKKwlpZiAoV0lOMzIpCisJCXNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYbWwyTW9kIFBST1BFUlRJRVMgU1VGRklYICIucHlkIikKKwllbmRpZigpCiAJaW5zdGFsbCgKIAkJVEFSR0VUUwlMaWJYbWwyTW9kCiAJCUFSQ0hJVkUgREVTVElOQVRJT04gJHtMSUJYTUwyX1BZVEhPTl9JTlNUQUxMX0RJUn0gQ09NUE9ORU5UIGRldmVsb3BtZW50CkBAIC02NTMsMTAgKzY1OCwyOSBAQAogCWNvbmZpZ3VyZV9maWxlKHB5dGhvbi9zZXR1cC5weS5pbiBzZXR1cC5weSBAT05MWSkKIGVuZGlmKCkKIAorc2V0KE5PTl9QQ19MSUJTICIke1RIUkVBRF9MSUJTfSAke0lDT05WX0xJQlN9ICR7TElCTX0gJHtXSU5TT0NLX0xJQlN9IikKK2xpc3QoQVBQRU5EIFhNTF9QQ19MSUJTICIke05PTl9QQ19MSUJTfSIpCitsaXN0KEFQUEVORCBYTUxfUFJJVkFURV9MSUJTICIke05PTl9QQ19MSUJTfSIpCitsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIFhNTF9QQ19MSUJTKQorbGlzdChSRU1PVkVfRFVQTElDQVRFUyBYTUxfUFJJVkFURV9MSUJTKQorCitsaXN0KEpPSU4gWE1MX1BDX1JFUVVJUkVTICIgIiBYTUxfUENfUkVRVUlSRVMpCitsaXN0KEpPSU4gWE1MX1BDX0xJQlMgIiAiIFhNTF9QQ19MSUJTKQorbGlzdChKT0lOIFhNTF9QUklWQVRFX0xJQlMgIiAiIFhNTF9QUklWQVRFX0xJQlMpCisKIHNldChYTUxfSU5DTFVERURJUiAiLUlcJHtpbmNsdWRlZGlyfS9saWJ4bWwyIikKIHNldChYTUxfTElCRElSICItTFwke2xpYmRpcn0iKQogc2V0KFhNTF9MSUJTICItbHhtbDIiKQotc2V0KFhNTF9QUklWQVRFX0xJQlMgIiR7Wl9MSUJTfSAke0xaTUFfTElCU30gJHtUSFJFQURfTElCU30gJHtJQ09OVl9MSUJTfSAke0lDVV9MSUJTfSAke0xJQk19ICR7V0lOMzJfRVhUUkFfTElCQUREfSIpCisKK2lmKEJVSUxEX1NIQVJFRF9MSUJTKQorCXNldChYTUxfUENfUFJJVkFURSAiLnByaXZhdGUiKQorCXNldChYTUxfUENfTElCU19QUklWQVRFICIKK0xpYnMucHJpdmF0ZToiKQorZWxzZSgpCisJdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTGliWG1sMiBQVUJMSUMgTElCWE1MX1NUQVRJQykKKwlzZXQoWE1MX0NGTEFHUyAiLURMSUJYTUxfU1RBVElDIikKKwlzZXQoWE1MX1BSSVZBVEVfTElCU19OT19TSEFSRUQgIiR7WE1MX1BSSVZBVEVfTElCU30iKQorZW5kaWYoKQogCiBmaWxlKFJFTEFUSVZFX1BBVEggUEFDS0FHRV9SRUxBVElWRV9QQVRIICIke0NNQUtFX0lOU1RBTExfRlVMTF9MSUJESVJ9L3BrZ2NvbmZpZyIgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9IikKIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvJCIgIiIgUEFDS0FHRV9SRUxBVElWRV9QQVRIICIke1BBQ0tBR0VfUkVMQVRJVkVfUEFUSH0iKQpAQCAtNzAyLDcgKzcyNiw2IEBACiBzZXQoQ1BBQ0tfREVCSUFOX1JVTlRJTUVfUEFDS0FHRV9TRUNUSU9OICJsaWJzIikKIHNldChDUEFDS19OU0lTX1BBQ0tBR0VfTkFNRSAke1BBQ0tBR0VfU1RSSU5HfSkKIHNldChDUEFDS19OU0lTX1VSTF9JTkZPX0FCT1VUICR7UEFDS0FHRV9VUkx9KQotc2V0KENQQUNLX1BBQ0tBR0VfQ09OVEFDVCAke1BBQ0tBR0VfQlVHUkVQT1JUfSkKIHNldChDUEFDS19QQUNLQUdFX0RJU1BMQVlfTkFNRSAke1BBQ0tBR0VfU1RSSU5HfSkKIHNldChDUEFDS19QQUNLQUdFX0lOU1RBTExfRElSRUNUT1JZICIke1BBQ0tBR0VfVEFSTkFNRX0tJHtQQUNLQUdFX1ZFUlNJT059IikKIHNldChDUEFDS19QQUNLQUdFX05BTUUgJHtQQUNLQUdFX1RBUk5BTUV9KQpkaWZmIC0tZ2l0IGEvQ29weXJpZ2h0IGIvQ29weXJpZ2h0CmluZGV4IGQ2MTMxODUuLmMwNThmMDIgMTAwNjQ0Ci0tLSBhL0NvcHlyaWdodAorKysgYi9Db3B5cmlnaHQKQEAgLTEsNCArMSw0IEBACi1FeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkIGluIHRoZSBzb3VyY2UgY29kZSAoZS5nLiB0aGUgZmlsZXMgaGFzaC5jLAorRXhjZXB0IHdoZXJlIG90aGVyd2lzZSBub3RlZCBpbiB0aGUgc291cmNlIGNvZGUgKGUuZy4gdGhlIGZpbGVzIGRpY3QuYywKIGxpc3QuYyBhbmQgdGhlIHRyaW8gZmlsZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IGEgc2ltaWxhciBsaWNlbmNlIGJ1dAogd2l0aCBkaWZmZXJlbnQgQ29weXJpZ2h0IG5vdGljZXMpIGFsbCB0aGUgZmlsZXMgYXJlOgogCmRpZmYgLS1naXQgYS9IVE1McGFyc2VyLmMgYi9IVE1McGFyc2VyLmMKaW5kZXggYmE4ODY5MC4uMDk3ZWQyMyAxMDA2NDQKLS0tIGEvSFRNTHBhcnNlci5jCisrKyBiL0hUTUxwYXJzZXIuYwpAQCAtMTQsMzAgKzE0LDMwIEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2luY2x1ZGUgPGxpYnhtbC9IVE1McGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbG1lbW9yeS5oPgogI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvSFRNTHBhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9IVE1MdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC9lbnRpdGllcy5oPgogI2luY2x1ZGUgPGxpYnhtbC9lbmNvZGluZy5oPgotI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxJTy5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAjaW5jbHVkZSA8bGlieG1sL3VyaS5oPgogCi0jaW5jbHVkZSAiYnVmLmgiCi0jaW5jbHVkZSAiZW5jLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9idWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2VuYy5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKKyNpbmNsdWRlICJwcml2YXRlL2h0bWwuaCIKKyNpbmNsdWRlICJwcml2YXRlL2lvLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9wYXJzZXIuaCIKKyNpbmNsdWRlICJwcml2YXRlL3RyZWUuaCIKIAogI2RlZmluZSBIVE1MX01BWF9OQU1FTEVOIDEwMDAKICNkZWZpbmUgSFRNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFIDEwMDAKICNkZWZpbmUgSFRNTF9QQVJTRVJfQlVGRkVSX1NJWkUgMTAwCiAKLS8qICNkZWZpbmUgREVCVUcgKi8KLS8qICNkZWZpbmUgREVCVUdfUFVTSCAqLwotCiBzdGF0aWMgaW50IGh0bWxPbWl0dGVkRGVmYXVsdFZhbHVlID0gMTsKIAogeG1sQ2hhciAqIGh0bWxEZWNvZGVFbnRpdGllcyhodG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBpbnQgbGVuLApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgKgogICogUHVzaGVzIGEgbmV3IGVsZW1lbnQgbmFtZSBvbiB0b3Agb2YgdGhlIG5hbWUgc3RhY2sKICAqCi0gKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGluZGV4IGluIHRoZSBzdGFjayBvdGhlcndpc2UKKyAqIFJldHVybnMgLTEgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGluZGV4IGluIHRoZSBzdGFjayBvdGhlcndpc2UKICAqLwogc3RhdGljIGludAogaHRtbG5hbWVQdXNoKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKiB2YWx1ZSkKQEAgLTE1NSwxNSArMTU1LDE3IEBACiAgICAgaWYgKChjdHh0LT5odG1sIDwgMTApICYmICh4bWxTdHJFcXVhbCh2YWx1ZSwgQkFEX0NBU1QgImJvZHkiKSkpCiAgICAgICAgIGN0eHQtPmh0bWwgPSAxMDsKICAgICBpZiAoY3R4dC0+bmFtZU5yID49IGN0eHQtPm5hbWVNYXgpIHsKLSAgICAgICAgY3R4dC0+bmFtZU1heCAqPSAyOwotICAgICAgICBjdHh0LT5uYW1lVGFiID0gKGNvbnN0IHhtbENoYXIgKiAqKQotICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFJlYWxsb2MoKHhtbENoYXIgKiAqKWN0eHQtPm5hbWVUYWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5uYW1lTWF4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdHh0LT5uYW1lVGFiWzBdKSk7Ci0gICAgICAgIGlmIChjdHh0LT5uYW1lVGFiID09IE5VTEwpIHsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBjdHh0LT5uYW1lTWF4ICogMjsKKyAgICAgICAgY29uc3QgeG1sQ2hhciAqKnRtcDsKKworICAgICAgICB0bXAgPSB4bWxSZWFsbG9jKCh4bWxDaGFyICoqKSBjdHh0LT5uYW1lVGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NpemUgKiBzaXplb2YoY3R4dC0+bmFtZVRhYlswXSkpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIHsKICAgICAgICAgICAgIGh0bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7Ci0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgIH0KKyAgICAgICAgY3R4dC0+bmFtZVRhYiA9IHRtcDsKKyAgICAgICAgY3R4dC0+bmFtZU1heCA9IG5ld1NpemU7CiAgICAgfQogICAgIGN0eHQtPm5hbWVUYWJbY3R4dC0+bmFtZU5yXSA9IHZhbHVlOwogICAgIGN0eHQtPm5hbWUgPSB2YWx1ZTsKQEAgLTI3MCw4ICsyNzIsNiBAQAogICoKICAqIENsZWFuIG1hY3Jvcywgbm90IGRlcGVuZGVudCBvZiBhbiBBU0NJSSBjb250ZXh0LCBleHBlY3QgVVRGLTggZW5jb2RpbmcKICAqCi0gKiAgIENVUlJFTlQgUmV0dXJucyB0aGUgY3VycmVudCBjaGFyIHZhbHVlLCB3aXRoIHRoZSBmdWxsIGRlY29kaW5nIG9mCi0gKiAgICAgICAgICAgVVRGLTggaWYgd2UgYXJlIHVzaW5nIHRoaXMgbW9kZS4gSXQgcmV0dXJucyBhbiBpbnQuCiAgKiAgIE5FWFQgICAgU2tpcCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsIHRoaXMgZG9lcyB0aGUgcHJvcGVyIGRlY29kaW5nCiAgKiAgICAgICAgICAgaW4gVVRGLTggbW9kZS4gSXQgYWxzbyBwb3AtdXAgdW5maW5pc2hlZCBlbnRpdGllcyBvbiB0aGUgZmx5LgogICogICBORVhUTChsKSBTa2lwIHRoZSBjdXJyZW50IHVuaWNvZGUgY2hhcmFjdGVyIG9mIGwgeG1sQ2hhcnMgbG9uZy4KQEAgLTI5MSwyMCArMjkxLDE3IEBACiAKICNkZWZpbmUgU0hSSU5LIGlmICgoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlID4gMiAqIElOUFVUX0NIVU5LKSAmJiBcCiAJCSAgIChjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1ciA8IDIgKiBJTlBVVF9DSFVOSykpIFwKLQl4bWxQYXJzZXJJbnB1dFNocmluayhjdHh0LT5pbnB1dCkKKwl4bWxQYXJzZXJTaHJpbmsoY3R4dCkKIAogI2RlZmluZSBHUk9XIGlmICgoY3R4dC0+cHJvZ3Jlc3NpdmUgPT0gMCkgJiYJCQkJXAogCQkgKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyIDwgSU5QVVRfQ0hVTkspKQlcCi0JeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSykKLQotI2RlZmluZSBDVVJSRU5UICgoaW50KSAoKmN0eHQtPmlucHV0LT5jdXIpKQorCXhtbFBhcnNlckdyb3coY3R4dCkKIAogI2RlZmluZSBTS0lQX0JMQU5LUyBodG1sU2tpcEJsYW5rQ2hhcnMoY3R4dCkKIAogLyogSW1wb3J0ZWQgZnJvbSBYTUwgKi8KIAotLyogI2RlZmluZSBDVVIgKGN0eHQtPnRva2VuID8gY3R4dC0+dG9rZW4gOiAoaW50KSAoKmN0eHQtPmlucHV0LT5jdXIpKSAqLwotI2RlZmluZSBDVVIgKChpbnQpICgqY3R4dC0+aW5wdXQtPmN1cikpCisjZGVmaW5lIENVUiAoKmN0eHQtPmlucHV0LT5jdXIpCiAjZGVmaW5lIE5FWFQgeG1sTmV4dENoYXIoY3R4dCkKIAogI2RlZmluZSBSQVcgKGN0eHQtPnRva2VuID8gLTEgOiAoKmN0eHQtPmlucHV0LT5jdXIpKQpAQCAtMzI0LDEwICszMjEsOSBAQAogICoqKioqKioqKioqKi8KIAogI2RlZmluZSBDVVJfQ0hBUihsKSBodG1sQ3VycmVudENoYXIoY3R4dCwgJmwpCi0jZGVmaW5lIENVUl9TQ0hBUihzLCBsKSB4bWxTdHJpbmdDdXJyZW50Q2hhcihjdHh0LCBzLCAmbCkKIAogI2RlZmluZSBDT1BZX0JVRihsLGIsaSx2KQkJCQkJCVwKLSAgICBpZiAobCA9PSAxKSBiW2krK10gPSAoeG1sQ2hhcikgdjsJCQkJCVwKKyAgICBpZiAobCA9PSAxKSBiW2krK10gPSB2OwkJCQkJCVwKICAgICBlbHNlIGkgKz0geG1sQ29weUNoYXIobCwmYltpXSx2KQogCiAvKioKQEAgLTM0OSw4ICszNDUsNyBAQAogICAgIGNvbnN0IHhtbENoYXIgKnN0YXJ0LCAqY3VyLCAqZW5kOwogCiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5pbnB1dCA9PSBOVUxMKSB8fAotICAgICAgICAoY3R4dC0+aW5wdXQtPmVuY29kaW5nICE9IE5VTEwpIHx8IChjdHh0LT5pbnB1dC0+YnVmID09IE5VTEwpIHx8Ci0gICAgICAgIChjdHh0LT5pbnB1dC0+YnVmLT5lbmNvZGVyICE9IE5VTEwpKQorICAgICAgICAoY3R4dC0+aW5wdXQtPmZsYWdzICYgWE1MX0lOUFVUX0hBU19FTkNPRElORykpCiAgICAgICAgIHJldHVybihOVUxMKTsKICAgICBpZiAoKGN0eHQtPmlucHV0LT5jdXIgPT0gTlVMTCkgfHwgKGN0eHQtPmlucHV0LT5lbmQgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybihOVUxMKTsKQEAgLTQwOSw3ICs0MDQsMTQgQEAKIAkqbGVuID0gMDsKIAlyZXR1cm4oY3R4dC0+dG9rZW4pOwogICAgIH0KLSAgICBpZiAoY3R4dC0+Y2hhcnNldCAhPSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4KSB7CisKKyAgICBpZiAoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIgPCBJTlBVVF9DSFVOSykgeworICAgICAgICB4bWxQYXJzZXJHcm93KGN0eHQpOworICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBpZiAoKGN0eHQtPmlucHV0LT5mbGFncyAmIFhNTF9JTlBVVF9IQVNfRU5DT0RJTkcpID09IDApIHsKICAgICAgICAgeG1sQ2hhciAqIGd1ZXNzOwogICAgICAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXI7CiAKQEAgLTQxOCw3ICs0MjAsNyBAQAogICAgICAgICAgKiBhIGNvbXBhdGlibGUgZW5jb2RpbmcgZm9yIHRoZSBBU0NJSSBzZXQsIHNpbmNlCiAgICAgICAgICAqIEhUTUwgY29uc3RydWN0cyBvbmx5IHVzZSA8IDEyOCBjaGFycwogICAgICAgICAgKi8KLSAgICAgICAgaWYgKChpbnQpICpjdHh0LT5pbnB1dC0+Y3VyIDwgMHg4MCkgeworICAgICAgICBpZiAoKmN0eHQtPmlucHV0LT5jdXIgPCAweDgwKSB7CiAgICAgICAgICAgICAqbGVuID0gMTsKICAgICAgICAgICAgIGlmICgoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkgJiYKICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciA8IGN0eHQtPmlucHV0LT5lbmQpKSB7CkBAIC00MjYsNyArNDI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYXIgMHglWCBvdXQgb2YgYWxsb3dlZCByYW5nZVxuIiwgMCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuKCcgJyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgKmN0eHQtPmlucHV0LT5jdXIpOworICAgICAgICAgICAgcmV0dXJuKCpjdHh0LT5pbnB1dC0+Y3VyKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qCkBAIC00MzYsOSArNDM4LDYgQEAKICAgICAgICAgaWYgKGd1ZXNzID09IE5VTEwpIHsKICAgICAgICAgICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0eHQsIFhNTF9DSEFSX0VOQ09ESU5HXzg4NTlfMSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY3R4dC0+aW5wdXQtPmVuY29kaW5nICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgeG1sRnJlZSgoeG1sQ2hhciAqKSBjdHh0LT5pbnB1dC0+ZW5jb2RpbmcpOwotICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmVuY29kaW5nID0gZ3Vlc3M7CiAgICAgICAgICAgICBoYW5kbGVyID0geG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIoKGNvbnN0IGNoYXIgKikgZ3Vlc3MpOwogICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIC8qCkBAIC00NTEsOCArNDUwLDkgQEAKICAgICAgICAgICAgICAgICBodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlZBTElEX0VOQ09ESU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgZW5jb2RpbmcgJXMiLCBndWVzcywgTlVMTCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB4bWxGcmVlKGd1ZXNzKTsKICAgICAgICAgfQotICAgICAgICBjdHh0LT5jaGFyc2V0ID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGODsKKyAgICAgICAgY3R4dC0+aW5wdXQtPmZsYWdzIHw9IFhNTF9JTlBVVF9IQVNfRU5DT0RJTkc7CiAgICAgfQogCiAgICAgLyoKQEAgLTQ2OSwyOSArNDY5LDIxIEBACiAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKICAgICBjID0gKmN1cjsKICAgICBpZiAoYyAmIDB4ODApIHsKKyAgICAgICAgc2l6ZV90IGF2YWlsOworCiAgICAgICAgIGlmICgoYyAmIDB4NDApID09IDApCiAgICAgICAgICAgICBnb3RvIGVuY29kaW5nX2Vycm9yOwotICAgICAgICBpZiAoY3VyWzFdID09IDApIHsKLSAgICAgICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICAgICAgfQotICAgICAgICBpZiAoKGN1clsxXSAmIDB4YzApICE9IDB4ODApCisKKyAgICAgICAgYXZhaWwgPSBjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1cjsKKworICAgICAgICBpZiAoKGF2YWlsIDwgMikgfHwgKChjdXJbMV0gJiAweGMwKSAhPSAweDgwKSkKICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CiAgICAgICAgIGlmICgoYyAmIDB4ZTApID09IDB4ZTApIHsKLQotICAgICAgICAgICAgaWYgKGN1clsyXSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSyk7Ci0gICAgICAgICAgICAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoY3VyWzJdICYgMHhjMCkgIT0gMHg4MCkKKyAgICAgICAgICAgIGlmICgoYXZhaWwgPCAzKSB8fCAoKGN1clsyXSAmIDB4YzApICE9IDB4ODApKQogICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CiAgICAgICAgICAgICBpZiAoKGMgJiAweGYwKSA9PSAweGYwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1clszXSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKChjICYgMHhmOCkgIT0gMHhmMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKChjdXJbM10gJiAweGMwKSAhPSAweDgwKSkKKyAgICAgICAgICAgICAgICAgICAgKGF2YWlsIDwgNCkgfHwgKChjdXJbM10gJiAweGMwKSAhPSAweDgwKSkKICAgICAgICAgICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKICAgICAgICAgICAgICAgICAvKiA0LWJ5dGUgY29kZSAqLwogICAgICAgICAgICAgICAgICpsZW4gPSA0OwpAQCAtNTMzLDE3ICs1MjUsMTAgQEAKICAgICAgICAgfQogICAgICAgICAvKiAxLWJ5dGUgY29kZSAqLwogICAgICAgICAqbGVuID0gMTsKLSAgICAgICAgcmV0dXJuKChpbnQpICpjdHh0LT5pbnB1dC0+Y3VyKTsKKyAgICAgICAgcmV0dXJuKCpjdHh0LT5pbnB1dC0+Y3VyKTsKICAgICB9CiAKIGVuY29kaW5nX2Vycm9yOgotICAgIC8qCi0gICAgICogSWYgd2UgZGV0ZWN0IGFuIFVURjggZXJyb3IgdGhhdCBwcm9iYWJseSBtZWFuIHRoYXQgdGhlCi0gICAgICogaW5wdXQgZW5jb2RpbmcgZGlkbid0IGdldCBwcm9wZXJseSBhZHZlcnRpc2VkIGluIHRoZQotICAgICAqIGRlY2xhcmF0aW9uIGhlYWRlci4gUmVwb3J0IHRoZSBlcnJvciBhbmQgc3dpdGNoIHRoZSBlbmNvZGluZwotICAgICAqIHRvIElTTy1MYXRpbi0xIChpZiB5b3UgZG9uJ3QgbGlrZSB0aGlzIHBvbGljeSwganVzdCBkZWNsYXJlIHRoZQotICAgICAqIGVuY29kaW5nICEpCi0gICAgICovCiAgICAgewogICAgICAgICBjaGFyIGJ1ZmZlclsxNTBdOwogCkBAIC01NTksMTggKzU0NCwxMCBAQAogCQkgICAgIEJBRF9DQVNUIGJ1ZmZlciwgTlVMTCk7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBEb24ndCBzd2l0Y2ggZW5jb2RpbmdzIHR3aWNlLiBOb3RlIHRoYXQgaWYgdGhlcmUncyBhbiBlbmNvZGVyLCB3ZQotICAgICAqIHNob3VsZG4ndCByZWNlaXZlIGludmFsaWQgVVRGLTggYW55d2F5LgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IGlmIGN0eHQtPmlucHV0LT5idWYgPT0gTlVMTCwgc3dpdGNoaW5nIGVuY29kaW5ncyBpcwotICAgICAqIGltcG9zc2libGUsIHNlZSBHaXRsYWIgaXNzdWUgIzM0LgotICAgICAqLwotICAgIGlmICgoY3R4dC0+aW5wdXQtPmJ1ZiAhPSBOVUxMKSAmJgotICAgICAgICAoY3R4dC0+aW5wdXQtPmJ1Zi0+ZW5jb2RlciA9PSBOVUxMKSkKKyAgICBpZiAoKGN0eHQtPmlucHV0LT5mbGFncyAmIFhNTF9JTlBVVF9IQVNfRU5DT0RJTkcpID09IDApCiAgICAgICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0eHQsIFhNTF9DSEFSX0VOQ09ESU5HXzg4NTlfMSk7CiAgICAgKmxlbiA9IDE7Ci0gICAgcmV0dXJuKChpbnQpICpjdHh0LT5pbnB1dC0+Y3VyKTsKKyAgICByZXR1cm4oKmN0eHQtPmlucHV0LT5jdXIpOwogfQogCiAvKioKQEAgLTU4NywxNyArNTY0LDEyIEBACiAgICAgaW50IHJlcyA9IDA7CiAKICAgICB3aGlsZSAoSVNfQkxBTktfQ0goKihjdHh0LT5pbnB1dC0+Y3VyKSkpIHsKLQlpZiAoKCpjdHh0LT5pbnB1dC0+Y3VyID09IDApICYmCi0JICAgICh4bWxQYXJzZXJJbnB1dEdyb3coY3R4dC0+aW5wdXQsIElOUFVUX0NIVU5LKSA8PSAwKSkgewotCQl4bWxQb3BJbnB1dChjdHh0KTsKLQl9IGVsc2UgewotCSAgICBpZiAoKihjdHh0LT5pbnB1dC0+Y3VyKSA9PSAnXG4nKSB7Ci0JCWN0eHQtPmlucHV0LT5saW5lKys7IGN0eHQtPmlucHV0LT5jb2wgPSAxOwotCSAgICB9IGVsc2UgY3R4dC0+aW5wdXQtPmNvbCsrOwotCSAgICBjdHh0LT5pbnB1dC0+Y3VyKys7Ci0JICAgIGlmICgqY3R4dC0+aW5wdXQtPmN1ciA9PSAwKQotCQl4bWxQYXJzZXJJbnB1dEdyb3coY3R4dC0+aW5wdXQsIElOUFVUX0NIVU5LKTsKLQl9CisgICAgICAgIGlmICgqKGN0eHQtPmlucHV0LT5jdXIpID09ICdcbicpIHsKKyAgICAgICAgICAgIGN0eHQtPmlucHV0LT5saW5lKys7IGN0eHQtPmlucHV0LT5jb2wgPSAxOworICAgICAgICB9IGVsc2UgY3R4dC0+aW5wdXQtPmNvbCsrOworICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyKys7CisgICAgICAgIGlmICgqY3R4dC0+aW5wdXQtPmN1ciA9PSAwKQorICAgICAgICAgICAgeG1sUGFyc2VyR3JvdyhjdHh0KTsKIAlpZiAocmVzIDwgSU5UX01BWCkKIAkgICAgcmVzKys7CiAgICAgfQpAQCAtMTIyMyw3ICsxMTk1LDYgQEAKICAgICB7ICJtZW51IiwgImZvcm0iIH0sCiAgICAgeyAibWVudSIsICJ1bCIgfSwKICAgICB7ICJvbCIsICJmb3JtIiB9LAotICAgIHsgIm9sIiwgInVsIiB9LAogICAgIHsgIm9wdGlvbiIsICJvcHRncm91cCIgfSwKICAgICB7ICJvcHRpb24iLCAib3B0aW9uIiB9LAogICAgIHsgInAiLCAiYWRkcmVzcyIgfSwKQEAgLTEzMDcsNyArMTI3OCw2IEBACiAgICAgeyAidWwiLCAiYWRkcmVzcyIgfSwKICAgICB7ICJ1bCIsICJmb3JtIiB9LAogICAgIHsgInVsIiwgIm1lbnUiIH0sCi0gICAgeyAidWwiLCAib2wiIH0sCiAgICAgeyAidWwiLCAicHJlIiB9LAogICAgIHsgInhtcCIsICJkZCIgfSwKICAgICB7ICJ4bXAiLCAiZGwiIH0sCkBAIC0xMzk1LDEwICsxMzY1LDcgQEAKIC8qKgogICogaHRtbEluaXRBdXRvQ2xvc2U6CiAgKgotICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvCi0gKiBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LgotICoKLSAqIFRoaXMgaXMgYSBuby1vcCBub3cuCisgKiBERVBSRUNBVEVEOiBUaGlzIGlzIGEgbm8tb3AuCiAgKi8KIHZvaWQKIGh0bWxJbml0QXV0b0Nsb3NlKHZvaWQpIHsKQEAgLTE1NjUsMjAgKzE1MzIsMTEgQEAKIHN0YXRpYyB2b2lkCiBodG1sQXV0b0Nsb3NlKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKiBuZXd0YWcpCiB7Ci0gICAgd2hpbGUgKChuZXd0YWcgIT0gTlVMTCkgJiYgKGN0eHQtPm5hbWUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgKGh0bWxDaGVja0F1dG9DbG9zZShuZXd0YWcsIGN0eHQtPm5hbWUpKSkgewotICAgICAgICBpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJiAoY3R4dC0+c2F4LT5lbmRFbGVtZW50ICE9IE5VTEwpKQotICAgICAgICAgICAgY3R4dC0+c2F4LT5lbmRFbGVtZW50KGN0eHQtPnVzZXJEYXRhLCBjdHh0LT5uYW1lKTsKLQlodG1sbmFtZVBvcChjdHh0KTsKLSAgICB9Ci0gICAgaWYgKG5ld3RhZyA9PSBOVUxMKSB7Ci0gICAgICAgIGh0bWxBdXRvQ2xvc2VPbkVuZChjdHh0KTsKKyAgICBpZiAobmV3dGFnID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd2hpbGUgKChuZXd0YWcgPT0gTlVMTCkgJiYgKGN0eHQtPm5hbWUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgKCh4bWxTdHJFcXVhbChjdHh0LT5uYW1lLCBCQURfQ0FTVCAiaGVhZCIpKSB8fAotICAgICAgICAgICAgKHhtbFN0ckVxdWFsKGN0eHQtPm5hbWUsIEJBRF9DQVNUICJib2R5IikpIHx8Ci0gICAgICAgICAgICAoeG1sU3RyRXF1YWwoY3R4dC0+bmFtZSwgQkFEX0NBU1QgImh0bWwiKSkpKSB7CisKKyAgICB3aGlsZSAoKGN0eHQtPm5hbWUgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgKGh0bWxDaGVja0F1dG9DbG9zZShuZXd0YWcsIGN0eHQtPm5hbWUpKSkgewogICAgICAgICBpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJiAoY3R4dC0+c2F4LT5lbmRFbGVtZW50ICE9IE5VTEwpKQogICAgICAgICAgICAgY3R4dC0+c2F4LT5lbmRFbGVtZW50KGN0eHQtPnVzZXJEYXRhLCBjdHh0LT5uYW1lKTsKIAlodG1sbmFtZVBvcChjdHh0KTsKQEAgLTIwNzUsOCArMjAzMyw4IEBACiAjZGVmaW5lIGdyb3dCdWZmZXIoYnVmZmVyKSB7CQkJCQkJXAogICAgIHhtbENoYXIgKnRtcDsJCQkJCQkJXAogICAgIGJ1ZmZlciMjX3NpemUgKj0gMjsJCQkJCQkJXAotICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmZmVyLCBidWZmZXIjI19zaXplICogc2l6ZW9mKHhtbENoYXIpKTsgXAotICAgIGlmICh0bXAgPT0gTlVMTCkgewkJCQkJCVwKKyAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1ZmZlciwgYnVmZmVyIyNfc2l6ZSk7IAkJXAorICAgIGlmICh0bXAgPT0gTlVMTCkgewkJCQkJCQlcCiAJaHRtbEVyck1lbW9yeShjdHh0LCAiZ3Jvd2luZyBidWZmZXJcbiIpOwkJCVwKIAl4bWxGcmVlKGJ1ZmZlcik7CQkJCQkJXAogCXJldHVybihOVUxMKTsJCQkJCQkJXApAQCAtMjMyMCw3ICsyMjc4LDcgQEAKIAkgICAgZWxzZQogCQljcCA9IGVudC0+bmFtZTsKIAkgICAgbGVuID0gc3RybGVuKGNwKTsKLQkgICAgaWYgKG91dCArIDIgKyBsZW4gPiBvdXRlbmQpCisJICAgIGlmIChvdXRlbmQgLSBvdXQgPCBsZW4gKyAyKQogCQlicmVhazsKIAkgICAgKm91dCsrID0gJyYnOwogCSAgICBtZW1jcHkob3V0LCBjcCwgbGVuKTsKQEAgLTI1NzIsNiArMjUzMCw3IEBACiAKIHN0YXRpYyBjb25zdCB4bWxDaGFyICoKIGh0bWxQYXJzZUhUTUxOYW1lKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICBjb25zdCB4bWxDaGFyICpyZXQ7CiAgICAgaW50IGkgPSAwOwogICAgIHhtbENoYXIgbG9jW0hUTUxfUEFSU0VSX0JVRkZFUl9TSVpFXTsKIApAQCAtMjU4OSw3ICsyNTQ4LDExIEBACiAJTkVYVDsKICAgICB9CiAKLSAgICByZXR1cm4oeG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCBsb2MsIGkpKTsKKyAgICByZXQgPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIGxvYywgaSk7CisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICBodG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworCisgICAgcmV0dXJuKHJldCk7CiB9CiAKIApAQCAtMjY3NCwxMyArMjYzNywxNCBAQAogaHRtbFBhcnNlTmFtZUNvbXBsZXgoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CiAgICAgaW50IGxlbiA9IDAsIGw7CiAgICAgaW50IGM7Ci0gICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgbWF4TGVuZ3RoID0gKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfSFVHRSkgPworICAgICAgICAgICAgICAgICAgICBYTUxfTUFYX1RFWFRfTEVOR1RIIDoKKyAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9OQU1FX0xFTkdUSDsKICAgICBjb25zdCB4bWxDaGFyICpiYXNlID0gY3R4dC0+aW5wdXQtPmJhc2U7CiAKICAgICAvKgogICAgICAqIEhhbmRsZXIgZm9yIG1vcmUgY29tcGxleCBjYXNlcwogICAgICAqLwotICAgIEdST1c7CiAgICAgYyA9IENVUl9DSEFSKGwpOwogICAgIGlmICgoYyA9PSAnICcpIHx8IChjID09ICc+JykgfHwgKGMgPT0gJy8nKSB8fCAvKiBhY2NlbGVyYXRvcnMgKi8KIAkoIUlTX0xFVFRFUihjKSAmJiAoYyAhPSAnXycpICYmCkBAIC0yNjk0LDExICsyNjU4LDExIEBACiAJICAgIChjID09ICdfJykgfHwgKGMgPT0gJzonKSB8fAogCSAgICAoSVNfQ09NQklOSU5HKGMpKSB8fAogCSAgICAoSVNfRVhURU5ERVIoYykpKSkgewotCWlmIChjb3VudCsrID4gMTAwKSB7Ci0JICAgIGNvdW50ID0gMDsKLQkgICAgR1JPVzsKLQl9CiAJbGVuICs9IGw7CisgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKKyAgICAgICAgICAgIGh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX05BTUVfVE9PX0xPTkcsICJuYW1lIHRvbyBsb25nIiwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KIAlORVhUTChsKTsKIAljID0gQ1VSX0NIQVIobCk7CiAJaWYgKGN0eHQtPmlucHV0LT5iYXNlICE9IGJhc2UpIHsKQEAgLTI3MDksNiArMjY3Myw4IEBACiAJICAgIHJldHVybihodG1sUGFyc2VOYW1lQ29tcGxleChjdHh0KSk7CiAJfQogICAgIH0KKyAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgcmV0dXJuKE5VTEwpOwogCiAgICAgaWYgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSA8IGxlbikgewogICAgICAgICAvKiBTYW5pdHkgY2hlY2sgKi8KQEAgLTI3MzYsNiArMjcwMiw5IEBACiBodG1sUGFyc2VIVE1MQXR0cmlidXRlKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgc3RvcCkgewogICAgIHhtbENoYXIgKmJ1ZmZlciA9IE5VTEw7CiAgICAgaW50IGJ1ZmZlcl9zaXplID0gMDsKKyAgICBpbnQgbWF4TGVuZ3RoID0gKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfSFVHRSkgPworICAgICAgICAgICAgICAgICAgICBYTUxfTUFYX0hVR0VfTEVOR1RIIDoKKyAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9URVhUX0xFTkdUSDsKICAgICB4bWxDaGFyICpvdXQgPSBOVUxMOwogICAgIGNvbnN0IHhtbENoYXIgKm5hbWUgPSBOVUxMOwogICAgIGNvbnN0IHhtbENoYXIgKmN1ciA9IE5VTEw7CkBAIC0yNzQ1LDcgKzI3MTQsNyBAQAogICAgICAqIGFsbG9jYXRlIGEgdHJhbnNsYXRpb24gYnVmZmVyLgogICAgICAqLwogICAgIGJ1ZmZlcl9zaXplID0gSFRNTF9QQVJTRVJfQlVGRkVSX1NJWkU7Ci0gICAgYnVmZmVyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKGJ1ZmZlcl9zaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBidWZmZXIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoYnVmZmVyX3NpemUpOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogCWh0bWxFcnJNZW1vcnkoY3R4dCwgImJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJcmV0dXJuKE5VTEwpOwpAQCAtMjg0MSw2ICsyODEwLDEwIEBACiAJCW91dCA9ICZidWZmZXJbaW5keF07CiAJICAgIH0KIAkgICAgYyA9IENVUl9DSEFSKGwpOworICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKKyAgICAgICAgICAgICAgICB4bWxGcmVlKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICAgICAgfQogCSAgICBpZiAgICAgIChjIDwgICAgMHg4MCkKIAkJICAgIHsgKm91dCsrICA9IGM7ICAgICAgICAgICAgICAgIGJpdHM9IC02OyB9CiAJICAgIGVsc2UgaWYgKGMgPCAgIDB4ODAwKQpAQCAtMjg1Myw4ICsyODI2LDE0IEBACiAJICAgIGZvciAoIDsgYml0cyA+PSAwOyBiaXRzLT0gNikgewogCQkqb3V0KysgID0gKChjID4+IGJpdHMpICYgMHgzRikgfCAweDgwOwogCSAgICB9Ci0JICAgIE5FWFQ7CisJICAgIE5FWFRMKGwpOwogCX0KKyAgICAgICAgaWYgKG91dCAtIGJ1ZmZlciA+IG1heExlbmd0aCkgeworICAgICAgICAgICAgaHRtbFBhcnNlRXJyKGN0eHQsIFhNTF9FUlJfQVRUUklCVVRFX05PVF9GSU5JU0hFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYXR0cmlidXRlIHZhbHVlIHRvbyBsb25nXG4iLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIHhtbEZyZWUoYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgfQogICAgIH0KICAgICAqb3V0ID0gMDsKICAgICByZXR1cm4oYnVmZmVyKTsKQEAgLTI4NjUsNiArMjg0NCw4IEBACiAgKiBAY3R4dDogIGFuIEhUTUwgcGFyc2VyIGNvbnRleHQKICAqIEBzdHI6ICBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZW50aXR5IG5hbWUKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGFuIEhUTUwgRU5USVRZIHJlZmVyZW5jZXMKICAqCiAgKiBbNjhdIEVudGl0eVJlZiA6Oj0gJyYnIE5hbWUgJzsnCkBAIC0yOTk5LDkgKzI5ODAsOSBAQAogICAgICAgICBodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9MSVRFUkFMX05PVF9GSU5JU0hFRCwKICAgICAgICAgICAgICAgICAgICAgICJVbmZpbmlzaGVkIFN5c3RlbUxpdGVyYWxcbiIsIE5VTEwsIE5VTEwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE5FWFQ7CiAgICAgICAgIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgIHJldCA9IHhtbFN0cm5kdXAoKEJBU0VfUFRSK3N0YXJ0UG9zaXRpb24pLCBsZW4pOworICAgICAgICBORVhUOwogICAgIH0KIAogICAgIHJldHVybihyZXQpOwpAQCAtMzA1NCw5ICszMDM1LDkgQEAKICAgICAgICAgaHRtbFBhcnNlRXJyKGN0eHQsIFhNTF9FUlJfTElURVJBTF9OT1RfRklOSVNIRUQsCiAgICAgICAgICAgICAgICAgICAgICAiVW5maW5pc2hlZCBQdWJpZExpdGVyYWxcbiIsIE5VTEwsIE5VTEwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE5FWFQ7CiAgICAgICAgIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgIHJldCA9IHhtbFN0cm5kdXAoKEJBU0VfUFRSICsgc3RhcnRQb3NpdGlvbiksIGxlbik7CisgICAgICAgIE5FWFQ7CiAgICAgfQogCiAgICAgcmV0dXJuKHJldCk7CkBAIC0zMDg5LDcgKzMwNzAsNiBAQAogICAgIGludCBuYmNoYXIgPSAwOwogICAgIGludCBjdXIsbDsKIAotICAgIFNIUklOSzsKICAgICBjdXIgPSBDVVJfQ0hBUihsKTsKICAgICB3aGlsZSAoY3VyICE9IDApIHsKIAlpZiAoKGN1ciA9PSAnPCcpICYmIChOWFQoMSkgPT0gJy8nKSkgewpAQCAtMzEyOCw2ICszMTA4LDcgQEAKICAgICAgICAgICAgIGh0bWxQYXJzZUVyckludChjdHh0LCBYTUxfRVJSX0lOVkFMSURfQ0hBUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBjaGFyIGluIENEQVRBIDB4JVhcbiIsIGN1cik7CiAgICAgICAgIH0KKwlORVhUTChsKTsKIAlpZiAobmJjaGFyID49IEhUTUxfUEFSU0VSX0JJR19CVUZGRVJfU0laRSkgewogICAgICAgICAgICAgYnVmW25iY2hhcl0gPSAwOwogCSAgICBpZiAoY3R4dC0+c2F4LT5jZGF0YUJsb2NrIT0gTlVMTCkgewpAQCAtMzEzOSwxMiArMzEyMCwxNCBAQAogCQljdHh0LT5zYXgtPmNoYXJhY3RlcnMoY3R4dC0+dXNlckRhdGEsIGJ1ZiwgbmJjaGFyKTsKIAkgICAgfQogCSAgICBuYmNoYXIgPSAwOworICAgICAgICAgICAgU0hSSU5LOwogCX0KLQlHUk9XOwotCU5FWFRMKGwpOwogCWN1ciA9IENVUl9DSEFSKGwpOwogICAgIH0KIAorICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoKG5iY2hhciAhPSAwKSAmJiAoY3R4dC0+c2F4ICE9IE5VTEwpICYmICghY3R4dC0+ZGlzYWJsZVNBWCkpIHsKICAgICAgICAgYnVmW25iY2hhcl0gPSAwOwogCWlmIChjdHh0LT5zYXgtPmNkYXRhQmxvY2shPSBOVUxMKSB7CkBAIC0zMTc1LDEyICszMTU4LDEwIEBACiAgICAgeG1sQ2hhciBidWZbSFRNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFICsgNl07CiAgICAgaW50IG5iY2hhciA9IDA7CiAgICAgaW50IGN1ciwgbDsKLSAgICBpbnQgY2h1bmsgPSAwOwogCiAgICAgaWYgKHJlYWRhaGVhZCkKICAgICAgICAgYnVmW25iY2hhcisrXSA9IHJlYWRhaGVhZDsKIAotICAgIFNIUklOSzsKICAgICBjdXIgPSBDVVJfQ0hBUihsKTsKICAgICB3aGlsZSAoKChjdXIgIT0gJzwnKSB8fCAoY3R4dC0+dG9rZW4gPT0gJzwnKSkgJiYKICAgICAgICAgICAgKChjdXIgIT0gJyYnKSB8fCAoY3R4dC0+dG9rZW4gPT0gJyYnKSkgJiYKQEAgLTMxOTEsNiArMzE3Miw3IEBACiAJfSBlbHNlIHsKIAkgICAgQ09QWV9CVUYobCxidWYsbmJjaGFyLGN1cik7CiAJfQorCU5FWFRMKGwpOwogCWlmIChuYmNoYXIgPj0gSFRNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFKSB7CiAgICAgICAgICAgICBidWZbbmJjaGFyXSA9IDA7CiAKQEAgLTMyMTQsMjEgKzMxOTYsMTIgQEAKIAkJfQogCSAgICB9CiAJICAgIG5iY2hhciA9IDA7Ci0JfQotCU5FWFRMKGwpOwotICAgICAgICBjaHVuaysrOwotICAgICAgICBpZiAoY2h1bmsgPiBIVE1MX1BBUlNFUl9CVUZGRVJfU0laRSkgewotICAgICAgICAgICAgY2h1bmsgPSAwOwogICAgICAgICAgICAgU0hSSU5LOwotICAgICAgICAgICAgR1JPVzsKLSAgICAgICAgfQotCWN1ciA9IENVUl9DSEFSKGwpOwotCWlmIChjdXIgPT0gMCkgewotCSAgICBTSFJJTks7Ci0JICAgIEdST1c7Ci0JICAgIGN1ciA9IENVUl9DSEFSKGwpOwogCX0KKwljdXIgPSBDVVJfQ0hBUihsKTsKICAgICB9CisgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobmJjaGFyICE9IDApIHsKICAgICAgICAgYnVmW25iY2hhcl0gPSAwOwogCkBAIC0zMjUxLDEyICszMjI0LDYgQEAKIAkJICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwgYnVmLCBuYmNoYXIpOwogCSAgICB9CiAJfQotICAgIH0gZWxzZSB7Ci0JLyoKLQkgKiBMb29wIGRldGVjdGlvbgotCSAqLwotCWlmIChjdXIgPT0gMCkKLQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRU9GOwogICAgIH0KIH0KIApAQCAtMzM0Nyw5ICszMzE0LDExIEBACiAgICAgaW50IGxlbiA9IDA7CiAgICAgaW50IHNpemUgPSBIVE1MX1BBUlNFUl9CVUZGRVJfU0laRTsKICAgICBpbnQgY3VyLCBsOworICAgIGludCBtYXhMZW5ndGggPSAoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9IVUdFKSA/CisgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfSFVHRV9MRU5HVEggOgorICAgICAgICAgICAgICAgICAgICBYTUxfTUFYX1RFWFRfTEVOR1RIOwogICAgIGNvbnN0IHhtbENoYXIgKnRhcmdldDsKICAgICB4bWxQYXJzZXJJbnB1dFN0YXRlIHN0YXRlOwotICAgIGludCBjb3VudCA9IDA7CiAKICAgICBpZiAoKFJBVyA9PSAnPCcpICYmIChOWFQoMSkgPT0gJz8nKSkgewogCXN0YXRlID0gY3R4dC0+aW5zdGF0ZTsKQEAgLTMzNTgsNyArMzMyNyw2IEBACiAJICogdGhpcyBpcyBhIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24uCiAJICovCiAJU0tJUCgyKTsKLQlTSFJJTks7CiAKIAkvKgogCSAqIFBhcnNlIHRoZSB0YXJnZXQgbmFtZSBhbmQgY2hlY2sgZm9yIHNwZWNpYWwgc3VwcG9ydCBsaWtlCkBAIC0zMzc5LDcgKzMzNDcsNyBAQAogCQljdHh0LT5pbnN0YXRlID0gc3RhdGU7CiAJCXJldHVybjsKIAkgICAgfQotCSAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisJICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplKTsKIAkgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCWh0bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CiAJCWN0eHQtPmluc3RhdGUgPSBzdGF0ZTsKQEAgLTMzOTcsNyArMzM2NSw3IEBACiAJCSAgICB4bWxDaGFyICp0bXA7CiAKIAkJICAgIHNpemUgKj0gMjsKLQkJICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKwkJICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplKTsKIAkJICAgIGlmICh0bXAgPT0gTlVMTCkgewogCQkJaHRtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAkJCXhtbEZyZWUoYnVmKTsKQEAgLTM0MDYsMTEgKzMzNzQsNiBAQAogCQkgICAgfQogCQkgICAgYnVmID0gdG1wOwogCQl9Ci0JCWNvdW50Kys7Ci0JCWlmIChjb3VudCA+IDUwKSB7Ci0JCSAgICBHUk9XOwotCQkgICAgY291bnQgPSAwOwotCQl9CiAgICAgICAgICAgICAgICAgaWYgKElTX0NIQVIoY3VyKSkgewogCQkgICAgQ09QWV9CVUYobCxidWYsbGVuLGN1cik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM0MTgsMTUgKzMzODEsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNoYXIgaW4gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMHglWFxuIiwgY3VyKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9QSV9OT1RfRklOSVNIRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEkgJXMgdG9vIGxvbmciLCB0YXJnZXQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KIAkJTkVYVEwobCk7CiAJCWN1ciA9IENVUl9DSEFSKGwpOwotCQlpZiAoY3VyID09IDApIHsKLQkJICAgIFNIUklOSzsKLQkJICAgIEdST1c7Ci0JCSAgICBjdXIgPSBDVVJfQ0hBUihsKTsKLQkJfQogCSAgICB9CiAJICAgIGJ1ZltsZW5dID0gMDsKKyAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSB7CisgICAgICAgICAgICAgICAgeG1sRnJlZShidWYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAkgICAgaWYgKGN1ciAhPSAnPicpIHsKIAkJaHRtbFBhcnNlRXJyKGN0eHQsIFhNTF9FUlJfUElfTk9UX0ZJTklTSEVELAogCQkgICAgICAiUGFyc2VQSTogUEkgJXMgbmV2ZXIgZW5kIC4uLlxuIiwgdGFyZ2V0LCBOVUxMKTsKQEAgLTM0NjcsNiArMzQzNiw5IEBACiAgICAgaW50IHIsIHJsOwogICAgIGludCBjdXIsIGw7CiAgICAgaW50IG5leHQsIG5sOworICAgIGludCBtYXhMZW5ndGggPSAoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9IVUdFKSA/CisgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfSFVHRV9MRU5HVEggOgorICAgICAgICAgICAgICAgICAgICBYTUxfTUFYX1RFWFRfTEVOR1RIOwogICAgIHhtbFBhcnNlcklucHV0U3RhdGUgc3RhdGU7CiAKICAgICAvKgpAQCAtMzQ3Nyw5ICszNDQ5LDggQEAKIAogICAgIHN0YXRlID0gY3R4dC0+aW5zdGF0ZTsKICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT01NRU5UOwotICAgIFNIUklOSzsKICAgICBTS0lQKDQpOwotICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSk7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgIGh0bWxFcnJNZW1vcnkoY3R4dCwgImJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJY3R4dC0+aW5zdGF0ZSA9IHN0YXRlOwpAQCAtMzUxMSwxMSArMzQ4Miw2IEBACiAJICAgIChyICE9ICctJykgfHwgKHEgIT0gJy0nKSkpIHsKIAlORVhUTChsKTsKIAluZXh0ID0gQ1VSX0NIQVIobmwpOwotCWlmIChuZXh0ID09IDApIHsKLQkgICAgU0hSSU5LOwotCSAgICBHUk9XOwotCSAgICBuZXh0ID0gQ1VSX0NIQVIobmwpOwotCX0KIAogCWlmICgocSA9PSAnLScpICYmIChyID09ICctJykgJiYgKGN1ciA9PSAnIScpICYmIChuZXh0ID09ICc+JykpIHsKIAkgIGh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX0NPTU1FTlRfTk9UX0ZJTklTSEVELApAQCAtMzUyOCw3ICszNDk0LDcgQEAKIAkgICAgeG1sQ2hhciAqdG1wOwogCiAJICAgIHNpemUgKj0gMjsKLQkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1Ziwgc2l6ZSk7CiAJICAgIGlmICh0bXAgPT0gTlVMTCkgewogCSAgICAgICAgeG1sRnJlZShidWYpOwogCSAgICAgICAgaHRtbEVyck1lbW9yeShjdHh0LCAiZ3Jvd2luZyBidWZmZXIgZmFpbGVkXG4iKTsKQEAgLTM1NDMsNiArMzUwOSwxMyBAQAogICAgICAgICAgICAgaHRtbFBhcnNlRXJySW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNoYXIgaW4gY29tbWVudCAweCVYXG4iLCBxKTsKICAgICAgICAgfQorICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICBodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9DT01NRU5UX05PVF9GSU5JU0hFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWVudCB0b28gbG9uZyIsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgeG1sRnJlZShidWYpOworICAgICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKIAlxID0gcjsKIAlxbCA9IHJsOwpAQCAtMzU1Myw2ICszNTI2LDEwIEBACiAgICAgfQogZmluaXNoZWQ6CiAgICAgYnVmW2xlbl0gPSAwOworICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSB7CisgICAgICAgIHhtbEZyZWUoYnVmKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoY3VyID09ICc+JykgewogICAgICAgICBORVhUOwogCWlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmIChjdHh0LT5zYXgtPmNvbW1lbnQgIT0gTlVMTCkgJiYKQEAgLTM1NzMsNiArMzU1MCw4IEBACiAgKiBodG1sUGFyc2VDaGFyUmVmOgogICogQGN0eHQ6ICBhbiBIVE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBSZWZlcmVuY2UgZGVjbGFyYXRpb25zCiAgKgogICogWzY2XSBDaGFyUmVmIDo6PSAnJiMnIFswLTldKyAnOycgfApAQCAtMzcwMSw3ICszNjgwLDggQEAKIAlodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9ET0NUWVBFX05PVF9GSU5JU0hFRCwKIAkgICAgICAgICAgICAgIkRPQ1RZUEUgaW1wcm9wZXJseSB0ZXJtaW5hdGVkXG4iLCBOVUxMLCBOVUxMKTsKICAgICAgICAgLyogSWdub3JlIGJvZ3VzIGNvbnRlbnQgKi8KLSAgICAgICAgd2hpbGUgKChDVVIgIT0gMCkgJiYgKENVUiAhPSAnPicpKQorICAgICAgICB3aGlsZSAoKENVUiAhPSAwKSAmJiAoQ1VSICE9ICc+JykgJiYKKyAgICAgICAgICAgICAgIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSkKICAgICAgICAgICAgIE5FWFQ7CiAgICAgfQogICAgIGlmIChDVVIgPT0gJz4nKQpAQCAtMzc3MCw5MyArMzc1MCw2IEBACiB9CiAKIC8qKgotICogaHRtbENoZWNrRW5jb2RpbmdEaXJlY3Q6Ci0gKiBAY3R4dDogIGFuIEhUTUwgcGFyc2VyIGNvbnRleHQKLSAqIEBhdHR2YWx1ZTogdGhlIGF0dHJpYnV0ZSB2YWx1ZQotICoKLSAqIENoZWNrcyBhbiBhdHRyaWJ1dGUgdmFsdWUgdG8gZGV0ZWN0Ci0gKiB0aGUgZW5jb2RpbmcKLSAqIElmIGEgbmV3IGVuY29kaW5nIGlzIGRldGVjdGVkIHRoZSBwYXJzZXIgaXMgc3dpdGNoZWQgdG8gZGVjb2RlCi0gKiBpdCBhbmQgcGFzcyBVVEY4Ci0gKi8KLXN0YXRpYyB2b2lkCi1odG1sQ2hlY2tFbmNvZGluZ0RpcmVjdChodG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICplbmNvZGluZykgewotCi0gICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChlbmNvZGluZyA9PSBOVUxMKSB8fAotICAgICAgICAoY3R4dC0+b3B0aW9ucyAmIEhUTUxfUEFSU0VfSUdOT1JFX0VOQykpCi0JcmV0dXJuOwotCi0gICAgLyogZG8gbm90IGNoYW5nZSBlbmNvZGluZyAqLwotICAgIGlmIChjdHh0LT5pbnB1dC0+ZW5jb2RpbmcgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKLQl4bWxDaGFyRW5jb2RpbmcgZW5jOwotCXhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgaGFuZGxlcjsKLQotCXdoaWxlICgoKmVuY29kaW5nID09ICcgJykgfHwgKCplbmNvZGluZyA9PSAnXHQnKSkgZW5jb2RpbmcrKzsKLQotCWlmIChjdHh0LT5pbnB1dC0+ZW5jb2RpbmcgIT0gTlVMTCkKLQkgICAgeG1sRnJlZSgoeG1sQ2hhciAqKSBjdHh0LT5pbnB1dC0+ZW5jb2RpbmcpOwotCWN0eHQtPmlucHV0LT5lbmNvZGluZyA9IHhtbFN0cmR1cChlbmNvZGluZyk7Ci0KLQllbmMgPSB4bWxQYXJzZUNoYXJFbmNvZGluZygoY29uc3QgY2hhciAqKSBlbmNvZGluZyk7Ci0JLyoKLQkgKiByZWdpc3RlcmVkIHNldCBvZiBrbm93biBlbmNvZGluZ3MKLQkgKi8KLQlpZiAoZW5jICE9IFhNTF9DSEFSX0VOQ09ESU5HX0VSUk9SKSB7Ci0JICAgIGlmICgoKGVuYyA9PSBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFKSB8fAotCSAgICAgICAgIChlbmMgPT0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZCRSkgfHwKLQkJIChlbmMgPT0gWE1MX0NIQVJfRU5DT0RJTkdfVUNTNExFKSB8fAotCQkgKGVuYyA9PSBYTUxfQ0hBUl9FTkNPRElOR19VQ1M0QkUpKSAmJgotCQkoY3R4dC0+aW5wdXQtPmJ1ZiAhPSBOVUxMKSAmJgotCQkoY3R4dC0+aW5wdXQtPmJ1Zi0+ZW5jb2RlciA9PSBOVUxMKSkgewotCQlodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlZBTElEX0VOQ09ESU5HLAotCQkgICAgICAgICAgICAgImh0bWxDaGVja0VuY29kaW5nOiB3cm9uZyBlbmNvZGluZyBtZXRhXG4iLAotCQkJICAgICBOVUxMLCBOVUxMKTsKLQkgICAgfSBlbHNlIHsKLQkJeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKLQkgICAgfQotCSAgICBjdHh0LT5jaGFyc2V0ID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGODsKLQl9IGVsc2UgewotCSAgICAvKgotCSAgICAgKiBmYWxsYmFjayBmb3IgdW5rbm93biBlbmNvZGluZ3MKLQkgICAgICovCi0JICAgIGhhbmRsZXIgPSB4bWxGaW5kQ2hhckVuY29kaW5nSGFuZGxlcigoY29uc3QgY2hhciAqKSBlbmNvZGluZyk7Ci0JICAgIGlmIChoYW5kbGVyICE9IE5VTEwpIHsKLQkJeG1sU3dpdGNoVG9FbmNvZGluZyhjdHh0LCBoYW5kbGVyKTsKLQkJY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HX1VURjg7Ci0JICAgIH0gZWxzZSB7Ci0JCWh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX1VOU1VQUE9SVEVEX0VOQ09ESU5HLAotCQkgICAgICAgICAgICAgImh0bWxDaGVja0VuY29kaW5nOiB1bmtub3duIGVuY29kaW5nICVzXG4iLAotCQkJICAgICBlbmNvZGluZywgTlVMTCk7Ci0JICAgIH0KLQl9Ci0KLQlpZiAoKGN0eHQtPmlucHV0LT5idWYgIT0gTlVMTCkgJiYKLQkgICAgKGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXIgIT0gTlVMTCkgJiYKLQkgICAgKGN0eHQtPmlucHV0LT5idWYtPnJhdyAhPSBOVUxMKSAmJgotCSAgICAoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyICE9IE5VTEwpKSB7Ci0JICAgIGludCBuYmNoYXJzOwotCSAgICBpbnQgcHJvY2Vzc2VkOwotCi0JICAgIC8qCi0JICAgICAqIGNvbnZlcnQgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byB0aGUgcGFyc2VyIHJlYWRpbmcgYnVmZmVyLgotCSAgICAgKi8KLQkgICAgcHJvY2Vzc2VkID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOwotCSAgICB4bWxCdWZTaHJpbmsoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyLCBwcm9jZXNzZWQpOwotCSAgICBuYmNoYXJzID0geG1sQ2hhckVuY0lucHV0KGN0eHQtPmlucHV0LT5idWYsIDEpOwotICAgICAgICAgICAgeG1sQnVmUmVzZXRJbnB1dChjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0KTsKLQkgICAgaWYgKG5iY2hhcnMgPCAwKSB7Ci0JCWh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX0lOVkFMSURfRU5DT0RJTkcsCi0JCSAgICAgICAgICAgICAiaHRtbENoZWNrRW5jb2Rpbmc6IGVuY29kZXIgZXJyb3JcbiIsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotCSAgICB9Ci0JfQotICAgIH0KLX0KLQotLyoqCiAgKiBodG1sQ2hlY2tFbmNvZGluZzoKICAqIEBjdHh0OiAgYW4gSFRNTCBwYXJzZXIgY29udGV4dAogICogQGF0dHZhbHVlOiB0aGUgYXR0cmlidXRlIHZhbHVlCkBAIC0zODg0LDcgKzM3NzcsNyBAQAogCWVuY29kaW5nID0geG1sU3RyY2FzZXN0cihhdHR2YWx1ZSwgQkFEX0NBU1QiPSIpOwogICAgIGlmIChlbmNvZGluZyAmJiAqZW5jb2RpbmcgPT0gJz0nKSB7CiAJZW5jb2RpbmcgKys7Ci0JaHRtbENoZWNrRW5jb2RpbmdEaXJlY3QoY3R4dCwgZW5jb2RpbmcpOworCXhtbFNldERlY2xhcmVkRW5jb2RpbmcoY3R4dCwgeG1sU3RyZHVwKGVuY29kaW5nKSk7CiAgICAgfQogfQogCkBAIC0zOTEzLDcgKzM4MDYsNyBAQAogCSAmJiAoIXhtbFN0cmNhc2VjbXAodmFsdWUsIEJBRF9DQVNUIkNvbnRlbnQtVHlwZSIpKSkKIAkgICAgaHR0cCA9IDE7CiAJZWxzZSBpZiAoKHZhbHVlICE9IE5VTEwpICYmICgheG1sU3RyY2FzZWNtcChhdHQsIEJBRF9DQVNUImNoYXJzZXQiKSkpCi0JICAgIGh0bWxDaGVja0VuY29kaW5nRGlyZWN0KGN0eHQsIHZhbHVlKTsKKwkgICAgeG1sU2V0RGVjbGFyZWRFbmNvZGluZyhjdHh0LCB4bWxTdHJkdXAodmFsdWUpKTsKIAllbHNlIGlmICgodmFsdWUgIT0gTlVMTCkgJiYgKCF4bWxTdHJjYXNlY21wKGF0dCwgQkFEX0NBU1QiY29udGVudCIpKSkKIAkgICAgY29udGVudCA9IHZhbHVlOwogCWF0dCA9IGF0dHNbaSsrXTsKQEAgLTQwMzMsNyArMzkyNiw4IEBACiAgICAgU0tJUF9CTEFOS1M7CiAgICAgd2hpbGUgKChDVVIgIT0gMCkgJiYKICAgICAgICAgICAgKENVUiAhPSAnPicpICYmCi0JICAgKChDVVIgIT0gJy8nKSB8fCAoTlhUKDEpICE9ICc+JykpKSB7CisJICAgKChDVVIgIT0gJy8nKSB8fCAoTlhUKDEpICE9ICc+JykpICYmCisgICAgICAgICAgIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSkgewogCUdST1c7CiAJYXR0bmFtZSA9IGh0bWxQYXJzZUF0dHJpYnV0ZShjdHh0LCAmYXR0dmFsdWUpOwogICAgICAgICBpZiAoYXR0bmFtZSAhPSBOVUxMKSB7CkBAIC00MDk0LDcgKzM5ODgsOCBAQAogCSAgICAgKiB0aGUgZW5kIG9mIHRoZSB0YWcuICovCiAJICAgIHdoaWxlICgoQ1VSICE9IDApICYmCiAJICAgICAgICAgICAhKElTX0JMQU5LX0NIKENVUikpICYmIChDVVIgIT0gJz4nKSAmJgotCQkgICAoKENVUiAhPSAnLycpIHx8IChOWFQoMSkgIT0gJz4nKSkpCisJCSAgICgoQ1VSICE9ICcvJykgfHwgKE5YVCgxKSAhPSAnPicpKSAmJgorICAgICAgICAgICAgICAgICAgIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSkKIAkJTkVYVDsKIAl9CiAKQEAgLTQ0NjEsNiArNDM1Niw4IEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaHRtbFBhcnNlQ2hhckRhdGEoY3R4dCk7CiAgICAgICAgIH0KKworICAgICAgICBTSFJJTks7CiAgICAgICAgIEdST1c7CiAgICAgfQogICAgIGlmIChjdXJyZW50Tm9kZSAhPSBOVUxMKSB4bWxGcmVlKGN1cnJlbnROb2RlKTsKQEAgLTQ0NzAsNiArNDM2Nyw4IEBACiAgKiBodG1sUGFyc2VFbGVtZW50OgogICogQGN0eHQ6ICBhbiBIVE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBIVE1MIGVsZW1lbnQsIHRoaXMgaXMgaGlnaGx5IHJlY3Vyc2l2ZQogICogdGhpcyBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgY29kZSB2ZXJzaW9ucwogICoKQEAgLTQ3MjcsOCArNDYyNiwxNiBAQAogICAgIGludCBkZXB0aDsKICAgICBjb25zdCB4bWxDaGFyICpuYW1lOwogCi0gICAgY3VycmVudE5vZGUgPSB4bWxTdHJkdXAoY3R4dC0+bmFtZSk7CiAgICAgZGVwdGggPSBjdHh0LT5uYW1lTnI7CisgICAgaWYgKGRlcHRoIDw9IDApIHsKKyAgICAgICAgY3VycmVudE5vZGUgPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnJlbnROb2RlID0geG1sU3RyZHVwKGN0eHQtPm5hbWUpOworICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gTlVMTCkgeworICAgICAgICAgICAgaHRtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KICAgICB3aGlsZSAoMSkgewogICAgICAgICBHUk9XOwogCkBAIC00NzQ0LDggKzQ2NTEsMTYgQEAKIAkJaWYgKGN1cnJlbnROb2RlICE9IE5VTEwpCiAJCSAgICB4bWxGcmVlKGN1cnJlbnROb2RlKTsKIAotCSAgICAgICAgY3VycmVudE5vZGUgPSB4bWxTdHJkdXAoY3R4dC0+bmFtZSk7CiAJICAgICAgICBkZXB0aCA9IGN0eHQtPm5hbWVOcjsKKyAgICAgICAgICAgICAgICBpZiAoZGVwdGggPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSB4bWxTdHJkdXAoY3R4dC0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBodG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAJICAgIH0KIAkgICAgY29udGludWU7IC8qIHdoaWxlICovCiAgICAgICAgIH0KQEAgLTQ3NjcsNiArNDY4MiwxMCBAQAogCSAgICAgICAgICAgIHhtbEZyZWUoY3VycmVudE5vZGUpOwogCiAJICAgICAgICBjdXJyZW50Tm9kZSA9IHhtbFN0cmR1cChjdHh0LT5uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBodG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAJICAgICAgICBkZXB0aCA9IGN0eHQtPm5hbWVOcjsKIAkgICAgICAgIGNvbnRpbnVlOwogCSAgICB9CkBAIC00NzkwLDYgKzQ3MDksMTAgQEAKIAkgICAgaWYgKGN1cnJlbnROb2RlICE9IE5VTEwpIHhtbEZyZWUoY3VycmVudE5vZGUpOwogCiAJICAgIGN1cnJlbnROb2RlID0geG1sU3RyZHVwKGN0eHQtPm5hbWUpOworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBodG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCSAgICBkZXB0aCA9IGN0eHQtPm5hbWVOcjsKIAkgICAgY29udGludWU7CiAJfQpAQCAtNDg0MSw2ICs0NzY0LDEwIEBACiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gTlVMTCkgeG1sRnJlZShjdXJyZW50Tm9kZSk7CiAKICAgICAgICAgICAgIGN1cnJlbnROb2RlID0geG1sU3RyZHVwKGN0eHQtPm5hbWUpOworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBodG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVwdGggPSBjdHh0LT5uYW1lTnI7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoQ1VSID09ICc8JykgewpAQCAtNDg3Miw2ICs0Nzk5LDggQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBodG1sUGFyc2VDaGFyRGF0YShjdHh0KTsKICAgICAgICAgfQorCisgICAgICAgIFNIUklOSzsKICAgICAgICAgR1JPVzsKICAgICB9CiAgICAgaWYgKGN1cnJlbnROb2RlICE9IE5VTEwpIHhtbEZyZWUoY3VycmVudE5vZGUpOwpAQCAtNDkwNCw0NCArNDgzMywzMSBAQAogCiBpbnQKIGh0bWxQYXJzZURvY3VtZW50KGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKLSAgICB4bWxDaGFyIHN0YXJ0WzRdOwotICAgIHhtbENoYXJFbmNvZGluZyBlbmM7CiAgICAgeG1sRHRkUHRyIGR0ZDsKIAogICAgIHhtbEluaXRQYXJzZXIoKTsKIAotICAgIGh0bWxEZWZhdWx0U0FYSGFuZGxlckluaXQoKTsKLQogICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoY3R4dC0+aW5wdXQgPT0gTlVMTCkpIHsKIAlodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKIAkJICAgICAiaHRtbFBhcnNlRG9jdW1lbnQ6IGNvbnRleHQgZXJyb3JcbiIsIE5VTEwsIE5VTEwpOwogCXJldHVybihYTUxfRVJSX0lOVEVSTkFMX0VSUk9SKTsKICAgICB9Ci0gICAgY3R4dC0+aHRtbCA9IDE7Ci0gICAgY3R4dC0+bGluZW51bWJlcnMgPSAxOwotICAgIEdST1c7CisKICAgICAvKgogICAgICAqIFNBWDogYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nLgogICAgICAqLwogICAgIGlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5zZXREb2N1bWVudExvY2F0b3IpKQogICAgICAgICBjdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcihjdHh0LT51c2VyRGF0YSwgJnhtbERlZmF1bHRTQVhMb2NhdG9yKTsKIAotICAgIGlmICgoY3R4dC0+ZW5jb2RpbmcgPT0gKGNvbnN0IHhtbENoYXIgKilYTUxfQ0hBUl9FTkNPRElOR19OT05FKSAmJgotICAgICAgICAoKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyKSA+PSA0KSkgewotCS8qCi0JICogR2V0IHRoZSA0IGZpcnN0IGJ5dGVzIGFuZCBkZWNvZGUgdGhlIGNoYXJzZXQKLQkgKiBpZiBlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORQotCSAqIHBsdWcgc29tZSBlbmNvZGluZyBjb252ZXJzaW9uIHJvdXRpbmVzLgotCSAqLwotCXN0YXJ0WzBdID0gUkFXOwotCXN0YXJ0WzFdID0gTlhUKDEpOwotCXN0YXJ0WzJdID0gTlhUKDIpOwotCXN0YXJ0WzNdID0gTlhUKDMpOwotCWVuYyA9IHhtbERldGVjdENoYXJFbmNvZGluZygmc3RhcnRbMF0sIDQpOwotCWlmIChlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSkgewotCSAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBlbmMpOwotCX0KLSAgICB9CisgICAgeG1sRGV0ZWN0RW5jb2RpbmcoY3R4dCk7CisKKyAgICAvKgorICAgICAqIFRoaXMgaXMgd3JvbmcgYnV0IG1hdGNoZXMgbG9uZy1zdGFuZGluZyBiZWhhdmlvci4gSW4gbW9zdCBjYXNlcywKKyAgICAgKiBhIGRvY3VtZW50IHN0YXJ0aW5nIHdpdGggYW4gWE1MIGRlY2xhcmF0aW9uIHdpbGwgc3BlY2lmeSBVVEYtOC4KKyAgICAgKi8KKyAgICBpZiAoKChjdHh0LT5pbnB1dC0+ZmxhZ3MgJiBYTUxfSU5QVVRfSEFTX0VOQ09ESU5HKSA9PSAwKSAmJgorICAgICAgICAoeG1sU3RybmNtcChjdHh0LT5pbnB1dC0+Y3VyLCBCQURfQ0FTVCAiPD94bSIsIDQpID09IDApKQorICAgICAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBYTUxfQ0hBUl9FTkNPRElOR19VVEY4KTsKIAogICAgIC8qCiAgICAgICogV2lwZSBvdXQgZXZlcnl0aGluZyB3aGljaCBpcyBiZWZvcmUgdGhlIGZpcnN0ICc8JwpAQCAtNTAzMiw2ICs0OTQ4LDggQEAKIC8qKgogICogaHRtbEluaXRQYXJzZXJDdHh0OgogICogQGN0eHQ6ICBhbiBIVE1MIHBhcnNlciBjb250ZXh0CisgKiBAc2F4OiAgU0FYIGhhbmRsZXIKKyAqIEB1c2VyRGF0YTogIHVzZXIgZGF0YQogICoKICAqIEluaXRpYWxpemUgYSBwYXJzZXIgY29udGV4dAogICoKQEAgLTUwMzksMTAgKzQ5NTcsOSBAQAogICovCiAKIHN0YXRpYyBpbnQKLWh0bWxJbml0UGFyc2VyQ3R4dChodG1sUGFyc2VyQ3R4dFB0ciBjdHh0KQoraHRtbEluaXRQYXJzZXJDdHh0KGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IGh0bWxTQVhIYW5kbGVyICpzYXgsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCiB7Ci0gICAgaHRtbFNBWEhhbmRsZXIgKnNheDsKLQogICAgIGlmIChjdHh0ID09IE5VTEwpIHJldHVybigtMSk7CiAgICAgbWVtc2V0KGN0eHQsIDAsIHNpemVvZihodG1sUGFyc2VyQ3R4dCkpOwogCkBAIC01MDUxLDEyICs0OTY4LDIxIEBACiAgICAgICAgIGh0bWxFcnJNZW1vcnkoTlVMTCwgImh0bWxJbml0UGFyc2VyQ3R4dDogb3V0IG9mIG1lbW9yeVxuIik7CiAJcmV0dXJuKC0xKTsKICAgICB9Ci0gICAgc2F4ID0gKGh0bWxTQVhIYW5kbGVyICopIHhtbE1hbGxvYyhzaXplb2YoaHRtbFNBWEhhbmRsZXIpKTsKLSAgICBpZiAoc2F4ID09IE5VTEwpIHsKKworICAgIGlmIChjdHh0LT5zYXggPT0gTlVMTCkKKyAgICAgICAgY3R4dC0+c2F4ID0gKGh0bWxTQVhIYW5kbGVyICopIHhtbE1hbGxvYyhzaXplb2YoaHRtbFNBWEhhbmRsZXIpKTsKKyAgICBpZiAoY3R4dC0+c2F4ID09IE5VTEwpIHsKICAgICAgICAgaHRtbEVyck1lbW9yeShOVUxMLCAiaHRtbEluaXRQYXJzZXJDdHh0OiBvdXQgb2YgbWVtb3J5XG4iKTsKIAlyZXR1cm4oLTEpOwogICAgIH0KLSAgICBtZW1zZXQoc2F4LCAwLCBzaXplb2YoaHRtbFNBWEhhbmRsZXIpKTsKKyAgICBpZiAoc2F4ID09IE5VTEwpIHsKKyAgICAgICAgbWVtc2V0KGN0eHQtPnNheCwgMCwgc2l6ZW9mKGh0bWxTQVhIYW5kbGVyKSk7CisgICAgICAgIHhtbFNBWDJJbml0SHRtbERlZmF1bHRTQVhIYW5kbGVyKGN0eHQtPnNheCk7CisgICAgICAgIGN0eHQtPnVzZXJEYXRhID0gY3R4dDsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1jcHkoY3R4dC0+c2F4LCBzYXgsIHNpemVvZihodG1sU0FYSGFuZGxlcikpOworICAgICAgICBjdHh0LT51c2VyRGF0YSA9IHVzZXJEYXRhID8gdXNlckRhdGEgOiBjdHh0OworICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIHRoZSBJbnB1dCBzdGFjayAqLwogICAgIGN0eHQtPmlucHV0VGFiID0gKGh0bWxQYXJzZXJJbnB1dFB0ciAqKQpAQCAtNTExNSwxMCArNTA0MSw2IEBACiAgICAgY3R4dC0+bm9kZUluZm9OciAgPSAwOwogICAgIGN0eHQtPm5vZGVJbmZvTWF4ID0gMDsKIAotICAgIGN0eHQtPnNheCA9IHNheDsKLSAgICB4bWxTQVgySW5pdEh0bWxEZWZhdWx0U0FYSGFuZGxlcihzYXgpOwotCi0gICAgY3R4dC0+dXNlckRhdGEgPSBjdHh0OwogICAgIGN0eHQtPm15RG9jID0gTlVMTDsKICAgICBjdHh0LT53ZWxsRm9ybWVkID0gMTsKICAgICBjdHh0LT5yZXBsYWNlRW50aXRpZXMgPSAwOwpAQCAtNTE2Miw2ICs1MDg0LDIzIEBACiBodG1sUGFyc2VyQ3R4dFB0cgogaHRtbE5ld1BhcnNlckN0eHQodm9pZCkKIHsKKyAgICByZXR1cm4oaHRtbE5ld1NBWFBhcnNlckN0eHQoTlVMTCwgTlVMTCkpOworfQorCisvKioKKyAqIGh0bWxOZXdTQVhQYXJzZXJDdHh0OgorICogQHNheDogIFNBWCBoYW5kbGVyCisgKiBAdXNlckRhdGE6ICB1c2VyIGRhdGEKKyAqCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBTQVggcGFyc2VyIGNvbnRleHQuIElmIHVzZXJEYXRhIGlzIE5VTEwsCisgKiB0aGUgcGFyc2VyIGNvbnRleHQgd2lsbCBiZSBwYXNzZWQgYXMgdXNlciBkYXRhLgorICoKKyAqIFJldHVybnMgdGhlIGh0bWxQYXJzZXJDdHh0UHRyIG9yIE5VTEwgaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGVycm9yCisgKi8KKworaHRtbFBhcnNlckN0eHRQdHIKK2h0bWxOZXdTQVhQYXJzZXJDdHh0KGNvbnN0IGh0bWxTQVhIYW5kbGVyICpzYXgsIHZvaWQgKnVzZXJEYXRhKQorewogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKIAogICAgIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxQYXJzZXJDdHh0KSk7CkBAIC01MTcwLDcgKzUxMDksNyBAQAogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgbWVtc2V0KGN0eHQsIDAsIHNpemVvZih4bWxQYXJzZXJDdHh0KSk7Ci0gICAgaWYgKGh0bWxJbml0UGFyc2VyQ3R4dChjdHh0KSA8IDApIHsKKyAgICBpZiAoaHRtbEluaXRQYXJzZXJDdHh0KGN0eHQsIHNheCwgdXNlckRhdGEpIDwgMCkgewogICAgICAgICBodG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KQEAgLTUyMDIsNyArNTE0MSwxMCBAQAogCXJldHVybihOVUxMKTsKIAogICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtKGJ1ZmZlciwgc2l6ZSwgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CiAKICAgICBpbnB1dCA9IHhtbE5ld0lucHV0U3RyZWFtKGN0eHQpOwogICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7CkBAIC01MjIxLDcgKzUxNjMsNyBAQAogCiAvKioKICAqIGh0bWxDcmVhdGVEb2NQYXJzZXJDdHh0OgotICogQGN1cjogIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB4bWxDaGFyCisgKiBAc3RyOiAgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHhtbENoYXIKICAqIEBlbmNvZGluZzogIGEgZnJlZSBmb3JtIEMgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIEhUTUwgZG9jdW1lbnQgZW5jb2RpbmcsIG9yIE5VTEwKICAqCiAgKiBDcmVhdGUgYSBwYXJzZXIgY29udGV4dCBmb3IgYW4gSFRNTCBkb2N1bWVudC4KQEAgLTUyMzEsMjUgKzUxNzMsNDEgQEAKICAqIFJldHVybnMgdGhlIG5ldyBwYXJzZXIgY29udGV4dCBvciBOVUxMCiAgKi8KIHN0YXRpYyBodG1sUGFyc2VyQ3R4dFB0cgotaHRtbENyZWF0ZURvY1BhcnNlckN0eHQoY29uc3QgeG1sQ2hhciAqY3VyLCBjb25zdCBjaGFyICplbmNvZGluZykgewotICAgIGludCBsZW47Ci0gICAgaHRtbFBhcnNlckN0eHRQdHIgY3R4dDsKK2h0bWxDcmVhdGVEb2NQYXJzZXJDdHh0KGNvbnN0IHhtbENoYXIgKnN0ciwgY29uc3QgY2hhciAqZW5jb2RpbmcpIHsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmOwogCi0gICAgaWYgKGN1ciA9PSBOVUxMKQorICAgIGlmIChzdHIgPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7Ci0gICAgbGVuID0geG1sU3RybGVuKGN1cik7Ci0gICAgY3R4dCA9IGh0bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KChjaGFyICopY3VyLCBsZW4pOworCisgICAgY3R4dCA9IGh0bWxOZXdQYXJzZXJDdHh0KCk7CiAgICAgaWYgKGN0eHQgPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7CiAKKyAgICBidWYgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0cmluZyhzdHIpOworICAgIGlmIChidWYgPT0gTlVMTCkgeworCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgaW5wdXQgPSB4bWxOZXdJbnB1dFN0cmVhbShjdHh0KTsKKyAgICBpZiAoaW5wdXQgPT0gTlVMTCkgeworCXhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOworCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworCXJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBpbnB1dC0+ZmlsZW5hbWUgPSBOVUxMOworICAgIGlucHV0LT5idWYgPSBidWY7CisgICAgeG1sQnVmUmVzZXRJbnB1dChidWYtPmJ1ZmZlciwgaW5wdXQpOworCisgICAgaW5wdXRQdXNoKGN0eHQsIGlucHV0KTsKKwogICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7CiAJeG1sQ2hhckVuY29kaW5nIGVuYzsKIAl4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXI7CiAKLQlpZiAoY3R4dC0+aW5wdXQtPmVuY29kaW5nICE9IE5VTEwpCi0JICAgIHhtbEZyZWUoKHhtbENoYXIgKikgY3R4dC0+aW5wdXQtPmVuY29kaW5nKTsKLQljdHh0LT5pbnB1dC0+ZW5jb2RpbmcgPSB4bWxTdHJkdXAoKGNvbnN0IHhtbENoYXIgKikgZW5jb2RpbmcpOwotCiAJZW5jID0geG1sUGFyc2VDaGFyRW5jb2RpbmcoZW5jb2RpbmcpOwogCS8qCiAJICogcmVnaXN0ZXJlZCBzZXQgb2Yga25vd24gZW5jb2RpbmdzCkBAIC01Mjc1LDYgKzUyMzMsNyBAQAogCSAgICB9CiAJfQogICAgIH0KKwogICAgIHJldHVybihjdHh0KTsKIH0KIApAQCAtNTMwNywzMyArNTI2NiwyMCBAQAogaHRtbFBhcnNlTG9va3VwU2VxdWVuY2UoaHRtbFBhcnNlckN0eHRQdHIgY3R4dCwgeG1sQ2hhciBmaXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXIgbmV4dCwgeG1sQ2hhciB0aGlyZCwgaW50IGlnbm9yZWF0dHJ2YWwpCiB7Ci0gICAgaW50IGJhc2UsIGxlbjsKKyAgICBzaXplX3QgYmFzZSwgbGVuOwogICAgIGh0bWxQYXJzZXJJbnB1dFB0ciBpbjsKICAgICBjb25zdCB4bWxDaGFyICpidWY7Ci0gICAgaW50IGludmFsdWUgPSAwOwotICAgIGNoYXIgdmFsZGVsbGltID0gMHgwOworICAgIGludCBxdW90ZTsKIAogICAgIGluID0gY3R4dC0+aW5wdXQ7CiAgICAgaWYgKGluID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoLTEpOwogCi0gICAgYmFzZSA9IGluLT5jdXIgLSBpbi0+YmFzZTsKLSAgICBpZiAoYmFzZSA8IDApCi0gICAgICAgIHJldHVybiAoLTEpOworICAgIGJhc2UgPSBjdHh0LT5jaGVja0luZGV4OworICAgIHF1b3RlID0gY3R4dC0+ZW5kQ2hlY2tTdGF0ZTsKIAotICAgIGlmIChjdHh0LT5jaGVja0luZGV4ID4gYmFzZSkgewotICAgICAgICBiYXNlID0gY3R4dC0+Y2hlY2tJbmRleDsKLSAgICAgICAgLyogQWJ1c2UgaGFzUEVyZWZzIG1lbWJlciB0byByZXN0b3JlIGN1cnJlbnQgc3RhdGUuICovCi0gICAgICAgIGludmFsdWUgPSBjdHh0LT5oYXNQRXJlZnMgJiAxID8gMSA6IDA7Ci0gICAgfQotCi0gICAgaWYgKGluLT5idWYgPT0gTlVMTCkgewotICAgICAgICBidWYgPSBpbi0+YmFzZTsKLSAgICAgICAgbGVuID0gaW4tPmxlbmd0aDsKLSAgICB9IGVsc2UgewotICAgICAgICBidWYgPSB4bWxCdWZDb250ZW50KGluLT5idWYtPmJ1ZmZlcik7Ci0gICAgICAgIGxlbiA9IHhtbEJ1ZlVzZShpbi0+YnVmLT5idWZmZXIpOwotICAgIH0KKyAgICBidWYgPSBpbi0+Y3VyOworICAgIGxlbiA9IGluLT5lbmQgLSBpbi0+Y3VyOwogCiAgICAgLyogdGFrZSBpbnRvIGFjY291bnQgdGhlIHNlcXVlbmNlIGxlbmd0aCAqLwogICAgIGlmICh0aGlyZCkKQEAgLTUzNDEsMTkgKzUyODcsMTkgQEAKICAgICBlbHNlIGlmIChuZXh0KQogICAgICAgICBsZW4tLTsKICAgICBmb3IgKDsgYmFzZSA8IGxlbjsgYmFzZSsrKSB7CisgICAgICAgIGlmIChiYXNlID49IElOVF9NQVggLyAyKSB7CisgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgICAgIGN0eHQtPmVuZENoZWNrU3RhdGUgPSAwOworICAgICAgICAgICAgcmV0dXJuIChiYXNlIC0gMik7CisgICAgICAgIH0KICAgICAgICAgaWYgKGlnbm9yZWF0dHJ2YWwpIHsKKyAgICAgICAgICAgIGlmIChxdW90ZSkgeworICAgICAgICAgICAgICAgIGlmIChidWZbYmFzZV0gPT0gcXVvdGUpCisgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChidWZbYmFzZV0gPT0gJyInIHx8IGJ1ZltiYXNlXSA9PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGludmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZltiYXNlXSA9PSB2YWxkZWxsaW0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludmFsdWUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YWxkZWxsaW0gPSBidWZbYmFzZV07Ci0gICAgICAgICAgICAgICAgICAgIGludmFsdWUgPSAxOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGludmFsdWUpIHsKKyAgICAgICAgICAgICAgICBxdW90ZSA9IGJ1ZltiYXNlXTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTM2Niw0MSArNTMxMiwxMiBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLSAgICAgICAgICAgIGlmIChuZXh0ID09IDApCi0gICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIUFA6IGxvb2t1cCAnJWMnIGZvdW5kIGF0ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCwgYmFzZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlyZCA9PSAwKQotICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFBQOiBsb29rdXAgJyVjJWMnIGZvdW5kIGF0ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCwgbmV4dCwgYmFzZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIUFA6IGxvb2t1cCAnJWMlYyVjJyBmb3VuZCBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QsIG5leHQsIHRoaXJkLCBiYXNlKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIChiYXNlIC0gKGluLT5jdXIgLSBpbi0+YmFzZSkpOworICAgICAgICAgICAgY3R4dC0+ZW5kQ2hlY2tTdGF0ZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gKGJhc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGN0eHQtPmNoZWNrSW5kZXggPSBiYXNlOwotICAgIC8qIEFidXNlIGhhc1BFcmVmcyBtZW1iZXIgdG8gdHJhY2sgY3VycmVudCBzdGF0ZS4gKi8KLSAgICBpZiAoaW52YWx1ZSkKLSAgICAgICAgY3R4dC0+aGFzUEVyZWZzIHw9IDE7Ci0gICAgZWxzZQotICAgICAgICBjdHh0LT5oYXNQRXJlZnMgJj0gfjE7Ci0jaWZkZWYgREVCVUdfUFVTSAotICAgIGlmIChuZXh0ID09IDApCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgIkhQUDogbG9va3VwICclYycgZmFpbGVkXG4iLCBmaXJzdCk7Ci0gICAgZWxzZSBpZiAodGhpcmQgPT0gMCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiSFBQOiBsb29rdXAgJyVjJWMnIGZhaWxlZFxuIiwgZmlyc3QsIG5leHQpOwotICAgIGVsc2UKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiSFBQOiBsb29rdXAgJyVjJWMlYycgZmFpbGVkXG4iLCBmaXJzdCwgbmV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXJkKTsKLSNlbmRpZgorICAgIGN0eHQtPmVuZENoZWNrU3RhdGUgPSBxdW90ZTsKICAgICByZXR1cm4gKC0xKTsKIH0KIApAQCAtNTQyMiwxNiArNTMzOSwyMyBAQAogaHRtbFBhcnNlTG9va3VwQ29tbWVudEVuZChodG1sUGFyc2VyQ3R4dFB0ciBjdHh0KQogewogICAgIGludCBtYXJrID0gMDsKLSAgICBpbnQgY3VyID0gQ1VSX1BUUiAtIEJBU0VfUFRSOworICAgIGludCBvZmZzZXQ7CiAKLSAgICB3aGlsZSAobWFyayA+PSAwKSB7CisgICAgd2hpbGUgKDEpIHsKIAltYXJrID0gaHRtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJy0nLCAnLScsIDAsIDApOwotCWlmICgobWFyayA8IDApIHx8Ci0JICAgIChOWFQobWFyaysyKSA9PSAnPicpIHx8CisJaWYgKG1hcmsgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgoTlhUKG1hcmsrMikgPT0gJz4nKSB8fAogCSAgICAoKE5YVChtYXJrKzIpID09ICchJykgJiYgKE5YVChtYXJrKzMpID09ICc+JykpKSB7Ci0JICAgIHJldHVybiBtYXJrOworICAgICAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisJICAgIGJyZWFrOwogCX0KLQljdHh0LT5jaGVja0luZGV4ID0gY3VyICsgbWFyayArIDE7CisgICAgICAgIG9mZnNldCA9IChOWFQobWFyaysyKSA9PSAnIScpID8gMyA6IDI7CisgICAgICAgIGlmIChtYXJrICsgb2Zmc2V0ID49IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyKSB7CisJICAgIGN0eHQtPmNoZWNrSW5kZXggPSBtYXJrOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCWN0eHQtPmNoZWNrSW5kZXggPSBtYXJrICsgMTsKICAgICB9CiAgICAgcmV0dXJuIG1hcms7CiB9CkBAIC01NDU1LDY4ICs1Mzc5LDExIEBACiAKICAgICBodG1sUGFyc2VyTm9kZUluZm8gbm9kZV9pbmZvOwogCi0jaWZkZWYgREVCVUdfUFVTSAotICAgIHN3aXRjaCAoY3R4dC0+aW5zdGF0ZSkgewotCWNhc2UgWE1MX1BBUlNFUl9FT0Y6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkhQUDogdHJ5IEVPRlxuIik7IGJyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9TVEFSVDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgU1RBUlRcbiIpOyBicmVhazsKLQljYXNlIFhNTF9QQVJTRVJfTUlTQzoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgTUlTQ1xuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX0NPTU1FTlQ6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkhQUDogdHJ5IENPTU1FTlRcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9QUk9MT0c6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkhQUDogdHJ5IFBST0xPR1xuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX1NUQVJUX1RBRzoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgU1RBUlRfVEFHXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfQ09OVEVOVDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgQ09OVEVOVFxuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX0NEQVRBX1NFQ1RJT046Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkhQUDogdHJ5IENEQVRBX1NFQ1RJT05cbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9FTkRfVEFHOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJIUFA6IHRyeSBFTkRfVEFHXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfRU5USVRZX0RFQ0w6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkhQUDogdHJ5IEVOVElUWV9ERUNMXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfRU5USVRZX1ZBTFVFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJIUFA6IHRyeSBFTlRJVFlfVkFMVUVcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9BVFRSSUJVVEVfVkFMVUU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkhQUDogdHJ5IEFUVFJJQlVURV9WQUxVRVxuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX0RURDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgRFREXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfRVBJTE9HOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJIUFA6IHRyeSBFUElMT0dcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9QSToKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgUElcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9TWVNURU1fTElURVJBTDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiSFBQOiB0cnkgU1lTVEVNX0xJVEVSQUxcbiIpO2JyZWFrOwotICAgIH0KLSNlbmRpZgotCiAgICAgd2hpbGUgKDEpIHsKIAogCWluID0gY3R4dC0+aW5wdXQ7CiAJaWYgKGluID09IE5VTEwpIGJyZWFrOwotCWlmIChpbi0+YnVmID09IE5VTEwpCi0JICAgIGF2YWlsID0gaW4tPmxlbmd0aCAtIChpbi0+Y3VyIC0gaW4tPmJhc2UpOwotCWVsc2UKLQkgICAgYXZhaWwgPSAocHRyZGlmZl90KXhtbEJ1ZlVzZShpbi0+YnVmLT5idWZmZXIpIC0KLSAgICAgICAgICAgICAgICAgICAgKGluLT5jdXIgLSBpbi0+YmFzZSk7CisJYXZhaWwgPSBpbi0+ZW5kIC0gaW4tPmN1cjsKIAlpZiAoKGF2YWlsID09IDApICYmICh0ZXJtaW5hdGUpKSB7CiAJICAgIGh0bWxBdXRvQ2xvc2VPbkVuZChjdHh0KTsKIAkgICAgaWYgKChjdHh0LT5uYW1lTnIgPT0gMCkgJiYgKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpKSB7CkBAIC01NTQ5LDE3ICs1NDE2LDIzIEBACiAJCSAqLwogCSAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX1NUQVJUOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVGhpcyBpcyB3cm9uZyBidXQgbWF0Y2hlcyBsb25nLXN0YW5kaW5nIGJlaGF2aW9yLiBJbiBtb3N0CisgICAgICAgICAgICAgICAgICogY2FzZXMsIGEgZG9jdW1lbnQgc3RhcnRpbmcgd2l0aCBhbiBYTUwgZGVjbGFyYXRpb24gd2lsbAorICAgICAgICAgICAgICAgICAqIHNwZWNpZnkgVVRGLTguCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCgoY3R4dC0+aW5wdXQtPmZsYWdzICYgWE1MX0lOUFVUX0hBU19FTkNPRElORykgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKHhtbFN0cm5jbXAoY3R4dC0+aW5wdXQtPmN1ciwgQkFEX0NBU1QgIjw/eG0iLCA0KSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBYTUxfQ0hBUl9FTkNPRElOR19VVEY4KTsKKyAgICAgICAgICAgICAgICB9CisKIAkgICAgICAgIC8qCiAJCSAqIFZlcnkgZmlyc3QgY2hhcnMgcmVhZCBmcm9tIHRoZSBkb2N1bWVudCBmbG93LgogCQkgKi8KIAkJY3VyID0gaW4tPmN1clswXTsKIAkJaWYgKElTX0JMQU5LX0NIKGN1cikpIHsKIAkJICAgIFNLSVBfQkxBTktTOwotCQkgICAgaWYgKGluLT5idWYgPT0gTlVMTCkKLQkJCWF2YWlsID0gaW4tPmxlbmd0aCAtIChpbi0+Y3VyIC0gaW4tPmJhc2UpOwotCQkgICAgZWxzZQotCQkJYXZhaWwgPSAocHRyZGlmZl90KXhtbEJ1ZlVzZShpbi0+YnVmLT5idWZmZXIpIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluLT5jdXIgLSBpbi0+YmFzZSk7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsID0gaW4tPmVuZCAtIGluLT5jdXI7CiAJCX0KIAkJaWYgKChjdHh0LT5zYXgpICYmIChjdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcikpCiAJCSAgICBjdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcihjdHh0LT51c2VyRGF0YSwKQEAgLTU1NjcsNiArNTQ0MCw4IEBACiAJCWlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5zdGFydERvY3VtZW50KSAmJgogCSAgICAgICAgICAgICghY3R4dC0+ZGlzYWJsZVNBWCkpCiAJCSAgICBjdHh0LT5zYXgtPnN0YXJ0RG9jdW1lbnQoY3R4dC0+dXNlckRhdGEpOworICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAKIAkJY3VyID0gaW4tPmN1clswXTsKIAkJbmV4dCA9IGluLT5jdXJbMV07CkBAIC01NTc4LDMxICs1NDUzLDE3IEBACiAJCSAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCiAJCSAgICAgICAgKGh0bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICc+JywgMCwgMCwgMSkgPCAwKSkKIAkJCWdvdG8gZG9uZTsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBQYXJzaW5nIGludGVybmFsIHN1YnNldFxuIik7Ci0jZW5kaWYKIAkJICAgIGh0bWxQYXJzZURvY1R5cGVEZWNsKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1BST0xPRzsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBlbnRlcmluZyBQUk9MT0dcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX01JU0M7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIkhQUDogZW50ZXJpbmcgTUlTQ1xuIik7Ci0jZW5kaWYKIAkJfQogCQlicmVhazsKICAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9NSVNDOgogCQlTS0lQX0JMQU5LUzsKLQkJaWYgKGluLT5idWYgPT0gTlVMTCkKLQkJICAgIGF2YWlsID0gaW4tPmxlbmd0aCAtIChpbi0+Y3VyIC0gaW4tPmJhc2UpOwotCQllbHNlCi0JCSAgICBhdmFpbCA9IChwdHJkaWZmX3QpeG1sQnVmVXNlKGluLT5idWYtPmJ1ZmZlcikgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbi0+Y3VyIC0gaW4tPmJhc2UpOworICAgICAgICAgICAgICAgIGF2YWlsID0gaW4tPmVuZCAtIGluLT5jdXI7CiAJCS8qCiAJCSAqIG5vIGNoYXJzIGluIGJ1ZmZlcgogCQkgKi8KQEAgLTU2MjQsMjEgKzU0ODUsMTcgQEAKIAkJICAgIChpbi0+Y3VyWzJdID09ICctJykgJiYgKGluLT5jdXJbM10gPT0gJy0nKSkgewogCQkgICAgaWYgKCghdGVybWluYXRlKSAmJiAoaHRtbFBhcnNlTG9va3VwQ29tbWVudEVuZChjdHh0KSA8IDApKQogCQkJZ290byBkb25lOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJIUFA6IFBhcnNpbmcgQ29tbWVudFxuIik7Ci0jZW5kaWYKIAkJICAgIGh0bWxQYXJzZUNvbW1lbnQoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfTUlTQzsKIAkgICAgICAgIH0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICc/JykpIHsKIAkJICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYKIAkJICAgICAgICAoaHRtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJz4nLCAwLCAwLCAwKSA8IDApKQogCQkJZ290byBkb25lOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJIUFA6IFBhcnNpbmcgUElcbiIpOwotI2VuZGlmCiAJCSAgICBodG1sUGFyc2VQSShjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAJCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9NSVNDOwogCQl9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnIScpICYmCiAJCSAgICAoVVBQKDIpID09ICdEJykgJiYgKFVQUCgzKSA9PSAnTycpICYmCkBAIC01NjQ4LDM0ICs1NTA1LDIwIEBACiAJCSAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCiAJCSAgICAgICAgKGh0bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICc+JywgMCwgMCwgMSkgPCAwKSkKIAkJCWdvdG8gZG9uZTsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBQYXJzaW5nIGludGVybmFsIHN1YnNldFxuIik7Ci0jZW5kaWYKIAkJICAgIGh0bWxQYXJzZURvY1R5cGVEZWNsKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1BST0xPRzsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBlbnRlcmluZyBQUk9MT0dcbiIpOwotI2VuZGlmCiAJCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykgJiYKIAkJICAgICAgICAgICAoYXZhaWwgPCA5KSkgewogCQkgICAgZ290byBkb25lOwogCQl9IGVsc2UgewogCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCiAJCX0KIAkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfUFJPTE9HOgogCQlTS0lQX0JMQU5LUzsKLQkJaWYgKGluLT5idWYgPT0gTlVMTCkKLQkJICAgIGF2YWlsID0gaW4tPmxlbmd0aCAtIChpbi0+Y3VyIC0gaW4tPmJhc2UpOwotCQllbHNlCi0JCSAgICBhdmFpbCA9IChwdHJkaWZmX3QpeG1sQnVmVXNlKGluLT5idWYtPmJ1ZmZlcikgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbi0+Y3VyIC0gaW4tPmJhc2UpOworICAgICAgICAgICAgICAgIGF2YWlsID0gaW4tPmVuZCAtIGluLT5jdXI7CiAJCWlmIChhdmFpbCA8IDIpCiAJCSAgICBnb3RvIGRvbmU7CiAJCWN1ciA9IGluLT5jdXJbMF07CkBAIC01Njg0LDM5ICs1NTI3LDI3IEBACiAJCSAgICAoaW4tPmN1clsyXSA9PSAnLScpICYmIChpbi0+Y3VyWzNdID09ICctJykpIHsKIAkJICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYgKGh0bWxQYXJzZUxvb2t1cENvbW1lbnRFbmQoY3R4dCkgPCAwKSkKIAkJCWdvdG8gZG9uZTsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBQYXJzaW5nIENvbW1lbnRcbiIpOwotI2VuZGlmCiAJCSAgICBodG1sUGFyc2VDb21tZW50KGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1BST0xPRzsKIAkgICAgICAgIH0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICc/JykpIHsKIAkJICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYKIAkJICAgICAgICAoaHRtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJz4nLCAwLCAwLCAwKSA8IDApKQogCQkJZ290byBkb25lOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJIUFA6IFBhcnNpbmcgUElcbiIpOwotI2VuZGlmCiAJCSAgICBodG1sUGFyc2VQSShjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAJCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9QUk9MT0c7CiAJCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykgJiYKIAkJICAgICAgICAgICAoYXZhaWwgPCA0KSkgewogCQkgICAgZ290byBkb25lOwogCQl9IGVsc2UgewogCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCiAJCX0KIAkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfRVBJTE9HOgotCQlpZiAoaW4tPmJ1ZiA9PSBOVUxMKQotCQkgICAgYXZhaWwgPSBpbi0+bGVuZ3RoIC0gKGluLT5jdXIgLSBpbi0+YmFzZSk7Ci0JCWVsc2UKLQkJICAgIGF2YWlsID0gKHB0cmRpZmZfdCl4bWxCdWZVc2UoaW4tPmJ1Zi0+YnVmZmVyKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluLT5jdXIgLSBpbi0+YmFzZSk7CisgICAgICAgICAgICAgICAgYXZhaWwgPSBpbi0+ZW5kIC0gaW4tPmN1cjsKIAkJaWYgKGF2YWlsIDwgMSkKIAkJICAgIGdvdG8gZG9uZTsKIAkJY3VyID0gaW4tPmN1clswXTsKQEAgLTU3MzEsMjEgKzU1NjIsMTcgQEAKIAkJICAgIChpbi0+Y3VyWzJdID09ICctJykgJiYgKGluLT5jdXJbM10gPT0gJy0nKSkgewogCQkgICAgaWYgKCghdGVybWluYXRlKSAmJiAoaHRtbFBhcnNlTG9va3VwQ29tbWVudEVuZChjdHh0KSA8IDApKQogCQkJZ290byBkb25lOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJIUFA6IFBhcnNpbmcgQ29tbWVudFxuIik7Ci0jZW5kaWYKIAkJICAgIGh0bWxQYXJzZUNvbW1lbnQoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRVBJTE9HOwogCSAgICAgICAgfSBlbHNlIGlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJz8nKSkgewogCQkgICAgaWYgKCghdGVybWluYXRlKSAmJgogCQkgICAgICAgIChodG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnPicsIDAsIDAsIDApIDwgMCkpCiAJCQlnb3RvIGRvbmU7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIkhQUDogUGFyc2luZyBQSVxuIik7Ci0jZW5kaWYKIAkJICAgIGh0bWxQYXJzZVBJKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VQSUxPRzsKIAkJfSBlbHNlIGlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJyEnKSAmJgogCQkgICAgICAgICAgIChhdmFpbCA8IDQpKSB7CkBAIC01NzU0LDEwICs1NTgxLDYgQEAKIAkJICAgIGN0eHQtPmVyck5vID0gWE1MX0VSUl9ET0NVTUVOVF9FTkQ7CiAJCSAgICBjdHh0LT53ZWxsRm9ybWVkID0gMDsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VPRjsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBlbnRlcmluZyBFT0ZcbiIpOwotI2VuZGlmCiAJCSAgICBpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+ZW5kRG9jdW1lbnQgIT0gTlVMTCkpCiAJCQljdHh0LT5zYXgtPmVuZERvY3VtZW50KGN0eHQtPnVzZXJEYXRhKTsKIAkJICAgIGdvdG8gZG9uZTsKQEAgLTU3ODcsMTkgKzU2MTAsMTEgQEAKIAkJY3VyID0gaW4tPmN1clswXTsKIAkgICAgICAgIGlmIChjdXIgIT0gJzwnKSB7CiAJCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJIUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCiAJCSAgICBicmVhazsKIAkJfQogCQlpZiAobmV4dCA9PSAnLycpIHsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VORF9UQUc7CiAJCSAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiSFBQOiBlbnRlcmluZyBFTkRfVEFHXG4iKTsKLSNlbmRpZgogCQkgICAgYnJlYWs7CiAJCX0KIAkJaWYgKCghdGVybWluYXRlKSAmJgpAQCAtNTg0MCwxMSArNTY1NSw5IEBACiAJCSAgICBpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJiAoY3R4dC0+c2F4LT5lbmRFbGVtZW50ICE9IE5VTEwpKQogCQkJY3R4dC0+c2F4LT5lbmRFbGVtZW50KGN0eHQtPnVzZXJEYXRhLCBuYW1lKTsKIAkJICAgIGh0bWxuYW1lUG9wKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIkhQUDogZW50ZXJpbmcgQ09OVEVOVFxuIik7Ci0jZW5kaWYKIAkJICAgIGJyZWFrOwogCQl9CiAKQEAgLTU4NjYsMTEgKzU2NzksOSBAQAogCQkgICAgaWYgKGN0eHQtPnJlY29yZF9pbmZvKQogCQkgICAgICAgIGh0bWxOb2RlSW5mb1B1c2goY3R4dCwgJm5vZGVfaW5mbyk7CiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAJCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJIUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCiAJCSAgICBicmVhazsKIAkJfQogCkBAIC01ODg2LDExICs1Njk3LDkgQEAKICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+cmVjb3JkX2luZm8pCiAJICAgICAgICAgICAgaHRtbE5vZGVJbmZvUHVzaChjdHh0LCAmbm9kZV9pbmZvKTsKIAorICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAJCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJIUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAJICAgIH0KICAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9DT05URU5UOiB7CkBAIC01OTAwLDcgKzU3MDksNyBAQAogCQkgKiBIYW5kbGUgcHJlcGFyc2VkIGVudGl0aWVzIGFuZCBjaGFyUmVmCiAJCSAqLwogCQlpZiAoY3R4dC0+dG9rZW4gIT0gMCkgewotCQkgICAgY2hyWzBdID0gKHhtbENoYXIpIGN0eHQtPnRva2VuOworCQkgICAgY2hyWzBdID0gY3R4dC0+dG9rZW47CiAJCSAgICBodG1sQ2hlY2tQYXJhZ3JhcGgoY3R4dCk7CiAJCSAgICBpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJiAoY3R4dC0+c2F4LT5jaGFyYWN0ZXJzICE9IE5VTEwpKQogCQkJY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKGN0eHQtPnVzZXJEYXRhLCBjaHIsIDEpOwpAQCAtNTk1MiwyMCArNTc2MSwyNiBAQAogCQkJaWYgKGlkeCA8IDApCiAJCQkgICAgZ290byBkb25lOwogCQkgICAgICAgIHZhbCA9IGluLT5jdXJbaWR4ICsgMl07Ci0JCQlpZiAodmFsID09IDApIC8qIGJhZCBjdXQgb2YgaW5wdXQgKi8KKwkJCWlmICh2YWwgPT0gMCkgeyAvKiBiYWQgY3V0IG9mIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGSVhNRTogaHRtbFBhcnNlU2NyaXB0IGNoZWNrcyBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYXJhY3RlcnMgYWZ0ZXIgJzwvJy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gaWR4OwogCQkJICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJICAgIH0KIAkJICAgIGh0bWxQYXJzZVNjcmlwdChjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAJCSAgICBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICcvJykpIHsKIAkJCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VORF9UQUc7CiAJCQljdHh0LT5jaGVja0luZGV4ID0gMDsKLSNpZmRlZiBERUJVR19QVVNICi0JCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCQkiSFBQOiBlbnRlcmluZyBFTkRfVEFHXG4iKTsKLSNlbmRpZgogCQkJYnJlYWs7CiAJCSAgICB9CiAJCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsIDwgNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogU29tZXRpbWVzIERPQ1RZUEUgYXJyaXZlcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBkb2N1bWVudAogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU5ODQsMTEgKzU3OTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChodG1sUGFyc2VMb29rdXBDb21tZW50RW5kKGN0eHQpIDwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwotI2lmZGVmIERFQlVHX1BVU0gKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFBQOiBQYXJzaW5nIENvbW1lbnRcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBodG1sUGFyc2VDb21tZW50KGN0eHQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYKQEAgLTYwMDAsMzEgKzU4MTMsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKGh0bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICc+JywgMCwgMCwgMCkgPCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSNpZmRlZiBERUJVR19QVVNICi0gICAgICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIUFA6IFBhcnNpbmcgUElcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIGh0bWxQYXJzZVBJKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnIScpICYmIChhdmFpbCA8IDQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnLycpKSB7CiAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VORF9UQUc7CiAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLSAgICAgICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhQUDogZW50ZXJpbmcgRU5EX1RBR1xuIik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY3VyID09ICc8JykgJiYgSVNfQVNDSUlfTEVUVEVSKG5leHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYgKG5leHQgPT0gMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1NUQVJUX1RBRzsKICAgICAgICAgICAgICAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0jaWZkZWYgREVCVUdfUFVTSAotICAgICAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyID09ICc8JykgewogICAgICAgICAgICAgICAgICAgICBpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJiAoIWN0eHQtPmRpc2FibGVTQVgpICYmCkBAIC02MDQzLDEwICs1ODQ0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIChodG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnPCcsIDAsIDAsIDApIDwgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLSAgICAgICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhQUDogUGFyc2luZyBjaGFyIGRhdGFcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXIgIT0gJzwnKSAmJiAoaW4tPmN1ciA8IGluLT5lbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyID09ICcmJykgewpAQCAtNjA2NywxMjggKzU4NjQsMjAgQEAKIAkJICAgIChodG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnPicsIDAsIDAsIDApIDwgMCkpCiAJCSAgICBnb3RvIGRvbmU7CiAJCWh0bWxQYXJzZUVuZFRhZyhjdHh0KTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogCQlpZiAoY3R4dC0+bmFtZU5yID09IDApIHsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VQSUxPRzsKIAkJfSBlbHNlIHsKIAkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7CiAJCX0KIAkJY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJIUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCiAJICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9DREFUQV9TRUNUSU9OOgorCSAgICBkZWZhdWx0OgogCQlodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkJCSJIUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBDREFUQVxuIiwKLQkJCSAgICAgTlVMTCwgTlVMTCk7Ci0JCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0JCWN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiSFBQOiBlbnRlcmluZyBDT05URU5UXG4iKTsKLSNlbmRpZgorCQkJICAgICAiSFBQOiBpbnRlcm5hbCBlcnJvclxuIiwgTlVMTCwgTlVMTCk7CisJCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VPRjsKIAkJYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfRFREOgotCQlodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkJCSJIUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBEVERcbiIsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotCQljdHh0LT5jaGVja0luZGV4ID0gMDsKLSNpZmRlZiBERUJVR19QVVNICi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIkhQUDogZW50ZXJpbmcgQ09OVEVOVFxuIik7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfQ09NTUVOVDoKLQkJaHRtbFBhcnNlRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCi0JCQkiSFBQOiBpbnRlcm5hbCBlcnJvciwgc3RhdGUgPT0gQ09NTUVOVFxuIiwKLQkJCSAgICAgTlVMTCwgTlVMTCk7Ci0JCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0JCWN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiSFBQOiBlbnRlcmluZyBDT05URU5UXG4iKTsKLSNlbmRpZgotCQlicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9QSToKLQkJaHRtbFBhcnNlRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCi0JCQkiSFBQOiBpbnRlcm5hbCBlcnJvciwgc3RhdGUgPT0gUElcbiIsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotCQljdHh0LT5jaGVja0luZGV4ID0gMDsKLSNpZmRlZiBERUJVR19QVVNICi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIkhQUDogZW50ZXJpbmcgQ09OVEVOVFxuIik7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfRU5USVRZX0RFQ0w6Ci0JCWh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCQkJIkhQUDogaW50ZXJuYWwgZXJyb3IsIHN0YXRlID09IEVOVElUWV9ERUNMXG4iLAotCQkJICAgICBOVUxMLCBOVUxMKTsKLQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLQkJY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJIUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCi0JCWJyZWFrOwotICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX0VOVElUWV9WQUxVRToKLQkJaHRtbFBhcnNlRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCi0JCQkiSFBQOiBpbnRlcm5hbCBlcnJvciwgc3RhdGUgPT0gRU5USVRZX1ZBTFVFXG4iLAotCQkJICAgICBOVUxMLCBOVUxMKTsKLQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLQkJY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJIUFA6IGVudGVyaW5nIERURFxuIik7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfQVRUUklCVVRFX1ZBTFVFOgotCQlodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkJCSJIUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBBVFRSSUJVVEVfVkFMVUVcbiIsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9TVEFSVF9UQUc7Ci0JCWN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiSFBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCi0JCWJyZWFrOwotCSAgICBjYXNlIFhNTF9QQVJTRVJfU1lTVEVNX0xJVEVSQUw6Ci0JCWh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCQkgICAgIkhQUDogaW50ZXJuYWwgZXJyb3IsIHN0YXRlID09IFhNTF9QQVJTRVJfU1lTVEVNX0xJVEVSQUxcbiIsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotCQljdHh0LT5jaGVja0luZGV4ID0gMDsKLSNpZmRlZiBERUJVR19QVVNICi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIkhQUDogZW50ZXJpbmcgQ09OVEVOVFxuIik7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JICAgIGNhc2UgWE1MX1BBUlNFUl9JR05PUkU6Ci0JCWh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCQkJIkhQUDogaW50ZXJuYWwgZXJyb3IsIHN0YXRlID09IFhNTF9QQVJTRVJfSUdOT1JFXG4iLAotCQkJICAgICBOVUxMLCBOVUxMKTsKLQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLQkJY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJIUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCi0JCWJyZWFrOwotCSAgICBjYXNlIFhNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUw6Ci0JCWh0bWxQYXJzZUVycihjdHh0LCBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCQkJIkhQUDogaW50ZXJuYWwgZXJyb3IsIHN0YXRlID09IFhNTF9QQVJTRVJfTElURVJBTFxuIiwKLQkJCSAgICAgTlVMTCwgTlVMTCk7Ci0JCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0JCWN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiSFBQOiBlbnRlcmluZyBDT05URU5UXG4iKTsKLSNlbmRpZgotCQlicmVhazsKLQogCX0KICAgICB9CiBkb25lOgpAQCAtNjIxNCw5ICs1OTAzLDYgQEAKIAkJICAgIEJBRF9DQVNUICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiwKIAkJICAgIEJBRF9DQVNUICJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCIpOwogICAgIH0KLSNpZmRlZiBERUJVR19QVVNICi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJIUFA6IGRvbmUgJWRcbiIsIHJldCk7Ci0jZW5kaWYKICAgICByZXR1cm4ocmV0KTsKIH0KIApAQCAtNjI0MSw0MiArNTkyNywxNiBAQAogICAgIH0KICAgICBpZiAoKHNpemUgPiAwKSAmJiAoY2h1bmsgIT0gTlVMTCkgJiYgKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmCiAgICAgICAgIChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpICYmIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSkgIHsKLQlzaXplX3QgYmFzZSA9IHhtbEJ1ZkdldElucHV0QmFzZShjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0KTsKLQlzaXplX3QgY3VyID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOworCXNpemVfdCBwb3MgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7CiAJaW50IHJlczsKIAogCXJlcyA9IHhtbFBhcnNlcklucHV0QnVmZmVyUHVzaChjdHh0LT5pbnB1dC0+YnVmLCBzaXplLCBjaHVuayk7Ci0gICAgICAgIHhtbEJ1ZlNldElucHV0QmFzZUN1cihjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0LCBiYXNlLCBjdXIpOworICAgICAgICB4bWxCdWZVcGRhdGVJbnB1dChjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0LCBwb3MpOwogCWlmIChyZXMgPCAwKSB7Ci0JICAgIGN0eHQtPmVyck5vID0gWE1MX1BBUlNFUl9FT0Y7Ci0JICAgIGN0eHQtPmRpc2FibGVTQVggPSAxOwotCSAgICByZXR1cm4gKFhNTF9QQVJTRVJfRU9GKTsKLQl9Ci0jaWZkZWYgREVCVUdfUFVTSAotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiSFBQOiBwdXNoZWQgJWRcbiIsIHNpemUpOwotI2VuZGlmCi0KLSNpZiAwCi0JaWYgKCh0ZXJtaW5hdGUpIHx8IChjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXItPnVzZSA+IDgwKSkKLQkgICAgaHRtbFBhcnNlVHJ5T3JGaW5pc2goY3R4dCwgdGVybWluYXRlKTsKLSNlbmRpZgotICAgIH0gZWxzZSBpZiAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikgewotCWlmICgoY3R4dC0+aW5wdXQgIT0gTlVMTCkgJiYgY3R4dC0+aW5wdXQtPmJ1ZiAhPSBOVUxMKSB7Ci0JICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGluID0gY3R4dC0+aW5wdXQtPmJ1ZjsKLQkgICAgaWYgKChpbi0+ZW5jb2RlciAhPSBOVUxMKSAmJiAoaW4tPmJ1ZmZlciAhPSBOVUxMKSAmJgotCQkgICAgKGluLT5yYXcgIT0gTlVMTCkpIHsKLQkJaW50IG5iY2hhcnM7Ci0JCXNpemVfdCBiYXNlID0geG1sQnVmR2V0SW5wdXRCYXNlKGluLT5idWZmZXIsIGN0eHQtPmlucHV0KTsKLQkJc2l6ZV90IGN1cnJlbnQgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7Ci0KLQkJbmJjaGFycyA9IHhtbENoYXJFbmNJbnB1dChpbiwgdGVybWluYXRlKTsKLQkJeG1sQnVmU2V0SW5wdXRCYXNlQ3VyKGluLT5idWZmZXIsIGN0eHQtPmlucHV0LCBiYXNlLCBjdXJyZW50KTsKLQkJaWYgKG5iY2hhcnMgPCAwKSB7Ci0JCSAgICBodG1sUGFyc2VFcnIoY3R4dCwgWE1MX0VSUl9JTlZBTElEX0VOQ09ESU5HLAotCQkJICAgICAgICAgImVuY29kZXIgZXJyb3JcbiIsIE5VTEwsIE5VTEwpOwotCQkgICAgcmV0dXJuKFhNTF9FUlJfSU5WQUxJRF9FTkNPRElORyk7Ci0JCX0KLQkgICAgfQorICAgICAgICAgICAgaHRtbFBhcnNlRXJyKGN0eHQsIGN0eHQtPmlucHV0LT5idWYtPmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxQYXJzZXJJbnB1dEJ1ZmZlclB1c2ggZmFpbGVkIiwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOworCSAgICByZXR1cm4gKGN0eHQtPmVyck5vKTsKIAl9CiAgICAgfQogICAgIGh0bWxQYXJzZVRyeU9yRmluaXNoKGN0eHQsIHRlcm1pbmF0ZSk7CkBAIC02MzMwLDI2ICs1OTkwLDExIEBACiAgICAgYnVmID0geG1sQWxsb2NQYXJzZXJJbnB1dEJ1ZmZlcihlbmMpOwogICAgIGlmIChidWYgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOwogCi0gICAgY3R4dCA9IGh0bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgY3R4dCA9IGh0bWxOZXdTQVhQYXJzZXJDdHh0KHNheCwgdXNlcl9kYXRhKTsKICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CiAJeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGJ1Zik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBpZihlbmM9PVhNTF9DSEFSX0VOQ09ESU5HX1VURjggfHwgYnVmLT5lbmNvZGVyKQotCWN0eHQtPmNoYXJzZXQ9WE1MX0NIQVJfRU5DT0RJTkdfVVRGODsKLSAgICBpZiAoc2F4ICE9IE5VTEwpIHsKLQlpZiAoY3R4dC0+c2F4ICE9ICh4bWxTQVhIYW5kbGVyUHRyKSAmaHRtbERlZmF1bHRTQVhIYW5kbGVyKQotCSAgICB4bWxGcmVlKGN0eHQtPnNheCk7Ci0JY3R4dC0+c2F4ID0gKGh0bWxTQVhIYW5kbGVyUHRyKSB4bWxNYWxsb2Moc2l6ZW9mKGh0bWxTQVhIYW5kbGVyKSk7Ci0JaWYgKGN0eHQtPnNheCA9PSBOVUxMKSB7Ci0JICAgIHhtbEZyZWUoYnVmKTsKLQkgICAgeG1sRnJlZShjdHh0KTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0KLQltZW1jcHkoY3R4dC0+c2F4LCBzYXgsIHNpemVvZihodG1sU0FYSGFuZGxlcikpOwotCWlmICh1c2VyX2RhdGEgIT0gTlVMTCkKLQkgICAgY3R4dC0+dXNlckRhdGEgPSB1c2VyX2RhdGE7Ci0gICAgfQogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CiAJY3R4dC0+ZGlyZWN0b3J5ID0gTlVMTDsKICAgICB9IGVsc2UgewpAQCAtNjM1OSw3ICs2MDA0LDcgQEAKICAgICBpbnB1dFN0cmVhbSA9IGh0bWxOZXdJbnB1dFN0cmVhbShjdHh0KTsKICAgICBpZiAoaW5wdXRTdHJlYW0gPT0gTlVMTCkgewogCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwotCXhtbEZyZWUoYnVmKTsKKwl4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoYnVmKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC02Mzc1LDE1ICs2MDIwLDE2IEBACiAKICAgICBpZiAoKHNpemUgPiAwKSAmJiAoY2h1bmsgIT0gTlVMTCkgJiYgKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmCiAgICAgICAgIChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpKSAgewotCXNpemVfdCBiYXNlID0geG1sQnVmR2V0SW5wdXRCYXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwgY3R4dC0+aW5wdXQpOwotCXNpemVfdCBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7CisJc2l6ZV90IHBvcyA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKKyAgICAgICAgaW50IHJlczsKIAotCXhtbFBhcnNlcklucHV0QnVmZmVyUHVzaChjdHh0LT5pbnB1dC0+YnVmLCBzaXplLCBjaHVuayk7Ci0KLSAgICAgICAgeG1sQnVmU2V0SW5wdXRCYXNlQ3VyKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwgY3R4dC0+aW5wdXQsIGJhc2UsIGN1cik7Ci0jaWZkZWYgREVCVUdfUFVTSAotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiSFBQOiBwdXNoZWQgJWRcbiIsIHNpemUpOwotI2VuZGlmCisJcmVzID0geG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoKGN0eHQtPmlucHV0LT5idWYsIHNpemUsIGNodW5rKTsKKyAgICAgICAgeG1sQnVmVXBkYXRlSW5wdXQoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyLCBjdHh0LT5pbnB1dCwgcG9zKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGh0bWxQYXJzZUVycihjdHh0LCBjdHh0LT5pbnB1dC0+YnVmLT5lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAieG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoIGZhaWxlZFxuIiwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOworICAgICAgICB9CiAgICAgfQogICAgIGN0eHQtPnByb2dyZXNzaXZlID0gMTsKIApAQCAtNjM5OCw2ICs2MDQ0LDggQEAKICAqIEBzYXg6ICB0aGUgU0FYIGhhbmRsZXIgYmxvY2sKICAqIEB1c2VyRGF0YTogaWYgdXNpbmcgU0FYLCB0aGlzIHBvaW50ZXIgd2lsbCBiZSBwcm92aWRlZCBvbiBjYWxsYmFja3MuCiAgKgorICogREVQUkVDQVRFRDogVXNlIGh0bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCBodG1sQ3R4dFJlYWREb2MuCisgKgogICogUGFyc2UgYW4gSFRNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIElmIHNheCBpcyBub3QgTlVMTCwgdXNlIHRoZSBTQVggY2FsbGJhY2tzCiAgKiB0byBoYW5kbGUgcGFyc2UgZXZlbnRzLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NCiAgKiBiZWhhdmlvciBhbmQgcmV0dXJuIGEgdHJlZS4KQEAgLTY0NjksOCArNjExNyw2IEBACiAgICAgaHRtbFBhcnNlckN0eHRQdHIgY3R4dDsKICAgICBodG1sUGFyc2VySW5wdXRQdHIgaW5wdXRTdHJlYW07CiAgICAgY2hhciAqY2Fub25pY0ZpbGVuYW1lOwotICAgIC8qIGh0bWxDaGFyRW5jb2RpbmcgZW5jOyAqLwotICAgIHhtbENoYXIgKmNvbnRlbnQsICpjb250ZW50X2xpbmUgPSAoeG1sQ2hhciAqKSAiY2hhcnNldD0iOwogCiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKQEAgLTY0ODEsMTEgKzYxMjcsNiBAQAogICAgIH0KICAgICBjYW5vbmljRmlsZW5hbWUgPSAoY2hhciAqKSB4bWxDYW5vbmljUGF0aCgoY29uc3QgeG1sQ2hhciAqKSBmaWxlbmFtZSk7CiAgICAgaWYgKGNhbm9uaWNGaWxlbmFtZSA9PSBOVUxMKSB7Ci0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotCWlmICh4bWxEZWZhdWx0U0FYSGFuZGxlci5lcnJvciAhPSBOVUxMKSB7Ci0JICAgIHhtbERlZmF1bHRTQVhIYW5kbGVyLmVycm9yKE5VTEwsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQl9Ci0jZW5kaWYKIAl4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQpAQCAtNjUwMSwxNyArNjE0MiwxMiBAQAogCiAgICAgLyogc2V0IGVuY29kaW5nICovCiAgICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgICAgIHNpemVfdCBsID0gc3RybGVuKGVuY29kaW5nKTsKKyAgICAgICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoZGxyOwogCi0JaWYgKGwgPCAxMDAwKSB7Ci0JICAgIGNvbnRlbnQgPSB4bWxNYWxsb2NBdG9taWMgKHhtbFN0cmxlbihjb250ZW50X2xpbmUpICsgbCArIDEpOwotCSAgICBpZiAoY29udGVudCkgewotCQlzdHJjcHkgKChjaGFyICopY29udGVudCwgKGNoYXIgKiljb250ZW50X2xpbmUpOwotCQlzdHJjYXQgKChjaGFyICopY29udGVudCwgKGNoYXIgKillbmNvZGluZyk7Ci0JCWh0bWxDaGVja0VuY29kaW5nIChjdHh0LCBjb250ZW50KTsKLQkJeG1sRnJlZSAoY29udGVudCk7Ci0JICAgIH0KLQl9CisgICAgICAgIGhkbHIgPSB4bWxGaW5kQ2hhckVuY29kaW5nSGFuZGxlcihlbmNvZGluZyk7CisgICAgICAgIGlmIChoZGxyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHhtbFN3aXRjaFRvRW5jb2RpbmcoY3R4dCwgaGRscik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4oY3R4dCk7CkBAIC02NTI0LDYgKzYxNjAsOCBAQAogICogQHNheDogIHRoZSBTQVggaGFuZGxlciBibG9jawogICogQHVzZXJEYXRhOiBpZiB1c2luZyBTQVgsIHRoaXMgcG9pbnRlciB3aWxsIGJlIHByb3ZpZGVkIG9uIGNhbGxiYWNrcy4KICAqCisgKiBERVBSRUNBVEVEOiBVc2UgaHRtbE5ld1NBWFBhcnNlckN0eHQgYW5kIGh0bWxDdHh0UmVhZEZpbGUuCisgKgogICogcGFyc2UgYW4gSFRNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzCiAgKiBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLgogICogSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLgpAQCAtNjc5MiwxNCArNjQzMCwxNSBAQAogICAgIGN0eHQtPmRpc2FibGVTQVggPSAwOwogICAgIGN0eHQtPnZhbGlkID0gMTsKICAgICBjdHh0LT52Y3R4dC51c2VyRGF0YSA9IGN0eHQ7CisgICAgY3R4dC0+dmN0eHQuZmxhZ3MgPSBYTUxfVkNUWFRfVVNFX1BDVFhUOwogICAgIGN0eHQtPnZjdHh0LmVycm9yID0geG1sUGFyc2VyVmFsaWRpdHlFcnJvcjsKICAgICBjdHh0LT52Y3R4dC53YXJuaW5nID0geG1sUGFyc2VyVmFsaWRpdHlXYXJuaW5nOwogICAgIGN0eHQtPnJlY29yZF9pbmZvID0gMDsKICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICBjdHh0LT5lbmRDaGVja1N0YXRlID0gMDsKICAgICBjdHh0LT5pblN1YnNldCA9IDA7CiAgICAgY3R4dC0+ZXJyTm8gPSBYTUxfRVJSX09LOwogICAgIGN0eHQtPmRlcHRoID0gMDsKLSAgICBjdHh0LT5jaGFyc2V0ID0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORTsKICAgICBjdHh0LT5jYXRhbG9ncyA9IE5VTEw7CiAgICAgeG1sSW5pdE5vZGVJbmZvU2VxKCZjdHh0LT5ub2RlX3NlcSk7CiAKQEAgLTY4MTEsNiArNjQ1MCwxMSBAQAogICAgICAgICB4bWxIYXNoRnJlZShjdHh0LT5hdHRzU3BlY2lhbCwgTlVMTCk7CiAgICAgICAgIGN0eHQtPmF0dHNTcGVjaWFsID0gTlVMTDsKICAgICB9CisKKyAgICBjdHh0LT5uYkVycm9ycyA9IDA7CisgICAgY3R4dC0+bmJXYXJuaW5ncyA9IDA7CisgICAgaWYgKGN0eHQtPmxhc3RFcnJvci5jb2RlICE9IFhNTF9FUlJfT0spCisgICAgICAgIHhtbFJlc2V0RXJyb3IoJmN0eHQtPmxhc3RFcnJvcik7CiB9CiAKIC8qKgpAQCAtNjg4MSw2ICs2NTI1LDcgQEAKICAgICAgICAgb3B0aW9ucyAtPSBIVE1MX1BBUlNFX05PSU1QTElFRDsKICAgICB9CiAgICAgY3R4dC0+ZGljdE5hbWVzID0gMDsKKyAgICBjdHh0LT5saW5lbnVtYmVycyA9IDE7CiAgICAgcmV0dXJuIChvcHRpb25zKTsKIH0KIApAQCAtNjkxMCw5ICs2NTU1LDYgQEAKIAloZGxyID0geG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIoZW5jb2RpbmcpOwogCWlmIChoZGxyICE9IE5VTEwpIHsKIAkgICAgeG1sU3dpdGNoVG9FbmNvZGluZyhjdHh0LCBoZGxyKTsKLQkgICAgaWYgKGN0eHQtPmlucHV0LT5lbmNvZGluZyAhPSBOVUxMKQotCSAgICAgIHhtbEZyZWUoKHhtbENoYXIgKikgY3R4dC0+aW5wdXQtPmVuY29kaW5nKTsKLSAgICAgICAgICAgIGN0eHQtPmlucHV0LT5lbmNvZGluZyA9IHhtbFN0cmR1cCgoeG1sQ2hhciAqKWVuY29kaW5nKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKFVSTCAhPSBOVUxMKSAmJiAoY3R4dC0+aW5wdXQgIT0gTlVMTCkgJiYKQEAgLTY5OTcsMTIgKzY2MzksOSBAQAogICAgIGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAKICAgICB4bWxJbml0UGFyc2VyKCk7Ci0gICAgY3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVyLCBzaXplKTsKKyAgICBjdHh0ID0gaHRtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVyLCBzaXplKTsKICAgICBpZiAoY3R4dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgIGh0bWxEZWZhdWx0U0FYSGFuZGxlckluaXQoKTsKLSAgICBpZiAoY3R4dC0+c2F4ICE9IE5VTEwpCi0gICAgICAgIG1lbWNweShjdHh0LT5zYXgsICZodG1sRGVmYXVsdFNBWEhhbmRsZXIsIHNpemVvZih4bWxTQVhIYW5kbGVyVjEpKTsKICAgICByZXR1cm4gKGh0bWxEb1JlYWQoY3R4dCwgVVJMLCBlbmNvZGluZywgb3B0aW9ucywgMCkpOwogfQogCkBAIC03MDk5LDcgKzY3MzgsNyBAQAogLyoqCiAgKiBodG1sQ3R4dFJlYWREb2M6CiAgKiBAY3R4dDogIGFuIEhUTUwgcGFyc2VyIGNvbnRleHQKLSAqIEBjdXI6ICBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nCisgKiBAc3RyOiAgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZwogICogQFVSTDogIHRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIHRoZSBkb2N1bWVudAogICogQGVuY29kaW5nOiAgdGhlIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMCiAgKiBAb3B0aW9uczogIGEgY29tYmluYXRpb24gb2YgaHRtbFBhcnNlck9wdGlvbihzKQpAQCAtNzExMCwxMyArNjc0OSwzMyBAQAogICogUmV0dXJucyB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUKICAqLwogaHRtbERvY1B0cgotaHRtbEN0eHRSZWFkRG9jKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKiBjdXIsCitodG1sQ3R4dFJlYWREb2MoaHRtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqc3RyLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAqVVJMLCBjb25zdCBjaGFyICplbmNvZGluZywgaW50IG9wdGlvbnMpCiB7Ci0gICAgaWYgKGN1ciA9PSBOVUxMKQorICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0OworICAgIHhtbFBhcnNlcklucHV0UHRyIHN0cmVhbTsKKworICAgIGlmIChjdHh0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgcmV0dXJuIChodG1sQ3R4dFJlYWRNZW1vcnkoY3R4dCwgKGNvbnN0IGNoYXIgKikgY3VyLCB4bWxTdHJsZW4oY3VyKSwgVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBvcHRpb25zKSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKE5VTEwpOworICAgIHhtbEluaXRQYXJzZXIoKTsKKworICAgIGh0bWxDdHh0UmVzZXQoY3R4dCk7CisKKyAgICBpbnB1dCA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RyaW5nKHN0cik7CisgICAgaWYgKGlucHV0ID09IE5VTEwpIHsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgc3RyZWFtID0geG1sTmV3SU9JbnB1dFN0cmVhbShjdHh0LCBpbnB1dCwgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CisgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGlucHV0KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgaW5wdXRQdXNoKGN0eHQsIHN0cmVhbSk7CisgICAgcmV0dXJuIChodG1sRG9SZWFkKGN0eHQsIFVSTCwgZW5jb2RpbmcsIG9wdGlvbnMsIDEpKTsKIH0KIAogLyoqCkBAIC03MTgyLDcgKzY4NDEsOCBAQAogCiAgICAgaHRtbEN0eHRSZXNldChjdHh0KTsKIAotICAgIGlucHV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0oYnVmZmVyLCBzaXplLCBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKyAgICBpbnB1dCA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGJ1ZmZlciwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOwogICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KZGlmZiAtLWdpdCBhL0hUTUx0cmVlLmMgYi9IVE1MdHJlZS5jCmluZGV4IDNkZDc4YTkuLjg2OThmNTMgMTAwNjQ0Ci0tLSBhL0hUTUx0cmVlLmMKKysrIGIvSFRNTHRyZWUuYwpAQCAtMTksMTMgKzE5LDE0IEBACiAjaW5jbHVkZSA8bGlieG1sL0hUTUxwYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvSFRNTHRyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZW50aXRpZXMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvdmFsaWQuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+CiAKLSNpbmNsdWRlICJidWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKKyNpbmNsdWRlICJwcml2YXRlL2lvLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9zYXZlLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgpAQCAtMzI4LDExICszMjksNiBAQAogfQogCiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi0vKgotICogcHJpdmF0ZSByb3V0aW5lIGV4cG9ydGVkIGZyb20geG1sSU8uYwotICovCi14bWxPdXRwdXRCdWZmZXJQdHIKLXhtbEFsbG9jT3V0cHV0QnVmZmVySW50ZXJuYWwoeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBlbmNvZGVyKTsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgogICoJCQlPdXRwdXQgZXJyb3IgaGFuZGxlcnMJCQkJKgpAQCAtNDE3LDcgKzQxMyw3IEBACiAgICAgICAgIGh0bWxTYXZlRXJyTWVtb3J5KCJhbGxvY2F0aW5nIEhUTUwgb3V0cHV0IGJ1ZmZlciIpOwogCXJldHVybiAoLTEpOwogICAgIH0KLSAgICBtZW1zZXQob3V0YnVmLCAwLCAoc2l6ZV90KSBzaXplb2YoeG1sT3V0cHV0QnVmZmVyKSk7CisgICAgbWVtc2V0KG91dGJ1ZiwgMCwgc2l6ZW9mKHhtbE91dHB1dEJ1ZmZlcikpOwogICAgIG91dGJ1Zi0+YnVmZmVyID0gYnVmOwogICAgIG91dGJ1Zi0+ZW5jb2RlciA9IE5VTEw7CiAgICAgb3V0YnVmLT53cml0ZWNhbGxiYWNrID0gTlVMTDsKQEAgLTYyMiw4ICs2MTgsNiBAQAogICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIHhtbE5zTGlzdER1bXBPdXRwdXQoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwgeG1sTnNQdHIgY3VyKTsKLQogLyoqCiAgKiBodG1sRHRkRHVtcE91dHB1dDoKICAqIEBidWY6ICB0aGUgSFRNTCBidWZmZXIgb3V0cHV0CkBAIC03MDUsMTAgKzY5OSwxNSBAQAogCQl3aGlsZSAoSVNfQkxBTktfQ0goKnRtcCkpIHRtcCsrOwogCiAJCS8qCi0JCSAqIHRoZSA8IGFuZCA+IGhhdmUgYWxyZWFkeSBiZWVuIGVzY2FwZWQgYXQgdGhlIGVudGl0eSBsZXZlbAotCQkgKiBBbmQgZG9pbmcgc28gaGVyZSBicmVha3Mgc2VydmVyIHNpZGUgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICAgKiBBbmdsZSBicmFja2V0cyBhcmUgdGVjaG5pY2FsbHkgaWxsZWdhbCBpbiBVUklzLCBidXQgdGhleSdyZQorICAgICAgICAgICAgICAgICAqIHVzZWQgaW4gc2VydmVyIHNpZGUgaW5jbHVkZXMsIGZvciBleGFtcGxlLiBDdXJseSBicmFja2V0cworICAgICAgICAgICAgICAgICAqIGFyZSBpbGxlZ2FsIGFzIHdlbGwgYW5kIG9mdGVuIHVzZWQgaW4gdGVtcGxhdGVzLgorICAgICAgICAgICAgICAgICAqIERvbid0IGVzY2FwZSBub24td2hpdGVzcGFjZSwgcHJpbnRhYmxlIEFTQ0lJIGNoYXJzIGZvcgorICAgICAgICAgICAgICAgICAqIGltcHJvdmVkIGludGVyb3BlcmFiaWxpdHkuIE9ubHkgZXNjYXBlIHNwYWNlLCBjb250cm9sCisgICAgICAgICAgICAgICAgICogYW5kIG5vbi1BU0NJSSBjaGFycy4KIAkJICovCi0JCWVzY2FwZWQgPSB4bWxVUklFc2NhcGVTdHIodG1wLCBCQURfQ0FTVCJALzo9PzsjJSYsKzw+Iik7CisJCWVzY2FwZWQgPSB4bWxVUklFc2NhcGVTdHIodG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgQkFEX0NBU1QgIlwiIyQlJissLzo7PD0+P0BbXFxdXmB7fH0iKTsKIAkJaWYgKGVzY2FwZWQgIT0gTlVMTCkgewogCQkgICAgeG1sQnVmV3JpdGVRdW90ZWRTdHJpbmcoYnVmLT5idWZmZXIsIGVzY2FwZWQpOwogCQkgICAgeG1sRnJlZShlc2NhcGVkKTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTLm1kIGIvTUFJTlRBSU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwMDBkYgotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0wLDAgKzEsOTcgQEAKKyMgTWFpbnRhaW5lcidzIEd1aWRlCisKKyMjIFdvcmtpbmcgd2l0aCB0aGUgdGVzdCBzdWl0ZQorCitNb3N0IG9mIHRoZSB0ZXN0cyBhcmUgY29udGFpbmVkIGluIHRoZSBgcnVudGVzdGAgZXhlY3V0YWJsZSB3aGljaAorZ2VuZXJhbGx5IHJlYWRzIHRlc3QgY2FzZXMgZnJvbSB0aGUgYHRlc3RgIGRpcmVjdG9yeSBhbmQgY29tcGFyZXMgb3V0cHV0Cit0byBmaWxlcyBpbiB0aGUgYHJlc3VsdGAgZGlyZWN0b3J5LgorCitZb3UgY2FuIHNpbXBseSBhZGQgbmV3IHRlc3QgY2FzZXMgYW5kIHJ1biBgcnVudGVzdCAtdWAgdG8gdXBkYXRlIHRoZQorcmVzdWx0cy4gSWYgeW91IGRlYnVnIHRlc3QgZmFpbHVyZXMsIGl0J3MgYWxzbyB1c2VmdWwgdG8gZXhlY3V0ZQorYHJ1bnRlc3QgLXVgIGFuZCB0aGVuIGBnaXQgZGlmZiByZXN1bHRgIHRvIGdldCBhIGRpZmYgYmV0d2VlbiBhY3R1YWwgYW5kCitleHBlY3RlZCByZXN1bHRzLiBZb3UgY2FuIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJlc3VsdHMgYnkgcnVubmluZworYGdpdCByZXN0b3JlIHJlc3VsdGAgYW5kIGBnaXQgY2xlYW4gLXhkIHJlc3VsdGAuCisKKyMjIEdlbmVyYXRlZCBmaWxlcworCitUaGUgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZ2VuZXJhdGVkIGZpbGVzIGNhbiBiZSByZWJ1aWx0IGJ5IHJ1bm5pbmcKKworICAgIG1ha2UgLUMgZG9jIHJlYnVpbGQKKworVGhpcyByZXF1aXJlcyBgeHNsdHByb2NgLCB0aGUgRG9jQm9vayBzdHlsZXNoZWV0cyBpbiB5b3VyIFhNTCBDYXRhbG9nCithbmQgdGhlIGxpYnhtbDIgUHl0aG9uIGJpbmRpbmdzIHRvIGJlIGluc3RhbGxlZCwgc28gaXQncyBiZXN0IGRvbmUgb24gYQorTGludXggc3lzdGVtLiBPbiBEZWJpYW4vVWJ1bnR1LCB0cnkKKworICAgIGFwdCBpbnN0YWxsIHhzbHRwcm9jIHB5dGhvbjMtbGlieG1sMiBkb2Nib29rLXhzbCBkb2Nib29rLXhtbAorCitkb2MvYXBpYnVpbGQucHkgZ2VuZXJhdGVzIGRvYy9saWJ4bWwyLWFwaS54bWwgd2hpY2ggaXMgdXNlZCB0byBnZW5lcmF0ZQorCistIEFQSSBkb2N1bWVudGF0aW9uIHdpdGggWFNMVCBzdHlsZXNoZWV0cworLSB0ZXN0YXBpLmMgd2l0aCBnZW50ZXN0LnB5CistIFB5dGhvbiBiaW5kaW5ncyB3aXRoIHB5dGhvbi9nZW5lcmF0b3IucHkKKworTWFuIHBhZ2VzIGFuZCBIVE1MIGRvY3VtZW50YXRpb24gZm9yIHhtbGxpbnQgYW5kIHhtbGNhdGFsb2cgYXJlCitnZW5lcmF0ZWQgd2l0aCB4c2x0cHJvYyBhbmQgRG9jQm9vayBzdHlsZXNoZWV0cy4KKworIyMgTWFraW5nIGEgcmVsZWFzZQorCisjIyMgUmVidWlsZCBnZW5lcmF0ZWQgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24KKworU2VlIGFib3ZlIGZvciBkZXRhaWxzIGFuZCBydW4gYG1ha2UgLUMgZG9jIHJlYnVpbGRgLgorCitMb29rIGZvciBuZXcgd2FybmluZyBtZXNzYWdlcyBhbmQgaW5zcGVjdCBjaGFuZ2VzIGZvciBjb3JyZWN0bmVzcworYmVmb3JlIGNvbW1pdHRpbmcuCisKKyMjIyBVcGRhdGUgdGhlIE5FV1MgZmlsZQorCitZb3UgY2FuIGdldCBzdGFydGVkIGJ5IHJ1bm5pbmcKKworICAgIGdpdCBsb2cgLS1mb3JtYXQ9Jy0gJXMgKCVhbiknIFtwcmV2aW91cy1yZWxlYXNlLXRhZ10uLgorCisjIyMgQnVtcCB0aGUgdmVyc2lvbiBudW1iZXIKKworRWRpdCB0aGUgdmVyc2lvbiBudW1iZXIgaW4gYGNvbmZpZ3VyZS5hY2AgaWYgeW91IGhhdmVuJ3QgZG9uZSBzbyBhbHJlYWR5LgorCisjIyMgQnVpbGQgdGhlIHRhcmJhbGwKKworSSdkIHJlY29tbWVuZCB0byBidWlsZCB0aGUgdGFyYmFsbCBieSBydW5uaW5nCisKKyAgICBtYWtlIGRpc3RjaGVjaworCit3aGljaCBwZXJmb3JtcyBzb21lIHVzZWZ1bCBjaGVja3MgYXMgd2VsbC4KKworIyMjIFVwbG9hZCB0aGUgdGFyYmFsbAorCitGb2xsb3cgdGhlIGluc3RydWN0aW9ucyBhdAorPGh0dHBzOi8vd2lraS5nbm9tZS5vcmcvTWFpbnRhaW5lcnNDb3JuZXIvUmVsZWFzaW5nPjoKKworICAgIHNjcCBsaWJ4bWwyLVt2ZXJzaW9uXS50YXIueHogbWFzdGVyLmdub21lLm9yZzoKKyAgICBzc2ggbWFzdGVyLmdub21lLm9yZyBmdHBhZG1pbiBpbnN0YWxsIGxpYnhtbDItW3ZlcnNpb25dLnRhci54egorCisjIyMgVGFnIHRoZSByZWxlYXNlCisKK0NyZWF0ZSBhbiBhbm5vdGF0ZWQgdGFnIGFuZCBwdXNoIGl0OgorCisgICAgZ2l0IHRhZyAtYSBbdmVyc2lvbl0gLW0gJ1JlbGVhc2UgW3ZlcnNpb25dJworICAgIGdpdCBwdXNoIG9yaWdpbiBbdmVyc2lvbl0KKworIyMjIENyZWF0ZSBhIEdpdExhYiByZWxlYXNlCisKK0NyZWF0ZSBhIG5ldyBHaXRMYWIgcmVsZWFzZSBvbgorPGh0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9saWJ4bWwyLy0vcmVsZWFzZXM+LgorCisjIyMgQW5ub3VuY2UgdGhlIHJlbGVhc2UKKworQW5ub3VuY2UgdGhlIHJlbGVhc2UgYnkgc2VuZGluZyBhbiBlbWFpbCB0byB0aGUgbWFpbGluZyBsaXN0IGF0Cit4bWxAZ25vbWUub3JnLgorCisjIyBVcGRhdGluZyB0aGUgQ0kgRG9ja2VyIGltYWdlCisKK05vdGUgdGhhdCB0aGUgQ0kgaW1hZ2UgaXMgdXNlZCBmb3IgbGlieHNsdCBhcyB3ZWxsLiBSdW4gdGhlIGZvbGxvd2luZworY29tbWFuZHMgd2l0aCB0aGUgRG9ja2VyZmlsZSBpbiB0aGUgLmdpdGxhYi1jaSBkaXJlY3Rvcnk6CisKKyAgICBkb2NrZXIgbG9naW4gcmVnaXN0cnkuZ2l0bGFiLmdub21lLm9yZworICAgIGRvY2tlciBidWlsZCAtdCByZWdpc3RyeS5naXRsYWIuZ25vbWUub3JnL2dub21lL2xpYnhtbDIgLSBcCisgICAgICAgIDwgLmdpdGxhYi1jaS9Eb2NrZXJmaWxlCisgICAgZG9ja2VyIHB1c2ggcmVnaXN0cnkuZ2l0bGFiLmdub21lLm9yZy9nbm9tZS9saWJ4bWwyCisKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KaW5kZXggMzE2MTA5Yi4uOGIyMDdkNCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFrZWZpbGUuYW0KQEAgLTIsMTMzICsyLDE3NiBAQAogCiBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAogCi1TVUJESVJTID0gaW5jbHVkZSAuIGRvYyBleGFtcGxlIGZ1enogeHN0YworU1VCRElSUyA9IGluY2x1ZGUgLiBkb2MgZXhhbXBsZSB4c3RjCiBpZiBXSVRIX1BZVEhPTgogU1VCRElSUyArPSBweXRob24KIGVuZGlmCitpZiBXSVRIX0dMT0IKK1NVQkRJUlMgKz0gZnV6egorZW5kaWYKIAogRElTVF9TVUJESVJTID0gaW5jbHVkZSAuIGRvYyBleGFtcGxlIGZ1enogcHl0aG9uIHhzdGMKIAogQU1fQ1BQRkxBR1MgPSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIC1JJChzcmNkaXIpL2luY2x1ZGUgLURTWVNDT05GRElSPSciJChzeXNjb25mZGlyKSInCiAKLUFNX0NGTEFHUyA9ICQoRVhUUkFfQ0ZMQUdTKQotCiBjaGVja19QUk9HUkFNUyA9IFwKIAlydW5zdWl0ZSBcCiAJcnVudGVzdCBcCiAJcnVueG1sY29uZiBcCi0JdGVzdEF1dG9tYXRhIFwKIAl0ZXN0TW9kdWxlIFwKIAl0ZXN0VGhyZWFkcyBcCiAJdGVzdGFwaSBcCiAJdGVzdGNoYXIgXAogCXRlc3RkaWN0IFwKIAl0ZXN0bGltaXRzIFwKKwl0ZXN0cGFyc2VyIFwKIAl0ZXN0cmVjdXJzZQogCiBiaW5fUFJPR1JBTVMgPSB4bWxsaW50IHhtbGNhdGFsb2cKIAotbm9kaXN0X2Jpbl9TQ1JJUFRTID0geG1sMi1jb25maWcKK2Jpbl9TQ1JJUFRTID0geG1sMi1jb25maWcKIAogbGliX0xUTElCUkFSSUVTID0gbGlieG1sMi5sYQotbGlieG1sMl9sYV9DRkxBR1MgPSAkKEVYVFJBX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKSAkKFpfQ0ZMQUdTKSAkKExaTUFfQ0ZMQUdTKQorbGlieG1sMl9sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChYTUxfUFJJVkFURV9DRkxBR1MpCiBsaWJ4bWwyX2xhX0xJQkFERCA9ICQoWE1MX1BSSVZBVEVfTElCUykKIAotaWYgVVNFX1ZFUlNJT05fU0NSSVBUCi1MSUJYTUwyX1ZFUlNJT05fU0NSSVBUID0gJChWRVJTSU9OX1NDUklQVF9GTEFHUykkKHNyY2RpcikvbGlieG1sMi5zeW1zCi1lbHNlCi1MSUJYTUwyX1ZFUlNJT05fU0NSSVBUID0KLWVuZGlmCi0KLWxpYnhtbDJfbGFfTERGTEFHUyA9ICQoQ1lHV0lOX0VYVFJBX0xERkxBR1MpICQoV0lOMzJfRVhUUkFfTERGTEFHUykgXAotCQkgICAgICQoTElCWE1MMl9WRVJTSU9OX1NDUklQVCkgXAorbGlieG1sMl9sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAtbm8tdW5kZWZpbmVkIFwKIAkJICAgICAtdmVyc2lvbi1pbmZvICQoTElCWE1MX1ZFUlNJT05fSU5GTykgXAogCQkgICAgICQoTU9EVUxFX1BMQVRGT1JNX0xJQlMpCi0KLWlmIFdJVEhfVFJJT19TT1VSQ0VTCi10cmlvX3NvdXJjZXMgPSB0cmlvc3RyLmMgdHJpby5jCi1lbHNlCi10cmlvX3NvdXJjZXMgPQoraWYgVVNFX1ZFUlNJT05fU0NSSVBUCitsaWJ4bWwyX2xhX0xERkxBR1MgKz0gJChWRVJTSU9OX1NDUklQVF9GTEFHUykkKHNyY2RpcikvbGlieG1sMi5zeW1zCiBlbmRpZgogCi1saWJ4bWwyX2xhX1NPVVJDRVMgPSBTQVguYyBlbnRpdGllcy5jIGVuY29kaW5nLmMgZXJyb3IuYyBwYXJzZXJJbnRlcm5hbHMuYyAgXAotCQlwYXJzZXIuYyB0cmVlLmMgaGFzaC5jIGxpc3QuYyB4bWxJTy5jIHhtbG1lbW9yeS5jIHVyaS5jICBcCi0JCXZhbGlkLmMgeGxpbmsuYyBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBkZWJ1Z1hNTC5jIHhwYXRoLmMgIFwKLQkJeHBvaW50ZXIuYyB4aW5jbHVkZS5jIG5hbm9odHRwLmMgbmFub2Z0cC5jIFwKLQkJY2F0YWxvZy5jIGdsb2JhbHMuYyB0aHJlYWRzLmMgYzE0bi5jIHhtbHN0cmluZy5jIGJ1Zi5jIFwKLQkJeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhtbHVuaWNvZGUuYyBcCi0JCSQodHJpb19zb3VyY2VzKSBcCi0JCXhtbHJlYWRlci5jIHJlbGF4bmcuYyBkaWN0LmMgU0FYMi5jIFwKLQkJeG1sd3JpdGVyLmMgbGVnYWN5LmMgY2h2YWxpZC5jIHBhdHRlcm4uYyB4bWxzYXZlLmMgXAotCQl4bWxtb2R1bGUuYyBzY2hlbWF0cm9uLmMgeHpsaWIuYworbGlieG1sMl9sYV9TT1VSQ0VTID0gYnVmLmMgY2h2YWxpZC5jIGRpY3QuYyBlbnRpdGllcy5jIGVuY29kaW5nLmMgZXJyb3IuYyBcCisJCSAgICAgZ2xvYmFscy5jIGhhc2guYyBsaXN0LmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgXAorCQkgICAgIFNBWDIuYyB0aHJlYWRzLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMgeG1sSU8uYyBcCisJCSAgICAgeG1sbWVtb3J5LmMgeG1sc3RyaW5nLmMKK2lmIFdJVEhfQzE0Tl9TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0gYzE0bi5jCitlbmRpZgoraWYgV0lUSF9DQVRBTE9HX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSBjYXRhbG9nLmMKK2VuZGlmCitpZiBXSVRIX0RFQlVHX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSBkZWJ1Z1hNTC5jCitlbmRpZgoraWYgV0lUSF9GVFBfU09VUkNFUworbGlieG1sMl9sYV9TT1VSQ0VTICs9IG5hbm9mdHAuYworZW5kaWYKK2lmIFdJVEhfSFRNTF9TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0gSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMKK2VuZGlmCitpZiBXSVRIX0hUVFBfU09VUkNFUworbGlieG1sMl9sYV9TT1VSQ0VTICs9IG5hbm9odHRwLmMKK2VuZGlmCitpZiBXSVRIX0xFR0FDWV9TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0gbGVnYWN5LmMKK2lmIFdJVEhfU0FYMV9TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0gU0FYLmMKK2VuZGlmCitlbmRpZgoraWYgV0lUSF9MWk1BX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4emxpYi5jCitlbmRpZgoraWYgV0lUSF9NT0RVTEVTX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4bWxtb2R1bGUuYworZW5kaWYKK2lmIFdJVEhfT1VUUFVUX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4bWxzYXZlLmMKK2VuZGlmCitpZiBXSVRIX1BBVFRFUk5fU09VUkNFUworbGlieG1sMl9sYV9TT1VSQ0VTICs9IHBhdHRlcm4uYworZW5kaWYKK2lmIFdJVEhfUkVBREVSX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4bWxyZWFkZXIuYworZW5kaWYKK2lmIFdJVEhfUkVHRVhQU19TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0geG1scmVnZXhwLmMgeG1sdW5pY29kZS5jCitlbmRpZgoraWYgV0lUSF9TQ0hFTUFTX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSByZWxheG5nLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jCitpZiAhV0lUSF9YUEFUSF9TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0geHBhdGguYworZW5kaWYKK2VuZGlmCitpZiBXSVRIX1NDSEVNQVRST05fU09VUkNFUworbGlieG1sMl9sYV9TT1VSQ0VTICs9IHNjaGVtYXRyb24uYworZW5kaWYKK2lmIFdJVEhfVFJJT19TT1VSQ0VTCitsaWJ4bWwyX2xhX1NPVVJDRVMgKz0gdHJpb3N0ci5jIHRyaW8uYworZW5kaWYKK2lmIFdJVEhfV1JJVEVSX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4bWx3cml0ZXIuYworZW5kaWYKK2lmIFdJVEhfWElOQ0xVREVfU09VUkNFUworbGlieG1sMl9sYV9TT1VSQ0VTICs9IHhpbmNsdWRlLmMKK2VuZGlmCitpZiBXSVRIX1hQQVRIX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4cGF0aC5jCitlbmRpZgoraWYgV0lUSF9YUFRSX1NPVVJDRVMKK2xpYnhtbDJfbGFfU09VUkNFUyArPSB4bGluay5jIHhwb2ludGVyLmMKK2VuZGlmCiAKIERFUFMgPSAkKHRvcF9idWlsZGRpcikvbGlieG1sMi5sYQogTERBRERTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnhtbDIubGEKIAogCiBtNGRhdGFkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKLW00ZGF0YV9EQVRBID0gbGlieG1sLm00CitkaXN0X200ZGF0YV9EQVRBID0gbGlieG1sLm00CiAKIHJ1bnRlc3RfU09VUkNFUz1ydW50ZXN0LmMKLXJ1bnRlc3RfQ0ZMQUdTID0gJChFWFRSQV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKLXJ1bnRlc3RfTERGTEFHUyA9IAorcnVudGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQogcnVudGVzdF9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCiBydW50ZXN0X0xEQUREPSAkKEJBU0VfVEhSRUFEX0xJQlMpICQoVEhSRUFEX0xJQlMpICQoTERBRERTKQogCiB0ZXN0cmVjdXJzZV9TT1VSQ0VTPXRlc3RyZWN1cnNlLmMKLXRlc3RyZWN1cnNlX0xERkxBR1MgPSAKIHRlc3RyZWN1cnNlX0RFUEVOREVOQ0lFUyA9ICQoREVQUykKIHRlc3RyZWN1cnNlX0xEQUREPSAkKExEQUREUykKIAogdGVzdGxpbWl0c19TT1VSQ0VTPXRlc3RsaW1pdHMuYwotdGVzdGxpbWl0c19MREZMQUdTID0gCiB0ZXN0bGltaXRzX0RFUEVOREVOQ0lFUyA9ICQoREVQUykKIHRlc3RsaW1pdHNfTERBREQ9ICQoTERBRERTKQogCiB0ZXN0Y2hhcl9TT1VSQ0VTPXRlc3RjaGFyLmMKLXRlc3RjaGFyX0xERkxBR1MgPSAKIHRlc3RjaGFyX0RFUEVOREVOQ0lFUyA9ICQoREVQUykKIHRlc3RjaGFyX0xEQUREPSAkKExEQUREUykKIAogdGVzdGRpY3RfU09VUkNFUz10ZXN0ZGljdC5jCi10ZXN0ZGljdF9MREZMQUdTID0gCiB0ZXN0ZGljdF9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCiB0ZXN0ZGljdF9MREFERD0gJChMREFERFMpCiAKK3Rlc3RwYXJzZXJfU09VUkNFUz10ZXN0cGFyc2VyLmMKK3Rlc3RwYXJzZXJfREVQRU5ERU5DSUVTID0gJChERVBTKQordGVzdHBhcnNlcl9MREFERD0gJChMREFERFMpCisKIHJ1bnN1aXRlX1NPVVJDRVM9cnVuc3VpdGUuYwotcnVuc3VpdGVfTERGTEFHUyA9IAogcnVuc3VpdGVfREVQRU5ERU5DSUVTID0gJChERVBTKQogcnVuc3VpdGVfTERBREQ9ICQoTERBRERTKQogCiB4bWxsaW50X1NPVVJDRVM9eG1sbGludC5jCi14bWxsaW50X0xERkxBR1MgPSAKK3htbGxpbnRfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUkRMX0NGTEFHUykgJChJQ09OVl9DRkxBR1MpCiB4bWxsaW50X0RFUEVOREVOQ0lFUyA9ICQoREVQUykKIHhtbGxpbnRfTERBREQ9ICAkKFJETF9MSUJTKSAkKExEQUREUykKIAogeG1sY2F0YWxvZ19TT1VSQ0VTPXhtbGNhdGFsb2cuYwoteG1sY2F0YWxvZ19MREZMQUdTID0gCit4bWxjYXRhbG9nX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFJETF9DRkxBR1MpICQoSUNPTlZfQ0ZMQUdTKQogeG1sY2F0YWxvZ19ERVBFTkRFTkNJRVMgPSAkKERFUFMpCiB4bWxjYXRhbG9nX0xEQUREID0gJChSRExfTElCUykgJChMREFERFMpCiAKIHRlc3RUaHJlYWRzX1NPVVJDRVMgPSB0ZXN0VGhyZWFkcy5jCi10ZXN0VGhyZWFkc19DRkxBR1MgPSAkKEVYVFJBX0NGTEFHUykgJChUSFJFQURfQ0ZMQUdTKQotdGVzdFRocmVhZHNfTERGTEFHUyA9IAordGVzdFRocmVhZHNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKIHRlc3RUaHJlYWRzX0RFUEVOREVOQ0lFUyA9ICQoREVQUykKIHRlc3RUaHJlYWRzX0xEQUREPSAkKEJBU0VfVEhSRUFEX0xJQlMpICQoVEhSRUFEX0xJQlMpICQoTERBRERTKQogCi10ZXN0QXV0b21hdGFfU09VUkNFUz10ZXN0QXV0b21hdGEuYwotdGVzdEF1dG9tYXRhX0xERkxBR1MgPSAKLXRlc3RBdXRvbWF0YV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCi10ZXN0QXV0b21hdGFfTERBREQ9ICQoTERBRERTKQotCiB0ZXN0TW9kdWxlX1NPVVJDRVM9dGVzdE1vZHVsZS5jCi10ZXN0TW9kdWxlX0xERkxBR1MgPSAKIHRlc3RNb2R1bGVfREVQRU5ERU5DSUVTID0gJChERVBTKQogdGVzdE1vZHVsZV9MREFERD0gJChMREFERFMpCiAKIG5vaW5zdF9MVExJQlJBUklFUyA9IHRlc3Rkc28ubGEKIHRlc3Rkc29fbGFfU09VUkNFUyA9IHRlc3Rkc28uYwotdGVzdGRzb19sYV9MREZMQUdTID0gLW1vZHVsZSAtbm8tdW5kZWZpbmVkIC1hdm9pZC12ZXJzaW9uIC1ycGF0aCAkKGxpYmRpcikKK3Rlc3Rkc29fbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgXAorCQkgICAgIC1tb2R1bGUgLW5vLXVuZGVmaW5lZCAtYXZvaWQtdmVyc2lvbiAtcnBhdGggJChsaWJkaXIpCiAKICMgdGhhdCBvbmUgZm9yY2VzIHRoZSByZWJ1aWxkIHdoZW4gIm1ha2UgcmVidWlsZCIgaXMgcnVuIG9uIGRvYy8KIHJlYnVpbGRfdGVzdGFwaToKQEAgLTEzNiwxNyArMTc5LDE0IEBACiAJICAgICQoUFlUSE9OKSAkKHNyY2RpcikvZ2VudGVzdC5weSAkKHNyY2RpcikgOyBmaSApCiAKIHRlc3RhcGlfU09VUkNFUz10ZXN0YXBpLmMKLXRlc3RhcGlfTERGTEFHUyA9IAogdGVzdGFwaV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCiB0ZXN0YXBpX0xEQUREPSAkKExEQUREUykKIAogcnVueG1sY29uZl9TT1VSQ0VTPXJ1bnhtbGNvbmYuYwotcnVueG1sY29uZl9MREZMQUdTID0gCiBydW54bWxjb25mX0RFUEVOREVOQ0lFUyA9ICQoREVQUykKIHJ1bnhtbGNvbmZfTERBREQ9ICQoTERBRERTKQogCiAjdGVzdE9PTV9TT1VSQ0VTPXRlc3RPT00uYyB0ZXN0T09NbGliLmggdGVzdE9PTWxpYi5jCi0jdGVzdE9PTV9MREZMQUdTID0gCiAjdGVzdE9PTV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCiAjdGVzdE9PTV9MREFERD0gJChMREFERFMpCiAKQEAgLTE1NSwxMiArMTk1LDE0IEBACiAJWyAtZCByZXN1bHQgXSB8fCAkKExOX1MpICQoc3JjZGlyKS9yZXN1bHQgLgogCSQoQ0hFQ0tFUikgLi9ydW50ZXN0JChFWEVFWFQpCiAJJChDSEVDS0VSKSAuL3Rlc3RyZWN1cnNlJChFWEVFWFQpCi0JQVNBTl9PUFRJT05TPSIkJEFTQU5fT1BUSU9OUzpkZXRlY3RfbGVha3M9MCIgJChDSEVDS0VSKSAuL3Rlc3RhcGkkKEVYRUVYVCkKKwkkKENIRUNLRVIpIC4vdGVzdGFwaSQoRVhFRVhUKQogCSQoQ0hFQ0tFUikgLi90ZXN0Y2hhciQoRVhFRVhUKQogCSQoQ0hFQ0tFUikgLi90ZXN0ZGljdCQoRVhFRVhUKQorCSQoQ0hFQ0tFUikgLi90ZXN0cGFyc2VyJChFWEVFWFQpCiAJJChDSEVDS0VSKSAuL3Rlc3RNb2R1bGUkKEVYRUVYVCkKIAkkKENIRUNLRVIpIC4vdGVzdFRocmVhZHMkKEVYRUVYVCkKIAkkKENIRUNLRVIpIC4vcnVueG1sY29uZiQoRVhFRVhUKQorCSQoQ0hFQ0tFUikgLi9ydW5zdWl0ZSQoRVhFRVhUKQogCiAjIENvbXBhdGliaWxpdHkgbmFtZSBvZiB0aGUgY2hlY2sgdGFyZ2V0CiBydW50ZXN0czogY2hlY2sKQEAgLTE3NSwxMCArMjE3LDI5IEBACiAJLi9jb25maWd1cmUgQ0ZMQUdTPSItZnNhbml0aXplPWFkZHJlc3MsdW5kZWZpbmVkIC1XZm9ybWF0IC1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5IC1XZXJyb3I9YXJyYXktYm91bmRzIC1nIiBDWFhGTEFHUz0iLWZzYW5pdGl6ZT1hZGRyZXNzLHVuZGVmaW5lZCAtV2Zvcm1hdCAtV2Vycm9yPWZvcm1hdC1zZWN1cml0eSAtV2Vycm9yPWFycmF5LWJvdW5kcyAtZyIgTERGTEFHUz0iLWZzYW5pdGl6ZT1hZGRyZXNzLHVuZGVmaW5lZCIgQ0M9ImNsYW5nIiBDWFg9ImNsYW5nKysiIC0tZGlzYWJsZS1zaGFyZWQgOyBPcHRpbU9mZiAgOyAkKE1BS0UpIGNsZWFuIDsgJChNQUtFKQogCiAjIE9sZCB0ZXN0IHN1aXRlLiBUaGlzIHNob3VsZCBiZSBwb3J0ZWQgdG8gQy4KLXRlc3RzOiAkKFRFU1RfREVCVUcpICQoVEVTVF9DQVRBTE9HKSAkKFRFU1RfUkVHRVhQUykgJChURVNUX1NDSEVNQVRST04pIFRpbWluZ3Rlc3RzICQoVEVTVF9WVElNRSkgJChQWVRIT05fVEVTVFMpCisKK09MRF9URVNUUyA9IFRpbWluZ3Rlc3RzCitpZiBXSVRIX0NBVEFMT0dfU09VUkNFUworT0xEX1RFU1RTICs9IENhdGF0ZXN0cworZW5kaWYKK2lmIFdJVEhfREVCVUdfU09VUkNFUworT0xEX1RFU1RTICs9IFNjcmlwdHRlc3RzCitlbmRpZgoraWYgV0lUSF9TQ0hFTUFTX1NPVVJDRVMKK2lmIFdJVEhfUFlUSE9OCitPTERfVEVTVFMgKz0gUmVsYXhOR1B5dGhvblRlc3RzIFNjaGVtYXNQeXRob25UZXN0cworZW5kaWYKK2VuZGlmCitpZiBXSVRIX1NDSEVNQVRST05fU09VUkNFUworT0xEX1RFU1RTICs9IFNjaGVtYXRyb250ZXN0cworZW5kaWYKK2lmIFdJVEhfVkFMSURfU09VUkNFUworT0xEX1RFU1RTICs9IFZUaW1pbmd0ZXN0cworZW5kaWYKKwordGVzdHM6ICQoT0xEX1RFU1RTKQogCiBTY3JpcHR0ZXN0cyA6IHhtbGxpbnQkKEVYRUVYVCkKLQlAKGVjaG8gPiAubWVtZHVtcCkKIAlAZWNobyAiIyMgU2NyaXB0cyByZWdyZXNzaW9uIHRlc3RzIgogCUBlY2hvICIjIyBTb21lIG9mIHRoZSBiYXNlIGNvbXB1dGF0aW9ucyBtYXkgYmUgZGlmZmVyZW50IGlmIHNyY2RpciAhPSAuIgogCS1AKGZvciBpIGluICQoc3JjZGlyKS90ZXN0L3NjcmlwdHMvKi5zY3JpcHQgOyBkbyBcCkBAIC0xODgsMTAgKzI0OSw4IEBACiAJICBpZiBbICEgLWYgJChzcmNkaXIpL3Jlc3VsdC9zY3JpcHRzLyQkbmFtZSBdIDsgdGhlbiBcCiAJICAgICAgZWNobyBOZXcgdGVzdCBmaWxlICQkbmFtZSA7IFwKIAkgICAgICAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxsaW50IC0tc2hlbGwgJCR4bWwgPCAkJGkgPiAkKHNyY2RpcikvcmVzdWx0L3NjcmlwdHMvJCRuYW1lIDI+ICQoc3JjZGlyKS9yZXN1bHQvc2NyaXB0cy8kJG5hbWUuZXJyIDsgXAotCSAgICAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgIGVsc2UgXAogCSAgICAgIGxvZz1gJChDSEVDS0VSKSAkKHRvcF9idWlsZGRpcikveG1sbGludCAtLXNoZWxsICQkeG1sIDwgJCRpID4gcmVzdWx0LiQkbmFtZSAyPiByZXN1bHQuJCRuYW1lLmVyciA7IFwKLQkgICAgICBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wICB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIjtcCiAJICAgICAgZGlmZiAkKHNyY2RpcikvcmVzdWx0L3NjcmlwdHMvJCRuYW1lIHJlc3VsdC4kJG5hbWUgOyBcCiAJICAgICAgZGlmZiAkKHNyY2RpcikvcmVzdWx0L3NjcmlwdHMvJCRuYW1lLmVyciByZXN1bHQuJCRuYW1lLmVycmAgOyBcCiAJICAgICAgaWYgWyAtbiAiJCRsb2ciIF0gOyB0aGVuIGVjaG8gJCRuYW1lIHJlc3VsdCA7IGVjaG8gIiQkbG9nIiA7IGZpIDsgXApAQCAtMTk5LDcgKzI1OCw2IEBACiAJICBmaSA7IGZpIDsgZG9uZSkKIAogQ2F0YXRlc3RzIDogeG1sY2F0YWxvZyQoRVhFRVhUKQotCUAoZWNobyA+IC5tZW1kdW1wKQogCUBlY2hvICIjIyBDYXRhbG9nIHJlZ3Jlc3Npb24gdGVzdHMiCiAJLUAoZm9yIGkgaW4gJChzcmNkaXIpL3Rlc3QvY2F0YWxvZ3MvKi5zY3JpcHQgOyBkbyBcCiAJICBuYW1lPWBiYXNlbmFtZSAkJGkgLnNjcmlwdGA7IFwKQEAgLTIwOCwxMCArMjY2LDggQEAKIAkgIGlmIFsgISAtZiAkKHNyY2RpcikvcmVzdWx0L2NhdGFsb2dzLyQkbmFtZSBdIDsgdGhlbiBcCiAJICAgICAgZWNobyBOZXcgdGVzdCBmaWxlICQkbmFtZSA7IFwKIAkgICAgICAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxjYXRhbG9nIC0tc2hlbGwgJCR4bWwgPCAkJGkgMj4mMSA+ICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvJCRuYW1lIDsgXAotCSAgICAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgIGVsc2UgXAogCSAgICAgIGxvZz1gJChDSEVDS0VSKSAkKHRvcF9idWlsZGRpcikveG1sY2F0YWxvZyAtLXNoZWxsICQkeG1sIDwgJCRpIDI+JjEgPiByZXN1bHQuJCRuYW1lIDsgXAotCSAgICAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgICAgICBkaWZmICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvJCRuYW1lIHJlc3VsdC4kJG5hbWVgIDsgXAogCSAgICAgIGlmIFsgLW4gIiQkbG9nIiBdIDsgdGhlbiBlY2hvICQkbmFtZSByZXN1bHQgOyBlY2hvICIkJGxvZyIgOyBmaSA7IFwKIAkgICAgICBybSByZXN1bHQuJCRuYW1lIDsgXApAQCAtMjIzLDUzICsyNzksMjQgQEAKIAkgIGlmIFsgISAtZiAkKHNyY2RpcikvcmVzdWx0L2NhdGFsb2dzLyQkbmFtZSBdIDsgdGhlbiBcCiAJICAgICAgZWNobyBOZXcgdGVzdCBmaWxlICQkbmFtZSA7IFwKIAkgICAgICAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxjYXRhbG9nIC0tc2hlbGwgJCRzZ21sIDwgJCRpID4gJChzcmNkaXIpL3Jlc3VsdC9jYXRhbG9ncy8kJG5hbWUgOyBcCi0JICAgICAgZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7XAogCSAgZWxzZSBcCiAJICAgICAgbG9nPWAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxjYXRhbG9nIC0tc2hlbGwgJCRzZ21sIDwgJCRpID4gcmVzdWx0LiQkbmFtZSA7IFwKLQkgICAgICBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wICB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIjtcCiAJICAgICAgZGlmZiAkKHNyY2RpcikvcmVzdWx0L2NhdGFsb2dzLyQkbmFtZSByZXN1bHQuJCRuYW1lYCA7IFwKIAkgICAgICBpZiBbIC1uICIkJGxvZyIgXSA7IHRoZW4gZWNobyAkJG5hbWUgcmVzdWx0IDsgZWNobyAiJCRsb2ciIDsgZmkgOyBcCiAJICAgICAgcm0gcmVzdWx0LiQkbmFtZSA7IFwKIAkgIGZpIDsgZmkgOyBkb25lKQogCUBlY2hvICIjIyBBZGQgYW5kIGRlbCBvcGVyYXRpb25zIG9uIFhNTCBDYXRhbG9ncyIKIAktQCgkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxjYXRhbG9nIC0tY3JlYXRlIC0tbm9vdXQgJChzcmNkaXIpL3Jlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2c7IFwKLQlncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wICB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIjsgXAogCSQoQ0hFQ0tFUikgJCh0b3BfYnVpbGRkaXIpL3htbGNhdGFsb2cgLS1ub291dCAtLWFkZCBwdWJsaWMgUHViaWQgc3lzaWQgJChzcmNkaXIpL3Jlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2c7IFwKLQlncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wICB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIjsgXAogCSQoQ0hFQ0tFUikgJCh0b3BfYnVpbGRkaXIpL3htbGNhdGFsb2cgLS1ub291dCAtLWFkZCBwdWJsaWMgUHViaWQyIHN5c2lkMiAkKHNyY2RpcikvcmVzdWx0L2NhdGFsb2dzL215Y2F0YWxvZzsgXAotCWdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiOyBcCiAJJChDSEVDS0VSKSAkKHRvcF9idWlsZGRpcikveG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkIHB1YmxpYyBQdWJpZDMgc3lzaWQzICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nOyBcCi0JZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7IFwKIAlkaWZmIHJlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2cuZnVsbCAkKHNyY2RpcikvcmVzdWx0L2NhdGFsb2dzL215Y2F0YWxvZzsgXAotCWdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiOyBcCiAJJChDSEVDS0VSKSAkKHRvcF9idWlsZGRpcikveG1sY2F0YWxvZyAtLW5vb3V0IC0tZGVsIHN5c2lkICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nOyBcCi0JZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7IFwKIAkkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxjYXRhbG9nIC0tbm9vdXQgLS1kZWwgc3lzaWQzICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nOyBcCi0JZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7IFwKIAkkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxjYXRhbG9nIC0tbm9vdXQgLS1kZWwgc3lzaWQyICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nOyBcCi0JZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7IFwKIAlkaWZmIHJlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2cuZW1wdHkgJChzcmNkaXIpL3Jlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2c7IFwKLQlncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wICB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIjsgXAogCXJtIC1mICQoc3JjZGlyKS9yZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nKQogCi1BdXRvbWF0YXRlc3RzOiB0ZXN0QXV0b21hdGEkKEVYRUVYVCkKLQlAKGVjaG8gPiAubWVtZHVtcCkKLQlAZWNobyAiIyMgQXV0b21hdGEgcmVncmVzc2lvbiB0ZXN0cyIKLQktQChmb3IgaSBpbiAkKHNyY2RpcikvdGVzdC9hdXRvbWF0YS8qIDsgZG8gXAotCSAgbmFtZT1gYmFzZW5hbWUgJCRpYDsgXAotCSAgaWYgWyAhIC1kICQkaSBdIDsgdGhlbiBcCi0JICBpZiBbICEgLWYgJChzcmNkaXIpL3Jlc3VsdC9hdXRvbWF0YS8kJG5hbWUgXSA7IHRoZW4gXAotCSAgICAgIGVjaG8gTmV3IHRlc3QgZmlsZSAkJG5hbWUgOyBcCi0JICAgICAgJChDSEVDS0VSKSAkKHRvcF9idWlsZGRpcikvdGVzdEF1dG9tYXRhICQkaSA+ICQoc3JjZGlyKS9yZXN1bHQvYXV0b21hdGEvJCRuYW1lOyBcCi0JICAgICAgZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7XAotCSAgZWxzZSBcCi0JICAgICAgbG9nPWAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS90ZXN0QXV0b21hdGEgJCRpIDI+JjEgPiByZXN1bHQuJCRuYW1lIDsgXAotCSAgICAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKLQkgICAgICBkaWZmICQoc3JjZGlyKS9yZXN1bHQvYXV0b21hdGEvJCRuYW1lIHJlc3VsdC4kJG5hbWVgIDsgXAotCSAgICAgIGlmIFsgLW4gIiQkbG9nIiBdIDsgdGhlbiBlY2hvICQkbmFtZSByZXN1bHQgOyBlY2hvICIkJGxvZyIgOyBmaSA7IFwKLQkgICAgICBybSByZXN1bHQuJCRuYW1lIDsgXAotCSAgZmkgOyBmaSA7IGRvbmUpCi0KIGRiYTEwMDAwMC54bWw6IGRiZ2VuYXR0ci5wbAogCUBlY2hvICIjIyBnZW5lcmF0aW5nIGRiYTEwMDAwMC54bWwiCiAJQCgkKFBFUkwpICQodG9wX3NyY2RpcikvZGJnZW5hdHRyLnBsIDEwMDAwMCA+IGRiYTEwMDAwMC54bWwpCkBAIC0yODIsMzAgKzMwOSwyMSBAQAogCUBlY2hvICIjIyAzLyByZXBlYXRlZCBET00gcGFyc2luZyIKIAlAZWNobyAiIyMgNC8gcmVwZWF0ZWQgRE9NIHZhbGlkYXRpb24iCiAJLUAoJCh0b3BfYnVpbGRkaXIpL3htbGxpbnQgLS1zdHJlYW0gLS10aW1pbmcgZGJhMTAwMDAwLnhtbDsgXAotCSAgIE1FTT1gY2F0IC5tZW1kdW1wIHwgZ3JlcCAiTUVNT1JZIEFMTE9DQVRFRCIgfCBhd2sgJ3sgcHJpbnQgJCQ3fSdgO1wKIAkgICBpZiBbICIkJE1FTSIgIT0gIiIgXSA7IHRoZW4gZWNobyBVc2luZyAkJE1FTSBieXRlcyA7IGZpIDsgXAotCSAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgICBleGl0IDApCiAJLUAoJCh0b3BfYnVpbGRkaXIpL3htbGxpbnQgLS1zdHJlYW0gLS10aW1pbmcgLS1tZW1vcnkgZGJhMTAwMDAwLnhtbDsgXAotCSAgIE1FTT1gY2F0IC5tZW1kdW1wIHwgZ3JlcCAiTUVNT1JZIEFMTE9DQVRFRCIgfCBhd2sgJ3sgcHJpbnQgJCQ3fSdgO1wKIAkgICBpZiBbICIkJE1FTSIgIT0gIiIgXSA7IHRoZW4gZWNobyBVc2luZyAkJE1FTSBieXRlcyA7IGZpIDsgXAotCSAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgICBleGl0IDApCiAJLUAoJCh0b3BfYnVpbGRkaXIpL3htbGxpbnQgLS1ub291dCAtLXRpbWluZyAtLXJlcGVhdCAkKHNyY2RpcikvdGVzdC92YWxpZC9SRUMteG1sLTE5OTgwMjEwLnhtbDsgXAotCSAgIE1FTT1gY2F0IC5tZW1kdW1wIHwgZ3JlcCAiTUVNT1JZIEFMTE9DQVRFRCIgfCBhd2sgJ3sgcHJpbnQgJCQ3fSdgO1wKIAkgICBpZiBbICIkJE1FTSIgIT0gIiIgXSA7IHRoZW4gZWNobyBVc2luZyAkJE1FTSBieXRlcyA7IGZpIDsgXAotCSAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgICBleGl0IDApCiAKIFZUaW1pbmd0ZXN0czogeG1sbGludCQoRVhFRVhUKQogCS1AKCQodG9wX2J1aWxkZGlyKS94bWxsaW50IC0tbm9vdXQgLS10aW1pbmcgLS12YWxpZCAtLXJlcGVhdCAkKHNyY2RpcikvdGVzdC92YWxpZC9SRUMteG1sLTE5OTgwMjEwLnhtbDsgXAotCSAgIE1FTT1gY2F0IC5tZW1kdW1wIHwgZ3JlcCAiTUVNT1JZIEFMTE9DQVRFRCIgfCBhd2sgJ3sgcHJpbnQgJCQ3fSdgO1wKIAkgICBpZiBbICIkJE1FTSIgIT0gIiIgXSA7IHRoZW4gZWNobyBVc2luZyAkJE1FTSBieXRlcyA7IGZpIDsgXAotCSAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgICBleGl0IDApCiAKIFNjaGVtYXRyb250ZXN0czogeG1sbGludCQoRVhFRVhUKQotCUAoZWNobyA+IC5tZW1kdW1wKQogCUBlY2hvICIjIyBTY2hlbWF0cm9uIHJlZ3Jlc3Npb24gdGVzdHMiCiAJLUAoZm9yIGkgaW4gJChzcmNkaXIpL3Rlc3Qvc2NoZW1hdHJvbi8qLnNjdCA7IGRvIFwKIAkgIG5hbWU9YGJhc2VuYW1lICQkaSB8IHNlZCAncytcLnNjdCsrJ2A7IFwKQEAgLTMxOCwxMSArMzM2LDkgQEAKIAkJICAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxsaW50JChFWEVFWFQpIC0tc2NoZW1hdHJvbiAkJGkgJCRqIFwKIAkJICAgID4gJChzcmNkaXIpL3Jlc3VsdC9zY2hlbWF0cm9uLyIkJG5hbWUiXyIkJHhubyIgXAogCQkgICAgMj4gJChzcmNkaXIpL3Jlc3VsdC9zY2hlbWF0cm9uLyIkJG5hbWUiXyIkJHhubyIuZXJyOyBcCi0JICAgICAgICAgIGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiO1wKIAkgICAgICBlbHNlIFwKIAkgICAgICAgICAgbG9nPWAkKENIRUNLRVIpICQodG9wX2J1aWxkZGlyKS94bWxsaW50JChFWEVFWFQpIC0tc2NoZW1hdHJvbiAkJGkgJCRqIFwKIAkJICAgID4gcmVzLiQkbmFtZSAyPiBlcnIuJCRuYW1lO1wKLQkgICAgICAgICAgZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCI7XAogCSAgICAgICAgICBkaWZmICQoc3JjZGlyKS9yZXN1bHQvc2NoZW1hdHJvbi8iJCRuYW1lIl8iJCR4bm8iIFwKIAkJICAgICAgIHJlcy4kJG5hbWU7XAogCSAgICAgICAgICBkaWZmICQoc3JjZGlyKS9yZXN1bHQvc2NoZW1hdHJvbi8iJCRuYW1lIl8iJCR4bm8iLmVyciBcCkBAIC0zNjUsMzYgKzM4MSwxOSBAQAogZGlzdC1ob29rOiBjbGVhbnVwCiAJKGNkICQoc3JjZGlyKSA7IHRhciAtY2YgLSAtLWV4Y2x1ZGUgLmdpdCB3aW4zMiBvczQwMCB2bXMgdGVzdCByZXN1bHQpIHwgKGNkICQoZGlzdGRpcik7IHRhciB4ZiAtKQogCi1kaXN0LXNvdXJjZTogZGlzdGRpcgotCSQoQU1UQVIpIC1jaG9mIC0gLS1leGNsdWRlIFRlc3RzIC0tZXhjbHVkZSB0ZXN0IC0tZXhjbHVkZSByZXN1bHQgJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+YGVjaG8gIiQoZGlzdGRpcikiIHwgc2VkICJzK2xpYnhtbDIrbGlieG1sMi1zb3VyY2VzKyJgLnRhci5negotCi1kaXN0LXRlc3Q6IGRpc3RkaXIKLQkobWtkaXIgLXAgJChkaXN0ZGlyKSkKLQkoY2QgJChzcmNkaXIpIDsgdGFyIC1jZiAtIC0tZXhjbHVkZSAuZ2l0IHhzdGMvVGVzdHMpIHwgKGNkICQoZGlzdGRpcik7IHRhciB4ZiAtKQotCXRhciAtY2YgLSAkKGRpc3RkaXIpL3Rlc3QgJChkaXN0ZGlyKS9yZXN1bHQgJChkaXN0ZGlyKS94c3RjL1Rlc3RzICAkKGRpc3RkaXIpL01ha2VmaWxlLnRlc3RzICQoZGlzdGRpcikvUkVBRE1FLm1kICQoZGlzdGRpcikvUkVBRE1FLnRlc3RzICQoZGlzdGRpcikvdGVzdGFwaS5jICQoZGlzdGRpcikvcnVudGVzdC5jICQoZGlzdGRpcikvcnVuc3VpdGUuYyB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+YGVjaG8gIiQoZGlzdGRpcikiIHwgc2VkICJzK2xpYnhtbDIrbGlieG1sMi10ZXN0cysiYC50YXIuZ3oKLQlAKHJtIC1yZiAkKGRpc3RkaXIpL3hzdGMvVGVzdCkKLQotY2xlYW50YXI6Ci0JQChybSAtZiBsaWJ4bWwqLnRhci5neiBDT1BZSU5HLkxJQikKLQotcnBtOiBjbGVhbnVwIGNsZWFudGFyCi0JQCh1bnNldCBDRFBBVEggOyAkKE1BS0UpIGRpc3Qtc291cmNlIGRpc3QgJiYgcnBtYnVpbGQgLXRhICQoZGlzdGRpcikudGFyLmd6KQotCi1DTEVBTkZJTEVTID0gcnVueG1sY29uZi5sb2cgdGVzdC5vdXQgKi5nY2RhICouZ2NubyAqLnJlcworQ0xFQU5GSUxFUyA9IHJ1bnN1aXRlLmxvZyBydW54bWxjb25mLmxvZyB0ZXN0Lm91dCAqLmdjZGEgKi5nY25vICoucmVzCiBESVNUQ0xFQU5GSUxFUyA9IENPUFlJTkcgbWlzc2luZy5sc3QKIAotRVhUUkFfRElTVCA9IHhtbDItY29uZmlnLmluIGxpYnhtbC5zcGVjLmluIFwKLSAgICAgICAgICAgICBsaWJ4bWwubTQgQ29weXJpZ2h0IGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5IGdlbnRlc3QucHkgXAorRVhUUkFfRElTVCA9IENvcHlyaWdodCBjaGVjay14bWwtdGVzdC1zdWl0ZS5weSBnZW50ZXN0LnB5IFwKIAkgICAgIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUyLnB5IFwKIAkgICAgIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weSBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5IFwKICAgICAgICAgICAgICBleGFtcGxlL01ha2VmaWxlLmFtIGV4YW1wbGUvZ2pvYnJlYWQuYyBleGFtcGxlL2dqb2JzLnhtbCBcCi0JICAgICBsaWJ4bWwtMi4wLnBjLmluIGxpYnhtbC0yLjAtdW5pbnN0YWxsZWQucGMuaW4gXAogCSAgICAgbGlieG1sMi1jb25maWcuY21ha2UuaW4gYXV0b2dlbi5zaCBcCiAJICAgICB0cmlvbmFuLmMgdHJpb25hbi5oIHRyaW9zdHIuYyB0cmlvc3RyLmggdHJpby5jIHRyaW8uaCBcCi0JICAgICB0cmlvcC5oIHRyaW9kZWYuaCBsaWJ4bWwuaCB4emxpYi5oIGJ1Zi5oIFwKLQkgICAgIGVuYy5oIHNhdmUuaCBnZW5Vbmljb2RlLnB5IFRPRE9fU0NIRU1BUyBcCisJICAgICB0cmlvcC5oIHRyaW9kZWYuaCBsaWJ4bWwuaCBcCisJICAgICBnZW5Vbmljb2RlLnB5IFwKIAkgICAgIGRiZ2VuLnBsIGRiZ2VuYXR0ci5wbCBcCi0JICAgICBSRUFETUUudGVzdHMgTWFrZWZpbGUudGVzdHMgbGlieG1sMi5zeW1zIHRpbXNvcnQuaCBcCisJICAgICBsaWJ4bWwyLnN5bXMgdGltc29ydC5oIFwKIAkgICAgIFJFQURNRS56T1MgUkVBRE1FLm1kIFwKIAkgICAgIENNYWtlTGlzdHMudHh0IGNvbmZpZy5oLmNtYWtlLmluIGxpYnhtbDItY29uZmlnLmNtYWtlLmNtYWtlLmluCiAKQEAgLTQyNSw3ICs0MjQsNyBAQAogR0VOSFRNTCA9IC91c3IvYmluL2dlbmh0bWwKIAogY292OiBjbGVhbi1jb3YKLQlpZiBbICJgZWNobyAkKExERkxBR1MpIHwgZ3JlcCBjb3ZlcmFnZWAiID0gIiIgXSA7IHRoZW4gXAorCWlmIFsgImBlY2hvICQoQU1fTERGTEFHUykgfCBncmVwIGNvdmVyYWdlYCIgPSAiIiBdIDsgdGhlbiBcCiAJICAgIGVjaG8gbm90IGNvbmZpZ3VyZWQgd2l0aCBjb3ZlcmFnZTsgZXhpdCAxIDsgZmkKIAlpZiBbICEgLXggJChMQ09WKSAtbyAhIC14ICQoR0VOSFRNTCkgXSA7IHRoZW4gXAogCSAgICBlY2hvIE5lZWQgJChMQ09WKSBhbmQgJChHRU5IVE1MKSBleGNlY3V0YWJsZXM7IGV4aXQgMSA7IGZpCmRpZmYgLS1naXQgYS9NYWtlZmlsZS50ZXN0cyBiL01ha2VmaWxlLnRlc3RzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjA4ZGNmLi4wMDAwMDAwCi0tLSBhL01ha2VmaWxlLnRlc3RzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIwotIyBZb3UgbWF5IGhhdmUgdG8gYWRqdXN0IHRvIGNhbGwgdGhlIHJpZ2h0IGNvbXBpbGVyLCBvciBvdGhlciBvcHRpb25zCi0jIGZvciBjb21waWxpbmcgYW5kIGxpbmtpbmcKLSMKLQotQ0ZMQUdTPWB4bWwyLWNvbmZpZyAtLWNmbGFnc2AKLUxJQlM9YHhtbDItY29uZmlnIC0tbGlic2AKLVRIUkVBRExJQj0gLWxwdGhyZWFkCi1FWEVFWFQ9Ci0KLWFsbDogcnVudGVzdCQoRVhFRVhUKSBydW5zdWl0ZSQoRVhFRVhUKSB0ZXN0YXBpJChFWEVFWFQpIHRlc3RjaGFyJChFWEVFWFQpCi0KLWNsZWFuOgotCSQoUk0pIHJ1bnRlc3QkKEVYRUVYVCkgcnVuc3VpdGUkKEVYRUVYVCkgdGVzdGFwaSQoRVhFRVhUKQotCi1jaGVjazogZG9fcnVudGVzdCBkb190ZXN0Y2hhciBkb190ZXN0YXBpIGRvX3J1bnN1aXRlCi0KLXJ1bnRlc3QkKEVYRUVYVCk6IHJ1bnRlc3QuYwotCSQoQ0MpIC1vIHJ1bnRlc3QkKEVYRUVYVCkgJChDRkxBR1MpIHJ1bnRlc3QuYyAkKExJQlMpICQoVEhSRUFETElCKQotCi1kb19ydW50ZXN0OiBydW50ZXN0JChFWEVFWFQpCi0JLi9ydW50ZXN0Ci0KLXJ1bnN1aXRlJChFWEVFWFQpOiBydW5zdWl0ZS5jCi0JJChDQykgLW8gcnVuc3VpdGUkKEVYRUVYVCkgJChDRkxBR1MpIHJ1bnN1aXRlLmMgJChMSUJTKQotCi1kb19ydW5zdWl0ZTogcnVuc3VpdGUkKEVYRUVYVCkKLQkuL3J1bnN1aXRlCi0KLXRlc3RhcGkkKEVYRUVYVCk6IHRlc3RhcGkuYwotCSQoQ0MpIC1vIHRlc3RhcGkkKEVYRUVYVCkgJChDRkxBR1MpIHRlc3RhcGkuYyAkKExJQlMpCi0KLWRvX3Rlc3RhcGk6IHRlc3RhcGkkKEVYRUVYVCkKLQkuL3Rlc3RhcGkKLQotdGVzdGNoYXIkKEVYRUVYVCk6IHRlc3RjaGFyLmMKLQkkKENDKSAtbyB0ZXN0Y2hhciQoRVhFRVhUKSAkKENGTEFHUykgdGVzdGNoYXIuYyAkKExJQlMpCi0KLWRvX3Rlc3RjaGFyOiB0ZXN0Y2hhciQoRVhFRVhUKQotCS4vdGVzdGNoYXIKLQpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggNzJlMTMwYi4uMmM4OTFiYiAxMDA2NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC0xLDUgKzEsNjk4IEBACiBORVdTIGZpbGUgZm9yIGxpYnhtbDIKIAordjIuMTIuNTogRmViIDQgMjAyNAorCisjIyMgU2VjdXJpdHkKKworLSBbQ1ZFLTIwMjQtMjUwNjJdIHhtbHJlYWRlcjogRG9uJ3QgZXhwYW5kIFhJbmNsdWRlcyB3aGVuIGJhY2t0cmFja2luZworCisjIyMgUmVncmVzc2lvbnMKKworLSBwYXJzZXI6IEZpeCBjcmFzaCBpbiB4bWxQYXJzZUluTm9kZUNvbnRleHQgd2l0aCBIVE1MIGRvY3VtZW50cworCisKK3YyLjEyLjQ6IEphbiAxNSAyMDI0CisKKyMjIyBSZWdyZXNzaW9ucworCistIHBhcnNlcjogRml4IHJlZ3Jlc3Npb24gcGFyc2luZyBzdGFuZGFsb25lIGRlY2xhcmF0aW9ucworLSBhdXRvdG9vbHM6IFJlYWRkIC0td2l0aC14cHRyLWxvY3MgY29uZmlndXJhdGlvbiBvcHRpb24KKy0gcGFyc2VyOiBGaXggYnVpbGQgLS13aXRob3V0LW91dHB1dAorLSBwYXJzZXI6IERvbid0IGdyb3cgb3Igc2hyaW5rIHB1bGwgcGFyc2VyIG1lbW9yeSBidWZmZXJzCistIGlvOiBGaXggbWVtb3J5IGxpZmV0aW1lIGlzc3VlIHdpdGggaW5wdXQgYnVmZmVycworCisKK3YyLjEyLjM6IERlYyAxMiAyMDIzCisKKyMjIyBSZWdyZXNzaW9ucworCistIHBhcnNlcjogRml4IG5hbWVzcGFjZXMgcmVkZWZpbmVkIGZyb20gZGVmYXVsdCBhdHRyaWJ1dGVzCisKKyMjIyBCdWlsZCBmaXhlcworCistIGluY2x1ZGU6IFJlbmFtZSBYTUxfRU1QVFkgaGVscGVyIG1hY3JvCistIGluY2x1ZGU6IE1vdmUgZGVjbGFyYXRpb24gb2YgeG1sSW5pdEdsb2JhbHMKKy0gaW5jbHVkZTogQWRkIG1pc3NpbmcgaW5jbHVkZXMKKy0gaW5jbHVkZTogTW92ZSBnbG9iYWxzIGZyb20geG1sc2F2ZS5oIHRvIHBhcnNlci5oCistIGluY2x1ZGU6IFJlYWRkIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiB0cmVlLmggYW5kIHBhcnNlci5oCisKKwordjIuMTIuMjogRGVjIDUgMjAyMworCisjIyMgUmVncmVzc2lvbnMKKworLSBwYXJzZXI6IEZpeCBpbnZhbGlkIGZyZWUgaW4geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcgorLSBnbG9iYWxzOiBEaXNhYmxlIFRMUyBpbiBzdGF0aWMgV2luZG93cyBidWlsZHMKKy0gaHRtbDogUmVlbmFibGUgYnVnZ3kgZGV0ZWN0aW9uIG9mIFhNTCBkZWNsYXJhdGlvbnMKKy0gdHJlZTogRml4IHJlZ3Jlc3Npb24gd2hlbiBjb3B5aW5nIERURHMKKy0gcGFyc2VyOiBNYWtlIENSTEYgaW5jcmVtZW50IGxpbmUgbnVtYmVyCisKKyMjIyBCdWlsZCBmaXhlcworCistIGJ1aWxkOiBEaXNhYmxlIGNvbXBpbGVyIFRMUyBieSBkZWZhdWx0CistIGNtYWtlOiBVcGRhdGUgY29uZmlnLmguY21ha2UuaW4KKy0gdGVzdHM6IEZpeCB0ZXN0cyAtLXdpdGgtdmFsaWQgLS13aXRob3V0LXhpbmNsdWRlCisKKwordjIuMTIuMTogTm92IDIzIDIwMjMKKworIyMjIFJlZ3Jlc3Npb25zCisKKy0gaGFzaDogRml4IGRlbGV0aW9uIG9mIGVudHJpZXMgZHVyaW5nIHNjYW4KKy0gcGFyc2VyOiBPbmx5IGVuYWJsZSBTQVgyIGlmIHRoZXJlIGFyZSBTQVgyIGVsZW1lbnQgaGFuZGxlcnMKKworIyMjIEJ1aWxkIGZpeGVzCisKKy0gYXV0b3Rvb2xzOiBTdG9wIGNoZWNraW5nIGZvciBzbnByaW50ZgorLSBkaWN0OiBGaXggJ19fdGhyZWFkJyBiZWZvcmUgJ3N0YXRpYycKKy0gZml4OiBwdGhyZWFkIHdlYWsgcmVmZXJlbmNlcyBpbiBnbG9iYWxzLmMgKE1pa2UgRGFsZXNzaW8pCistIHRlc3RzOiBGaXggYnVpbGQgd2l0aCBvbGRlciBNU1ZDCisKKwordjIuMTIuMDogTm92IDE2IDIwMjMKKworIyMjIE1ham9yIGNoYW5nZXMKKworTW9zdCBvZiB0aGUga25vd24gaXNzdWVzIGxlYWRpbmcgdG8gcXVhZHJhdGljIGJlaGF2aW9yIGluIHRoZSBYTUwgcGFyc2VyCit3ZXJlIGZpeGVkLiBJbnRlcm5hbCBoYXNoIHRhYmxlcyB3ZXJlIHJld3JpdHRlbiB0byByZWR1Y2UgbWVtb3J5Citjb25zdW1wdGlvbi4KKworU3RhcnRpbmcgd2l0aCB0aGlzIHJlbGVhc2UsIGl0IHNob3VsZCBiZSBlbm91Z2ggdG8gYWRkIHRoZSAtLXdpdGgtbGVnYWN5Citjb25maWd1cmF0aW9uIG9wdGlvbiB0byBwcm92aWRlIG1heGltdW0gQUJJIGNvbXBhdGliaWxpdHkuIEZvciBleGFtcGxlLAoraWYgYSBjb2RlIG1vZHVsZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHRoZSBvcHRpb24KK3dpbGwgYWRkIHN0dWJzIGZvciB0aGUgcmVtb3ZlZCBzeW1ib2xzLgorCitsaWJ4bWwyIHdpbGwgbm93IHN0b3JlIGdsb2JhbCB2YXJpYWJsZXMgaW4gdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaWYgc3VwcG9ydGVkCitieSB0aGUgY29tcGlsZXIuIFRoaXMgYXZvaWRzIGFsbG9jYXRpbmcgdGhlIGRhdGEgbGF6aWx5IHdoaWNoIGNhbiByZXN1bHQgaW4KK2EgZmF0YWwgZXJyb3IgY29uZGl0aW9uLiBBIG5ldyBBUEkgZnVuY3Rpb24geG1sQ2hlY2tUaHJlYWRMb2NhbFN0b3JhZ2UKK3dhcyBhZGRlZCBzbyB0aGUgYWxsb2NhdGlvbiBjYW4gYmUgY2hlY2tlZCBlYXJsaWVyIGlmIGNvbXBpbGVyIFRMUyBpcyBub3QKK3N1cHBvcnRlZC4gVG8gcHJlcGFyZSBmb3IgZnV0dXJlIGltcHJvdmVtZW50cywgc29tZSBBUEkgZnVuY3Rpb25zIG5vdyBleHBlY3QKK29yIHJldHVybiBhIGNvbnN0IHhtbEVycm9yIHN0cnVjdC4KKworU2V2ZXJhbCBjeWNsaWMgZGVwZW5kZW5jaWVzIGluIHB1YmxpYyBoZWFkZXIgZmlsZXMgd2VyZSBmaXhlZC4gQXMgYSByZXN1bHQsCitjZXJ0YWluIGhlYWRlcnMgd29uJ3QgaW5jbHVkZSBvdGhlciBoZWFkZXJzIGFzIGJlZm9yZS4KKworUmVmYWN0b3Jpbmcgb2YgdGhlIGVuY29kaW5nIGNvZGUgaGFzIGJlZW4gbW9zdGx5IGNvbXBsZXRlZC4gQ2FsbGluZworeG1sU3dpdGNoRW5jb2RpbmcgZnJvbSBjbGllbnQgY29kZSBpcyBub3cgZnVsbHkgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSB0bworb3ZlcnJpZGUgdGhlIGVuY29kaW5nIGZvciB0aGUgcHVzaCBwYXJzZXIuCisKK1doZW4gcGFyc2luZyBkYXRhIGZyb20gbWVtb3J5LCBsaWJ4bWwyIHdpbGwgbm93IHN0cmVhbSBkYXRhIGNodW5rIGJ5IGNodW5rCitpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIHdob2xlIGJ1ZmZlciAocG9zc2libHkgdHdpY2Ugd2l0aCBlbmNvZGluZ3MpLAorcmVkdWNpbmcgcGVhayBtZW1vcnkgY29uc3VtcHRpb24gY29uc2lkZXJhYmx5LgorCitBIG5ldyBBUEkgZnVuY3Rpb24geG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24gd2FzIGFkZGVkIHRvIGFsbG93IHBhcnNpbmcKK29mIGZpbGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgdGhlIGJpbGxpb24gbGF1Z2hzIHByb3RlY3Rpb24uCisKK1NldmVyYWwgYnVncyBpbiB0aGUgcmVnZXggZGV0ZXJtaW5pc20gY2hlY2tzIHdlcmUgZml4ZWQuIEludmFsaWQgWE1MCitTY2hlbWFzIHdoaWNoIHByZXZpb3VzIHZlcnNpb25zIGVycm9uZW91c2x5IGFjY2VwdGVkIHdpbGwgbm93IGJlCityZWplY3RlZC4KKworIyMjIERlcHJlY2F0aW9ucworCistIGdsb2JhbHM6IERlcHJlY2F0ZSB4bWxMYXN0RXJyb3IKKy0gcGFyc2VyOiBEZXByZWNhdGUgZ2xvYmFsIHBhcnNlciBvcHRpb25zCistIHdpbjMyOiBEZXByZWNhdGUgb2xkIFdpbmRvd3MgYnVpbGQgc3lzdGVtCisKKyMjIyBCdWcgZml4ZXMKKworLSBwYXJzZXI6IFN0b3Agc3dpdGNoaW5nIHRvIElTTy04ODU5LTEgb24gZW5jb2RpbmcgZXJyb3JzCistIHBhcnNlcjogU3VwcG9ydCBlbmNvZGVkIGV4dGVybmFsIFBFcyBpbiBlbnRpdHkgdmFsdWVzCistIHN0cmluZzogRml4IFVURi04IHZhbGlkYXRpb24gaW4geG1sR2V0VVRGOENoYXIKKy0gU0FYMjogQWxsb3cgbXVsdGlwbGUgdG9wLWxldmVsIGVsZW1lbnRzCistIHBhcnNlcjogVXBkYXRlIGxpbmUgbnVtYmVyIGFmdGVyIGNvYWxlc2NpbmcgdGV4dCBub2RlcworLSBwYXJzZXI6IENoZWNrIGZvciB0cnVuY2F0ZWQgbXVsdGktYnl0ZSBzZXF1ZW5jZXMKKworIyMjIEltcHJvdmVtZW50cworCistIGVycm9yOiBNYWtlIG1vcmUgeG1sRXJyb3Igc3RydWN0cyBjb25zdGFudAorLSBwYXJzZXI6IFJlbW92ZSByZWR1bmRhbnQgSVNfQ0hBUiBjaGVjayBpbiB4bWxDdXJyZW50Q2hhcgorLSBwYXJzZXI6IEZpeCBzdGFjayBoYW5kbGluZyBpbiB4bWxQYXJzZVRyeU9yRmluaXNoCistIHBhcnNlcjogUHJvdGVjdCBhZ2FpbnN0IHF1YWRyYXRpYyBkZWZhdWx0IGF0dHJpYnV0ZSBleHBhbnNpb24KKy0gcGFyc2VyOiBNaXNzaW5nIGNoZWNrcyBmb3IgZGlzYWJsZVNBWAorLSBlbnRpdGllczogTWFrZSB4bWxGcmVlRW50aXR5IHB1YmxpYworLSBleGFtcGxlczogRG9uJ3QgdXNlIHNwcmludGYKKy0gZW5jb2Rpbmc6IFN1cHByZXNzIC1XY2FzdC1hbGlnbiB3YXJuaW5ncworLSBwYXJzZXI6IFVzZSBoYXNoIHRhYmxlcyB0byBhdm9pZCBxdWFkcmF0aWMgYmVoYXZpb3IKKy0gcGFyc2VyOiBEb24ndCBza2lwIENSIGluIHhtbEN1cnJlbnRDaGFyCistIGRpY3Q6IFJld3JpdGUgZGljdGlvbmFyeSBoYXNoIHRhYmxlIGNvZGUKKy0gaGFzaDogUmV3cml0ZSBoYXNoIHRhYmxlIGNvZGUKKy0gbWFsbG9jLWZhaWw6IFJlcG9ydCBtYWxsb2MgZmFpbHVyZSBpbiB4bWxGQVJlZ0V4ZWMKKy0gbWFsbG9jLWZhaWw6IFJlcG9ydCBtYWxsb2MgZmFpbHVyZSBpbiB4bWxSZWdFcHhGcm9tUGFyc2UKKy0gcGFyc2VyOiBTaW1wbGlmeSB4bWxTdHJpbmdDdXJyZW50Q2hhcgorLSByZWdleHA6IEZpeCBzdGF0dXMgY29kZXMgYW5kIGhhbmRsZSBpbnZhbGlkIFVURi04CistIGVycm9yOiBNYWtlIHhtbEdldExhc3RFcnJvciByZXR1cm4gYSBjb25zdCBlcnJvcgorLSBodG1sOiBGaXggbG9naWMgaW4gaHRtbEF1dG9DbG9zZQorLSBnbG9iYWxzOiBNb3ZlIGdsb2JhbHMgYmFjayB0byBjb3JyZWN0IGhlYWRlciBmaWxlcworLSBnbG9iYWxzOiBVc2UgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlCistIGdsb2JhbHM6IFJld29yayBnbG9iYWwgc3RhdGUgZGVzdHJ1Y3Rpb24gb24gV2luZG93cworLSBnbG9iYWxzOiBEZWZpbmUgZ2xvYmFscyB1c2luZyBtYWNyb3MKKy0gZ2xvYmFsczogSW50cm9kdWNlIHhtbENoZWNrVGhyZWFkTG9jYWxTdG9yYWdlCistIGdsb2JhbHM6IE1ha2UgeG1sR2xvYmFsU3RhdGUgcHJpdmF0ZQorLSB0aHJlYWRzOiBNb3ZlIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gY29kZSB0byB0aHJlYWRzLmMKKy0gZGVidWc6IFJlbW92ZSBkZWJ1Z2dpbmcgY29kZQorLSBnbG9iYWxzOiBNb3ZlIGNvZGUgZnJvbSB0aHJlYWRzLmMgdG8gZ2xvYmFscy5jCistIHBhcnNlcjogQXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yIGluIHhtbFBhcnNlU3RhcnRUYWcyCistIHNjaGVtYXM6IEZpeCBtZW1vcnkgbGVhayBvZiBhbm5vdGF0aW9ucyBpbiBub3RhdGlvbnMKKy0gZGljdDogVXBkYXRlIGhhc2ggZnVuY3Rpb24KKy0gZGljdDogVXNlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGZvciBQUk5HIHN0YXRlCistIGRpY3Q6IFVzZSB4b3Jvc2hpcm82NCoqIGFzIFBSTkcKKy0geG1sbGludDogRml4IGVycm9yIG1lc3NhZ2VzCistIHBhcnNlcjogRml4IGRldGVjdGlvbiBvZiBudWxsIGJ5dGVzCistIHBhcnNlcjogSW1wcm92ZSBlcnJvciBoYW5kbGluZyBpbiBwdXNoIHBhcnNlcgorLSBwYXJzZXI6IERvbid0IGNoZWNrIGlucHV0TnIgaW4geG1sUGFyc2VUcnlPckZpbmlzaAorLSBwYXJzZXI6IFJlbW92ZSBwdXNoIHBhcnNlciBkZWJ1Z2dpbmcgY29kZQorLSB0cmVlOiBGaXggY29weWluZyBvZiBEVERzCistIGxlZ2FjeTogQWRkIHN0dWJzIGZvciBkaXNhYmxlZCBtb2R1bGVzCistIHBhcnNlcjogQWxsb3cgdG8gc2V0IG1heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3IKKy0gZW50aXRpZXM6IERvbid0IGNoYW5nZSBkb2Mgd2hlbiBlbmNvZGluZyBlbnRpdGllcworLSBwYXJzZXI6IE5ldmVyIHVzZSBVVEYtOCBlbmNvZGluZyBoYW5kbGVyCistIGVuY29kaW5nOiBSZW1vdmUgZGVidWdnaW5nIGNvZGUKKy0gbWFsbG9jLWZhaWw6IEZpeCB1bnNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGluIHhtbFRleHRSZWFkZXJQdXNoRGF0YQorLSBodG1sOiBSZW1vdmUgZW5jb2RpbmcgaGFjayBpbiBodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQKKy0gcGFyc2VyOiBEZWNvZGUgYWxsIGRhdGEgaW4geG1sQ2hhckVuY0lucHV0CistIHBhcnNlcjogU3RyZWFtIGRhdGEgd2hlbiByZWFkaW5nIGZyb20gbWVtb3J5CistIHBhcnNlcjogT3B0aW1pemUgeG1sTG9hZEVudGl0eUNvbnRlbnQKKy0gcGFyc2VyOiBEb24ndCBvdmVyd3JpdGUgRU9GIHBhcnNlciBzdGF0ZQorLSBwYXJzZXI6IFNpbXBsaWZ5IGlucHV0IHBvaW50ZXIgdXBkYXRlcworLSBwYXJzZXI6IERvbid0IHJlaW5pdGlhbGl6ZSBwYXJzZXIgaW5wdXQgbWVtYmVycworLSBlbmNvZGluZzogTW92ZSByYXdjb25zdW1lZCBhY2NvdW50aW5nIHRvIHhtbENoYXJFbmNJbnB1dAorLSBwYXJzZXI6IFJld29yayBlbmNvZGluZyBkZXRlY3Rpb24KKy0gcGFyc2VyOiBBbHdheXMgY3JlYXRlIFVURi04IGluIHhtbFBhcnNlUmVmZXJlbmNlCistIGh0bWw6IFJlbW92ZSBzb21lIGRlYnVnZ2luZyBjb2RlIGluIGh0bWxQYXJzZVRyeU9yRmluaXNoCistIG1hbGxvYy1mYWlsOiBGaXggbWVtb3J5IGxlYWsgaW4geG1sQ29tcGlsZUF0dHJpYnV0ZVRlc3QKKy0gcGFyc2VyOiBSZWNvdmVyIG1vcmUgaW5wdXQgZnJvbSBlbmNvZGluZyBlcnJvcnMKKy0gbWFsbG9jLWZhaWw6IEhhbmRsZSBtYWxsb2MgZmFpbHVyZXMgaW4geG1sQWRkRW5jb2RpbmdBbGlhcworLSBtYWxsb2MtZmFpbDogRml4IG51bGwtZGVyZWYgd2l0aCB4bWxsaW50IC0tY29weQorLSB4cGF0aDogSWdub3JlIGVudGl0eSByZWYgbm9kZXMgd2hlbiBjb21wdXRpbmcgbm9kZSBoYXNoCistIG1hbGxvYy1mYWlsOiBGaXggbnVsbCBkZXJlZiBhZnRlciB4bWxYSW5jbHVkZU5ld1JlZgorLSBTQVg6IEFsd2F5cyB2YWxpZGF0ZSB4bWw6aWRzCistIFN0b3AgdXNpbmcgc3ByaW50ZgorLSBGaXggY29tcGlsZXIgd2FybmluZyBvbiBHQ0MgPCA4CistIHJlZ2V4cDogRml4IGRldGVybWluaXNtIGNoZWNrcworLSByZWdleHA6IEZpeCBjaGVja3MgZm9yIGVsaW1pbmF0ZWQgdHJhbnNpdGlvbnMKKy0gcmVnZXhwOiBTaW1wbGlmeSB4bWxGQVJlZHVjZUVwc2lsb25UcmFuc2l0aW9ucworLSByZWdleHA6IEZpeCBjeWNsZSBjaGVjayBpbiB4bWxGQVJlZHVjZUVwc2lsb25UcmFuc2l0aW9ucworLSBzY2hlbWFzOiBGaXggZmlsZW5hbWUgaW4geG1sU2NoZW1hVmFsaWRhdGVGaWxlCistIHNjaGVtYXM6IEZpeCBsaW5lIG51bWJlcnMgaW4gc3RyZWFtaW5nIHZhbGlkYXRpb24KKy0gd3JpdGVyOiBBZGQgZXJyb3IgY2hlY2sgaW4geG1sVGV4dFdyaXRlckVuZERvY3VtZW50CistIGVuY29kaW5nOiBTdG9wIGNhbGxpbmcgeG1sRW5jb2RpbmdFcnIKKy0geG1sSU86IFJlbW92ZSBzb21lIGNhbGxzIHRvIHhtbElPRXJyCistIHBhcnNlcjogSW1wcm92ZSBoYW5kbGluZyBvZiBlbmNvZGluZyBhbmQgSU8gZXJyb3JzCistIHBhcnNlcjogTW92ZSB4bWxGYXRhbEVyciB0byBwYXJzZXJJbnRlcm5hbHMuYworLSBlbmNvZGluZzogUmV3b3JrIGVycm9yIGNvZGVzCistIC5naXRpZ25vcmU6IFNwbGl0IHVwIGFuZCByZWFycmFuZ2UgLmdpdGlnbm9yZSBmaWxlcworLSAuZ2l0aWdub3JlOiBBZGQgcnVuc3VpdGUubG9nCistIFN0b3AgY2FsbGluZyB4bWxNZW1vcnlEdW1wCistIGV4YW1wbGVzOiBEb24ndCBjYWxsIHhtbENsZWFudXBQYXJzZXIgYW5kIHhtbE1lbW9yeUR1bXAKKy0geHBhdGg6IFJlbW92ZSByZW1haW5pbmcgcmVmZXJlbmNlcyB0byB2YWx1ZUZyYW1lCisKKyMjIyBQb3J0YWJpbGl0eQorCistIHB5dGhvbjogTWFrZSBpdCBjb21wYXRpYmxlIHdpdGggcHl0aG9uMy4xMiAoRGFuaWVsIEdhcmNpYSBNb3Jlbm8pCisKKyMjIyBCdWlsZCBzeXN0ZW1zCisKKy0gY21ha2U6IENoZWNrIHdoZXRoZXIgc3RhdGljIGxpbmtpbmcgZGVwZW5kZW5jaWVzIGZvdW5kIGluIGNvbmZpZyBmaWxlcworICAoSmFtZXMgTGUgQ3Vpcm90KQorLSBhdXRvdG9vbHM6IE1ha2UgLS13aXRoLW1pbmltdW0gZGlzYWJsZSBsem1hIHN1cHBvcnQKKy0gYnVpbGQ6IFJlbW92ZSBzb21lIEdDQyB3YXJuaW5ncworLSBIYW5kbGUgTk9DT05GSUcgY2FzZSB3aGVuIHNldHRpbmcgbG9jYXRpb25zIGZyb20gQ01ha2UgdGFyZ2V0IHByb3BlcnRpZXMKKyAgKE1hcmt1cyBSaWNrZXJ0KQorLSBjbWFrZTogR2VuZXJhdGUgYmV0dGVyIHBrZy1jb25maWcgZmlsZSBmb3IgU1lTUk9PVCBidWlsZHMgdW5kZXIgQ01ha2UKKyAgKEphbWVzIExlIEN1aXJvdCkKKy0gYXV0b2NvbmY6IEluY2x1ZGUgbm9uLXBrZy1jb25maWcgZGVwZW5kZW5jeSBmbGFncyBpbiB0aGUgcGtnLWNvbmZpZyBmaWxlCisgIChKYW1lcyBMZSBDdWlyb3QpCistIGF1dG9jb25mOiBEb24ndCBiYWtlIGJ1aWxkIHRpbWUgQ0ZMQUdTIGludG8gcGtnLWNvbmZpZyBmaWxlIChKYW1lcyBMZSBDdWlyb3QpCistIGJ1aWxkOiBHZW5lcmF0ZSBiZXR0ZXIgcGtnLWNvbmZpZyBmaWxlcyBmb3Igc3RhdGljLW9ubHkgYnVpbGRzIChKYW1lcworICBMZSBDdWlyb3QpCistIGJ1aWxkOiBHZW5lcmF0ZSBiZXR0ZXIgcGtnLWNvbmZpZyBmaWxlIGZvciBTWVNST09UIGJ1aWxkcyAoSmFtZXMgTGUgQ3Vpcm90KQorLSBhdXRvY29uZjogQWxsb3cgY3VzdG9tIC0td2l0aC1pY3UgY29uZmlndXJlIG9wdGlvbgorCisjIyMgVGVzdHMKKworLSB0ZXN0czogQWxzbyB0ZXN0IHhtbE5leHRDaGFyIGluIHRlc3RjaGFyLmMKKy0gdGVzdHM6IFN0YXJ0IHdpdGggdGVzdHBhcnNlci5jIGZvciBleHRyYSB0ZXN0cworLSBmdXp6OiBSYWlzZSByc3NfbGltaXRfbWIKKy0gZnV6ejogVGVzdCB4bWxUZXh0UmVhZGVyUmVhZCBhZnRlciBFT0Ygb3IgZmFpbHVyZQorLSBmdXp6OiBUZXN0IFhNTF9QQVJTRV9YSU5DTFVERSB8IFhNTF9QQVJTRV9WQUxJRAorLSB0ZXN0czogSGFuZGxlIGVudGl0aWVzIGluIFNBWCB0ZXN0cworLSBmdXp6OiBEaXNhYmxlIFhNTF9QQVJTRV9TQVgxIG9wdGlvbiBpbiB4bWwgZnV6emVyCistIHRlc3RzOiBBZGQgbW9yZSB0ZXN0cyBmb3IgcmVkZWZpbmVkIGF0dHJpYnV0ZXMKKy0gaGFzaDogQWRkIGhhc2ggdGFibGUgdGVzdHMKKy0gdGVzdHM6IEFkZCBBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUiBtYWNybworLSBmdXp6OiBBbGxvdyB0byBmdXp6IHdpdGhvdXQgcHVzaCwgcmVhZGVyIG9yIG91dHB1dCBtb2R1bGVzCistIGdpdGxhYi1jaTogQWRkIGEgIm1lZGl1bSIgY29uZmlnIGJ1aWxkCistIHB5dGhvbjogRml4IHRlc3RzIG9uIE1pbkdXCistIHRlc3Q6IEFkZCBwdXNoIHBhcnNlciB0ZXN0IHdpdGggb3ZlcnJpZGRlbiBlbmNvZGluZworLSB0ZXN0YXBpOiB0ZXN0X3htbFNBWERlZmF1bHRWZXJzaW9uKCkgbGVhdmVzIHhtbFNBWDJEZWZhdWx0VmVyc2lvblZhbHVlIHNldAorICB0byAxIHdpdGggTElCWE1MX1NBWDFfRU5BQkxFRCAoRGF2aWQgS2lsemVyKQorLSBnaXRsYWItY2k6IExvd2VyIF9YT1BFTl9TT1VSQ0UgdmFsdWUKKy0gdGVzdGFwaTogRG9uJ3Qgc2V0IGh0dHBfcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGUKKy0gdGVzdDogQWRkIHB1c2ggcGFyc2VyIHRlc3RzIGZvciBzcGxpdCBVVEYtOCBzZXF1ZW5jZXMKKy0geGluY2x1ZGU6IExvd2VyIGluaXRpYWwgdGFibGUgc2l6ZSB3aGVuIGZ1enppbmcKKy0gdGVzdHM6IFRlc3Qgc3RyZWFtaW5nIHNjaGVtYSB2YWxpZGF0aW9uCistIHJ1bnRlc3Q6IFNraXAgZWxlbWVudCBuYW1lIGluIHNjaGVtYSBlcnJvciBtZXNzYWdlcworCisjIyMgRG9jdW1lbnRhdGlvbgorCistIGRvYzogQWRkIG5vdGVzIGFib3V0IHJ1bnRlc3QgdG8gTUFJTlRBSU5FUlMubWQKKy0gZG9jOiBEb24ndCBkb2N1bWVudCBpbnRlcm5hbCBtYWNyb3MgaW4geG1sdmVyc2lvbi5oCistIGRvYzogQWxsb3cgJ3Vuc2lnbmVkJyB3aXRob3V0ICdpbnQnCistIGRvYzogSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworCisKK3YyLjExLjY6IE5vdiAxNiAyMDIzCisKKyMjIyBSZWdyZXNzaW9ucworCistIHRocmVhZHM6IEZpeCAtLXdpdGgtdGhyZWFkLWFsbG9jCistIHhpbmNsdWRlOiBGaXggJ2xhc3QnIHBvaW50ZXIgaW4geG1sWEluY2x1ZGVDb3B5Tm9kZQorCisjIyMgQnVnIGZpeGVzCisKKy0gcGFyc2VyOiBGaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGluIHhtbFBhcnNlQ2hhckRhdGFJbnRlcm5hbAorCisKK3YyLjExLjU6IEF1ZyA5IDIwMjMKKworIyMjIFJlZ3Jlc3Npb25zCisKKy0gcGFyc2VyOiBNYWtlIHhtbFN3aXRjaEVuY29kaW5nIGFsd2F5cyBza2lwIHRoZSBCT00KKy0gYXV0b3Rvb2xzOiBJbXByb3ZlIGljb252IGNoZWNrCisKKyMjIyBCdWcgZml4ZXMKKworLSB2YWxpZDogRml4IGMxLT5wYXJlbnQgcG9pbnRlciBpbiB4bWxDb3B5RG9jRWxlbWVudENvbnRlbnQKKy0gZW5jb2Rpbmc6IEFsd2F5cyBjYWxsIHVjbnZfY29udmVydEV4IHdpdGggZmx1c2ggc2V0IHRvIGZhbHNlCisKKyMjIyBQb3J0YWJpbGl0eQorCistIGF1dG90b29sczogZml4IFB5dGhvbiBtb2R1bGUgZmlsZSBleHQgZm9yIGN5Z3dpbi9tc3lzMiAoQ2hyaXN0b3BoIFJlaXRlcikKKworIyMjIFRlc3RzCisKKy0gcnVudGVzdDogRml4IGNvbXBpbGF0aW9uIHdpdGhvdXQgTElCWE1MX0hUTUxfRU5BQkxFRAorCisKK3YyLjExLjQ6IE1heSAxOCAyMDIzCisKK0ZpeGVzIGEgc2VyaW91cyByZWdyZXNzaW9uLgorCistIHBhcnNlcjogRml4IHJlZ3Jlc3Npb24gd2hlbiBwdXNoIHBhcnNpbmcgVVRGLTggc2VxdWVuY2VzCisKKwordjIuMTEuMzogTWF5IDExIDIwMjMKKworRml4ZXMgbW9yZSByZWdyZXNzaW9ucy4KKworLSB4aW5jbHVkZTogRml4IGZhbHNlIHBvc2l0aXZlcyBpbiBpbmNsdXNpb24gbG9vcCBkZXRlY3Rpb24KKy0gYXV0b3Rvb2xzOiBGaXggSUNVIGRldGVjdGlvbgorLSBwYXJzZXI6IEZpeCAiaHVnZSBpbnB1dCBsb29rdXAiIGVycm9yIHdpdGggcHVzaCBwYXJzZXIKKy0geHBhdGg6IEZpeCBidWlsZCB3aXRob3V0IExJQlhNTF9YUEFUSF9FTkFCTEVECistIGhhc2g6IEZpeCBwb3NzaWJsZSBzdGFydHVwIGNyYXNoIHdpdGggb2xkIGxpYnhzbHQgdmVyc2lvbnMKKy0gYXV0b2NvbmY6IGZpeCBpY29udiBsaWJyYXJ5IHBhdGhzIChNaWtlIERhbGVzc2lvKQorCisKK3YyLjExLjI6IE1heSA1IDIwMjMKKworRml4IHJlZ3Jlc3Npb25zLgorCistIHRocmVhZHM6IEZpeCBzdGFydHVwIGNyYXNoIHdpdGggd2VhayBzeW1ib2wgaGFjaworLSB3aW4zMjogRG9uJ3QgZGVwZW5kIG9uIHJlbW92ZWQgLmRlZiBmaWxlCistIHNjaGVtYXM6IEZpeCBtZW1vcnkgbGVhayBpbiB4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbQorCisKK3YyLjExLjE6IEFwciAzMCAyMDIzCisKK0ZpeGVzIGJ1aWxkIGFuZCBBQkkgaXNzdWVzLgorCistIGNtYWtlOiBGaXggdmFfY29weSBkZXRlY3Rpb24gKEx1Y2EgTmljY29saSkKKy0gbGlieG1sLm00OiBGaXggcXVvdGluZworLSBMaW5rIHdpdGggLS11bmRlZmluZWQtdmVyc2lvbgorLSBsaWJ4bWwyLnN5bXM6IFJldmVydCByZW1vdmFsIG9mIHZlcnNpb24gaW5mb3JtYXRpb24KKworCit2Mi4xMS4wOiBBcHIgMjggMjAyMworCisjIyMgTWFqb3IgY2hhbmdlcworCitQcm90ZWN0aW9uIGFnYWluc3QgZW50aXR5IGV4cGFuc2lvbiBhdHRhY2tzLCBhbHNvIGtub3duIGFzICJiaWxsaW9uIGxhdWdocyIKK2hhcyBiZWVuIGdyZWF0bHkgaW1wcm92ZWQuIE1hbGljaW91cyBmaWxlcyBzaG91bGQgYmUgZGV0ZWN0ZWQgcmVsaWFibHkgbm93CithbmQgZmFsc2UgcG9zaXRpdmVzIHNob3VsZCBiZSByZWR1Y2VkLiBJdCBpcyBwb3NzaWJsZSB0aG91Z2ggdGhhdCBsYXJnZQorZG9jdW1lbnRzIHdoaWNoIG1ha2UgaGVhdnkgdXNlIG9mIGVudGl0aWVzIGFyZSByZWplY3RlZCBub3cuCisKK1RoaXMgcmVsZWFzZSBmaW5hbGx5IGZpeGVzIHN5bWJvbCB2aXNpYmlsaXR5IG9uIFVOSVggc3lzdGVtcy4gSW50ZXJuYWwKK3N5bWJvbHMgd2lsbCBub3cgYmUgaGlkZGVuLiBXaGlsZSB0aGVzZSBzeW1ib2xzIHdlcmUgbmV2ZXIgZGVjbGFyZWQgaW4gcHVibGljCitoZWFkZXJzLCBpdCB3YXMgc3RpbGwgcG9zc2libGUgdG8gZGVjbGFyZSB0aGVtIG1hbnVhbGx5LiBOb3cgdGhpcyB3b24ndCB3b3JrLgorCitBbGwgc3ltYm9sIGluZm9ybWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRUxGIHZlcnNpb24gc2NyaXB0IHRvIGZpeAorbGluayBlcnJvcnMgd2l0aCAtLW5vLXVuZGVmaW5lZC12ZXJzaW9uLiBUaGUgdmVyc2lvbiBub2RlcyBhcmUga2VwdCBzbyBpdAorc2hvdWxkIHN0aWxsIGJlIHBvc3NpYmxlIHRvIHJ1biBiaW5hcmllcyBsaW5rZWQgYWdhaW5zdCBvbGRlciB2ZXJzaW9ucy4KKworQWJvdXQgOTAgbWVtb3J5IGVycm9ycyBpbiBjb2RlIHBhdGhzIGhhbmRsaW5nIG1hbGxvYyBmYWlsdXJlcyBoYXZlIGJlZW4gZml4ZWQuCitXaGlsZSB0aGVzZSBpc3N1ZXMgc2hvdWxkbid0IGltcGFjdCBzZWN1cml0eSwgdGhpcyBpbXByb3ZlcyByb2J1c3RuZXNzIHVuZGVyCittZW1vcnkgcHJlc3N1cmUuCisKK1RoZSBYSW5jbHVkZSBlbmdpbmUgaGFzIGJlZW4gcmV3b3JrZWQgdG8gcHJvcGVybHkgc3VwcG9ydCBuZXN0ZWQgaW5jbHVkZXMuCisKK1NldmVyYWwgY2FzZXMgb2YgcXVhZHJhdGljIGJlaGF2aW9yIGluIHRoZSBYTUwgcHVzaCBwYXJzZXIgaGF2ZSBiZWVuIGZpeGVkLgorCitSZWZhY3RvcmluZyBoYXMgYmVndW4gb24gc29tZSBidWZmZXJpbmcgYW5kIGVuY29kaW5nIGNvZGUgd2l0aCB0aGUgZ29hbCBvZgorc2ltcGxpZnlpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGJhc2UgYW5kIGltcHJvdmluZyBlcnJvciByZXBvcnRpbmcuCisKK090aGVyIGhpZ2hsaWdodHM6CisKKy0gQ29uc29saWRhdGVkIHByaXZhdGUgaGVhZGVyIGZpbGVzLgorLSBNYWpvciByZXdvcmsgb2YgdGhlIGF1dG9jb25mIGJ1aWxkLgorLSBEZXByZWNhdGVkIHNldmVyYWwgb3V0ZGF0ZWQgYW5kIGludGVybmFsIGZ1bmN0aW9ucy4KKworU3BlY2lhbCB0aGFua3MgdG8gR29vZ2xlJ3MgT3BlbiBTb3VyY2UgU2VjdXJpdHkgU3Vic2lkaWVzIHByb2dyYW0gZm9yCitzcG9uc29yaW5nIG11Y2ggb2YgdGhlIHdvcmsgb24gdGhpcyByZWxlYXNlIQorCitPbmdvaW5nIHdvcmsgb24gbGlieG1sMiByZWxpZXMgb24gZnVuZGluZy4gRm9yIGEgbGlzdCBvZiBpbXBvcnRhbnQgb3BlbgoraXNzdWVzIHNlZSA8aHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIvLS9pc3N1ZXMvNTA3PgorCisjIyMgU2VjdXJpdHkKKworLSBGaXggdXNlLWFmdGVyLWZyZWUgaW4geG1sUGFyc2VDb250ZW50SW50ZXJuYWwoKSAoRGF2aWQgS2lsemVyKQorLSB4bWxsaW50OiBGaXggdXNlLWFmdGVyLWZyZWUgd2l0aCAtLW1heG1lbQorLSBwYXJzZXI6IEZpeCBPT0IgcmVhZCB3aGVuIGZvcm1hdHRpbmcgZXJyb3IgbWVzc2FnZQorLSBlbnRpdGllczogUmV3b3JrIGVudGl0eSBhbXBsaWZpY2F0aW9uIGNoZWNrcworCisjIyMgUmVncmVzc2lvbnMKKworLSBwYXJzZXI6IEZpeCByZWdyZXNzaW9uIGluIHhtbFBhcnNlck5vZGVJbmZvIGFjY291bnRpbmcKKworIyMjIEJ1ZyBmaXhlcworCistIEZpeCBtZW1vcnkgZXJyb3JzIGluIGNvZGUgaGFuZGxpbmcgbWFsbG9jIGZhaWx1cmVzCistIGVuY29kaW5nOiBGaXggZXJyb3IgY29kZSBpbiBhc2NpaVRvVVRGOAorLSB4cGF0aDogbnVtYmVyKCctJykgc2hvdWxkIHJldHVybiBOYU4KKy0geG1sUGFyc2VTdGFydFRhZzIoKSBjb250YWlucyB0eXBvIHdoZW4gY2hlY2tpbmcgZm9yIGRlZmF1bHQgZGVmaW5pdGlvbnMgZm9yCisgIGFuIGF0dHJpYnV0ZSBpbiBhIG5hbWVzcGFjZSAoRGF2aWQgS2lsemVyKQorLSB1cmk6IEZpeCBoYW5kbGluZyBvZiBwb3J0IG51bWJlcnMKKy0gZXJyb3I6IE1ha2Ugc3VyZSB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSB2YWxpZCBVVEYtOAorLSB4aW5jbHVkZTogRml4IG5lc3RlZCBpbmNsdWRlcworCisjIyMgSW1wcm92ZW1lbnRzCisKKy0geG1sbGludDogVmFsaWRhdGUgLS1tYXhtZW0gaW50ZWdlciBvcHRpb24KKy0geG1sVmFsaWRhdGVQb3BFbGVtZW50KCkgY2FuIHJldHVybiBpbnZhbGlkIHZhbHVlICgtMSkgKERhdmlkIEtpbHplcikKKy0gcGFyc2VyOiBSZXdvcmsgRUJDRElDIGNvZGUgcGFnZSBkZXRlY3Rpb24KKy0gcGFyc2VyOiBMaW1pdCBuYW1lIGxlbmd0aCBpbiB4bWxQYXJzZUVuY05hbWUKKy0gcGFyc2VyOiBSZXdvcmsgc2hyaW5raW5nIG9mIGlucHV0IGJ1ZmZlcnMKKy0gaHRtbDogUmVseSBvbiBDVVJfQ0hBUiB0byBncm93IHRoZSBpbnB1dCBidWZmZXIKKy0gcGFyc2VyOiBSZWx5IG9uIENVUl9DSEFSL05FWFQgdG8gZ3JvdyB0aGUgaW5wdXQgYnVmZmVyCistIHZhbGlkOiBNYWtlIHhtbFZhbGlkYXRlRWxlbWVudCBub24tcmVjdXJzaXZlCistIGh0bWw6IEZpeCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gaHRtbFBhcnNlVHJ5T3JGaW5pc2gKKy0geG1sbGludDogRml4IG1lbW9yeSBsZWFrIHdpdGggLS1wYXR0ZXJuIC0tc3RyZWFtCistIHBhcnNlcjogU3RvcCBjYWxsaW5nIHhtbFBhcnNlcklucHV0U2hyaW5rCistIGh0bWw6IEltcG9zZSBzb21lIGxlbmd0aCBsaW1pdHMKKy0gdmFsaWQ6IEFsbG93IHhtbEZyZWVWYWxpZEN0eHQoTlVMTCkKKy0gcGFyc2VyOiBTdG9wIGNhbGxpbmcgeG1sUGFyc2VySW5wdXRHcm93CistIHhpbmNsdWRlOiBGaXggcXVhZHJhdGljIGJlaGF2aW9yIGluIHhtbFhJbmNsdWRlTG9hZFR4dAorLSB4aW5jbHVkZTogQWJvcnQgaW1tZWRpYXRlbHkgaWYgbWF4IGRlcHRoIHdhcyBleGNlZWRlZAorLSB4cGF0aDogT25seSByZXBvcnQgdGhlIGZpcnN0IGVycm9yCistIGVycm9yOiBEb24ndCBtb3ZlIHBhc3QgY3VycmVudCBwb3NpdGlvbgorLSBlcnJvcjogTGltaXQgbnVtYmVyIG9mIHBhcnNlciBlcnJvcnMKKy0gcGFyc2VyOiBMb3dlciBlbnRpdHkgbmVzdGluZyBsaW1pdCB3aXRoIFhNTF9QQVJTRV9IVUdFCistIHBhcnNlcjogRG9uJ3QgaW5jcmVhc2UgZGVwdGggdHdpY2Ugd2hlbiBwYXJzaW5nIGludGVybmFsIGVudGl0aWVzCistIHBhcnNlcjogSW1wcm92ZSBkZXRlY3Rpb24gb2YgZW50aXR5IGxvb3BzCistIHBhcnNlcjogT25seSByZXBvcnQgYSBzaW5nbGUgZW50aXR5IGVycm9yCistIGxpYnhtbC5oOiBSZW1vdmUgZHViaW91cyBkZWZpbml0aW9uIG9mIExJQlhNTF9TVEFUSUMKKy0gaHRtbDogSW1wcm92ZSBwYXJzaW5nIG9mIG5lc3RlZCBsaXN0cworLSBtZW1vcnk6IERvbid0IHVzZSBsb2NrcyBpbiB4bWxNZW1Vc2VkCistIGVuY29kaW5nOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHhtbERlZmF1bHRDaGFyRW5jb2RpbmdIYW5kbGVyCistIFJld29yayBpbml0aWFsaXphdGlvbiBjb2RlCistIEFkZCAuZWRpdG9yY29uZmlnCistIHBhcnNlcjogTWVyZ2UgbWlzYywgcHJvbG9nIGFuZCBlcGlsb2cgY2FzZXMgaW4gcHVzaCBwYXJzZXIKKy0gcGFyc2VyOiBGaXggJ2NvbnN1bWVkJyBhY2NvdW50aW5nIHdoZW4gc3dpdGNoaW5nIGVuY29kaW5ncworLSBodG1sOiBGaXggY2hlY2sgZm9yIGVuZCBvZiBjb21tZW50IGluIHB1c2ggcGFyc2VyCistIHBhcnNlcjogRml4IHB1c2ggcGFyc2VyIHdpdGggMS0zIGJ5dGUgaW5pdGlhbCBjaHVuaworLSBwYXJzZXI6IFJld3JpdGUgcHVzaCBwYXJzZXIgYm91bmRhcnkgY2hlY2tzCistIHJlYWRlcjogU3dpdGNoIHRvIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtCistIGh0bWw6IERvbid0IGVzY2FwZSBBU0NJSSBjaGFycyBpbiBocmVmIGF0dHJpYnV0ZXMKKy0gaW86IERvbid0IHNocmluayBtZW1vcnkgaW5wdXQgYnVmZmVycworLSBwYXJzZXI6IERvbid0IGNhbGwgeG1sU0hSSU5LIGZyb20gcHVzaCBwYXJzZXIKKy0gcGFyc2VyOiBJZ25vcmUgY2RhdGEgYXJndW1lbnQgaW4geG1sUGFyc2VDaGFyRGF0YQorLSBwYXJzZXI6IFJld29yayBwdXNoIHBhcnNlciBwYXJzZXIgcHJvZ3Jlc3MgY2hlY2tzCistIGlvOiBGaXggYSBmZXcgaW50ZWdlciBvdmVyZmxvd3MgaW4gSS9PIHN0YXRpc3RpY3MKKy0gaW86IFJld29yayB4bWxQYXJzZXJJbnB1dEJ1ZmZlckdyb3cgd2l0aCBlbmNvZGluZ3MKKy0gaW86IFJlbW92ZSB4bWxJbnB1dFJlYWRDYWxsYmFja05vcAorLSBpbzogQ2hlY2sgZm9yIG1lbW9yeSBidWZmZXIgZWFybHkgaW4geG1sUGFyc2VySW5wdXRHcm93CistIHBhcnNlcjogRml4IGVycm9yIG1lc3NhZ2UgaW4geG1sUGFyc2VDb21tZW50Q29tcGxleAorLSBCeXBhc3MgcHJveHkgaW4gbmFub0hUVFAgZm9yIGhvc3RzIGluICJub19wcm94eSIgKE1hcmt1cyBKw7ZyZykKKy0gc2NoZW1hczogRml4IGluZmluaXRlIGxvb3AgaW4geG1sU2NoZW1hQ2hlY2tFbGVtU3Vic3RHcm91cAorLSB0aHJlYWRzOiBSZW1vdmUgY2hlY2sgZm9yIHB0aHJlYWRfZXF1YWwKKy0geGluY2x1ZGU6IFJld29yayBYSW5jbHVkZSBjYWNoZQorLSB4aW5jbHVkZTogUmVtb3ZlIGluZWZmaWNpZW50IHJlZmNvdW50aW5nIHNjaGVtZQorLSB4bWxsaW50OiBJbXByb3ZlIGhhbmRsaW5nIG9mIGVtcHR5IFhQYXRoIG5vZGUgc2V0cworLSBwYXJzZXI6IEZpeCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaW4geG1sUGFyc2VBdHRWYWx1ZUludGVybmFsCistIGVycm9yOiBEb24ndCB1c2UgaW5pdEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jCistIHhwYXRoOiBMb3dlciBYUGF0aCByZWN1cnNpb24gbGltaXQgb24gV2luZG93cworLSBTdG9wIGluY2x1ZGluZyBzeXMvdHlwZXMuaAorLSBEb24ndCBkZWZpbmUgV0lOMzIgbWFjcm8KKy0gTWFrZSB4bWxOZXdTQVhQYXJzZXJDdHggdGFrZSBhIGNvbnN0IHNheCBoYW5kbGVyCistIENvbnNvbGlkYXRlIHByaXZhdGUgaGVhZGVyIGZpbGVzCistIFJlbW92ZSBpbnRlcm5hbCBtYWNyb3MgZnJvbSBwYXJzZXJJbnRlcm5hbHMuaAorLSBNb3ZlIHNvbWUgSFRNTCBmdW5jdGlvbnMgdG8gY29ycmVjdCBoZWFkZXIgZmlsZQorLSB4bWxsaW50OiBTdG9wIGNhbGxpbmcgeG1sU0FYRGVmYXVsdFZlcnNpb24KKy0gSW50cm9kdWNlIHhtbE5ld1NBWFBhcnNlckN0eHQgYW5kIGh0bWxOZXdTQVhQYXJzZXJDdHh0CistIERvbid0IG1lc3Mgd2l0aCBwYXJzZXIgb3B0aW9ucyBpbiBodG1sUGFyc2VEb2N1bWVudAorLSBSZW1vdmUgdXNlbGVzcyBjYWxsIHRvIGh0bWxEZWZhdWx0U0FYSGFuZGxlckluaXQKKy0gUmVtb3ZlIGh0bWxEZWZhdWx0U0FYSGFuZGxlciBmcm9tIG5vbi1TQVgxIGJ1aWxkCistIERvbid0IGluaXRpYWxpemUgU0FYIGhhbmRsZXIgaW4gaHRtbFJlYWRNZW1vcnkKKy0gRml4IGh0bWxSZWFkTWVtb3J5IG1peGluZyB1cCBYTUwgYW5kIEhUTUwgZnVuY3Rpb25zCistIERvbid0IHVzZSBkZWZhdWx0IFNBWCBoYW5kbGVyIHRvIHJlcG9ydCB1bnJlbGF0ZWQgZXJyb3JzCistIENyZWF0ZSBzdHJlYW0gd2l0aCBidWZmZXIgaW4geG1sTmV3U3RyaW5nSW5wdXRTdHJlYW0KKy0geG1sY2F0YWxvZzogRml4IG1lbW9yeSBsZWFrcworCisjIyMgQ29kZSBxdWFsaXR5CisKKy0geHpsaWI6IEZpeCBpbXBsaWNpdCBzaWduIGNoYW5nZSBpbiB4el9vcGVuCistIHBhcnNlcjogU2ltcGxpZnkgY2FsY3VsYXRpb24gb2YgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZQorLSBwYXJzZXI6IFVzZSBzaXplX3Qgd2hlbiBzdWJ0cmFjdGluZyBpbnB1dCBidWZmZXIgcG9pbnRlcnMKKy0gcGFyc2VyOiBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHVwZGF0aW5nIGNoZWNrSW5kZXgKKy0geHBhdGg6IEZpeCBoYXJtbGVzcyBpbnRlZ2VyIG92ZXJmbG93IGluIHhtbFhQYXRoVHJhbnNsYXRlRnVuY3Rpb24KKy0gc2NoZW1hdHJvbjogVXNlIGxvZ2ljYWwgYW5kCistIHJlbGF4bmc6IFJlbW92ZSB1c2VsZXNzIGlmIHN0YXRlbWVudAorLSBzY2hlbWFzOiBSZW1vdmUgdXNlbGVzcyBpZiBzdGF0ZW1lbnQKKy0gcGF0dGVybjogTWVyZ2UgaWRlbnRpY2FsIGJyYW5jaGVzCistIHJlZ2V4cDogQWRkIHNhbml0eSBjaGVjayBpbiB4bWxSZWdDYWxsb2MyCistIHJlZ2V4cDogU2ltcGxpZnkgeG1sUmVnQXRvbVB1c2gKKy0gZW5jb2Rpbmc6IENhc3QgdG91cHBlciBhcmd1bWVudCB0byB1bnNpZ25lZCBjaGFyCistIHVyaTogQWRkIGV4cGxpY2l0IGNhc3QgaW4geG1sU2F2ZVVyaQorLSBidWY6IEZpeCByZXR1cm4gdmFsdWUgb2YgeG1sQnVmR2V0SW5wdXRCYXNlCistIHBhcnNlcjogRml4IGludGVnZXIgb3ZlcmZsb3cgb2YgaW5wdXQgSUQKKy0gcGFyc2VyOiBSZW1vdmUgdXNlbGVzcyBlbnQtPmV0eXBlIHRlc3QgaW4geG1sUGFyc2VSZWZlcmVuY2UKKy0gcGFyc2VyOiBSZW1vdmUgdXNlbGVzcyBlbnQtPmNoaWxkcmVuIHRlc3RzIGluIHhtbFBhcnNlUmVmZXJlbmNlCistIHhtbG1lbW9yeS5jOiBSZW1vdmUgeG1sTWVtQ29udGVudFNob3cKKy0gbGlieG1sLmg6IEFkZCBjb21tZW50cyBhbmQgaW5kZW50YXRpb24KKy0gbGlieG1sLmg6IERvbid0IGluY2x1ZGUgc3RkaW8uaAorLSB4bWxleHBvcnRzLmg6IERpc2FibGUgZG9jcyBmb3IgaW50ZXJuYWwgbWFjcm8gWE1MUFVCTElDCistIHBhcnNlcjogU2ltcGxpZnkgeG1sUGFyc2VDb25kaXRpb25hbFNlY3Rpb25zCistIGlvOiBSZWFycmFuZ2UgY29kZSBpbiB4bWxTd2l0Y2hJbnB1dEVuY29kaW5nSW50CistIHdhcm5pbmdzOiBGaXggLVdzdHJpY3QtcHJvdG90eXBlcyB3YXJuaW5nCistIHdhcm5pbmdzOiBSZW1vdmUgc2V0LWJ1dC11bnVzZWQgdmFyaWFibGVzCistIEZpeCBjb21waWxlciB3YXJuaW5ncyBpbiBTQVgyLmMKKy0gRml4IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIGluIHB5dGhvbi90eXBlcy5jCistIEZpeCBjb21waWxlciB3YXJuaW5nIGluIGV4YW1wbGVzCistIEZpeCBjb21waWxlciB3YXJuaW5ncyBpbiBmdXp6aW5nIGNvZGUKKy0gUmVtb3ZlIHVudXNlZCBjb2RlIGluIG5hbm9odHRwLmMKKy0gUmVtb3ZlIG9yIGFubm90YXRlIGNoYXIgY2FzdHMKKy0gRG9uJ3QgdXNlIHNpemVvZih4bWxDaGFyKSBvciBzaXplb2YoY2hhcikKKy0gUmVtb3ZlIGV4cGxpY2l0IGludGVnZXIgY2FzdHMKKworIyMjIERlcHJlY2F0aW9ucworCistIHBhcnNlcjogRGVwcmVjYXRlIG1vcmUgaW50ZXJuYWwgZnVuY3Rpb25zCistIHBhcnNlcjogRGVwcmVjYXRlIHNvbWUgcGFyc2VyIGlucHV0IGZ1bmN0aW9ucworLSBwYXJzZXI6IERlcHJlY2F0ZSB4bWxTdHJpbmcqRGVjb2RlRW50aXRpZXMKKy0gdGhyZWFkczogRGVwcmVjYXRlIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zCistIGJ1ZjogRGVwcmVjYXRlIHN0YXRpYy9pbW11dGFibGUgYnVmZmVycworLSBEZXByZWNhdGUgaW50ZXJuYWwgcGFyc2VyIGZ1bmN0aW9ucworLSBEZXByZWNhdGUgb2xkIEhUTUwgU0FYIEFQSQorLSBHZW5lcmF0ZSBkZXByZWNhdGlvbiB3YXJuaW5ncyBmb3Igb2xkIFNBWCBBUEkKKy0gTWFyayBtb3JlIGZ1bmN0aW9ucyBzZXR0aW5nIGdsb2JhbHMgYXMgZGVwcmVjYXRlZAorLSBNYXJrIG1vcmUgcGFyc2VyIGZ1bmN0aW9ucyBhcyBkZXByZWNhdGVkCistIE1hcmsgbW9zdCBTQVgxIGZ1bmN0aW9ucyBhcyBkZXByZWNhdGVkCistIERlcHJlY2F0ZSBzb21lIGdsb2JhbCB2YXJpYWJsZXMKKworIyMjIFBvcnRhYmlsaXR5CisKKy0gYXV0b2NvbmY6IFdhcm4gYWJvdXQgb3V0ZGF0ZWQgQyBjb21waWxlcnMKKy0gd2luMzI6IFJlbW92ZSBicm9rZW4gbGlieG1sMi5kZWYuc3JjCistIFJlbW92ZSBzeW1ib2xzIGZyb20gdmVyc2lvbiBzY3JpcHQKKy0gY2F0YWxvZy5jOiBTaWxlbmNlIGEgY2FzdCB3YXJuaW5nIG9uIFZTIDIwMjIgKEx1a8OhxaEgVHlyeWNodHIpCistIGxpYnhtbC5oOiBSZW1vdmUgYW5jaWVudCBMeW54T1Mgc2V0dXAKKy0gVXNlIHB5dGhvbjMgbm90IHB5dGhvbiAoUm9zcyBCdXJ0b24pCistIHhzdGMvZml4dXAtdGVzdHMucHk6IHBvcnQgdG8gUHl0aG9uIDMgKFJvc3MgQnVydG9uKQorLSB4c3RjL2ZpeHVwLXRlc3RzLnB5OiB1bmlmeSB3aGl0ZXNwYWNlIChSb3NzIEJ1cnRvbikKKy0gUmVtb3ZlIGhhY2t5IGhldXJpc3RpYyBmcm9tIGIyZGM1Njc1IChBbGV4IFJpY2hhcmRzb24pCistIEF2b2lkIGNyZWF0aW5nIGFuIG91dC1vZi1ib3VuZHMgcG9pbnRlciBieSByZXdyaXRpbmcgYSBjaGVjaworICAoQWxleCBSaWNoYXJkc29uKQorLSBIaWRlIGludGVybmFsIGZ1bmN0aW9ucworLSBDb3JyZWN0bHkgcmVsb2NhdGUgaW50ZXJuYWwgcG9pbnRlcnMgYWZ0ZXIgcmVhbGxvYygpIChBbGV4IFJpY2hhcmRzb24pCistIFZpc3VhbCBTdHVkaW8gYnVpbGRzOiBBbGxvdyBzaWxlbmNpbmcgZGVwcmVjYXRpb24gd2FybmluZ3MgKENodW4td2VpIEZhbikKKy0gVmlzdWFsIFN0dWRpbzogRGVmaW5lIFhNTF9ERVBSRUNBVEVEIChDaHVuLXdlaSBGYW4pCistIHhtbGxpbnQ6IEluY2x1ZGUgPGlvLmg+IG9uIFdpbmRvd3MKKy0gd2FybmluZ3M6IFdvcmsgYXJvdW5kIE1TVkMgYnVnCistIHNvdXJjZXM6IFNpbGVuY2UgQzQwMTMgd2FybmluZ3Mgb24gVmlzdWFsIFN0dWRpbyAoQ2h1bi13ZWkgRmFuKQorLSBweXRob24vc2V0dXAucHkuaW46IEltcHJvdmUgV2luZG93cyBpbXBvcnQgcGF0Y2hpbmcgKENodW4td2VpIEZhbikKKy0gcHl0aG9uOiBDcmVhdGUgLnB5ZCBvbiBXaW5kb3dzCistIEZpeCBQeXRob24gYnVpbGQgb24gV2luZG93cworLSBGaXggV2luZG93cyBjb21waWxlciB3YXJuaW5ncyBpbiBweXRob24vdHlwZXMuYworLSBGaXggbGlieG1sX1B5RmlsZUdldAorLSBSZW1vdmUgQmVPUyBzdXBwb3J0CistIEZpeCBsaWJ4bWxfUHlGaWxlR2V0IHdpdGggc3Rkb3V0IG9uIG1hY09TCistIE1pZ3JhdGUgZnJvbSBQeUV2YWxfIHRvIFB5T2JqZWN0XworLSBQb3J0IGJ1aWxkX2dsb2IucHkgdG8gUHl0aG9uIDMKKy0gUG9ydCBnZW5DaFJhbmdlcy5weSB0byBQeXRob24gMworLSB4bWxleHBvcnRzLmg6IFJlbW92ZSBMSUJYTUxfRkFTVENBTEwgb3B0aW1pemF0aW9uCistIFJlbW92ZSBYTUxDQUxMIGFuZCBYTUxDREVDTCBtYWNyb3MgZnJvbSBwdWJsaWMgaGVhZGVycworLSBSZW1vdmUgWE1MREVDTCBtYWNybyBmcm9tIC5jIGZpbGVzCisKKyMjIyBCdWlsZCBzeXN0ZW1zCisKKy0gY21ha2U6IExpbmsgYWdhaW5zdCBgZGxgIGFuZCBgZGxkYCBvbmx5IHdoZW4gYExJQlhNTDJfV0lUSF9NT0RVTEVTYCBpcworICBlbmFibGVkIChBbGV4YW5kZXIgS3V0ZWxldikKKy0gYXV0b3Rvb2xzOiBGaXggbWFrZSBkaXN0Y2hlY2sKKy0gUmVtb3ZlIFJQTSBidWlsZCwgTWFrZWZpbGUudGVzdHMsIFJFQURNRS50ZXN0cworLSBsaWJ4bWwubTQ6IGRlcHJlY2F0ZSBBTV9QQVRIX1hNTDIsIHdyYXAgUEtHX0NIRUNLX01PRFVMRVMgaW5zdGVhZAorICAoUm9zcyBCdXJ0b24pCistIGxpYnhtbC5tNDogZml4IC1Xc3RyaWN0LXByb3RvdHlwZXMgKFNhbSBKYW1lcykKKy0gY21ha2U6IEJ1aWxkIHN0YXRpYyBsaWJyYXJ5IHdpdGggLURMSUJYTUxfU1RBVElDCistIGF1dG90b29sczogRG9uJ3QgdXNlIHZlcnNpb24gc2NyaXB0IG9uIFdpbmRvd3MKKy0gYXV0b3Rvb2xzOiBGaXggd2luc29jayBkZXRlY3Rpb24KKy0gYXV0b3Rvb2xzOiBPbmx5IGFkZCBuZXR3b3JrIGxpYnJhcmllcyBpZiBIVFRQL0ZUUCBlbmFibGVkCistIGF1dG90b29sczogRGlzYWJsZSBwYXJhbGxlbCBQeXRob24gYnVpbGQKKy0gcHl0aG9uOiBEb24ndCBvdXRwdXQgbWlzc2luZyBnZW5lcmF0b3JzIGR1cmluZyBidWlsZAorLSBidWlsZDogUmVtb3ZlIGNoZWNrIGZvciBicm9rZW4gc3NfZmFtaWx5CistIGh0dHA6IFNpbXBsaWZ5IElQdjYgY2hlY2tzCistIGF1dG90b29sczogRml4IG5ldHdvcmsgY2hlY2tzIG9uIFdpbmRvd3MKKy0gRml4IGRldGVjdGlvbiBvZiBHTlUgbGliaWNvbnYKKy0gY21ha2U6IEZpeCBQeXRob24gaW5zdGFsbGF0aW9uCistIGNtYWtlOiBEb24ndCBjaGVjayBmb3IgUHl0aG9uIDIKKy0gY29uZmlndXJlLmFjOiBBbHNvIGNoZWNrIGZvciBNU1lTIGhvc3QKKy0gSW1wcm92ZSBuZXR3b3JrIGxpYnJhcnkgZGV0ZWN0aW9uCistIERldGVjdCB3czJfMzIgd2l0aCBBQ19TRUFSQ0hfTElCUworLSBSZXdvcmsgbmV0d29yayBjb25maWd1cmUgY2hlY2tzCistIFJlbW92ZSBhcmcgY2FzdCBjb25maWd1cmUgY2hlY2tzCistIEZpeCBkbG9wZW4gY2hlY2sKKy0gUmVtb3ZlIEhBVkVfV0lOMzJfVEhSRUFEUyBjb25maWd1cmF0aW9uIGZsYWcKKy0gUmV3b3JrIGRsb3BlbiBhbmQgcHRocmVhZCBkZXRlY3Rpb24KKy0gRml4IHRlc3QgaW4gY29uZmlndXJlLmFjCistIGNtYWtlOiBFbmFibGUgR0NDIGNvbXBpbGVyIHdhcm5pbmdzCistIEFsd2F5cyBsaW5rIHdpdGggLW5vLXVuZGVmaW5lZAorLSBVc2UgQU1fQ0ZMQUdTIGFuZCBBTV9MREZMQUdTIGNvbnNpc3RlbnRseQorLSBSZW1vdmUgLVdyZWR1bmRhbnQtZGVjbHMKKy0gQ2FsbCBBQ19DSEVDS18qIHdpdGggbXVsdGlwbGUgYXJndW1lbnRzCistIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIGNoZWNrcyBmb3IgdW51c2VkIHByb2dyYW1zCistIFJld29yayBsaWJyYXJ5IGRldGVjdGlvbiBpbiBjb25maWd1cmUuYWMKKy0gUmVhcnJhbmdlIGNvbmZpZ3VyZS5hYworLSBDb25zb2xpZGF0ZSB6bGliIGFuZCBsem1hIGRldGVjdGlvbgorLSBSZW1vdmUgInJ1bnRpbWUgZGVidWdnaW5nIgorLSBDb25zb2xpZGF0ZSBzaW1wbGUgQVBJIG1vZHVsZXMgaW4gY29uZmlndXJlLmFjCistIEZpeCBkZXBlbmRlbmN5IHJlc29sdXRpb24gaW4gY29uZmlndXJlLmFjCistIEZpeCAtLXdpdGgtdmFsaWQgLS13aXRob3V0LXJlZ2V4cHMgYnVpbGQKKy0gRml4IC0td2l0aC1zY2hlbWFzIC0td2l0aG91dC14cGF0aCBidWlsZAorLSBEb24ndCBidWlsZCB1bm5lZWRlZCAuYyBzb3VyY2UgZmlsZXMKKy0gTW92ZSB4bWxJc1hIVE1MIHRvIHRyZWUuYworLSBDbGVhbnVwIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyBpbiBNYWtlZmlsZS5hbQorLSBBbHNvIGNsZWFuICoucHljIGZpbGVzIGZvciBQeXRob24gMgorLSBEb24ndCBkaXN0cmlidXRlIGxpYnhtbDIuc3BlYworCisjIyMgVGVzdHMKKworLSB0ZXN0Y2hhcjogQWRkIHRlc3QgZm9yIG1lbW9yeSBwdWxsIHBhcnNlciB3aXRoIGVuY29kaW5nCistIGZ1eno6IEFsc28gdGVzdCBpbml0IGZ1bmN0aW9uIG9mIFVSSSBmdXp6ZXIKKy0gZnV6ejogU2VwYXJhdGUgZnV6emVyIGZvciBEVEQgdmFsaWRhdGlvbgorLSBnaXRsYWItY2k6IEVuYWJsZSBhbGwgImludGVnZXIiIHNhbml0aXplcnMKKy0gZnV6ejogSW5qZWN0IHJhbmRvbSBtYWxsb2MgZmFpbHVyZXMKKy0gZnV6ejogU3VwcG9ydCB2YXJpYWJsZSBpbnRlZ2VyIHNpemVzIGluIGZ1enogZGF0YQorLSBmdXp6OiBGaXggZHVwbGljYXRlIGRldGVjdGlvbiBpbiBmdXp6RW50aXR5UmVjb3JkZXIKKy0gZnV6ejogU2V0IGZpbGVuYW1lIGluIHhtbEZ1enpFbnRpdHlMb2FkZXIKKy0gZnV6ejogQWxsb3cgeG1sRnV6elJlYWRTdHJpbmcoTlVMTCkKKy0gZnV6ejogRml4IE1ha2VmaWxlIGRlcGVuZGVuY2llcworLSBmdXp6OiBBZGQgdGVzdC9yZWN1cnNlIHRvIHNlZWQgY29ycHVzCistIGZ1eno6IEFkZCBzZXBhcmF0ZSBYSW5jbHVkZSBmdXp6ZXIKKy0gcnVuc3VpdGU6IFNvbWUgZXJyb3JzIGFyZSBleHBlY3RlZAorLSB0ZXN0cmVjdXJzZTogVGVzdCBlbnRpdHkgZXhwYW5zaW9uIHN0YXRzCistIHRlc3RhcGkuYzogSW5pdGlhbGl6ZSBjYXRhbG9nIGVhcmx5CistIGdlbnRlc3QucHk6IEZpeCBtZW1vcnkgbGVhayBpbiBBUEkgdGVzdHMKKy0gdGVzdHM6IEVuYWJsZSAicnVuc3VpdGUiIHRlc3QKKy0gcHl0aG9uL3Rlc3RzL3JlYWRlcjI6IHVzZSBhYnNvbHV0ZSBwYXRocyBldmVyeXdoZXJlIChSb3NzIEJ1cnRvbikKKy0gcHl0aG9uL3Rlc3RzL3JlYWRlcjI6IGFsd2F5cyBleGl0KDEpIGlmIGEgdGVzdCBmYWlscyAoUm9zcyBCdXJ0b24pCistIHRlc3RNb2R1bGU6IGV4aXQgaWYgdGhlIG1vZHVsZSBjYW4ndCBiZSBvcGVuZWQgKFJvc3MgQnVydG9uKQorLSBDSTogZGlzYWJsZSBtb2R1bGVzIGluIGdjYzpzdGF0aWMgYnVpbGQgKFJvc3MgQnVydG9uKQorLSBDSTogZml4IENJIG9uIE1pbkdXIGJ1aWxkcyAoUm9zcyBCdXJ0b24pCistIHB5dGhvbjogRml4IG1lbW9yeSBsZWFrIGNoZWNrcworLSB0ZXN0czogQ2hlY2sgdGhhdCB4bWxJbml0UGFyc2VyIGRvZXNuJ3QgYWxsb2NhdGUgbWVtb3J5CistIHRlc3RzOiBGaXggdXNlLWFmdGVyLWZyZWUgaW4gUHl0aG9uIHRlc3RzCistIHRlc3RzOiBSZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGVzCistIGdpdGxhYi1jaTogTWFrZSBUZXN0LU1zdmMgZXhpdCBpZiBjdGVzdCBmYWlscworLSBnaXRsYWItY2k6IFRyZWF0IGNvbXBpbGVyIHdhcm5pbmdzIGFzIGVycm9ycyBvbiBNU1ZDCistIHRlc3Q6IEFkZCB0ZXN0IGZvciBwdXNoIHBhcnNlciBib3VuZGFyaWVzCistIGdpdGxhYi1jaTogVXBncmFkZSBpbWFnZSB0byBVYnVudHUgMjIuMTAsIHJlZW5hYmxlIE1TYW4KKy0gZ2l0bGFiLWNpOiBSZWVuYWJsZSBMZWFrU2FuaXRpemVyCistIGdpdGxhYi1jaTogRml4IGxsdm0tc3ltYm9saXplcgorLSB4aW5jbHVkZTogRG9uJ3QgY3JlYXRlIHJlc3VsdCBkb2MgZm9yIHRlc3Qgd2l0aCBlcnJvcnMKKy0geGluY2x1ZGU6IEFsc28gdGVzdCBlcnJvciBtZXNzYWdlcworLSBnaXRsYWItY2k6IEFsbG93IGNhc3QtYWxpZ24gd2FybmluZ3MgZnJvbSBjbGFuZworLSBnaXRsYWItY2k6IEZpeCB0YXIgaW52b2NhdGlvbgorLSBnaXRsYWItY2k6IE1vdmUgTVNWQyB0ZXN0IHRvIHNlcGFyYXRlIHNjcmlwdAorLSBnaXRsYWItY2k6IEZpeCBTVUZGSVgsIHJlbW92ZSBNSU5HV19QQVRICistIGdpdGxhYi1jaTogQ29uc29saWRhdGUgQ01ha2UgdGVzdCBzY3JpcHRzCistIGdpdGxhYi1jaTogT25seSBpbnN0YWxsIE1pbkdXIGF1dG90b29scyBpZiBuZWVkZWQKKy0gZ2l0bGFiLWNpOiBPbmx5IGluc3RhbGwgY21ha2UgTWluR1cgcGFja2FnZSBpZiBuZWVkZWQKKy0gZ2l0bGFiLWNpOiBJbnN0YWxsIDctWmlwIHVzaW5nIHRoZSAubXNpCistIFVzZSAkTVNZU1RFTSBhbmQgJ2Jhc2ggLWxjJyBpbiBNaW5HVyBDSQorLSBBZGQgQ0kgam9iIGZvciBNaW5HVy9BdXRvdG9vbHMKKy0gQ29uc29saWRhdGUgQ0kgc2NyaXB0cworLSBBbGxvdyBlbXB0eSBNSU5HV19QQUNLQUdFX1BSRUZJWAorLSBNb3ZlIERvY2tlcmZpbGUgdG8gLmdpdGxhYi1jaSBkaXJlY3RvcnkKKy0gdGVzdGFwaTogRGlzYWJsZSBvbiBXaW5kb3dzIGZvciBub3cKKy0gRGlzYWJsZSBmdXp6ZXIgdGVzdHMgaWYgZ2xvYi5oIHdhc24ndCBmb3VuZAorLSBNb3ZlIGF1dG9tYXRhIHRlc3QgdG8gcnVudGVzdC5jCistIEZpeCB0ZXN0YXBpIHdoZW4gYnVpbGRpbmcgLS13aXRob3V0LXNheDEKKworIyBEb2N1bWVudGF0aW9uCisKKy0gZG9jOiBSZW1vdmUgYW5jaWVudCBmaWxlcworLSBSZW1vdmUgYW5jaWVudCBUT0RPcworLSBodG1sOiBGaXggaHRtbEluaXRBdXRvQ2xvc2UgZG9jdW1lbnRhdGlvbgorLSBkb2M6IE1lbnRpb24gbmV3IGxvY2F0aW9uIG9mIFhNTCBjYXRhbG9nIGFzIGJyZWFraW5nIGNoYW5nZQorLSBkb2M6IE1lbnRpb24gcG90ZW50aWFsbHkgYnJlYWtpbmcgY2hhbmdlcyBpbiBORVdTCistIGRvYzogUmVtb3ZlIHhtbERsbE1haW4gZnJvbSBkb2N1bWVudGF0aW9uIGFuZCB2ZXJzaW9uIHNjcmlwdAorLSBkb2M6IE1lbnRpb24gJHtzeXNjb25mZGlyfSBpbiBtYW4gcGFnZXMKKy0gZG9jOiBEb2N1bWVudCB4bWxjYXRhbG9nIC0tY29udmVydAorLSBkb2M6IERvY3VtZW50IHhtbGxpbnQgLS1ub2RpY3QgYW5kIC0tcGVkYW50aWMKKy0gZG9jOiBGaXggaW5kZW50YXRpb24gaW4gc291cmNlIFhNTCBmaWxlcworLSB4bWxsaW50OiBEb2N1bWVudCAtLXF1aWV0IG9wdGlvbgorLSBJbXByb3ZlIGNyb3NzLXJlZmVyZW5jZXMgaW4gQVBJIGRvY3MKKy0gSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIGdsb2JhbHMKKy0gRml4IGRvY3VtZW50YXRpb24gcGFyc2VyCistIFN1cHBvcnQgY29tbWVudHMgZm9yIGdsb2JhbCB2YXJpYWJsZXMgaW4gZG9jdW1lbnRhdGlvbgorLSBGaXggdXBkYXRlIGNhbGwgaW4gYXBpYnVpbGQucHkKKy0gRG9uJ3QgaW5kZXggYW55dGhpbmcgaW4gRE9DX0RJU0FCTEUgc2VjdGlvbnMKKy0gRml4IHdhcm5pbmdzIGZyb20gYXBpYnVpbGQucHkKKy0gU3RhcnQgd2l0aCBkb2N1bWVudGF0aW9uIGZvciBtYWludGFpbmVycworCisKK3YyLjEwLjQ6IEFwciAxMSAyMDIzCisKKyMjIyBTZWN1cml0eQorCistIFtDVkUtMjAyMy0yOTQ2OV0gSGFzaGluZyBvZiBlbXB0eSBkaWN0IHN0cmluZ3MgaXNuJ3QgZGV0ZXJtaW5pc3RpYworLSBbQ1ZFLTIwMjMtMjg0ODRdIEZpeCBudWxsIGRlcmVmIGluIHhtbFNjaGVtYUZpeHVwQ29tcGxleFR5cGUKKy0gc2NoZW1hczogRml4IG51bGwtcG9pbnRlci1kZXJlZiBpbiB4bWxTY2hlbWFDaGVja0NPU1NURGVyaXZlZE9LCisKKyMjIyBSZWdyZXNzaW9ucworCistIFNBWDI6IElnbm9yZSBuYW1lc3BhY2VzIGluIEhUTUwgZG9jdW1lbnRzCistIGlvOiBGaXggImJ1ZmZlciBmdWxsIiBlcnJvciB3aXRoIGNlcnRhaW4gYnVmZmVyIHNpemVzCisKKwogdjIuMTAuMzogT2N0IDE0IDIwMjIKIAogIyMjIFNlY3VyaXR5CkBAIC02MCw2ICs3NTMsNDcgQEAKIAogdjIuMTAuMDogQXVnIDE3IDIwMjIKIAorIyMjIEJyZWFraW5nIGNoYW5nZXMKKworVGhlIERvY2Jvb2sgcGFyc2VyIG1vZHVsZSBhbmQgYWxsIHJlbGF0ZWQgc3ltYm9scyBoYWJlIGJlZW4gcmVtb3ZlZCBjb21wbGV0ZWx5LgorVGhpcyB3YXMgZXhwZXJpbWVudGFsIGNvZGUgd2hpY2ggbmV2ZXIgd29ya2VkIGFuZCBnZW5lcmF0ZWQgYSBkZXByZWNhdGlvbgord2FybmluZyBmb3IgMTUrIHllYXJzLiBUaGUgbGlicmFyeSdzIHNvbmFtZSB3YXNuJ3QgY2hhbmdlZCBpbiBvcmRlciB0byBhbGxvdworc2VhbWxlc3MgdXBncmFkZXMgdG8gbGF0ZXIgdmVyc2lvbnMuIElmIHRoaXMgY29uY2VybnMgeW91LCBjb25zaWRlciBidW1waW5nCitzb25hbWUgeW91cnNlbGYuCisKK1NvbWUgb3RoZXIgbW9kdWxlcyBhcmUgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHdpbGwgZXZlbnR1YWxseSBiZSByZW1vdmVkCitjb21wbGV0ZWx5OgorCistIFN1cHBvcnQgZm9yIFhQb2ludGVyIGxvY2F0aW9ucyAocmFuZ2VzIGFuZCBwb2ludHMpOiBUaGlzIHdhcyBiYXNlZCBvbgorICBhIFczQyBzcGVjaWZpY2F0aW9uIHdoaWNoIG5ldmVyIGdvdCBiZXlvbmQgV29ya2luZyBEcmFmdCBzdGF0dXMuIFRvIG15CisgIGtub3dsZWRnZSwgdGhlcmUncyBubyBzb2Z0d2FyZSBzdXBwb3J0aW5nIHRoaXMgc3BlYyB3aGljaCBpcyBzdGlsbAorICBtYWludGFpbmVkLiBZb3Ugbm93IGhhdmUgdG8gZW5hYmxlIHRoaXMgY29kZSBieSBwYXNzaW5nIHRoZQorICBgLS13aXRoLXhwdHItbG9jc2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEJlIHdhcm5lZCB0aGF0IHRoaXMgcGFydCBvZgorICB0aGUgY29kZSBiYXNlIGlzIGJ1Z2d5IGFuZCBoYWQgbWFueSBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIHBhc3QuCisKKy0gU3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEZUUCBjbGllbnQgKGAtLXdpdGgtZnRwYCkuCisKKy0gU3VwcG9ydCBmb3IgImxlZ2FjeSIgZnVuY3Rpb25zIChgLS13aXRoLWxlZ2FjeWApLgorCitJZiB5b3UncmUgY29uY2VybmVkIGFib3V0IEFCSSBzdGFiaWxpdHkgYW5kIGhhdmVuJ3QgZGlzYWJsZWQgdGhlc2UgbW9kdWxlcworYWxyZWFkeSwgYWRkIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGJ1bXAgc29uYW1lIHlvdXJzZWxmOgorCisgICAgLS13aXRoLWZ0cAorICAgIC0td2l0aC1sZWdhY3kKKyAgICAtLXdpdGgteHB0ci1sb2NzCisKK1NldmVyYWwgZnVuY3Rpb25zIG9mIHRoZSBwdWJsaWMgQVBJIHdlcmUgZGVwcmVjYXRlZC4gTW9zdCBvZiB0aGVtIHNob3VsZCBiZQorY29tcGxldGVseSB1bnVzZWQgYW5kIHdpbGwgZ2VuZXJhdGUgYSBkZXByZWNhdGlvbiB3YXJuaW5nIG5vdy4KKworVGhlIGF1dG9jb25mIGJ1aWxkIG5vdyB1c2VzIHRoZSBzeXNjb25mZGlyIHZhcmlhYmxlIGZvciB0aGUgbG9jYXRpb24gb2YKK3RoZSBkZWZhdWx0IGNhdGFsb2cgZmlsZS4gVGhlIHBhdGggY2hhbmdlZCBmcm9tIGhhcmRjb2RlZCAvZXRjL3htbC9jYXRhbG9nCit0byAke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLiBUaGUgc3lzY29uZmRpciB2YXJpYWJsZSBkZWZhdWx0cyB0bworJHtwcmVmaXh9L2V0YywgcHJlZml4IGRlZmF1bHRzIHRvIC91c3IvbG9jYWwsIHNvIHdpdGhvdXQgb3RoZXIgb3B0aW9ucwordGhlIHBhdGggYmVjb21lcyAvdXNyL2xvY2FsL2V0Yy94bWwvY2F0YWxvZy4gSWYgeW91IHdhbnQgdGhlIG9sZCBiZWhhdmlvciwKK2NvbmZpZ3VyZSB3aXRoCisKKyAgICAtLXN5c2NvbmZkaXI9L2V0YworCiAjIyMgU2VjdXJpdHkKIAogLSBbQ1ZFLTIwMjItMjMwOV0gUmVzZXQgbnNOciBpbiB4bWxDdHh0UmVzZXQKZGlmZiAtLWdpdCBhL1JFQURNRS5mdWNoc2lhIGIvUkVBRE1FLmZ1Y2hzaWEKaW5kZXggMDZmYzA1OC4uZWQ3ODFkMiAxMDA2NDQKLS0tIGEvUkVBRE1FLmZ1Y2hzaWEKKysrIGIvUkVBRE1FLmZ1Y2hzaWEKQEAgLTMsMTAgKzMsMTAgQEAKIExpY2Vuc2U6IE1JVAogTGljZW5zZSBGaWxlOiBDb3B5cmlnaHQKIFVwc3RyZWFtIEdpdDogaHR0cHM6Ly9naXRodWIuY29tL0dOT01FL2xpYnhtbDIKLVZlcnNpb246IDIuMTAuMTMKK1ZlcnNpb246IDIuMTIuNQogRGVzY3JpcHRpb246CiAKLVRoaXMgaXMgdGhlIEZ1Y2hzaWEgYnVpbGQgb2YgbGlieG1sMiBiYXNlZCBvZmYgb2YgdXBzdHJlYW0ncyB2Mi4xMC4xMyByZWxlYXNlLgorVGhpcyBpcyB0aGUgRnVjaHNpYSBidWlsZCBvZiBsaWJ4bWwyIGJhc2VkIG9mZiBvZiB1cHN0cmVhbSdzIHYyLjEyLjUgcmVsZWFzZS4KIAogTG9jYWwgTW9kaWZpY2F0aW9uczoKIC0gVGhlICdjb25maWcuaCcgYW5kICdpbmNsdWRlL2xpYnhtbDIveG1sdmVyc2lvbi5oJyBmaWxlcyBhcmUgZ2VuZXJhdGVkIHZpYSB0aGUKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCBhZDQyM2U2Li5lOWE1Yzc4IDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC0zLDE1ICszLDE3IEBACiBsaWJ4bWwyIGlzIGFuIFhNTCB0b29sa2l0IGltcGxlbWVudGVkIGluIEMsIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGZvcgogdGhlIEdOT01FIFByb2plY3QuCiAKLUZ1bGwgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQKLTxodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMi8tL3dpa2lzPi4KK09mZmljaWFsIHJlbGVhc2VzIGNhbiBiZSBkb3dubG9hZGVkIGZyb20KKzxodHRwczovL2Rvd25sb2FkLmdub21lLm9yZy9zb3VyY2VzL2xpYnhtbDIvPgorCitUaGUgZ2l0IHJlcG9zaXRvcnkgaXMgaG9zdGVkIG9uIEdOT01FJ3MgR2l0TGFiIHNlcnZlcjoKKzxodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMj4KIAogQnVncyBzaG91bGQgYmUgcmVwb3J0ZWQgYXQKLTxodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMi8tL2lzc3Vlcz4uCis8aHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIvLS9pc3N1ZXM+CiAKLUEgbWFpbGluZyBsaXN0IHhtbEBnbm9tZS5vcmcgaXMgYXZhaWxhYmxlLiBZb3UgY2FuIHN1YnNjcmliZSBhdAotPGh0dHBzOi8vbWFpbC5nbm9tZS5vcmcvbWFpbG1hbi9saXN0aW5mby94bWw+LiBUaGUgbGlzdCBhcmNoaXZlIGlzIGF0Ci08aHR0cHM6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvPi4KK0RvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0Cis8aHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIvLS93aWtpcz4KIAogIyMgTGljZW5zZQogCkBAIC0yNywyMyArMjksNTggQEAKIElmIHlvdSBidWlsZCBmcm9tIGEgR2l0IHRyZWUsIHlvdSBoYXZlIHRvIGluc3RhbGwgQXV0b3Rvb2xzIGFuZCBzdGFydAogYnkgZ2VuZXJhdGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoOgogCi0gICAgLi9hdXRvZ2VuLnNoCisgICAgLi9hdXRvZ2VuLnNoIFtjb25maWd1cmF0aW9uIG9wdGlvbnNdCiAKIElmIHlvdSBidWlsZCBmcm9tIGEgc291cmNlIHRhcmJhbGwsIGV4dHJhY3QgdGhlIGFyY2hpdmUgd2l0aDoKIAogICAgIHRhciB4ZiBsaWJ4bWwyLXh4eC50YXIuZ3oKICAgICBjZCBsaWJ4bWwyLXh4eAogCi1UbyBzZWUgYSBsaXN0IG9mIGJ1aWxkIG9wdGlvbnM6CitUaGVuIHlvdSBjYW4gY29uZmlndXJlIGFuZCBidWlsZCB0aGUgbGlicmFyeToKIAotICAgIC4vY29uZmlndXJlIC0taGVscAotCi1BbHNvIHNlZSB0aGUgSU5TVEFMTCBmaWxlIGZvciBhZGRpdGlvbmFsIGluc3RydWN0aW9ucy4gVGhlbiB5b3UgY2FuCi1jb25maWd1cmUgYW5kIGJ1aWxkIHRoZSBsaWJyYXJ5OgotCi0gICAgLi9jb25maWd1cmUgW3Bvc3NpYmxlIG9wdGlvbnNdCisgICAgLi9jb25maWd1cmUgW2NvbmZpZ3VyYXRpb24gb3B0aW9uc10KICAgICBtYWtlCiAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBkaXNhYmxlIG9yIGVuYWJsZSBjb2RlIG1vZHVsZXMgYW5kIHJlbGV2YW50IHN5bWJvbHM6CisKKyAgICAtLXdpdGgtYzE0biAgICAgICAgICAgICBDYW5vbmljYWwgWE1MIDEuMCBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtY2F0YWxvZyAgICAgICAgICBYTUwgQ2F0YWxvZ3Mgc3VwcG9ydCAob24pCisgICAgLS13aXRoLWRlYnVnICAgICAgICAgICAgZGVidWdnaW5nIG1vZHVsZSBhbmQgc2hlbGwgKG9uKQorICAgIC0td2l0aC1oaXN0b3J5ICAgICAgICAgIGhpc3Rvcnkgc3VwcG9ydCBmb3Igc2hlbGwgKG9mZikKKyAgICAtLXdpdGgtcmVhZGxpbmVbPURJUl0gICB1c2UgcmVhZGxpbmUgaW4gRElSIChmb3Igc2hlbGwgaGlzdG9yeSkKKyAgICAtLXdpdGgtaHRtbCAgICAgICAgICAgICBIVE1MIHBhcnNlciAob24pCisgICAgLS13aXRoLWh0dHAgICAgICAgICAgICAgSFRUUCBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtaWNvbnZbPURJUl0gICAgICBpY29udiBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtaWN1ICAgICAgICAgICAgICBJQ1Ugc3VwcG9ydCAob2ZmKQorICAgIC0td2l0aC1pc284ODU5eCAgICAgICAgIElTTy04ODU5LVggc3VwcG9ydCBpZiBubyBpY29udiAob24pCisgICAgLS13aXRoLWx6bWFbPURJUl0gICAgICAgdXNlIGxpYmx6bWEgaW4gRElSIChvbikKKyAgICAtLXdpdGgtbWVtLWRlYnVnICAgICAgICBtZW1vcnkgZGVidWdnaW5nIG1vZHVsZSAob2ZmKQorICAgIC0td2l0aC1tb2R1bGVzICAgICAgICAgIGR5bmFtaWMgbW9kdWxlcyBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtb3V0cHV0ICAgICAgICAgICBzZXJpYWxpemF0aW9uIHN1cHBvcnQgKG9uKQorICAgIC0td2l0aC1wYXR0ZXJuICAgICAgICAgIHhtbFBhdHRlcm4gc2VsZWN0aW9uIGludGVyZmFjZSAob24pCisgICAgLS13aXRoLXB1c2ggICAgICAgICAgICAgcHVzaCBwYXJzZXIgaW50ZXJmYWNlcyAob24pCisgICAgLS13aXRoLXB5dGhvbiAgICAgICAgICAgUHl0aG9uIGJpbmRpbmdzIChvbikKKyAgICAtLXdpdGgtcmVhZGVyICAgICAgICAgICB4bWxSZWFkZXIgcGFyc2luZyBpbnRlcmZhY2UgKG9uKQorICAgIC0td2l0aC1yZWdleHBzICAgICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydCAob24pCisgICAgLS13aXRoLXJ1bi1kZWJ1ZyAgICAgICAgcnVudGltZSBkZWJ1Z2dpbmcgbW9kdWxlIChvZmYpCisgICAgLS13aXRoLXNheDEgICAgICAgICAgICAgb2xkZXIgU0FYMSBpbnRlcmZhY2UgKG9uKQorICAgIC0td2l0aC1zY2hlbWFzICAgICAgICAgIFhNTCBTY2hlbWFzIDEuMCBhbmQgUkVMQVggTkcgc3VwcG9ydCAob24pCisgICAgLS13aXRoLXNjaGVtYXRyb24gICAgICAgU2NoZW1hdHJvbiBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtdGhyZWFkcyAgICAgICAgICBtdWx0aXRocmVhZGluZyBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtdGhyZWFkLWFsbG9jICAgICBwZXItdGhyZWFkIG1hbGxvYyBob29rcyAob2ZmKQorICAgIC0td2l0aC10cmVlICAgICAgICAgICAgIERPTSBsaWtlIHRyZWUgbWFuaXB1bGF0aW9uIEFQSXMgKG9uKQorICAgIC0td2l0aC12YWxpZCAgICAgICAgICAgIERURCB2YWxpZGF0aW9uIHN1cHBvcnQgKG9uKQorICAgIC0td2l0aC13cml0ZXIgICAgICAgICAgIHhtbFdyaXRlciBzZXJpYWxpemF0aW9uIGludGVyZmFjZSAob24pCisgICAgLS13aXRoLXhpbmNsdWRlICAgICAgICAgWEluY2x1ZGUgMS4wIHN1cHBvcnQgKG9uKQorICAgIC0td2l0aC14cGF0aCAgICAgICAgICAgIFhQYXRoIDEuMCBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgteHB0ciAgICAgICAgICAgICBYUG9pbnRlciBzdXBwb3J0IChvbikKKyAgICAtLXdpdGgtemxpYls9RElSXSAgICAgICB1c2UgbGlieiBpbiBESVIgKG9uKQorCitPdGhlciBvcHRpb25zOgorCisgICAgLS13aXRoLW1pbmltdW0gICAgICAgICAgYnVpbGQgYSBtaW5pbWFsbHkgc2l6ZWQgbGlicmFyeSAob2ZmKQorICAgIC0td2l0aC1sZWdhY3kgICAgICAgICAgIG1heGltdW0gQUJJIGNvbXBhdGliaWxpdHkgKG9mZikKKwogTm90ZSB0aGF0IGJ5IGRlZmF1bHQsIG5vIG9wdGltaXphdGlvbiBvcHRpb25zIGFyZSB1c2VkLiBZb3UgaGF2ZSB0bwogZW5hYmxlIHRoZW0gbWFudWFsbHksIGZvciBleGFtcGxlIHdpdGg6CiAKZGlmZiAtLWdpdCBhL1JFQURNRS50ZXN0cyBiL1JFQURNRS50ZXN0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ4NmYyYS4uMDAwMDAwMAotLS0gYS9SRUFETUUudGVzdHMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0gICAgICAgICAgICAgICAgICAgICAgIFJFQURNRS50ZXN0cwotCi0gICBJbnN0cnVjdGlvbnMgZm9yIHN0YW5kYWxvbmUgdGVzdCByZWdyZXNzaW9ucyBvZiBsaWJ4bWwyCi0KLWxpYnhtbDItdGVzdHMtJHZlcnNpb24udGFyLmd6IGNvbnRhaW5zIDMgc3RhbmRhbG9uZSBDIHByb2dyYW1zIGFzIHdlbGwKLWFzIGEgbGFyZ2UgYW1vdW50IG9mIHRlc3RzIGFuZCByZXN1bHRzIGNvbWluZyBmcm9tIGxpYnhtbDIgaXRzZWxmIGFuZAotZnJvbSBXM0MsIE5JU1QsIFN1biBNaWNyb3N5c3RlbXMsIE1pY3Jvc29mdCBhbmQgSmFtZXMgQ2xhcmsuIEVhY2ggQwotcHJvZ3JhbSBoYXMgYSBkaWZmZXJlbnQgdGVzdGluZyBwdXJwb3NlOgotCi0gIHJ1bnRlc3QuYyA6IHJ1bnMgbGlieG1sMiBiYXNpYyBpbnRlcm5hbCByZWdyZXNzaW9uIHRlc3RzCi0gIHJ1bnN1aXRlLmM6IHJ1bnMgbGlieG1sMiBhZ2FpbnN0IGV4dGVybmFsIHJlZ3Jlc3Npb24gdGVzdHMKLSAgdGVzdGFwaS5jIDogZXhlcmNpc2VzIHRoZSBsaWJyYXJ5IHB1YmxpYyBlbnRyeSBwb2ludHMKLSAgdGVzdGNoYXIuYzogZXhlcmNpc2UgdGhlIGNoZWNrIG9mIGNoYXJhY3RlciByYW5nZXMgYW5kIFVURi04IHZhbGlkYXRpb24KLQotVGhlIGNvbW1hbmQ6Ci0KLSAgbWFrZSBjaGVjawotb3IKLSAgbWFrZSAtZiBNYWtlZmlsZS50ZXN0cyBjaGVjawotCi1zaG91bGQgYmUgc3VmZmljaWVudCBvbiBhbiBVbml4IHN5c3RlbSB0byBidWlsZCBhbmQgZXhlcmNpc2UgdGhlIHRlc3RzCi1mb3IgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uIE5vdGUgaG93ZXZlcgotdGhhdCB0aGVyZSBpc24ndCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHByb3ZpZGVkIHNvIGlmIHRoZSBpbnN0YWxsZWQKLXZlcnNpb24gaXMgb2xkZXIgdGhhbiB0aGUgdGVzdHN1aXRlIG9uZSwgZmFpbGluZyB0byBjb21waWxlIG9yIHJ1biB0aGUgdGVzdHMKLWlzIGxpa2VseS4gSW4gYW55IGV2ZW50IHRoaXMgd29uJ3Qgd29yayB3aXRoIGFuIGluc3RhbGxlZCBsaWJ4bWwyIG9sZGVyCi10aGFuIDIuNi4yMC4KLQotQnVpbGRpbmcgb24gb3RoZXIgcGxhdGZvcm1zIHNob3VsZCBiZSBhIG1hdHRlciBvZiBjb21waWxpbmcgdGhlIEMgZmlsZXMKLWxpa2UgYW55IG90aGVyIHByb2dyYW0gdXNpbmcgbGlieG1sMiwgcnVubmluZyB0aGUgdGVzdCBzaG91bGQgYmUgZG9uZQotc2ltcGx5IGJ5IGxhdW5jaGluZyB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGVzLgotCi1BbHNvIG5vdGUgdGhlIGF2YWlsYWJpbGl0eSBvZiBhICJtYWtlIHZhbGdyaW5kIiB0YXJnZXQgd2hpY2ggd2lsbCBydW4gdGhlCi1hYm92ZSB0ZXN0cyB1bmRlciB2YWxncmluZCB0byBjaGVjayBmb3IgbWVtb3J5IGVycm9ycyAoYnV0IHRoaXMgcmVsaWVzCi1vbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSB2YWxncmluZCBjb21tYW5kIGFuZCB0YWtlIGZhciBtb3JlIHRpbWUgdG8KLWNvbXBsZXRlKS4KLQotRGFuaWVsIFZlaWxsYXJkCi1Nb24gTWF5ICA3IDIwMTIKLQpkaWZmIC0tZ2l0IGEvU0FYLmMgYi9TQVguYwppbmRleCBkOGU5NzJiLi43ZjJmMjk3IDEwMDY0NAotLS0gYS9TQVguYworKysgYi9TQVguYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdmFsaWQuaD4KICNpbmNsdWRlIDxsaWJ4bWwvSFRNTHRyZWUuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC9TQVgyLmg+CiAKICNpZmRlZiBMSUJYTUxfTEVHQUNZX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NBWDIuYyBiL1NBWDIuYwppbmRleCA5ZmFmNWI0Li5lZDIxYTU1IDEwMDY0NAotLS0gYS9TQVgyLmMKKysrIGIvU0FYMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8bGlieG1sL1NBWDIuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CkBAIC0yMiwxNCArMjMsMTMgQEAKICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZGVidWdYTUwuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sSU8uaD4KLSNpbmNsdWRlIDxsaWJ4bWwvU0FYLmg+CiAjaW5jbHVkZSA8bGlieG1sL3VyaS5oPgogI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC9IVE1MdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAKLS8qICNkZWZpbmUgREVCVUdfU0FYMiAqLwotLyogI2RlZmluZSBERUJVR19TQVgyX1RSRUUgKi8KKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9wYXJzZXIuaCIKKyNpbmNsdWRlICJwcml2YXRlL3RyZWUuaCIKIAogLyoqCiAgKiBUT0RPOgpAQCAtMzI3LDExICszMjcsNiBAQAogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CiAgICAgeG1sRHRkUHRyIGR0ZDsKICAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybjsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgySW50ZXJuYWxTdWJzZXQoJXMsICVzLCAlcylcbiIsCi0gICAgICAgICAgICBuYW1lLCBFeHRlcm5hbElELCBTeXN0ZW1JRCk7Ci0jZW5kaWYKIAogICAgIGlmIChjdHh0LT5teURvYyA9PSBOVUxMKQogCXJldHVybjsKQEAgLTM2NCwxMSArMzU5LDYgQEAKIHsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwogICAgIGlmIChjdHggPT0gTlVMTCkgcmV0dXJuOwotI2lmZGVmIERFQlVHX1NBWAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiU0FYLnhtbFNBWDJFeHRlcm5hbFN1YnNldCglcywgJXMsICVzKVxuIiwKLSAgICAgICAgICAgIG5hbWUsIEV4dGVybmFsSUQsIFN5c3RlbUlEKTsKLSNlbmRpZgogICAgIGlmICgoKEV4dGVybmFsSUQgIT0gTlVMTCkgfHwgKFN5c3RlbUlEICE9IE5VTEwpKSAmJgogICAgICAgICAoKChjdHh0LT52YWxpZGF0ZSkgfHwgKGN0eHQtPmxvYWRzdWJzZXQgIT0gMCkpICYmCiAJIChjdHh0LT53ZWxsRm9ybWVkICYmIGN0eHQtPm15RG9jKSkpIHsKQEAgLTM4MCw5ICszNzAsMTAgQEAKIAlpbnQgb2xkaW5wdXRNYXg7CiAJeG1sUGFyc2VySW5wdXRQdHIgKm9sZGlucHV0VGFiOwogCXhtbFBhcnNlcklucHV0UHRyIGlucHV0ID0gTlVMTDsKLQl4bWxDaGFyRW5jb2RpbmcgZW5jOwotCWludCBvbGRjaGFyc2V0OwogCWNvbnN0IHhtbENoYXIgKm9sZGVuY29kaW5nOworCWludCBvbGRwcm9ncmVzc2l2ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjb25zdW1lZDsKKyAgICAgICAgc2l6ZV90IGJ1ZmZlcmVkOwogCiAJLyoKIAkgKiBBc2sgdGhlIEVudGl0eSByZXNvbHZlciB0byBsb2FkIHRoZSBkYW1uIHRoaW5nCkBAIC00MDMsMjAgKzM5NCwyMiBAQAogCW9sZGlucHV0TnIgPSBjdHh0LT5pbnB1dE5yOwogCW9sZGlucHV0TWF4ID0gY3R4dC0+aW5wdXRNYXg7CiAJb2xkaW5wdXRUYWIgPSBjdHh0LT5pbnB1dFRhYjsKLQlvbGRjaGFyc2V0ID0gY3R4dC0+Y2hhcnNldDsKIAlvbGRlbmNvZGluZyA9IGN0eHQtPmVuY29kaW5nOworICAgICAgICBvbGRwcm9ncmVzc2l2ZSA9IGN0eHQtPnByb2dyZXNzaXZlOwogCWN0eHQtPmVuY29kaW5nID0gTlVMTDsKKyAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAwOwogCiAJY3R4dC0+aW5wdXRUYWIgPSAoeG1sUGFyc2VySW5wdXRQdHIgKikKIAkgICAgICAgICAgICAgICAgIHhtbE1hbGxvYyg1ICogc2l6ZW9mKHhtbFBhcnNlcklucHV0UHRyKSk7CiAJaWYgKGN0eHQtPmlucHV0VGFiID09IE5VTEwpIHsKIAkgICAgeG1sU0FYMkVyck1lbW9yeShjdHh0LCAieG1sU0FYMkV4dGVybmFsU3Vic2V0Iik7CisgICAgICAgICAgICB4bWxGcmVlSW5wdXRTdHJlYW0oaW5wdXQpOwogCSAgICBjdHh0LT5pbnB1dCA9IG9sZGlucHV0OwogCSAgICBjdHh0LT5pbnB1dE5yID0gb2xkaW5wdXROcjsKIAkgICAgY3R4dC0+aW5wdXRNYXggPSBvbGRpbnB1dE1heDsKIAkgICAgY3R4dC0+aW5wdXRUYWIgPSBvbGRpbnB1dFRhYjsKLQkgICAgY3R4dC0+Y2hhcnNldCA9IG9sZGNoYXJzZXQ7CiAJICAgIGN0eHQtPmVuY29kaW5nID0gb2xkZW5jb2Rpbmc7CisgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IG9sZHByb2dyZXNzaXZlOwogCSAgICByZXR1cm47CiAJfQogCWN0eHQtPmlucHV0TnIgPSAwOwpAQCAtNDI0LDE0ICs0MTcsNiBAQAogCWN0eHQtPmlucHV0ID0gTlVMTDsKIAl4bWxQdXNoSW5wdXQoY3R4dCwgaW5wdXQpOwogCi0JLyoKLQkgKiBPbiB0aGUgZmx5IGVuY29kaW5nIGNvbnZlcnNpb24gaWYgbmVlZGVkCi0JICovCi0JaWYgKGN0eHQtPmlucHV0LT5sZW5ndGggPj0gNCkgewotCSAgICBlbmMgPSB4bWxEZXRlY3RDaGFyRW5jb2RpbmcoY3R4dC0+aW5wdXQtPmN1ciwgNCk7Ci0JICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0eHQsIGVuYyk7Ci0JfQotCiAJaWYgKGlucHV0LT5maWxlbmFtZSA9PSBOVUxMKQogCSAgICBpbnB1dC0+ZmlsZW5hbWUgPSAoY2hhciAqKSB4bWxDYW5vbmljUGF0aChTeXN0ZW1JRCk7CiAJaW5wdXQtPmxpbmUgPSAxOwpAQCAtNDUxLDYgKzQzNiwxOCBAQAogCiAJd2hpbGUgKGN0eHQtPmlucHV0TnIgPiAxKQogCSAgICB4bWxQb3BJbnB1dChjdHh0KTsKKworICAgICAgICBjb25zdW1lZCA9IGN0eHQtPmlucHV0LT5jb25zdW1lZDsKKyAgICAgICAgYnVmZmVyZWQgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7CisgICAgICAgIGlmIChidWZmZXJlZCA+IFVMT05HX01BWCAtIGNvbnN1bWVkKQorICAgICAgICAgICAgY29uc3VtZWQgPSBVTE9OR19NQVg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnN1bWVkICs9IGJ1ZmZlcmVkOworICAgICAgICBpZiAoY29uc3VtZWQgPiBVTE9OR19NQVggLSBjdHh0LT5zaXplZW50aXRpZXMpCisgICAgICAgICAgICBjdHh0LT5zaXplZW50aXRpZXMgPSBVTE9OR19NQVg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN0eHQtPnNpemVlbnRpdGllcyArPSBjb25zdW1lZDsKKwogCXhtbEZyZWVJbnB1dFN0cmVhbShjdHh0LT5pbnB1dCk7CiAgICAgICAgIHhtbEZyZWUoY3R4dC0+aW5wdXRUYWIpOwogCkBAIC00NjEsMTIgKzQ1OCwxMiBAQAogCWN0eHQtPmlucHV0TnIgPSBvbGRpbnB1dE5yOwogCWN0eHQtPmlucHV0TWF4ID0gb2xkaW5wdXRNYXg7CiAJY3R4dC0+aW5wdXRUYWIgPSBvbGRpbnB1dFRhYjsKLQljdHh0LT5jaGFyc2V0ID0gb2xkY2hhcnNldDsKIAlpZiAoKGN0eHQtPmVuY29kaW5nICE9IE5VTEwpICYmCiAJICAgICgoY3R4dC0+ZGljdCA9PSBOVUxMKSB8fAogCSAgICAgKCF4bWxEaWN0T3ducyhjdHh0LT5kaWN0LCBjdHh0LT5lbmNvZGluZykpKSkKIAkgICAgeG1sRnJlZSgoeG1sQ2hhciAqKSBjdHh0LT5lbmNvZGluZyk7CiAJY3R4dC0+ZW5jb2RpbmcgPSBvbGRlbmNvZGluZzsKKyAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSBvbGRwcm9ncmVzc2l2ZTsKIAkvKiBjdHh0LT53ZWxsRm9ybWVkID0gb2xkd2VsbEZvcm1lZDsgKi8KICAgICB9CiB9CkBAIC01MDEsMTEgKzQ5OCw2IEBACiAKICAgICBVUkkgPSB4bWxCdWlsZFVSSShzeXN0ZW1JZCwgKGNvbnN0IHhtbENoYXIgKikgYmFzZSk7CiAKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyUmVzb2x2ZUVudGl0eSglcywgJXMpXG4iLCBwdWJsaWNJZCwgc3lzdGVtSWQpOwotI2VuZGlmCi0KICAgICByZXQgPSB4bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKGNvbnN0IGNoYXIgKikgVVJJLAogCQkJCShjb25zdCBjaGFyICopIHB1YmxpY0lkLCBjdHh0KTsKICAgICBpZiAoVVJJICE9IE5VTEwpCkBAIC01MjksMTAgKzUyMSw2IEBACiAgICAgeG1sRW50aXR5UHRyIHJldCA9IE5VTEw7CiAKICAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybihOVUxMKTsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyR2V0RW50aXR5KCVzKVxuIiwgbmFtZSk7Ci0jZW5kaWYKIAogICAgIGlmIChjdHh0LT5pblN1YnNldCA9PSAwKSB7CiAJcmV0ID0geG1sR2V0UHJlZGVmaW5lZEVudGl0eShuYW1lKTsKQEAgLTU3OSwxMCArNTY3LDYgQEAKICAgICB4bWxFbnRpdHlQdHIgcmV0OwogCiAgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm4oTlVMTCk7Ci0jaWZkZWYgREVCVUdfU0FYCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJTQVgueG1sU0FYMkdldFBhcmFtZXRlckVudGl0eSglcylcbiIsIG5hbWUpOwotI2VuZGlmCiAKICAgICByZXQgPSB4bWxHZXRQYXJhbWV0ZXJFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOwogICAgIHJldHVybihyZXQpOwpAQCAtNjA4LDExICs1OTIsNiBAQAogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CiAKICAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybjsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyRW50aXR5RGVjbCglcywgJWQsICVzLCAlcywgJXMpXG4iLAotICAgICAgICAgICAgbmFtZSwgdHlwZSwgcHVibGljSWQsIHN5c3RlbUlkLCBjb250ZW50KTsKLSNlbmRpZgogICAgIGlmIChjdHh0LT5pblN1YnNldCA9PSAxKSB7CiAJZW50ID0geG1sQWRkRG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lLCB0eXBlLCBwdWJsaWNJZCwKIAkJICAgICAgICAgICAgICBzeXN0ZW1JZCwgY29udGVudCk7CkBAIC02ODUsMTEgKzY2NCw2IEBACiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5teURvYyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWZkZWYgREVCVUdfU0FYCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJTQVgueG1sU0FYMkF0dHJpYnV0ZURlY2woJXMsICVzLCAlZCwgJWQsICVzLCAuLi4pXG4iLAotICAgICAgICAgICAgZWxlbSwgZnVsbG5hbWUsIHR5cGUsIGRlZiwgZGVmYXVsdFZhbHVlKTsKLSNlbmRpZgogICAgIGlmICgoeG1sU3RyRXF1YWwoZnVsbG5hbWUsIEJBRF9DQVNUICJ4bWw6aWQiKSkgJiYKICAgICAgICAgKHR5cGUgIT0gWE1MX0FUVFJJQlVURV9JRCkpIHsKIAkvKgpAQCAtNzU1LDExICs3MjksNiBAQAogICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoY3R4dC0+bXlEb2MgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybjsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAiU0FYLnhtbFNBWDJFbGVtZW50RGVjbCglcywgJWQsIC4uLilcbiIsIG5hbWUsIHR5cGUpOwotI2VuZGlmCi0KICAgICBpZiAoY3R4dC0+aW5TdWJzZXQgPT0gMSkKICAgICAgICAgZWxlbSA9IHhtbEFkZEVsZW1lbnREZWNsKCZjdHh0LT52Y3R4dCwgY3R4dC0+bXlEb2MtPmludFN1YnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICh4bWxFbGVtZW50VHlwZVZhbCkgdHlwZSwgY29udGVudCk7CkBAIC04MDQsMTEgKzc3Myw2IEBACiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5teURvYyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWZkZWYgREVCVUdfU0FYCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJTQVgueG1sU0FYMk5vdGF0aW9uRGVjbCglcywgJXMsICVzKVxuIiwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKTsKLSNlbmRpZgotCiAgICAgaWYgKChwdWJsaWNJZCA9PSBOVUxMKSAmJiAoc3lzdGVtSWQgPT0gTlVMTCkpIHsKIAl4bWxGYXRhbEVyck1zZyhjdHh0LCBYTUxfRVJSX05PVEFUSU9OX1BST0NFU1NJTkcsCiAJICAgICAiU0FYLnhtbFNBWDJOb3RhdGlvbkRlY2woJXMpIGV4dGVybmFsSUQgb3IgUHVibGljSUQgbWlzc2luZ1xuIiwKQEAgLTg1MywxMSArODE3LDYgQEAKICAgICB4bWxFbnRpdHlQdHIgZW50OwogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CiAgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm47Ci0jaWZkZWYgREVCVUdfU0FYCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJTQVgueG1sU0FYMlVucGFyc2VkRW50aXR5RGVjbCglcywgJXMsICVzLCAlcylcbiIsCi0gICAgICAgICAgICBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQsIG5vdGF0aW9uTmFtZSk7Ci0jZW5kaWYKICAgICBpZiAoY3R4dC0+aW5TdWJzZXQgPT0gMSkgewogCWVudCA9IHhtbEFkZERvY0VudGl0eShjdHh0LT5teURvYywgbmFtZSwKIAkJCVhNTF9FWFRFUk5BTF9HRU5FUkFMX1VOUEFSU0VEX0VOVElUWSwKQEAgLTkxNiwxMSArODc1LDYgQEAKIHZvaWQKIHhtbFNBWDJTZXREb2N1bWVudExvY2F0b3Iodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIHhtbFNBWExvY2F0b3JQdHIgbG9jIEFUVFJJQlVURV9VTlVTRUQpCiB7Ci0gICAgLyogeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsgKi8KLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyU2V0RG9jdW1lbnRMb2NhdG9yKClcbiIpOwotI2VuZGlmCiB9CiAKIC8qKgpAQCAtOTM3LDEwICs4OTEsNiBAQAogCiAgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm47CiAKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyU3RhcnREb2N1bWVudCgpXG4iKTsKLSNlbmRpZgogICAgIGlmIChjdHh0LT5odG1sKSB7CiAjaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAogCWlmIChjdHh0LT5teURvYyA9PSBOVUxMKQpAQCAtOTY2LDEwICs5MTYsNiBAQAogCSAgICBpZiAoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9PTEQxMCkKIAkgICAgICAgIGRvYy0+cHJvcGVydGllcyB8PSBYTUxfRE9DX09MRDEwOwogCSAgICBkb2MtPnBhcnNlRmxhZ3MgPSBjdHh0LT5vcHRpb25zOwotCSAgICBpZiAoY3R4dC0+ZW5jb2RpbmcgIT0gTlVMTCkKLQkJZG9jLT5lbmNvZGluZyA9IHhtbFN0cmR1cChjdHh0LT5lbmNvZGluZyk7Ci0JICAgIGVsc2UKLQkJZG9jLT5lbmNvZGluZyA9IE5VTEw7CiAJICAgIGRvYy0+c3RhbmRhbG9uZSA9IGN0eHQtPnN0YW5kYWxvbmU7CiAJfSBlbHNlIHsKIAkgICAgeG1sU0FYMkVyck1lbW9yeShjdHh0LCAieG1sU0FYMlN0YXJ0RG9jdW1lbnQiKTsKQEAgLTk5OCwxMCArOTQ0LDggQEAKIHhtbFNBWDJFbmREb2N1bWVudCh2b2lkICpjdHgpCiB7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyRW5kRG9jdW1lbnQoKVxuIik7Ci0jZW5kaWYKKyAgICB4bWxEb2NQdHIgZG9jOworCiAgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm47CiAjaWZkZWYgTElCWE1MX1ZBTElEX0VOQUJMRUQKICAgICBpZiAoY3R4dC0+dmFsaWRhdGUgJiYgY3R4dC0+d2VsbEZvcm1lZCAmJgpAQCAtMTAwOSwyMyArOTUzLDI1IEBACiAJY3R4dC0+dmFsaWQgJj0geG1sVmFsaWRhdGVEb2N1bWVudEZpbmFsKCZjdHh0LT52Y3R4dCwgY3R4dC0+bXlEb2MpOwogI2VuZGlmIC8qIExJQlhNTF9WQUxJRF9FTkFCTEVEICovCiAKLSAgICAvKgotICAgICAqIEdyYWIgdGhlIGVuY29kaW5nIGlmIGl0IHdhcyBhZGRlZCBvbi10aGUtZmx5Ci0gICAgICovCi0gICAgaWYgKChjdHh0LT5lbmNvZGluZyAhPSBOVUxMKSAmJiAoY3R4dC0+bXlEb2MgIT0gTlVMTCkgJiYKLQkoY3R4dC0+bXlEb2MtPmVuY29kaW5nID09IE5VTEwpKSB7Ci0JY3R4dC0+bXlEb2MtPmVuY29kaW5nID0gY3R4dC0+ZW5jb2Rpbmc7Ci0JY3R4dC0+ZW5jb2RpbmcgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoKGN0eHQtPmlucHV0VGFiICE9IE5VTEwpICYmCi0gICAgICAgIChjdHh0LT5pbnB1dE5yID4gMCkgJiYgKGN0eHQtPmlucHV0VGFiWzBdICE9IE5VTEwpICYmCi0gICAgICAgIChjdHh0LT5pbnB1dFRhYlswXS0+ZW5jb2RpbmcgIT0gTlVMTCkgJiYgKGN0eHQtPm15RG9jICE9IE5VTEwpICYmCi0JKGN0eHQtPm15RG9jLT5lbmNvZGluZyA9PSBOVUxMKSkgewotCWN0eHQtPm15RG9jLT5lbmNvZGluZyA9IHhtbFN0cmR1cChjdHh0LT5pbnB1dFRhYlswXS0+ZW5jb2RpbmcpOwotICAgIH0KLSAgICBpZiAoKGN0eHQtPmNoYXJzZXQgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSkgJiYgKGN0eHQtPm15RG9jICE9IE5VTEwpICYmCi0JKGN0eHQtPm15RG9jLT5jaGFyc2V0ID09IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpKSB7Ci0JY3R4dC0+bXlEb2MtPmNoYXJzZXQgPSBjdHh0LT5jaGFyc2V0OworICAgIGRvYyA9IGN0eHQtPm15RG9jOworICAgIGlmICgoZG9jICE9IE5VTEwpICYmIChkb2MtPmVuY29kaW5nID09IE5VTEwpKSB7CisgICAgICAgIGNvbnN0IHhtbENoYXIgKmVuY29kaW5nID0gTlVMTDsKKworICAgICAgICBpZiAoKGN0eHQtPmlucHV0LT5mbGFncyAmIFhNTF9JTlBVVF9VU0VTX0VOQ19ERUNMKSB8fAorICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5mbGFncyAmIFhNTF9JTlBVVF9BVVRPX0VOQ09ESU5HKSkgeworICAgICAgICAgICAgLyogUHJlc2VydmUgZW5jb2RpbmcgZXhhY3RseSAqLworICAgICAgICAgICAgZW5jb2RpbmcgPSBjdHh0LT5lbmNvZGluZzsKKyAgICAgICAgfSBlbHNlIGlmICgoY3R4dC0+aW5wdXQtPmJ1ZikgJiYgKGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXIpKSB7CisgICAgICAgICAgICBlbmNvZGluZyA9IEJBRF9DQVNUIGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXItPm5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAoY3R4dC0+aW5wdXQtPmZsYWdzICYgWE1MX0lOUFVUX0hBU19FTkNPRElORykgeworICAgICAgICAgICAgZW5jb2RpbmcgPSBCQURfQ0FTVCAiVVRGLTgiOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGRvYy0+ZW5jb2RpbmcgPSB4bWxTdHJkdXAoZW5jb2RpbmcpOworICAgICAgICAgICAgaWYgKGRvYy0+ZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB4bWxTQVgyRXJyTWVtb3J5KGN0eHQsICJ4bWxTQVgyRW5kRG9jdW1lbnQiKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTMxMSwyNSArMTI1NywyNSBAQAogCiAgICAgLyogISEhISEhIDxhIHRvdG86YXJnPSIiIHhtbG5zOnRvdG89Imh0dHA6Ly90b3RvLmNvbSI+ICovCiAgICAgcmV0ID0geG1sTmV3TnNQcm9wRWF0TmFtZShjdHh0LT5ub2RlLCBuYW1lc3BhY2UsIG5hbWUsIE5VTEwpOworICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGlmIChyZXQgIT0gTlVMTCkgewotICAgICAgICBpZiAoKGN0eHQtPnJlcGxhY2VFbnRpdGllcyA9PSAwKSAmJiAoIWN0eHQtPmh0bWwpKSB7Ci0JICAgIHhtbE5vZGVQdHIgdG1wOworICAgIGlmICgoY3R4dC0+cmVwbGFjZUVudGl0aWVzID09IDApICYmICghY3R4dC0+aHRtbCkpIHsKKyAgICAgICAgeG1sTm9kZVB0ciB0bXA7CiAKLQkgICAgcmV0LT5jaGlsZHJlbiA9IHhtbFN0cmluZ0dldE5vZGVMaXN0KGN0eHQtPm15RG9jLCB2YWx1ZSk7Ci0JICAgIHRtcCA9IHJldC0+Y2hpbGRyZW47Ci0JICAgIHdoaWxlICh0bXAgIT0gTlVMTCkgewotCQl0bXAtPnBhcmVudCA9ICh4bWxOb2RlUHRyKSByZXQ7Ci0JCWlmICh0bXAtPm5leHQgPT0gTlVMTCkKLQkJICAgIHJldC0+bGFzdCA9IHRtcDsKLQkJdG1wID0gdG1wLT5uZXh0OwotCSAgICB9Ci0JfSBlbHNlIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0JICAgIHJldC0+Y2hpbGRyZW4gPSB4bWxOZXdEb2NUZXh0KGN0eHQtPm15RG9jLCB2YWx1ZSk7Ci0JICAgIHJldC0+bGFzdCA9IHJldC0+Y2hpbGRyZW47Ci0JICAgIGlmIChyZXQtPmNoaWxkcmVuICE9IE5VTEwpCi0JCXJldC0+Y2hpbGRyZW4tPnBhcmVudCA9ICh4bWxOb2RlUHRyKSByZXQ7Ci0JfQorICAgICAgICByZXQtPmNoaWxkcmVuID0geG1sU3RyaW5nR2V0Tm9kZUxpc3QoY3R4dC0+bXlEb2MsIHZhbHVlKTsKKyAgICAgICAgdG1wID0gcmV0LT5jaGlsZHJlbjsKKyAgICAgICAgd2hpbGUgKHRtcCAhPSBOVUxMKSB7CisgICAgICAgICAgICB0bXAtPnBhcmVudCA9ICh4bWxOb2RlUHRyKSByZXQ7CisgICAgICAgICAgICBpZiAodG1wLT5uZXh0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0LT5sYXN0ID0gdG1wOworICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0OworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIHJldC0+Y2hpbGRyZW4gPSB4bWxOZXdEb2NUZXh0KGN0eHQtPm15RG9jLCB2YWx1ZSk7CisgICAgICAgIHJldC0+bGFzdCA9IHJldC0+Y2hpbGRyZW47CisgICAgICAgIGlmIChyZXQtPmNoaWxkcmVuICE9IE5VTEwpCisgICAgICAgICAgICByZXQtPmNoaWxkcmVuLT5wYXJlbnQgPSAoeG1sTm9kZVB0cikgcmV0OwogICAgIH0KIAogI2lmZGVmIExJQlhNTF9WQUxJRF9FTkFCTEVECkBAIC0xNTg4LDExICsxNTM0LDYgQEAKICAgICBpbnQgaTsKIAogICAgIGlmICgoY3R4ID09IE5VTEwpIHx8IChmdWxsbmFtZSA9PSBOVUxMKSB8fCAoY3R4dC0+bXlEb2MgPT0gTlVMTCkpIHJldHVybjsKLSAgICBwYXJlbnQgPSBjdHh0LT5ub2RlOwotI2lmZGVmIERFQlVHX1NBWAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiU0FYLnhtbFNBWDJTdGFydEVsZW1lbnQoJXMpXG4iLCBmdWxsbmFtZSk7Ci0jZW5kaWYKIAogICAgIC8qCiAgICAgICogRmlyc3QgY2hlY2sgb24gdmFsaWRpdHk6CkBAIC0xNjA4LDEyICsxNTQ5LDE1IEBACiAJY3R4dC0+dmFsaWRhdGUgPSAwOwogICAgIH0KIAotCi0gICAgLyoKLSAgICAgKiBTcGxpdCB0aGUgZnVsbCBuYW1lIGludG8gYSBuYW1lc3BhY2UgcHJlZml4IGFuZCB0aGUgdGFnIG5hbWUKLSAgICAgKi8KLSAgICBuYW1lID0geG1sU3BsaXRRTmFtZShjdHh0LCBmdWxsbmFtZSwgJnByZWZpeCk7Ci0KKyAgICBpZiAoY3R4dC0+aHRtbCkgeworICAgICAgICBwcmVmaXggPSBOVUxMOworICAgICAgICBuYW1lID0geG1sU3RyZHVwKGZ1bGxuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBTcGxpdCB0aGUgZnVsbCBuYW1lIGludG8gYSBuYW1lc3BhY2UgcHJlZml4IGFuZCB0aGUgdGFnIG5hbWUKKyAgICAgICAgICovCisgICAgICAgIG5hbWUgPSB4bWxTcGxpdFFOYW1lKGN0eHQsIGZ1bGxuYW1lLCAmcHJlZml4KTsKKyAgICB9CiAKICAgICAvKgogICAgICAqIE5vdGUgOiB0aGUgbmFtZXNwYWNlIHJlc29sdXRpb24gaXMgZGVmZXJyZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKQEAgLTE2MjcsMzAgKzE1NzEsMjQgQEAKIAl4bWxTQVgyRXJyTWVtb3J5KGN0eHQsICJ4bWxTQVgyU3RhcnRFbGVtZW50Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGN0eHQtPm15RG9jLT5jaGlsZHJlbiA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfU0FYX1RSRUUKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlNldHRpbmcgJXMgYXMgcm9vdFxuIiwgbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgeG1sQWRkQ2hpbGQoKHhtbE5vZGVQdHIpIGN0eHQtPm15RG9jLCAoeG1sTm9kZVB0cikgcmV0KTsKLSAgICB9IGVsc2UgaWYgKHBhcmVudCA9PSBOVUxMKSB7Ci0gICAgICAgIHBhcmVudCA9IGN0eHQtPm15RG9jLT5jaGlsZHJlbjsKLSAgICB9CiAgICAgY3R4dC0+bm9kZW1lbSA9IC0xOwogICAgIGlmIChjdHh0LT5saW5lbnVtYmVycykgewogCWlmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSB7Ci0JICAgIGlmIChjdHh0LT5pbnB1dC0+bGluZSA8IFVTSFJUX01BWCkKLQkJcmV0LT5saW5lID0gKHVuc2lnbmVkIHNob3J0KSBjdHh0LT5pbnB1dC0+bGluZTsKKwkgICAgaWYgKCh1bnNpZ25lZCkgY3R4dC0+aW5wdXQtPmxpbmUgPCAodW5zaWduZWQpIFVTSFJUX01BWCkKKwkJcmV0LT5saW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7CiAJICAgIGVsc2UKIAkgICAgICAgIHJldC0+bGluZSA9IFVTSFJUX01BWDsKIAl9CiAgICAgfQogCisgICAgLyogSW5pdGlhbGl6ZSBwYXJlbnQgYmVmb3JlIHB1c2hpbmcgbm9kZSAqLworICAgIHBhcmVudCA9IGN0eHQtPm5vZGU7CisgICAgaWYgKHBhcmVudCA9PSBOVUxMKQorICAgICAgICBwYXJlbnQgPSAoeG1sTm9kZVB0cikgY3R4dC0+bXlEb2M7CisKICAgICAvKgogICAgICAqIFdlIGFyZSBwYXJzaW5nIGEgbmV3IG5vZGUuCiAgICAgICovCi0jaWZkZWYgREVCVUdfU0FYX1RSRUUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgInB1c2hpbmcoJXMpXG4iLCBuYW1lKTsKLSNlbmRpZgogICAgIGlmIChub2RlUHVzaChjdHh0LCByZXQpIDwgMCkgewogICAgICAgICB4bWxVbmxpbmtOb2RlKHJldCk7CiAgICAgICAgIHhtbEZyZWVOb2RlKHJldCk7CkBAIC0xNjYyLDIyICsxNjAwLDcgQEAKICAgICAvKgogICAgICAqIExpbmsgdGhlIGNoaWxkIGVsZW1lbnQKICAgICAgKi8KLSAgICBpZiAocGFyZW50ICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7Ci0jaWZkZWYgREVCVUdfU0FYX1RSRUUKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiYWRkaW5nIGNoaWxkICVzIHRvICVzXG4iLCBuYW1lLCBwYXJlbnQtPm5hbWUpOwotI2VuZGlmCi0JICAgIHhtbEFkZENoaWxkKHBhcmVudCwgcmV0KTsKLQl9IGVsc2UgewotI2lmZGVmIERFQlVHX1NBWF9UUkVFCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgImFkZGluZyBzaWJsaW5nICVzIHRvICIsIG5hbWUpOwotCSAgICB4bWxEZWJ1Z0R1bXBPbmVOb2RlKHN0ZGVyciwgcGFyZW50LCAwKTsKLSNlbmRpZgotCSAgICB4bWxBZGRTaWJsaW5nKHBhcmVudCwgcmV0KTsKLQl9Ci0gICAgfQorICAgIHhtbEFkZENoaWxkKHBhcmVudCwgcmV0KTsKIAogICAgIGlmICghY3R4dC0+aHRtbCkgewogICAgICAgICAvKgpAQCAtMTc5Miw0MCArMTcxNSwyMiBAQAogeG1sU0FYMkVuZEVsZW1lbnQodm9pZCAqY3R4LCBjb25zdCB4bWxDaGFyICpuYW1lIEFUVFJJQlVURV9VTlVTRUQpCiB7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKLSAgICB4bWxOb2RlUHRyIGN1cjsKIAogICAgIGlmIChjdHggPT0gTlVMTCkgcmV0dXJuOwotICAgIGN1ciA9IGN0eHQtPm5vZGU7Ci0jaWZkZWYgREVCVUdfU0FYCi0gICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJTQVgueG1sU0FYMkVuZEVsZW1lbnQoTlVMTClcbiIpOwotICAgIGVsc2UKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlNBWC54bWxTQVgyRW5kRWxlbWVudCglcylcbiIsIG5hbWUpOwotI2VuZGlmCiAKLSAgICAvKiBDYXB0dXJlIGVuZCBwb3NpdGlvbiBhbmQgYWRkIG5vZGUgKi8KLSAgICBpZiAoY3VyICE9IE5VTEwgJiYgY3R4dC0+cmVjb3JkX2luZm8pIHsKLSAgICAgIGN0eHQtPm5vZGVJbmZvLT5lbmRfcG9zID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOwotICAgICAgY3R4dC0+bm9kZUluZm8tPmVuZF9saW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7Ci0gICAgICBjdHh0LT5ub2RlSW5mby0+bm9kZSA9IGN1cjsKLSAgICAgIHhtbFBhcnNlckFkZE5vZGVJbmZvKGN0eHQsIGN0eHQtPm5vZGVJbmZvKTsKLSAgICB9CiAgICAgY3R4dC0+bm9kZW1lbSA9IC0xOwogCiAjaWZkZWYgTElCWE1MX1ZBTElEX0VOQUJMRUQKICAgICBpZiAoY3R4dC0+dmFsaWRhdGUgJiYgY3R4dC0+d2VsbEZvcm1lZCAmJgogICAgICAgICBjdHh0LT5teURvYyAmJiBjdHh0LT5teURvYy0+aW50U3Vic2V0KQogICAgICAgICBjdHh0LT52YWxpZCAmPSB4bWxWYWxpZGF0ZU9uZUVsZW1lbnQoJmN0eHQtPnZjdHh0LCBjdHh0LT5teURvYywKLQkJCQkJICAgICBjdXIpOworCQkJCQkgICAgIGN0eHQtPm5vZGUpOwogI2VuZGlmIC8qIExJQlhNTF9WQUxJRF9FTkFCTEVEICovCiAKIAogICAgIC8qCiAgICAgICogZW5kIG9mIHBhcnNpbmcgb2YgdGhpcyBub2RlLgogICAgICAqLwotI2lmZGVmIERFQlVHX1NBWF9UUkVFCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJwb3BwaW5nKCVzKVxuIiwgY3VyLT5uYW1lKTsKLSNlbmRpZgogICAgIG5vZGVQb3AoY3R4dCk7CiB9CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCB8fCBMSUJYTUxfSFRNTF9FTkFCTEVEIHx8IExJQlhNTF9MRUdBQ1lfRU5BQkxFRCAqLwpAQCAtMTkwMSwxOCArMTgwNiw2IEBACiAgICAgfSBlbHNlCiAJcmV0LT5jb250ZW50ID0gKHhtbENoYXIgKikgaW50ZXJuOwogCi0gICAgaWYgKGN0eHQtPmxpbmVudW1iZXJzKSB7Ci0JaWYgKGN0eHQtPmlucHV0ICE9IE5VTEwpIHsKLQkgICAgaWYgKGN0eHQtPmlucHV0LT5saW5lIDwgVVNIUlRfTUFYKQotCQlyZXQtPmxpbmUgPSAodW5zaWduZWQgc2hvcnQpIGN0eHQtPmlucHV0LT5saW5lOwotCSAgICBlbHNlIHsKLQkgICAgICAgIHJldC0+bGluZSA9IFVTSFJUX01BWDsKLQkJaWYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfQklHX0xJTkVTKQotCQkgICAgcmV0LT5wc3ZpID0gKHZvaWQgKikgKHB0cmRpZmZfdCkgY3R4dC0+aW5wdXQtPmxpbmU7Ci0JICAgIH0KLQl9Ci0gICAgfQotCiAgICAgaWYgKChfX3htbFJlZ2lzdGVyQ2FsbGJhY2tzKSAmJiAoeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKSkKIAl4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUocmV0KTsKICAgICByZXR1cm4ocmV0KTsKQEAgLTE5NjIsOCArMTg1NSwxMCBAQAogICogVGhlIGRlZmF1bHQgaGFuZGxpbmcgaXMgdG8gY29udmVydCB0aGUgYXR0cmlidXRlIGludG8gYW4KICAqIERPTSBzdWJ0cmVlIGFuZCBwYXN0IGl0IGluIGEgbmV3IHhtbEF0dHIgZWxlbWVudCBhZGRlZCB0bwogICogdGhlIGVsZW1lbnQuCisgKgorICogUmV0dXJucyB0aGUgbmV3IGF0dHJpYnV0ZSBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgeG1sQXR0clB0cgogeG1sU0FYMkF0dHJpYnV0ZU5zKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbG9jYWxuYW1lLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBwcmVmaXgsCkBAIC0xOTc3LDggKzE4NzIsMTIgQEAKICAgICAvKgogICAgICAqIE5vdGU6IGlmIHByZWZpeCA9PSBOVUxMLCB0aGUgYXR0cmlidXRlIGlzIG5vdCBpbiB0aGUgZGVmYXVsdCBuYW1lc3BhY2UKICAgICAgKi8KLSAgICBpZiAocHJlZml4ICE9IE5VTEwpCi0JbmFtZXNwYWNlID0geG1sU2VhcmNoTnMoY3R4dC0+bXlEb2MsIGN0eHQtPm5vZGUsIHByZWZpeCk7CisgICAgaWYgKHByZWZpeCAhPSBOVUxMKSB7CisJbmFtZXNwYWNlID0geG1sUGFyc2VyTnNMb29rdXBTYXgoY3R4dCwgcHJlZml4KTsKKwlpZiAoKG5hbWVzcGFjZSA9PSBOVUxMKSAmJiAoeG1sU3RyRXF1YWwocHJlZml4LCBCQURfQ0FTVCAieG1sIikpKSB7CisJICAgIG5hbWVzcGFjZSA9IHhtbFNlYXJjaE5zKGN0eHQtPm15RG9jLCBjdHh0LT5ub2RlLCBwcmVmaXgpOworCX0KKyAgICB9CiAKICAgICAvKgogICAgICAqIGFsbG9jYXRlIHRoZSBub2RlCkBAIC0xOTg3LDQzICsxODg2LDM4IEBACiAgICAgICAgIHJldCA9IGN0eHQtPmZyZWVBdHRyczsKIAljdHh0LT5mcmVlQXR0cnMgPSByZXQtPm5leHQ7CiAJY3R4dC0+ZnJlZUF0dHJzTnItLTsKLQltZW1zZXQocmV0LCAwLCBzaXplb2YoeG1sQXR0cikpOwotCXJldC0+dHlwZSA9IFhNTF9BVFRSSUJVVEVfTk9ERTsKLQotCXJldC0+cGFyZW50ID0gY3R4dC0+bm9kZTsKLQlyZXQtPmRvYyA9IGN0eHQtPm15RG9jOwotCXJldC0+bnMgPSBuYW1lc3BhY2U7Ci0KLQlpZiAoY3R4dC0+ZGljdE5hbWVzKQotCSAgICByZXQtPm5hbWUgPSBsb2NhbG5hbWU7Ci0JZWxzZQotCSAgICByZXQtPm5hbWUgPSB4bWxTdHJkdXAobG9jYWxuYW1lKTsKLQotICAgICAgICAvKiBsaW5rIGF0IHRoZSBlbmQgdG8gcHJlc2VydmUgb3JkZXIsIFRPRE8gc3BlZWQgdXAgd2l0aCBhIGxhc3QgKi8KLQlpZiAoY3R4dC0+bm9kZS0+cHJvcGVydGllcyA9PSBOVUxMKSB7Ci0JICAgIGN0eHQtPm5vZGUtPnByb3BlcnRpZXMgPSByZXQ7Ci0JfSBlbHNlIHsKLQkgICAgeG1sQXR0clB0ciBwcmV2ID0gY3R4dC0+bm9kZS0+cHJvcGVydGllczsKLQotCSAgICB3aGlsZSAocHJldi0+bmV4dCAhPSBOVUxMKSBwcmV2ID0gcHJldi0+bmV4dDsKLQkgICAgcHJldi0+bmV4dCA9IHJldDsKLQkgICAgcmV0LT5wcmV2ID0gcHJldjsKLQl9Ci0KLQlpZiAoKF9feG1sUmVnaXN0ZXJDYWxsYmFja3MpICYmICh4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUpKQotCSAgICB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUoKHhtbE5vZGVQdHIpcmV0KTsKICAgICB9IGVsc2UgewotCWlmIChjdHh0LT5kaWN0TmFtZXMpCi0JICAgIHJldCA9IHhtbE5ld05zUHJvcEVhdE5hbWUoY3R4dC0+bm9kZSwgbmFtZXNwYWNlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4bWxDaGFyICopIGxvY2FsbmFtZSwgTlVMTCk7Ci0JZWxzZQotCSAgICByZXQgPSB4bWxOZXdOc1Byb3AoY3R4dC0+bm9kZSwgbmFtZXNwYWNlLCBsb2NhbG5hbWUsIE5VTEwpOwotCWlmIChyZXQgPT0gTlVMTCkgewotCSAgICB4bWxFcnJNZW1vcnkoY3R4dCwgInhtbFNBWDJBdHRyaWJ1dGVOcyIpOwotCSAgICByZXR1cm47Ci0JfQorICAgICAgICByZXQgPSB4bWxNYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKyAgICAgICAgaWYgKHJldCA9PSBOVUxMKSB7CisgICAgICAgICAgICB4bWxTQVgyRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB9CiAgICAgfQogCisgICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKHhtbEF0dHIpKTsKKyAgICByZXQtPnR5cGUgPSBYTUxfQVRUUklCVVRFX05PREU7CisKKyAgICAvKgorICAgICAqIHhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXIgaGFkIGEgYnVnIHRoYXQgY291bGQgcmVzdWx0IGluCisgICAgICogYSBtaXNtYXRjaCBiZXR3ZWVuIGN0eHQtPm5vZGUtPmRvYyBhbmQgY3R4dC0+bXlEb2MuIFdlIHVzZQorICAgICAqIGN0eHQtPm5vZGUtPmRvYyBoZXJlLCBidXQgd2Ugc2hvdWxkIHNvbWVob3cgbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICogZG9jdW1lbnQgcG9pbnRlcnMgbWF0Y2guCisgICAgICovCisKKyAgICAvKiBhc3NlcnQoY3R4dC0+bm9kZS0+ZG9jID09IGN0eHQtPm15RG9jKTsgKi8KKworICAgIHJldC0+cGFyZW50ID0gY3R4dC0+bm9kZTsKKyAgICByZXQtPmRvYyA9IGN0eHQtPm5vZGUtPmRvYzsKKyAgICByZXQtPm5zID0gbmFtZXNwYWNlOworCisgICAgaWYgKGN0eHQtPmRpY3ROYW1lcykKKyAgICAgICAgcmV0LT5uYW1lID0gbG9jYWxuYW1lOworICAgIGVsc2UKKyAgICAgICAgcmV0LT5uYW1lID0geG1sU3RyZHVwKGxvY2FsbmFtZSk7CisKKyAgICBpZiAoKF9feG1sUmVnaXN0ZXJDYWxsYmFja3MpICYmICh4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUpKQorICAgICAgICB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUoKHhtbE5vZGVQdHIpcmV0KTsKKwogICAgIGlmICgoY3R4dC0+cmVwbGFjZUVudGl0aWVzID09IDApICYmICghY3R4dC0+aHRtbCkpIHsKIAl4bWxOb2RlUHRyIHRtcDsKIApAQCAtMjE1NCwxNSArMjA0OCwxMSBAQAogCSAgICAgKgogCSAgICAgKiBPcGVuIGlzc3VlOiBub3JtYWxpemF0aW9uIG9mIHRoZSB2YWx1ZS4KIAkgICAgICovCi0jaWYgZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9MRUdBQ1lfRU5BQkxFRCkKLSNpZmRlZiBMSUJYTUxfVkFMSURfRU5BQkxFRAogCSAgICBpZiAoeG1sVmFsaWRhdGVOQ05hbWUoY29udGVudCwgMSkgIT0gMCkgewogCSAgICAgICAgeG1sRXJyVmFsaWQoY3R4dCwgWE1MX0RURF9YTUxJRF9WQUxVRSwKIAkJICAgICAgInhtbDppZCA6IGF0dHJpYnV0ZSB2YWx1ZSAlcyBpcyBub3QgYW4gTkNOYW1lXG4iLAogCQkJICAgIChjb25zdCBjaGFyICopIGNvbnRlbnQsIE5VTEwpOwogCSAgICB9Ci0jZW5kaWYKLSNlbmRpZgogCSAgICB4bWxBZGRJRCgmY3R4dC0+dmN0eHQsIGN0eHQtPm15RG9jLCBjb250ZW50LCByZXQpOwogCX0gZWxzZSBpZiAoeG1sSXNJRChjdHh0LT5teURvYywgY3R4dC0+bm9kZSwgcmV0KSkgewogCSAgICB4bWxBZGRJRCgmY3R4dC0+dmN0eHQsIGN0eHQtPm15RG9jLCBjb250ZW50LCByZXQpOwpAQCAtMjE3Miw2ICsyMDYyLDggQEAKICAgICB9CiAgICAgaWYgKGR1cCAhPSBOVUxMKQogCXhtbEZyZWUoZHVwKTsKKworICAgIHJldHVybihyZXQpOwogfQogCiAvKioKQEAgLTIyMTEsNyArMjEwMyw2IEBACiAgICAgaW50IGksIGo7CiAKICAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybjsKLSAgICBwYXJlbnQgPSBjdHh0LT5ub2RlOwogICAgIC8qCiAgICAgICogRmlyc3QgY2hlY2sgb24gdmFsaWRpdHk6CiAgICAgICovCkBAIC0yMjYwLDYgKzIxNTEsNyBAQAogCSAgICAgICAgcmV0LT5uYW1lID0gbG5hbWU7CiAJICAgIGlmIChyZXQtPm5hbWUgPT0gTlVMTCkgewogCSAgICAgICAgeG1sU0FYMkVyck1lbW9yeShjdHh0LCAieG1sU0FYMlN0YXJ0RWxlbWVudE5zIik7CisgICAgICAgICAgICAgICAgeG1sRnJlZShyZXQpOwogCQlyZXR1cm47CiAJICAgIH0KIAl9CkBAIC0yMjgxLDE2ICsyMTczLDEzIEBACiAgICAgfQogICAgIGlmIChjdHh0LT5saW5lbnVtYmVycykgewogCWlmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSB7Ci0JICAgIGlmIChjdHh0LT5pbnB1dC0+bGluZSA8IFVTSFJUX01BWCkKLQkJcmV0LT5saW5lID0gKHVuc2lnbmVkIHNob3J0KSBjdHh0LT5pbnB1dC0+bGluZTsKKwkgICAgaWYgKCh1bnNpZ25lZCkgY3R4dC0+aW5wdXQtPmxpbmUgPCAodW5zaWduZWQpIFVTSFJUX01BWCkKKwkJcmV0LT5saW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7CiAJICAgIGVsc2UKIAkgICAgICAgIHJldC0+bGluZSA9IFVTSFJUX01BWDsKIAl9CiAgICAgfQogCi0gICAgaWYgKHBhcmVudCA9PSBOVUxMKSB7Ci0gICAgICAgIHhtbEFkZENoaWxkKCh4bWxOb2RlUHRyKSBjdHh0LT5teURvYywgKHhtbE5vZGVQdHIpIHJldCk7Ci0gICAgfQogICAgIC8qCiAgICAgICogQnVpbGQgdGhlIG5hbWVzcGFjZSBsaXN0CiAgICAgICovCkBAIC0yMzE1LDYgKzIyMDQsOSBAQAogICAgICAgICAgICAgICovCiAJICAgIGNvbnRpbnVlOwogCX0KKworICAgICAgICB4bWxQYXJzZXJOc1VwZGF0ZVNheChjdHh0LCBwcmVmLCBucyk7CisKICNpZmRlZiBMSUJYTUxfVkFMSURfRU5BQkxFRAogCWlmICgoIWN0eHQtPmh0bWwpICYmIGN0eHQtPnZhbGlkYXRlICYmIGN0eHQtPndlbGxGb3JtZWQgJiYKIAkgICAgY3R4dC0+bXlEb2MgJiYgY3R4dC0+bXlEb2MtPmludFN1YnNldCkgewpAQCAtMjMyNSw2ICsyMjE3LDExIEBACiAgICAgfQogICAgIGN0eHQtPm5vZGVtZW0gPSAtMTsKIAorICAgIC8qIEluaXRpYWxpemUgcGFyZW50IGJlZm9yZSBwdXNoaW5nIG5vZGUgKi8KKyAgICBwYXJlbnQgPSBjdHh0LT5ub2RlOworICAgIGlmIChwYXJlbnQgPT0gTlVMTCkKKyAgICAgICAgcGFyZW50ID0gKHhtbE5vZGVQdHIpIGN0eHQtPm15RG9jOworCiAgICAgLyoKICAgICAgKiBXZSBhcmUgcGFyc2luZyBhIG5ldyBub2RlLgogICAgICAqLwpAQCAtMjMzNywxMyArMjIzNCw3IEBACiAgICAgLyoKICAgICAgKiBMaW5rIHRoZSBjaGlsZCBlbGVtZW50CiAgICAgICovCi0gICAgaWYgKHBhcmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChwYXJlbnQtPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkgewotCSAgICB4bWxBZGRDaGlsZChwYXJlbnQsIHJldCk7Ci0JfSBlbHNlIHsKLQkgICAgeG1sQWRkU2libGluZyhwYXJlbnQsIHJldCk7Ci0JfQotICAgIH0KKyAgICB4bWxBZGRDaGlsZChwYXJlbnQsIHJldCk7CiAKICAgICAvKgogICAgICAqIEluc2VydCB0aGUgZGVmYXVsdGVkIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRFREIG9ubHkgaWYgcmVxdWVzdGVkOgpAQCAtMjM1Nyw3ICsyMjQ4LDcgQEAKICAgICAgKiBOb3RlIHRoYXQsIGlmIHByZWZpeCBpcyBOVUxMLCB0aGlzIHNlYXJjaGVzIGZvciB0aGUgZGVmYXVsdCBOcwogICAgICAqLwogICAgIGlmICgoVVJJICE9IE5VTEwpICYmIChyZXQtPm5zID09IE5VTEwpKSB7Ci0gICAgICAgIHJldC0+bnMgPSB4bWxTZWFyY2hOcyhjdHh0LT5teURvYywgcGFyZW50LCBwcmVmaXgpOworICAgICAgICByZXQtPm5zID0geG1sUGFyc2VyTnNMb29rdXBTYXgoY3R4dCwgcHJlZml4KTsKIAlpZiAoKHJldC0+bnMgPT0gTlVMTCkgJiYgKHhtbFN0ckVxdWFsKHByZWZpeCwgQkFEX0NBU1QgInhtbCIpKSkgewogCSAgICByZXQtPm5zID0geG1sU2VhcmNoTnMoY3R4dC0+bXlEb2MsIHJldCwgcHJlZml4KTsKIAl9CkBAIC0yMzgzLDcgKzIyNzQsMTEgQEAKICAgICAgKiBwcm9jZXNzIGFsbCB0aGUgb3RoZXIgYXR0cmlidXRlcwogICAgICAqLwogICAgIGlmIChuYl9hdHRyaWJ1dGVzID4gMCkgeworICAgICAgICB4bWxBdHRyUHRyIHByZXYgPSBOVUxMOworCiAgICAgICAgIGZvciAoaiA9IDAsaSA9IDA7aSA8IG5iX2F0dHJpYnV0ZXM7aSsrLGorPTUpIHsKKyAgICAgICAgICAgIHhtbEF0dHJQdHIgYXR0ciA9IE5VTEw7CisKIAkgICAgLyoKIAkgICAgICogSGFuZGxlIHRoZSByYXJlIGNhc2Ugb2YgYW4gdW5kZWZpbmVkIGF0dHJpYnV0ZSBwcmVmaXgKIAkgICAgICovCkBAIC0yMzk0LDIzICsyMjg5LDM4IEBACiAJCSAgICBmdWxsbmFtZSA9IHhtbERpY3RRTG9va3VwKGN0eHQtPmRpY3QsIGF0dHJpYnV0ZXNbaisxXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tqXSk7CiAJCSAgICBpZiAoZnVsbG5hbWUgIT0gTlVMTCkgewotCQkJeG1sU0FYMkF0dHJpYnV0ZU5zKGN0eHQsIGZ1bGxuYW1lLCBOVUxMLAotCQkJICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbaiszXSwgYXR0cmlidXRlc1tqKzRdKTsKLQkJICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPSB4bWxTQVgyQXR0cmlidXRlTnMoY3R4dCwgZnVsbG5hbWUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbaiszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tqKzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGF2ZV9hdHRyOwogCQkgICAgfQogCQl9IGVsc2UgewogCQkgICAgbG5hbWUgPSB4bWxCdWlsZFFOYW1lKGF0dHJpYnV0ZXNbal0sIGF0dHJpYnV0ZXNbaisxXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKIAkJICAgIGlmIChsbmFtZSAhPSBOVUxMKSB7Ci0JCQl4bWxTQVgyQXR0cmlidXRlTnMoY3R4dCwgbG5hbWUsIE5VTEwsCi0JCQkgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tqKzNdLCBhdHRyaWJ1dGVzW2orNF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IHhtbFNBWDJBdHRyaWJ1dGVOcyhjdHh0LCBsbmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tqKzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2orNF0pOwogCQkJeG1sRnJlZShsbmFtZSk7Ci0JCSAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmVfYXR0cjsKIAkJICAgIH0KIAkJfQogCSAgICB9Ci0JICAgIHhtbFNBWDJBdHRyaWJ1dGVOcyhjdHh0LCBhdHRyaWJ1dGVzW2pdLCBhdHRyaWJ1dGVzW2orMV0sCi0JCQkgICAgICAgYXR0cmlidXRlc1tqKzNdLCBhdHRyaWJ1dGVzW2orNF0pOworICAgICAgICAgICAgYXR0ciA9IHhtbFNBWDJBdHRyaWJ1dGVOcyhjdHh0LCBhdHRyaWJ1dGVzW2pdLCBhdHRyaWJ1dGVzW2orMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbaiszXSwgYXR0cmlidXRlc1tqKzRdKTsKK2hhdmVfYXR0cjoKKyAgICAgICAgICAgIGlmIChhdHRyID09IE5VTEwpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qIGxpbmsgYXQgdGhlIGVuZCB0byBwcmVzZXJ2ZSBvcmRlciAqLworICAgICAgICAgICAgaWYgKHByZXYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGN0eHQtPm5vZGUtPnByb3BlcnRpZXMgPSBhdHRyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gYXR0cjsKKyAgICAgICAgICAgICAgICBhdHRyLT5wcmV2ID0gcHJldjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJldiA9IGF0dHI7CiAJfQogICAgIH0KIApAQCAtMjQ1MSwyNCArMjM2MSwxNSBAQAogCQkgICAgY29uc3QgeG1sQ2hhciAqIFVSSSBBVFRSSUJVVEVfVU5VU0VEKQogewogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7Ci0gICAgeG1sUGFyc2VyTm9kZUluZm8gbm9kZV9pbmZvOwotICAgIHhtbE5vZGVQdHIgY3VyOwogCiAgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm47Ci0gICAgY3VyID0gY3R4dC0+bm9kZTsKLSAgICAvKiBDYXB0dXJlIGVuZCBwb3NpdGlvbiBhbmQgYWRkIG5vZGUgKi8KLSAgICBpZiAoKGN0eHQtPnJlY29yZF9pbmZvKSAmJiAoY3VyICE9IE5VTEwpKSB7Ci0gICAgICAgIG5vZGVfaW5mby5lbmRfcG9zID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOwotICAgICAgICBub2RlX2luZm8uZW5kX2xpbmUgPSBjdHh0LT5pbnB1dC0+bGluZTsKLSAgICAgICAgbm9kZV9pbmZvLm5vZGUgPSBjdXI7Ci0gICAgICAgIHhtbFBhcnNlckFkZE5vZGVJbmZvKGN0eHQsICZub2RlX2luZm8pOwotICAgIH0KICAgICBjdHh0LT5ub2RlbWVtID0gLTE7CiAKICNpZmRlZiBMSUJYTUxfVkFMSURfRU5BQkxFRAogICAgIGlmIChjdHh0LT52YWxpZGF0ZSAmJiBjdHh0LT53ZWxsRm9ybWVkICYmCiAgICAgICAgIGN0eHQtPm15RG9jICYmIGN0eHQtPm15RG9jLT5pbnRTdWJzZXQpCi0gICAgICAgIGN0eHQtPnZhbGlkICY9IHhtbFZhbGlkYXRlT25lRWxlbWVudCgmY3R4dC0+dmN0eHQsIGN0eHQtPm15RG9jLCBjdXIpOworICAgICAgICBjdHh0LT52YWxpZCAmPSB4bWxWYWxpZGF0ZU9uZUVsZW1lbnQoJmN0eHQtPnZjdHh0LCBjdHh0LT5teURvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPm5vZGUpOwogI2VuZGlmIC8qIExJQlhNTF9WQUxJRF9FTkFCTEVEICovCiAKICAgICAvKgpAQCAtMjQ5MSwxOCArMjM5Miw3IEBACiAgICAgeG1sTm9kZVB0ciByZXQ7CiAKICAgICBpZiAoY3R4ID09IE5VTEwpIHJldHVybjsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyUmVmZXJlbmNlKCVzKVxuIiwgbmFtZSk7Ci0jZW5kaWYKLSAgICBpZiAobmFtZVswXSA9PSAnIycpCi0JcmV0ID0geG1sTmV3Q2hhclJlZihjdHh0LT5teURvYywgbmFtZSk7Ci0gICAgZWxzZQotCXJldCA9IHhtbE5ld1JlZmVyZW5jZShjdHh0LT5teURvYywgbmFtZSk7Ci0jaWZkZWYgREVCVUdfU0FYX1RSRUUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgImFkZCB4bWxTQVgyUmVmZXJlbmNlICVzIHRvICVzIFxuIiwgbmFtZSwgY3R4dC0+bm9kZS0+bmFtZSk7Ci0jZW5kaWYKKyAgICByZXQgPSB4bWxOZXdSZWZlcmVuY2UoY3R4dC0+bXlEb2MsIG5hbWUpOwogICAgIGlmICh4bWxBZGRDaGlsZChjdHh0LT5ub2RlLCByZXQpID09IE5VTEwpIHsKICAgICAgICAgeG1sRnJlZU5vZGUocmV0KTsKICAgICB9CkBAIC0yNTI0LDEwICsyNDE0LDYgQEAKICAgICB4bWxOb2RlUHRyIGxhc3RDaGlsZDsKIAogICAgIGlmIChjdHh0ID09IE5VTEwpIHJldHVybjsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgyQ2hhcmFjdGVycyglLjMwcywgJWQpXG4iLCBjaCwgbGVuKTsKLSNlbmRpZgogICAgIC8qCiAgICAgICogSGFuZGxlIHRoZSBkYXRhIGlmIGFueS4gSWYgdGhlcmUgaXMgbm8gY2hpbGQKICAgICAgKiBhZGQgaXQgYXMgY29udGVudCwgb3RoZXJ3aXNlIGlmIHRoZSBsYXN0IGNoaWxkIGlzIHRleHQsCkBAIC0yNTM1LDE3ICsyNDIxLDkgQEAKICAgICAgKi8KIAogICAgIGlmIChjdHh0LT5ub2RlID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19TQVhfVFJFRQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiYWRkIGNoYXJzOiBjdHh0LT5ub2RlID09IE5VTEwgIVxuIik7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBsYXN0Q2hpbGQgPSBjdHh0LT5ub2RlLT5sYXN0OwotI2lmZGVmIERFQlVHX1NBWF9UUkVFCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJhZGQgY2hhcnMgdG8gJXMgXG4iLCBjdHh0LT5ub2RlLT5uYW1lKTsKLSNlbmRpZgogCiAgICAgLyoKICAgICAgKiBIZXJlIHdlIG5lZWRlZCBhbiBhY2NlbGVyYXRvciBtZWNoYW5pc20gaW4gY2FzZSBvZiB2ZXJ5IGxhcmdlCkBAIC0yNjMxLDcgKzI1MDksOCBAQAogCSAgICAvKiBNaXhlZCBjb250ZW50LCBmaXJzdCB0aW1lICovCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBYTUxfVEVYVF9OT0RFKSB7CiAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0geG1sU0FYMlRleHROb2RlKGN0eHQsIGNoLCBsZW4pOwotICAgICAgICAgICAgICAgIGxhc3RDaGlsZC0+ZG9jID0gY3R4dC0+bXlEb2M7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQtPmRvYyA9IGN0eHQtPm15RG9jOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbGFzdENoaWxkID0geG1sTmV3Q0RhdGFCbG9jayhjdHh0LT5teURvYywgY2gsIGxlbik7CiAJICAgIGlmIChsYXN0Q2hpbGQgIT0gTlVMTCkgewpAQCAtMjY0Myw2ICsyNTIyLDE5IEBACiAJICAgIH0KIAl9CiAgICAgfQorCisgICAgaWYgKChsYXN0Q2hpbGQgIT0gTlVMTCkgJiYKKyAgICAgICAgKHR5cGUgPT0gWE1MX1RFWFRfTk9ERSkgJiYKKyAgICAgICAgKGN0eHQtPmxpbmVudW1iZXJzKSAmJgorICAgICAgICAoY3R4dC0+aW5wdXQgIT0gTlVMTCkpIHsKKyAgICAgICAgaWYgKCh1bnNpZ25lZCkgY3R4dC0+aW5wdXQtPmxpbmUgPCAodW5zaWduZWQpIFVTSFJUX01BWCkKKyAgICAgICAgICAgIGxhc3RDaGlsZC0+bGluZSA9IGN0eHQtPmlucHV0LT5saW5lOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxhc3RDaGlsZC0+bGluZSA9IFVTSFJUX01BWDsKKyAgICAgICAgICAgIGlmIChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0JJR19MSU5FUykKKyAgICAgICAgICAgICAgICBsYXN0Q2hpbGQtPnBzdmkgPSAodm9pZCAqKSAocHRyZGlmZl90KSBjdHh0LT5pbnB1dC0+bGluZTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogLyoqCkBAIC0yNjcxLDExICsyNTYzLDYgQEAKIHZvaWQKIHhtbFNBWDJJZ25vcmFibGVXaGl0ZXNwYWNlKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCB4bWxDaGFyICpjaCBBVFRSSUJVVEVfVU5VU0VELCBpbnQgbGVuIEFUVFJJQlVURV9VTlVTRUQpCiB7Ci0gICAgLyogeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsgKi8KLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlNBWC54bWxTQVgySWdub3JhYmxlV2hpdGVzcGFjZSglLjMwcywgJWQpXG4iLCBjaCwgbGVuKTsKLSNlbmRpZgogfQogCiAvKioKQEAgLTI2OTYsMTggKzI1ODMsMTQgQEAKIAogICAgIGlmIChjdHggPT0gTlVMTCkgcmV0dXJuOwogICAgIHBhcmVudCA9IGN0eHQtPm5vZGU7Ci0jaWZkZWYgREVCVUdfU0FYCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJTQVgueG1sU0FYMlByb2Nlc3NpbmdJbnN0cnVjdGlvbiglcywgJXMpXG4iLCB0YXJnZXQsIGRhdGEpOwotI2VuZGlmCiAKICAgICByZXQgPSB4bWxOZXdEb2NQSShjdHh0LT5teURvYywgdGFyZ2V0LCBkYXRhKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHJldHVybjsKIAogICAgIGlmIChjdHh0LT5saW5lbnVtYmVycykgewogCWlmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSB7Ci0JICAgIGlmIChjdHh0LT5pbnB1dC0+bGluZSA8IFVTSFJUX01BWCkKLQkJcmV0LT5saW5lID0gKHVuc2lnbmVkIHNob3J0KSBjdHh0LT5pbnB1dC0+bGluZTsKKwkgICAgaWYgKCh1bnNpZ25lZCkgY3R4dC0+aW5wdXQtPmxpbmUgPCAodW5zaWduZWQpIFVTSFJUX01BWCkKKwkJcmV0LT5saW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7CiAJICAgIGVsc2UKIAkgICAgICAgIHJldC0+bGluZSA9IFVTSFJUX01BWDsKIAl9CkBAIC0yNzIwLDI1ICsyNjAzLDEyIEBACiAJcmV0dXJuOwogICAgIH0KICAgICBpZiAocGFyZW50ID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19TQVhfVFJFRQotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJTZXR0aW5nIFBJICVzIGFzIHJvb3RcbiIsIHRhcmdldCk7Ci0jZW5kaWYKICAgICAgICAgeG1sQWRkQ2hpbGQoKHhtbE5vZGVQdHIpIGN0eHQtPm15RG9jLCAoeG1sTm9kZVB0cikgcmV0KTsKIAlyZXR1cm47CiAgICAgfQogICAgIGlmIChwYXJlbnQtPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkgewotI2lmZGVmIERFQlVHX1NBWF9UUkVFCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJhZGRpbmcgUEkgJXMgY2hpbGQgdG8gJXNcbiIsIHRhcmdldCwgcGFyZW50LT5uYW1lKTsKLSNlbmRpZgogCXhtbEFkZENoaWxkKHBhcmVudCwgcmV0KTsKICAgICB9IGVsc2UgewotI2lmZGVmIERFQlVHX1NBWF9UUkVFCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJhZGRpbmcgUEkgJXMgc2libGluZyB0byAiLCB0YXJnZXQpOwotCXhtbERlYnVnRHVtcE9uZU5vZGUoc3RkZXJyLCBwYXJlbnQsIDApOwotI2VuZGlmCiAJeG1sQWRkU2libGluZyhwYXJlbnQsIHJldCk7CiAgICAgfQogfQpAQCAtMjc1OSwxNSArMjYyOSwxMiBAQAogCiAgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm47CiAgICAgcGFyZW50ID0gY3R4dC0+bm9kZTsKLSNpZmRlZiBERUJVR19TQVgKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlNBWC54bWxTQVgyQ29tbWVudCglcylcbiIsIHZhbHVlKTsKLSNlbmRpZgogICAgIHJldCA9IHhtbE5ld0RvY0NvbW1lbnQoY3R4dC0+bXlEb2MsIHZhbHVlKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHJldHVybjsKICAgICBpZiAoY3R4dC0+bGluZW51bWJlcnMpIHsKIAlpZiAoY3R4dC0+aW5wdXQgIT0gTlVMTCkgewotCSAgICBpZiAoY3R4dC0+aW5wdXQtPmxpbmUgPCBVU0hSVF9NQVgpCi0JCXJldC0+bGluZSA9ICh1bnNpZ25lZCBzaG9ydCkgY3R4dC0+aW5wdXQtPmxpbmU7CisJICAgIGlmICgodW5zaWduZWQpIGN0eHQtPmlucHV0LT5saW5lIDwgKHVuc2lnbmVkKSBVU0hSVF9NQVgpCisJCXJldC0+bGluZSA9IGN0eHQtPmlucHV0LT5saW5lOwogCSAgICBlbHNlCiAJICAgICAgICByZXQtPmxpbmUgPSBVU0hSVF9NQVg7CiAJfQpAQCAtMjc4MSwyNSArMjY0OCwxMiBAQAogCXJldHVybjsKICAgICB9CiAgICAgaWYgKHBhcmVudCA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfU0FYX1RSRUUKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiU2V0dGluZyB4bWxTQVgyQ29tbWVudCBhcyByb290XG4iKTsKLSNlbmRpZgogICAgICAgICB4bWxBZGRDaGlsZCgoeG1sTm9kZVB0cikgY3R4dC0+bXlEb2MsICh4bWxOb2RlUHRyKSByZXQpOwogCXJldHVybjsKICAgICB9CiAgICAgaWYgKHBhcmVudC0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7Ci0jaWZkZWYgREVCVUdfU0FYX1RSRUUKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJImFkZGluZyB4bWxTQVgyQ29tbWVudCBjaGlsZCB0byAlc1xuIiwgcGFyZW50LT5uYW1lKTsKLSNlbmRpZgogCXhtbEFkZENoaWxkKHBhcmVudCwgcmV0KTsKICAgICB9IGVsc2UgewotI2lmZGVmIERFQlVHX1NBWF9UUkVFCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJhZGRpbmcgeG1sU0FYMkNvbW1lbnQgc2libGluZyB0byAiKTsKLQl4bWxEZWJ1Z0R1bXBPbmVOb2RlKHN0ZGVyciwgcGFyZW50LCAwKTsKLSNlbmRpZgogCXhtbEFkZFNpYmxpbmcocGFyZW50LCByZXQpOwogICAgIH0KIH0KQEAgLTI4MjUsNiArMjY3OSw4IEBACiAgKiB4bWxTQVhEZWZhdWx0VmVyc2lvbjoKICAqIEB2ZXJzaW9uOiAgdGhlIHZlcnNpb24sIDEgb3IgMgogICoKKyAqIERFUFJFQ0FURUQ6IFVzZSBwYXJzZXIgb3B0aW9uIFhNTF9QQVJTRV9TQVgxLgorICoKICAqIFNldCB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mIFNBWCB1c2VkIGdsb2JhbGx5IGJ5IHRoZSBsaWJyYXJ5LgogICogQnkgZGVmYXVsdCwgZHVyaW5nIGluaXRpYWxpemF0aW9uIHRoZSBkZWZhdWx0IGlzIHNldCB0byAyLgogICogTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhIGJldHRlciBjb2Rpbmcgc3R5bGUgdG8gdXNlCkBAIC0yODU5LDIwICsyNzE1LDIzIEBACiB7CiAgICAgaWYgKGhkbHIgPT0gTlVMTCkgcmV0dXJuKC0xKTsKICAgICBpZiAodmVyc2lvbiA9PSAyKSB7Ci0JaGRsci0+c3RhcnRFbGVtZW50ID0gTlVMTDsKLQloZGxyLT5lbmRFbGVtZW50ID0gTlVMTDsKIAloZGxyLT5zdGFydEVsZW1lbnROcyA9IHhtbFNBWDJTdGFydEVsZW1lbnROczsKIAloZGxyLT5lbmRFbGVtZW50TnMgPSB4bWxTQVgyRW5kRWxlbWVudE5zOwogCWhkbHItPnNlcnJvciA9IE5VTEw7CiAJaGRsci0+aW5pdGlhbGl6ZWQgPSBYTUxfU0FYMl9NQUdJQzsKICNpZmRlZiBMSUJYTUxfU0FYMV9FTkFCTEVECiAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09IDEpIHsKLQloZGxyLT5zdGFydEVsZW1lbnQgPSB4bWxTQVgyU3RhcnRFbGVtZW50OwotCWhkbHItPmVuZEVsZW1lbnQgPSB4bWxTQVgyRW5kRWxlbWVudDsKIAloZGxyLT5pbml0aWFsaXplZCA9IDE7CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4oLTEpOworI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKKyAgICBoZGxyLT5zdGFydEVsZW1lbnQgPSB4bWxTQVgyU3RhcnRFbGVtZW50OworICAgIGhkbHItPmVuZEVsZW1lbnQgPSB4bWxTQVgyRW5kRWxlbWVudDsKKyNlbHNlCisgICAgaGRsci0+c3RhcnRFbGVtZW50ID0gTlVMTDsKKyAgICBoZGxyLT5lbmRFbGVtZW50ID0gTlVMTDsKKyNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCiAgICAgaGRsci0+aW50ZXJuYWxTdWJzZXQgPSB4bWxTQVgySW50ZXJuYWxTdWJzZXQ7CiAgICAgaGRsci0+ZXh0ZXJuYWxTdWJzZXQgPSB4bWxTQVgyRXh0ZXJuYWxTdWJzZXQ7CiAgICAgaGRsci0+aXNTdGFuZGFsb25lID0geG1sU0FYMklzU3RhbmRhbG9uZTsKQEAgLTI5MjUsNyArMjc4NCw3IEBACiAvKioKICAqIHhtbERlZmF1bHRTQVhIYW5kbGVySW5pdDoKICAqCi0gKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIHhtbEluaXRQYXJzZXIgdG8KKyAqIERFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvCiAgKiBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LgogICoKICAqIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgU0FYMiBoYW5kbGVyCkBAIC0yOTMzLDkgKzI3OTIsNiBAQAogdm9pZAogeG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0KHZvaWQpCiB7Ci0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotICAgIHhtbFNBWFZlcnNpb24oKHhtbFNBWEhhbmRsZXJQdHIpICZ4bWxEZWZhdWx0U0FYSGFuZGxlciwgMSk7Ci0jZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwogfQogCiAjaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRApAQCAtMjk4NiwxNSArMjg0MiwxMiBAQAogLyoqCiAgKiBodG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0OgogICoKLSAqIERFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sSW5pdFBhcnNlciB0bworICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIHhtbEluaXRQYXJzZXIgdG8KICAqIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuCi0gKgotICogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBTQVggaGFuZGxlcgogICovCiB2b2lkCiBodG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0KHZvaWQpCiB7Ci0gICAgeG1sU0FYMkluaXRIdG1sRGVmYXVsdFNBWEhhbmRsZXIoKHhtbFNBWEhhbmRsZXJQdHIpICZodG1sRGVmYXVsdFNBWEhhbmRsZXIpOwogfQogCiAjZW5kaWYgLyogTElCWE1MX0hUTUxfRU5BQkxFRCAqLwpkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTFjMzQuLjAwMDAwMDAKLS0tIGEvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0xMjQ5MDcgSFRNTCBwYXJzZSBidWZmZXIgcHJvYmxlbSB3aGVuIHBhcnNpbmcgbGFyc2UgaW4tbWVtb3J5IGRvY3MKLTEyNDExMCBEVEQgdmFsaWRhdGlvbiAmJiB3cm9uZyBuYW1lc3BhY2UKLTEyMzU2NCB4bWxsaW50IC0taHRtbCAtLWZvcm1hdAotCi0gICAgICAgICAgIFRPRE8gZm9yIHRoZSBYTUwgcGFyc2VyIGFuZCBzdHVmZjoKLQkgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICB0aGlzIHRlbmQgdG8gYmUgb3V0ZGF0ZWQgOi1cIC4uLgotCi1ET0NTOgotPT09PT0KLQotLSB1c2UgY2FzZSBvZiB1c2luZyBYSW5jbHVkZSB0byBsb2FkIGZvciBleGFtcGxlIGEgZGVzY3JpcHRpb24uCi0gIG9yZGVyIGRvY3VtZW50ICsgcHJvZHVjdCBiYXNlIC0oWFNMVCktPiBxdW90ZSB3aXRoIFhJbmNsdWRlcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgSFRNTCBvdXRwdXQgd2l0aCBkZXNjcmlwdGlvbiBvZiBwYXJ0cyA8LS0tKFhTTFQpLS0KLQotVE9ETzoKLT09PT09Ci0tIFhJbmNsdWRlIGF0IHRoZSBTQVggbGV2ZWwgKGxpYlNSVkcpCi0tIGZpeCB0aGUgQyBjb2RlIHByb3RvdHlwZSB0byBicmluZyBiYWNrIGRvYy9saWJ4bWwtdW5kb2N1bWVudGVkLnR4dAotICB0byBhIHJlYXNvbmFibGUgbGV2ZWwKLS0gQ29tcHV0YXRpb24gb2YgYmFzZSB3aGVuIEhUVFAgcmVkaXJlY3Qgb2NjdXJzLCBtaWdodCBhZmZlY3QgSFRUUAotICBpbnRlcmZhY2VzLgotLSBDb21wdXRhdGlvbiBvZiBiYXNlIGluIFhJbmNsdWRlLiBSZWxhdGl2aXphdGlvbiBvZiBVUklzLgotLSBsaXN0aW5nIGFsbCBhdHRyaWJ1dGVzIGluIGEgbm9kZS4KLS0gQmV0dGVyIGNoZWNraW5nIG9mIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcyBUQUcgMTIzNAotLSBHbyB0aHJvdWdoIGVycmF0YXMgYW5kIGRvIHRoZSBjbGVhbnVwLgotICBodHRwOi8vd3d3LnczLm9yZy9YTUwveG1sLTE5OTgwMjEwLWVycmF0YSAuLi4gc3RhcnRlZCAuLi4KLS0gamFtZXNoIHN1Z2dlc3Rpb246IFNBWCBsaWtlIGZ1bmN0aW9ucyB0byBzYXZlIGEgZG9jdW1lbnQgaWUuIGNhbGwgYQotICBmdW5jdGlvbiB0byBvcGVuIGEgbmV3IGVsZW1lbnQgd2l0aCBnaXZlbiBhdHRyaWJ1dGVzLCB3cml0ZSBjaGFyYWN0ZXIKLSAgZGF0YSwgY2xvc2UgbGFzdCBlbGVtZW50LCBldGMKLSAgKyBpbnZlcnN0ZWQgU0FYLCBpbml0aWFsIHBhdGNoIGluIEFwcmlsIDIwMDIgYXJjaGl2ZXMuCi0tIGh0bWxQYXJzZURvYyBoYXMgcGFyYW1ldGVyIGVuY29kaW5nIHdoaWNoIGlzIG5vdCB1c2VkLgotICBGdW5jdGlvbiBodG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCBpZ25vcmUgaXQuCi0tIGZpeCByZWFsbG9jKCkgdXNhZ2UuCi0tIFN0cmljdGVuIHRoZSBVVEY4IGNvbmZvcm1hbmNlIChNYXJ0aW4gRHVlcnN0KToKLSAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNi91dGYtOC10ZXN0Ly4KLSAgVGhlIGJhZCBmaWxlcyBhcmUgaW4gaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNi91dGYtOC13cm9uZy8uCi0tIHhtbDppZCBub3JtYWxpemVkIHZhbHVlCi0KLVRPRE86Ci09PT09PQotCi0tIG1vdmUgYWxsIHN0cmluZyBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICh4bWxTdHJkdXAsIHhtbFN0cmxlbiwgZXRjLikgdG8KLSAgZ2xvYmFsLmMuIEJqb3JuIG5vdGVkIHRoYXQgdGhlIGZvbGxvd2luZyBmaWxlcyBkZXBlbmRzIG9uIHBhcnNlci5vIHNvbGVseQotICBiZWNhdXNlIG9mIHRoZXNlIHN0cmluZyBmdW5jdGlvbnM6IGVudGl0aWVzLm8sIGdsb2JhbC5vLCBoYXNoLm8sIHRyZWUubywKLSAgeG1sSU8ubywgYW5kIHhwYXRoLm8uCi0KLS0gT3B0aW1pemF0aW9uIG9mIHRhZyBzdHJpbmdzIGFsbG9jYXRpb24gPwotCi0tIG1haW50YWluIGNvaGVyZW5jeSBvZiBuYW1lc3BhY2Ugd2hlbiBkb2luZyBjdXQnbiBwYXN0ZSBvcGVyYXRpb25zCi0gID0+IHRoZSBmdW5jdGlvbnMgYXJlIGNvZGVkLCBidXQgbmVlZCB0ZXN0aW5nCi0KLS0gZnVuY3Rpb24gdG8gcmVidWlsZCB0aGUgSUQgdGFibGUKLS0gZnVuY3Rpb25zIHRvIHJlYnVpbGQgdGhlIERURCBoYXNoIHRhYmxlcyAoYWZ0ZXIgRFREIGNoYW5nZXMpLgotICAgCi0KLUVYVEVOU0lPTlM6Ci09PT09PT09PT09PQotCi0tIFRvb2xzIHRvIHByb2R1Y2UgbWFuIHBhZ2VzIGZyb20gdGhlIFNHTUwgZG9jcy4KLQotLSBBZGQgWHBvaW50ZXIgcmVjb2duaXRpb24vQVBJCi0KLS0gQWRkIFhsaW5rIHJlY29nbml0aW9uL0FQSQotICA9PiBzdGFydGVkIGFkZGluZyBhbiB4bGluay5bY2hdIHdpdGggYSB1bmlmaWVkIEFQSSBmb3IgWE1MIGFuZCBIVE1MLgotICAgICBpdCdzIGNyYXAgOi0oCi0KLS0gSW1wbGVtZW50IFhTY2hlbWFzCi0gID0+IFJlYWxseSBuZWVkIHRvIGJlIGRvbmUgPGdyaW4vPgotICAtIGRhdGF0eXBlIGFyZSBjb21wbGV0ZSwgYnV0IHN0cnVjdHVyZSBzdXBwb3J0IGlzIHZlcnkgbGltaXRlZC4KLQotLSBleHRlbmQgdGhlIHNoZWxsIHdpdGg6Ci0gICAtIGVkaXQKLSAgIC0gbG9hZC9zYXZlCi0gICAtIG12ICh5dW0sIHl1bSwgYnV0IGl0J3MgaGFyZGVyIGJlY2F1c2UgZGlyZWN0b3JpZXMgYXJlIG9yZGVyZWQgaW4KLSAgICAgb3VyIGNhc2UsIG12dXAgYW5kIG12ZG93biB3b3VsZCBiZSByZXF1aXJlZCkKLQotCi1Eb25lOgotPT09PT0KLQotLSBBZGQgSFRNTCB2YWxpZGF0aW9uIHVzaW5nIHRoZSBYSFRNTCBEVEQKLSAgLSBwcm9ibGVtOiBkbyB3ZSB3YW50IHRvIGtlZXAgYW5kIG1haW50YWluIHRoZSBjb2RlIGZvciBoYW5kbGluZwotICAgIERURC9TeXN0ZW0gSUQgY2FjaGUgZGlyZWN0bHkgaW4gbGlieG1sID8KLSAgPT4gbm90IHJlYWxseSBkb25lIHRoYXQgd2F5LCBidXQgdGhlcmUgYXJlIG5ldyBBUElzIHRvIGNoZWNrIGVsZW1lbnRzCi0gICAgIG9yIGF0dHJpYnV0ZXMuIE90aGVyd2lzZSBYSFRNTCB2YWxpZGF0aW9uIGRpcmVjdGx5IC4uLgotCi0tIFhNTCBTY2hlbWFzIGRhdGF0eXBlcyBleGNlcHQgQmFzZTY0IGFuZCBCaW5IZXgKLQotLSBSZWxheCBORyB2YWxpZGF0aW9uCi0KLS0gWG1sVGV4dFJlYWRlciBzdHJlYW1pbmcgQVBJICsgdmFsaWRhdGlvbgotCi0tIEFkZCBhIERURCBjYWNoZSBwcmVmaWxsZWQgd2l0aCB4aHRtbCBEVERzIGFuZCBlbnRpdGllcyBhbmQgYSBwcm9ncmFtIHRvCi0gIG1hbmFnZSB0aGVtIC0+IGxpa2UgdGhlIC91c3IvYmluL2luc3RhbGwtY2F0YWxvZyBmcm9tIFNHTUwKLSAgcmlnaHQgcGxhY2Ugc2VlbXMgJGRhdGFkaXIveG1sZHRkcwotICBNYXliZSB0aGlzIGlzIGJldHRlciBsZWZ0IHRvIHVzZXIgYXBwcwotICA9PiB1c2UgYSBjYXRhbG9nIGluc3RlYWQgLCBhbmQgeGh0bWwxLWR0ZCBwYWNrYWdlCi0KLS0gQWRkIG91dHB1dCB0byBYSFRNTAotICA9PiBYTUwgc2VyaWFsaXplciBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZSB0aGUgRFRkIGFuZCBhcHBseSB0aGUgc3BlY2lmaWMKLSAgICAgcnVsZXMuCi0KLS0gRml4IG91dHB1dCBvZiA8dHN0IHZhbD0ieCYjeEE7eSIvPgotCi0tIGNvbXBsaWFuY2UgdG8gWE1MLU5hbWVzcGFjZSBjaGVja2luZywgc2VlIHNlY3Rpb24gNiBvZgotICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLwotCi0tIENvcnJlY3Qgc3RhbmRhbG9uZSBjaGVja2luZy9lbWl0dGluZyAoaGFyZCkKLSAgMi45IFN0YW5kYWxvbmUgRG9jdW1lbnQgRGVjbGFyYXRpb24KLQotLSBJbXBsZW1lbnQgT0FTSVMgWE1MIENhdGFsb2cgc3VwcG9ydAotICBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5LwotCi0tIEdldCBPQVNJUyB0ZXN0c3VpdGUgdG8gYSBtb3JlIGZyaWVuZGx5IHJlc3VsdCwgY2hlY2sgYWxsIHRoZSByZXN1bHRzCi0gIG9uY2Ugc3RhYmxlLiB0aGUgY2hlY2steG1sLXRlc3Qtc3VpdGUucHkgc2NyaXB0IGRvZXMgdGhpcwotCi0tIEltcGxlbWVudCBYU0xUCi0gID0+IGxpYnhzbHQKLQotLSBGaW5pc2ggWFBhdGgKLSAgPT4gYXR0cmlidXRlcyBhZGRyZXNzaW5nIHRyb3VibGVzCi0gID0+IGRlZmF1bHRlZCBhdHRyaWJ1dGVzIGhhbmRsaW5nCi0gID0+IG5hbWVzcGFjZSBheGlzID8KLSAgZG9uZSBhcyBYU0xUIGdvdCBkZWJ1Z2dlZAotCi0tIGJ1ZyByZXBvcnRlZCBieSBNaWNoYWVsIE1lYWxsaW4gb24gdmFsaWRhdGlvbiBwcm9ibGVtcwotICA9PiBBY3R1YWxseSBtZWFucyBJIG5lZWQgdG8gYWRkIHN1cHBvcnQgKGFuZCB3YXJuKSBmb3Igbm9uLWRldGVybWluaXN0aWMKLSAgICAgY29udGVudCBtb2RlbC4KLS0gSGFuZGxlIHVuZGVmaW5lZCBuYW1lc3BhY2VzIGluIGVudGl0eSBjb250ZW50cyBiZXR0ZXIgLi4uIGF0IGxlYXN0Ci0gIGlzc3VlIGEgd2FybmluZwotLSBET00gbmVlZHMKLSAgaW50IHhtbFBydW5lUHJvcCh4bWxOb2RlUHRyIG5vZGUsIHhtbEF0dHRyUHRyIGF0dHIpOwotICA9PiBkb25lIGl0J3MgYWN0dWFsbHkgeG1sUmVtb3ZlUHJvcCB4bWxVbnNldFByb3AgeG1sVW5zZXROc1Byb3AKLQotLSBIVE1MOiBoYW5kbGluZyBvZiBTY3JpcHQgYW5kIHN0eWxlIGRhdGEgZWxlbWVudHMsIG5lZWQgc3BlY2lhbCBjb2RlIGluCi0gIHRoZSBwYXJzZXIgYW5kIHNhdmluZyBmdW5jdGlvbnMgKGhhbmRsaW5nIG9mIDwgPiAiICcgLi4uKToKLSAgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvdHlwZXMuaHRtbCN0eXBlLXNjcmlwdAotICBBdHRyaWJ1dGVzIGFyZSBubyBwcm9ibGVtcyBzaW5jZSBlbnRpdGllcyBhcmUgYWNjZXB0ZWQuCi0tIERPTSBuZWVkcwotICB4bWxBdHRyUHRyIHhtbE5ld0RvY1Byb3AoeG1sRG9jUHRyIGRvYywgY29uc3QgeG1sQ2hhciAqbmFtZSwgY29uc3QgeG1sQ2hhciAqdmFsdWUpCi0tIHByb2JsZW0gd2hlbiBwYXJzaW5nIGhyZWZzIHdpdGggJiB3aXRoIHRoZSBIVE1MIHBhcnNlciAoSVJDIGFjKQotLSBJZiB0aGUgaW50ZXJuYWwgZW5jb2RpbmcgaXMgbm90IFVURjggc2F2aW5nIHRvIGEgZ2l2ZW4gZW5jb2RpbmcgZG9lc24ndAotICB3b3JrID0+IGZpeCB0byBmb3JjZSBVVEY4IGVuY29kaW5nIC4uLgotICBkb25lLCBhZGRlZCBkb2N1bWVudGF0aW9uIHRvbwotLSBBZGQgYW4gQVNDSUkgSS9PIGVuY29kZXIgKGFzY2lpVG9VVEY4IGFuZCBVVEY4VG9hc2NpaSkKLS0gSXNzdWUgd2FybmluZyB3aGVuIHVzaW5nIG5vbi1hYnNvbHV0ZSBuYW1lc3BhY2VzIFVSSS4KLS0gdGhlIGh0bWwgcGFyc2VyIHNob3VsZCBhZGQgPGhlYWQ+IGFuZCA8Ym9keT4gaWYgdGhleSBkb24ndCBleGlzdAotICBzdGFydGVkLCBub3QgZmluaXNoZWQuCi0gIERvbmUsIHRoZSBhdXRvbWF0aWMgY2xvc2luZyBpcyBhZGRlZCBhbmQgMyB0ZXN0Y2FzZXMgd2VyZSBpbnNlcnRlZAotLSBDb21tYW5kIHRvIGZvcmNlIHRoZSBwYXJzZXIgdG8gc3RvcCBwYXJzaW5nIGFuZCBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGZpbGUuCi0gIHhtbFN0b3BQYXJzZXIoKSBzaG91bGQgYWxsb3cgdGhpcywgbW9zdGx5IHVudGVzdGVkCi0tIHN1cHBvcnQgZm9yIEhUTUwgZW1wdHkgYXR0cmlidXRlcyBsaWtlIDxociBub3NoYWRlPgotLSBwbHVnZ2VkIGljb252KCkgaW4gZm9yIHN1cHBvcnQgb2YgYSBsYXJnZSBzZXQgb2YgZW5jb2RpbmdzLgotLSB4bWxTd2l0Y2hUb0VuY29kaW5nKCkgcmV3cml0ZSBkb25lCi0tIFVSSSBjaGVja2luZ3MgKG5vIGZyYWdtZW50cykgcmZjMjM5Ni50eHQKLS0gQWRkZWQgYSBjbGVhbiBtZWNoYW5pc20gZm9yIG92ZXJsb2FkIG9yIGFkZGVkIGlucHV0IG1ldGhvZHM6Ci0gIHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MoKQotLSBkeW5hbWljYWxseSBhZGFwdCB0aGUgYWxsb2MgZW50cnkgcG9pbnQgdG8gdXNlIGdfYWxsb2MoKS9nX2ZyZWUoKQotICBpZiB0aGUgcHJvZ3JhbW1lciB3YW50cyBpdDogCi0gICAgLSB1c2UgeG1sTWVtU2V0dXAoKSB0byByZXNldCB0aGUgcm91dGluZXMgdXNlZC4KLS0gQ2hlY2sgYXR0cmlidXRlIG5vcm1hbGl6YXRpb24gZXNwZWNpYWxseSB4bWxHZXRQcm9wKCkKLS0gVmFsaWRpdHkgY2hlY2tpbmcgcHJvYmxlbXMgZm9yIE5PVEFUSU9OUyBhdHRyaWJ1dGVzCi0tIFZhbGlkaXR5IGNoZWNraW5nIHByb2JsZW1zIGZvciBFTlRJVFkgRU5USVRJRVMgYXR0cmlidXRlcwotLSBQYXJzaW5nIG9mIGEgd2VsbCBiYWxhbmNlZCBjaHVuayB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoKQotLSBVUkkgbW9kdWxlOiB2YWxpZGF0aW9uLCBiYXNlLCBldGMgLi4uIHNlZSB1cmkuW2NoXQotLSB0dXJuIHRlc3RlciBpbnRvIGEgZ2VuZXJpYyBwcm9ncmFtIHhtbGxpbnQgaW5zdGFsbGVkIHdpdGggbGlieG1sCi0tIGV4dGVuZCB2YWxpZGl0eSBjaGVja3MgdG8gZ28gdGhyb3VnaCBlbnRpdGllcyBjb250ZW50IGluc3RlYWQgb2YKLSAganVzdCBsYWJlbGxpbmcgdGhlbSBQQ0RBVEEKLS0gU2F2ZSBEdGRzIHVzaW5nIHRoZSBjaGlsZHJlbiBsaXN0IGluc3RlYWQgb2YgZHVtcGluZyB0aGUgdGFibGVzLAotICBvcmRlciBpcyBwcmVzZXJ2ZWQgYXMgd2VsbCBhcyBjb21tZW50cyBhbmQgUElzCi0tIFdyb3RlIGEgbm90aWNlIG9mIGNoYW5nZXMgcmVxdWlyZXMgdG8gZ28gZnJvbSAxLnggdG8gMi54Ci0tIG1ha2Ugc3VyZSB0aGF0IGFsbCBTQVggY2FsbGJhY2tzIGFyZSBkaXNhYmxlZCBpZiBhIFdGIGVycm9yIGlzIGRldGVjdGVkCi0tIGNoZWNraW5nL2hhbmRsaW5nIG9mIG5ld2xpbmUgbm9ybWFsaXphdGlvbgotICBodHRwOi8vbG9jYWxob3N0L3d3dy54bWwuY29tL2F4bWwvdGFyZ2V0Lmh0bWwjc2VjLWxpbmUtZW5kcwotLSBjb3JyZWN0IGNoZWNraW5nIG9mICcmJyAnJScgb24gZW50aXRpZXMgY29udGVudC4KLS0gY2hlY2tpbmcgb2YgUEUvTmVzdGluZyBvbiBlbnRpdGllcyBkZWNsYXJhdGlvbgotLSBjaGVja2luZy9oYW5kbGluZyBvZiB4bWw6c3BhY2UKLSAgIC0gY2hlY2tpbmcgZG9uZS4KLSAgIC0gaGFuZGxpbmcgZG9uZSwgbm90IHdlbGwgdGVzdGVkCi0tIExhbmd1YWdlIGlkZW50aWZpY2F0aW9uIGNvZGUsIHByb2R1Y3Rpb25zIFszM10gdG8gWzM4XQotICA9PiBkb25lLCB0aGUgY2hlY2sgaGFzIGJlZW4gYWRkZWQgYW5kIHJlcG9ydCBXRm5lc3MgZXJyb3JzCi0tIENvbmRpdGlvbmFsIHNlY3Rpb25zIGluIERURHMgWzYxXSB0byBbNjVdCi0gID0+IHNob3VsZCB0aGlzIGNyYXAgYmUgcmVhbGx5IGltcGxlbWVudGVkID8/PwotICA9PiBZZXAgT0FTSVMgdGVzdHN1aXRlIHVzZXMgdGhlbQotLSBBbGxvdyBwYXJzZWQgZW50aXRpZXMgZGVmaW5lZCBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0IHRvIG92ZXJyaWRlCi0gIHRoZSBvbmVzIGRlZmluZWQgaW4gdGhlIGV4dGVybmFsIHN1YnNldCAoRHREIGN1c3RvbWl6YXRpb24pLgotICA9PiBUaGlzIG1lYW4gdGhhdCB0aGUgZW50aXR5IGNvbnRlbnQgc2hvdWxkIGJlIGNvbXB1dGVkIG9ubHkgYXQKLSAgICAgdXNlIHRpbWUsIGkuZS4ga2VlcCB0aGUgb3JpZyBzdHJpbmcgb25seSBhdCBwYXJzZSB0aW1lIGFuZCBleHBhbmQKLSAgICAgb25seSB3aGVuIHJlZmVyZW5jZWQgZnJvbSB0aGUgZXh0ZXJuYWwgc3Vic2V0IDotKAotICAgICBOZWVkZWQgZm9yIGNvbXBsZXRlIHVzZSBvZiBtb3N0IERURCBmcm9tIEV2ZSBNYWxlcgotLSBBZGQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYWxsIFdGQyBlcnJvcnMKLSAgPT4gZGlkIHNvbWUgaW4gdGVzdC9XRkMKLSAgPT4gYWRkZWQgT0FTSVMgdGVzdHN1aXRlIHJvdXRpbmVzCi0gICAgIGh0dHA6Ly94bWxzb2Z0Lm9yZy9jb25mL3Jlc3VsdC5odG1sCi0KLS0gSTE4TjogaHR0cDovL3dhcC50cm9uZGhlaW0uY29tL3ZhZXIvaW5kZXgucGh0bWwgaXMgbm90IFhNTCBhbmQgYWNjZXB0ZWQKLSAgYnkgdGhlIFhNTCBwYXJzZXIsIFVURi04IHNob3VsZCBiZSBjaGVja2VkIHdoZW4gdGhlcmUgaXMgbm8gImVuY29kaW5nIgotICBkZWNsYXJlZCAhCi0tIFN1cHBvcnQgZm9yIFVURi04IGFuZCBVVEYtMTYgZW5jb2RpbmcKLSAgPT4gYWRkZWQgc29tZSBjb252ZXJzaW9uIHJvdXRpbmVzIHByb3ZpZGVkIGJ5IE1hcnRpbiBEdXJzdAotICAgICBwYXRjaGVkIHRoZW0sIGdvdCBmaXhlcyBmcm9tIEBAQAotICAgICBJIHBsYW4gdG8ga2VlcCBldmVyeXRoaW5nIGludGVybmFsbHkgYXMgVVRGLTggKG9yIElTTy1MYXRpbi1YKQotICAgICB0aGlzIGlzIHNsaWdodGx5IG1vcmUgY29zdGx5IGJ1dCBtb3JlIGNvbXBhY3QsIGFuZCByZWNlbnQgcHJvY2Vzc29ycwotICAgICBlZmZpY2llbmN5IGlzIGNhY2hlIHJlbGF0ZWQuIFRoZSBrZXkgZm9yIGdvb2QgcGVyZm9ybWFuY2VzIGlzIGtlZXBpbmcKLSAgICAgdGhlIGRhdGEgc2V0IHNtYWxsLCBzbyB3aWxsIEkuCi0gID0+IHRoZSBuZXcgcHJvZ3Jlc3NpdmUgcmVhZGluZyByb3V0aW5lcyBjYWxsIHRoZSBkZXRlY3Rpb24gY29kZQotICAgICBpcyBlbmFibGVkLCB0ZXN0ZWQgdGhlIElTTy0+VVRGLTggc3R1ZmYKLS0gRXh0ZXJuYWwgZW50aXRpZXMgbG9hZGluZzogCi0gICAtIGFsbG93IG92ZXJyaWRlIGJ5IGNsaWVudCBjb2RlCi0gICAtIG1ha2Ugc3VyZSBpdCBpcyBjYWxsZWQgZm9yIGFsbCBleHRlcm5hbCBlbnRpdGllcyByZWZlcmVuY2VkCi0gIERvbmUsIGNsaWVudCBjb2RlIHNob3VsZCB1c2UgeG1sU2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoKSB0byBzZXQKLSAgdGhlIGRlZmF1bHQgbG9hZGluZyByb3V0aW5lLiBJdCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYW4gZXh0ZXJuYWwKLSAgZW50aXR5IGVudGl0eSByZXNvbHV0aW9uIGlzIHRyaWdnZXJlZC4KLS0gbWFpbnRhaW4gSUQgY29oZXJlbmN5IHdoZW4gcmVtb3ZpbmcvY2hhbmdpbmcgYXR0cmlidXRlcwotICBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWFsbG9jYXRlIGF0dHJpYnV0ZXMgbm93IGNoZWNrIGZvciBpdCBiZWluZyBhbgotICBJRCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSB0YWJsZS4KLS0gcHVzaCBtb2RlIHBhcnNpbmcgaS5lLiBub24tYmxvY2tpbmcgc3RhdGUgYmFzZWQgcGFyc2VyCi0gIGRvbmUsIGJvdGggZm9yIFhNTCBhbmQgSFRNTCBwYXJzZXJzLiBVc2UgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKQotICBhbmQgeG1sUGFyc2VDaHVuaygpIGFuZCBodG1sIGNvdW50ZXJwYXJ0cy4KLSAgVGhlIHRlc3RlciBwcm9ncmFtIG5vdyBoYXMgYSAtLXB1c2ggb3B0aW9uIHRvIHNlbGVjdCB0aGF0IHBhcnNlciAKLSAgZnJvbnQtZW5kLiBEb3VwbGljYXRlZCB0ZXN0cyB0byB1c2UgYm90aCBhbmQgY2hlY2sgcmVzdWx0cyBhcmUgc2ltaWxhci4KLQotLSBNb3N0IG9mIFhQYXRoLCBzdGlsbCBzZWUgc29tZSB0cm91YmxlcyBhbmQgb2NjYXNpb25uYWwgbWVtbGVha3MuCi0tIGFuIFhNTCBzaGVsbCwgYWxsb3dpbmcgdG8gdHJhdmVyc2UvbWFuaXB1bGF0ZSBhbiBYTUwgZG9jdW1lbnQgd2l0aAotICBhIHNoZWxsIGxpa2UgaW50ZXJmYWNlLCBhbmQgdXNpbmcgWFBhdGggZm9yIHRoZSBhbm1pbmcgc3ludGF4Ci0gIC0gdXNlIG9mIHJlYWRsaW5lIGFuZCBoaXN0b3J5IGFkZGVkIHdoZW4gYXZhaWxhYmxlCi0gIC0gdGhlIHNoZWxsIGludGVyZmFjZSBoYXMgYmVlbiBjbGVhbmx5IHNlcGFyYXRlZCBhbmQgbW92ZWQgdG8gZGVidWdYTUwuYwotLSBIVE1MIHBhcnNlciwgc2hvdWxkIGJlIGZhaXJseSBzdGFibGUgbm93Ci0tIEFQSSB0byBzZWFyY2ggdGhlIGxhbmcgb2YgYW4gYXR0cmlidXRlCi0tIENvbGxlY3QgSURzIGF0IHBhcnNpbmcgYW5kIG1haW50YWluIGEgdGFibGUuIAotICAgUEJNOiBtYWludGFpbiB0aGUgdGFibGUgY29oZXJlbmN5Ci0gICBQQk06IGhvdyB0byBkZXRlY3QgSUQgdHlwZXMgaW4gYWJzZW5jZSBvZiBEdEQgIQotLSBVc2UgaXQgZm9yIFhQYXRoIElEIHN1cHBvcnQKLS0gQWRkIHZhbGlkaXR5IGNoZWNraW5nCi0gIFNob3VsZCBiZSBmaW5pc2hlZCBub3cgIQotLSBBZGQgcmVncmVzc2lvbiB0ZXN0cyB3aXRoIGVudGl0eSBzdWJzdGl0dXRpb25zCi0KLS0gRXh0ZXJuYWwgUGFyc2VkIGVudGl0aWVzLCBlaXRoZXIgWE1MIG9yIGV4dGVybmFsIFN1YnNldCBbNzhdIGFuZCBbNzldCi0gIHBhcnNpbmcgdGhlIHhtbGxhbmcgRHREIG5vdyB3b3Jrcywgc28gaXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yCi0gIG1vc3QgY2FzZXMgIQotCi0tIHByb2dyZXNzaXZlIHJlYWRpbmcuIFRoZSBlbnRpdHkgc3VwcG9ydCBpcyBhIGZpcnN0IHN0ZXAgdG93YXJkCi0gIGFic3RyYWN0aW9uIG9mIGFuIGlucHV0IHN0cmVhbS4gQSBsYXJnZSBwYXJ0IG9mIHRoZSBjb250ZXh0IGlzIHN0aWxsCi0gIGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBtb3ZpbmcgdG8gYSBzdGF0ZSBtYWNoaW5lIGFuZCBwdXR0aW5nIGV2ZXJ5dGhpbmcKLSAgaW4gdGhlIHBhcnNpbmcgY29udGV4dCBzaG91bGQgcHJvdmlkZSBhbiBhZGVxdWF0ZSBzb2x1dGlvbi4KLSAgPT4gUmF0aGVyIHRoYW4gcHJvZ3Jlc3NpdmUgcGFyc2luZywgZ2l2ZSBtb3JlIHBvd2VyIHRvIHRoZSBTQVgtbGlrZQotICAgICBpbnRlcmZhY2UuIEN1cnJlbnRseSB0aGUgRE9NLWxpa2UgcmVwcmVzZW50YXRpb24gaXMgYnVpbHQgYnV0Ci0gICAgID0+IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkZWZpbmUgdGhhdCBvbmx5IGFzIGEgc2V0IG9mIFNBWCBjYWxsYmFja3MKLQlhbmQgcmVtb3ZlIHRoZSB0cmVlIGNyZWF0aW9uIGZyb20gdGhlIHBhcnNlciBjb2RlLgotCURPTkUKLQotLSBET00gc3VwcG9ydCwgaW5zdGVhZCBvZiB1c2luZyBhIHByb3ByaWV0YXJ5IGluIG1lbW9yeQotICBmb3JtYXQgZm9yIHRoZSBkb2N1bWVudCByZXByZXNlbnRhdGlvbiwgdGhlIHBhcnNlciBzaG91bGQKLSAgY2FsbCBhIERPTSBBUEkgdG8gYWN0dWFsbHkgYnVpbGQgdGhlIHJlc3VsdGluZyBkb2N1bWVudC4KLSAgVGhlbiB0aGUgcGFyc2VyIGJlY29tZXMgaW5kZXBlbmRlbnQgb2YgdGhlIGluLW1lbW9yeQotICByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQuIEV2ZW4gYmV0dGVyIHVzaW5nIFJQQydzCi0gIHRoZSBwYXJzZXIgY2FuIGFjdHVhbGx5IGJ1aWxkIHRoZSBkb2N1bWVudCBpbiBhbm90aGVyCi0gIHByb2dyYW0uCi0gID0+IFdvcmsgc3RhcnRlZCwgbm93IHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpcyBieSBkZWZhdWx0Ci0gICAgIHZlcnkgbmVhciBhIGRpcmVjdCBET00gaW1wbGVtZW50YXRpb24uIFRoZSBET00gZ2x1ZSBpcyBpbXBsZW1lbnRlZAotICAgICBhcyBhIHNlcGFyYXRlIG1vZHVsZS4gU2VlIHRoZSBHTk9NRSBnZG9tZSBtb2R1bGUuCi0KLS0gQysrIHN1cHBvcnQgOiBKb2huIEVocmVzbWFuIDxqZWhyZXNtYUBkc2cuaGFydmFyZC5lZHU+Ci0tIFVwZGF0ZWQgY29kZSB0byBmb2xsb3cgbW9yZSByZWNlbnQgc3BlY3MsIGFkZGVkIGNvbXBhdGliaWxpdHkgZmxhZwotLSBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcsIHVzZSBhIGRlZGljYXRlZCwgb3ZlcnJpZGFibGUgZXJyb3IKLSAgaGFuZGxpbmcgZnVuY3Rpb24uCi0tIFN1cHBvcnQgZm9yIENEQVRBLgotLSBLZWVwIHRyYWNrIG9mIGxpbmUgbnVtYmVycyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZy4KLS0gU3VwcG9ydCBmb3IgUEkgKFNBWCBvbmUpLgotLSBTdXBwb3J0IGZvciBDb21tZW50cyAoYmFkLCBzaG91bGQgYmUgaW4gQVNBUCwgdGhleSBhcmUgcGFyc2VkCi0gIGJ1dCBub3Qgc3RvcmVkKSwgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZS4KLS0gSW1wcm92ZSB0aGUgc3VwcG9ydCBvZiBlbnRpdGllcyBvbiBzYXZlICgrU0FYKS4KLQpkaWZmIC0tZ2l0IGEvVE9ET19TQ0hFTUFTIGIvVE9ET19TQ0hFTUFTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDVhNGVkLi4wMDAwMDAwCi0tLSBhL1RPRE9fU0NIRU1BUworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS0gaW1wbGVtZW50IGNvdW50ZWQgdHJhbnNpdGlvbnMgYXQgdGhlIGF1dG9tYXRhIGxldmVsCi0KLS0gVW5pY29kZToKLSAgKyB1cGdyYWRlIHRvIDMuMgotICArIGltcHJvdmUgdGhlIHB5dGhvbiBzY3JpcHQgdG8gZ2VuZXJhdGUgYmV0dGVyIHRlc3QKLSAgICBleHByZXNzaW9ucyB0byBjaGVjayB0aGUgbGlzdCBvZiByYW5nZXMuCi0KLS0gSW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgYXQgdGhlIFNBWCBsZXZlbAotCi0tIEltcGxlbWVudCB0aGUgbWlzc2luZyBwYXJ0cyBpbiB0aGUgU3RydWN0dXJlIHBhcnQKLSAgICsgYWxsIGNvbnRlbnQgbW9kZWwKLSAgICsgZW51bWVyYXRpb25zCi0gICArIGNvdW50bGVzcyBvdGhlcnMgYy5mLiB0aGUgVE9ETyBzY2F0dGVyZWQgaW4gdGhlIGNvZGUKLQotLSBDb21wbGV0ZSB0aGUgQnVpbHQtSW4gZGF0YXR5cGUgY29sbGVjdGlvbnMgYW5kIEZhY2V0cyBpbXBsZW1lbnRhdGlvbnMKLQotLSBSZWdyZXNzaW9uIHRlc3RzIGJhc2VkIG9uCi0gICsgdGhlIHByaW1lcjoKLSAgICBodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMC8KLSAgKyB0aGUgU2NoZW1hcyBUZXN0IENvbGxlY3Rpb246Ci0gICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNS94bWxzY2hlbWEtdGVzdC1jb2xsZWN0aW9uLwotICArIGFyY2hpdmVzIG9mIHRoZSBzY2hlbWFzLWRldiBsaXN0Ci0KLS0gSW50ZWdyaXR5IGNvbnN0cmFpbnRzOgotICArIHdoYXQncyB0aGF0ID8gSG93IG5lZWQgdG8gcmVhZCBhYm91dCBpdAotCi0tICJmb3JtYWwiIGNoZWNraW5nLCBpLmUuIGdvIHRocm91Z2ggdGhlIGZ1bGwgU3RydWN0dXJlIHNwZWMgYW5kCi0gIGJpbmQgY29kZSBhbmQgYXNzb2NpYXRlZCBwYXJ0cyBvZiB0aGUgU2NoZW1hcyBzcGVjCi0KLS0gZ28gdGhvdWdoIHRoZSBlcnJhdGFzCi0gIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDUveG1sc2NoZW1hLWVycmF0YQpkaWZmIC0tZ2l0IGEvYnVmLmMgYi9idWYuYwppbmRleCA2NzQ5ZDk3Li4yNjYzOTVmIDEwMDY0NAotLS0gYS9idWYuYworKysgYi9idWYuYwpAQCAtMjEsMTAgKzIxLDEwIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+IC8qIGZvciBYTUxfTUFYX1RFWFRfTEVOR1RIICovCi0jaW5jbHVkZSAiYnVmLmgiCisKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKIAogI2lmbmRlZiBTSVpFX01BWAogI2RlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICByZXQtPnNpemUgPSB4bWxEZWZhdWx0QnVmZmVyU2l6ZTsKICAgICBVUERBVEVfQ09NUEFUKHJldCk7CiAgICAgcmV0LT5hbGxvYyA9IHhtbEJ1ZmZlckFsbG9jU2NoZW1lOwotICAgIHJldC0+Y29udGVudCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhyZXQtPnNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIHJldC0+Y29udGVudCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhyZXQtPnNpemUpOwogICAgIGlmIChyZXQtPmNvbnRlbnQgPT0gTlVMTCkgewogCXhtbEJ1Zk1lbW9yeUVycm9yKHJldCwgImNyZWF0aW5nIGJ1ZmZlciIpOwogCXhtbEZyZWUocmV0KTsKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgIHJldC0+c2l6ZSA9IChzaXplID8gc2l6ZSArIDEgOiAwKTsgICAgICAgICAvKiArMSBmb3IgZW5kaW5nIG51bGwgKi8KICAgICBVUERBVEVfQ09NUEFUKHJldCk7CiAgICAgaWYgKHJldC0+c2l6ZSl7Ci0gICAgICAgIHJldC0+Y29udGVudCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhyZXQtPnNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworICAgICAgICByZXQtPmNvbnRlbnQgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMocmV0LT5zaXplKTsKICAgICAgICAgaWYgKHJldC0+Y29udGVudCA9PSBOVUxMKSB7CiAJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKHJldCwgImNyZWF0aW5nIGJ1ZmZlciIpOwogICAgICAgICAgICAgeG1sRnJlZShyZXQpOwpAQCAtMTk4LDggKzE5OCw2IEBACiAKICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkKLSAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgIGlmIChidWYtPmJ1ZmZlciAhPSBOVUxMKQogICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgaWYgKGJ1Zi0+ZXJyb3IpCkBAIC0yMTQsNDAgKzIxMiw2IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotCi0vKioKLSAqIHhtbEJ1ZkNyZWF0ZVN0YXRpYzoKLSAqIEBtZW06IHRoZSBtZW1vcnkgYXJlYQotICogQHNpemU6ICB0aGUgc2l6ZSBpbiBieXRlCi0gKgotICogcm91dGluZSB0byBjcmVhdGUgYW4gWE1MIGJ1ZmZlciBmcm9tIGFuIGltbXV0YWJsZSBtZW1vcnkgYXJlYS4KLSAqIFRoZSBhcmVhIHdvbid0IGJlIG1vZGlmaWVkIG5vciBjb3BpZWQsIGFuZCBpcyBleHBlY3RlZCB0byBiZQotICogcHJlc2VudCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgbGlmZXRpbWUuCi0gKgotICogcmV0dXJucyB0aGUgbmV3IHN0cnVjdHVyZS4KLSAqLwoteG1sQnVmUHRyCi14bWxCdWZDcmVhdGVTdGF0aWModm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgewotICAgIHhtbEJ1ZlB0ciByZXQ7Ci0KLSAgICBpZiAobWVtID09IE5VTEwpCi0gICAgICAgIHJldHVybihOVUxMKTsKLQotICAgIHJldCA9ICh4bWxCdWZQdHIpIHhtbE1hbGxvYyhzaXplb2YoeG1sQnVmKSk7Ci0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0JeG1sQnVmTWVtb3J5RXJyb3IoTlVMTCwgImNyZWF0aW5nIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHJldC0+dXNlID0gc2l6ZTsKLSAgICByZXQtPnNpemUgPSBzaXplOwotICAgIFVQREFURV9DT01QQVQocmV0KTsKLSAgICByZXQtPmFsbG9jID0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEU7Ci0gICAgcmV0LT5jb250ZW50ID0gKHhtbENoYXIgKikgbWVtOwotICAgIHJldC0+ZXJyb3IgPSAwOwotICAgIHJldC0+YnVmZmVyID0gTlVMTDsKLSAgICByZXR1cm4ocmV0KTsKLX0KLQogLyoqCiAgKiB4bWxCdWZHZXRBbGxvY2F0aW9uU2NoZW1lOgogICogQGJ1ZjogIHRoZSBidWZmZXIKQEAgLTI1OSwxMCArMjIzLDYgQEAKIGludAogeG1sQnVmR2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmKSB7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfQlVGRkVSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQnVmR2V0QWxsb2NhdGlvblNjaGVtZTogYnVmID09IE5VTExcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybigtMSk7CiAgICAgfQogICAgIHJldHVybihidWYtPmFsbG9jKTsKQEAgLTI4MSwxOSArMjQxLDEzIEBACiB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHhtbEJ1ZlB0ciBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgc2NoZW1lKSB7CiAgICAgaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IgIT0gMCkpIHsKLSNpZmRlZiBERUJVR19CVUZGRVIKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lOiBidWYgPT0gTlVMTCBvciBpbiBlcnJvclxuIik7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICB9Ci0gICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSB8fAotICAgICAgICAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKSkKKyAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIGlmICgoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfRE9VQkxFSVQpIHx8CiAgICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19FWEFDVCkgfHwKICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCkgfHwKLSAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgfHwKIAkoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkpIHsKIAlidWYtPmFsbG9jID0gc2NoZW1lOwogICAgICAgICBpZiAoYnVmLT5idWZmZXIpCkBAIC0zMjEsMTggKzI3NSwxMyBAQAogdm9pZAogeG1sQnVmRnJlZSh4bWxCdWZQdHIgYnVmKSB7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfQlVGRkVSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQnVmRnJlZTogYnVmID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuOwogICAgIH0KIAogICAgIGlmICgoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKSAmJgogICAgICAgICAoYnVmLT5jb250ZW50SU8gIT0gTlVMTCkpIHsKICAgICAgICAgeG1sRnJlZShidWYtPmNvbnRlbnRJTyk7Ci0gICAgfSBlbHNlIGlmICgoYnVmLT5jb250ZW50ICE9IE5VTEwpICYmCi0gICAgICAgIChidWYtPmFsbG9jICE9IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSkgeworICAgIH0gZWxzZSBpZiAoYnVmLT5jb250ZW50ICE9IE5VTEwpIHsKICAgICAgICAgeG1sRnJlZShidWYtPmNvbnRlbnQpOwogICAgIH0KICAgICB4bWxGcmVlKGJ1Zik7CkBAIC0zNTAsOSArMjk5LDcgQEAKICAgICBpZiAoYnVmLT5jb250ZW50ID09IE5VTEwpIHJldHVybjsKICAgICBDSEVDS19DT01QQVQoYnVmKQogICAgIGJ1Zi0+dXNlID0gMDsKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgewotICAgICAgICBidWYtPmNvbnRlbnQgPSBCQURfQ0FTVCAiIjsKLSAgICB9IGVsc2UgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmCisgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmCiAgICAgICAgICAgICAgICAoYnVmLT5jb250ZW50SU8gIT0gTlVMTCkpIHsKICAgICAgICAgc2l6ZV90IHN0YXJ0X2J1ZiA9IGJ1Zi0+Y29udGVudCAtIGJ1Zi0+Y29udGVudElPOwogCkBAIC0zODUsOCArMzMyLDcgQEAKICAgICBpZiAobGVuID4gYnVmLT51c2UpIHJldHVybigwKTsKIAogICAgIGJ1Zi0+dXNlIC09IGxlbjsKLSAgICBpZiAoKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHx8Ci0gICAgICAgICgoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKSAmJiAoYnVmLT5jb250ZW50SU8gIT0gTlVMTCkpKSB7CisgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgewogCS8qCiAJICogd2UganVzdCBtb3ZlIHRoZSBjb250ZW50IHBvaW50ZXIsIGJ1dCBhbHNvIG1ha2Ugc3VyZQogCSAqIHRoZSBwZXJjZWl2ZWQgYnVmZmVyIHNpemUgaGFzIHNocnVuayBhY2NvcmRpbmdseQpAQCAtNDM0LDcgKzM4MCw2IEBACiAgICAgaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IgIT0gMCkpIHJldHVybigwKTsKICAgICBDSEVDS19DT01QQVQoYnVmKQogCi0gICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHJldHVybigwKTsKICAgICBpZiAobGVuIDwgYnVmLT5zaXplIC0gYnVmLT51c2UpCiAgICAgICAgIHJldHVybihidWYtPnNpemUgLSBidWYtPnVzZSAtIDEpOwogICAgIGlmIChsZW4gPj0gU0laRV9NQVggLSBidWYtPnVzZSkgewpAQCAtNTA0LDcgKzQ0OSw3IEBACiAgICAgcmV0ID0geG1sQnVmR3Jvd0ludGVybmFsKGJ1ZiwgbGVuKTsKICAgICBpZiAoYnVmLT5lcnJvciAhPSAwKQogICAgICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybigoaW50KSByZXQpOworICAgIHJldHVybihyZXQgPiBJTlRfTUFYID8gSU5UX01BWCA6IHJldCk7CiB9CiAKIC8qKgpAQCAtNTIwLDIzICs0NjUsMTUgQEAKICAgICBzaXplX3QgcmV0OwogCiAgICAgaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IgIT0gMCkpIHsKLSNpZmRlZiBERUJVR19CVUZGRVIKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxCdWZEdW1wOiBidWYgPT0gTlVMTCBvciBpbiBlcnJvclxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oMCk7CiAgICAgfQogICAgIGlmIChidWYtPmNvbnRlbnQgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX0JVRkZFUgotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEJ1ZkR1bXA6IGJ1Zi0+Y29udGVudCA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybigwKTsKICAgICB9CiAgICAgQ0hFQ0tfQ09NUEFUKGJ1ZikKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogCWZpbGUgPSBzdGRvdXQ7Ci0gICAgcmV0ID0gZndyaXRlKGJ1Zi0+Y29udGVudCwgc2l6ZW9mKHhtbENoYXIpLCBidWYtPnVzZSwgZmlsZSk7CisgICAgcmV0ID0gZndyaXRlKGJ1Zi0+Y29udGVudCwgMSwgYnVmLT51c2UsIGZpbGUpOwogICAgIHJldHVybihyZXQpOwogfQogCkBAIC02OTksNyArNjM2LDYgQEAKICAgICAgICAgcmV0dXJuKDApOwogICAgIENIRUNLX0NPTVBBVChidWYpCiAKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuKDApOwogICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgewogICAgICAgICAvKgogCSAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cwpAQCAtNzc3LDcgKzcxMyw4IEBACiAJaWYgKGJ1Zi0+Y29udGVudCA9PSBOVUxMKSB7CiAJICAgIHJlYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKG5ld1NpemUpOwogCSAgICBidWYtPnVzZSA9IDA7Ci0JICAgIHJlYnVmW2J1Zi0+dXNlXSA9IDA7CisgICAgICAgICAgICBpZiAocmVidWYgIT0gTlVMTCkKKwkgICAgICAgIHJlYnVmW2J1Zi0+dXNlXSA9IDA7CiAJfSBlbHNlIGlmIChidWYtPnNpemUgLSBidWYtPnVzZSA8IDEwMCkgewogCSAgICByZWJ1ZiA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLT5jb250ZW50LCBuZXdTaXplKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTgyNSwxMiArNzYyLDcgQEAKIAlyZXR1cm4gLTE7CiAgICAgQ0hFQ0tfQ09NUEFUKGJ1ZikKIAotICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSByZXR1cm4gLTE7CiAgICAgaWYgKGxlbiA8IC0xKSB7Ci0jaWZkZWYgREVCVUdfQlVGRkVSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQnVmQWRkOiBsZW4gPCAwXG4iKTsKLSNlbmRpZgogCXJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDsKQEAgLTg2Myw3ICs3OTUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbWVtbW92ZSgmYnVmLT5jb250ZW50W2J1Zi0+dXNlXSwgc3RyLCBsZW4qc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBtZW1tb3ZlKCZidWYtPmNvbnRlbnRbYnVmLT51c2VdLCBzdHIsIGxlbik7CiAgICAgYnVmLT51c2UgKz0gbGVuOwogICAgIGJ1Zi0+Y29udGVudFtidWYtPnVzZV0gPSAwOwogICAgIFVQREFURV9DT01QQVQoYnVmKQpAQCAtODg1LDcgKzgxNyw2IEBACiAgICAgaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IpKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIENIRUNLX0NPTVBBVChidWYpCi0gICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHJldHVybiAtMTsKICAgICBpZiAoc3RyID09IE5VTEwpIHJldHVybiAtMTsKICAgICByZXR1cm4geG1sQnVmQWRkKGJ1Ziwgc3RyLCAtMSk7CiB9CkBAIC05MjMsMTQgKzg1NCw4IEBACiAgICAgaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IpKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIENIRUNLX0NPTVBBVChidWYpCi0gICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpCi0gICAgICAgIHJldHVybigtMSk7CiAgICAgaWYgKHhtbFN0cmNocihzdHJpbmcsICdcIicpKSB7CiAgICAgICAgIGlmICh4bWxTdHJjaHIoc3RyaW5nLCAnXCcnKSkgewotI2lmZGVmIERFQlVHX0JVRkZFUgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAieG1sQnVmV3JpdGVRdW90ZWRTdHJpbmc6IHN0cmluZyBjb250YWlucyBxdW90ZSBhbmQgZG91YmxlLXF1b3RlcyAhXG4iKTsKLSNlbmRpZgogCSAgICB4bWxCdWZDQ2F0KGJ1ZiwgIlwiIik7CiAgICAgICAgICAgICBiYXNlID0gY3VyID0gc3RyaW5nOwogICAgICAgICAgICAgd2hpbGUoKmN1ciAhPSAwKXsKQEAgLTEwNDIsMTEgKzk2NywxMSBAQAogICAgICAgICAgKiBLZWVwIHRoZSBidWZmZXIgYnV0IHByb3ZpZGUgYSB0cnVuY2F0ZWQgc2l6ZSB2YWx1ZS4KICAgICAgICAgICovCiAgICAgICAgIHhtbEJ1Zk92ZXJmbG93RXJyb3IoYnVmLCAiQWxsb2NhdGVkIHNpemUgdG9vIGJpZyBmb3IgeG1sQnVmZmVyIik7Ci0gICAgICAgIHJldC0+dXNlID0gKGludCkgYnVmLT51c2U7CisgICAgICAgIHJldC0+dXNlID0gYnVmLT51c2U7CiAgICAgICAgIHJldC0+c2l6ZSA9IElOVF9NQVg7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0LT51c2UgPSAoaW50KSBidWYtPnVzZTsKLSAgICAgICAgcmV0LT5zaXplID0gKGludCkgYnVmLT5zaXplOworICAgICAgICByZXQtPnVzZSA9IGJ1Zi0+dXNlOworICAgICAgICByZXQtPnNpemUgPSBidWYtPnNpemU7CiAgICAgfQogICAgIHJldC0+YWxsb2MgPSBidWYtPmFsbG9jOwogICAgIHJldC0+Y29udGVudCA9IGJ1Zi0+Y29udGVudDsKQEAgLTEwOTIsNTcgKzEwMTcsNiBAQAogICovCiBpbnQKIHhtbEJ1ZlJlc2V0SW5wdXQoeG1sQnVmUHRyIGJ1ZiwgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQpIHsKLSAgICBpZiAoKGlucHV0ID09IE5VTEwpIHx8IChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IpKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIENIRUNLX0NPTVBBVChidWYpCi0gICAgaW5wdXQtPmJhc2UgPSBpbnB1dC0+Y3VyID0gYnVmLT5jb250ZW50OwotICAgIGlucHV0LT5lbmQgPSAmYnVmLT5jb250ZW50W2J1Zi0+dXNlXTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qKgotICogeG1sQnVmR2V0SW5wdXRCYXNlOgotICogQGJ1ZjogYW4geG1sQnVmUHRyCi0gKiBAaW5wdXQ6IGFuIHhtbFBhcnNlcklucHV0UHRyCi0gKgotICogR2V0IHRoZSBiYXNlIG9mIHRoZSBAaW5wdXQgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCi0gKgotICogUmV0dXJucyB0aGUgc2l6ZV90IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3BsYWNlbWVudAotICovCi1zaXplX3QKLXhtbEJ1ZkdldElucHV0QmFzZSh4bWxCdWZQdHIgYnVmLCB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCkgewotICAgIHNpemVfdCBiYXNlOwotCi0gICAgaWYgKChpbnB1dCA9PSBOVUxMKSB8fCAoYnVmID09IE5VTEwpIHx8IChidWYtPmVycm9yKSkKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICBDSEVDS19DT01QQVQoYnVmKQotICAgIGJhc2UgPSBpbnB1dC0+YmFzZSAtIGJ1Zi0+Y29udGVudDsKLSAgICAvKgotICAgICAqIFdlIGNvdWxkIGRvIHNvbWUgcG9pbnRlciBhcml0aG1ldGljIGNoZWNrcyBidXQgdGhhdCdzIHByb2JhYmx5Ci0gICAgICogc3VmZmljaWVudC4KLSAgICAgKi8KLSAgICBpZiAoYmFzZSA+IGJ1Zi0+c2l6ZSkgewotICAgICAgICB4bWxCdWZPdmVyZmxvd0Vycm9yKGJ1ZiwgIklucHV0IHJlZmVyZW5jZSBvdXRzaWRlIG9mIHRoZSBidWZmZXIiKTsKLSAgICAgICAgYmFzZSA9IDA7Ci0gICAgfQotICAgIHJldHVybihiYXNlKTsKLX0KLQotLyoqCi0gKiB4bWxCdWZTZXRJbnB1dEJhc2VDdXI6Ci0gKiBAYnVmOiBhbiB4bWxCdWZQdHIKLSAqIEBpbnB1dDogYW4geG1sUGFyc2VySW5wdXRQdHIKLSAqIEBiYXNlOiB0aGUgYmFzZSB2YWx1ZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIKLSAqIEBjdXI6IHRoZSBjdXIgdmFsdWUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCi0gKgotICogVXBkYXRlIHRoZSBpbnB1dCB0byB1c2UgdGhlIGJhc2UgYW5kIGN1ciByZWxhdGl2ZSB0byB0aGUgYnVmZmVyCi0gKiBhZnRlciBhIHBvc3NpYmxlIHJlYWxsb2NhdGlvbiBvZiBpdHMgY29udGVudAotICoKLSAqIFJldHVybnMgLTEgaW4gY2FzZSBvZiBlcnJvciwgMCBvdGhlcndpc2UKLSAqLwotaW50Ci14bWxCdWZTZXRJbnB1dEJhc2VDdXIoeG1sQnVmUHRyIGJ1ZiwgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJhc2UsIHNpemVfdCBjdXIpIHsKICAgICBpZiAoaW5wdXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICBpZiAoKGJ1ZiA9PSBOVUxMKSB8fCAoYnVmLT5lcnJvcikpIHsKQEAgLTExNTAsOCArMTAyNCwzNyBAQAogICAgICAgICByZXR1cm4oLTEpOwogICAgIH0KICAgICBDSEVDS19DT01QQVQoYnVmKQotICAgIGlucHV0LT5iYXNlID0gJmJ1Zi0+Y29udGVudFtiYXNlXTsKLSAgICBpbnB1dC0+Y3VyID0gaW5wdXQtPmJhc2UgKyBjdXI7CisgICAgaW5wdXQtPmJhc2UgPSBpbnB1dC0+Y3VyID0gYnVmLT5jb250ZW50OworICAgIGlucHV0LT5lbmQgPSAmYnVmLT5jb250ZW50W2J1Zi0+dXNlXTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qKgorICogeG1sQnVmVXBkYXRlSW5wdXQ6CisgKiBAYnVmOiBhbiB4bWxCdWZQdHIKKyAqIEBpbnB1dDogYW4geG1sUGFyc2VySW5wdXRQdHIKKyAqIEBwb3M6IHRoZSBjdXIgdmFsdWUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCisgKgorICogVXBkYXRlIHRoZSBpbnB1dCB0byB1c2UgdGhlIGJhc2UgYW5kIGN1ciByZWxhdGl2ZSB0byB0aGUgYnVmZmVyCisgKiBhZnRlciBhIHBvc3NpYmxlIHJlYWxsb2NhdGlvbiBvZiBpdHMgY29udGVudAorICoKKyAqIFJldHVybnMgLTEgaW4gY2FzZSBvZiBlcnJvciwgMCBvdGhlcndpc2UKKyAqLworaW50Cit4bWxCdWZVcGRhdGVJbnB1dCh4bWxCdWZQdHIgYnVmLCB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCwgc2l6ZV90IHBvcykgeworICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4oLTEpOworICAgIC8qCisgICAgICogVE9ETzogSXQgbWlnaHQgYmUgc2FmZXIgdG8ga2VlcCB1c2luZyB0aGUgYnVmZmVyIGNvbnRlbnQgaWYgdGhlcmUKKyAgICAgKiB3YXMgYW4gZXJyb3IuCisgICAgICovCisgICAgaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1Zi0+ZXJyb3IpKSB7CisgICAgICAgIGlucHV0LT5iYXNlID0gaW5wdXQtPmN1ciA9IGlucHV0LT5lbmQgPSBCQURfQ0FTVCAiIjsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgQ0hFQ0tfQ09NUEFUKGJ1ZikKKyAgICBpbnB1dC0+YmFzZSA9IGJ1Zi0+Y29udGVudDsKKyAgICBpbnB1dC0+Y3VyID0gaW5wdXQtPmJhc2UgKyBwb3M7CiAgICAgaW5wdXQtPmVuZCA9ICZidWYtPmNvbnRlbnRbYnVmLT51c2VdOwogICAgIHJldHVybigwKTsKIH0KZGlmZiAtLWdpdCBhL2J1Zi5oIGIvYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YmNmNjEuLjAwMDAwMDAKLS0tIGEvYnVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogU3VtbWFyeTogSW50ZXJuYWwgSW50ZXJmYWNlcyBmb3IgbWVtb3J5IGJ1ZmZlcnMgaW4gbGlieG1sMgotICogRGVzY3JpcHRpb246IHRoaXMgbW9kdWxlIGRlc2NyaWJlcyBtb3N0IG9mIHRoZSBuZXcgeG1sQnVmIGJ1ZmZlcgotICogICAgICAgICAgICAgIGVudHJ5IHBvaW50cywgdGhvc2UgYXJlIHByaXZhdGUgcm91dGluZXMsIHdpdGggYQotICogICAgICAgICAgICAgIGZldyBleGNlcHRpb25zIGV4cG9ydGVkIGluIHRyZWUuaC4gVGhpcyB3YXMgYWRkZWQKLSAqICAgICAgICAgICAgICBpbiAyLjkuMC4KLSAqCi0gKiBDb3B5OiBTZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogQXV0aG9yOiBEYW5pZWwgVmVpbGxhcmQKLSAqLwotCi0jaWZuZGVmIF9fWE1MX0JVRl9IX18KLSNkZWZpbmUgX19YTUxfQlVGX0hfXwotCi0jaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi14bWxCdWZQdHIgeG1sQnVmQ3JlYXRlKHZvaWQpOwoteG1sQnVmUHRyIHhtbEJ1ZkNyZWF0ZVNpemUoc2l6ZV90IHNpemUpOwoteG1sQnVmUHRyIHhtbEJ1ZkNyZWF0ZVN0YXRpYyh2b2lkICptZW0sIHNpemVfdCBzaXplKTsKLQotaW50IHhtbEJ1ZlNldEFsbG9jYXRpb25TY2hlbWUoeG1sQnVmUHRyIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgc2NoZW1lKTsKLWludCB4bWxCdWZHZXRBbGxvY2F0aW9uU2NoZW1lKHhtbEJ1ZlB0ciBidWYpOwotCi12b2lkIHhtbEJ1ZkZyZWUoeG1sQnVmUHRyIGJ1Zik7Ci12b2lkIHhtbEJ1ZkVtcHR5KHhtbEJ1ZlB0ciBidWYpOwotCi0vKiBzaXplX3QgeG1sQnVmU2hyaW5rKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBsZW4pOyAqLwotaW50IHhtbEJ1Zkdyb3coeG1sQnVmUHRyIGJ1ZiwgaW50IGxlbik7Ci1pbnQgeG1sQnVmUmVzaXplKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBsZW4pOwotCi1pbnQgeG1sQnVmQWRkKHhtbEJ1ZlB0ciBidWYsIGNvbnN0IHhtbENoYXIgKnN0ciwgaW50IGxlbik7Ci1pbnQgeG1sQnVmQ2F0KHhtbEJ1ZlB0ciBidWYsIGNvbnN0IHhtbENoYXIgKnN0cik7Ci1pbnQgeG1sQnVmQ0NhdCh4bWxCdWZQdHIgYnVmLCBjb25zdCBjaGFyICpzdHIpOwotaW50IHhtbEJ1ZldyaXRlUXVvdGVkU3RyaW5nKHhtbEJ1ZlB0ciBidWYsIGNvbnN0IHhtbENoYXIgKnN0cmluZyk7Ci0KLXNpemVfdCB4bWxCdWZBdmFpbChjb25zdCB4bWxCdWZQdHIgYnVmKTsKLXNpemVfdCB4bWxCdWZMZW5ndGgoY29uc3QgeG1sQnVmUHRyIGJ1Zik7Ci0vKiBzaXplX3QgeG1sQnVmVXNlKGNvbnN0IHhtbEJ1ZlB0ciBidWYpOyAqLwotaW50IHhtbEJ1ZklzRW1wdHkoY29uc3QgeG1sQnVmUHRyIGJ1Zik7Ci1pbnQgeG1sQnVmQWRkTGVuKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBsZW4pOwotCi0vKiBjb25zdCB4bWxDaGFyICogeG1sQnVmQ29udGVudChjb25zdCB4bWxCdWYgKmJ1Zik7ICovCi0vKiBjb25zdCB4bWxDaGFyICogeG1sQnVmRW5kKHhtbEJ1ZlB0ciBidWYpOyAqLwotCi14bWxDaGFyICogeG1sQnVmRGV0YWNoKHhtbEJ1ZlB0ciBidWYpOwotCi1zaXplX3QgeG1sQnVmRHVtcChGSUxFICpmaWxlLCB4bWxCdWZQdHIgYnVmKTsKLQoteG1sQnVmUHRyIHhtbEJ1ZkZyb21CdWZmZXIoeG1sQnVmZmVyUHRyIGJ1ZmZlcik7Ci14bWxCdWZmZXJQdHIgeG1sQnVmQmFja1RvQnVmZmVyKHhtbEJ1ZlB0ciBidWYpOwotaW50IHhtbEJ1Zk1lcmdlQnVmZmVyKHhtbEJ1ZlB0ciBidWYsIHhtbEJ1ZmZlclB0ciBidWZmZXIpOwotCi1pbnQgeG1sQnVmUmVzZXRJbnB1dCh4bWxCdWZQdHIgYnVmLCB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCk7Ci1zaXplX3QgeG1sQnVmR2V0SW5wdXRCYXNlKHhtbEJ1ZlB0ciBidWYsIHhtbFBhcnNlcklucHV0UHRyIGlucHV0KTsKLWludCB4bWxCdWZTZXRJbnB1dEJhc2VDdXIoeG1sQnVmUHRyIGJ1ZiwgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBiYXNlLCBzaXplX3QgY3VyKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYgLyogX19YTUxfQlVGX0hfXyAqLwotCmRpZmYgLS1naXQgYS9idWlsZF9nbG9iLnB5IGIvYnVpbGRfZ2xvYi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzUwZmQ3MC4uMDAwMDAwMAotLS0gYS9idWlsZF9nbG9iLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyMjCi0jCi0jICAgICAgIGJ1aWxkX2dsb2IucHkgOiBCdWlsZCB0aGUgZ2xvYmFsX2Z1bmN0aW9ucy5oIGFuZCBnbG9iYWxfZnVuY3Rpb25zLmMKLSMgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIHdoaWNoIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlIHVzZXIKLSMgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB0byBnbG9iYWwgdmFyaWFibGVzIG5vdyB0aGF0IHRocmVhZCBzcGVjaWZpYwotIyAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAoVFNEKSBpcyB1c2VkIHRvIGVtdWxhdGUgZ2xvYmFsIHN0YXRlLgotIwotIyAgICAgICBTZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCi0jICAgICAgIEdhcnkuUGVubmluZ3RvbkBzdW4uY29tCi0jIyMKLWltcG9ydCBvcywgc3RyaW5nCi0KLWNsYXNzIGdsb2J2YXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIG5hbWUpOgotICAgICAgICBzZWxmLnR5cGU9dHlwZQotICAgICAgICBzZWxmLm5hbWU9bmFtZQotCi1kZWYgc3RyaXBsaW5lc2VwKGxpbmUpOgotICAgIHdoaWxlIGxpbmUgYW5kIGxpbmVbLTFdIGluICgnXHInLCdcbicpOgotICAgICAgICBsaW5lID0gbGluZVs6LTFdCi0gICAgcmV0dXJuIGxpbmUKLQotZGVmIHdyaXRlbGluZShmaWxlLCBsaW5lPU5vbmUpOgotICAgIGlmIGxpbmU6Ci0gICAgICAgIGZpbGUud3JpdGUobGluZSkKLSAgICBmaWxlLndyaXRlKCJcbiIpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZ2xvYmFscz17fQotICAgIGdsb2JhbF9kYXRhPW9wZW4oImdsb2JhbC5kYXRhIikucmVhZGxpbmVzKCkKLSAgICBnbG9iYWxfY29kZT1vcGVuKCJnbG9iYWxzLmMiKS5yZWFkbGluZXMoKQotICAgIGdsb2JhbF9oZHI9b3BlbigiaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIikucmVhZGxpbmVzKCkKLSAgICBnbG9iYWxfZnVuY3Rpb25zX2hkcj1vcGVuKCJpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmgiLCAidysiKQotICAgIGdsb2JhbF9mdW5jdGlvbnNfaW1wbD1vcGVuKCJnbG9iYWxzLmMiLCAidysiKQotCi0gICAgIwotICAgICMgUmVidWlsZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHVwIHRvIHRoZQotICAgICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgc3RyaW5nCi0gICAgIyAKLSAgICBmb3IgbGluZSBpbiBnbG9iYWxfaGRyOgotICAgICAgICBsaW5lID0gc3RyaXBsaW5lc2VwKGxpbmUpCi0gICAgICAgIGlmIGxpbmUgPT0gIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGJ1aWxkX2dsb2IucHkuIjoKLQkgICAgYnJlYWsKLQl3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsIGxpbmUpCi0KLSAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsICIgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBidWlsZF9nbG9iLnB5LiIpCi0gICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCAiICogRG8gbm90IG1vZGlmeSB0aGUgcHJldmlvdXMgbGluZS4iKQotICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwgIiAqLyIpCi0gICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyKQotCi0gICAgZm9yIGxpbmUgaW4gZ2xvYmFsX2NvZGU6Ci0gICAgICAgIGxpbmUgPSBzdHJpcGxpbmVzZXAobGluZSkKLSAgICAgICAgaWYgbGluZSA9PSAiICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYnVpbGRfZ2xvYi5weS4iOgotCSAgICBicmVhawotCXdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsIGxpbmUpCi0KLSAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCAiICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYnVpbGRfZ2xvYi5weS4iKQotICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICIgKiBEbyBub3QgbW9kaWZ5IHRoZSBwcmV2aW91cyBsaW5lLiIpCi0gICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgIiAqLyIpCi0gICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCkKLQotICAgICMgTm93IHByb2Nlc3MgdGhlIGRhdGEgYW5kIHdyaXRlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBvdXRwdXQgZmlsZQotICAgIGZvciBsaW5lIGluIGdsb2JhbF9kYXRhOgotICAgICAgICBpZiBsaW5lWzBdPT0nIyc6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBsaW5lID0gc3RyaXBsaW5lc2VwKGxpbmUpCi0gICAgICAgIGZpZWxkcyA9IHN0cmluZy5zcGxpdChsaW5lLCAiLCIpCi0gICAgICAgICMgVXBkYXRlIHRoZSBoZWFkZXIgZmlsZQotICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIpCi0gICAgICAgIGdsb2JhbF9mdW5jdGlvbnNfaGRyLndyaXRlKCJYTUxQVUJGVU4gIitmaWVsZHNbMF0rIiAqIFhNTENBTEwgIikKLSAgICAgICAgaWYgZmllbGRzWzJdOgotICAgICAgICAgICAgZ2xvYmFsX2Z1bmN0aW9uc19oZHIud3JpdGUoIigqIikKLSAgICAgICAgZ2xvYmFsX2Z1bmN0aW9uc19oZHIud3JpdGUoIl9fIitmaWVsZHNbMV0rIih2b2lkKSIpCi0gICAgICAgIGlmIGZpZWxkc1syXToKLSAgICAgICAgICAgIGdsb2JhbF9mdW5jdGlvbnNfaGRyLndyaXRlKCIpIitmaWVsZHNbMl0pCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiOyIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwgIiNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQiKQotICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsIiNkZWZpbmUgIitmaWVsZHNbMV0rIiBcXCIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiKCooX18iK2ZpZWxkc1sxXSsiKCkpKSIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiI2Vsc2UiKQotICAgICAgICBpZiBmaWVsZHNbMl06Ci0gICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsIlhNTFBVQlZBUiAiK2ZpZWxkc1swXSsiICIrZmllbGRzWzFdK2ZpZWxkc1syXSsiOyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsIlhNTFBVQlZBUiAiK2ZpZWxkc1swXSsiICIrZmllbGRzWzFdKyI7IikKLSAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCIjZW5kaWYiKQotICAgICAgICAjIHNldC9nZXQgZm9yIHBlci10aHJlYWQgZ2xvYmFsIGRlZmF1bHRzCi0gICAgICAgIGlmIGZpZWxkc1szXToKLSAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkciwiWE1MUFVCRlVOICIrZmllbGRzWzBdKyIgWE1MQ0FMTCAiK2ZpZWxkc1sxXVs6M10rIlRockRlZiIrZmllbGRzWzFdWzM6XSsiKCIrZmllbGRzWzBdKyIgdik7IikKLSAgICAgICAgIyBVcGRhdGUgdGhlIGltcGxlbWVudGF0aW9uIGZpbGUKLSAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCkKLSMgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICJleHRlcm4gIitmaWVsZHNbMF0rIiAiK2ZpZWxkc1sxXSsiOyIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICIjdW5kZWZcdCIrZmllbGRzWzFdKQotICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCBmaWVsZHNbMF0rIiAqIikKLSAgICAgICAgaWYgZmllbGRzWzJdOgotICAgICAgICAgICAgZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLndyaXRlKCIoKiIpCi0gICAgICAgIGdsb2JhbF9mdW5jdGlvbnNfaW1wbC53cml0ZSgiX18iK2ZpZWxkc1sxXSsiKHZvaWQpIikKLSAgICAgICAgaWYgZmllbGRzWzJdOgotICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwgIilbXSIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICIgeyIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICIgICAgaWYgKElTX01BSU5fVEhSRUFEKSIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICJcdHJldHVybiAoJiIrZmllbGRzWzFdKyIpOyIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICIgICAgZWxzZSIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICJcdHJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPiIrZmllbGRzWzFdKyIpOyIpCi0gICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsICJ9IikKLSAgICAgICAgIyBzZXQvZ2V0IGZvciBwZXItdGhyZWFkIGdsb2JhbCBkZWZhdWx0cwotICAgICAgICBpZiBmaWVsZHNbM106Ci0gICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLGZpZWxkc1swXSsiICIrZmllbGRzWzFdWzozXSsiVGhyRGVmIitmaWVsZHNbMV1bMzpdKyIoIitmaWVsZHNbMF0rIiB2KSB7IikKLSAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsIiAgICAiK2ZpZWxkc1swXSsiIHJldDsiKTsKLSAgICAgICAgICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2ltcGwsIiAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOyIpCi0gICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCIgICAgcmV0ID0gIitmaWVsZHNbMV1bOjNdK2ZpZWxkc1sxXVszOl0rIlRockRlZjsiKQotICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwiICAgICIrZmllbGRzWzFdWzozXStmaWVsZHNbMV1bMzpdKyJUaHJEZWYgPSB2OyIpCi0gICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCIgICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOyIpCi0gICAgICAgICAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19pbXBsLCIgICAgcmV0dXJuIHJldDsiKQotICAgICAgICAgICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaW1wbCwifSIpCi0gICAgIyBUZXJtaW5hdGUgdGhlIGhlYWRlciBmaWxlIHdpdGggYXBwcm9wcmlhdGUgYm9pbGVycGxhdGUKLSAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIpCi0gICAgd3JpdGVsaW5lKGdsb2JhbF9mdW5jdGlvbnNfaGRyLCAiI2lmZGVmIF9fY3BsdXNwbHVzIikKLSAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsICJ9IikKLSAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsICIjZW5kaWYiKQotICAgIHdyaXRlbGluZShnbG9iYWxfZnVuY3Rpb25zX2hkcikKLSAgICB3cml0ZWxpbmUoZ2xvYmFsX2Z1bmN0aW9uc19oZHIsICIjZW5kaWYgLyogX19YTUxfR0xPQkFMU19IICovIikKZGlmZiAtLWdpdCBhL2MxNG4uYyBiL2MxNG4uYwppbmRleCBkNTU3MjljLi4zZDJlMTQ0IDEwMDY0NAotLS0gYS9jMTRuLmMKKysrIGIvYzE0bi5jCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lIElOX0xJQlhNTAogI2luY2x1ZGUgImxpYnhtbC5oIgogI2lmZGVmIExJQlhNTF9DMTROX0VOQUJMRUQKLSNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMjEsMTEgKzIwLDExIEBACiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aEludGVybmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC9jMTRuLmg+CiAKLSNpbmNsdWRlICJidWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCkBAIC0yODYsNyArMjg1LDcgQEAKICAgICAgICAgeG1sQzE0TkVyck1lbW9yeSgiY3JlYXRpbmcgbmFtZXNwYWNlcyBzdGFjayIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxDMTROVmlzaWJsZU5zU3RhY2spKTsKKyAgICBtZW1zZXQocmV0LCAwLCBzaXplb2YoeG1sQzE0TlZpc2libGVOc1N0YWNrKSk7CiAgICAgcmV0dXJuKHJldCk7CiB9CiAKQEAgLTIxMTUsNyArMjExNCw3IEBACiAjZGVmaW5lIGdyb3dCdWZmZXJSZWVudHJhbnQoKSB7CQkJCQkJXAogICAgIGJ1ZmZlcl9zaXplICo9IDI7CQkJCQkJCVwKICAgICBidWZmZXIgPSAoeG1sQ2hhciAqKQkJCQkJCVwKLQkJeG1sUmVhbGxvYyhidWZmZXIsIGJ1ZmZlcl9zaXplICogc2l6ZW9mKHhtbENoYXIpKTsJXAorCQl4bWxSZWFsbG9jKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwkJCVwKICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsJCQkJCQlcCiAJeG1sQzE0TkVyck1lbW9yeSgiZ3Jvd2luZyBidWZmZXIiKTsJCQkJXAogCXJldHVybihOVUxMKTsJCQkJCQkJXApAQCAtMjE1MCw3ICsyMTQ5LDcgQEAKICAgICAgKiBhbGxvY2F0ZSBhbiB0cmFuc2xhdGlvbiBidWZmZXIuCiAgICAgICovCiAgICAgYnVmZmVyX3NpemUgPSAxMDAwOwotICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhidWZmZXJfc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgYnVmZmVyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKGJ1ZmZlcl9zaXplKTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKIAl4bWxDMTRORXJyTWVtb3J5KCJhbGxvY2F0aW5nIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gKE5VTEwpOwpAQCAtMjIyMyw2ICsyMjIyLDUgQEAKICAgICAqb3V0ID0gMDsKICAgICByZXR1cm4gKGJ1ZmZlcik7CiB9Ci0jZW5kaWYgLyogTElCWE1MX09VVFBVVF9FTkFCTEVEICovCiAKICNlbmRpZiAvKiBMSUJYTUxfQzE0Tl9FTkFCTEVEICovCmRpZmYgLS1naXQgYS9jYXRhbG9nLmMgYi9jYXRhbG9nLmMKaW5kZXggYjc4MzdlMy4uOTQ1ZWEyYyAxMDA2NDQKLS0tIGEvY2F0YWxvZy5jCisrKyBiL2NhdGFsb2cuYwpAQCAtMTgsMTQgKzE4LDEzIEBACiAjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgogI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxpZiBkZWZpbmVkIChfV0lOMzIpCisjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfRkNOVExfSAogI2luY2x1ZGUgPGZjbnRsLmg+CkBAIC0zNyw5ICszNiw5IEBACiAjaW5jbHVkZSA8bGlieG1sL2NhdGFsb2cuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAKLSNpbmNsdWRlICJidWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKIAogI2RlZmluZSBNQVhfREVMRUdBVEUJNTAKICNkZWZpbmUgTUFYX0NBVEFMX0RFUFRICTUwCkBAIC04OTEsMTEgKzg5MCw3IEBACiAKICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKLSNpZmRlZiBMSUJYTUxfU0FYMV9FTkFCTEVECi0JaWYgKHhtbERlZmF1bHRTQVhIYW5kbGVyLmVycm9yICE9IE5VTEwpIHsKLQkgICAgeG1sRGVmYXVsdFNBWEhhbmRsZXIuZXJyb3IoTlVMTCwgIm91dCBvZiBtZW1vcnlcbiIpOwotCX0KLSNlbmRpZgorICAgICAgICB4bWxDYXRhbG9nRXJyTWVtb3J5KCJhbGxvY2F0aW5nIHBhcnNlciBjb250ZXh0Iik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtMjE3Nyw3ICsyMTcyLDYgQEAKICAgICBpbnQgbGVuID0gMDsKICAgICBpbnQgc2l6ZSA9IDUwOwogICAgIHhtbENoYXIgc3RvcDsKLSAgICBpbnQgY291bnQgPSAwOwogCiAgICAgKmlkID0gTlVMTDsKIApAQCAtMjE5MCw3ICsyMTg0LDcgQEAKICAgICB9IGVsc2UgewogCXN0b3AgPSAnICc7CiAgICAgfQotICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSk7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgIHhtbENhdGFsb2dFcnJNZW1vcnkoImFsbG9jYXRpbmcgcHVibGljIElEIik7CiAJcmV0dXJuKE5VTEwpOwpAQCAtMjIwMiw3ICsyMTk2LDcgQEAKIAkgICAgYnJlYWs7CiAJaWYgKGxlbiArIDEgPj0gc2l6ZSkgewogCSAgICBzaXplICo9IDI7Ci0JICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKwkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUpOwogCSAgICBpZiAodG1wID09IE5VTEwpIHsKIAkJeG1sQ2F0YWxvZ0Vyck1lbW9yeSgiYWxsb2NhdGluZyBwdWJsaWMgSUQiKTsKIAkJeG1sRnJlZShidWYpOwpAQCAtMjIxMSw3ICsyMjA1LDYgQEAKIAkgICAgYnVmID0gdG1wOwogCX0KIAlidWZbbGVuKytdID0gKmN1cjsKLQljb3VudCsrOwogCU5FWFQ7CiAgICAgfQogICAgIGJ1ZltsZW5dID0gMDsKQEAgLTI5NzUsNiArMjk2OCw4IEBACiAJICAgIGlmIChjYXRhbC0+c2dtbCA9PSBOVUxMKQogCQljYXRhbC0+c2dtbCA9IHhtbEhhc2hDcmVhdGUoMTApOwogICAgICAgICAgICAgcmVzID0geG1sSGFzaEFkZEVudHJ5KGNhdGFsLT5zZ21sLCBvcmlnLCBlbnRyeSk7CisgICAgICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgICAgICB4bWxGcmVlQ2F0YWxvZ0VudHJ5KGVudHJ5LCBOVUxMKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gKHJlcyk7CkBAIC0zMTM1LDcgKzMxMzAsNyBAQAogCQkJCQlzdHJuY3B5KHAsICJcXC4uXFxldGNcXGNhdGFsb2ciLCAyNTUgLSAocCAtIGJ1ZikpOwogCQkJCQl1cmkgPSB4bWxDYW5vbmljUGF0aCgoY29uc3QgeG1sQ2hhciopYnVmKTsKIAkJCQkJaWYgKHVyaSAhPSBOVUxMKSB7Ci0JCQkJCQlzdHJuY3B5KFhNTF9YTUxfREVGQVVMVF9DQVRBTE9HLCB1cmksIDI1NSk7CisJCQkJCQlzdHJuY3B5KFhNTF9YTUxfREVGQVVMVF9DQVRBTE9HLCAoY2hhciogKXVyaSwgMjU1KTsKIAkJCQkJCXhtbEZyZWUodXJpKTsKIAkJCQkJfQogCQkJCX0KZGlmZiAtLWdpdCBhL2NoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSBiL2NoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weQppbmRleCA4N2VjMDUwLi4zZTE1MjEyIDEwMDc1NQotLS0gYS9jaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHkKKysrIGIvY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IG9zCkBAIC0zOTUsNCArMzk1LDMgQEAKICAgICAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlMi5weSBiL2NoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZTIucHkKaW5kZXggNTU5NTAzYS4uNzc5Y2VmYSAxMDA3NTUKLS0tIGEvY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlMi5weQorKysgYi9jaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUyLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IG9zCkBAIC00MTksNCArNDE5LDMgQEAKICAgICAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weSBiL2NoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHkKaW5kZXggOTI2Y2ViMy4uYTBlZTAyOCAxMDA3NTUKLS0tIGEvY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weQorKysgYi9jaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IG9zCmRpZmYgLS1naXQgYS9jaGVjay14bWwtdGVzdC1zdWl0ZS5weSBiL2NoZWNrLXhtbC10ZXN0LXN1aXRlLnB5CmluZGV4IGNlY2I1OWIuLjI4NGY3ZjAgMTAwNzU1Ci0tLSBhL2NoZWNrLXhtbC10ZXN0LXN1aXRlLnB5CisrKyBiL2NoZWNrLXhtbC10ZXN0LXN1aXRlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IG9zCmRpZmYgLS1naXQgYS9jaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHkgYi9jaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHkKaW5kZXggYzM0NTYwZS4uYTA4ZTZhZiAxMDA3NTUKLS0tIGEvY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5CisrKyBiL2NoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBvcwpAQCAtNDIxLDQgKzQyMSwzIEBACiAgICAgICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL2NodmFsaWQuYyBiL2NodmFsaWQuYwppbmRleCBmNGZhNDRhLi5mYjJjNzE1IDEwMDY0NAotLS0gYS9jaHZhbGlkLmMKKysrIGIvY2h2YWxpZC5jCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSAibGlieG1sLmgiCiAjaW5jbHVkZSA8bGlieG1sL2NodmFsaWQuaD4KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAvKgogICogVGhlIGluaXRpYWwgdGFibGVzICh7ZnVuY19uYW1lfV90YWIpIGFyZSB1c2VkIHRvIHZhbGlkYXRlIHdoZXRoZXIgYQogICogc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGdyb3VwLiAgRWFjaCB0YWJsZQpkaWZmIC0tZ2l0IGEvY29uZmlnLmggYi9jb25maWcuaAppbmRleCAxMDIyMmY5Li5iODZmYjVhIDEwMDY0NAotLS0gYS9jb25maWcuaAorKysgYi9jb25maWcuaApAQCAtNCwyOCArNCwxMiBAQAogLyogQSBmb3JtIHRoYXQgd2lsbCBub3QgY29uZnVzZSBhcGlidWlsZC5weSAqLwogI2RlZmluZSBBVFRSSUJVVEVfREVTVFJVQ1RPUiBfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9yKSkKIAotLyogVHlwZSBjYXN0IGZvciB0aGUgZ2V0aG9zdGJ5bmFtZSgpIGFyZ3VtZW50ICovCi0jZGVmaW5lIEdFVEhPU1RCWU5BTUVfQVJHX0NBU1QgLyoqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9uYW1lc2VyLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0FSUEFfTkFNRVNFUl9IIDEKLQogLyogRGVmaW5lIGlmIF9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IpKSBpcyBhY2NlcHRlZCAqLwogI2RlZmluZSBIQVZFX0FUVFJJQlVURV9ERVNUUlVDVE9SIDEKIAotLyogV2hldGhlciBzdHJ1Y3Qgc29ja2FkZHI6Ol9fc3NfZmFtaWx5IGV4aXN0cyAqLwotLyogI3VuZGVmIEhBVkVfQlJPS0VOX1NTX0ZBTUlMWSAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGN0eXBlLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0NUWVBFX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuCi0gICAqLwotI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKIApAQCAtMzUsMjcgKzE5LDE4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfRExfSCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZsb2F0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0ZMT0FUX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwcmludGYnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZQUklOVEYgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0aW1lJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9GVElNRSAxCiAKLS8qIERlZmluZSBpZiBnZXRhZGRyaW5mbyBpcyB0aGVyZSAqLwotI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIC8qKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z2xvYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9HTE9CX0ggMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQogCkBAIC02OCwyMSArNDMsOSBAQAogLyogRGVmaW5lIGlmIHJlYWRsaW5lIGxpYnJhcnkgaXMgdGhlcmUgKC1scmVhZGxpbmUpICovCiAvKiAjdW5kZWYgSEFWRV9MSUJSRUFETElORSAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9MT0NBTFRJTUUgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGx6bWEuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9MWk1BX0ggKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hdGguaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTUFUSF9IIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtbWFwJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9NTUFQIDEKIApAQCAtOTQsOSArNTcsNiBAQAogIyAgdW5kZWYgLyoqLyBIQVZFX01NQVAKICNlbmRpZgogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5kaXIuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLiAqLwotLyogI3VuZGVmIEhBVkVfTkRJUl9IICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTkVUREJfSCAxCiAKQEAgLTEwNiw1MSArNjYsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9QT0xMX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByaW50ZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFJJTlRGIDEKLQotLyogRGVmaW5lIGlmIDxwdGhyZWFkLmg+IGlzIHRoZXJlICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB0aHJlYWQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfUFRIUkVBRF9IIC8qKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRlbnYnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmFuZCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUkFORCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmFuZF9yJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9SQU5EX1IgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJlc29sdi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9SRVNPTFZfSCAxCi0KIC8qIEhhdmUgc2hsX2xvYWQgYmFzZWQgZHNvICovCiAvKiAjdW5kZWYgSEFWRV9TSExMT0FEICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnbmFsJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdOQUwgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcHJpbnRmJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TUFJJTlRGIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcmFuZCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1JBTkQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzY2FuZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1NDQU5GIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TVEFUIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCiAKQEAgLTE2MCwyNiArODQsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NURExJQl9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJmdGltZScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSRlRJTUUgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXIuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgotICAgKi8KLS8qICN1bmRlZiBIQVZFX1NZU19ESVJfSCAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19NTUFOX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9uZGlyLmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KLSAgICovCi0vKiAjdW5kZWYgSEFWRV9TWVNfTkRJUl9IICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggMQogCkBAIC0xOTgsMzYgKzExMSwxOCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWUnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RJTUUgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfVElNRV9IIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQogCiAvKiBXaGV0aGVyIHZhX2NvcHkoKSBpcyBhdmFpbGFibGUgKi8KICNkZWZpbmUgSEFWRV9WQV9DT1BZIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2ZnByaW50ZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVkZQUklOVEYgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzbnByaW50ZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVlNOUFJJTlRGIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2c3ByaW50ZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVlNQUklOVEYgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHpsaWIuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9aTElCX0ggKi8KIAogLyogV2hldGhlciBfX3ZhX2NvcHkoKSBpcyBhdmFpbGFibGUgKi8KIC8qICN1bmRlZiBIQVZFX19fVkFfQ09QWSAqLwogCi0vKiBEZWZpbmUgYXMgY29uc3QgaWYgdGhlIGRlY2xhcmF0aW9uIG9mIGljb252KCkgbmVlZHMgY29uc3QuICovCi0jZGVmaW5lIElDT05WX0NPTlNUIAotCiAvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLwogI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyIKIApAQCAtMjQxLDcgKzEzNiw3IEBACiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAibGlieG1sMiIKIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1NUUklORyAibGlieG1sMiAyLjkuMTQiCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJsaWJ4bWwyIDIuMTIuNSIKIAogLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwogI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImxpYnhtbDIiCkBAIC0yNTAsMTAgKzE0NSw3IEBACiAjZGVmaW5lIFBBQ0tBR0VfVVJMICIiCiAKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi45LjE0IgotCi0vKiBUeXBlIGNhc3QgZm9yIHRoZSBzZW5kKCkgZnVuY3Rpb24gMm5kIGFyZyAqLwotI2RlZmluZSBTRU5EX0FSRzJfQ0FTVCAvKiovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4xMi41IgogCiAvKiBEZWZpbmUgdG8gMSBpZiBhbGwgb2YgdGhlIEM5MCBzdGFuZGFyZCBoZWFkZXJzIGV4aXN0IChub3QganVzdCB0aGUgb25lcwogICAgcmVxdWlyZWQgaW4gYSBmcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQpLiBUaGlzIG1hY3JvIGlzIHByb3ZpZGVkIGZvcgpAQCAtMjY3LDE5ICsxNTksMTkgQEAKICNkZWZpbmUgVkFfTElTVF9JU19BUlJBWSAxCiAKIC8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgVkVSU0lPTiAiMi45LjE0IgorI2RlZmluZSBWRVJTSU9OICIyLjEyLjUiCiAKIC8qIERldGVybWluZSB3aGF0IHNvY2tldCBsZW5ndGggKHNvY2tsZW5fdCkgZGF0YSB0eXBlIGlzICovCiAjZGVmaW5lIFhNTF9TT0NLTEVOX1Qgc29ja2xlbl90CiAKKy8qIFRMUyBzcGVjaWZpZXIgKi8KKy8qICN1bmRlZiBYTUxfVEhSRUFEX0xPQ0FMICovCisKIC8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDMyX3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCiAgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKICAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCiAvKiAjdW5kZWYgX1VJTlQzMl9UICovCiAKLS8qIHNzX2ZhbWlseSBpcyBub3QgZGVmaW5lZCBoZXJlLCB1c2UgX19zc19mYW1pbHkgaW5zdGVhZCAqLwotLyogI3VuZGVmIHNzX2ZhbWlseSAqLwotCiAvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgogICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KIC8qICN1bmRlZiB1aW50MzJfdCAqLwpkaWZmIC0tZ2l0IGEvY29uZmlnLmguY21ha2UuaW4gYi9jb25maWcuaC5jbWFrZS5pbgppbmRleCAxZjhiZTcxLi45NDQ2YzNiIDEwMDY0NAotLS0gYS9jb25maWcuaC5jbWFrZS5pbgorKysgYi9jb25maWcuaC5jbWFrZS5pbgpAQCAtMSwyMCArMSwxMSBAQAotLyogY29uZmlnLmguICBHZW5lcmF0ZWQgZnJvbSBjb25maWcuaC5pbiBieSBjb25maWd1cmUuICAqLwotLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCi0KLS8qIERlZmluZSBpZiBfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9yKSkgaXMgYWNjZXB0ZWQgKi8KKy8qIEEgZm9ybSB0aGF0IHdpbGwgbm90IGNvbmZ1c2UgYXBpYnVpbGQucHkgKi8KICNjbWFrZWRlZmluZSBBVFRSSUJVVEVfREVTVFJVQ1RPUiBAQVRUUklCVVRFX0RFU1RSVUNUT1JACiAKLS8qIFR5cGUgY2FzdCBmb3IgdGhlIGdldGhvc3RieW5hbWUoKSBhcmd1bWVudCAqLwotI2NtYWtlZGVmaW5lIEdFVEhPU1RCWU5BTUVfQVJHX0NBU1QgQEdFVEhPU1RCWU5BTUVfQVJHX0NBU1RACi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9pbmV0Lmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvbmFtZXNlci5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0FSUEFfTkFNRVNFUl9IIDEKLQotLyogV2hldGhlciBzdHJ1Y3Qgc29ja2FkZHI6Ol9fc3NfZmFtaWx5IGV4aXN0cyAqLwotI2NtYWtlZGVmaW5lIEhBVkVfQlJPS0VOX1NTX0ZBTUlMWSAxCisvKiBEZWZpbmUgaWYgX19hdHRyaWJ1dGVfXygoZGVzdHJ1Y3RvcikpIGlzIGFjY2VwdGVkICovCisjY21ha2VkZWZpbmUgSEFWRV9BVFRSSUJVVEVfREVTVFJVQ1RPUiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9ETEZDTl9IIDEKQEAgLTMxLDkgKzIyLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRpbWUnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfRlRJTUUgMQogCi0vKiBEZWZpbmUgaWYgZ2V0YWRkcmluZm8gaXMgdGhlcmUgKi8KLSNjbWFrZWRlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKIApAQCAtNjksMTggKzU3LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1BPTExfSCAxCiAKLS8qIERlZmluZSBpZiA8cHRocmVhZC5oPiBpcyB0aGVyZSAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhyZWFkLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfUFRIUkVBRF9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRlbnYnIGZ1bmN0aW9uLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfUFVURU5WIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByYW5kX3InIGZ1bmN0aW9uLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfUkFORF9SIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxyZXNvbHYuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9SRVNPTFZfSCAxCi0KIC8qIEhhdmUgc2hsX2xvYWQgYmFzZWQgZHNvICovCiAjY21ha2VkZWZpbmUgSEFWRV9TSExMT0FEIDEKIApAQCAtMTA4LDkgKzg3LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfVU5JU1REX0ggMQogCkBAIC0xMjMsMzMgKzk5LDYgQEAKIC8qIFdoZXRoZXIgX192YV9jb3B5KCkgaXMgYXZhaWxhYmxlICovCiAjY21ha2VkZWZpbmUgSEFWRV9fX1ZBX0NPUFkgMQogCi0vKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLwotI2NtYWtlZGVmaW5lIExUX09CSkRJUiAiQExUX09CSkRJUkAiCi0KLS8qIE5hbWUgb2YgcGFja2FnZSAqLwotI2RlZmluZSBQQUNLQUdFICJAUEFDS0FHRUAiCi0KLS8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiQFBBQ0tBR0VfQlVHUkVQT1JUQCIKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX05BTUUgIkBQQUNLQUdFX05BTUVAIgotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJAUEFDS0FHRV9TVFJJTkdAIgotCi0vKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiQFBBQ0tBR0VfVEFSTkFNRUAiCi0KLS8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVVJMICJAUEFDS0FHRV9VUkxAIgotCi0vKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIkBQQUNLQUdFX1ZFUlNJT05AIgotCi0vKiBUeXBlIGNhc3QgZm9yIHRoZSBzZW5kKCkgZnVuY3Rpb24gMm5kIGFyZyAqLwotI2NtYWtlZGVmaW5lIFNFTkRfQVJHMl9DQVNUIEBTRU5EX0FSRzJfQ0FTVEAKLQogLyogU3VwcG9ydCBmb3IgSVB2NiAqLwogI2NtYWtlZGVmaW5lIFNVUFBPUlRfSVA2IDEKIApAQCAtMTYyLDE0ICsxMTEsMTQgQEAKIC8qIERldGVybWluZSB3aGF0IHNvY2tldCBsZW5ndGggKHNvY2tsZW5fdCkgZGF0YSB0eXBlIGlzICovCiAjY21ha2VkZWZpbmUgWE1MX1NPQ0tMRU5fVCBAWE1MX1NPQ0tMRU5fVEAKIAorLyogVExTIHNwZWNpZmllciAqLworI2NtYWtlZGVmaW5lIFhNTF9USFJFQURfTE9DQUwgQFhNTF9USFJFQURfTE9DQUxACisKIC8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDMyX3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCiAgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKICAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCiAjY21ha2VkZWZpbmUgX1VJTlQzMl9UIEBfVUlOVDMyX1RACiAKLS8qIHNzX2ZhbWlseSBpcyBub3QgZGVmaW5lZCBoZXJlLCB1c2UgX19zc19mYW1pbHkgaW5zdGVhZCAqLwotI2NtYWtlZGVmaW5lIHNzX2ZhbWlseSBAc3NfZmFtaWx5QAotCiAvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgogICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KICNjbWFrZWRlZmluZSB1aW50MzJfdCBAdWludDMyX3RACmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggN2YyNDAzNi4uZDA5OWI4NyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMiw4ICsyLDggQEAKIEFDX1BSRVJFUShbMi42M10pCiAKIG00X2RlZmluZShbTUFKT1JfVkVSU0lPTl0sIDIpCi1tNF9kZWZpbmUoW01JTk9SX1ZFUlNJT05dLCAxMCkKLW00X2RlZmluZShbTUlDUk9fVkVSU0lPTl0sIDMpCittNF9kZWZpbmUoW01JTk9SX1ZFUlNJT05dLCAxMikKK200X2RlZmluZShbTUlDUk9fVkVSU0lPTl0sIDUpCiAKIEFDX0lOSVQoW2xpYnhtbDJdLFtNQUpPUl9WRVJTSU9OLk1JTk9SX1ZFUlNJT04uTUlDUk9fVkVSU0lPTl0pCiBBQ19DT05GSUdfU1JDRElSKFtlbnRpdGllcy5jXSkKQEAgLTQ4LDEyICs0OCw5IEBACiBBQ19QUk9HX0lOU1RBTEwKIEFDX1BST0dfTE5fUwogQUNfUFJPR19NS0RJUl9QCi1BQ19QUk9HX0NQUAotQUNfUEFUSF9QUk9HKE1WLCBtdiwgL2Jpbi9tdikKIEFDX1BBVEhfUFJPRyhUQVIsIHRhciwgL2Jpbi90YXIpCiBBQ19QQVRIX1BST0coUEVSTCwgcGVybCwgL3Vzci9iaW4vcGVybCkKIEFDX1BBVEhfUFJPRyhXR0VULCB3Z2V0LCAvdXNyL2Jpbi93Z2V0KQotQUNfUEFUSF9QUk9HKFhNTExJTlQsIHhtbGxpbnQsIC91c3IvYmluL3htbGxpbnQpCiBBQ19QQVRIX1BST0coWFNMVFBST0MsIHhzbHRwcm9jLCAvdXNyL2Jpbi94c2x0cHJvYykKIFBLR19QUk9HX1BLR19DT05GSUcKIApAQCAtNjEsNDMxICs1OCwyNjEgQEAKIExUX0xJQl9NCiAKIGRubAotZG5sIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydCBsaW5rZXIgdmVyc2lvbiBzY3JpcHRzIGZvciBzeW1ib2wgdmVyc2lvbmluZwotZG5sIHRoZW4gYWRkIGl0Ci1kbmwKLVZFUlNJT05fU0NSSVBUX0ZMQUdTPQotIyBsdF9jdl9wcm9nX2dudV9sZCBpcyBmcm9tIGxpYnRvb2wgMi4rCi1pZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gIFZFUlNJT05fU0NSSVBUX0ZMQUdTPS1XbCwtLXZlcnNpb24tc2NyaXB0PQotZWxzZQotICBjYXNlICRob3N0IGluCi0gICotKi1zdW5vcyopIFZFUlNJT05fU0NSSVBUX0ZMQUdTPSItV2wsLU0gLVdsLCI7OwotICBlc2FjCi1maQotQUNfU1VCU1QoVkVSU0lPTl9TQ1JJUFRfRkxBR1MpCi1BTV9DT05ESVRJT05BTChbVVNFX1ZFUlNJT05fU0NSSVBUXSwgW3Rlc3QgLW4gIiRWRVJTSU9OX1NDUklQVF9GTEFHUyJdKQotCi1kbmwKIGRubCBXZSBwcm9jZXNzIHRoZSBBQ19BUkdfV0lUSCBmaXJzdCBzbyB0aGF0IGxhdGVyIHdlIGNhbiBtb2RpZnkKIGRubCBzb21lIG9mIHRoZW0gdG8gdHJ5IHRvIHByZXZlbnQgaW1wb3NzaWJsZSBjb21iaW5hdGlvbnMuICBUaGlzCiBkbmwgYWxzbyBhbGxvd3MgdXAgc28gYWxwaGFiZXRpemUgdGhlIGNob2ljZXMKIGRubAogCi1kbmwKLWRubCB6bGliIG9wdGlvbiBtaWdodCBjaGFuZ2UgZmxhZ3MsIHNvIHdlIHNhdmUgdGhlbSBpbml0aWFsbHkKLWRubAotX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKLV9saWJzPSIke0xJQlN9IgotCiBBQ19BUkdfV0lUSChjMTRuLAotWyAgLS13aXRoLWMxNG4gICAgICAgICAgICAgYWRkIHRoZSBDYW5vbmljYWxpemF0aW9uIHN1cHBvcnQgKG9uKV0pCitbICAtLXdpdGgtYzE0biAgICAgICAgICAgICBDYW5vbmljYWwgWE1MIDEuMCBzdXBwb3J0IChvbildKQogQUNfQVJHX1dJVEgoY2F0YWxvZywKLVsgIC0td2l0aC1jYXRhbG9nICAgICAgICAgIGFkZCB0aGUgQ2F0YWxvZyBzdXBwb3J0IChvbildKQorWyAgLS13aXRoLWNhdGFsb2cgICAgICAgICAgWE1MIENhdGFsb2dzIHN1cHBvcnQgKG9uKV0pCiBBQ19BUkdfV0lUSChkZWJ1ZywKLVsgIC0td2l0aC1kZWJ1ZyAgICAgICAgICAgIGFkZCB0aGUgZGVidWdnaW5nIG1vZHVsZSAob24pXSkKLUFDX0FSR19XSVRIKGZleGNlcHRpb25zLAotWyAgLS13aXRoLWZleGNlcHRpb25zICAgICAgYWRkIEdDQyBmbGFnIC1mZXhjZXB0aW9ucyBmb3IgQysrIGV4Y2VwdGlvbnMgKG9mZildKQorWyAgLS13aXRoLWRlYnVnICAgICAgICAgICAgZGVidWdnaW5nIG1vZHVsZSBhbmQgc2hlbGwgKG9uKV0pCiBBQ19BUkdfV0lUSChmdHAsCi1bICAtLXdpdGgtZnRwICAgICAgICAgICAgICBhZGQgdGhlIEZUUCBzdXBwb3J0IChvZmYpXSkKK1sgIC0td2l0aC1mdHAgICAgICAgICAgICAgIEZUUCBzdXBwb3J0IChvZmYpXSkKIEFDX0FSR19XSVRIKGhpc3RvcnksCi1bICAtLXdpdGgtaGlzdG9yeSAgICAgICAgICBhZGQgaGlzdG9yeSBzdXBwb3J0IHRvIHhtbGxpbnQgc2hlbGwob2ZmKV0pCitbICAtLXdpdGgtaGlzdG9yeSAgICAgICAgICBoaXN0b3J5IHN1cHBvcnQgZm9yIHNoZWxsIChvZmYpXSkKK0FDX0FSR19XSVRIKHJlYWRsaW5lLAorWyAgLS13aXRoLXJlYWRsaW5lW1s9RElSXV0gICB1c2UgcmVhZGxpbmUgaW4gRElSIChmb3Igc2hlbGwgaGlzdG9yeSldKQogQUNfQVJHX1dJVEgoaHRtbCwKLVsgIC0td2l0aC1odG1sICAgICAgICAgICAgIGFkZCB0aGUgSFRNTCBzdXBwb3J0IChvbildKQorWyAgLS13aXRoLWh0bWwgICAgICAgICAgICAgSFRNTCBwYXJzZXIgKG9uKV0pCiBBQ19BUkdfV0lUSChodHRwLAotWyAgLS13aXRoLWh0dHAgICAgICAgICAgICAgYWRkIHRoZSBIVFRQIHN1cHBvcnQgKG9uKV0pCitbICAtLXdpdGgtaHR0cCAgICAgICAgICAgICBIVFRQIHN1cHBvcnQgKG9uKV0pCiBBQ19BUkdfV0lUSChpY29udiwKLVsgIC0td2l0aC1pY29udltbPURJUl1dICAgICAgYWRkIElDT05WIHN1cHBvcnQgKG9uKV0pCitbICAtLXdpdGgtaWNvbnZbWz1ESVJdXSAgICAgIGljb252IHN1cHBvcnQgKG9uKV0pCiBBQ19BUkdfV0lUSChpY3UsCi1bICAtLXdpdGgtaWN1ICAgICAgICAgICAgICAgIGFkZCBJQ1Ugc3VwcG9ydCAob2ZmKV0pCitbICAtLXdpdGgtaWN1ICAgICAgICAgICAgICBJQ1Ugc3VwcG9ydCAob2ZmKV0pCiBBQ19BUkdfV0lUSChpc284ODU5eCwKLVsgIC0td2l0aC1pc284ODU5eCAgICAgICAgIGFkZCBJU084ODU5WCBzdXBwb3J0IGlmIG5vIGljb252IChvbildKQotQUNfQVJHX1dJVEgobGVnYWN5LAotWyAgLS13aXRoLWxlZ2FjeSAgICAgICAgICAgYWRkIGRlcHJlY2F0ZWQgQVBJcyBmb3IgY29tcGF0aWJpbGl0eSAob2ZmKV0pCitbICAtLXdpdGgtaXNvODg1OXggICAgICAgICBJU08tODg1OS1YIHN1cHBvcnQgaWYgbm8gaWNvbnYgKG9uKV0pCitBQ19BUkdfV0lUSChsem1hLAorWyAgLS13aXRoLWx6bWFbWz1ESVJdXSAgICAgICB1c2UgbGlibHptYSBpbiBESVIgKG9uKV0pCiBBQ19BUkdfV0lUSChtZW1fZGVidWcsCi1bICAtLXdpdGgtbWVtLWRlYnVnICAgICAgICBhZGQgdGhlIG1lbW9yeSBkZWJ1Z2dpbmcgbW9kdWxlIChvZmYpXSkKK1sgIC0td2l0aC1tZW0tZGVidWcgICAgICAgIG1lbW9yeSBkZWJ1Z2dpbmcgbW9kdWxlIChvZmYpXSkKK0FDX0FSR19XSVRIKG1vZHVsZXMsCitbICAtLXdpdGgtbW9kdWxlcyAgICAgICAgICBkeW5hbWljIG1vZHVsZXMgc3VwcG9ydCAob24pXSkKK0FDX0FSR19XSVRIKG91dHB1dCwKK1sgIC0td2l0aC1vdXRwdXQgICAgICAgICAgIHNlcmlhbGl6YXRpb24gc3VwcG9ydCAob24pXSkKK0FDX0FSR19XSVRIKHBhdHRlcm4sCitbICAtLXdpdGgtcGF0dGVybiAgICAgICAgICB4bWxQYXR0ZXJuIHNlbGVjdGlvbiBpbnRlcmZhY2UgKG9uKV0pCitBQ19BUkdfV0lUSChwdXNoLAorWyAgLS13aXRoLXB1c2ggICAgICAgICAgICAgcHVzaCBwYXJzZXIgaW50ZXJmYWNlcyAob24pXSkKK0FDX0FSR19XSVRIKHB5dGhvbiwKK1sgIC0td2l0aC1weXRob24gICAgICAgICAgIFB5dGhvbiBiaW5kaW5ncyAob24pXSkKK0FDX0FSR19XSVRIKHJlYWRlciwKK1sgIC0td2l0aC1yZWFkZXIgICAgICAgICAgIHhtbFJlYWRlciBwYXJzaW5nIGludGVyZmFjZSAob24pXSkKK0FDX0FSR19XSVRIKHJlZ2V4cHMsCitbICAtLXdpdGgtcmVnZXhwcyAgICAgICAgICByZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnQgKG9uKV0pCitBQ19BUkdfV0lUSChydW5fZGVidWcsCitbICAtLXdpdGgtcnVuLWRlYnVnICAgICAgICBydW50aW1lIGRlYnVnZ2luZyBtb2R1bGUgKG9mZildKQorQUNfQVJHX1dJVEgoc2F4MSwKK1sgIC0td2l0aC1zYXgxICAgICAgICAgICAgIG9sZGVyIFNBWDEgaW50ZXJmYWNlIChvbildKQorQUNfQVJHX1dJVEgoc2NoZW1hcywKK1sgIC0td2l0aC1zY2hlbWFzICAgICAgICAgIFhNTCBTY2hlbWFzIDEuMCBhbmQgUkVMQVggTkcgc3VwcG9ydCAob24pXSkKK0FDX0FSR19XSVRIKHNjaGVtYXRyb24sCitbICAtLXdpdGgtc2NoZW1hdHJvbiAgICAgICBTY2hlbWF0cm9uIHN1cHBvcnQgKG9uKV0pCitBQ19BUkdfV0lUSCh0aHJlYWRzLAorWyAgLS13aXRoLXRocmVhZHMgICAgICAgICAgbXVsdGl0aHJlYWRpbmcgc3VwcG9ydCAob24pXSkKK0FDX0FSR19XSVRIKHRocmVhZC1hbGxvYywKK1sgIC0td2l0aC10aHJlYWQtYWxsb2MgICAgIHBlci10aHJlYWQgbWFsbG9jIGhvb2tzIChvZmYpXSkKK0FDX0FSR19XSVRIKHRyZWUsCitbICAtLXdpdGgtdHJlZSAgICAgICAgICAgICBET00gbGlrZSB0cmVlIG1hbmlwdWxhdGlvbiBBUElzIChvbildKQorQUNfQVJHX1dJVEgodmFsaWQsCitbICAtLXdpdGgtdmFsaWQgICAgICAgICAgICBEVEQgdmFsaWRhdGlvbiBzdXBwb3J0IChvbildKQorQUNfQVJHX1dJVEgod3JpdGVyLAorWyAgLS13aXRoLXdyaXRlciAgICAgICAgICAgeG1sV3JpdGVyIHNlcmlhbGl6YXRpb24gaW50ZXJmYWNlIChvbildKQorQUNfQVJHX1dJVEgoeGluY2x1ZGUsCitbICAtLXdpdGgteGluY2x1ZGUgICAgICAgICBYSW5jbHVkZSAxLjAgc3VwcG9ydCAob24pXSkKK0FDX0FSR19XSVRIKHhwYXRoLAorWyAgLS13aXRoLXhwYXRoICAgICAgICAgICAgWFBhdGggMS4wIHN1cHBvcnQgKG9uKV0pCitBQ19BUkdfV0lUSCh4cHRyLAorWyAgLS13aXRoLXhwdHIgICAgICAgICAgICAgWFBvaW50ZXIgc3VwcG9ydCAob24pXSkKK0FDX0FSR19XSVRIKHhwdHItbG9jcywKK1sgIC0td2l0aC14cHRyLWxvY3MgICAgICAgIFhQb2ludGVyIHJhbmdlcyBhbmQgcG9pbnRzIChvZmYpXSkKK0FDX0FSR19XSVRIKHpsaWIsCitbICAtLXdpdGgtemxpYltbPURJUl1dICAgICAgIHVzZSBsaWJ6IGluIERJUiAob24pXSkKKwogQUNfQVJHX1dJVEgobWluaW11bSwKIFsgIC0td2l0aC1taW5pbXVtICAgICAgICAgIGJ1aWxkIGEgbWluaW1hbGx5IHNpemVkIGxpYnJhcnkgKG9mZildKQotQUNfQVJHX1dJVEgob3V0cHV0LAotWyAgLS13aXRoLW91dHB1dCAgICAgICAgICAgYWRkIHRoZSBzZXJpYWxpemF0aW9uIHN1cHBvcnQgKG9uKV0pCi1BQ19BUkdfV0lUSChwYXR0ZXJuLAotWyAgLS13aXRoLXBhdHRlcm4gICAgICAgICAgYWRkIHRoZSB4bWxQYXR0ZXJuIHNlbGVjdGlvbiBpbnRlcmZhY2UgKG9uKV0pCi1BQ19BUkdfV0lUSChwdXNoLAotWyAgLS13aXRoLXB1c2ggICAgICAgICAgICAgYWRkIHRoZSBQVVNIIHBhcnNlciBpbnRlcmZhY2VzIChvbildKQotQUNfQVJHX1dJVEgocHl0aG9uLAotWyAgLS13aXRoLXB5dGhvbiAgICAgICAgICAgYnVpbGQgUHl0aG9uIGJpbmRpbmdzIChvbildKQotQUNfQVJHX1dJVEgocmVhZGVyLAotWyAgLS13aXRoLXJlYWRlciAgICAgICAgICAgYWRkIHRoZSB4bWxSZWFkZXIgcGFyc2luZyBpbnRlcmZhY2UgKG9uKV0pCi1BQ19BUkdfV0lUSChyZWFkbGluZSwKLVsgIC0td2l0aC1yZWFkbGluZT1ESVIgICAgIHVzZSByZWFkbGluZSBpbiBESVJdLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiICE9ICJubyIgJiYgdGVzdCAiJHdpdGh2YWwiICE9ICJ5ZXMiOyB0aGVuCi0gICAgUkRMX0RJUj0kd2l0aHZhbAotICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR3aXRodmFsL2luY2x1ZGUiCi0gICAgTERGTEFHUz0iJHtMREZMQUdTfSAtTCR3aXRodmFsL2xpYiIKLSAgZmkKLV0pCi1BQ19BUkdfV0lUSChyZWdleHBzLAotWyAgLS13aXRoLXJlZ2V4cHMgICAgICAgICAgYWRkIFJlZ3VsYXIgRXhwcmVzc2lvbnMgc3VwcG9ydCAob24pXSkKLUFDX0FSR19XSVRIKHJ1bl9kZWJ1ZywKLVsgIC0td2l0aC1ydW4tZGVidWcgICAgICAgIGFkZCB0aGUgcnVudGltZSBkZWJ1Z2dpbmcgbW9kdWxlIChvZmYpXSkKLUFDX0FSR19XSVRIKHNheDEsCi1bICAtLXdpdGgtc2F4MSAgICAgICAgICAgICBhZGQgdGhlIG9sZGVyIFNBWDEgaW50ZXJmYWNlIChvbildKQotQUNfQVJHX1dJVEgoc2NoZW1hcywKLVsgIC0td2l0aC1zY2hlbWFzICAgICAgICAgIGFkZCBSZWxheC1ORyBhbmQgU2NoZW1hcyBzdXBwb3J0IChvbildKQotQUNfQVJHX1dJVEgoc2NoZW1hdHJvbiwKLVsgIC0td2l0aC1zY2hlbWF0cm9uICAgICAgIGFkZCBTY2hlbWF0cm9uIHN1cHBvcnQgKG9uKV0pCi1BQ19BUkdfV0lUSCh0aHJlYWRzLAotWyAgLS13aXRoLXRocmVhZHMgICAgICAgICAgYWRkIG11bHRpdGhyZWFkIHN1cHBvcnQob24pXSkKLUFDX0FSR19XSVRIKHRocmVhZC1hbGxvYywKLVsgIC0td2l0aC10aHJlYWQtYWxsb2MgICAgIGFkZCBwZXItdGhyZWFkIG1lbW9yeShvZmYpXSkKLUFDX0FSR19XSVRIKHRyZWUsCi1bICAtLXdpdGgtdHJlZSAgICAgICAgICAgICBhZGQgdGhlIERPTSBsaWtlIHRyZWUgbWFuaXB1bGF0aW9uIEFQSXMgKG9uKV0pCi1BQ19BUkdfV0lUSCh2YWxpZCwKLVsgIC0td2l0aC12YWxpZCAgICAgICAgICAgIGFkZCB0aGUgRFREIHZhbGlkYXRpb24gc3VwcG9ydCAob24pXSkKLUFDX0FSR19XSVRIKHdyaXRlciwKLVsgIC0td2l0aC13cml0ZXIgICAgICAgICAgIGFkZCB0aGUgeG1sV3JpdGVyIHNhdmluZyBpbnRlcmZhY2UgKG9uKV0pCi1BQ19BUkdfV0lUSCh4aW5jbHVkZSwKLVsgIC0td2l0aC14aW5jbHVkZSAgICAgICAgIGFkZCB0aGUgWEluY2x1ZGUgc3VwcG9ydCAob24pXSkKLUFDX0FSR19XSVRIKHhwYXRoLAotWyAgLS13aXRoLXhwYXRoICAgICAgICAgICAgYWRkIHRoZSBYUEFUSCBzdXBwb3J0IChvbildKQotQUNfQVJHX1dJVEgoeHB0ciwKLVsgIC0td2l0aC14cHRyICAgICAgICAgICAgIGFkZCB0aGUgWFBvaW50ZXIgc3VwcG9ydCAob24pXSkKLUFDX0FSR19XSVRIKHhwdHItbG9jcywKLVsgIC0td2l0aC14cHRyLWxvY3MgICAgICAgIGFkZCBzdXBwb3J0IGZvciBYUG9pbnRlciBsb2NhdGlvbnMgKG9mZildKQotQUNfQVJHX1dJVEgobW9kdWxlcywKLVsgIC0td2l0aC1tb2R1bGVzICAgICAgICAgIGFkZCB0aGUgZHluYW1pYyBtb2R1bGVzIHN1cHBvcnQgKG9uKV0pCi1BQ19BUkdfV0lUSCh6bGliLAotWyAgLS13aXRoLXpsaWJbWz1ESVJdXSAgICAgICB1c2UgbGlieiBpbiBESVJdLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiICE9ICJubyIgJiYgdGVzdCAiJHdpdGh2YWwiICE9ICJ5ZXMiOyB0aGVuCi0gICAgWl9ESVI9JHdpdGh2YWwKLSAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkkd2l0aHZhbC9pbmNsdWRlIgotICAgIExERkxBR1M9IiR7TERGTEFHU30gLUwkd2l0aHZhbC9saWIiCi0gIGZpCi1dKQotQUNfQVJHX1dJVEgobHptYSwKLVsgIC0td2l0aC1sem1hW1s9RElSXV0gICAgICAgdXNlIGxpYmx6bWEgaW4gRElSXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiAhPSAibm8iICYmIHRlc3QgIiR3aXRodmFsIiAhPSAieWVzIjsgdGhlbgotICAgIExaTUFfRElSPSR3aXRodmFsCi0gICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHdpdGh2YWwvaW5jbHVkZSIKLSAgICBMREZMQUdTPSIke0xERkxBR1N9IC1MJHdpdGh2YWwvbGliIgotICBmaQotXSkKK0FDX0FSR19XSVRIKGxlZ2FjeSwKK1sgIC0td2l0aC1sZWdhY3kgICAgICAgICAgIG1heGltdW0gQUJJIGNvbXBhdGliaWxpdHkgKG9mZildKQorCitBQ19BUkdfV0lUSCh0bHMsCitbICAtLXdpdGgtdGxzICAgICAgICAgICAgICB0aHJlYWQtbG9jYWwgc3RvcmFnZSAob24pXSkKK0FDX0FSR19XSVRIKGZleGNlcHRpb25zLAorWyAgLS13aXRoLWZleGNlcHRpb25zICAgICAgYWRkIEdDQyBmbGFnIC1mZXhjZXB0aW9ucyBmb3IgQysrIGV4Y2VwdGlvbnMgKG9mZildKQogQUNfQVJHX1dJVEgoY292ZXJhZ2UsCiBbICAtLXdpdGgtY292ZXJhZ2UgICAgICAgICBidWlsZCBmb3IgY29kZSBjb3ZlcmFnZSB3aXRoIEdDQyAob2ZmKV0pCiAKIGRubAogZG5sIGhhcmQgZGVwZW5kZW5jaWVzIG9uIG9wdGlvbnMKIGRubAotaWYgdGVzdCAiJHdpdGhfc2NoZW1hcyIgPSAieWVzIgotdGhlbgoraWYgdGVzdCAiJHdpdGhfYzE0biIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR3aXRoX291dHB1dCIgPSAibm8iOyB0aGVuCisgICAgICAgIGVjaG8gV0FSTklORzogLS13aXRoLWMxNG4gb3ZlcnJpZGVzIC0td2l0aG91dC1vdXRwdXQKKyAgICBmaQorICAgIHdpdGhfb3V0cHV0PXllcworICAgIGlmIHRlc3QgIiR3aXRoX3hwYXRoIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgtYzE0biBvdmVycmlkZXMgLS13aXRob3V0LXhwYXRoCisgICAgZmkKKyAgICB3aXRoX3hwYXRoPXllcworZmkKK2lmIHRlc3QgIiR3aXRoX3NjaGVtYXMiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkd2l0aF9wYXR0ZXJuIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgtc2NoZW1hcyBvdmVycmlkZXMgLS13aXRob3V0LXBhdHRlcm4KKyAgICBmaQogICAgIHdpdGhfcGF0dGVybj15ZXMKKyAgICBpZiB0ZXN0ICIkd2l0aF9yZWdleHBzIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgtc2NoZW1hcyBvdmVycmlkZXMgLS13aXRob3V0LXJlZ2V4cHMKKyAgICBmaQogICAgIHdpdGhfcmVnZXhwcz15ZXMKIGZpCi1pZiB0ZXN0ICIkd2l0aF9zY2hlbWF0cm9uIiA9ICJ5ZXMiCi10aGVuCitpZiB0ZXN0ICIkd2l0aF9zY2hlbWF0cm9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHdpdGhfcGF0dGVybiIgPSAibm8iOyB0aGVuCisgICAgICAgIGVjaG8gV0FSTklORzogLS13aXRoLXNjaGVtYXRyb24gb3ZlcnJpZGVzIC0td2l0aG91dC1wYXR0ZXJuCisgICAgZmkKICAgICB3aXRoX3BhdHRlcm49eWVzCisgICAgaWYgdGVzdCAiJHdpdGhfdHJlZSIgPSAibm8iOyB0aGVuCisgICAgICAgIGVjaG8gV0FSTklORzogLS13aXRoLXNjaGVtYXRyb24gb3ZlcnJpZGVzIC0td2l0aG91dC10cmVlCisgICAgZmkKICAgICB3aXRoX3RyZWU9eWVzCisgICAgaWYgdGVzdCAiJHdpdGhfeHBhdGgiID0gIm5vIjsgdGhlbgorICAgICAgICBlY2hvIFdBUk5JTkc6IC0td2l0aC1zY2hlbWF0cm9uIG92ZXJyaWRlcyAtLXdpdGhvdXQteHBhdGgKKyAgICBmaQogICAgIHdpdGhfeHBhdGg9eWVzCiBmaQotaWYgdGVzdCAiJHdpdGhfcmVhZGVyIiA9ICJ5ZXMiCi10aGVuCitpZiB0ZXN0ICIkd2l0aF9yZWFkZXIiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkd2l0aF9wdXNoIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgtcmVhZGVyIG92ZXJyaWRlcyAtLXdpdGhvdXQtcHVzaAorICAgIGZpCisgICAgd2l0aF9wdXNoPXllcworICAgIGlmIHRlc3QgIiR3aXRoX3RyZWUiID0gIm5vIjsgdGhlbgorICAgICAgICBlY2hvIFdBUk5JTkc6IC0td2l0aC1yZWFkZXIgb3ZlcnJpZGVzIC0td2l0aG91dC10cmVlCisgICAgZmkKKyAgICB3aXRoX3RyZWU9eWVzCitmaQoraWYgdGVzdCAiJHdpdGhfd3JpdGVyIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHdpdGhfb3V0cHV0IiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgtd3JpdGVyIG92ZXJyaWRlcyAtLXdpdGhvdXQtb3V0cHV0CisgICAgZmkKKyAgICB3aXRoX291dHB1dD15ZXMKKyAgICBpZiB0ZXN0ICIkd2l0aF9wdXNoIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgtd3JpdGVyIG92ZXJyaWRlcyAtLXdpdGhvdXQtcHVzaAorICAgIGZpCiAgICAgd2l0aF9wdXNoPXllcwogZmkKLWlmIHRlc3QgIiR3aXRoX3hwdHJfbG9jcyIgPSAieWVzIgotdGhlbgotICAgIHdpdGhfeHB0cj15ZXMKLWZpCi1pZiB0ZXN0ICIkd2l0aF94cHRyIiA9ICJ5ZXMiCi10aGVuCitpZiB0ZXN0ICIkd2l0aF94aW5jbHVkZSIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR3aXRoX3hwYXRoIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgteGluY2x1ZGUgb3ZlcnJpZGVzIC0td2l0aG91dC14cGF0aAorICAgIGZpCiAgICAgd2l0aF94cGF0aD15ZXMKIGZpCi1kbmwKLWRubCBvcHRpb24gdG8gYnVpbGQgYSBtaW5pbWFsIGxpYnhtbDIgbGlicmFyeQotZG5sCi1pZiB0ZXN0ICIkd2l0aF9taW5pbXVtIiA9ICJ5ZXMiCi10aGVuCitpZiB0ZXN0ICIkd2l0aF94cHRyX2xvY3MiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkd2l0aF94cHRyIiA9ICJubyI7IHRoZW4KKyAgICAgICAgZWNobyBXQVJOSU5HOiAtLXdpdGgteHB0ci1sb2NzIG92ZXJyaWRlcyAtLXdpdGhvdXQteHB0cgorICAgIGZpCisgICAgd2l0aF94cHRyPXllcworZmkKK2lmIHRlc3QgIiR3aXRoX3hwdHIiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkd2l0aF94cGF0aCIgPSAibm8iOyB0aGVuCisgICAgICAgIGVjaG8gV0FSTklORzogLS13aXRoLXhwdHIgb3ZlcnJpZGVzIC0td2l0aG91dC14cGF0aAorICAgIGZpCisgICAgd2l0aF94cGF0aD15ZXMKK2ZpCisKK2lmIHRlc3QgIiR3aXRoX21pbmltdW0iID0gInllcyI7IHRoZW4KKyAgICBkbmwKKyAgICBkbmwgb3B0aW9uIHRvIGJ1aWxkIGEgbWluaW1hbCBsaWJ4bWwyIGxpYnJhcnkKKyAgICBkbmwKICAgICBlY2hvICJDb25maWd1cmluZyBmb3IgYSBtaW5pbWFsIGxpYnJhcnkiCi0gICAgaWYgdGVzdCAiJHdpdGhfYzE0biIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfYzE0bj1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfY2F0YWxvZyIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfY2F0YWxvZz1ubwotICAgIGZpCi0gICAgZWNobyBTbyBmYXIgc28gZ29vZCEKLSAgICBpZiB0ZXN0ICIkd2l0aF9kZWJ1ZyIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfZGVidWc9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX2ZleGNlcHRpb25zIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9mZXhjZXB0aW9ucz1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfaGlzdG9yeSIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfaGlzdG9yeT1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfaHRtbCIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfaHRtbD1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfaHR0cCIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfaHR0cD1ubyAKLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX2ljb252IiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9pY29udj1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfaXNvODg1OXgiID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX2lzbzg4NTl4PW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF9tZW1fZGVidWciID0gIiIKLSAgICB0aGVuIAotICAgICAgd2l0aF9tZW1fZGVidWc9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX291dHB1dCIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfb3V0cHV0PW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF9wYXR0ZXJuIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9wYXR0ZXJuPW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF9wdXNoIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9wdXNoPW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF9weXRob24iID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3B5dGhvbj1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfcmVhZGVyIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9yZWFkZXI9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3JlYWRsaW5lIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9yZWFkbGluZT1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfcmVnZXhwcyIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfcmVnZXhwcz1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfcnVuX2RlYnVnIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9ydW5fZGVidWc9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3NheDEiID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3NheDE9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3NjaGVtYXMiID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3NjaGVtYXM9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3NjaGVtYXRyb24iID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3NjaGVtYXRyb249bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3RocmVhZHMiID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3RocmVhZHM9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3RocmVhZF9hbGxvYyIgPSAiIgotICAgIHRoZW4KLSAgICAgIHdpdGhfdGhyZWFkX2FsbG9jPW5vCi0gICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3RyZWUiID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3RyZWU9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3ZhbGlkIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF92YWxpZD1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfd3JpdGVyIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF93cml0ZXI9bm8KLSAgICBmaQotICAgIGlmIHRlc3QgIiR3aXRoX3hpbmNsdWRlIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF94aW5jbHVkZT1ubwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfeHBhdGgiID0gIiIKLSAgICB0aGVuCi0gICAgICB3aXRoX3hwYXRoPW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF94cHRyIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF94cHRyPW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF96bGliIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF96bGliPW5vCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF9tb2R1bGVzIiA9ICIiCi0gICAgdGhlbgotICAgICAgd2l0aF9tb2R1bGVzPW5vCi0gICAgZmkKLWZpCi0KLWVjaG8gQ2hlY2tpbmcgemxpYgotCi1kbmwgQ2hlY2tzIGZvciB6bGliIGxpYnJhcnkuCi0KLVdJVEhfWkxJQj0wCi1pZiB0ZXN0ICIkd2l0aF96bGliIiA9ICJubyI7IHRoZW4KLSAgICBlY2hvICJEaXNhYmxpbmcgemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0IgorICAgIHRlc3QgIiR3aXRoX2MxNG4iID0gIiIgJiYgd2l0aF9jMTRuPW5vCisgICAgdGVzdCAiJHdpdGhfY2F0YWxvZyIgPSAiIiAmJiB3aXRoX2NhdGFsb2c9bm8KKyAgICB0ZXN0ICIkd2l0aF9kZWJ1ZyIgPSAiIiAmJiB3aXRoX2RlYnVnPW5vCisgICAgdGVzdCAiJHdpdGhfZmV4Y2VwdGlvbnMiID0gIiIgJiYgd2l0aF9mZXhjZXB0aW9ucz1ubworICAgIHRlc3QgIiR3aXRoX2hpc3RvcnkiID0gIiIgJiYgd2l0aF9oaXN0b3J5PW5vCisgICAgdGVzdCAiJHdpdGhfaHRtbCIgPSAiIiAmJiB3aXRoX2h0bWw9bm8KKyAgICB0ZXN0ICIkd2l0aF9odHRwIiA9ICIiICYmIHdpdGhfaHR0cD1ubworICAgIHRlc3QgIiR3aXRoX2ljb252IiA9ICIiICYmIHdpdGhfaWNvbnY9bm8KKyAgICB0ZXN0ICIkd2l0aF9pc284ODU5eCIgPSAiIiAmJiB3aXRoX2lzbzg4NTl4PW5vCisgICAgdGVzdCAiJHdpdGhfbHptYSIgPSAiIiAmJiB3aXRoX2x6bWE9bm8KKyAgICB0ZXN0ICIkd2l0aF9tZW1fZGVidWciID0gIiIgJiYgd2l0aF9tZW1fZGVidWc9bm8KKyAgICB0ZXN0ICIkd2l0aF9vdXRwdXQiID0gIiIgJiYgd2l0aF9vdXRwdXQ9bm8KKyAgICB0ZXN0ICIkd2l0aF9wYXR0ZXJuIiA9ICIiICYmIHdpdGhfcGF0dGVybj1ubworICAgIHRlc3QgIiR3aXRoX3B1c2giID0gIiIgJiYgd2l0aF9wdXNoPW5vCisgICAgdGVzdCAiJHdpdGhfcHl0aG9uIiA9ICIiICYmIHdpdGhfcHl0aG9uPW5vCisgICAgdGVzdCAiJHdpdGhfcmVhZGVyIiA9ICIiICYmIHdpdGhfcmVhZGVyPW5vCisgICAgdGVzdCAiJHdpdGhfcmVhZGxpbmUiID0gIiIgJiYgd2l0aF9yZWFkbGluZT1ubworICAgIHRlc3QgIiR3aXRoX3JlZ2V4cHMiID0gIiIgJiYgd2l0aF9yZWdleHBzPW5vCisgICAgdGVzdCAiJHdpdGhfcnVuX2RlYnVnIiA9ICIiICYmIHdpdGhfcnVuX2RlYnVnPW5vCisgICAgdGVzdCAiJHdpdGhfc2F4MSIgPSAiIiAmJiB3aXRoX3NheDE9bm8KKyAgICB0ZXN0ICIkd2l0aF9zY2hlbWFzIiA9ICIiICYmIHdpdGhfc2NoZW1hcz1ubworICAgIHRlc3QgIiR3aXRoX3NjaGVtYXRyb24iID0gIiIgJiYgd2l0aF9zY2hlbWF0cm9uPW5vCisgICAgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAiIiAmJiB3aXRoX3RocmVhZHM9bm8KKyAgICB0ZXN0ICIkd2l0aF90aHJlYWRfYWxsb2MiID0gIiIgJiYgd2l0aF90aHJlYWRfYWxsb2M9bm8KKyAgICB0ZXN0ICIkd2l0aF90cmVlIiA9ICIiICYmIHdpdGhfdHJlZT1ubworICAgIHRlc3QgIiR3aXRoX3ZhbGlkIiA9ICIiICYmIHdpdGhfdmFsaWQ9bm8KKyAgICB0ZXN0ICIkd2l0aF93cml0ZXIiID0gIiIgJiYgd2l0aF93cml0ZXI9bm8KKyAgICB0ZXN0ICIkd2l0aF94aW5jbHVkZSIgPSAiIiAmJiB3aXRoX3hpbmNsdWRlPW5vCisgICAgdGVzdCAiJHdpdGhfeHBhdGgiID0gIiIgJiYgd2l0aF94cGF0aD1ubworICAgIHRlc3QgIiR3aXRoX3hwdHIiID0gIiIgJiYgd2l0aF94cHRyPW5vCisgICAgdGVzdCAiJHdpdGhfemxpYiIgPSAiIiAmJiB3aXRoX3psaWI9bm8KKyAgICB0ZXN0ICIkd2l0aF9tb2R1bGVzIiA9ICIiICYmIHdpdGhfbW9kdWxlcz1ubwogZWxzZQotICAgICMgRG9uJ3QgcnVuIHBrZy1jb25maWcgaWYgd2l0aF96bGliIGNvbnRhaW5zIGEgcGF0aC4KLSAgICBpZiB0ZXN0ICJ4JFpfRElSIiA9ICJ4IjsgdGhlbgotICAgICAgICAjIFRyeSBwa2ctY29uZmlnIGZpcnN0IHNvIHRoYXQgc3RhdGljIGxpbmtpbmcgd29ya3MuCi0gICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFtaXSxbemxpYl0sCi0gICAgICAgICAgICBbV0lUSF9aTElCPTFdLAotICAgICAgICAgICAgWzpdKQorICAgIGRubAorICAgIGRubCBEaXNhYmxlIGRlcGVuZGVudCBtb2R1bGVzCisgICAgZG5sCisgICAgaWYgdGVzdCAiJHdpdGhfb3V0cHV0IiA9ICJubyI7IHRoZW4KKyAgICAgICAgd2l0aF9jMTRuPW5vCisgICAgICAgIHdpdGhfd3JpdGVyPW5vCiAgICAgZmkKLQotICAgIGlmIHRlc3QgIiRXSVRIX1pMSUIiID0gIjAiOyB0aGVuCi0gICAgICAgIEFDX0NIRUNLX0hFQURFUlMoemxpYi5oLAotICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKHosIGd6cmVhZCxbCi0gICAgICAgICAgICAgICAgV0lUSF9aTElCPTEKLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHtaX0RJUn0iICE9ICJ4IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBaX0NGTEFHUz0iLUkke1pfRElSfS9pbmNsdWRlIgotICAgICAgICAgICAgICAgICAgICBaX0xJQlM9Ii1MJHtaX0RJUn0vbGliIC1seiIKLSAgICAgICAgICAgICAgICAgICAgW2Nhc2UgJHtob3N0fSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgKi0qLXNvbGFyaXMqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfTElCUz0iLUwke1pfRElSfS9saWIgLVIke1pfRElSfS9saWIgLWx6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAgIGVzYWNdCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBaX0xJQlM9Ii1seiIKLSAgICAgICAgICAgICAgICBmaV0pCi0gICAgICAgICAgICApCisgICAgaWYgdGVzdCAiJHdpdGhfcGF0dGVybiIgPSAibm8iOyB0aGVuCisgICAgICAgIHdpdGhfc2NoZW1hcz1ubworICAgICAgICB3aXRoX3NjaGVtYXRyb249bm8KKyAgICBmaQorICAgIGlmIHRlc3QgIiR3aXRoX3B1c2giID0gIm5vIjsgdGhlbgorICAgICAgICB3aXRoX3JlYWRlcj1ubworICAgICAgICB3aXRoX3dyaXRlcj1ubworICAgIGZpCisgICAgaWYgdGVzdCAiJHdpdGhfcmVnZXhwcyIgPSAibm8iOyB0aGVuCisgICAgICAgIHdpdGhfc2NoZW1hcz1ubworICAgIGZpCisgICAgaWYgdGVzdCAiJHdpdGhfdHJlZSIgPSAibm8iOyB0aGVuCisgICAgICAgIHdpdGhfcmVhZGVyPW5vCisgICAgICAgIHdpdGhfc2NoZW1hdHJvbj1ubworICAgIGZpCisgICAgaWYgdGVzdCAiJHdpdGhfeHBhdGgiID0gIm5vIjsgdGhlbgorICAgICAgICB3aXRoX2MxNG49bm8KKyAgICAgICAgd2l0aF9zY2hlbWF0cm9uPW5vCisgICAgICAgIHdpdGhfeGluY2x1ZGU9bm8KKyAgICAgICAgd2l0aF94cHRyPW5vCiAgICAgZmkKIGZpCiAKLUFDX1NVQlNUKFpfQ0ZMQUdTKQotQUNfU1VCU1QoWl9MSUJTKQotQUNfU1VCU1QoV0lUSF9aTElCKQorWE1MX1BSSVZBVEVfTElCUz0KK1hNTF9QUklWQVRFX0NGTEFHUz0KK1hNTF9QQ19MSUJTPQorWE1MX1BDX1JFUVVJUkVTPQogCi1lY2hvIENoZWNraW5nIGx6bWEKLQotZG5sIENoZWNrcyBmb3IgbHptYSBsaWJyYXJ5LgotCi1XSVRIX0xaTUE9MAotaWYgdGVzdCAiJHdpdGhfbHptYSIgPSAibm8iOyB0aGVuCi0gICAgZWNobyAiRGlzYWJsaW5nIGx6bWEgY29tcHJlc3Npb24gc3VwcG9ydCIKLWVsc2UKLSAgICAjIERvbid0IHJ1biBwa2ctY29uZmlnIGlmIHdpdGhfbHptYSBjb250YWlucyBhIHBhdGguCi0gICAgaWYgdGVzdCAieCRMWk1BX0RJUiIgPSAieCI7IHRoZW4KLSAgICAgICAgIyBUcnkgcGtnLWNvbmZpZyBmaXJzdCBzbyB0aGF0IHN0YXRpYyBsaW5raW5nIHdvcmtzLgotICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbTFpNQV0sW2xpYmx6bWFdLAotICAgICAgICAgICAgW1dJVEhfTFpNQT0xXSwKLSAgICAgICAgICAgIFs6XSkKLSAgICBmaQotCi0gICAgIyBJZiBwa2ctY29uZmlnIGZhaWxlZCwgZmFsbCBiYWNrIHRvIEFDX0NIRUNLX0xJQi4gVGhpcwotICAgICMgd2lsbCBub3QgcGljayB1cCB0aGUgbmVjZXNzYXJ5IExJQlMgZmxhZ3MgZm9yIGxpYmx6bWEncwotICAgICMgcHJpdmF0ZSBkZXBlbmRlbmNpZXMsIHRob3VnaCwgc28gc3RhdGljIGxpbmtpbmcgbWF5IGZhaWwuCi0gICAgaWYgdGVzdCAiJFdJVEhfTFpNQSIgPSAiMCI7IHRoZW4KLSAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsem1hLmgsCi0gICAgICAgICAgICBBQ19DSEVDS19MSUIobHptYSwgbHptYV9jb2RlLFsKLSAgICAgICAgICAgICAgICBXSVRIX0xaTUE9MQotICAgICAgICAgICAgICAgIGlmIHRlc3QgIngke0xaTUFfRElSfSIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIExaTUFfQ0ZMQUdTPSItSSR7TFpNQV9ESVJ9L2luY2x1ZGUiCi0gICAgICAgICAgICAgICAgICAgIExaTUFfTElCUz0iLUwke0xaTUFfRElSfS9saWIgLWxsem1hIgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgTFpNQV9MSUJTPSItbGx6bWEiCi0gICAgICAgICAgICAgICAgZmldKQotICAgICAgICAgICAgKQotICAgIGZpCi1maQotCi1BQ19TVUJTVChMWk1BX0NGTEFHUykKLUFDX1NVQlNUKExaTUFfTElCUykKLUFDX1NVQlNUKFdJVEhfTFpNQSkKLQotQ1BQRkxBR1M9JHtfY3BwZmxhZ3N9Ci1MSUJTPSR7X2xpYnN9Ci0KLWVjaG8gQ2hlY2tpbmcgaGVhZGVycwotCitkbmwKIGRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KLUFDX0NIRUNLX0hFQURFUlMoW2ZjbnRsLmhdKQotQUNfQ0hFQ0tfSEVBREVSUyhbdW5pc3RkLmhdKQotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3N0YXQuaF0pCi1BQ19DSEVDS19IRUFERVJTKFtzeXMvdHlwZXMuaF0pCi1BQ19DSEVDS19IRUFERVJTKFtzdGRpbnQuaF0pCi1BQ19DSEVDS19IRUFERVJTKFtpbnR0eXBlcy5oXSkKLUFDX0NIRUNLX0hFQURFUlMoW3N5cy9zb2NrZXQuaF0sIFtdLCBbXSwKLVsjaWYgSEFWRV9TWVNfVFlQRVNfSAotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMgZW5kaWYKLV0pCi1BQ19DSEVDS19IRUFERVJTKFtuZXRpbmV0L2luLmhdLCBbXSwgW10sCi1bI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jIGVuZGlmCi1dKQotQUNfQ0hFQ0tfSEVBREVSUyhbYXJwYS9pbmV0LmhdLCBbXSwgW10sCi1bI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jIGVuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotIyBpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSMgZW5kaWYKLV0pCi1BQ19DSEVDS19IRUFERVJTKFtuZXRkYi5oXSkKLUFDX0NIRUNLX0hFQURFUlMoW3N5cy90aW1lLmhdKQotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NlbGVjdC5oXSkKLUFDX0NIRUNLX0hFQURFUlMoW3BvbGwuaF0pCitkbmwKK0FDX0NIRUNLX0hFQURFUlMoW3N0ZGludC5oIGludHR5cGVzLmhdKQorQUNfQ0hFQ0tfSEVBREVSUyhbZmNudGwuaCB1bmlzdGQuaCBzeXMvc3RhdC5oXSkKIEFDX0NIRUNLX0hFQURFUlMoW3N5cy9tbWFuLmhdKQotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3RpbWViLmhdKQotQUNfQ0hFQ0tfSEVBREVSUyhbYXJwYS9uYW1lc2VyLmhdLCBbXSwgW10sCi1bI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jIGVuZGlmCi1dKQotQUNfQ0hFQ0tfSEVBREVSUyhbcmVzb2x2LmhdLCBbXSwgW10sCi1bI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jIGVuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotIyBlbmRpZgotI2lmIEhBVkVfQVJQQV9OQU1FU0VSX0gKLSMgaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+Ci0jIGVuZGlmCi1dKQotQUNfQ0hFQ0tfSEVBREVSUyhbZGwuaF0pCi1BQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSkKK0FDX0NIRUNLX0hFQURFUlMoW3N5cy9zb2NrZXQuaCBuZXRpbmV0L2luLmggYXJwYS9pbmV0LmggbmV0ZGIuaF0pCitBQ19DSEVDS19IRUFERVJTKFtzeXMvc2VsZWN0LmggcG9sbC5oXSkKK0FDX0NIRUNLX0hFQURFUlMoW3N5cy90aW1lLmggc3lzL3RpbWViLmhdKQorQUNfQ0hFQ0tfSEVBREVSUyhbZGwuaCBkbGZjbi5oXSkKK0FDX0NIRUNLX0hFQURFUlMoW2dsb2IuaF0pCitBTV9DT05ESVRJT05BTChXSVRIX0dMT0IsIHRlc3QgIiRhY19jdl9oZWFkZXJfZ2xvYl9oIiA9ICJ5ZXMiKQogCi0KLWVjaG8gQ2hlY2tpbmcgdHlwZXMKLQorZG5sCitkbmwgQ2hlY2tpbmcgdHlwZXMKK2RubAogQUNfVFlQRV9VSU5UMzJfVAogCi0KLWVjaG8gQ2hlY2tpbmcgbGlicmFyaWVzCi0KIGRubCBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgotQUNfQ0hFQ0tfRlVOQ1MoZ2V0dGltZW9mZGF5IGZ0aW1lKQotQUNfQ0hFQ0tfRlVOQ1Moc3RhdCkKLUFDX0NIRUNLX0ZVTkNTKHJhbmRfcikKLUFDX0NIRUNLX0ZVTkNTKGlzYXNjaWkgbW1hcCBtdW5tYXAgcHV0ZW52KQorQUNfQ0hFQ0tfRlVOQ1MoW2dldHRpbWVvZmRheSBmdGltZSBzdGF0IGlzYXNjaWkgbW1hcCBtdW5tYXBdKQogCiBBSF9WRVJCQVRJTShbSEFWRV9NVU5NQVBfQUZURVJdLFsvKiBtbWFwKCkgaXMgbm8gZ29vZCB3aXRob3V0IG11bm1hcCgpICovCiAjaWYgZGVmaW5lZChIQVZFX01NQVApICYmICFkZWZpbmVkKEhBVkVfTVVOTUFQKQpAQCAtNTIzLDY3ICszNTAsMTA4IEBACiAgIEFDX01TR19SRVNVTFQoeWVzKQogICBBQ19ERUZJTkUoW1ZBX0xJU1RfSVNfQVJSQVldLCBbMV0sW0RlZmluZSBpZiB2YV9saXN0IGlzIGFuIGFycmF5IHR5cGVdKV0pCiAKLWRubCBDaGVja3MgZm9yIGluZXQgbGlicmFyaWVzOgotQUNfU0VBUkNIX0xJQlMoZ2V0aG9zdGVudCwgW25zbF0pCi1BQ19TRUFSQ0hfTElCUyhzZXRzb2Nrb3B0LCBbc29ja2V0IG5ldCBuZXR3b3JrXSkKLUFDX1NFQVJDSF9MSUJTKGNvbm5lY3QsIFtpbmV0XSkKK2RubAorZG5sIENoZWNrcyBmb3IgaW5ldCBsaWJyYXJpZXMKK2RubAoraWYgdGVzdCAiJHdpdGhfaHR0cCIgIT0gIm5vIiB8fCB0ZXN0ICJ3aXRoX2Z0cCIgPSAieWVzIjsgdGhlbgorICAgIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAqLSotbWluZ3cqKQorICAgICAgICAgICAgZG5sIEFDX1NFQVJDSF9MSUJTIGRvZXNuJ3Qgd29yayBiZWNhdXNlIG9mIG5vbi1zdGFuZGFyZCBjYWxsaW5nCisgICAgICAgICAgICBkbmwgY29udmVudGlvbnMgb24gMzItYml0IFdpbmRvd3MuCisgICAgICAgICAgICBORVRfTElCUz0iJE5FVF9MSUJTIC1sd3MyXzMyIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIF9saWJzPSRMSUJTCisgICAgICAgICAgICBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnluYW1lLCBbbnNsXSwgWworICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSIgIT0gIm5vbmUgcmVxdWlyZWQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIE5FVF9MSUJTPSIkTkVUX0xJQlMgJGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lIgorICAgICAgICAgICAgICAgIGZpXSwgWzpdLCBbJE5FVF9MSUJTXSkKKyAgICAgICAgICAgIEFDX1NFQVJDSF9MSUJTKGNvbm5lY3QsIFtic2Qgc29ja2V0IGluZXRdLCBbCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9jb25uZWN0IiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgTkVUX0xJQlM9IiRORVRfTElCUyAkYWNfY3Zfc2VhcmNoX2Nvbm5lY3QiCisgICAgICAgICAgICAgICAgZmldLCBbOl0sIFskTkVUX0xJQlNdKQorICAgICAgICAgICAgTElCUz0kX2xpYnMKKyAgICAgICAgICAgIDs7CisgICAgZXNhYwogCi1kbmwgRGV0ZXJtaW5lIHdoYXQgc29ja2V0IGxlbmd0aCAoc29ja2xlbl90KSBkYXRhIHR5cGUgaXMKLUFDX01TR19DSEVDS0lORyhbZm9yIHR5cGUgb2Ygc29ja2V0IGxlbmd0aCAoc29ja2xlbl90KV0pCi1BQ19UUllfQ09NUElMRTIoWwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLFsKLSh2b2lkKWdldHNvY2tvcHQgKDEsIDEsIDEsIE5VTEwsIChzb2NrbGVuX3QgKilOVUxMKV0sWwotICBBQ19NU0dfUkVTVUxUKHNvY2tsZW5fdCAqKQotICBYTUxfU09DS0xFTl9UPXNvY2tsZW5fdF0sWwotICBBQ19UUllfQ09NUElMRTIoWwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLFsKLSh2b2lkKWdldHNvY2tvcHQgKDEsIDEsIDEsIE5VTEwsIChzaXplX3QgKilOVUxMKV0sWwotICAgIEFDX01TR19SRVNVTFQoc2l6ZV90ICopCi0gICAgWE1MX1NPQ0tMRU5fVD1zaXplX3RdLFsKKyAgICBkbmwgRGV0ZXJtaW5lIHdoYXQgc29ja2V0IGxlbmd0aCAoc29ja2xlbl90KSBkYXRhIHR5cGUgaXMKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0eXBlIG9mIHNvY2tldCBsZW5ndGggKHNvY2tsZW5fdCldKQogICAgIEFDX1RSWV9DT01QSUxFMihbCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0sWwotKHZvaWQpZ2V0c29ja29wdCAoMSwgMSwgMSwgTlVMTCwgKGludCAqKU5VTEwpXSxbCi0gICAgICBBQ19NU0dfUkVTVUxUKGludCAqKQotICAgICAgWE1MX1NPQ0tMRU5fVD1pbnRdLFsKLSAgICAgIEFDX01TR19XQVJOKGNvdWxkIG5vdCBkZXRlcm1pbmUpCi0gICAgICBYTUxfU09DS0xFTl9UPSJpbnQiXSldKV0pCi1BQ19ERUZJTkVfVU5RVU9URUQoWE1MX1NPQ0tMRU5fVCwgJFhNTF9TT0NLTEVOX1QsIFtEZXRlcm1pbmUgd2hhdCBzb2NrZXQgbGVuZ3RoIChzb2NrbGVuX3QpIGRhdGEgdHlwZSBpc10pCisgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICNpZmRlZiBfV0lOMzIKKyAgICAgICNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorICAgICNlbHNlCisgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNlbmRpZl0sWworICAgICh2b2lkKWdldHNvY2tvcHQgKDEsIDEsIDEsIE5VTEwsIChzb2NrbGVuX3QgKilOVUxMKV0sWworICAgICAgQUNfTVNHX1JFU1VMVChzb2NrbGVuX3QgKikKKyAgICAgIFhNTF9TT0NLTEVOX1Q9c29ja2xlbl90XSxbCisgICAgICBBQ19UUllfQ09NUElMRTIoWworICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0sWworICAgICh2b2lkKWdldHNvY2tvcHQgKDEsIDEsIDEsIE5VTEwsIChzaXplX3QgKilOVUxMKV0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKHNpemVfdCAqKQorICAgICAgICBYTUxfU09DS0xFTl9UPXNpemVfdF0sWworICAgICAgICBBQ19UUllfQ09NUElMRTIoWworICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0sWworICAgICh2b2lkKWdldHNvY2tvcHQgKDEsIDEsIDEsIE5VTEwsIChpbnQgKilOVUxMKV0sWworICAgICAgICAgIEFDX01TR19SRVNVTFQoaW50ICopCisgICAgICAgICAgWE1MX1NPQ0tMRU5fVD1pbnRdLFsKKyAgICAgICAgICBBQ19NU0dfV0FSTihjb3VsZCBub3QgZGV0ZXJtaW5lKQorICAgICAgICAgIFhNTF9TT0NLTEVOX1Q9ImludCJdKV0pXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoWE1MX1NPQ0tMRU5fVCwgJFhNTF9TT0NLTEVOX1QsIFtEZXRlcm1pbmUgd2hhdCBzb2NrZXQgbGVuZ3RoIChzb2NrbGVuX3QpIGRhdGEgdHlwZSBpc10pCiAKLWRubCBDaGVja2luZyBpZiBnZXRob3N0YnluYW1lKCkgYXJndW1lbnQgaXMgY29uc3QuCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjb25zdCBnZXRob3N0YnluYW1lKCkgYXJndW1lbnRdKQotQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxuZXRkYi5oPl1dLAotICAgIFtbKHZvaWQpZ2V0aG9zdGJ5bmFtZSgoY29uc3QgY2hhciAqKSIiKTtdXSldLAotaGF2ZV9nZXRob3N0YnluYW1lX2NvbnN0X2FyZz15ZXMsCi1oYXZlX2dldGhvc3RieW5hbWVfY29uc3RfYXJnPW5vKQotQUNfTVNHX1JFU1VMVCgkaGF2ZV9nZXRob3N0YnluYW1lX2NvbnN0X2FyZykKLWlmIHRlc3QgeCIkaGF2ZV9nZXRob3N0YnluYW1lX2NvbnN0X2FyZyIgPSB4InllcyI7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0dFVEhPU1RCWU5BTUVfQVJHX0NBU1RdLCBbXSwKLSAgICAgIFtUeXBlIGNhc3QgZm9yIHRoZSBnZXRob3N0YnluYW1lKCkgYXJndW1lbnRdKQotZWxzZQotICAgIEFDX0RFRklORShbR0VUSE9TVEJZTkFNRV9BUkdfQ0FTVF0sIFsoY2hhciAqKV0sCi0gICAgICBbVHlwZSBjYXN0IGZvciB0aGUgZ2V0aG9zdGJ5bmFtZSgpIGFyZ3VtZW50XSkKKyAgICBkbmwKKyAgICBkbmwgQ2hlY2tpbmcgZm9yIGF2YWlsYWJpbGl0eSBvZiBJUHY2CisgICAgZG5sCisgICAgQUNfQVJHX0VOQUJMRShpcHY2LCBbICAtLWVuYWJsZS1pcHY2W1s9eWVzL25vXV0gIGVuYWJsZXMgY29tcGlsYXRpb24gb2YgSVB2NiBjb2RlIFtbZGVmYXVsdD15ZXNdXV0sLCBlbmFibGVfaXB2Nj15ZXMpCisgICAgaWYgdGVzdCAiJHdpdGhfbWluaW11bSIgPSAieWVzIgorICAgIHRoZW4KKyAgICAgICAgZW5hYmxlX2lwdjY9bm8KKyAgICBmaQorICAgIGlmIHRlc3QgJGVuYWJsZV9pcHY2ID0geWVzOyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgSVB2Nl0pCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAgICNpZmRlZiBfV0lOMzIKKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHdpbnNvY2syLmg+CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9ORVREQl9ICisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICBdXSwgW1sKKyAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOworICAgICAgICAgICAgc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgICAgICBnZXRhZGRyaW5mbygwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIF1dKV0sIFsKKyAgICAgICAgICAgIEFDX0RFRklORShbU1VQUE9SVF9JUDZdLCBbXSwgW1N1cHBvcnQgZm9yIElQdjZdKQorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSldLCBbCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pXQorICAgICAgICApCisgICAgZmkKIGZpCiAKLWRubCBDaGVja2luZyBpZiBzZW5kKCkgc2Vjb25kIGFyZ3VtZW50IGlzIGNvbnN0LgotQUNfTVNHX0NIRUNLSU5HKFtmb3IgY29uc3Qgc2VuZCgpIHNlY29uZCBhcmd1bWVudF0pCi1BQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwKLSAgICBbWyh2b2lkKXNlbmQoMSwoY29uc3QgY2hhciAqKSIiLDEsMSk7XV0pXSwKLWhhdmVfc2VuZF9jb25zdF9hcmcyPXllcywKLWhhdmVfc2VuZF9jb25zdF9hcmcyPW5vKQotQUNfTVNHX1JFU1VMVCgkaGF2ZV9zZW5kX2NvbnN0X2FyZzIpCi1pZiB0ZXN0IHgiJGhhdmVfc2VuZF9jb25zdF9hcmcyIiA9IHgieWVzIjsgdGhlbgotICAgIEFDX0RFRklORShbU0VORF9BUkcyX0NBU1RdLCBbXSwKLSAgICAgIFtUeXBlIGNhc3QgZm9yIHRoZSBzZW5kKCkgZnVuY3Rpb24gMm5kIGFyZ10pCi1lbHNlCi0gICAgQUNfREVGSU5FKFtTRU5EX0FSRzJfQ0FTVF0sIFsoY2hhciAqKV0sCi0gICAgICBbVHlwZSBjYXN0IGZvciB0aGUgc2VuZCgpIGZ1bmN0aW9uIDJuZCBhcmddKQorZG5sCitkbmwgRXh0cmEgZmxhZ3MKK2RubAorWE1MX0xJQkRJUj0nLUwke2xpYmRpcn0nCitYTUxfSU5DTFVERURJUj0nLUkke2luY2x1ZGVkaXJ9L2xpYnhtbDInCitYTUxfQ0ZMQUdTPSIiCisKK2RubCBUaHJlYWQtbG9jYWwgc3RvcmFnZQoraWYgdGVzdCAiJHdpdGhfdGxzIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1NPVVJDRShbX1RocmVhZF9sb2NhbCBpbnQgdjtdKSBdLCBbCisgICAgICAgIEFDX0RFRklORShbWE1MX1RIUkVBRF9MT0NBTF0sIFtfVGhyZWFkX2xvY2FsXSwgW1RMUyBzcGVjaWZpZXJdKSBdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1NPVVJDRShbX190aHJlYWQgaW50IHY7XSkgXSwgWworICAgICAgICBBQ19ERUZJTkUoW1hNTF9USFJFQURfTE9DQUxdLCBbX190aHJlYWRdLCBbVExTIHNwZWNpZmllcl0pIF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfU09VUkNFKFtfX2RlY2xzcGVjKHRocmVhZCkgaW50IHY7XSkgXSwgWworICAgICAgICBBQ19ERUZJTkUoW1hNTF9USFJFQURfTE9DQUxdLCBbX19kZWNsc3BlYyh0aHJlYWQpXSwgW1RMUyBzcGVjaWZpZXJdKSBdLCBbCisgICAgV0FSTl9OT19UTFM9MSBdKV0pXSkKIGZpCiAKIGRubCBDaGVja2luZyB3aGV0aGVyIF9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IpKSBpcyBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIKQEAgLTU5Niw5OSArNDY0LDI5IEBACiAgIEFDX0RFRklORShbQVRUUklCVVRFX0RFU1RSVUNUT1JdLCBbX19hdHRyaWJ1dGVfXygoZGVzdHJ1Y3RvcikpXSxbQSBmb3JtIHRoYXQgd2lsbCBub3QgY29uZnVzZSBhcGlidWlsZC5weV0pXSxbCiAgIEFDX01TR19SRVNVTFQobm8pXSkKIAotCi1kbmwgKioqKioqKioqKioqKioqKioqKioqKipDaGVja2luZyBmb3IgYXZhaWxhYmlsaXR5IG9mIElQdjYqKioqKioqKioqKioqKioqKioqCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgSVB2Nl0pCi1BQ19BUkdfRU5BQkxFKGlwdjYsIFsgIC0tZW5hYmxlLWlwdjZbWz15ZXMvbm9dXSAgZW5hYmxlcyBjb21waWxhdGlvbiBvZiBJUHY2IGNvZGUgW1tkZWZhdWx0PXllc11dXSwsIGVuYWJsZV9pcHY2PXllcykKLWlmIHRlc3QgIiR3aXRoX21pbmltdW0iID0gInllcyIKLXRoZW4KLSAgICBlbmFibGVfaXB2Nj1ubworZG5sCitkbmwgTGlua2VyIHZlcnNpb24gc2NyaXB0cyBmb3Igc3ltYm9sIHZlcnNpb25pbmcKK2RubAorVkVSU0lPTl9TQ1JJUFRfRkxBR1M9CisjIGx0X2N2X3Byb2dfZ251X2xkIGlzIGZyb20gbGlidG9vbCAyLisKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1tc3lzKiApCisgICAgICA7OworICAgICopCisgICAgICBkbmwgbGxkIDE2IGRlZmF1bHRzIHRvIC0tbm8tdW5kZWZpbmVkLXZlcnNpb24gYnV0IHRoZSB2ZXJzaW9uIHNjcmlwdAorICAgICAgZG5sIGNhbiBjb250YWluIHN5bWJvbHMgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgQVhfQVBQRU5EX0xJTktfRkxBR1MoWy1XbCwtLXVuZGVmaW5lZC12ZXJzaW9uXSwgW1ZFUlNJT05fU0NSSVBUX0ZMQUdTXSkKKyAgICAgIEFYX0FQUEVORF9GTEFHKFstV2wsLS12ZXJzaW9uLXNjcmlwdD1dLCBbVkVSU0lPTl9TQ1JJUFRfRkxBR1NdKQorICAgICAgOzsKKyAgZXNhYworZWxzZQorICBjYXNlICRob3N0IGluCisgICotKi1zdW5vcyopIFZFUlNJT05fU0NSSVBUX0ZMQUdTPSItV2wsLU0gLVdsLCI7OworICBlc2FjCiBmaQotaWYgdGVzdCAkZW5hYmxlX2lwdjYgPSB5ZXM7IHRoZW4KLSAgaGF2ZV9pcHY2PW5vCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLSMgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMgICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gICAgXV0sIFtbCi0gICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7Ci0gICAgc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCkKLSAgICBdXSldLAotICAgIGhhdmVfaXB2Nj15ZXMsCi0gICAgaGF2ZV9pcHY2PW5vCi0gICkKLSAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9pcHY2KQotCi0gIGlmIHRlc3QgJGhhdmVfaXB2NiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShbU1VQUE9SVF9JUDZdLCBbXSwgW1N1cHBvcnQgZm9yIElQdjZdKQotICAgIGhhdmVfYnJva2VuX3NzX2ZhbWlseT1ubwotCi0gICAgZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIGRubCBvbiBzb21lIHBsYXRmb3JtcyAobGlrZSBBSVggNUwpLCB0aGUgc3RydWN0dXJlIHNvY2thZGRyIGRvZXNuJ3QgaGF2ZQotICAgIGRubCBhIHNzX2ZhbWlseSBtZW1iZXIsIGJ1dCByYXRoZXIgX19zc19mYW1pbHkuIExldCdzIGRldGVjdCB0aGF0Ci0gICAgZG5sIGFuZCBkZWZpbmUgdGhlIEhBVkVfQlJPS0VOX1NTX0ZBTUlMWSB3aGVuIHdlIGFyZSBvbiBvbmUgb2YgdGhlc2UKLSAgICBkbmwgcGxhdGZvcm1zLiAgSG93ZXZlciwgd2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiBzc19mYW1pbHkgaXMgbm90Ci0gICAgZG5sIHByZXNlbnQuCi0gICAgZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtzdHJ1Y3Qgc29ja2FkZHI6OnNzX2ZhbWlseV0pCi0gICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwotIyAgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jICAgICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gICAgICBdXSwgW1sKLSAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzIDsKLSAgICAgIHNzLnNzX2ZhbWlseSA9IDAgOwotICAgICAgXV0pXSwKLSAgICAgIGhhdmVfc3NfZmFtaWx5PXllcywKLSAgICAgIGhhdmVfc3NfZmFtaWx5PW5vCi0gICAgKQotICAgIEFDX01TR19SRVNVTFQoJGhhdmVfc3NfZmFtaWx5KQotICAgIGlmIHRlc3QgeCRoYXZlX3NzX2ZhbWlseSA9IHhubyA7IHRoZW4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbYnJva2VuIHN0cnVjdCBzb2NrYWRkcjo6c3NfZmFtaWx5XSkKLSAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLSMgICAgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jICAgICAgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSAgICAgICAgXV0sIFtbCi0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzIDsKLSAgICAgICAgc3MuX19zc19mYW1pbHkgPSAwIDsKLSAgICAgICAgXV0pXSwKLSAgICAgICAgaGF2ZV9icm9rZW5fc3NfZmFtaWx5PXllcywKLSAgICAgICAgaGF2ZV9icm9rZW5fc3NfZmFtaWx5PW5vCi0gICAgICApCi0gICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2Jyb2tlbl9zc19mYW1pbHkpCi0gICAgICBpZiB0ZXN0IHgkaGF2ZV9icm9rZW5fc3NfZmFtaWx5ID0geHllcyA7IHRoZW4KLSAgICAgICAgQUNfREVGSU5FKEhBVkVfQlJPS0VOX1NTX0ZBTUlMWSwgW10sCi0JICBbV2hldGhlciBzdHJ1Y3Qgc29ja2FkZHI6Ol9fc3NfZmFtaWx5IGV4aXN0c10pIAotICAgICAgICBBQ19ERUZJTkUoc3NfZmFtaWx5LCBfX3NzX2ZhbWlseSwKLQkgIFtzc19mYW1pbHkgaXMgbm90IGRlZmluZWQgaGVyZSwgdXNlIF9fc3NfZmFtaWx5IGluc3RlYWRdKQotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfV0FSTihzc19mYW1pbHkgYW5kIF9fc3NfZmFtaWx5IG5vdCBmb3VuZCkKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGhhdmVfZ2V0YWRkcmluZm89bm8KLSAgICBBQ19DSEVDS19GVU5DKGdldGFkZHJpbmZvLCBoYXZlX2dldGFkZHJpbmZvPXllcykKLSAgICBpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvICE9IHllczsgdGhlbgotICAgICAgZm9yIGxpYiBpbiBic2Qgc29ja2V0IGluZXQ7IGRvCi0gICAgICAgIEFDX0NIRUNLX0xJQigkbGliLCBnZXRhZGRyaW5mbywgW0xJQlM9IiRMSUJTIC1sJGxpYiI7aGF2ZV9nZXRhZGRyaW5mbz15ZXM7YnJlYWtdKQotICAgICAgZG9uZQotICAgIGZpCi0KLSAgICBpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0geWVzOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoW0hBVkVfR0VUQUREUklORk9dLCBbXSwgW0RlZmluZSBpZiBnZXRhZGRyaW5mbyBpcyB0aGVyZV0pCi0gICAgZmkKLSAgZmkKLWZpIAotCi1kbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqRW5kIElQdjYgY2hlY2tzKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLVhNTF9MSUJESVI9Jy1MJHtsaWJkaXJ9JwotWE1MX0lOQ0xVREVESVI9Jy1JJHtpbmNsdWRlZGlyfS9saWJ4bWwyJwotCi1kbmwKLWRubCBFeHRyYSBmbGFncwotZG5sCi1YTUxfQ0ZMQUdTPSIiCi1SRExfTElCUz0iIgorQUNfU1VCU1QoVkVSU0lPTl9TQ1JJUFRfRkxBR1MpCitBTV9DT05ESVRJT05BTChbVVNFX1ZFUlNJT05fU0NSSVBUXSwgW3Rlc3QgLW4gIiRWRVJTSU9OX1NDUklQVF9GTEFHUyJdKQogCiBkbmwKIGRubCBXb3JrYXJvdW5kIGZvciBuYXRpdmUgY29tcGlsZXJzCkBAIC02OTgsMTMgKzQ5NiwxMyBAQAogaWYgdGVzdCAiJHtHQ0N9IiAhPSAieWVzIiA7IHRoZW4KICAgICBjYXNlICIke2hvc3R9IiBpbgogICAgICAgICAgIGhwcGEqLSotaHB1eCogKQotCSAgICAgICBFWFRSQV9DRkxBR1M9IiR7RVhUUkFfQ0ZMQUdTfSAtV3AsLUgzMDAwMCIKKwkgICAgICAgQU1fQ0ZMQUdTPSIke0FNX0NGTEFHU30gLVdwLC1IMzAwMDAiCiAJICAgICAgIDs7CiAgICAgICAgICAgKi1kZWMtb3NmKiApCi0gICAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiR7RVhUUkFfQ0ZMQUdTfSAtaWVlZSIKKyAgICAgICAgICAgICAgIEFNX0NGTEFHUz0iJHtBTV9DRkxBR1N9IC1pZWVlIgogICAgICAgICAgICAgICAgOzsKIAkgIGFscGhhKi0qLWxpbnV4KiApCi0JICAgICAgIEVYVFJBX0NGTEFHUz0iJHtFWFRSQV9DRkxBR1N9IC1pZWVlIgorCSAgICAgICBBTV9DRkxBR1M9IiR7QU1fQ0ZMQUdTfSAtaWVlZSIKIAkgICAgICAgOzsKICAgICBlc2FjCiBlbHNlCkBAIC03MTQsMTkgKzUxMiwxOSBAQAogCSMgTm90IGFjdGl2YXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhpcyBpbmZsYXRlcyB0aGUgY29kZSBzaXplCiAJIyBVc2VkIHRvIGFsbG93IHByb3BhZ2F0aW9uIG9mIEMrKyBleGNlcHRpb25zIHRocm91Z2ggdGhlIGxpYnJhcnkKIAkjCi0JRVhUUkFfQ0ZMQUdTPSIke0VYVFJBX0NGTEFHU30gLWZleGNlcHRpb25zIgorCUFNX0NGTEFHUz0iJHtBTV9DRkxBR1N9IC1mZXhjZXB0aW9ucyIKICAgICBmaQogCiAgICAgIyB3YXJuaW5ncyB3ZSdkIGxpa2UgdG8gc2VlCi0gICAgRVhUUkFfQ0ZMQUdTPSIke0VYVFJBX0NGTEFHU30gLXBlZGFudGljIC1XYWxsIC1XZXh0cmEgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1hbGlnbiAtV3dyaXRlLXN0cmluZ3MgLVdhZ2dyZWdhdGUtcmV0dXJuIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZSAtV3JlZHVuZGFudC1kZWNscyIKKyAgICBBTV9DRkxBR1M9IiR7QU1fQ0ZMQUdTfSAtcGVkYW50aWMgLVdhbGwgLVdleHRyYSAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIgogICAgICMgd2FybmluZ3Mgd2UnZCBsaWtlIHRvIHN1cHByZXNzCi0gICAgRVhUUkFfQ0ZMQUdTPSIke0VYVFJBX0NGTEFHU30gLVduby1sb25nLWxvbmcgLVduby1mb3JtYXQtZXh0cmEtYXJncyIKKyAgICBBTV9DRkxBR1M9IiR7QU1fQ0ZMQUdTfSAtV25vLWxvbmctbG9uZyAtV25vLWZvcm1hdC1leHRyYS1hcmdzIgogICAgIGNhc2UgIiR7aG9zdH0iIGluCiAgICAgICAgICAgYWxwaGEqLSotbGludXgqICkKLQkgICAgICAgRVhUUkFfQ0ZMQUdTPSIke0VYVFJBX0NGTEFHU30gLW1pZWVlIgorCSAgICAgICBBTV9DRkxBR1M9IiR7QU1fQ0ZMQUdTfSAtbWllZWUiCiAJICAgICAgIDs7CiAJICBhbHBoYSotKi1vc2YqICkKLQkgICAgICAgRVhUUkFfQ0ZMQUdTPSIke0VYVFJBX0NGTEFHU30gLW1pZWVlIgorCSAgICAgICBBTV9DRkxBR1M9IiR7QU1fQ0ZMQUdTfSAtbWllZWUiCiAJICAgICAgIDs7CiAgICAgZXNhYwogZmkKQEAgLTczNywxNjggKzUzNSwzNjUgQEAKICAgICBocHBhKi1ocC1tcGVpeCkKICAgICAgICAgTkVFRF9UUklPPTEKIAk7OwotICAgICotKi1taW5ndyogfCAqLSotY3lnd2luKiB8ICotKi1tc3ZjKiApCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLW1zeXMqICkKICAgICAgICAgIyBJZiB0aGUgaG9zdCBpcyBXaW5kb3dzLCBhbmQgc2hhcmVkIGxpYnJhcmllcyBhcmUgZGlzYWJsZWQsIHdlCi0gICAgICAgICMgbmVlZCB0byBhZGQgLURMSUJYTUxfU1RBVElDIHRvIEVYVFJBX0NGTEFHUyBpbiBvcmRlciBmb3IgbGlua2luZyB0bworICAgICAgICAjIG5lZWQgdG8gYWRkIC1ETElCWE1MX1NUQVRJQyB0byBBTV9DRkxBR1MgaW4gb3JkZXIgZm9yIGxpbmtpbmcgdG8KICAgICAgICAgIyB3b3JrIHByb3Blcmx5ICh3aXRob3V0IGl0LCB4bWxleHBvcnRzLmggd291bGQgZm9yY2UgdGhlIHVzZSBvZgogICAgICAgICAjIERMTCBpbXBvcnRzLCB3aGljaCBvYnZpb3VzbHkgYXJlbid0IHByZXNlbnQgaW4gYSBzdGF0aWMKICAgICAgICAgIyBsaWJyYXJ5KS4KICAgICAgICAgaWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiA9ICJ4bm8iOyB0aGVuCiAgICAgICAgICAgICBYTUxfQ0ZMQUdTPSIkWE1MX0NGTEFHUyAtRExJQlhNTF9TVEFUSUMiCi0gICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLURMSUJYTUxfU1RBVElDIgorICAgICAgICAgICAgQU1fQ0ZMQUdTPSIkQU1fQ0ZMQUdTIC1ETElCWE1MX1NUQVRJQyIKICAgICAgICAgZmkKICAgICAgICAgOzsKIGVzYWMKIAogCiBkbmwKLWRubCBjaGVjayBmb3IgcHl0aG9uCitkbmwgU2ltcGxlIEFQSSBtb2R1bGVzCiBkbmwKIAotUFlUSE9OX1RFU1RTPQoraWYgdGVzdCAiJHdpdGhfdHJlZSIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIERPTSBsaWtlIHRyZWUgbWFuaXB1bGF0aW9uIEFQSXMKKyAgICBXSVRIX1RSRUU9MAorZWxzZQorICAgIFdJVEhfVFJFRT0xCitmaQorQUNfU1VCU1QoV0lUSF9UUkVFKQorCitpZiB0ZXN0ICIkd2l0aF9mdHAiICE9ICJ5ZXMiIDsgdGhlbgorICAgIFdJVEhfRlRQPTAKK2Vsc2UKKyAgICBlY2hvIEVuYWJsaW5nIEZUUCBzdXBwb3J0CisgICAgV0lUSF9GVFA9MQorZmkKK0FDX1NVQlNUKFdJVEhfRlRQKQorQU1fQ09ORElUSU9OQUwoV0lUSF9GVFBfU09VUkNFUywgdGVzdCAiJFdJVEhfRlRQIiA9ICIxIikKKworaWYgdGVzdCAiJHdpdGhfaHR0cCIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIEhUVFAgc3VwcG9ydAorICAgIFdJVEhfSFRUUD0wCitlbHNlCisgICAgV0lUSF9IVFRQPTEKK2ZpCitBQ19TVUJTVChXSVRIX0hUVFApCitBTV9DT05ESVRJT05BTChXSVRIX0hUVFBfU09VUkNFUywgdGVzdCAiJFdJVEhfSFRUUCIgPSAiMSIpCisKK2lmIHRlc3QgIiR3aXRoX2xlZ2FjeSIgIT0gInllcyIgOyB0aGVuCisgICAgV0lUSF9MRUdBQ1k9MAorZWxzZQorICAgIGVjaG8gRW5hYmxpbmcgZGVwcmVjYXRlZCBBUElzCisgICAgV0lUSF9MRUdBQ1k9MQorZmkKK0FDX1NVQlNUKFdJVEhfTEVHQUNZKQorQU1fQ09ORElUSU9OQUwoV0lUSF9MRUdBQ1lfU09VUkNFUywgdGVzdCAiJFdJVEhfTEVHQUNZIiA9ICIxIikKKworaWYgdGVzdCAiJHdpdGhfcmVhZGVyIiA9ICJubyIgOyB0aGVuCisgICAgZWNobyBEaXNhYmxpbmcgdGhlIHhtbFJlYWRlciBwYXJzaW5nIGludGVyZmFjZQorICAgIFdJVEhfUkVBREVSPTAKK2Vsc2UKKyAgICBXSVRIX1JFQURFUj0xCitmaQorQUNfU1VCU1QoV0lUSF9SRUFERVIpCitBTV9DT05ESVRJT05BTChXSVRIX1JFQURFUl9TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9SRUFERVIiID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF93cml0ZXIiID0gIm5vIiA7IHRoZW4KKyAgICBlY2hvIERpc2FibGluZyB0aGUgeG1sV3JpdGVyIHNhdmluZyBpbnRlcmZhY2UKKyAgICBXSVRIX1dSSVRFUj0wCitlbHNlCisgICAgV0lUSF9XUklURVI9MQorZmkKK0FDX1NVQlNUKFdJVEhfV1JJVEVSKQorQU1fQ09ORElUSU9OQUwoV0lUSF9XUklURVJfU09VUkNFUywgdGVzdCAiJFdJVEhfV1JJVEVSIiA9ICIxIikKKworaWYgdGVzdCAiJHdpdGhfcGF0dGVybiIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIHRoZSB4bWxQYXR0ZXJuIHBhcnNpbmcgaW50ZXJmYWNlCisgICAgV0lUSF9QQVRURVJOPTAKK2Vsc2UKKyAgICBXSVRIX1BBVFRFUk49MQorZmkKK0FDX1NVQlNUKFdJVEhfUEFUVEVSTikKK0FNX0NPTkRJVElPTkFMKFdJVEhfUEFUVEVSTl9TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9QQVRURVJOIiA9ICIxIikKKworaWYgdGVzdCAiJHdpdGhfc2F4MSIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIHRoZSBvbGRlciBTQVgxIGludGVyZmFjZQorICAgIFdJVEhfU0FYMT0wCitlbHNlCisgICAgV0lUSF9TQVgxPTEKK2ZpCitBQ19TVUJTVChXSVRIX1NBWDEpCitBTV9DT05ESVRJT05BTChXSVRIX1NBWDFfU09VUkNFUywgdGVzdCAiJFdJVEhfU0FYMSIgPSAiMSIpCisKK2lmIHRlc3QgIiR3aXRoX3B1c2giID0gIm5vIiA7IHRoZW4KKyAgICBlY2hvIERpc2FibGluZyB0aGUgUFVTSCBwYXJzZXIgaW50ZXJmYWNlcworICAgIFdJVEhfUFVTSD0wCitlbHNlCisgICAgV0lUSF9QVVNIPTEKK2ZpCitBQ19TVUJTVChXSVRIX1BVU0gpCisKK2lmIHRlc3QgIiR3aXRoX2h0bWwiID0gIm5vIiA7IHRoZW4KKyAgICBlY2hvIERpc2FibGluZyBIVE1MIHN1cHBvcnQKKyAgICBXSVRIX0hUTUw9MAorZWxzZQorICAgIFdJVEhfSFRNTD0xCitmaQorQUNfU1VCU1QoV0lUSF9IVE1MKQorQU1fQ09ORElUSU9OQUwoV0lUSF9IVE1MX1NPVVJDRVMsIHRlc3QgIiRXSVRIX0hUTUwiID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF92YWxpZCIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIERURCB2YWxpZGF0aW9uIHN1cHBvcnQKKyAgICBXSVRIX1ZBTElEPTAKK2Vsc2UKKyAgICBXSVRIX1ZBTElEPTEKK2ZpCitBQ19TVUJTVChXSVRIX1ZBTElEKQorQU1fQ09ORElUSU9OQUwoV0lUSF9WQUxJRF9TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9WQUxJRCIgPSAiMSIpCisKK2lmIHRlc3QgIiR3aXRoX2NhdGFsb2ciID0gIm5vIiA7IHRoZW4KKyAgICBlY2hvIERpc2FibGluZyBDYXRhbG9nIHN1cHBvcnQKKyAgICBXSVRIX0NBVEFMT0c9MAorZWxzZQorICAgIFdJVEhfQ0FUQUxPRz0xCitmaQorQUNfU1VCU1QoV0lUSF9DQVRBTE9HKQorQU1fQ09ORElUSU9OQUwoV0lUSF9DQVRBTE9HX1NPVVJDRVMsIHRlc3QgIiRXSVRIX0NBVEFMT0ciID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF94cHRyIiA9ICJubyIgOyB0aGVuCisgICAgZWNobyBEaXNhYmxpbmcgWFBvaW50ZXIgc3VwcG9ydAorICAgIFdJVEhfWFBUUj0wCisgICAgV0lUSF9YUFRSX0xPQ1M9MAorZWxzZQorICAgIFdJVEhfWFBUUj0xCitmaQorQUNfU1VCU1QoV0lUSF9YUFRSKQorQU1fQ09ORElUSU9OQUwoV0lUSF9YUFRSX1NPVVJDRVMsIHRlc3QgIiRXSVRIX1hQVFIiID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF94cHRyX2xvY3MiICE9ICJ5ZXMiIDsgdGhlbgorICAgIFdJVEhfWFBUUl9MT0NTPTAKK2Vsc2UKKyAgICBlY2hvIEVuYWJsaW5nIFhwb2ludGVyIGxvY2F0aW9ucyBzdXBwb3J0CisgICAgV0lUSF9YUFRSX0xPQ1M9MQorZmkKK0FDX1NVQlNUKFdJVEhfWFBUUl9MT0NTKQorCitpZiB0ZXN0ICIkd2l0aF9jMTRuIiA9ICJubyIgOyB0aGVuCisgICAgZWNobyBEaXNhYmxpbmcgQzE0TiBzdXBwb3J0CisgICAgV0lUSF9DMTROPTAKK2Vsc2UKKyAgICBXSVRIX0MxNE49MQorZmkKK0FDX1NVQlNUKFdJVEhfQzE0TikKK0FNX0NPTkRJVElPTkFMKFdJVEhfQzE0Tl9TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9DMTROIiA9ICIxIikKKworaWYgdGVzdCAiJHdpdGhfeGluY2x1ZGUiID0gIm5vIiA7IHRoZW4KKyAgICBlY2hvIERpc2FibGluZyBYSW5jbHVkZSBzdXBwb3J0CisgICAgV0lUSF9YSU5DTFVERT0wCitlbHNlCisgICAgV0lUSF9YSU5DTFVERT0xCitmaQorQUNfU1VCU1QoV0lUSF9YSU5DTFVERSkKK0FNX0NPTkRJVElPTkFMKFdJVEhfWElOQ0xVREVfU09VUkNFUywgdGVzdCAiJFdJVEhfWElOQ0xVREUiID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF9zY2hlbWF0cm9uIiA9ICJubyIgOyB0aGVuCisgICAgZWNobyAiRGlzYWJsaW5nIFNjaGVtYXRyb24gc3VwcG9ydCIKKyAgICBXSVRIX1NDSEVNQVRST049MAorZWxzZQorICAgIFdJVEhfU0NIRU1BVFJPTj0xCitmaQorQUNfU1VCU1QoV0lUSF9TQ0hFTUFUUk9OKQorQU1fQ09ORElUSU9OQUwoV0lUSF9TQ0hFTUFUUk9OX1NPVVJDRVMsIHRlc3QgIiRXSVRIX1NDSEVNQVRST04iID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF94cGF0aCIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIFhQQVRIIHN1cHBvcnQKKyAgICBXSVRIX1hQQVRIPTAKK2Vsc2UKKyAgICBXSVRIX1hQQVRIPTEKK2ZpCitBQ19TVUJTVChXSVRIX1hQQVRIKQorQU1fQ09ORElUSU9OQUwoV0lUSF9YUEFUSF9TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9YUEFUSCIgPSAiMSIpCisKK2lmIHRlc3QgIiR3aXRoX291dHB1dCIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIHNlcmlhbGl6YXRpb24vc2F2aW5nIHN1cHBvcnQKKyAgICBXSVRIX09VVFBVVD0wCitlbHNlCisgICAgV0lUSF9PVVRQVVQ9MQorZmkKK0FDX1NVQlNUKFdJVEhfT1VUUFVUKQorQU1fQ09ORElUSU9OQUwoV0lUSF9PVVRQVVRfU09VUkNFUywgdGVzdCAiJFdJVEhfT1VUUFVUIiA9ICIxIikKKworaWYgdGVzdCAiJFdJVEhfSUNPTlYiICE9ICIxIiAmJiB0ZXN0ICIkd2l0aF9pc284ODU5eCIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIElTTzg4NTlYIHN1cHBvcnQKKyAgICBXSVRIX0lTTzg4NTlYPTAKK2Vsc2UKKyAgICBXSVRIX0lTTzg4NTlYPTEKK2ZpCitBQ19TVUJTVChXSVRIX0lTTzg4NTlYKQorCitpZiB0ZXN0ICIkd2l0aF9zY2hlbWFzIiA9ICJubyIgOyB0aGVuCisgICAgZWNobyAiRGlzYWJsaW5nIFNjaGVtYXMvUmVsYXgtTkcgc3VwcG9ydCIKKyAgICBXSVRIX1NDSEVNQVM9MAorZWxzZQorICAgIFdJVEhfU0NIRU1BUz0xCitmaQorQUNfU1VCU1QoV0lUSF9TQ0hFTUFTKQorQU1fQ09ORElUSU9OQUwoV0lUSF9TQ0hFTUFTX1NPVVJDRVMsIHRlc3QgIiRXSVRIX1NDSEVNQVMiID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF9yZWdleHBzIiA9ICJubyIgOyB0aGVuCisgICAgZWNobyBEaXNhYmxpbmcgUmVnZXhwcyBzdXBwb3J0CisgICAgV0lUSF9SRUdFWFBTPTAKK2Vsc2UKKyAgICBXSVRIX1JFR0VYUFM9MQorZmkKK0FDX1NVQlNUKFdJVEhfUkVHRVhQUykKK0FNX0NPTkRJVElPTkFMKFdJVEhfUkVHRVhQU19TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9SRUdFWFBTIiA9ICIxIikKKworaWYgdGVzdCAiJHdpdGhfZGVidWciID0gIm5vIiA7IHRoZW4KKyAgICBlY2hvIERpc2FibGluZyBERUJVRyBzdXBwb3J0CisgICAgV0lUSF9ERUJVRz0wCitlbHNlCisgICAgV0lUSF9ERUJVRz0xCitmaQorQUNfU1VCU1QoV0lUSF9ERUJVRykKK0FNX0NPTkRJVElPTkFMKFdJVEhfREVCVUdfU09VUkNFUywgdGVzdCAiJFdJVEhfREVCVUciID0gIjEiKQorCitpZiB0ZXN0ICIkd2l0aF9tZW1fZGVidWciID0gInllcyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHdpdGhfdGhyZWFkX2FsbG9jIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICBlY2hvIERpc2FibGluZyBtZW1vcnkgZGVidWcgLSBjYW5ub3QgdXNlIG1lbS1kZWJ1ZyB3aXRoIHRocmVhZC1hbGxvYyEKKwlXSVRIX01FTV9ERUJVRz0wCisgICAgZWxzZQorICAgICAgICBlY2hvIEVuYWJsaW5nIG1lbW9yeSBkZWJ1ZyBzdXBwb3J0CisgICAgICAgIFdJVEhfTUVNX0RFQlVHPTEKKyAgICBmaQorZWxzZQorICAgIFdJVEhfTUVNX0RFQlVHPTAKK2ZpCitBQ19TVUJTVChXSVRIX01FTV9ERUJVRykKKworZG5sCitkbmwgQ2hlY2sgZm9yIFB5dGhvbgorZG5sCisKIEFTX0lGKFt0ZXN0ICJ4JHdpdGhfcHl0aG9uIiAhPSAieG5vIl0sIFsKICAgICBBTV9QQVRIX1BZVEhPTgogICAgIFBLR19DSEVDS19NT0RVTEVTKFtQWVRIT05dLCBbcHl0aG9uLSR7UFlUSE9OX1ZFUlNJT059XSkKIF0pCiBBTV9DT05ESVRJT05BTChbV0lUSF9QWVRIT05dLCBbdGVzdCAieCR3aXRoX3B5dGhvbiIgIT0gInhubyJdKQogCi1kbmwgY2hlY2sgZm9yIGRzbyBzdXBwb3J0CitkbmwKK2RubCBFeHRyYSBQeXRob24gZmxhZ3MgZm9yIFdpbmRvd3MKK2RubAorUFlUSE9OX0xERkxBR1M9CitpZiB0ZXN0ICIke1BZVEhPTn0iICE9ICIiOyB0aGVuCisgICAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICotKi1taW5ndyogKQorICAgICAgICAgICAgUFlUSE9OX0xERkxBR1M9Ii1uby11bmRlZmluZWQgLXNocmV4dCAucHlkIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKi0qLWN5Z3dpbiogfCotKi1tc3lzKiApCisgICAgICAgICAgICBQWVRIT05fTERGTEFHUz0iLW5vLXVuZGVmaW5lZCIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZmkKK0FDX1NVQlNUKFBZVEhPTl9MREZMQUdTKQorCitkbmwKK2RubCBDaGVjayBmb3IgRFNPIHN1cHBvcnQKK2RubAogV0lUSF9NT0RVTEVTPTAKIAogaWYgdGVzdCAiJHdpdGhfbW9kdWxlcyIgIT0gIm5vIiA7IHRoZW4KLSBjYXNlICIkaG9zdCIgaW4KLSAgKi0qLWN5Z3dpbiopCi0gIE1PRFVMRV9FWFRFTlNJT049Ii5kbGwiCi0gIEFDX0NIRUNLX0xJQihjeWd3aW4sIGRsb3BlbiwgWwotICAgIFdJVEhfTU9EVUxFUz0xCi0gICAgTU9EVUxFX1BMQVRGT1JNX0xJQlM9Ci0gICAgQUNfREVGSU5FKFtIQVZFX0RMT1BFTl0sIFtdLCBbSGF2ZSBkbG9wZW4gYmFzZWQgZHNvXSkKLSAgXSkKLSAgOzsKLSAgKi0qLW1pbmd3KikKLSAgTU9EVUxFX0VYVEVOU0lPTj0iLmRsbCIKLSAgV0lUSF9NT0RVTEVTPTEKLSAgOzsKLSAgKikKLSAgQUNfQ0hFQ0tfRlVOQyhzaGxfbG9hZCwgbGlieG1sX2hhdmVfc2hsX2xvYWQ9eWVzLCBbCi0gICAgQUNfQ0hFQ0tfTElCKGRsZCwgc2hsX2xvYWQsIFsKLSAgICAgIE1PRFVMRV9QTEFURk9STV9MSUJTPSItbGRsZCIKLSAgICAgIGxpYnhtbF9oYXZlX3NobF9sb2FkPXllc10sIFsKLSAgICAgIEFDX0NIRUNLX0ZVTkMoZGxvcGVuLCBsaWJ4bWxfaGF2ZV9kbG9wZW49eWVzLCBbCi0gICAgICAgIEFDX0NIRUNLX0xJQihkbCwgZGxvcGVuLCBbCi0gICAgICAgICAgTU9EVUxFX1BMQVRGT1JNX0xJQlM9Ii1sZGwiCi0gICAgICAgICAgbGlieG1sX2hhdmVfZGxvcGVuPXllc10pXSldKV0pCi0KLSAgaWYgdGVzdCAiJHtsaWJ4bWxfaGF2ZV9zaGxfbG9hZH0iID0gInllcyI7IHRoZW4KLSAgICBNT0RVTEVfRVhURU5TSU9OPSIuc2wiCi0gICAgV0lUSF9NT0RVTEVTPTEKLSAgICBBQ19ERUZJTkUoW0hBVkVfU0hMTE9BRF0sIFtdLCBbSGF2ZSBzaGxfbG9hZCBiYXNlZCBkc29dKQotICBmaQotIAotICBpZiB0ZXN0ICIke2xpYnhtbF9oYXZlX2Rsb3Blbn0iID0gInllcyI7IHRoZW4KLSAgICBjYXNlICIke2hvc3R9IiBpbgotICAgICAgKi0qLWhwdXgqICkKLQlNT0RVTEVfRVhURU5TSU9OPSIuc2wiCi0JOzsKLSAgICAgICogKQotCU1PRFVMRV9FWFRFTlNJT049Ii5zbyIKLQk7OworICAgIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAqLSotY3lnd2luKiB8ICotKi1tc3lzKiApCisgICAgICAgICAgICBNT0RVTEVfRVhURU5TSU9OPSIuZGxsIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKi0qLW1pbmd3KikKKyAgICAgICAgICAgIE1PRFVMRV9FWFRFTlNJT049Ii5kbGwiCisgICAgICAgICAgICBXSVRIX01PRFVMRVM9MQorICAgICAgICAgICAgOzsKKyAgICAgICAgKi0qLWhwdXgqKQorCSAgICBNT0RVTEVfRVhURU5TSU9OPSIuc2wiCisJICAgIDs7CisgICAgICAgICopCisJICAgIE1PRFVMRV9FWFRFTlNJT049Ii5zbyIKKwkgICAgOzsKICAgICBlc2FjCiAKLSAgICBXSVRIX01PRFVMRVM9MQotICAgIEFDX0RFRklORShbSEFWRV9ETE9QRU5dLCBbXSwgW0hhdmUgZGxvcGVuIGJhc2VkIGRzb10pCi0gIGZpCi0gOzsKLSBlc2FjCisgICAgaWYgdGVzdCAiJFdJVEhfTU9EVUxFUyIgPSAiMCI7IHRoZW4KKyAgICAgICAgX2xpYnM9JExJQlMKKyAgICAgICAgQUNfU0VBUkNIX0xJQlMoW2Rsb3Blbl0sIFtkbF0sIFsKKyAgICAgICAgICAgIFdJVEhfTU9EVUxFUz0xCisgICAgICAgICAgICBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2Rsb3BlbiIgIT0gIm5vbmUgcmVxdWlyZWQiOyB0aGVuCisgICAgICAgICAgICAgICAgTU9EVUxFX1BMQVRGT1JNX0xJQlM9JGFjX2N2X3NlYXJjaF9kbG9wZW4KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfRExPUEVOXSwgW10sIFtIYXZlIGRsb3BlbiBiYXNlZCBkc29dKV0sIFsKKyAgICAgICAgICAgIEFDX1NFQVJDSF9MSUJTKFtzaGxfbG9hZF0sIFtkbGRdLCBbCisgICAgICAgICAgICAgICAgV0lUSF9NT0RVTEVTPTEKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3NobF9sb2FkIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgTU9EVUxFX1BMQVRGT1JNX0xJQlM9JGFjX2N2X3NlYXJjaF9zaGxfbG9hZAorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX1NITExPQURdLCBbXSwgW0hhdmUgc2hsX2xvYWQgYmFzZWQgZHNvXSldKV0pCisgICAgICAgIExJQlM9JF9saWJzCisgICAgZmkKIGZpCiAKIEFDX1NVQlNUKFdJVEhfTU9EVUxFUykKIEFDX1NVQlNUKE1PRFVMRV9QTEFURk9STV9MSUJTKQogQUNfU1VCU1QoTU9EVUxFX0VYVEVOU0lPTikKK0FNX0NPTkRJVElPTkFMKFdJVEhfTU9EVUxFU19TT1VSQ0VTLCB0ZXN0ICIkV0lUSF9NT0RVTEVTIiA9ICIxIikKIAogZG5sCiBkbmwgQ2hlY2sgZm9yIHRyaW8gc3RyaW5nIGZ1bmN0aW9ucwogZG5sCi0KIGlmIHRlc3QgIiR7TkVFRF9UUklPfSIgPSAiMSIgOyB0aGVuCiAgICAgZWNobyBBZGRpbmcgdHJpbyBsaWJyYXJ5IGZvciBzdHJpbmcgZnVuY3Rpb25zCiAgICAgV0lUSF9UUklPPTEKLWVsc2UgICAgCitlbHNlCiAgICAgV0lUSF9UUklPPTAKIGZpCiBBTV9DT05ESVRJT05BTChXSVRIX1RSSU9fU09VUkNFUywgdGVzdCAiJHtORUVEX1RSSU99IiA9ICIxIikKIEFDX1NVQlNUKFdJVEhfVFJJTykKIAogZG5sCi1kbmwgQWxsb3cgdG8gZW5hYmxlL2Rpc2FibGUgdmFyaW91cyBwaWVjZXMKLWRubAotZWNobyBDaGVja2luZyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cwotCi1kbmwKIGRubCBUaHJlYWQtcmVsYXRlZCBzdHVmZgogZG5sCiBUSFJFQURfTElCUz0iIgogQkFTRV9USFJFQURfTElCUz0iIgogV0lUSF9USFJFQURTPTAKIFRIUkVBRF9DRkxBR1M9IiIKLVRIUkVBRFNfVzMyPSIiCiBXSVRIX1RIUkVBRF9BTExPQz0wCiAKIGlmIHRlc3QgIiR3aXRoX3RocmVhZHMiID0gIm5vIiA7IHRoZW4KICAgICBlY2hvIERpc2FibGluZyBtdWx0aXRocmVhZGVkIHN1cHBvcnQKIGVsc2UKLSAgICBlY2hvIEVuYWJsaW5nIG11bHRpdGhyZWFkZWQgc3VwcG9ydAotCi0gICAgZG5sIERlZmF1bHQgdG8gbmF0aXZlIHRocmVhZHMgb24gV2luZG93cwogICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAqbWluZ3cqKSBpZiB0ZXN0ICIkd2l0aF90aHJlYWRzIiAhPSAicHRocmVhZCIgJiYgdGVzdCAiJHdpdGhfdGhyZWFkcyIgIT0gIm5vIjsgdGhlbgotICAgICAgICAgICAgICAgV0lUSF9USFJFQURTPSIxIgotICAgICAgICAgICAgICAgVEhSRUFEU19XMzI9IjEiCi0gICAgICAgICAgICAgICBUSFJFQURfQ0ZMQUdTPSIkVEhSRUFEX0NGTEFHUyAtREhBVkVfV0lOMzJfVEhSRUFEUyIKLSAgICAgICAgICAgZmkKLSAgICAgICA7OworICAgICAgICAqbWluZ3cqKQorICAgICAgICAgICAgZG5sIERlZmF1bHQgdG8gbmF0aXZlIHRocmVhZHMgb24gV2luZG93cworICAgICAgICAgICAgV0lUSF9USFJFQURTPSIxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGRubCBVc2UgcHRocmVhZCBieSBkZWZhdWx0IGluIG90aGVyIGNhc2VzCisgICAgICAgICAgICBfbGlicz0kTElCUworICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhwdGhyZWFkLmgsCisgICAgICAgICAgICAgICAgQUNfU0VBUkNIX0xJQlMoW3B0aHJlYWRfam9pbl0sIFtwdGhyZWFkXSwgWworICAgICAgICAgICAgICAgICAgICBXSVRIX1RIUkVBRFM9IjEiCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfcHRocmVhZF9qb2luIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRIUkVBRF9MSUJTPSRhY19jdl9zZWFyY2hfcHRocmVhZF9qb2luCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9QVEhSRUFEX0hdLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgPHB0aHJlYWQuaD4gaXMgdGhlcmVdKV0pKQorICAgICAgICAgICAgTElCUz0kX2xpYnMKKyAgICAgICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgZG5sIFVzZSBwdGhyZWFkIGJ5IGRlZmF1bHQgaW4gb3RoZXIgY2FzZXMKLSAgICBpZiB0ZXN0IC16ICIkVEhSRUFEU19XMzIiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIiR3aXRoX3RocmVhZHMiID0gInB0aHJlYWQiIHx8IHRlc3QgIiR3aXRoX3RocmVhZHMiID0gIiIgfHwgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAieWVzIiA7IHRoZW4KLSAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUihwdGhyZWFkLmgsCi0gICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKHB0aHJlYWQsIHB0aHJlYWRfam9pbixbCi0gICAgICAgICAgICAgICAgVEhSRUFEX0xJQlM9Ii1scHRocmVhZCIKLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9IXSwgW10sIFtEZWZpbmUgaWYgPHB0aHJlYWQuaD4gaXMgdGhlcmVdKQotICAgICAgICAgICAgICAgIFdJVEhfVEhSRUFEUz0iMSJdKSkKLSAgICAgICAgZmkKLSAgICBmaQotCiAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICpjeWd3aW4qKSBUSFJFQURfTElCUz0iIgotICAgICAgIDs7Ci0gICAgICAgKmJlb3MqKSBXSVRIX1RIUkVBRFM9IjEiCi0JICAgVEhSRUFEX0NGTEFHUz0iJFRIUkVBRF9DRkxBR1MgLURIQVZFX0JFT1NfVEhSRUFEUyIKLSAgICAgICA7OwotICAgICAgICpsaW51eCopCi0gICAgICAgICAgIGlmIHRlc3QgIiR7R0NDfSIgPSAieWVzIiA7IHRoZW4KLQkgICAgICAgR0NDX1ZFUlNJT049YCR7Q0N9IC0tdmVyc2lvbiB8IGhlYWQgLTEgfCBhd2sgJ3twcmludCAkM30nYAotCSAgICAgICBHQ0NfTUFKT1I9YGVjaG8gJHtHQ0NfVkVSU0lPTn0gfCBzZWQgJ3MrXC4uKisrJ2AKLQkgICAgICAgR0NDX01FRElVTT1gZWNobyAke0dDQ19WRVJTSU9OfSB8IHNlZCAncytbWzAtOV1dKlwuKysnIHwgc2VkICdzK1wuLiorKydgCi0JICAgICAgIGlmIHRlc3QgIiR7VEhSRUFEX0xJQlN9IiA9ICItbHB0aHJlYWQiIDsgdGhlbgotCSAgICAgICAgICAgaWYgZXhwciAke0dDQ19NRURJVU19IFw+IDIgXCYgJHtHQ0NfTUFKT1J9ID0gMyA+IC9kZXYvbnVsbAotCQkgICB0aGVuCi0JCSAgICAgICBUSFJFQURfTElCUz0iIgotCQkgICAgICAgQkFTRV9USFJFQURfTElCUz0iLWxwdGhyZWFkIgotCQkgICBlbHNlCi0JCSAgIGlmIGV4cHIgJHtHQ0NfTUFKT1J9IFw+IDMgPiAvZGV2L251bGwKLQkJICAgdGhlbgotCQkgICAgICAgVEhSRUFEX0xJQlM9IiIKLQkJICAgICAgIEJBU0VfVEhSRUFEX0xJQlM9Ii1scHRocmVhZCIKLQkJICAgZWxzZQotCQkgICAgICAgZWNobyBvbGQgR0NDIGRpc2FibGluZyB3ZWFrIHN5bWJvbHMgZm9yIHB0aHJlYWQKLQkJICAgZmkKLQkJICAgZmkKLQkgICAgICAgZmkKLQkgICBmaQotICAgICAgIDs7CisgICAgICAgICpsaW51eCopCisgICAgICAgICAgICBpZiB0ZXN0ICIke0dDQ30iID0gInllcyIgOyB0aGVuCisgICAgICAgICAgICAgICAgQkFTRV9USFJFQURfTElCUz0iJFRIUkVBRF9MSUJTIgorICAgICAgICAgICAgICAgIFRIUkVBRF9MSUJTPSIiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKICAgICBlc2FjCisKICAgICBpZiB0ZXN0ICIkV0lUSF9USFJFQURTIiA9ICIxIiA7IHRoZW4KIAlUSFJFQURfQ0ZMQUdTPSIkVEhSRUFEX0NGTEFHUyAtRF9SRUVOVFJBTlQiCiAgICAgZmkKQEAgLTkxMiwxMiArOTA3LDExIEBACiBBQ19TVUJTVChXSVRIX1RIUkVBRFMpCiBBQ19TVUJTVChUSFJFQURfQ0ZMQUdTKQogQUNfU1VCU1QoV0lUSF9USFJFQURfQUxMT0MpCi1BTV9DT05ESVRJT05BTChbVEhSRUFEU19XMzJdLFt0ZXN0IC1uICIkVEhSRUFEU19XMzIiXSkKIAogZG5sCiBkbmwgeG1sbGludCBzaGVsbCBoaXN0b3J5CiBkbmwKLWlmIHRlc3QgIiR3aXRoX2hpc3RvcnkiID0gInllcyIgOyB0aGVuCitpZiB0ZXN0ICIkd2l0aF9oaXN0b3J5IiA9ICJ5ZXMiICYmIHRlc3QgIiR3aXRoX3JlYWRsaW5lIiAhPSAibm8iOyB0aGVuCiAgICAgZWNobyBFbmFibGluZyB4bWxsaW50IHNoZWxsIGhpc3RvcnkKICAgICBkbmwgY2hlY2sgZm9yIHRlcm1pbmFsIGxpYnJhcnkuIHRoaXMgaXMgYSB2ZXJ5IGNvb2wgc29sdXRpb24KICAgICBkbmwgZnJvbSBvY3RhdmUncyBjb25maWd1cmUuaW4KQEAgLTkyNyw1MTkgKzkyMSwzMDMgQEAKIAl0ZXN0IC1uICIkdGNhcCIgJiYgYnJlYWsKICAgICBkb25lCiAKKyAgICBfY3BwZmxhZ3M9JENQUEZMQUdTCisgICAgX2xpYnM9JExJQlMKKyAgICBpZiB0ZXN0ICIkd2l0aF9yZWFkbGluZSIgIT0gIiIgJiYgdGVzdCAiJHdpdGhfcmVhZGxpbmUiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgIFJETF9ESVI9JHdpdGhfcmVhZGxpbmUKKyAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJFJETF9ESVIvaW5jbHVkZSIKKyAgICAgICAgTElCUz0iJHtMSUJTfSAtTCRSRExfRElSL2xpYiIKKyAgICBmaQogICAgIEFDX0NIRUNLX0hFQURFUihyZWFkbGluZS9oaXN0b3J5LmgsCiAJQUNfQ0hFQ0tfTElCKGhpc3RvcnksIGFwcGVuZF9oaXN0b3J5LFsKLQkgICBSRExfTElCUz0iLWxoaXN0b3J5IgotCSAgIEFDX0RFRklORShbSEFWRV9MSUJISVNUT1JZXSwgW10sIFtEZWZpbmUgaWYgaGlzdG9yeSBsaWJyYXJ5IGlzIHRoZXJlICgtbGhpc3RvcnkpXSldKSkKKwkgICAgUkRMX0xJQlM9Ii1saGlzdG9yeSIKKyAgICAgICAgICAgIGlmIHRlc3QgIngke1JETF9ESVJ9IiAhPSAieCI7IHRoZW4KKyAgICAgICAgICAgICAgICBSRExfQ0ZMQUdTPSItSSRSRExfRElSL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgUkRMX0xJQlM9Ii1MJFJETF9ESVIvbGliICRSRExfTElCUyIKKyAgICAgICAgICAgIGZpCisJICAgIEFDX0RFRklORShbSEFWRV9MSUJISVNUT1JZXSwgW10sIFtEZWZpbmUgaWYgaGlzdG9yeSBsaWJyYXJ5IGlzIHRoZXJlICgtbGhpc3RvcnkpXSldKSkKICAgICBBQ19DSEVDS19IRUFERVIocmVhZGxpbmUvcmVhZGxpbmUuaCwKIAlBQ19DSEVDS19MSUIocmVhZGxpbmUsIHJlYWRsaW5lLFsKLQkgICBSRExfTElCUz0iLWxyZWFkbGluZSAkUkRMX0xJQlMgJHRjYXAiCi0JICAgQUNfREVGSU5FKFtIQVZFX0xJQlJFQURMSU5FXSwgW10sIFtEZWZpbmUgaWYgcmVhZGxpbmUgbGlicmFyeSBpcyB0aGVyZSAoLWxyZWFkbGluZSldKV0sICwgJHRjYXApKQotICAgIGlmIHRlc3QgLW4gIiRSRExfRElSIiAmJiB0ZXN0IC1uICIkUkRMX0xJQlMiOyB0aGVuCi0JQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSR7UkRMX0RJUn0vaW5jbHVkZSIKLQlSRExfTElCUz0iLUwke1JETF9ESVJ9L2xpYiAkUkRMX0xJQlMiCi0gICAgZmkKKwkgICAgUkRMX0xJQlM9Ii1scmVhZGxpbmUgJFJETF9MSUJTICR0Y2FwIgorICAgICAgICAgICAgaWYgdGVzdCAieCRSRExfRElSIiAhPSAieCI7IHRoZW4KKyAgICAgICAgICAgICAgICBSRExfQ0ZMQUdTPSItSSRSRExfRElSL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgUkRMX0xJQlM9Ii1MJFJETF9ESVIvbGliICRSRExfTElCUyIKKyAgICAgICAgICAgIGZpCisJICAgIEFDX0RFRklORShbSEFWRV9MSUJSRUFETElORV0sIFtdLCBbRGVmaW5lIGlmIHJlYWRsaW5lIGxpYnJhcnkgaXMgdGhlcmUgKC1scmVhZGxpbmUpXSldLCAsICR0Y2FwKSkKKyAgICBDUFBGTEFHUz0kX2NwcGZsYWdzCisgICAgTElCUz0kX2xpYnMKIGZpCitBQ19TVUJTVChSRExfQ0ZMQUdTKQorQUNfU1VCU1QoUkRMX0xJQlMpCiAKIGRubAotZG5sIFRyZWUgZnVuY3Rpb25zCitkbmwgQ2hlY2tzIGZvciB6bGliIGxpYnJhcnkuCiBkbmwKLWlmIHRlc3QgIiR3aXRoX3RyZWUiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyBET00gbGlrZSB0cmVlIG1hbmlwdWxhdGlvbiBBUElzCi0gICAgV0lUSF9UUkVFPTAKLWVsc2UgICAgCi0gICAgV0lUSF9UUkVFPTEKLWZpCi1BQ19TVUJTVChXSVRIX1RSRUUpCitXSVRIX1pMSUI9MAogCi1pZiB0ZXN0ICIkd2l0aF9mdHAiICE9ICJ5ZXMiIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIEZUUCBzdXBwb3J0Ci0gICAgV0lUSF9GVFA9MAotICAgIEZUUF9PQko9Ci1lbHNlICAgIAotICAgIFdJVEhfRlRQPTEKLSAgICBGVFBfT0JKPW5hbm9mdHAubwotZmkKLUFDX1NVQlNUKFdJVEhfRlRQKQotQUNfU1VCU1QoRlRQX09CSikKLQotaWYgdGVzdCAiJHdpdGhfaHR0cCIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIEhUVFAgc3VwcG9ydAotICAgIFdJVEhfSFRUUD0wCi0gICAgSFRUUF9PQko9Ci1lbHNlICAgIAotICAgIFdJVEhfSFRUUD0xCi0gICAgSFRUUF9PQko9bmFub2h0dHAubwotZmkKLUFDX1NVQlNUKFdJVEhfSFRUUCkKLUFDX1NVQlNUKEhUVFBfT0JKKQotCi1pZiB0ZXN0ICIkd2l0aF9sZWdhY3kiICE9ICJ5ZXMiIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIGRlcHJlY2F0ZWQgQVBJcwotICAgIFdJVEhfTEVHQUNZPTAKLWVsc2UgICAgCi0gICAgV0lUSF9MRUdBQ1k9MQotZmkKLUFDX1NVQlNUKFdJVEhfTEVHQUNZKQotCi1pZiB0ZXN0ICIkd2l0aF9yZWFkZXIiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyB0aGUgeG1sUmVhZGVyIHBhcnNpbmcgaW50ZXJmYWNlCi0gICAgV0lUSF9SRUFERVI9MAotZWxzZSAgICAKLSAgICBXSVRIX1JFQURFUj0xCi0gICAgaWYgdGVzdCAiJHdpdGhfcHVzaCIgPSAibm8iIDsgdGhlbgotICAgICAgICBlY2hvIHhtbFJlYWRlciByZXF1aXJlcyBQdXNoIGludGVyZmFjZSAtIGVuYWJsaW5nIGl0Ci0Jd2l0aF9wdXNoPXllcwotICAgIGZpCi1maQotQUNfU1VCU1QoV0lUSF9SRUFERVIpCi0KLWlmIHRlc3QgIiR3aXRoX3dyaXRlciIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIHRoZSB4bWxXcml0ZXIgc2F2aW5nIGludGVyZmFjZQotICAgIFdJVEhfV1JJVEVSPTAKLSMgICAgV1JJVEVSX1RFU1Q9Ci1lbHNlICAgIAotICAgIFdJVEhfV1JJVEVSPTEKLSMgICAgV1JJVEVSX1RFU1Q9V3JpdGVydGVzdHMKLSAgICBpZiB0ZXN0ICIkd2l0aF9wdXNoIiA9ICJubyIgOyB0aGVuCi0gICAgICAgIGVjaG8geG1sV3JpdGVyIHJlcXVpcmVzIFB1c2ggaW50ZXJmYWNlIC0gZW5hYmxpbmcgaXQKLQl3aXRoX3B1c2g9eWVzCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkd2l0aF9vdXRwdXQiID0gIm5vIiA7IHRoZW4KLSAgICAgICAgZWNobyB4bWxXcml0ZXIgcmVxdWlyZXMgT3V0cHV0IGludGVyZmFjZSAtIGVuYWJsaW5nIGl0Ci0Jd2l0aF9vdXRwdXQ9eWVzCi0gICAgZmkKLWZpCi1BQ19TVUJTVChXSVRIX1dSSVRFUikKLSNBQ19TVUJTVChXUklURVJfVEVTVCkKLQotaWYgdGVzdCAiJHdpdGhfcGF0dGVybiIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIHRoZSB4bWxQYXR0ZXJuIHBhcnNpbmcgaW50ZXJmYWNlCi0gICAgV0lUSF9QQVRURVJOPTAKLWVsc2UgICAgCi0gICAgV0lUSF9QQVRURVJOPTEKLWZpCi1BQ19TVUJTVChXSVRIX1BBVFRFUk4pCi0KLWlmIHRlc3QgIiR3aXRoX3NheDEiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyB0aGUgb2xkZXIgU0FYMSBpbnRlcmZhY2UKLSAgICBXSVRIX1NBWDE9MAotZWxzZSAgICAKLSAgICBXSVRIX1NBWDE9MQotZmkKLUFDX1NVQlNUKFdJVEhfU0FYMSkKLQotaWYgdGVzdCAiJHdpdGhfcHVzaCIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIHRoZSBQVVNIIHBhcnNlciBpbnRlcmZhY2VzCi0gICAgV0lUSF9QVVNIPTAKLWVsc2UgICAgCi0gICAgV0lUSF9QVVNIPTEKLWZpCi1BQ19TVUJTVChXSVRIX1BVU0gpCi0KLWlmIHRlc3QgIiR3aXRoX2h0bWwiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyBIVE1MIHN1cHBvcnQKLSAgICBXSVRIX0hUTUw9MAotICAgIEhUTUxfT0JKPQotZWxzZSAgICAKLSAgICBXSVRIX0hUTUw9MQotICAgIEhUTUxfT0JKPSJIVE1McGFyc2VyLm8gSFRNTHRyZWUubyIKLWZpCi1BQ19TVUJTVChXSVRIX0hUTUwpCi1BQ19TVUJTVChIVE1MX09CSikKLQotaWYgdGVzdCAiJHdpdGhfdmFsaWQiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyBEVEQgdmFsaWRhdGlvbiBzdXBwb3J0Ci0gICAgV0lUSF9WQUxJRD0wCi0gICAgVEVTVF9WVElNRT0KLWVsc2UgICAgCi0gICAgV0lUSF9WQUxJRD0xCi0gICAgVEVTVF9WVElNRT1WVGltaW5ndGVzdHMKLWZpCi1BQ19TVUJTVChXSVRIX1ZBTElEKQotQUNfU1VCU1QoVEVTVF9WQUxJRCkKLUFDX1NVQlNUKFRFU1RfVlRJTUUpCi0KLWlmIHRlc3QgIiR3aXRoX2NhdGFsb2ciID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyBDYXRhbG9nIHN1cHBvcnQKLSAgICBXSVRIX0NBVEFMT0c9MAotICAgIENBVEFMT0dfT0JKPQotICAgIFRFU1RfQ0FUQUxPRz0KLWVsc2UgICAgCi0gICAgV0lUSF9DQVRBTE9HPTEKLSAgICBDQVRBTE9HX09CSj0iY2F0YWxvZy5vIgotICAgIFRFU1RfQ0FUQUxPRz1DYXRhdGVzdHMKLWZpCi1BQ19TVUJTVChXSVRIX0NBVEFMT0cpCi1BQ19TVUJTVChDQVRBTE9HX09CSikKLUFDX1NVQlNUKFRFU1RfQ0FUQUxPRykKLQotaWYgdGVzdCAiJHdpdGhfeHB0ciIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIFhQb2ludGVyIHN1cHBvcnQKLSAgICBXSVRIX1hQVFI9MAotICAgIFdJVEhfWFBUUl9MT0NTPTAKLSAgICBYUFRSX09CSj0KLWVsc2UgICAgCi0gICAgV0lUSF9YUFRSPTEKLSAgICBYUFRSX09CSj14cG9pbnRlci5vCi0gICAgaWYgdGVzdCAiJHdpdGhfeHBhdGgiID0gIm5vIiA7IHRoZW4KLSAgICAgICAgZWNobyBYUG9pbnRlciByZXF1aXJlcyBYUGF0aCBzdXBwb3J0IC0gZW5hYmxpbmcgaXQKLQl3aXRoX3hwYXRoPXllcwotICAgIGZpCi0gICAgaWYgdGVzdCAiJHdpdGhfeHB0cl9sb2NzIiA9ICJ5ZXMiIDsgdGhlbgotICAgICAgICBXSVRIX1hQVFJfTE9DUz0xCi0gICAgZWxzZQotICAgICAgICBXSVRIX1hQVFJfTE9DUz0wCi0gICAgZmkKLWZpCi1BQ19TVUJTVChXSVRIX1hQVFIpCi1BQ19TVUJTVChXSVRIX1hQVFJfTE9DUykKLUFDX1NVQlNUKFhQVFJfT0JKKQotCi1pZiB0ZXN0ICIkd2l0aF9jMTRuIiA9ICJubyIgOyB0aGVuCi0gICAgZWNobyBEaXNhYmxpbmcgQzE0TiBzdXBwb3J0Ci0gICAgV0lUSF9DMTROPTAKLSAgICBDMTROX09CSj0KLWVsc2UgICAgCi0gICAgV0lUSF9DMTROPTEKLSAgICBDMTROX09CSj0iYzE0bi5jIgotICAgIGlmIHRlc3QgIiR3aXRoX3hwYXRoIiA9ICJubyIgOyB0aGVuCi0gICAgICAgIGVjaG8gQzE0TiByZXF1aXJlcyBYUGF0aCBzdXBwb3J0IC0gZW5hYmxpbmcgaXQKLQl3aXRoX3hwYXRoPXllcwotICAgIGZpCi1maQotQUNfU1VCU1QoV0lUSF9DMTROKQotQUNfU1VCU1QoQzE0Tl9PQkopCi0KLWlmIHRlc3QgIiR3aXRoX3hpbmNsdWRlIiA9ICJubyIgOyB0aGVuCi0gICAgZWNobyBEaXNhYmxpbmcgWEluY2x1ZGUgc3VwcG9ydAotICAgIFdJVEhfWElOQ0xVREU9MAotICAgIFhJTkNMVURFX09CSj0KLSAgICB3aXRoX3hpbmNsdWRlPSJubyIKLWVsc2UgICAgCi0gICAgV0lUSF9YSU5DTFVERT0xCi0gICAgWElOQ0xVREVfT0JKPXhpbmNsdWRlLm8KLSAgICBpZiB0ZXN0ICIkd2l0aF94cGF0aCIgPSAibm8iIDsgdGhlbgotICAgICAgICBlY2hvIFhJbmNsdWRlIHJlcXVpcmVzIFhQYXRoIHN1cHBvcnQgLSBlbmFibGluZyBpdAotCXdpdGhfeHBhdGg9eWVzCi0gICAgZmkKLWZpCi1BQ19TVUJTVChXSVRIX1hJTkNMVURFKQotQUNfU1VCU1QoWElOQ0xVREVfT0JKKQotCi1pZiB0ZXN0ICIkd2l0aF94cHRyIiA9ICIiICYmIHRlc3QgIiR3aXRoX3hwYXRoIiA9ICJubyIgOyB0aGVuCi0gICAgd2l0aF94cHRyPW5vCi1maQotCi1pZiB0ZXN0ICIkd2l0aF9zY2hlbWF0cm9uIiA9ICIiICYmIHRlc3QgIiR3aXRoX3hwYXRoIiA9ICJubyIgOyB0aGVuCi0gICAgd2l0aF9zY2hlbWF0cm9uPW5vCi1maQotCi1pZiB0ZXN0ICIkd2l0aF9zY2hlbWF0cm9uIiA9ICJubyIgOyB0aGVuCi0gICAgZWNobyAiRGlzYWJsaW5nIFNjaGVtYXRyb24gc3VwcG9ydCIKLSAgICBXSVRIX1NDSEVNQVRST049MAotICAgIFRFU1RfU0NIRU1BVFJPTj0KLWVsc2UgCi0gICAgZWNobyAiRW5hYmxlZCBTY2hlbWF0cm9uIHN1cHBvcnQiCi0gICAgV0lUSF9TQ0hFTUFUUk9OPTEKLSAgICBURVNUX1NDSEVNQVRST049IlNjaGVtYXRyb250ZXN0cyIKLSAgICB3aXRoX3hwYXRoPXllcwotICAgIHdpdGhfcGF0dGVybj15ZXMKLSAgICB3aXRoX3NjaGVtYXRyb249eWVzCi1maQotQUNfU1VCU1QoV0lUSF9TQ0hFTUFUUk9OKQotQUNfU1VCU1QoVEVTVF9TQ0hFTUFUUk9OKQotCi1pZiB0ZXN0ICIkd2l0aF94cGF0aCIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIFhQQVRIIHN1cHBvcnQKLSAgICBXSVRIX1hQQVRIPTAKLSAgICBYUEFUSF9PQko9Ci1lbHNlICAgIAotICAgIFdJVEhfWFBBVEg9MQotICAgIFhQQVRIX09CSj14cGF0aC5vCi1maQotQUNfU1VCU1QoV0lUSF9YUEFUSCkKLUFDX1NVQlNUKFhQQVRIX09CSikKLQotZG5sCi1kbmwgb3V0cHV0IGZ1bmN0aW9ucwotZG5sCi1pZiB0ZXN0ICIkd2l0aF9vdXRwdXQiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyBzZXJpYWxpemF0aW9uL3NhdmluZyBzdXBwb3J0Ci0gICAgV0lUSF9PVVRQVVQ9MAotZWxzZSAgICAKLSAgICBXSVRIX09VVFBVVD0xCi1maQotQUNfU1VCU1QoV0lUSF9PVVRQVVQpCi0KLVdJVEhfSUNPTlY9MAotaWYgdGVzdCAiJHdpdGhfaWNvbnYiID0gIm5vIiA7IHRoZW4KLSAgICBlY2hvIERpc2FibGluZyBJQ09OViBzdXBwb3J0CitpZiB0ZXN0ICIkd2l0aF96bGliIiA9ICJubyI7IHRoZW4KKyAgICBlY2hvICJEaXNhYmxpbmcgemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0IgogZWxzZQotICAgIGlmIHRlc3QgIiR3aXRoX2ljb252IiAhPSAieWVzIiAmJiB0ZXN0ICIkd2l0aF9pY29udiIgIT0gIiIgOyB0aGVuCi0JQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHdpdGhfaWNvbnYvaW5jbHVkZSIKLQkjIEV4cG9ydCB0aGlzIHNpbmNlIG91ciBoZWFkZXJzIGluY2x1ZGUgaWNvbnYuaAotCVhNTF9JTkNMVURFRElSPSIke1hNTF9JTkNMVURFRElSfSAtSSR3aXRoX2ljb252L2luY2x1ZGUiCi0JSUNPTlZfTElCUz0iLUwkd2l0aF9pY29udi9saWIiCisgICAgaWYgdGVzdCAiJHdpdGhfemxpYiIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgWl9ESVI9JHdpdGhfemxpYgogICAgIGZpCiAKLSAgICBBQ19DSEVDS19IRUFERVIoaWNvbnYuaCwKLQlBQ19NU0dfQ0hFQ0tJTkcoZm9yIGljb252KQotCUFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aWNvbnYuaD5dXSxbWwotaWNvbnZfdCBjZCA9IGljb252X29wZW4gKCIiLCIiKTsKLWljb252IChjZCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7XV0pXSxbCi0JICAgIEFDX01TR19SRVNVTFQoeWVzKQotCSAgICBXSVRIX0lDT05WPTFdLFsKLQkgICAgQUNfTVNHX1JFU1VMVChubykKLQkgICAgQUNfTVNHX0NIRUNLSU5HKGZvciBpY29udiBpbiAtbGljb252KQorICAgICMgRG9uJ3QgcnVuIHBrZy1jb25maWcgaWYgd2l0aF96bGliIGNvbnRhaW5zIGEgcGF0aC4KKyAgICBpZiB0ZXN0ICJ4JFpfRElSIiA9ICJ4IjsgdGhlbgorICAgICAgICAjIFRyeSBwa2ctY29uZmlnIGZpcnN0IHNvIHRoYXQgc3RhdGljIGxpbmtpbmcgd29ya3MuCisgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFtaXSxbemxpYl0sCisgICAgICAgICAgICBbV0lUSF9aTElCPTE7IFhNTF9QQ19SRVFVSVJFUz0iJHtYTUxfUENfUkVRVUlSRVN9IHpsaWIiXSwKKyAgICAgICAgICAgIFs6XSkKKyAgICBmaQogCi0JICAgIF9sZGZsYWdzPSIke0xERkxBR1N9IgotCSAgICBfbGlicz0iJHtMSUJTfSIKLQkgICAgTERGTEFHUz0iJHtMREZMQUdTfSAke0lDT05WX0xJQlN9IgotCSAgICBMSUJTPSIke0xJQlN9IC1saWNvbnYiCi0KLQkgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxpY29udi5oPl1dLFtbCi1pY29udl90IGNkID0gaWNvbnZfb3BlbiAoIiIsIiIpOwotaWNvbnYgKGNkLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTtdXSldLFsKLQkJQUNfTVNHX1JFU1VMVCh5ZXMpCi0JCVdJVEhfSUNPTlY9MQotCQlJQ09OVl9MSUJTPSIke0lDT05WX0xJQlN9IC1saWNvbnYiCi0JCUxJQlM9IiR7X2xpYnN9IgotCQlMREZMQUdTPSIke19sZGZsYWdzfSJdLFsKLQkJQUNfTVNHX1JFU1VMVChubykKLQkJTElCUz0iJHtfbGlic30iCi0JCUxERkxBR1M9IiR7X2xkZmxhZ3N9Il0pXSkpCi1maQotQUNfU1VCU1QoV0lUSF9JQ09OVikKLQotV0lUSF9JQ1U9MAotSUNVX0xJQlM9IiIKLWlmIHRlc3QgIiR3aXRoX2ljdSIgIT0gInllcyIgOyB0aGVuCi0gICAgZWNobyBEaXNhYmxpbmcgSUNVIHN1cHBvcnQKLWVsc2UKLSAgICAjIFRyeSBwa2ctY29uZmlnIGZpcnN0IHNvIHRoYXQgc3RhdGljIGxpbmtpbmcgd29ya3MuCi0gICAgIyBJZiB0aGlzIHN1Y2NlZWVkcywgd2UgaWdub3JlIHRoZSBXSVRIX0lDVSBkaXJlY3RvcnkuCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoW0lDVV0sW2ljdS1pMThuXSwKLSAgICAgICAgW2hhdmVfbGliaWN1PXllc10sCi0gICAgICAgIFtoYXZlX2xpYmljdT1ub10pCi0KLSAgICBpZiB0ZXN0ICJ4JGhhdmVfbGliaWN1IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBtNF9pZmRlZihbUEtHX0NIRUNLX1ZBUl0sCi0gICAgICAgICAgICBbUEtHX0NIRUNLX1ZBUihbSUNVX0RFRlNdLCBbaWN1LWkxOG5dLCBbREVGU10pXSkKLSAgICAgICAgaWYgdGVzdCAieCRJQ1VfREVGUyIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJQ1VfREVGUyIKKyAgICBpZiB0ZXN0ICIkV0lUSF9aTElCIiA9ICIwIjsgdGhlbgorICAgICAgICBfY3BwZmxhZ3M9JENQUEZMQUdTCisgICAgICAgIF9saWJzPSRMSUJTCisgICAgICAgIGlmIHRlc3QgIngkWl9ESVIiICE9ICJ4IjsgdGhlbgorICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJFpfRElSL2luY2x1ZGUiCisgICAgICAgICAgICBMSUJTPSIke0xJQlN9IC1MJFpfRElSL2xpYiIKICAgICAgICAgZmkKKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyh6bGliLmgsCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoeiwgZ3pyZWFkLFsKKyAgICAgICAgICAgICAgICBXSVRIX1pMSUI9MQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIngke1pfRElSfSIgIT0gIngiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIFpfQ0ZMQUdTPSItSSR7Wl9ESVJ9L2luY2x1ZGUiCisgICAgICAgICAgICAgICAgICAgIFpfTElCUz0iLUwke1pfRElSfS9saWIgLWx6IgorICAgICAgICAgICAgICAgICAgICBbY2FzZSAke2hvc3R9IGluCisgICAgICAgICAgICAgICAgICAgICAgICAqLSotc29sYXJpcyopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9MSUJTPSItTCR7Wl9ESVJ9L2xpYiAtUiR7Wl9ESVJ9L2xpYiAtbHoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhY10KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFpfTElCUz0iLWx6IgorICAgICAgICAgICAgICAgIGZpXSkKKyAgICAgICAgICAgICAgICBYTUxfUENfTElCUz0iJHtYTUxfUENfTElCU30gJHtaX0xJQlN9IgorICAgICAgICAgICAgKQorICAgICAgICBDUFBGTEFHUz0kX2NwcGZsYWdzCisgICAgICAgIExJQlM9JF9saWJzCisgICAgZmkKKworICAgIFhNTF9QUklWQVRFX0NGTEFHUz0iJHtYTUxfUFJJVkFURV9DRkxBR1N9ICR7Wl9DRkxBR1N9IgorICAgIFhNTF9QUklWQVRFX0xJQlM9IiR7WE1MX1BSSVZBVEVfTElCU30gJHtaX0xJQlN9IgorZmkKK0FDX1NVQlNUKFdJVEhfWkxJQikKKworZG5sCitkbmwgQ2hlY2tzIGZvciBsem1hIGxpYnJhcnkuCitkbmwKK1dJVEhfTFpNQT0wCisKK2lmIHRlc3QgIiR3aXRoX2x6bWEiID0gIm5vIjsgdGhlbgorICAgIGVjaG8gIkRpc2FibGluZyBsem1hIGNvbXByZXNzaW9uIHN1cHBvcnQiCitlbHNlCisgICAgaWYgdGVzdCAiJHdpdGhfbHptYSIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgTFpNQV9ESVI9JHdpdGhfbHptYQorICAgIGZpCisKKyAgICAjIERvbid0IHJ1biBwa2ctY29uZmlnIGlmIHdpdGhfbHptYSBjb250YWlucyBhIHBhdGguCisgICAgaWYgdGVzdCAieCRMWk1BX0RJUiIgPSAieCI7IHRoZW4KKyAgICAgICAgIyBUcnkgcGtnLWNvbmZpZyBmaXJzdCBzbyB0aGF0IHN0YXRpYyBsaW5raW5nIHdvcmtzLgorICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbTFpNQV0sW2xpYmx6bWFdLAorICAgICAgICAgICAgW1dJVEhfTFpNQT0xOyBYTUxfUENfUkVRVUlSRVM9IiR7WE1MX1BDX1JFUVVJUkVTfSBsaWJsem1hIl0sCisgICAgICAgICAgICBbOl0pCiAgICAgZmkKIAogICAgICMgSWYgcGtnLWNvbmZpZyBmYWlsZWQsIGZhbGwgYmFjayB0byBBQ19DSEVDS19MSUIuIFRoaXMKICAgICAjIHdpbGwgbm90IHBpY2sgdXAgdGhlIG5lY2Vzc2FyeSBMSUJTIGZsYWdzIGZvciBsaWJsem1hJ3MKICAgICAjIHByaXZhdGUgZGVwZW5kZW5jaWVzLCB0aG91Z2gsIHNvIHN0YXRpYyBsaW5raW5nIG1heSBmYWlsLgotICAgIGlmIHRlc3QgIngkaGF2ZV9saWJpY3UiID0gInhubyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkV0lUSF9MWk1BIiA9ICIwIjsgdGhlbgorICAgICAgICBfY3BwZmxhZ3M9JENQUEZMQUdTCisgICAgICAgIF9saWJzPSRMSUJTCisgICAgICAgIGlmIHRlc3QgIngkTFpNQV9ESVIiICE9ICJ4IjsgdGhlbgorICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJExaTUFfRElSL2luY2x1ZGUiCisgICAgICAgICAgICBMSUJTPSIke0xJQlN9IC1MJExaTUFfRElSL2xpYiIKKyAgICAgICAgZmkKKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsem1hLmgsCisgICAgICAgICAgICBBQ19DSEVDS19MSUIobHptYSwgbHptYV9jb2RlLFsKKyAgICAgICAgICAgICAgICBXSVRIX0xaTUE9MQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIngke0xaTUFfRElSfSIgIT0gIngiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIExaTUFfQ0ZMQUdTPSItSSR7TFpNQV9ESVJ9L2luY2x1ZGUiCisgICAgICAgICAgICAgICAgICAgIExaTUFfTElCUz0iLUwke0xaTUFfRElSfS9saWIgLWxsem1hIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgTFpNQV9MSUJTPSItbGx6bWEiCisgICAgICAgICAgICAgICAgZmldKQorICAgICAgICAgICAgICAgIFhNTF9QQ19MSUJTPSIke1hNTF9QQ19MSUJTfSAke0xaTUFfTElCU30iCisgICAgICAgICAgICApCisgICAgICAgIENQUEZMQUdTPSRfY3BwZmxhZ3MKKyAgICAgICAgTElCUz0kX2xpYnMKKyAgICBmaQorCisgICAgWE1MX1BSSVZBVEVfQ0ZMQUdTPSIke1hNTF9QUklWQVRFX0NGTEFHU30gJHtMWk1BX0NGTEFHU30iCisgICAgWE1MX1BSSVZBVEVfTElCUz0iJHtYTUxfUFJJVkFURV9MSUJTfSAke0xaTUFfTElCU30iCitmaQorQUNfU1VCU1QoV0lUSF9MWk1BKQorQU1fQ09ORElUSU9OQUwoV0lUSF9MWk1BX1NPVVJDRVMsIHRlc3QgIiRXSVRIX0xaTUEiID0gIjEiKQorCitkbmwKK2RubCBDaGVja3MgZm9yIGljb252IGxpYnJhcnkuCitkbmwKK1dJVEhfSUNPTlY9MAorCitpZiB0ZXN0ICIkd2l0aF9pY29udiIgPSAibm8iIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIElDT05WIHN1cHBvcnQKK2Vsc2UKKyAgICBfY3BwZmxhZ3M9JENQUEZMQUdTCisgICAgX2xpYnM9JExJQlMKKyAgICBpZiB0ZXN0ICIkd2l0aF9pY29udiIgIT0gInllcyIgJiYgdGVzdCAiJHdpdGhfaWNvbnYiICE9ICIiIDsgdGhlbgorCUlDT05WX0RJUj0kd2l0aF9pY29udgorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkSUNPTlZfRElSL2luY2x1ZGUiCisJTElCUz0iJExJQlMgLUwkSUNPTlZfRElSL2xpYiIKKyAgICBmaQorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGxpYmljb252XSkKKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPGljb252Lmg+XSwgW2ljb252X29wZW4oMCwwKTtdKQorICAgIF0sIFsKKyAgICAgICAgV0lUSF9JQ09OVj0xCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vbmUgcmVxdWlyZWRdKQorICAgIF0sIFsKKyAgICAgICAgTElCUz0iJExJQlMgLWxpY29udiIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8aWNvbnYuaD5dLCBbaWNvbnZfb3BlbigwLDApO10pCisgICAgICAgIF0sIFsKKyAgICAgICAgICAgIFdJVEhfSUNPTlY9MQorICAgICAgICAgICAgSUNPTlZfTElCUz0iLWxpY29udiIKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIF0sIFsKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgXSkKKyAgICBdKQorICAgIGlmIHRlc3QgIiRXSVRIX0lDT05WIiA9ICIxIiAmJiB0ZXN0ICIkSUNPTlZfRElSIiAhPSAiIjsgdGhlbgorICAgICAgICBJQ09OVl9DRkxBR1M9Ii1JJElDT05WX0RJUi9pbmNsdWRlIgorICAgICAgICBJQ09OVl9MSUJTPSItTCRJQ09OVl9ESVIvbGliICRJQ09OVl9MSUJTIgorCSMgRXhwb3J0IHRoaXMgc2luY2Ugb3VyIGhlYWRlcnMgaW5jbHVkZSBpY29udi5oCisJWE1MX0lOQ0xVREVESVI9IiRYTUxfSU5DTFVERURJUiAtSSRJQ09OVl9ESVIvaW5jbHVkZSIKKyAgICBmaQorICAgIENQUEZMQUdTPSRfY3BwZmxhZ3MKKyAgICBMSUJTPSRfbGlicworZmkKK0FDX1NVQlNUKFdJVEhfSUNPTlYpCitBQ19TVUJTVChJQ09OVl9DRkxBR1MpCisKK2RubAorZG5sIENoZWNrcyBmb3IgSUNVIGxpYnJhcnkuCitkbmwKK1dJVEhfSUNVPTAKKworaWYgdGVzdCAiJHdpdGhfaWN1IiA9ICJubyIgfHwgdGVzdCAiJHdpdGhfaWN1IiA9ICIiIDsgdGhlbgorICAgIGVjaG8gRGlzYWJsaW5nIElDVSBzdXBwb3J0CitlbHNlCisgICAgIyBUcnkgcGtnLWNvbmZpZyBmaXJzdCBzbyB0aGF0IHN0YXRpYyBsaW5raW5nIHdvcmtzLgorICAgICMgSWYgdGhpcyBzdWNjZWVlZHMsIHdlIGlnbm9yZSB0aGUgV0lUSF9JQ1UgZGlyZWN0b3J5LgorICAgIFBLR19DSEVDS19NT0RVTEVTKFtJQ1VdLCBbaWN1LWkxOG5dLCBbCisgICAgICAgIFdJVEhfSUNVPTE7IFhNTF9QQ19SRVFVSVJFUz0iJHtYTUxfUENfUkVRVUlSRVN9IGljdS1pMThuIgorICAgICAgICBtNF9pZmRlZihbUEtHX0NIRUNLX1ZBUl0sCisgICAgICAgICAgICBbUEtHX0NIRUNLX1ZBUihbSUNVX0RFRlNdLCBbaWN1LWkxOG5dLCBbREVGU10pXSkKKyAgICAgICAgaWYgdGVzdCAieCRJQ1VfREVGUyIgIT0gIngiOyB0aGVuCisgICAgICAgICAgICBJQ1VfQ0ZMQUdTPSIkSUNVX0NGTEFHUyAkSUNVX0RFRlMiCisgICAgICAgIGZpXSxbOl0pCisKKyAgICBpZiB0ZXN0ICIkV0lUSF9JQ1UiID0gIjAiOyB0aGVuCiAgICAgICAgIElDVV9DT05GSUc9aWN1LWNvbmZpZwogICAgICAgICBpZiAke0lDVV9DT05GSUd9IC0tY2ZsYWdzID4vZGV2L251bGwgMj4mMQogICAgICAgICB0aGVuCisgICAgICAgICAgICBXSVRIX0lDVT0xCisgICAgICAgICAgICBJQ1VfQ0ZMQUdTPWAke0lDVV9DT05GSUd9IC0tY2ZsYWdzYAogICAgICAgICAgICAgSUNVX0xJQlM9YCR7SUNVX0NPTkZJR30gLS1sZGZsYWdzYAotICAgICAgICAgICAgaGF2ZV9saWJpY3U9eWVzCi0gICAgICAgICAgICBlY2hvIEVuYWJsaW5nIElDVSBzdXBwb3J0CisgICAgICAgICAgICBYTUxfUENfTElCUz0iJHtYTUxfUENfTElCU30gJHtJQ1VfTElCU30iCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlmIHRlc3QgIiR3aXRoX2ljdSIgIT0gInllcyIgJiYgdGVzdCAiJHdpdGhfaWNvbnYiICE9ICIiIDsgdGhlbgotICAgICAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR3aXRoX2ljdSIKKyAgICAgICAgICAgIF9jcHBmbGFncz0iJHtDUFBGTEFHU30iCisgICAgICAgICAgICBfbGlicz0iJHtMSUJTfSIKKyAgICAgICAgICAgIGlmIHRlc3QgIiR3aXRoX2ljdSIgIT0gInllcyIgOyB0aGVuCisgICAgICAgICAgICAgICAgSUNVX0RJUj0kd2l0aF9pY3UKKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkkSUNVX0RJUi9pbmNsdWRlIgorICAgICAgICAgICAgICAgIExJQlM9IiR7TElCU30gLUwkSUNVX0RJUi9saWIiCiAgICAgICAgICAgICBmaQogCi0gICAgICAgICAgICBBQ19DSEVDS19IRUFERVIodW5pY29kZS91Y252LmgsCi0gICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGljdSkKLSAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+XV0sIFtbCi0gICAgICAgIFVDb252ZXJ0ZXIgKnV0ZiA9IHVjbnZfb3BlbigiVVRGLTgiLCBOVUxMKTtdXSldLFsKLSAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgICAgICAgICAgICBoYXZlX2xpYmljdT15ZXNdLFsKLSAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgaWN1IGluIC1saWN1Y29yZSkKLQotICAgICAgICAgICAgICAgIF9sZGZsYWdzPSIke0xERkxBR1N9IgotICAgICAgICAgICAgICAgIF9saWJzPSIke0xJQlN9IgotICAgICAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30gJHtJQ1VfTElCU30iCi0gICAgICAgICAgICAgICAgTElCUz0iJHtMSUJTfSAtbGljdWNvcmUiCi0KLSAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5oPl1dLCBbWwotICAgICAgICBVQ29udmVydGVyICp1dGYgPSB1Y252X29wZW4oIlVURi04IiwgTlVMTCk7XV0pXSxbCi0gICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICAgICAgICAgICAgICAgICBoYXZlX2xpYmljdT15ZXMKLSAgICAgICAgICAgICAgICAgICAgSUNVX0xJQlM9IiR7SUNVX0xJQlN9IC1saWN1Y29yZSIKLSAgICAgICAgICAgICAgICAgICAgTElCUz0iJHtfbGlic30iCi0gICAgICAgICAgICAgICAgICAgIExERkxBR1M9IiR7X2xkZmxhZ3N9Il0sWwotICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgICAgICAgICAgICAgICBMSUJTPSIke19saWJzfSIKLSAgICAgICAgICAgICAgICBMREZMQUdTPSIke19sZGZsYWdzfSJdKV0pKQorICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKHVuaWNvZGUvdWNudi5oLCBbCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKFtpY3Vjb3JlXSwgW3VjbnZfb3Blbl0sIFsKKyAgICAgICAgICAgICAgICAgICAgV0lUSF9JQ1U9MQorICAgICAgICAgICAgICAgICAgICBJQ1VfTElCUz0tbGljdWNvcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJElDVV9ESVIiICE9ICIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBJQ1VfQ0ZMQUdTPSItSSRJQ1VfRElSL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgICAgICAgICBJQ1VfTElCUz0iLUwkSUNVX0RJUi9saWIgJElDVV9MSUJTIgorICAgICAgICAgICAgICAgICAgICBmaV0pXSkKKyAgICAgICAgICAgICAgICAgICAgWE1MX1BDX0xJQlM9IiR7WE1MX1BDX0xJQlN9ICR7SUNVX0xJQlN9IgorICAgICAgICAgICAgQ1BQRkxBR1M9JF9jcHBmbGFncworICAgICAgICAgICAgTElCUz0kX2xpYnMKICAgICAgICAgZmkKICAgICBmaQogCi0gICAgIyBGb3VuZCB0aGUgbGlicmFyeSB2aWEgZWl0aGVyIG1ldGhvZD8KLSAgICBpZiB0ZXN0ICJ4JGhhdmVfbGliaWN1IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBXSVRIX0lDVT0xCi0gICAgZmkKKyAgICBYTUxfUFJJVkFURV9DRkxBR1M9IiR7WE1MX1BSSVZBVEVfQ0ZMQUdTfSAke0lDVV9DRkxBR1N9IgorICAgIFhNTF9QUklWQVRFX0xJQlM9IiR7WE1MX1BSSVZBVEVfTElCU30gJHtJQ1VfTElCU30iCiBmaQotWE1MX0xJQlM9Ii1seG1sMiIKLVhNTF9MSUJUT09MTElCUz0ibGlieG1sMi5sYSIKIEFDX1NVQlNUKFdJVEhfSUNVKQogCi1XSVRIX0lTTzg4NTlYPTEKLWlmIHRlc3QgIiRXSVRIX0lDT05WIiAhPSAiMSIgOyB0aGVuCi1pZiB0ZXN0ICIkd2l0aF9pc284ODU5eCIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIElTTzg4NTlYIHN1cHBvcnQKLSAgICBXSVRIX0lTTzg4NTlYPTAKLWZpCi1maQotQUNfU1VCU1QoV0lUSF9JU084ODU5WCkKLQotaWYgdGVzdCAiJHdpdGhfc2NoZW1hcyIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gIkRpc2FibGluZyBTY2hlbWFzL1JlbGF4LU5HIHN1cHBvcnQiCi0gICAgV0lUSF9TQ0hFTUFTPTAKLWVsc2UgICAgCi0gICAgZWNobyAiRW5hYmxlZCBTY2hlbWFzL1JlbGF4LU5HIHN1cHBvcnQiCi0gICAgV0lUSF9TQ0hFTUFTPTEKLSAgICBBU19JRihbdGVzdCAieCR3aXRoX3B5dGhvbiIgIT0gInhubyJdLCBbCi0gICAgICAgIFBZVEhPTl9URVNUUz0iJFBZVEhPTl9URVNUUyBSZWxheE5HUHl0aG9uVGVzdHMgU2NoZW1hc1B5dGhvblRlc3RzIgotICAgIF0pCi0gICAgd2l0aF9yZWdleHBzPXllcwotZmkKLUFDX1NVQlNUKFdJVEhfU0NIRU1BUykKLQotaWYgdGVzdCAiJHdpdGhfcmVnZXhwcyIgPSAibm8iIDsgdGhlbgotICAgIGVjaG8gRGlzYWJsaW5nIFJlZ2V4cHMgc3VwcG9ydAotICAgIFdJVEhfUkVHRVhQUz0wCi0gICAgVEVTVF9SRUdFWFBTPQotZWxzZSAgICAKLSAgICBXSVRIX1JFR0VYUFM9MQotICAgIFRFU1RfUkVHRVhQUz0iQXV0b21hdGF0ZXN0cyIKLWZpCi1BQ19TVUJTVChXSVRIX1JFR0VYUFMpCi1BQ19TVUJTVChURVNUX1JFR0VYUFMpCi0KLWlmIHRlc3QgIiR3aXRoX2RlYnVnIiA9ICJubyIgOyB0aGVuCi0gICAgZWNobyBEaXNhYmxpbmcgREVCVUcgc3VwcG9ydAotICAgIFdJVEhfREVCVUc9MAotICAgIERFQlVHX09CSj0KLSAgICBURVNUX0RFQlVHPQotZWxzZSAgICAKLSAgICBXSVRIX0RFQlVHPTEKLSAgICBERUJVR19PQko9ZGVidWdYTUwubwotICAgIFRFU1RfREVCVUc9U2NyaXB0dGVzdHMKLWZpCi1BQ19TVUJTVChXSVRIX0RFQlVHKQotQUNfU1VCU1QoREVCVUdfT0JKKQotQUNfU1VCU1QoVEVTVF9ERUJVRykKLQotaWYgdGVzdCAiJHdpdGhfbWVtX2RlYnVnIiA9ICJ5ZXMiIDsgdGhlbgotICAgIGlmIHRlc3QgIiR3aXRoX3RocmVhZF9hbGxvYyIgPSAieWVzIiA7IHRoZW4KLSAgICAgICAgZWNobyBEaXNhYmxpbmcgbWVtb3J5IGRlYnVnIC0gY2Fubm90IHVzZSBtZW0tZGVidWcgd2l0aCB0aHJlYWQtYWxsb2MhCi0JV0lUSF9NRU1fREVCVUc9MAotICAgIGVsc2UKLSAgICAgICAgZWNobyBFbmFibGluZyBtZW1vcnkgZGVidWcgc3VwcG9ydAotICAgICAgICBXSVRIX01FTV9ERUJVRz0xCi0gICAgZmkKLWVsc2UgICAgCi0gICAgV0lUSF9NRU1fREVCVUc9MAotZmkKLUFDX1NVQlNUKFdJVEhfTUVNX0RFQlVHKQotCi1pZiB0ZXN0ICIkd2l0aF9ydW5fZGVidWciID0gInllcyIgOyB0aGVuCi0gICAgZWNobyBFbmFibGluZyBydW50aW1lIGRlYnVnIHN1cHBvcnQKLSAgICBXSVRIX1JVTl9ERUJVRz0xCi1lbHNlICAgIAotICAgIFdJVEhfUlVOX0RFQlVHPTAKLWZpCi1BQ19TVUJTVChXSVRIX1JVTl9ERUJVRykKLQotV0lOMzJfRVhUUkFfTElCQUREPQotV0lOMzJfRVhUUkFfTERGTEFHUz0KLUNZR1dJTl9FWFRSQV9MREZMQUdTPQotQ1lHV0lOX0VYVFJBX1BZVEhPTl9MSUJBREQ9Ci1XSU4zMl9FWFRSQV9QWVRIT05fTElCQUREPQotY2FzZSAiJGhvc3QiIGluCi0gKi0qLW1pbmd3KikKLSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EV0lOMzIiCi0gV0lOMzJfRVhUUkFfTElCQUREPSItbHdzMl8zMiIKLSBXSU4zMl9FWFRSQV9MREZMQUdTPSItbm8tdW5kZWZpbmVkIgotIGlmIHRlc3QgIiR7UFlUSE9OfSIgIT0gIiIKLSB0aGVuCi0gICBjYXNlICIkaG9zdCIgaW4KLSAgICAgKi13NjQtbWluZ3cqKQotICAgICAgIFdJTjMyX0VYVFJBX1BZVEhPTl9MSUJBREQ9Ii1zaHJleHQgLnB5ZCAtTCR7cHl0aG9uZGlyfS8uLi8uLi9saWIgLWxweXRob24ke1BZVEhPTl9WRVJTSU9OfSIKLSAgICAgICA7OwotICAgICAqKQotICAgICAgIFdJTjMyX0VYVFJBX1BZVEhPTl9MSUJBREQ9Ii1MJHtweXRob25kaXJ9Ly4uLy4uL2xpYnMgLWxweXRob24kKGVjaG8gJHtQWVRIT05fVkVSU0lPTn0gfCB0ciAtZCAuKSIKLSAgICAgICA7OwotICAgZXNhYwotIGZpCi0gOzsKLSAqLSotY3lnd2luKikKLSBDWUdXSU5fRVhUUkFfTERGTEFHUz0iLW5vLXVuZGVmaW5lZCIKLSBpZiB0ZXN0ICIke1BZVEhPTn0iICE9ICIiCi0gdGhlbgotICAgQ1lHV0lOX0VYVFJBX1BZVEhPTl9MSUJBREQ9Ii1ML3Vzci9saWIvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0vY29uZmlnIC1scHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCi0gZmkKLSA7OwotZXNhYwotCi1YTUxfUFJJVkFURV9MSUJTPSIkWl9MSUJTICRMWk1BX0xJQlMgJFRIUkVBRF9MSUJTICRJQ09OVl9MSUJTICRJQ1VfTElCUyAkTElCTSAkV0lOMzJfRVhUUkFfTElCQUREIgotCi1BQ19TVUJTVChXSU4zMl9FWFRSQV9MSUJBREQpCi1BQ19TVUJTVChXSU4zMl9FWFRSQV9MREZMQUdTKQotQUNfU1VCU1QoV0lOMzJfRVhUUkFfUFlUSE9OX0xJQkFERCkKLUFDX1NVQlNUKENZR1dJTl9FWFRSQV9MREZMQUdTKQotQUNfU1VCU1QoQ1lHV0lOX0VYVFJBX1BZVEhPTl9MSUJBREQpCi0KLWRubCBDaGVja2luZyB0aGUgc3RhbmRhcmQgc3RyaW5nIGZ1bmN0aW9ucyBhdmFpbGFiaWxpdHkKLWRubAotZG5sIE5vdGUgbWluZ3cqIGhhcyBDOTkgaW1wbGVtZW50YXRpb24gdGhhdCBwcm9kdWNlIGV4cGVjdGVkIHhtbCBudW1iZXJzCi1kbmwgaWYgY29kZSB1c2Uge3Z9c25wcmludGYgZnVuY3Rpb25zLgotZG5sIElmIHlvdSBsaWtlIHRvIGFjdGl2YXRlIGF0IHJ1bi10aW1lIEM5OSBjb21wYXRpYmxlIG51bWJlciBvdXRwdXQKLWRubCBzZWUgcmVsZWFzZSBub3RlIGZvciBtaW5ndyBydW50aW1lIDMuMTU6Ci1kbmwgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93bm90ZXMucGhwP3JlbGVhc2VfaWQ9MjQ4MzIKLWRubAotZG5sIEFsc28gKndpbjMyKmNvbmZpZy5oIGZpbGVzIHJlZGVmaW5lIHRoZW0gZm9yIHZhcmlvdXMgTVNDIGNvbXBpbGVycy4KLWRubAotZG5sIFNvIGRvIG5vdCByZWRlZmluZSB7dn1zbnByaW50ZiB0byBfe3Z9c25wcmludGYgbGlrZSBmb2xsb3dpbmc6Ci1kbmwgIEFDX0RFRklORShbc25wcmludGZdLFtfc25wcmludGZdLFtXaW4zMiBTdGQgQyBuYW1lIG1hbmdsaW5nIHdvcmstYXJvdW5kXSkKLWRubCAgQUNfREVGSU5FKFt2c25wcmludGZdLFtfdnNucHJpbnRmXSxbV2luMzIgU3RkIEMgbmFtZSBtYW5nbGluZyB3b3JrLWFyb3VuZF0pCi1kbmwgYW5kIGRvIG5vdCByZWRlZmluZSB0aG9zZSBmdW5jdGlvbnMgaXMgQy1zb3VyY2UgZmlsZXMuCi1kbmwKLUFDX0NIRUNLX0ZVTkNTKHNucHJpbnRmIHZzbnByaW50ZiwsCi0JTkVFRF9UUklPPTEpCi0KIGlmIHRlc3QgIiR3aXRoX2NvdmVyYWdlIiA9ICJ5ZXMiICYmIHRlc3QgIiR7R0NDfSIgPSAieWVzIgogdGhlbgogICAgIGVjaG8gRW5hYmxpbmcgY29kZSBjb3ZlcmFnZSBmb3IgR0NDCi0gICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKLSAgICBMREZMQUdTPSIkTERGTEFHUyAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisgICAgQU1fQ0ZMQUdTPSIkQU1fQ0ZMQUdTIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKyAgICBBTV9MREZMQUdTPSIkQU1fTERGTEFHUyAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCiBlbHNlCiAgICAgZWNobyBEaXNhYmxpbmcgY29kZSBjb3ZlcmFnZSBmb3IgR0NDCiBmaQogCi1BQ19TVUJTVChFWFRSQV9DRkxBR1MpCitYTUxfTElCUz0iLWx4bWwyIgorWE1MX0xJQlRPT0xMSUJTPSJsaWJ4bWwyLmxhIgorTk9OX1BDX0xJQlM9IiR7VEhSRUFEX0xJQlN9ICR7SUNPTlZfTElCU30gJHtMSUJNfSAke05FVF9MSUJTfSIKK1hNTF9QQ19MSUJTPSIke1hNTF9QQ19MSUJTfSAke05PTl9QQ19MSUJTfSIKK1hNTF9QUklWQVRFX0xJQlM9IiR7WE1MX1BSSVZBVEVfTElCU30gJHtOT05fUENfTElCU30iCitYTUxfUFJJVkFURV9DRkxBR1M9IiR7WE1MX1BSSVZBVEVfQ0ZMQUdTfSAke1RIUkVBRF9DRkxBR1N9ICR7SUNPTlZfQ0ZMQUdTfSIKKworZG5sIFdoZW4gc3RhdGljLW9ubHk6CitkbmwgKiBEdXBsaWNhdGUgeG1sLWNvbmZpZyBzdGF0aWMgLS1saWJzIGludG8gLS1keW5hbWljLgorZG5sICogRm9sZCBwa2ctY29uZmlnIHByaXZhdGUgZmllbGRzIGludG8gbWFpbiBmaWVsZHMuCitpZiB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiID0gInhubyI7IHRoZW4KKyAgWE1MX1BSSVZBVEVfTElCU19OT19TSEFSRUQ9IiR7WE1MX1BSSVZBVEVfTElCU30iCisgIFhNTF9QQ19QUklWQVRFPQorICBYTUxfUENfTElCU19QUklWQVRFPQorZWxzZQorICBYTUxfUFJJVkFURV9MSUJTX05PX1NIQVJFRD0KKyAgWE1MX1BDX1BSSVZBVEU9Ii5wcml2YXRlIgorICBYTUxfUENfTElCU19QUklWQVRFPSIKK0xpYnMucHJpdmF0ZToiCitmaQorQUNfU1VCU1QoWE1MX1BSSVZBVEVfTElCU19OT19TSEFSRUQpCitBQ19TVUJTVChYTUxfUENfUFJJVkFURSkKK0FDX1NVQlNUKFhNTF9QQ19MSUJTX1BSSVZBVEUpCitBTV9TVUJTVF9OT1RNQUtFKFhNTF9QUklWQVRFX0xJQlNfTk9fU0hBUkVEKQorQU1fU1VCU1RfTk9UTUFLRShYTUxfUENfUFJJVkFURSkKK0FNX1NVQlNUX05PVE1BS0UoWE1MX1BDX0xJQlNfUFJJVkFURSkKKworQUNfU1VCU1QoWE1MX1BDX0xJQlMpCitBQ19TVUJTVChYTUxfUENfUkVRVUlSRVMpCitBTV9TVUJTVF9OT1RNQUtFKFhNTF9QQ19MSUJTKQorQU1fU1VCU1RfTk9UTUFLRShYTUxfUENfUkVRVUlSRVMpCisKK0FDX1NVQlNUKEFNX0NGTEFHUykKK0FDX1NVQlNUKEFNX0xERkxBR1MpCiBBQ19TVUJTVChYTUxfQ0ZMQUdTKQogCiBBQ19TVUJTVChYTUxfTElCRElSKQogQUNfU1VCU1QoWE1MX0xJQlMpCiBBQ19TVUJTVChYTUxfUFJJVkFURV9MSUJTKQorQUNfU1VCU1QoWE1MX1BSSVZBVEVfQ0ZMQUdTKQogQUNfU1VCU1QoWE1MX0xJQlRPT0xMSUJTKQotQUNfU1VCU1QoSUNPTlZfTElCUykKLUFDX1NVQlNUKElDVV9MSUJTKQogQUNfU1VCU1QoWE1MX0lOQ0xVREVESVIpCiAKLUFDX1NVQlNUKFJETF9MSUJTKQotCiBkbmwgZm9yIHRoZSBzcGVjIGZpbGUKIFJFTERBVEU9YGRhdGUgKyclYSAlYiAlZSAlWSdgCiBBQ19TVUJTVChSRUxEQVRFKQotQUNfU1VCU1QoUFlUSE9OX1RFU1RTKQogCiAjIGtlZXAgb24gb25lIGxpbmUgZm9yIGN5Z3dpbiBjLmYuICMxMzA4OTYKLUFDX0NPTkZJR19GSUxFUyhbbGlieG1sMi5zcGVjOmxpYnhtbC5zcGVjLmluIE1ha2VmaWxlIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIGRvYy9leGFtcGxlcy9NYWtlZmlsZSBkb2MvZGV2aGVscC9NYWtlZmlsZSBleGFtcGxlL01ha2VmaWxlIGZ1enovTWFrZWZpbGUgcHl0aG9uL01ha2VmaWxlIHB5dGhvbi90ZXN0cy9NYWtlZmlsZSB4c3RjL01ha2VmaWxlIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaCBsaWJ4bWwtMi4wLnBjIGxpYnhtbC0yLjAtdW5pbnN0YWxsZWQucGMgbGlieG1sMi1jb25maWcuY21ha2VdKQorQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlIGluY2x1ZGUvcHJpdmF0ZS9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgZG9jL2V4YW1wbGVzL01ha2VmaWxlIGRvYy9kZXZoZWxwL01ha2VmaWxlIGV4YW1wbGUvTWFrZWZpbGUgZnV6ei9NYWtlZmlsZSBweXRob24vTWFrZWZpbGUgcHl0aG9uL3Rlc3RzL01ha2VmaWxlIHhzdGMvTWFrZWZpbGUgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oIGxpYnhtbC0yLjAucGMgbGlieG1sLTIuMC11bmluc3RhbGxlZC5wYyBsaWJ4bWwyLWNvbmZpZy5jbWFrZV0pCiBBQ19DT05GSUdfRklMRVMoW3B5dGhvbi9zZXR1cC5weV0sIFtjaG1vZCAreCBweXRob24vc2V0dXAucHldKQogQUNfQ09ORklHX0ZJTEVTKFt4bWwyLWNvbmZpZ10sIFtjaG1vZCAreCB4bWwyLWNvbmZpZ10pCiBBQ19PVVRQVVQKIAotZWNobyBEb25lIGNvbmZpZ3VyaW5nCitpZiB0ZXN0ICIkV0FSTl9OT19UTFMiICE9ICIiOyB0aGVuCisgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKyAgICBlY2hvICJXQVJOSU5HOiBZb3VyIEMgY29tcGlsZXIgYXBwZWFycyB0byBub3Qgc3VwcG9ydCB0aHJlYWQtbG9jYWwiCisgICAgZWNobyAic3RvcmFnZS4gRnV0dXJlIHZlcnNpb25zIG9mIGxpYnhtbDIgd2lsbCByZXF1aXJlIHRoaXMgZmVhdHVyZSIKKyAgICBlY2hvICJmb3IgbXVsdGktdGhyZWFkaW5nLiIKKyAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorZmkKZGlmZiAtLWdpdCBhL2RlYnVnWE1MLmMgYi9kZWJ1Z1hNTC5jCmluZGV4IGY0NTFjOWQuLjMwMzUxNWUgMTAwNjQ0Ci0tLSBhL2RlYnVnWE1MLmMKKysrIGIvZGVidWdYTUwuYwpAQCAtMTgsMTggKzE4LDE4IEBACiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgotI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC9kZWJ1Z1hNTC5oPgogI2luY2x1ZGUgPGxpYnhtbC9IVE1MdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC9IVE1McGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwveHBhdGhJbnRlcm5hbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+CiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAogI2luY2x1ZGUgPGxpYnhtbC9yZWxheG5nLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKKwogI2RlZmluZSBEVU1QX1RFWFRfVFlQRSAxCiAKIHR5cGVkZWYgc3RydWN0IF94bWxEZWJ1Z0N0eHQgeG1sRGVidWdDdHh0OwpAQCAtMjYzMyw3ICsyNjMzLDcgQEAKICAgICBpbnQgcmVzID0gLTE7CiAKICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmRvYyA9PSBOVUxMKSkgcmV0dXJuKC0xKTsKLSAgICB2Y3R4dC51c2VyRGF0YSA9IE5VTEw7CisgICAgbWVtc2V0KCZ2Y3R4dCwgMCwgc2l6ZW9mKHZjdHh0KSk7CiAgICAgdmN0eHQuZXJyb3IgPSB4bWxHZW5lcmljRXJyb3I7CiAgICAgdmN0eHQud2FybmluZyA9IHhtbEdlbmVyaWNFcnJvcjsKIApkaWZmIC0tZ2l0IGEvZGljdC5jIGIvZGljdC5jCmluZGV4IGMyOWQyYWYuLmQ3MTU2ZWQgMTAwNjQ0Ci0tLSBhL2RpY3QuYworKysgYi9kaWN0LmMKQEAgLTIwLDgwICsyMCwyNSBAQAogI2luY2x1ZGUgImxpYnhtbC5oIgogCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0vKgotICogRm9sbG93aW5nIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbAotICogaXQgc2VlbXMgdGhhdCBoYXZpbmcgaGFzaCByYW5kb21pemF0aW9uIG1pZ2h0IGJlIGEgZ29vZCBpZGVhCi0gKiB3aGVuIHVzaW5nIFhNTCB3aXRoIHVudHJ1c3RlZCBkYXRhCi0gKiBOb3RlMTogdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgb25seSBpZiBjb21waWxlZCB3aXRoIFdJVEhfQklHX0tFWQotICogIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgotICogTm90ZTI6IHRoZSBmYXN0IGZ1bmN0aW9uIHVzZWQgZm9yIGEgc21hbGwgZGljdCB3b24ndCBwcm90ZWN0IHZlcnkKLSAqICB3ZWxsIGJ1dCBzaW5jZSB0aGUgYXR0YWNrIGlzIGJhc2VkIG9uIGdyb3dpbmcgYSB2ZXJ5IGJpZyBoYXNoCi0gKiAgbGlzdCB3ZSB3aWxsIHVzZSB0aGUgQmlnS2V5IGFsZ28gYXMgc29vbiBhcyB0aGUgaGFzaCBzaXplIGdyb3dzCi0gKiAgb3ZlciBNSU5fRElDVF9TSVpFIHNvIHRoaXMgYWN0dWFsbHkgd29ya3MKLSAqLwotI2lmICFkZWZpbmVkKEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04pCi0jZGVmaW5lIERJQ1RfUkFORE9NSVpBVElPTgotI2VuZGlmCisjaW5jbHVkZSAicHJpdmF0ZS9kaWN0LmgiCisjaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRzLmgiCiAKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZmRlZiBIQVZFX1NURElOVF9ICi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZWxzZQotI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jZWxpZiBkZWZpbmVkKF9XSU4zMikKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJfdDsKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL2RpY3QuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CiAKLS8qICNkZWZpbmUgREVCVUdfR1JPVyAqLwotLyogI2RlZmluZSBESUNUX0RFQlVHX1BBVFRFUk5TICovCisjaWZuZGVmIFNJWkVfTUFYCisgICNkZWZpbmUgU0laRV9NQVggKChzaXplX3QpIC0xKQorI2VuZGlmCiAKLSNkZWZpbmUgTUFYX0hBU0hfTEVOIDMKLSNkZWZpbmUgTUlOX0RJQ1RfU0laRSAxMjgKLSNkZWZpbmUgTUFYX0RJQ1RfSEFTSCA4ICogMjA0OAotI2RlZmluZSBXSVRIX0JJR19LRVkKLQotI2lmZGVmIFdJVEhfQklHX0tFWQotI2RlZmluZSB4bWxEaWN0Q29tcHV0ZUtleShkaWN0LCBuYW1lLCBsZW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgoKGRpY3QpLT5zaXplID09IE1JTl9ESUNUX1NJWkUpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB4bWxEaWN0Q29tcHV0ZUZhc3RLZXkobmFtZSwgbGVuLCAoZGljdCktPnNlZWQpIDogICAgICAgICAgICAgICAgICAgXAotICAgICB4bWxEaWN0Q29tcHV0ZUJpZ0tleShuYW1lLCBsZW4sIChkaWN0KS0+c2VlZCkpCi0KLSNkZWZpbmUgeG1sRGljdENvbXB1dGVRS2V5KGRpY3QsIHByZWZpeCwgcGxlbiwgbmFtZSwgbGVuKSAgICAgICAgICAgICAgIFwKLSAgICAoKChwcmVmaXgpID09IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICh4bWxEaWN0Q29tcHV0ZUtleShkaWN0LCBuYW1lLCBsZW4pKSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoKChkaWN0KS0+c2l6ZSA9PSBNSU5fRElDVF9TSVpFKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgeG1sRGljdENvbXB1dGVGYXN0UUtleShwcmVmaXgsIHBsZW4sIG5hbWUsIGxlbiwgKGRpY3QpLT5zZWVkKSA6CVwKLSAgICAgICB4bWxEaWN0Q29tcHV0ZUJpZ1FLZXkocHJlZml4LCBwbGVuLCBuYW1lLCBsZW4sIChkaWN0KS0+c2VlZCkpKQotCi0jZWxzZSAvKiAhV0lUSF9CSUdfS0VZICovCi0jZGVmaW5lIHhtbERpY3RDb21wdXRlS2V5KGRpY3QsIG5hbWUsIGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHhtbERpY3RDb21wdXRlRmFzdEtleShuYW1lLCBsZW4sIChkaWN0KS0+c2VlZCkKLSNkZWZpbmUgeG1sRGljdENvbXB1dGVRS2V5KGRpY3QsIHByZWZpeCwgcGxlbiwgbmFtZSwgbGVuKSAgICAgICAgICAgICAgIFwKLSAgICAgICAgeG1sRGljdENvbXB1dGVGYXN0UUtleShwcmVmaXgsIHBsZW4sIG5hbWUsIGxlbiwgKGRpY3QpLT5zZWVkKQotI2VuZGlmIC8qIFdJVEhfQklHX0tFWSAqLwotCi0vKgotICogQW4gZW50cnkgaW4gdGhlIGRpY3Rpb25hcnkKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX3htbERpY3RFbnRyeSB4bWxEaWN0RW50cnk7Ci10eXBlZGVmIHhtbERpY3RFbnRyeSAqeG1sRGljdEVudHJ5UHRyOwotc3RydWN0IF94bWxEaWN0RW50cnkgewotICAgIHN0cnVjdCBfeG1sRGljdEVudHJ5ICpuZXh0OwotICAgIGNvbnN0IHhtbENoYXIgKm5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGxlbjsKLSAgICBpbnQgdmFsaWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBva2V5OwotfTsKKyNkZWZpbmUgTUFYX0ZJTExfTlVNIDcKKyNkZWZpbmUgTUFYX0ZJTExfREVOT00gOAorI2RlZmluZSBNSU5fSEFTSF9TSVpFIDgKKyNkZWZpbmUgTUFYX0hBU0hfU0laRSAoMXUgPDwgMzEpCiAKIHR5cGVkZWYgc3RydWN0IF94bWxEaWN0U3RyaW5ncyB4bWxEaWN0U3RyaW5nczsKIHR5cGVkZWYgeG1sRGljdFN0cmluZ3MgKnhtbERpY3RTdHJpbmdzUHRyOwpAQCAtMTA1LDIwICs1MCwyMyBAQAogICAgIHNpemVfdCBuYlN0cmluZ3M7CiAgICAgeG1sQ2hhciBhcnJheVsxXTsKIH07CisKK3R5cGVkZWYgeG1sSGFzaGVkU3RyaW5nIHhtbERpY3RFbnRyeTsKKwogLyoKICAqIFRoZSBlbnRpcmUgZGljdGlvbmFyeQogICovCiBzdHJ1Y3QgX3htbERpY3QgewogICAgIGludCByZWZfY291bnRlcjsKIAotICAgIHN0cnVjdCBfeG1sRGljdEVudHJ5ICpkaWN0OworICAgIHhtbERpY3RFbnRyeSAqdGFibGU7CiAgICAgc2l6ZV90IHNpemU7CiAgICAgdW5zaWduZWQgaW50IG5iRWxlbXM7CiAgICAgeG1sRGljdFN0cmluZ3NQdHIgc3RyaW5nczsKIAogICAgIHN0cnVjdCBfeG1sRGljdCAqc3ViZGljdDsKICAgICAvKiB1c2VkIGZvciByYW5kb21pemF0aW9uICovCi0gICAgaW50IHNlZWQ7CisgICAgdW5zaWduZWQgc2VlZDsKICAgICAvKiB1c2VkIHRvIGltcG9zZSBhIGxpbWl0IG9uIHNpemUgKi8KICAgICBzaXplX3QgbGltaXQ7CiB9OwpAQCAtMTI3LDEwNyArNzUsNTEgQEAKICAqIEEgbXV0ZXggZm9yIG1vZGlmeWluZyB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHNoYXJlZAogICogZGljdGlvbmFyaWVzLgogICovCi1zdGF0aWMgeG1sTXV0ZXhQdHIgeG1sRGljdE11dGV4ID0gTlVMTDsKLQotLyoKLSAqIFdoZXRoZXIgdGhlIGRpY3Rpb25hcnkgbXV0ZXggd2FzIGluaXRpYWxpemVkLgotICovCi1zdGF0aWMgaW50IHhtbERpY3RJbml0aWFsaXplZCA9IDA7Ci0KLSNpZmRlZiBESUNUX1JBTkRPTUlaQVRJT04KLSNpZmRlZiBIQVZFX1JBTkRfUgotLyoKLSAqIEludGVybmFsIGRhdGEgZm9yIHJhbmRvbSBmdW5jdGlvbiwgcHJvdGVjdGVkIGJ5IHhtbERpY3RNdXRleAotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHJhbmRfc2VlZCA9IDA7Ci0jZW5kaWYKLSNlbmRpZgorc3RhdGljIHhtbE11dGV4IHhtbERpY3RNdXRleDsKIAogLyoqCiAgKiB4bWxJbml0aWFsaXplRGljdDoKICAqCi0gKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIHhtbEluaXRQYXJzZXIgdG8KLSAqIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuCisgKiBERVBSRUNBVEVEOiBBbGlhcyBmb3IgeG1sSW5pdFBhcnNlci4KICAqCi0gKiBEbyB0aGUgZGljdGlvbmFyeSBtdXRleCBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgaW5pdGlhbGl6YXRpb24gd2FzIGFscmVhZHkgZG9uZSwgYW5kIDEgaWYgdGhhdAotICogY2FsbCBsZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uCisgKiBSZXR1cm5zIDAuCiAgKi8KLWludCB4bWxJbml0aWFsaXplRGljdCh2b2lkKSB7CitpbnQKK3htbEluaXRpYWxpemVEaWN0KHZvaWQpIHsKKyAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgcmV0dXJuKDApOwogfQogCiAvKioKLSAqIF9feG1sSW5pdGlhbGl6ZURpY3Q6CisgKiB4bWxJbml0RGljdEludGVybmFsOgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHB1YmxpYwotICogRG8gdGhlIGRpY3Rpb25hcnkgbXV0ZXggaW5pdGlhbGl6YXRpb24uCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZSwgaW5pdGlhbGl6YXRpb24gc2hvdWxkCi0gKiBub3JtYWxseSBiZSBkb25lIG9uY2UgYXQgc2V0dXAgd2hlbiBjYWxsZWQgZnJvbSB4bWxPbmNlSW5pdCgpCi0gKiB3ZSBtYXkgYWxzbyBsYW5kIGluIHRoaXMgY29kZSBpZiB0aHJlYWQgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgaW5pdGlhbGl6YXRpb24gd2FzIGFscmVhZHkgZG9uZSwgYW5kIDEgaWYgdGhhdAotICogY2FsbCBsZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uCisgKiBJbml0aWFsaXplIG11dGV4LgogICovCi1pbnQgX194bWxJbml0aWFsaXplRGljdCh2b2lkKSB7Ci0gICAgaWYgKHhtbERpY3RJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgaWYgKCh4bWxEaWN0TXV0ZXggPSB4bWxOZXdNdXRleCgpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbERpY3RNdXRleCk7Ci0KLSNpZmRlZiBESUNUX1JBTkRPTUlaQVRJT04KLSNpZmRlZiBIQVZFX1JBTkRfUgotICAgIHJhbmRfc2VlZCA9IHRpbWUoTlVMTCk7Ci0gICAgcmFuZF9yKCYgcmFuZF9zZWVkKTsKLSNlbHNlCi0gICAgc3JhbmQodGltZShOVUxMKSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHhtbERpY3RJbml0aWFsaXplZCA9IDE7Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sRGljdE11dGV4KTsKLSAgICByZXR1cm4oMSk7Cit2b2lkCit4bWxJbml0RGljdEludGVybmFsKHZvaWQpIHsKKyAgICB4bWxJbml0TXV0ZXgoJnhtbERpY3RNdXRleCk7CiB9CiAKLSNpZmRlZiBESUNUX1JBTkRPTUlaQVRJT04KLWludCBfX3htbFJhbmRvbSh2b2lkKSB7Ci0gICAgaW50IHJldDsKLQotICAgIGlmICh4bWxEaWN0SW5pdGlhbGl6ZWQgPT0gMCkKLSAgICAgICAgX194bWxJbml0aWFsaXplRGljdCgpOwotCi0gICAgeG1sTXV0ZXhMb2NrKHhtbERpY3RNdXRleCk7Ci0jaWZkZWYgSEFWRV9SQU5EX1IKLSAgICByZXQgPSByYW5kX3IoJiByYW5kX3NlZWQpOwotI2Vsc2UKLSAgICByZXQgPSByYW5kKCk7Ci0jZW5kaWYKLSAgICB4bWxNdXRleFVubG9jayh4bWxEaWN0TXV0ZXgpOwotICAgIHJldHVybihyZXQpOwotfQotI2VuZGlmCi0KIC8qKgogICogeG1sRGljdENsZWFudXA6CiAgKgotICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxDbGVhbnVwUGFyc2VyCisgKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIGlzIGEgbm8tb3AuIENhbGwgeG1sQ2xlYW51cFBhcnNlcgogICogdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIHhtbENsZWFudXBQYXJzZXIKICAqIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbid0CiAgKiBoYXZlIGNhbGwgY2xlYW51cCBmdW5jdGlvbnMgYXQgYWxsLgotICoKLSAqIEZyZWUgdGhlIGRpY3Rpb25hcnkgbXV0ZXguIERvIG5vdCBjYWxsIHVubGVzcyBzdXJlIHRoZSBsaWJyYXJ5Ci0gKiBpcyBub3QgaW4gdXNlIGFueW1vcmUgIQogICovCiB2b2lkCiB4bWxEaWN0Q2xlYW51cCh2b2lkKSB7Ci0gICAgaWYgKCF4bWxEaWN0SW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKK30KIAotICAgIHhtbEZyZWVNdXRleCh4bWxEaWN0TXV0ZXgpOwotCi0gICAgeG1sRGljdEluaXRpYWxpemVkID0gMDsKKy8qKgorICogeG1sQ2xlYW51cERpY3RJbnRlcm5hbDoKKyAqCisgKiBGcmVlIHRoZSBkaWN0aW9uYXJ5IG11dGV4LgorICovCit2b2lkCit4bWxDbGVhbnVwRGljdEludGVybmFsKHZvaWQpIHsKKyAgICB4bWxDbGVhbnVwTXV0ZXgoJnhtbERpY3RNdXRleCk7CiB9CiAKIC8qCkBAIC0yNDcsOSArMTM5LDYgQEAKICAgICBzaXplX3Qgc2l6ZSA9IDA7IC8qICsgc2l6ZW9mKF94bWxEaWN0U3RyaW5ncykgPT0gMTAyNCAqLwogICAgIHNpemVfdCBsaW1pdCA9IDA7CiAKLSNpZmRlZiBESUNUX0RFQlVHX1BBVFRFUk5TCi0gICAgZnByaW50ZihzdGRlcnIsICItIik7Ci0jZW5kaWYKICAgICBwb29sID0gZGljdC0+c3RyaW5nczsKICAgICB3aGlsZSAocG9vbCAhPSBOVUxMKSB7CiAJaWYgKChzaXplX3QpKHBvb2wtPmVuZCAtIHBvb2wtPmZyZWUpID4gbmFtZWxlbikKQEAgLTI2NiwxMCArMTU1LDIwIEBACiAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gMTAwMDsKLQllbHNlIHNpemUgKj0gNDsgLyogZXhwb25lbnRpYWwgZ3Jvd3RoICovCi0gICAgICAgIGlmIChzaXplIDwgNCAqIG5hbWVsZW4pCi0JICAgIHNpemUgPSA0ICogbmFtZWxlbjsgLyoganVzdCBpbiBjYXNlICEgKi8KKyAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICAgICAgc2l6ZSA9IDEwMDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA8IChTSVpFX01BWCAtIHNpemVvZih4bWxEaWN0U3RyaW5ncykpIC8gNCkKKyAgICAgICAgICAgICAgICBzaXplICo9IDQ7IC8qIGV4cG9uZW50aWFsIGdyb3d0aCAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNpemUgPSBTSVpFX01BWCAtIHNpemVvZih4bWxEaWN0U3RyaW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUgLyA0IDwgbmFtZWxlbikgeworICAgICAgICAgICAgaWYgKChzaXplX3QpIG5hbWVsZW4gKyAwIDwgKFNJWkVfTUFYIC0gc2l6ZW9mKHhtbERpY3RTdHJpbmdzKSkgLyA0KQorICAgICAgICAgICAgICAgIHNpemUgPSA0ICogKHNpemVfdCkgbmFtZWxlbjsgLyoganVzdCBpbiBjYXNlICEgKi8KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KIAlwb29sID0gKHhtbERpY3RTdHJpbmdzUHRyKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbERpY3RTdHJpbmdzKSArIHNpemUpOwogCWlmIChwb29sID09IE5VTEwpCiAJICAgIHJldHVybihOVUxMKTsKQEAgLTI3OSw5ICsxNzgsNiBAQAogCXBvb2wtPmVuZCA9ICZwb29sLT5hcnJheVtzaXplXTsKIAlwb29sLT5uZXh0ID0gZGljdC0+c3RyaW5nczsKIAlkaWN0LT5zdHJpbmdzID0gcG9vbDsKLSNpZmRlZiBESUNUX0RFQlVHX1BBVFRFUk5TCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKyIpOwotI2VuZGlmCiAgICAgfQogZm91bmRfcG9vbDoKICAgICByZXQgPSBwb29sLT5mcmVlOwpAQCAtMzEzLDExICsyMDksNiBAQAogICAgIHNpemVfdCBzaXplID0gMDsgLyogKyBzaXplb2YoX3htbERpY3RTdHJpbmdzKSA9PSAxMDI0ICovCiAgICAgc2l6ZV90IGxpbWl0ID0gMDsKIAotICAgIGlmIChwcmVmaXggPT0gTlVMTCkgcmV0dXJuKHhtbERpY3RBZGRTdHJpbmcoZGljdCwgbmFtZSwgbmFtZWxlbikpOwotCi0jaWZkZWYgRElDVF9ERUJVR19QQVRURVJOUwotICAgIGZwcmludGYoc3RkZXJyLCAiPSIpOwotI2VuZGlmCiAgICAgcG9vbCA9IGRpY3QtPnN0cmluZ3M7CiAgICAgd2hpbGUgKHBvb2wgIT0gTlVMTCkgewogCWlmICgoc2l6ZV90KShwb29sLT5lbmQgLSBwb29sLT5mcmVlKSA+IG5hbWVsZW4gKyBwbGVuICsgMSkKQEAgLTM0Nyw5ICsyMzgsNiBAQAogCXBvb2wtPmVuZCA9ICZwb29sLT5hcnJheVtzaXplXTsKIAlwb29sLT5uZXh0ID0gZGljdC0+c3RyaW5nczsKIAlkaWN0LT5zdHJpbmdzID0gcG9vbDsKLSNpZmRlZiBESUNUX0RFQlVHX1BBVFRFUk5TCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKyIpOwotI2VuZGlmCiAgICAgfQogZm91bmRfcG9vbDoKICAgICByZXQgPSBwb29sLT5mcmVlOwpAQCAtMzYzLDIwOSArMjUxLDYgQEAKICAgICByZXR1cm4ocmV0KTsKIH0KIAotI2lmZGVmIFdJVEhfQklHX0tFWQotLyoKLSAqIHhtbERpY3RDb21wdXRlQmlnS2V5OgotICoKLSAqIENhbGN1bGF0ZSBhIGhhc2gga2V5IHVzaW5nIGEgZ29vZCBoYXNoIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2VsbCBmb3IKLSAqIGxhcmdlciBoYXNoIHRhYmxlIHNpemVzLgotICoKLSAqIEhhc2ggZnVuY3Rpb24gYnkgIk9uZS1hdC1hLVRpbWUgSGFzaCIgc2VlCi0gKiBodHRwOi8vYnVydGxlYnVydGxlLm5ldC9ib2IvaGFzaC9kb29icy5odG1sCi0gKi8KLQotI2lmZGVmIF9fY2xhbmdfXwotQVRUUklCVVRFX05PX1NBTklUSVpFKCJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikKLSNlbmRpZgotc3RhdGljIHVpbnQzMl90Ci14bWxEaWN0Q29tcHV0ZUJpZ0tleShjb25zdCB4bWxDaGFyKiBkYXRhLCBpbnQgbmFtZWxlbiwgaW50IHNlZWQpIHsKLSAgICB1aW50MzJfdCBoYXNoOwotICAgIGludCBpOwotCi0gICAgaWYgKG5hbWVsZW4gPD0gMCB8fCBkYXRhID09IE5VTEwpIHJldHVybigwKTsKLQotICAgIGhhc2ggPSBzZWVkOwotCi0gICAgZm9yIChpID0gMDtpIDwgbmFtZWxlbjsgaSsrKSB7Ci0gICAgICAgIGhhc2ggKz0gZGF0YVtpXTsKLQloYXNoICs9IChoYXNoIDw8IDEwKTsKLQloYXNoIF49IChoYXNoID4+IDYpOwotICAgIH0KLSAgICBoYXNoICs9IChoYXNoIDw8IDMpOwotICAgIGhhc2ggXj0gKGhhc2ggPj4gMTEpOwotICAgIGhhc2ggKz0gKGhhc2ggPDwgMTUpOwotCi0gICAgcmV0dXJuIGhhc2g7Ci19Ci0KLS8qCi0gKiB4bWxEaWN0Q29tcHV0ZUJpZ1FLZXk6Ci0gKgotICogQ2FsY3VsYXRlIGEgaGFzaCBrZXkgZm9yIHR3byBzdHJpbmdzIHVzaW5nIGEgZ29vZCBoYXNoIGZ1bmN0aW9uCi0gKiB0aGF0IHdvcmtzIHdlbGwgZm9yIGxhcmdlciBoYXNoIHRhYmxlIHNpemVzLgotICoKLSAqIEhhc2ggZnVuY3Rpb24gYnkgIk9uZS1hdC1hLVRpbWUgSGFzaCIgc2VlCi0gKiBodHRwOi8vYnVydGxlYnVydGxlLm5ldC9ib2IvaGFzaC9kb29icy5odG1sCi0gKgotICogTmVpdGhlciBvZiB0aGUgdHdvIHN0cmluZ3MgbXVzdCBiZSBOVUxMLgotICovCi0jaWZkZWYgX19jbGFuZ19fCi1BVFRSSUJVVEVfTk9fU0FOSVRJWkUoInVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKQotI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgbG9uZwoteG1sRGljdENvbXB1dGVCaWdRS2V5KGNvbnN0IHhtbENoYXIgKnByZWZpeCwgaW50IHBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHNlZWQpCi17Ci0gICAgdWludDMyX3QgaGFzaDsKLSAgICBpbnQgaTsKLQotICAgIGhhc2ggPSBzZWVkOwotCi0gICAgZm9yIChpID0gMDtpIDwgcGxlbjsgaSsrKSB7Ci0gICAgICAgIGhhc2ggKz0gcHJlZml4W2ldOwotCWhhc2ggKz0gKGhhc2ggPDwgMTApOwotCWhhc2ggXj0gKGhhc2ggPj4gNik7Ci0gICAgfQotICAgIGhhc2ggKz0gJzonOwotICAgIGhhc2ggKz0gKGhhc2ggPDwgMTApOwotICAgIGhhc2ggXj0gKGhhc2ggPj4gNik7Ci0KLSAgICBmb3IgKGkgPSAwO2kgPCBsZW47IGkrKykgewotICAgICAgICBoYXNoICs9IG5hbWVbaV07Ci0JaGFzaCArPSAoaGFzaCA8PCAxMCk7Ci0JaGFzaCBePSAoaGFzaCA+PiA2KTsKLSAgICB9Ci0gICAgaGFzaCArPSAoaGFzaCA8PCAzKTsKLSAgICBoYXNoIF49IChoYXNoID4+IDExKTsKLSAgICBoYXNoICs9IChoYXNoIDw8IDE1KTsKLQotICAgIHJldHVybiBoYXNoOwotfQotI2VuZGlmIC8qIFdJVEhfQklHX0tFWSAqLwotCi0vKgotICogeG1sRGljdENvbXB1dGVGYXN0S2V5OgotICoKLSAqIENhbGN1bGF0ZSBhIGhhc2gga2V5IHVzaW5nIGEgZmFzdCBoYXNoIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2VsbAotICogZm9yIGxvdyBoYXNoIHRhYmxlIGZpbGwuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi14bWxEaWN0Q29tcHV0ZUZhc3RLZXkoY29uc3QgeG1sQ2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBzZWVkKSB7Ci0gICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9IHNlZWQ7Ci0KLSAgICBpZiAobmFtZSA9PSBOVUxMKSByZXR1cm4oMCk7Ci0gICAgdmFsdWUgKz0gKm5hbWU7Ci0gICAgdmFsdWUgPDw9IDU7Ci0gICAgaWYgKG5hbWVsZW4gPiAxMCkgewotICAgICAgICB2YWx1ZSArPSBuYW1lW25hbWVsZW4gLSAxXTsKLSAgICAgICAgbmFtZWxlbiA9IDEwOwotICAgIH0KLSAgICBzd2l0Y2ggKG5hbWVsZW4pIHsKLSAgICAgICAgY2FzZSAxMDogdmFsdWUgKz0gbmFtZVs5XTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSA5OiB2YWx1ZSArPSBuYW1lWzhdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDg6IHZhbHVlICs9IG5hbWVbN107Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgNzogdmFsdWUgKz0gbmFtZVs2XTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSA2OiB2YWx1ZSArPSBuYW1lWzVdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDU6IHZhbHVlICs9IG5hbWVbNF07Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgNDogdmFsdWUgKz0gbmFtZVszXTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSAzOiB2YWx1ZSArPSBuYW1lWzJdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDI6IHZhbHVlICs9IG5hbWVbMV07Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4odmFsdWUpOwotfQotCi0vKgotICogeG1sRGljdENvbXB1dGVGYXN0UUtleToKLSAqCi0gKiBDYWxjdWxhdGUgYSBoYXNoIGtleSBmb3IgdHdvIHN0cmluZ3MgdXNpbmcgYSBmYXN0IGhhc2ggZnVuY3Rpb24KLSAqIHRoYXQgd29ya3Mgd2VsbCBmb3IgbG93IGhhc2ggdGFibGUgZmlsbC4KLSAqCi0gKiBOZWl0aGVyIG9mIHRoZSB0d28gc3RyaW5ncyBtdXN0IGJlIE5VTEwuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi14bWxEaWN0Q29tcHV0ZUZhc3RRS2V5KGNvbnN0IHhtbENoYXIgKnByZWZpeCwgaW50IHBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBsZW4sIGludCBzZWVkKQotewotICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAodW5zaWduZWQgbG9uZykgc2VlZDsKLQotICAgIGlmIChwbGVuID09IDApCi0JdmFsdWUgKz0gMzAgKiAodW5zaWduZWQgbG9uZykgJzonOwotICAgIGVsc2UKLQl2YWx1ZSArPSAzMCAqICgqcHJlZml4KTsKLQotICAgIGlmIChsZW4gPiAxMCkgewotICAgICAgICBpbnQgb2Zmc2V0ID0gbGVuIC0gKHBsZW4gKyAxICsgMSk7Ci0JaWYgKG9mZnNldCA8IDApCi0JICAgIG9mZnNldCA9IGxlbiAtICgxMCArIDEpOwotCXZhbHVlICs9IG5hbWVbb2Zmc2V0XTsKLSAgICAgICAgbGVuID0gMTA7Ci0JaWYgKHBsZW4gPiAxMCkKLQkgICAgcGxlbiA9IDEwOwotICAgIH0KLSAgICBzd2l0Y2ggKHBsZW4pIHsKLSAgICAgICAgY2FzZSAxMDogdmFsdWUgKz0gcHJlZml4WzldOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDk6IHZhbHVlICs9IHByZWZpeFs4XTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSA4OiB2YWx1ZSArPSBwcmVmaXhbN107Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgNzogdmFsdWUgKz0gcHJlZml4WzZdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDY6IHZhbHVlICs9IHByZWZpeFs1XTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSA1OiB2YWx1ZSArPSBwcmVmaXhbNF07Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgNDogdmFsdWUgKz0gcHJlZml4WzNdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDM6IHZhbHVlICs9IHByZWZpeFsyXTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSAyOiB2YWx1ZSArPSBwcmVmaXhbMV07Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgMTogdmFsdWUgKz0gcHJlZml4WzBdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gICAgbGVuIC09IHBsZW47Ci0gICAgaWYgKGxlbiA+IDApIHsKLSAgICAgICAgdmFsdWUgKz0gKHVuc2lnbmVkIGxvbmcpICc6JzsKLQlsZW4tLTsKLSAgICB9Ci0gICAgc3dpdGNoIChsZW4pIHsKLSAgICAgICAgY2FzZSAxMDogdmFsdWUgKz0gbmFtZVs5XTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSA5OiB2YWx1ZSArPSBuYW1lWzhdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDg6IHZhbHVlICs9IG5hbWVbN107Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgNzogdmFsdWUgKz0gbmFtZVs2XTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSA2OiB2YWx1ZSArPSBuYW1lWzVdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDU6IHZhbHVlICs9IG5hbWVbNF07Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgNDogdmFsdWUgKz0gbmFtZVszXTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgY2FzZSAzOiB2YWx1ZSArPSBuYW1lWzJdOwotICAgICAgICAvKiBGYWxscyB0aHJvdWdoLiAqLwotICAgICAgICBjYXNlIDI6IHZhbHVlICs9IG5hbWVbMV07Ci0gICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCi0gICAgICAgIGNhc2UgMTogdmFsdWUgKz0gbmFtZVswXTsKLSAgICAgICAgLyogRmFsbHMgdGhyb3VnaC4gKi8KLSAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVybih2YWx1ZSk7Ci19Ci0KIC8qKgogICogeG1sRGljdENyZWF0ZToKICAqCkBAIC01NzcsMzYgKzI2MiwyNCBAQAogeG1sRGljdENyZWF0ZSh2b2lkKSB7CiAgICAgeG1sRGljdFB0ciBkaWN0OwogCi0gICAgaWYgKCF4bWxEaWN0SW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmICghX194bWxJbml0aWFsaXplRGljdCgpKQotICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotCi0jaWZkZWYgRElDVF9ERUJVR19QQVRURVJOUwotICAgIGZwcmludGYoc3RkZXJyLCAiQyIpOwotI2VuZGlmCisgICAgeG1sSW5pdFBhcnNlcigpOwogCiAgICAgZGljdCA9IHhtbE1hbGxvYyhzaXplb2YoeG1sRGljdCkpOwotICAgIGlmIChkaWN0KSB7Ci0gICAgICAgIGRpY3QtPnJlZl9jb3VudGVyID0gMTsKLSAgICAgICAgZGljdC0+bGltaXQgPSAwOworICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICBkaWN0LT5yZWZfY291bnRlciA9IDE7CisgICAgZGljdC0+bGltaXQgPSAwOwogCi0gICAgICAgIGRpY3QtPnNpemUgPSBNSU5fRElDVF9TSVpFOwotCWRpY3QtPm5iRWxlbXMgPSAwOwotICAgICAgICBkaWN0LT5kaWN0ID0geG1sTWFsbG9jKE1JTl9ESUNUX1NJWkUgKiBzaXplb2YoeG1sRGljdEVudHJ5KSk7Ci0JZGljdC0+c3RyaW5ncyA9IE5VTEw7Ci0JZGljdC0+c3ViZGljdCA9IE5VTEw7Ci0gICAgICAgIGlmIChkaWN0LT5kaWN0KSB7Ci0JICAgIG1lbXNldChkaWN0LT5kaWN0LCAwLCBNSU5fRElDVF9TSVpFICogc2l6ZW9mKHhtbERpY3RFbnRyeSkpOwotI2lmZGVmIERJQ1RfUkFORE9NSVpBVElPTgotICAgICAgICAgICAgZGljdC0+c2VlZCA9IF9feG1sUmFuZG9tKCk7Ci0jZWxzZQotICAgICAgICAgICAgZGljdC0+c2VlZCA9IDA7CisgICAgZGljdC0+c2l6ZSA9IDA7CisgICAgZGljdC0+bmJFbGVtcyA9IDA7CisgICAgZGljdC0+dGFibGUgPSBOVUxMOworICAgIGRpY3QtPnN0cmluZ3MgPSBOVUxMOworICAgIGRpY3QtPnN1YmRpY3QgPSBOVUxMOworICAgIGRpY3QtPnNlZWQgPSB4bWxSYW5kb20oKTsKKyNpZmRlZiBGVVpaSU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OCisgICAgZGljdC0+c2VlZCA9IDA7CiAjZW5kaWYKLQkgICAgcmV0dXJuKGRpY3QpOwotICAgICAgICB9Ci0gICAgICAgIHhtbEZyZWUoZGljdCk7Ci0gICAgfQotICAgIHJldHVybihOVUxMKTsKKyAgICByZXR1cm4oZGljdCk7CiB9CiAKIC8qKgpAQCAtNjI1LDkgKzI5OCw2IEBACiAgICAgeG1sRGljdFB0ciBkaWN0ID0geG1sRGljdENyZWF0ZSgpOwogCiAgICAgaWYgKChkaWN0ICE9IE5VTEwpICYmIChzdWIgIT0gTlVMTCkpIHsKLSNpZmRlZiBESUNUX0RFQlVHX1BBVFRFUk5TCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUiIpOwotI2VuZGlmCiAgICAgICAgIGRpY3QtPnNlZWQgPSBzdWItPnNlZWQ7CiAgICAgICAgIGRpY3QtPnN1YmRpY3QgPSBzdWI7CiAJeG1sRGljdFJlZmVyZW5jZShkaWN0LT5zdWJkaWN0KTsKQEAgLTY0NSwxNTMgKzMxNSwxNCBAQAogICovCiBpbnQKIHhtbERpY3RSZWZlcmVuY2UoeG1sRGljdFB0ciBkaWN0KSB7Ci0gICAgaWYgKCF4bWxEaWN0SW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmICghX194bWxJbml0aWFsaXplRGljdCgpKQotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLQogICAgIGlmIChkaWN0ID09IE5VTEwpIHJldHVybiAtMTsKLSAgICB4bWxNdXRleExvY2soeG1sRGljdE11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbERpY3RNdXRleCk7CiAgICAgZGljdC0+cmVmX2NvdW50ZXIrKzsKLSAgICB4bWxNdXRleFVubG9jayh4bWxEaWN0TXV0ZXgpOworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxEaWN0TXV0ZXgpOwogICAgIHJldHVybigwKTsKIH0KIAogLyoqCi0gKiB4bWxEaWN0R3JvdzoKLSAqIEBkaWN0OiB0aGUgZGljdGlvbmFyeQotICogQHNpemU6IHRoZSBuZXcgc2l6ZSBvZiB0aGUgZGljdGlvbmFyeQotICoKLSAqIHJlc2l6ZSB0aGUgZGljdGlvbmFyeQotICoKLSAqIFJldHVybnMgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIC0xIGluIGNhc2Ugb2YgZmFpbHVyZQotICovCi1zdGF0aWMgaW50Ci14bWxEaWN0R3Jvdyh4bWxEaWN0UHRyIGRpY3QsIHNpemVfdCBzaXplKSB7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXksIG9rZXk7Ci0gICAgc2l6ZV90IG9sZHNpemUsIGk7Ci0gICAgeG1sRGljdEVudHJ5UHRyIGl0ZXIsIG5leHQ7Ci0gICAgc3RydWN0IF94bWxEaWN0RW50cnkgKm9sZGRpY3Q7Ci0jaWZkZWYgREVCVUdfR1JPVwotICAgIHVuc2lnbmVkIGxvbmcgbmJFbGVtID0gMDsKLSNlbmRpZgotICAgIGludCByZXQgPSAwOwotICAgIGludCBrZWVwX2tleXMgPSAxOwotCi0gICAgaWYgKGRpY3QgPT0gTlVMTCkKLQlyZXR1cm4oLTEpOwotICAgIGlmIChzaXplIDwgOCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoc2l6ZSA+IDggKiAyMDQ4KQotCXJldHVybigtMSk7Ci0KLSNpZmRlZiBESUNUX0RFQlVHX1BBVFRFUk5TCi0gICAgZnByaW50ZihzdGRlcnIsICIqIik7Ci0jZW5kaWYKLQotICAgIG9sZHNpemUgPSBkaWN0LT5zaXplOwotICAgIG9sZGRpY3QgPSBkaWN0LT5kaWN0OwotICAgIGlmIChvbGRkaWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKG9sZHNpemUgPT0gTUlOX0RJQ1RfU0laRSkKLSAgICAgICAga2VlcF9rZXlzID0gMDsKLQotICAgIGRpY3QtPmRpY3QgPSB4bWxNYWxsb2Moc2l6ZSAqIHNpemVvZih4bWxEaWN0RW50cnkpKTsKLSAgICBpZiAoZGljdC0+ZGljdCA9PSBOVUxMKSB7Ci0JZGljdC0+ZGljdCA9IG9sZGRpY3Q7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgbWVtc2V0KGRpY3QtPmRpY3QsIDAsIHNpemUgKiBzaXplb2YoeG1sRGljdEVudHJ5KSk7Ci0gICAgZGljdC0+c2l6ZSA9IHNpemU7Ci0KLSAgICAvKglJZiB0aGUgdHdvIGxvb3BzIGFyZSBtZXJnZWQsIHRoZXJlIHdvdWxkIGJlIHNpdHVhdGlvbnMgd2hlcmUKLQlhIG5ldyBlbnRyeSBuZWVkcyB0byBhbGxvY2F0ZWQgYW5kIGRhdGEgY29waWVkIGludG8gaXQgZnJvbQotCXRoZSBtYWluIGRpY3QuIEl0IGlzIG5pY2VyIHRvIHJ1biB0aHJvdWdoIHRoZSBhcnJheSB0d2ljZSwgZmlyc3QKLQljb3B5aW5nIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIG1haW4gYXJyYXkgKGxlc3MgcHJvYmFiaWxpdHkgb2YKLQlhbGxvY2F0ZSkgYW5kIHRoZW4gdGhlIHJlc3QsIHNvIHdlIG9ubHkgZnJlZSBpbiB0aGUgc2Vjb25kIGxvb3AuCi0gICAgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgb2xkc2l6ZTsgaSsrKSB7Ci0JaWYgKG9sZGRpY3RbaV0udmFsaWQgPT0gMCkKLQkgICAgY29udGludWU7Ci0KLQlpZiAoa2VlcF9rZXlzKQotCSAgICBva2V5ID0gb2xkZGljdFtpXS5va2V5OwotCWVsc2UKLQkgICAgb2tleSA9IHhtbERpY3RDb21wdXRlS2V5KGRpY3QsIG9sZGRpY3RbaV0ubmFtZSwgb2xkZGljdFtpXS5sZW4pOwotCWtleSA9IG9rZXkgJSBkaWN0LT5zaXplOwotCi0JaWYgKGRpY3QtPmRpY3Rba2V5XS52YWxpZCA9PSAwKSB7Ci0JICAgIG1lbWNweSgmKGRpY3QtPmRpY3Rba2V5XSksICYob2xkZGljdFtpXSksIHNpemVvZih4bWxEaWN0RW50cnkpKTsKLQkgICAgZGljdC0+ZGljdFtrZXldLm5leHQgPSBOVUxMOwotCSAgICBkaWN0LT5kaWN0W2tleV0ub2tleSA9IG9rZXk7Ci0JfSBlbHNlIHsKLQkgICAgeG1sRGljdEVudHJ5UHRyIGVudHJ5OwotCi0JICAgIGVudHJ5ID0geG1sTWFsbG9jKHNpemVvZih4bWxEaWN0RW50cnkpKTsKLQkgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLQkJZW50cnktPm5hbWUgPSBvbGRkaWN0W2ldLm5hbWU7Ci0JCWVudHJ5LT5sZW4gPSBvbGRkaWN0W2ldLmxlbjsKLQkJZW50cnktPm9rZXkgPSBva2V5OwotCQllbnRyeS0+bmV4dCA9IGRpY3QtPmRpY3Rba2V5XS5uZXh0OwotCQllbnRyeS0+dmFsaWQgPSAxOwotCQlkaWN0LT5kaWN0W2tleV0ubmV4dCA9IGVudHJ5OwotCSAgICB9IGVsc2UgewotCSAgICAgICAgLyoKLQkJICogd2UgZG9uJ3QgaGF2ZSBtdWNoIHdheXMgdG8gYWxlcnQgZnJvbSBoZXJlCi0JCSAqIHJlc3VsdCBpcyBsb3NpbmcgYW4gZW50cnkgYW5kIHVuaWNpdHkgZ3VhcmFudGVlCi0JCSAqLwotCSAgICAgICAgcmV0ID0gLTE7Ci0JICAgIH0KLQl9Ci0jaWZkZWYgREVCVUdfR1JPVwotCW5iRWxlbSsrOwotI2VuZGlmCi0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG9sZHNpemU7IGkrKykgewotCWl0ZXIgPSBvbGRkaWN0W2ldLm5leHQ7Ci0Jd2hpbGUgKGl0ZXIpIHsKLQkgICAgbmV4dCA9IGl0ZXItPm5leHQ7Ci0KLQkgICAgLyoKLQkgICAgICogcHV0IGJhY2sgdGhlIGVudHJ5IGluIHRoZSBuZXcgZGljdAotCSAgICAgKi8KLQotCSAgICBpZiAoa2VlcF9rZXlzKQotCQlva2V5ID0gaXRlci0+b2tleTsKLQkgICAgZWxzZQotCQlva2V5ID0geG1sRGljdENvbXB1dGVLZXkoZGljdCwgaXRlci0+bmFtZSwgaXRlci0+bGVuKTsKLQkgICAga2V5ID0gb2tleSAlIGRpY3QtPnNpemU7Ci0JICAgIGlmIChkaWN0LT5kaWN0W2tleV0udmFsaWQgPT0gMCkgewotCQltZW1jcHkoJihkaWN0LT5kaWN0W2tleV0pLCBpdGVyLCBzaXplb2YoeG1sRGljdEVudHJ5KSk7Ci0JCWRpY3QtPmRpY3Rba2V5XS5uZXh0ID0gTlVMTDsKLQkJZGljdC0+ZGljdFtrZXldLnZhbGlkID0gMTsKLQkJZGljdC0+ZGljdFtrZXldLm9rZXkgPSBva2V5OwotCQl4bWxGcmVlKGl0ZXIpOwotCSAgICB9IGVsc2UgewotCQlpdGVyLT5uZXh0ID0gZGljdC0+ZGljdFtrZXldLm5leHQ7Ci0JCWl0ZXItPm9rZXkgPSBva2V5OwotCQlkaWN0LT5kaWN0W2tleV0ubmV4dCA9IGl0ZXI7Ci0JICAgIH0KLQotI2lmZGVmIERFQlVHX0dST1cKLQkgICAgbmJFbGVtKys7Ci0jZW5kaWYKLQotCSAgICBpdGVyID0gbmV4dDsKLQl9Ci0gICAgfQotCi0gICAgeG1sRnJlZShvbGRkaWN0KTsKLQotI2lmZGVmIERFQlVHX0dST1cKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgInhtbERpY3RHcm93IDogZnJvbSAlbHUgdG8gJWx1LCAldSBlbGVtc1xuIiwgb2xkc2l6ZSwgc2l6ZSwgbmJFbGVtKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuKHJldCk7Ci19Ci0KLS8qKgogICogeG1sRGljdEZyZWU6CiAgKiBAZGljdDogdGhlIGRpY3Rpb25hcnkKICAqCkBAIC04MDAsNDkgKzMzMSwyNyBAQAogICovCiB2b2lkCiB4bWxEaWN0RnJlZSh4bWxEaWN0UHRyIGRpY3QpIHsKLSAgICBzaXplX3QgaTsKLSAgICB4bWxEaWN0RW50cnlQdHIgaXRlcjsKLSAgICB4bWxEaWN0RW50cnlQdHIgbmV4dDsKLSAgICBpbnQgaW5zaWRlX2RpY3QgPSAwOwogICAgIHhtbERpY3RTdHJpbmdzUHRyIHBvb2wsIG5leHRwOwogCiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKIAlyZXR1cm47CiAKLSAgICBpZiAoIXhtbERpY3RJbml0aWFsaXplZCkKLSAgICAgICAgaWYgKCFfX3htbEluaXRpYWxpemVEaWN0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KICAgICAvKiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIsIGl0IG1heSBiZSBzaGFyZWQgYnkgYSBwYXJzZXIgYW5kIGRvY3MgKi8KLSAgICB4bWxNdXRleExvY2soeG1sRGljdE11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbERpY3RNdXRleCk7CiAgICAgZGljdC0+cmVmX2NvdW50ZXItLTsKICAgICBpZiAoZGljdC0+cmVmX2NvdW50ZXIgPiAwKSB7Ci0gICAgICAgIHhtbE11dGV4VW5sb2NrKHhtbERpY3RNdXRleCk7CisgICAgICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxEaWN0TXV0ZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgeG1sTXV0ZXhVbmxvY2soeG1sRGljdE11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sRGljdE11dGV4KTsKIAogICAgIGlmIChkaWN0LT5zdWJkaWN0ICE9IE5VTEwpIHsKICAgICAgICAgeG1sRGljdEZyZWUoZGljdC0+c3ViZGljdCk7CiAgICAgfQogCi0gICAgaWYgKGRpY3QtPmRpY3QpIHsKLQlmb3IoaSA9IDA7ICgoaSA8IGRpY3QtPnNpemUpICYmIChkaWN0LT5uYkVsZW1zID4gMCkpOyBpKyspIHsKLQkgICAgaXRlciA9ICYoZGljdC0+ZGljdFtpXSk7Ci0JICAgIGlmIChpdGVyLT52YWxpZCA9PSAwKQotCQljb250aW51ZTsKLQkgICAgaW5zaWRlX2RpY3QgPSAxOwotCSAgICB3aGlsZSAoaXRlcikgewotCQluZXh0ID0gaXRlci0+bmV4dDsKLQkJaWYgKCFpbnNpZGVfZGljdCkKLQkJICAgIHhtbEZyZWUoaXRlcik7Ci0JCWRpY3QtPm5iRWxlbXMtLTsKLQkJaW5zaWRlX2RpY3QgPSAwOwotCQlpdGVyID0gbmV4dDsKLQkgICAgfQotCX0KLQl4bWxGcmVlKGRpY3QtPmRpY3QpOworICAgIGlmIChkaWN0LT50YWJsZSkgeworCXhtbEZyZWUoZGljdC0+dGFibGUpOwogICAgIH0KICAgICBwb29sID0gZGljdC0+c3RyaW5nczsKICAgICB3aGlsZSAocG9vbCAhPSBOVUxMKSB7CkBAIC04NTQsMzU5ICszNjMsNiBAQAogfQogCiAvKioKLSAqIHhtbERpY3RMb29rdXA6Ci0gKiBAZGljdDogdGhlIGRpY3Rpb25hcnkKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIG5hbWUsIGlmIC0xIGl0IGlzIHJlY29tcHV0ZWQKLSAqCi0gKiBBZGQgdGhlIEBuYW1lIHRvIHRoZSBkaWN0aW9uYXJ5IEBkaWN0IGlmIG5vdCBwcmVzZW50LgotICoKLSAqIFJldHVybnMgdGhlIGludGVybmFsIGNvcHkgb2YgdGhlIG5hbWUgb3IgTlVMTCBpbiBjYXNlIG9mIGludGVybmFsIGVycm9yCi0gKi8KLWNvbnN0IHhtbENoYXIgKgoteG1sRGljdExvb2t1cCh4bWxEaWN0UHRyIGRpY3QsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBsZW4pIHsKLSAgICB1bnNpZ25lZCBsb25nIGtleSwgb2tleSwgbmJpID0gMDsKLSAgICB4bWxEaWN0RW50cnlQdHIgZW50cnk7Ci0gICAgeG1sRGljdEVudHJ5UHRyIGluc2VydDsKLSAgICBjb25zdCB4bWxDaGFyICpyZXQ7Ci0gICAgdW5zaWduZWQgaW50IGw7Ci0KLSAgICBpZiAoKGRpY3QgPT0gTlVMTCkgfHwgKG5hbWUgPT0gTlVMTCkpCi0JcmV0dXJuKE5VTEwpOwotCi0gICAgaWYgKGxlbiA8IDApCi0gICAgICAgIGwgPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbmFtZSk7Ci0gICAgZWxzZQotICAgICAgICBsID0gbGVuOwotCi0gICAgaWYgKCgoZGljdC0+bGltaXQgPiAwKSAmJiAobCA+PSBkaWN0LT5saW1pdCkpIHx8Ci0gICAgICAgIChsID4gSU5UX01BWCAvIDIpKQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0KLSAgICAvKgotICAgICAqIENoZWNrIGZvciBkdXBsaWNhdGUgYW5kIGluc2VydGlvbiBsb2NhdGlvbi4KLSAgICAgKi8KLSAgICBva2V5ID0geG1sRGljdENvbXB1dGVLZXkoZGljdCwgbmFtZSwgbCk7Ci0gICAga2V5ID0gb2tleSAlIGRpY3QtPnNpemU7Ci0gICAgaWYgKGRpY3QtPmRpY3Rba2V5XS52YWxpZCA9PSAwKSB7Ci0JaW5zZXJ0ID0gTlVMTDsKLSAgICB9IGVsc2UgewotCWZvciAoaW5zZXJ0ID0gJihkaWN0LT5kaWN0W2tleV0pOyBpbnNlcnQtPm5leHQgIT0gTlVMTDsKLQkgICAgIGluc2VydCA9IGluc2VydC0+bmV4dCkgewotI2lmZGVmIF9fR05VQ19fCi0JICAgIGlmICgoaW5zZXJ0LT5va2V5ID09IG9rZXkpICYmIChpbnNlcnQtPmxlbiA9PSBsKSkgewotCQlpZiAoIW1lbWNtcChpbnNlcnQtPm5hbWUsIG5hbWUsIGwpKQotCQkgICAgcmV0dXJuKGluc2VydC0+bmFtZSk7Ci0JICAgIH0KLSNlbHNlCi0JICAgIGlmICgoaW5zZXJ0LT5va2V5ID09IG9rZXkpICYmIChpbnNlcnQtPmxlbiA9PSBsKSAmJgotCSAgICAgICAgKCF4bWxTdHJuY21wKGluc2VydC0+bmFtZSwgbmFtZSwgbCkpKQotCQlyZXR1cm4oaW5zZXJ0LT5uYW1lKTsKLSNlbmRpZgotCSAgICBuYmkrKzsKLQl9Ci0jaWZkZWYgX19HTlVDX18KLQlpZiAoKGluc2VydC0+b2tleSA9PSBva2V5KSAmJiAoaW5zZXJ0LT5sZW4gPT0gbCkpIHsKLQkgICAgaWYgKCFtZW1jbXAoaW5zZXJ0LT5uYW1lLCBuYW1lLCBsKSkKLQkJcmV0dXJuKGluc2VydC0+bmFtZSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGluc2VydC0+b2tleSA9PSBva2V5KSAmJiAoaW5zZXJ0LT5sZW4gPT0gbCkgJiYKLQkgICAgKCF4bWxTdHJuY21wKGluc2VydC0+bmFtZSwgbmFtZSwgbCkpKQotCSAgICByZXR1cm4oaW5zZXJ0LT5uYW1lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIGlmIChkaWN0LT5zdWJkaWN0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgc2tleTsKLQotICAgICAgICAvKiB3ZSBjYW5ub3QgYWx3YXlzIHJldXNlIHRoZSBzYW1lIG9rZXkgZm9yIHRoZSBzdWJkaWN0ICovCi0gICAgICAgIGlmICgoKGRpY3QtPnNpemUgPT0gTUlOX0RJQ1RfU0laRSkgJiYKLQkgICAgIChkaWN0LT5zdWJkaWN0LT5zaXplICE9IE1JTl9ESUNUX1NJWkUpKSB8fAotICAgICAgICAgICAgKChkaWN0LT5zaXplICE9IE1JTl9ESUNUX1NJWkUpICYmCi0JICAgICAoZGljdC0+c3ViZGljdC0+c2l6ZSA9PSBNSU5fRElDVF9TSVpFKSkpCi0JICAgIHNrZXkgPSB4bWxEaWN0Q29tcHV0ZUtleShkaWN0LT5zdWJkaWN0LCBuYW1lLCBsKTsKLQllbHNlCi0JICAgIHNrZXkgPSBva2V5OwotCi0Ja2V5ID0gc2tleSAlIGRpY3QtPnN1YmRpY3QtPnNpemU7Ci0JaWYgKGRpY3QtPnN1YmRpY3QtPmRpY3Rba2V5XS52YWxpZCAhPSAwKSB7Ci0JICAgIHhtbERpY3RFbnRyeVB0ciB0bXA7Ci0KLQkgICAgZm9yICh0bXAgPSAmKGRpY3QtPnN1YmRpY3QtPmRpY3Rba2V5XSk7IHRtcC0+bmV4dCAhPSBOVUxMOwotCQkgdG1wID0gdG1wLT5uZXh0KSB7Ci0jaWZkZWYgX19HTlVDX18KLQkJaWYgKCh0bXAtPm9rZXkgPT0gc2tleSkgJiYgKHRtcC0+bGVuID09IGwpKSB7Ci0JCSAgICBpZiAoIW1lbWNtcCh0bXAtPm5hbWUsIG5hbWUsIGwpKQotCQkJcmV0dXJuKHRtcC0+bmFtZSk7Ci0JCX0KLSNlbHNlCi0JCWlmICgodG1wLT5va2V5ID09IHNrZXkpICYmICh0bXAtPmxlbiA9PSBsKSAmJgotCQkgICAgKCF4bWxTdHJuY21wKHRtcC0+bmFtZSwgbmFtZSwgbCkpKQotCQkgICAgcmV0dXJuKHRtcC0+bmFtZSk7Ci0jZW5kaWYKLQkJbmJpKys7Ci0JICAgIH0KLSNpZmRlZiBfX0dOVUNfXwotCSAgICBpZiAoKHRtcC0+b2tleSA9PSBza2V5KSAmJiAodG1wLT5sZW4gPT0gbCkpIHsKLQkJaWYgKCFtZW1jbXAodG1wLT5uYW1lLCBuYW1lLCBsKSkKLQkJICAgIHJldHVybih0bXAtPm5hbWUpOwotCSAgICB9Ci0jZWxzZQotCSAgICBpZiAoKHRtcC0+b2tleSA9PSBza2V5KSAmJiAodG1wLT5sZW4gPT0gbCkgJiYKLQkJKCF4bWxTdHJuY21wKHRtcC0+bmFtZSwgbmFtZSwgbCkpKQotCQlyZXR1cm4odG1wLT5uYW1lKTsKLSNlbmRpZgotCX0KLQlrZXkgPSBva2V5ICUgZGljdC0+c2l6ZTsKLSAgICB9Ci0KLSAgICByZXQgPSB4bWxEaWN0QWRkU3RyaW5nKGRpY3QsIG5hbWUsIGwpOwotICAgIGlmIChyZXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlmIChpbnNlcnQgPT0gTlVMTCkgewotCWVudHJ5ID0gJihkaWN0LT5kaWN0W2tleV0pOwotICAgIH0gZWxzZSB7Ci0JZW50cnkgPSB4bWxNYWxsb2Moc2l6ZW9mKHhtbERpY3RFbnRyeSkpOwotCWlmIChlbnRyeSA9PSBOVUxMKQotCSAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBlbnRyeS0+bmFtZSA9IHJldDsKLSAgICBlbnRyeS0+bGVuID0gbDsKLSAgICBlbnRyeS0+bmV4dCA9IE5VTEw7Ci0gICAgZW50cnktPnZhbGlkID0gMTsKLSAgICBlbnRyeS0+b2tleSA9IG9rZXk7Ci0KLQotICAgIGlmIChpbnNlcnQgIT0gTlVMTCkKLQlpbnNlcnQtPm5leHQgPSBlbnRyeTsKLQotICAgIGRpY3QtPm5iRWxlbXMrKzsKLQotICAgIGlmICgobmJpID4gTUFYX0hBU0hfTEVOKSAmJgotICAgICAgICAoZGljdC0+c2l6ZSA8PSAoKE1BWF9ESUNUX0hBU0ggLyAyKSAvIE1BWF9IQVNIX0xFTikpKSB7Ci0JaWYgKHhtbERpY3RHcm93KGRpY3QsIE1BWF9IQVNIX0xFTiAqIDIgKiBkaWN0LT5zaXplKSAhPSAwKQotCSAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIC8qIE5vdGUgdGhhdCBlbnRyeSBtYXkgaGF2ZSBiZWVuIGZyZWVkIGF0IHRoaXMgcG9pbnQgYnkgeG1sRGljdEdyb3cgKi8KLQotICAgIHJldHVybihyZXQpOwotfQotCi0vKioKLSAqIHhtbERpY3RFeGlzdHM6Ci0gKiBAZGljdDogdGhlIGRpY3Rpb25hcnkKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIG5hbWUsIGlmIC0xIGl0IGlzIHJlY29tcHV0ZWQKLSAqCi0gKiBDaGVjayBpZiB0aGUgQG5hbWUgZXhpc3RzIGluIHRoZSBkaWN0aW9uYXJ5IEBkaWN0LgotICoKLSAqIFJldHVybnMgdGhlIGludGVybmFsIGNvcHkgb2YgdGhlIG5hbWUgb3IgTlVMTCBpZiBub3QgZm91bmQuCi0gKi8KLWNvbnN0IHhtbENoYXIgKgoteG1sRGljdEV4aXN0cyh4bWxEaWN0UHRyIGRpY3QsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBsZW4pIHsKLSAgICB1bnNpZ25lZCBsb25nIGtleSwgb2tleSwgbmJpID0gMDsKLSAgICB4bWxEaWN0RW50cnlQdHIgaW5zZXJ0OwotICAgIHVuc2lnbmVkIGludCBsOwotCi0gICAgaWYgKChkaWN0ID09IE5VTEwpIHx8IChuYW1lID09IE5VTEwpKQotCXJldHVybihOVUxMKTsKLQotICAgIGlmIChsZW4gPCAwKQotICAgICAgICBsID0gc3RybGVuKChjb25zdCBjaGFyICopIG5hbWUpOwotICAgIGVsc2UKLSAgICAgICAgbCA9IGxlbjsKLSAgICBpZiAoKChkaWN0LT5saW1pdCA+IDApICYmIChsID49IGRpY3QtPmxpbWl0KSkgfHwKLSAgICAgICAgKGwgPiBJTlRfTUFYIC8gMikpCi0gICAgICAgIHJldHVybihOVUxMKTsKLQotICAgIC8qCi0gICAgICogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBhbmQgaW5zZXJ0aW9uIGxvY2F0aW9uLgotICAgICAqLwotICAgIG9rZXkgPSB4bWxEaWN0Q29tcHV0ZUtleShkaWN0LCBuYW1lLCBsKTsKLSAgICBrZXkgPSBva2V5ICUgZGljdC0+c2l6ZTsKLSAgICBpZiAoZGljdC0+ZGljdFtrZXldLnZhbGlkID09IDApIHsKLQlpbnNlcnQgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0JZm9yIChpbnNlcnQgPSAmKGRpY3QtPmRpY3Rba2V5XSk7IGluc2VydC0+bmV4dCAhPSBOVUxMOwotCSAgICAgaW5zZXJ0ID0gaW5zZXJ0LT5uZXh0KSB7Ci0jaWZkZWYgX19HTlVDX18KLQkgICAgaWYgKChpbnNlcnQtPm9rZXkgPT0gb2tleSkgJiYgKGluc2VydC0+bGVuID09IGwpKSB7Ci0JCWlmICghbWVtY21wKGluc2VydC0+bmFtZSwgbmFtZSwgbCkpCi0JCSAgICByZXR1cm4oaW5zZXJ0LT5uYW1lKTsKLQkgICAgfQotI2Vsc2UKLQkgICAgaWYgKChpbnNlcnQtPm9rZXkgPT0gb2tleSkgJiYgKGluc2VydC0+bGVuID09IGwpICYmCi0JICAgICAgICAoIXhtbFN0cm5jbXAoaW5zZXJ0LT5uYW1lLCBuYW1lLCBsKSkpCi0JCXJldHVybihpbnNlcnQtPm5hbWUpOwotI2VuZGlmCi0JICAgIG5iaSsrOwotCX0KLSNpZmRlZiBfX0dOVUNfXwotCWlmICgoaW5zZXJ0LT5va2V5ID09IG9rZXkpICYmIChpbnNlcnQtPmxlbiA9PSBsKSkgewotCSAgICBpZiAoIW1lbWNtcChpbnNlcnQtPm5hbWUsIG5hbWUsIGwpKQotCQlyZXR1cm4oaW5zZXJ0LT5uYW1lKTsKLQl9Ci0jZWxzZQotCWlmICgoaW5zZXJ0LT5va2V5ID09IG9rZXkpICYmIChpbnNlcnQtPmxlbiA9PSBsKSAmJgotCSAgICAoIXhtbFN0cm5jbXAoaW5zZXJ0LT5uYW1lLCBuYW1lLCBsKSkpCi0JICAgIHJldHVybihpbnNlcnQtPm5hbWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgaWYgKGRpY3QtPnN1YmRpY3QpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBza2V5OwotCi0gICAgICAgIC8qIHdlIGNhbm5vdCBhbHdheXMgcmV1c2UgdGhlIHNhbWUgb2tleSBmb3IgdGhlIHN1YmRpY3QgKi8KLSAgICAgICAgaWYgKCgoZGljdC0+c2l6ZSA9PSBNSU5fRElDVF9TSVpFKSAmJgotCSAgICAgKGRpY3QtPnN1YmRpY3QtPnNpemUgIT0gTUlOX0RJQ1RfU0laRSkpIHx8Ci0gICAgICAgICAgICAoKGRpY3QtPnNpemUgIT0gTUlOX0RJQ1RfU0laRSkgJiYKLQkgICAgIChkaWN0LT5zdWJkaWN0LT5zaXplID09IE1JTl9ESUNUX1NJWkUpKSkKLQkgICAgc2tleSA9IHhtbERpY3RDb21wdXRlS2V5KGRpY3QtPnN1YmRpY3QsIG5hbWUsIGwpOwotCWVsc2UKLQkgICAgc2tleSA9IG9rZXk7Ci0KLQlrZXkgPSBza2V5ICUgZGljdC0+c3ViZGljdC0+c2l6ZTsKLQlpZiAoZGljdC0+c3ViZGljdC0+ZGljdFtrZXldLnZhbGlkICE9IDApIHsKLQkgICAgeG1sRGljdEVudHJ5UHRyIHRtcDsKLQotCSAgICBmb3IgKHRtcCA9ICYoZGljdC0+c3ViZGljdC0+ZGljdFtrZXldKTsgdG1wLT5uZXh0ICE9IE5VTEw7Ci0JCSB0bXAgPSB0bXAtPm5leHQpIHsKLSNpZmRlZiBfX0dOVUNfXwotCQlpZiAoKHRtcC0+b2tleSA9PSBza2V5KSAmJiAodG1wLT5sZW4gPT0gbCkpIHsKLQkJICAgIGlmICghbWVtY21wKHRtcC0+bmFtZSwgbmFtZSwgbCkpCi0JCQlyZXR1cm4odG1wLT5uYW1lKTsKLQkJfQotI2Vsc2UKLQkJaWYgKCh0bXAtPm9rZXkgPT0gc2tleSkgJiYgKHRtcC0+bGVuID09IGwpICYmCi0JCSAgICAoIXhtbFN0cm5jbXAodG1wLT5uYW1lLCBuYW1lLCBsKSkpCi0JCSAgICByZXR1cm4odG1wLT5uYW1lKTsKLSNlbmRpZgotCQluYmkrKzsKLQkgICAgfQotI2lmZGVmIF9fR05VQ19fCi0JICAgIGlmICgodG1wLT5va2V5ID09IHNrZXkpICYmICh0bXAtPmxlbiA9PSBsKSkgewotCQlpZiAoIW1lbWNtcCh0bXAtPm5hbWUsIG5hbWUsIGwpKQotCQkgICAgcmV0dXJuKHRtcC0+bmFtZSk7Ci0JICAgIH0KLSNlbHNlCi0JICAgIGlmICgodG1wLT5va2V5ID09IHNrZXkpICYmICh0bXAtPmxlbiA9PSBsKSAmJgotCQkoIXhtbFN0cm5jbXAodG1wLT5uYW1lLCBuYW1lLCBsKSkpCi0JCXJldHVybih0bXAtPm5hbWUpOwotI2VuZGlmCi0JfQotICAgIH0KLQotICAgIC8qIG5vdCBmb3VuZCAqLwotICAgIHJldHVybihOVUxMKTsKLX0KLQotLyoqCi0gKiB4bWxEaWN0UUxvb2t1cDoKLSAqIEBkaWN0OiB0aGUgZGljdGlvbmFyeQotICogQHByZWZpeDogdGhlIHByZWZpeAotICogQG5hbWU6IHRoZSBuYW1lCi0gKgotICogQWRkIHRoZSBRTmFtZSBAcHJlZml4OkBuYW1lIHRvIHRoZSBoYXNoIEBkaWN0IGlmIG5vdCBwcmVzZW50LgotICoKLSAqIFJldHVybnMgdGhlIGludGVybmFsIGNvcHkgb2YgdGhlIFFOYW1lIG9yIE5VTEwgaW4gY2FzZSBvZiBpbnRlcm5hbCBlcnJvcgotICovCi1jb25zdCB4bWxDaGFyICoKLXhtbERpY3RRTG9va3VwKHhtbERpY3RQdHIgZGljdCwgY29uc3QgeG1sQ2hhciAqcHJlZml4LCBjb25zdCB4bWxDaGFyICpuYW1lKSB7Ci0gICAgdW5zaWduZWQgbG9uZyBva2V5LCBrZXksIG5iaSA9IDA7Ci0gICAgeG1sRGljdEVudHJ5UHRyIGVudHJ5OwotICAgIHhtbERpY3RFbnRyeVB0ciBpbnNlcnQ7Ci0gICAgY29uc3QgeG1sQ2hhciAqcmV0OwotICAgIHVuc2lnbmVkIGludCBsZW4sIHBsZW4sIGw7Ci0KLSAgICBpZiAoKGRpY3QgPT0gTlVMTCkgfHwgKG5hbWUgPT0gTlVMTCkpCi0JcmV0dXJuKE5VTEwpOwotICAgIGlmIChwcmVmaXggPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKHhtbERpY3RMb29rdXAoZGljdCwgbmFtZSwgLTEpKTsKLQotICAgIGwgPSBsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbmFtZSk7Ci0gICAgcGxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSBwcmVmaXgpOwotICAgIGxlbiArPSAxICsgcGxlbjsKLQotICAgIC8qCi0gICAgICogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBhbmQgaW5zZXJ0aW9uIGxvY2F0aW9uLgotICAgICAqLwotICAgIG9rZXkgPSB4bWxEaWN0Q29tcHV0ZVFLZXkoZGljdCwgcHJlZml4LCBwbGVuLCBuYW1lLCBsKTsKLSAgICBrZXkgPSBva2V5ICUgZGljdC0+c2l6ZTsKLSAgICBpZiAoZGljdC0+ZGljdFtrZXldLnZhbGlkID09IDApIHsKLQlpbnNlcnQgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0JZm9yIChpbnNlcnQgPSAmKGRpY3QtPmRpY3Rba2V5XSk7IGluc2VydC0+bmV4dCAhPSBOVUxMOwotCSAgICAgaW5zZXJ0ID0gaW5zZXJ0LT5uZXh0KSB7Ci0JICAgIGlmICgoaW5zZXJ0LT5va2V5ID09IG9rZXkpICYmIChpbnNlcnQtPmxlbiA9PSBsZW4pICYmCi0JICAgICAgICAoeG1sU3RyUUVxdWFsKHByZWZpeCwgbmFtZSwgaW5zZXJ0LT5uYW1lKSkpCi0JCXJldHVybihpbnNlcnQtPm5hbWUpOwotCSAgICBuYmkrKzsKLQl9Ci0JaWYgKChpbnNlcnQtPm9rZXkgPT0gb2tleSkgJiYgKGluc2VydC0+bGVuID09IGxlbikgJiYKLQkgICAgKHhtbFN0clFFcXVhbChwcmVmaXgsIG5hbWUsIGluc2VydC0+bmFtZSkpKQotCSAgICByZXR1cm4oaW5zZXJ0LT5uYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoZGljdC0+c3ViZGljdCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIHNrZXk7Ci0KLSAgICAgICAgLyogd2UgY2Fubm90IGFsd2F5cyByZXVzZSB0aGUgc2FtZSBva2V5IGZvciB0aGUgc3ViZGljdCAqLwotICAgICAgICBpZiAoKChkaWN0LT5zaXplID09IE1JTl9ESUNUX1NJWkUpICYmCi0JICAgICAoZGljdC0+c3ViZGljdC0+c2l6ZSAhPSBNSU5fRElDVF9TSVpFKSkgfHwKLSAgICAgICAgICAgICgoZGljdC0+c2l6ZSAhPSBNSU5fRElDVF9TSVpFKSAmJgotCSAgICAgKGRpY3QtPnN1YmRpY3QtPnNpemUgPT0gTUlOX0RJQ1RfU0laRSkpKQotCSAgICBza2V5ID0geG1sRGljdENvbXB1dGVRS2V5KGRpY3QtPnN1YmRpY3QsIHByZWZpeCwgcGxlbiwgbmFtZSwgbCk7Ci0JZWxzZQotCSAgICBza2V5ID0gb2tleTsKLQotCWtleSA9IHNrZXkgJSBkaWN0LT5zdWJkaWN0LT5zaXplOwotCWlmIChkaWN0LT5zdWJkaWN0LT5kaWN0W2tleV0udmFsaWQgIT0gMCkgewotCSAgICB4bWxEaWN0RW50cnlQdHIgdG1wOwotCSAgICBmb3IgKHRtcCA9ICYoZGljdC0+c3ViZGljdC0+ZGljdFtrZXldKTsgdG1wLT5uZXh0ICE9IE5VTEw7Ci0JCSB0bXAgPSB0bXAtPm5leHQpIHsKLQkJaWYgKCh0bXAtPm9rZXkgPT0gc2tleSkgJiYgKHRtcC0+bGVuID09IGxlbikgJiYKLQkJICAgICh4bWxTdHJRRXF1YWwocHJlZml4LCBuYW1lLCB0bXAtPm5hbWUpKSkKLQkJICAgIHJldHVybih0bXAtPm5hbWUpOwotCQluYmkrKzsKLQkgICAgfQotCSAgICBpZiAoKHRtcC0+b2tleSA9PSBza2V5KSAmJiAodG1wLT5sZW4gPT0gbGVuKSAmJgotCQkoeG1sU3RyUUVxdWFsKHByZWZpeCwgbmFtZSwgdG1wLT5uYW1lKSkpCi0JCXJldHVybih0bXAtPm5hbWUpOwotCX0KLQlrZXkgPSBva2V5ICUgZGljdC0+c2l6ZTsKLSAgICB9Ci0KLSAgICByZXQgPSB4bWxEaWN0QWRkUVN0cmluZyhkaWN0LCBwcmVmaXgsIHBsZW4sIG5hbWUsIGwpOwotICAgIGlmIChyZXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlmIChpbnNlcnQgPT0gTlVMTCkgewotCWVudHJ5ID0gJihkaWN0LT5kaWN0W2tleV0pOwotICAgIH0gZWxzZSB7Ci0JZW50cnkgPSB4bWxNYWxsb2Moc2l6ZW9mKHhtbERpY3RFbnRyeSkpOwotCWlmIChlbnRyeSA9PSBOVUxMKQotCSAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBlbnRyeS0+bmFtZSA9IHJldDsKLSAgICBlbnRyeS0+bGVuID0gbGVuOwotICAgIGVudHJ5LT5uZXh0ID0gTlVMTDsKLSAgICBlbnRyeS0+dmFsaWQgPSAxOwotICAgIGVudHJ5LT5va2V5ID0gb2tleTsKLQotICAgIGlmIChpbnNlcnQgIT0gTlVMTCkKLQlpbnNlcnQtPm5leHQgPSBlbnRyeTsKLQotICAgIGRpY3QtPm5iRWxlbXMrKzsKLQotICAgIGlmICgobmJpID4gTUFYX0hBU0hfTEVOKSAmJgotICAgICAgICAoZGljdC0+c2l6ZSA8PSAoKE1BWF9ESUNUX0hBU0ggLyAyKSAvIE1BWF9IQVNIX0xFTikpKQotCXhtbERpY3RHcm93KGRpY3QsIE1BWF9IQVNIX0xFTiAqIDIgKiBkaWN0LT5zaXplKTsKLSAgICAvKiBOb3RlIHRoYXQgZW50cnkgbWF5IGhhdmUgYmVlbiBmcmVlZCBhdCB0aGlzIHBvaW50IGJ5IHhtbERpY3RHcm93ICovCi0KLSAgICByZXR1cm4ocmV0KTsKLX0KLQotLyoqCiAgKiB4bWxEaWN0T3duczoKICAqIEBkaWN0OiB0aGUgZGljdGlvbmFyeQogICogQHN0cjogdGhlIHN0cmluZwpAQCAtMTI5NiwzICs0NTIsNTIxIEBACiAgICAgcmV0dXJuKGxpbWl0KTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIGNvZGUgYmVsb3cgd2FzIHJld3JpdHRlbiBhbmQgaXMgYWRkaXRpb25hbGx5IGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgbWFpbiBsaWNlbnNlIGluIGZpbGUgJ0NvcHlyaWdodCcuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUgorc3RhdGljIHVuc2lnbmVkCit4bWxEaWN0SGFzaE5hbWUodW5zaWduZWQgc2VlZCwgY29uc3QgeG1sQ2hhciogZGF0YSwgc2l6ZV90IG1heExlbiwKKyAgICAgICAgICAgICAgICBzaXplX3QgKnBsZW4pIHsKKyAgICB1bnNpZ25lZCBoMSwgaDI7CisgICAgc2l6ZV90IGk7CisKKyAgICBIQVNIX0lOSVQoaDEsIGgyLCBzZWVkKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBtYXhMZW4gJiYgZGF0YVtpXTsgaSsrKSB7CisgICAgICAgIEhBU0hfVVBEQVRFKGgxLCBoMiwgZGF0YVtpXSk7CisgICAgfQorCisgICAgSEFTSF9GSU5JU0goaDEsIGgyKTsKKworICAgICpwbGVuID0gaTsKKyAgICByZXR1cm4oaDIgfCBNQVhfSEFTSF9TSVpFKTsKK30KKworQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKK3N0YXRpYyB1bnNpZ25lZAoreG1sRGljdEhhc2hRTmFtZSh1bnNpZ25lZCBzZWVkLCBjb25zdCB4bWxDaGFyICpwcmVmaXgsIGNvbnN0IHhtbENoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgIHNpemVfdCAqcHBsZW4sIHNpemVfdCAqcGxlbikgeworICAgIHVuc2lnbmVkIGgxLCBoMjsKKyAgICBzaXplX3QgaTsKKworICAgIEhBU0hfSU5JVChoMSwgaDIsIHNlZWQpOworCisgICAgZm9yIChpID0gMDsgcHJlZml4W2ldICE9IDA7IGkrKykgeworICAgICAgICBIQVNIX1VQREFURShoMSwgaDIsIHByZWZpeFtpXSk7CisgICAgfQorICAgICpwcGxlbiA9IGk7CisKKyAgICBIQVNIX1VQREFURShoMSwgaDIsICc6Jyk7CisKKyAgICBmb3IgKGkgPSAwOyBuYW1lW2ldICE9IDA7IGkrKykgeworICAgICAgICBIQVNIX1VQREFURShoMSwgaDIsIG5hbWVbaV0pOworICAgIH0KKyAgICAqcGxlbiA9IGk7CisKKyAgICBIQVNIX0ZJTklTSChoMSwgaDIpOworCisgICAgLyoKKyAgICAgKiBBbHdheXMgc2V0IHRoZSB1cHBlciBiaXQgb2YgaGFzaCB2YWx1ZXMgc2luY2UgMCBtZWFucyBhbiB1bm9jY3VwaWVkCisgICAgICogYnVja2V0LgorICAgICAqLworICAgIHJldHVybihoMiB8IE1BWF9IQVNIX1NJWkUpOworfQorCit1bnNpZ25lZAoreG1sRGljdENvbXB1dGVIYXNoKGNvbnN0IHhtbERpY3QgKmRpY3QsIGNvbnN0IHhtbENoYXIgKnN0cmluZykgeworICAgIHNpemVfdCBsZW47CisgICAgcmV0dXJuKHhtbERpY3RIYXNoTmFtZShkaWN0LT5zZWVkLCBzdHJpbmcsIFNJWkVfTUFYLCAmbGVuKSk7Cit9CisKKyNkZWZpbmUgSEFTSF9ST0wzMSh4LG4pICgoeCkgPDwgKG4pIHwgKCh4KSAmIDB4N0ZGRkZGRkYpID4+ICgzMSAtIChuKSkpCisKK0FUVFJJQlVURV9OT19TQU5JVElaRV9JTlRFR0VSCit1bnNpZ25lZAoreG1sRGljdENvbWJpbmVIYXNoKHVuc2lnbmVkIHYxLCB1bnNpZ25lZCB2MikgeworICAgIC8qCisgICAgICogVGhlIHVwcGVyIGJpdCBvZiBoYXNoIHZhbHVlcyBpcyBhbHdheXMgc2V0LCBzbyB3ZSBoYXZlIHRvIG9wZXJhdGUgb24KKyAgICAgKiAzMS1iaXQgaGFzaGVzIGhlcmUuCisgICAgICovCisgICAgdjEgXj0gdjI7CisgICAgdjEgKz0gSEFTSF9ST0wzMSh2MiwgNSk7CisKKyAgICByZXR1cm4oKHYxICYgMHhGRkZGRkZGRikgfCAweDgwMDAwMDAwKTsKK30KKworLyoqCisgKiB4bWxEaWN0RmluZEVudHJ5OgorICogQGRpY3Q6IGRpY3QKKyAqIEBwcmVmaXg6IG9wdGlvbmFsIFFOYW1lIHByZWZpeAorICogQG5hbWU6IHN0cmluZworICogQGxlbjogbGVuZ3RoIG9mIHN0cmluZworICogQGhhc2hWYWx1ZTogdmFsaWQgaGFzaCB2YWx1ZSBvZiBzdHJpbmcKKyAqIEBwZm91bmQ6IHJlc3VsdCBvZiBzZWFyY2gKKyAqCisgKiBUcnkgdG8gZmluZCBhIG1hdGNoaW5nIGhhc2ggdGFibGUgZW50cnkuIElmIGFuIGVudHJ5IHdhcyBmb3VuZCwgc2V0CisgKiBAZm91bmQgdG8gMSBhbmQgcmV0dXJuIHRoZSBlbnRyeS4gT3RoZXJ3aXNlLCBzZXQgQGZvdW5kIHRvIDAgYW5kIHJldHVybgorICogdGhlIGxvY2F0aW9uIHdoZXJlIGEgbmV3IGVudHJ5IHNob3VsZCBiZSBpbnNlcnRlZC4KKyAqLworQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKK3N0YXRpYyB4bWxEaWN0RW50cnkgKgoreG1sRGljdEZpbmRFbnRyeShjb25zdCB4bWxEaWN0ICpkaWN0LCBjb25zdCB4bWxDaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGhhc2hWYWx1ZSwKKyAgICAgICAgICAgICAgICAgaW50ICpwZm91bmQpIHsKKyAgICB4bWxEaWN0RW50cnkgKmVudHJ5OworICAgIHVuc2lnbmVkIG1hc2ssIHBvcywgZGlzcGw7CisgICAgaW50IGZvdW5kID0gMDsKKworICAgIG1hc2sgPSBkaWN0LT5zaXplIC0gMTsKKyAgICBwb3MgPSBoYXNoVmFsdWUgJiBtYXNrOworICAgIGVudHJ5ID0gJmRpY3QtPnRhYmxlW3Bvc107CisKKyAgICBpZiAoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJvYmluIGhvb2QgaGFzaGluZzogYWJvcnQgaWYgdGhlIGRpc3BsYWNlbWVudCBvZiB0aGUgZW50cnkKKyAgICAgICAgICogaXMgc21hbGxlciB0aGFuIHRoZSBkaXNwbGFjZW1lbnQgb2YgdGhlIGtleSB3ZSBsb29rIGZvci4KKyAgICAgICAgICogVGhpcyBhbHNvIHN0b3BzIGF0IHRoZSBjb3JyZWN0IHBvc2l0aW9uIHdoZW4gaW5zZXJ0aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgZGlzcGwgPSAwOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+aGFzaFZhbHVlID09IGhhc2hWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBuYW1lIGlzIG5vdCBuZWNlc3NhcmlseSBudWxsLXRlcm1pbmF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cm5jbXAoKGNvbnN0IGNoYXIgKikgZW50cnktPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBuYW1lLCBsZW4pID09IDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoZW50cnktPm5hbWVbbGVuXSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoeG1sU3RyUUVxdWFsKHByZWZpeCwgbmFtZSwgZW50cnktPm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGlzcGwrKzsKKyAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgZW50cnkrKzsKKyAgICAgICAgICAgIGlmICgocG9zICYgbWFzaykgPT0gMCkKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGRpY3QtPnRhYmxlOworICAgICAgICB9IHdoaWxlICgoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSAmJgorICAgICAgICAgICAgICAgICAoKChwb3MgLSBlbnRyeS0+aGFzaFZhbHVlKSAmIG1hc2spID49IGRpc3BsKSk7CisgICAgfQorCisgICAgKnBmb3VuZCA9IGZvdW5kOworICAgIHJldHVybihlbnRyeSk7Cit9CisKKy8qKgorICogeG1sRGljdEdyb3c6CisgKiBAZGljdDogZGljdGlvbmFyeQorICogQHNpemU6IG5ldyBzaXplIG9mIHRoZSBkaWN0aW9uYXJ5CisgKgorICogUmVzaXplIHRoZSBkaWN0aW9uYXJ5IGhhc2ggdGFibGUuCisgKgorICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyBpbnQKK3htbERpY3RHcm93KHhtbERpY3RQdHIgZGljdCwgdW5zaWduZWQgc2l6ZSkgeworICAgIGNvbnN0IHhtbERpY3RFbnRyeSAqb2xkZW50cnksICpvbGRlbmQsICplbmQ7CisgICAgeG1sRGljdEVudHJ5ICp0YWJsZTsKKyAgICB1bnNpZ25lZCBvbGRzaXplLCBpOworCisgICAgLyogQWRkIDAgdG8gYXZvaWQgc3B1cmlvdXMgLVd0eXBlLWxpbWl0cyB3YXJuaW5nIG9uIDY0LWJpdCBHQ0MgKi8KKyAgICBpZiAoKHNpemVfdCkgc2l6ZSArIDAgPiBTSVpFX01BWCAvIHNpemVvZih0YWJsZVswXSkpCisgICAgICAgIHJldHVybigtMSk7CisgICAgdGFibGUgPSB4bWxNYWxsb2Moc2l6ZSAqIHNpemVvZih0YWJsZVswXSkpOworICAgIGlmICh0YWJsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oLTEpOworICAgIG1lbXNldCh0YWJsZSwgMCwgc2l6ZSAqIHNpemVvZih0YWJsZVswXSkpOworCisgICAgb2xkc2l6ZSA9IGRpY3QtPnNpemU7CisgICAgaWYgKG9sZHNpemUgPT0gMCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgb2xkZW5kID0gJmRpY3QtPnRhYmxlW29sZHNpemVdOworICAgIGVuZCA9ICZ0YWJsZVtzaXplXTsKKworICAgIC8qCisgICAgICogUm9iaW4gSG9vZCBzb3J0aW5nIG9yZGVyIGlzIG1haW50YWluZWQgaWYgd2UKKyAgICAgKgorICAgICAqIC0gY29tcHV0ZSBkaWN0IGluZGljZXMgd2l0aCBtb2R1bG8KKyAgICAgKiAtIHJlc2l6ZSBieSBhbiBpbnRlZ2VyIGZhY3RvcgorICAgICAqIC0gc3RhcnQgdG8gY29weSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9iZSBzZXF1ZW5jZQorICAgICAqLworICAgIG9sZGVudHJ5ID0gZGljdC0+dGFibGU7CisgICAgd2hpbGUgKG9sZGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICBpZiAoKytvbGRlbnRyeSA+PSBvbGRlbmQpCisgICAgICAgICAgICBvbGRlbnRyeSA9IGRpY3QtPnRhYmxlOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBvbGRzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKG9sZGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICAgICAgeG1sRGljdEVudHJ5ICplbnRyeSA9ICZ0YWJsZVtvbGRlbnRyeS0+aGFzaFZhbHVlICYgKHNpemUgLSAxKV07CisKKyAgICAgICAgICAgIHdoaWxlIChlbnRyeS0+aGFzaFZhbHVlICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKytlbnRyeSA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqZW50cnkgPSAqb2xkZW50cnk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKytvbGRlbnRyeSA+PSBvbGRlbmQpCisgICAgICAgICAgICBvbGRlbnRyeSA9IGRpY3QtPnRhYmxlOworICAgIH0KKworICAgIHhtbEZyZWUoZGljdC0+dGFibGUpOworCitkb25lOgorICAgIGRpY3QtPnRhYmxlID0gdGFibGU7CisgICAgZGljdC0+c2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qKgorICogeG1sRGljdExvb2t1cEludGVybmFsOgorICogQGRpY3Q6IGRpY3QKKyAqIEBwcmVmaXg6IG9wdGlvbmFsIFFOYW1lIHByZWZpeAorICogQG5hbWU6IHN0cmluZworICogQG1heWJlTGVuOiBsZW5ndGggb2Ygc3RyaW5nIG9yIC0xIGlmIHVua25vd24KKyAqIEB1cGRhdGU6IHdoZXRoZXIgdGhlIHN0cmluZyBzaG91bGQgYmUgYWRkZWQKKyAqCisgKiBJbnRlcm5hbCBsb29rdXAgYW5kIHVwZGF0ZSBmdW5jdGlvbi4KKyAqLworQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKK3N0YXRpYyBjb25zdCB4bWxEaWN0RW50cnkgKgoreG1sRGljdExvb2t1cEludGVybmFsKHhtbERpY3RQdHIgZGljdCwgY29uc3QgeG1sQ2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBtYXliZUxlbiwgaW50IHVwZGF0ZSkgeworICAgIHhtbERpY3RFbnRyeSAqZW50cnkgPSBOVUxMOworICAgIGNvbnN0IHhtbENoYXIgKnJldDsKKyAgICB1bnNpZ25lZCBoYXNoVmFsdWU7CisgICAgc2l6ZV90IG1heExlbiwgbGVuLCBwbGVuLCBrbGVuOworICAgIGludCBmb3VuZCA9IDA7CisKKyAgICBpZiAoKGRpY3QgPT0gTlVMTCkgfHwgKG5hbWUgPT0gTlVMTCkpCisJcmV0dXJuKE5VTEwpOworCisgICAgbWF4TGVuID0gKG1heWJlTGVuIDwgMCkgPyBTSVpFX01BWCA6IChzaXplX3QpIG1heWJlTGVuOworCisgICAgaWYgKHByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIGhhc2hWYWx1ZSA9IHhtbERpY3RIYXNoTmFtZShkaWN0LT5zZWVkLCBuYW1lLCBtYXhMZW4sICZsZW4pOworICAgICAgICBpZiAobGVuID4gSU5UX01BWCAvIDIpCisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIGtsZW4gPSBsZW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGFzaFZhbHVlID0geG1sRGljdEhhc2hRTmFtZShkaWN0LT5zZWVkLCBwcmVmaXgsIG5hbWUsICZwbGVuLCAmbGVuKTsKKyAgICAgICAgaWYgKChsZW4gPiBJTlRfTUFYIC8gMikgfHwgKHBsZW4gPj0gSU5UX01BWCAvIDIgLSBsZW4pKQorICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICBrbGVuID0gcGxlbiArIDEgKyBsZW47CisgICAgfQorCisgICAgaWYgKChkaWN0LT5saW1pdCA+IDApICYmIChrbGVuID49IGRpY3QtPmxpbWl0KSkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgYW4gZXhpc3RpbmcgZW50cnkKKyAgICAgKi8KKyAgICBpZiAoZGljdC0+c2l6ZSA+IDApCisgICAgICAgIGVudHJ5ID0geG1sRGljdEZpbmRFbnRyeShkaWN0LCBwcmVmaXgsIG5hbWUsIGtsZW4sIGhhc2hWYWx1ZSwgJmZvdW5kKTsKKyAgICBpZiAoZm91bmQpCisgICAgICAgIHJldHVybihlbnRyeSk7CisKKyAgICBpZiAoKGRpY3QtPnN1YmRpY3QgIT0gTlVMTCkgJiYgKGRpY3QtPnN1YmRpY3QtPnNpemUgPiAwKSkgeworICAgICAgICB4bWxEaWN0RW50cnkgKnN1YkVudHJ5OworICAgICAgICB1bnNpZ25lZCBzdWJIYXNoVmFsdWU7CisKKyAgICAgICAgaWYgKHByZWZpeCA9PSBOVUxMKQorICAgICAgICAgICAgc3ViSGFzaFZhbHVlID0geG1sRGljdEhhc2hOYW1lKGRpY3QtPnN1YmRpY3QtPnNlZWQsIG5hbWUsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3ViSGFzaFZhbHVlID0geG1sRGljdEhhc2hRTmFtZShkaWN0LT5zdWJkaWN0LT5zZWVkLCBwcmVmaXgsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbGVuLCAmbGVuKTsKKyAgICAgICAgc3ViRW50cnkgPSB4bWxEaWN0RmluZEVudHJ5KGRpY3QtPnN1YmRpY3QsIHByZWZpeCwgbmFtZSwga2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykhhc2hWYWx1ZSwgJmZvdW5kKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuKHN1YkVudHJ5KTsKKyAgICB9CisKKyAgICBpZiAoIXVwZGF0ZSkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgLyoKKyAgICAgKiBHcm93IHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZAorICAgICAqLworICAgIGlmIChkaWN0LT5uYkVsZW1zICsgMSA+IGRpY3QtPnNpemUgLyBNQVhfRklMTF9ERU5PTSAqIE1BWF9GSUxMX05VTSkgeworICAgICAgICB1bnNpZ25lZCBuZXdTaXplLCBtYXNrLCBkaXNwbCwgcG9zOworCisgICAgICAgIGlmIChkaWN0LT5zaXplID09IDApIHsKKyAgICAgICAgICAgIG5ld1NpemUgPSBNSU5fSEFTSF9TSVpFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpY3QtPnNpemUgPj0gTUFYX0hBU0hfU0laRSkKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICBuZXdTaXplID0gZGljdC0+c2l6ZSAqIDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhtbERpY3RHcm93KGRpY3QsIG5ld1NpemUpICE9IDApCisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRmluZCBuZXcgZW50cnkKKyAgICAgICAgICovCisgICAgICAgIG1hc2sgPSBkaWN0LT5zaXplIC0gMTsKKyAgICAgICAgZGlzcGwgPSAwOworICAgICAgICBwb3MgPSBoYXNoVmFsdWUgJiBtYXNrOworICAgICAgICBlbnRyeSA9ICZkaWN0LT50YWJsZVtwb3NdOworCisgICAgICAgIHdoaWxlICgoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSAmJgorICAgICAgICAgICAgICAgKChwb3MgLSBlbnRyeS0+aGFzaFZhbHVlKSAmIG1hc2spID49IGRpc3BsKSB7CisgICAgICAgICAgICBkaXNwbCsrOworICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgICBlbnRyeSsrOworICAgICAgICAgICAgaWYgKChwb3MgJiBtYXNrKSA9PSAwKQorICAgICAgICAgICAgICAgIGVudHJ5ID0gZGljdC0+dGFibGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocHJlZml4ID09IE5VTEwpCisgICAgICAgIHJldCA9IHhtbERpY3RBZGRTdHJpbmcoZGljdCwgbmFtZSwgbGVuKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IHhtbERpY3RBZGRRU3RyaW5nKGRpY3QsIHByZWZpeCwgcGxlbiwgbmFtZSwgbGVuKTsKKyAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKworICAgIC8qCisgICAgICogU2hpZnQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJvYmUgc2VxdWVuY2UgdG8gdGhlIHJpZ2h0CisgICAgICovCisgICAgaWYgKGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICBjb25zdCB4bWxEaWN0RW50cnkgKmVuZCA9ICZkaWN0LT50YWJsZVtkaWN0LT5zaXplXTsKKyAgICAgICAgY29uc3QgeG1sRGljdEVudHJ5ICpjdXIgPSBlbnRyeTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBjdXIrKzsKKyAgICAgICAgICAgIGlmIChjdXIgPj0gZW5kKQorICAgICAgICAgICAgICAgIGN1ciA9IGRpY3QtPnRhYmxlOworICAgICAgICB9IHdoaWxlIChjdXItPmhhc2hWYWx1ZSAhPSAwKTsKKworICAgICAgICBpZiAoY3VyIDwgZW50cnkpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB3ZSB0cmF2ZXJzZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBoYW5kbGUgdGhlIHBhcnQKKyAgICAgICAgICAgICAqIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW1tb3ZlKCZkaWN0LT50YWJsZVsxXSwgZGljdC0+dGFibGUsCisgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGN1ciAtIChjaGFyICopIGRpY3QtPnRhYmxlKTsKKyAgICAgICAgICAgIGN1ciA9IGVuZCAtIDE7CisgICAgICAgICAgICBkaWN0LT50YWJsZVswXSA9ICpjdXI7CisgICAgICAgIH0KKworICAgICAgICBtZW1tb3ZlKCZlbnRyeVsxXSwgZW50cnksIChjaGFyICopIGN1ciAtIChjaGFyICopIGVudHJ5KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFBvcHVsYXRlIGVudHJ5CisgICAgICovCisgICAgZW50cnktPmhhc2hWYWx1ZSA9IGhhc2hWYWx1ZTsKKyAgICBlbnRyeS0+bmFtZSA9IHJldDsKKworICAgIGRpY3QtPm5iRWxlbXMrKzsKKworICAgIHJldHVybihlbnRyeSk7Cit9CisKKy8qKgorICogeG1sRGljdExvb2t1cDoKKyAqIEBkaWN0OiBkaWN0aW9uYXJ5CisgKiBAbmFtZTogc3RyaW5nIGtleQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBrZXksIGlmIC0xIGl0IGlzIHJlY29tcHV0ZWQKKyAqCisgKiBMb29rdXAgYSBzdHJpbmcgYW5kIGFkZCBpdCB0byB0aGUgZGljdGlvbmFyeSBpZiBpdCB3YXNuJ3QgZm91bmQuCisgKgorICogUmV0dXJucyB0aGUgaW50ZXJuZWQgY29weSBvZiB0aGUgc3RyaW5nIG9yIE5VTEwgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbgorICogZmFpbGVkLgorICovCitjb25zdCB4bWxDaGFyICoKK3htbERpY3RMb29rdXAoeG1sRGljdFB0ciBkaWN0LCBjb25zdCB4bWxDaGFyICpuYW1lLCBpbnQgbGVuKSB7CisgICAgY29uc3QgeG1sRGljdEVudHJ5ICplbnRyeTsKKworICAgIGVudHJ5ID0geG1sRGljdExvb2t1cEludGVybmFsKGRpY3QsIE5VTEwsIG5hbWUsIGxlbiwgMSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICByZXR1cm4oZW50cnktPm5hbWUpOworfQorCisvKioKKyAqIHhtbERpY3RMb29rdXBIYXNoZWQ6CisgKiBAZGljdDogZGljdGlvbmFyeQorICogQG5hbWU6IHN0cmluZyBrZXkKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUga2V5LCBpZiAtMSBpdCBpcyByZWNvbXB1dGVkCisgKgorICogTG9va3VwIGEgZGljdGlvbmFyeSBlbnRyeSBhbmQgYWRkIHRoZSBzdHJpbmcgdG8gdGhlIGRpY3Rpb25hcnkgaWYKKyAqIGl0IHdhc24ndCBmb3VuZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBkaWN0aW9uYXJ5IGVudHJ5LgorICovCit4bWxIYXNoZWRTdHJpbmcKK3htbERpY3RMb29rdXBIYXNoZWQoeG1sRGljdFB0ciBkaWN0LCBjb25zdCB4bWxDaGFyICpuYW1lLCBpbnQgbGVuKSB7CisgICAgY29uc3QgeG1sRGljdEVudHJ5ICplbnRyeTsKKyAgICB4bWxIYXNoZWRTdHJpbmcgcmV0OworCisgICAgZW50cnkgPSB4bWxEaWN0TG9va3VwSW50ZXJuYWwoZGljdCwgTlVMTCwgbmFtZSwgbGVuLCAxKTsKKworICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7CisgICAgICAgIHJldC5uYW1lID0gTlVMTDsKKyAgICAgICAgcmV0Lmhhc2hWYWx1ZSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0ID0gKmVudHJ5OworICAgIH0KKworICAgIHJldHVybihyZXQpOworfQorCisvKioKKyAqIHhtbERpY3RFeGlzdHM6CisgKiBAZGljdDogdGhlIGRpY3Rpb25hcnkKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIG5hbWUsIGlmIC0xIGl0IGlzIHJlY29tcHV0ZWQKKyAqCisgKiBDaGVjayBpZiBhIHN0cmluZyBleGlzdHMgaW4gdGhlIGRpY3Rpb25hcnkuCisgKgorICogUmV0dXJucyB0aGUgaW50ZXJuYWwgY29weSBvZiB0aGUgbmFtZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgeG1sQ2hhciAqCit4bWxEaWN0RXhpc3RzKHhtbERpY3RQdHIgZGljdCwgY29uc3QgeG1sQ2hhciAqbmFtZSwgaW50IGxlbikgeworICAgIGNvbnN0IHhtbERpY3RFbnRyeSAqZW50cnk7CisKKyAgICBlbnRyeSA9IHhtbERpY3RMb29rdXBJbnRlcm5hbChkaWN0LCBOVUxMLCBuYW1lLCBsZW4sIDApOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgcmV0dXJuKGVudHJ5LT5uYW1lKTsKK30KKworLyoqCisgKiB4bWxEaWN0UUxvb2t1cDoKKyAqIEBkaWN0OiB0aGUgZGljdGlvbmFyeQorICogQHByZWZpeDogdGhlIHByZWZpeAorICogQG5hbWU6IHRoZSBuYW1lCisgKgorICogTG9va3VwIHRoZSBRTmFtZSBAcHJlZml4OkBuYW1lIGFuZCBhZGQgaXQgdG8gdGhlIGRpY3Rpb25hcnkgaWYKKyAqIGl0IHdhc24ndCBmb3VuZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlcm5lZCBjb3B5IG9mIHRoZSBzdHJpbmcgb3IgTlVMTCBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uCisgKiBmYWlsZWQuCisgKi8KK2NvbnN0IHhtbENoYXIgKgoreG1sRGljdFFMb29rdXAoeG1sRGljdFB0ciBkaWN0LCBjb25zdCB4bWxDaGFyICpwcmVmaXgsIGNvbnN0IHhtbENoYXIgKm5hbWUpIHsKKyAgICBjb25zdCB4bWxEaWN0RW50cnkgKmVudHJ5OworCisgICAgZW50cnkgPSB4bWxEaWN0TG9va3VwSW50ZXJuYWwoZGljdCwgcHJlZml4LCBuYW1lLCAtMSwgMSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICByZXR1cm4oZW50cnktPm5hbWUpOworfQorCisvKgorICogUHNldWRvLXJhbmRvbSBnZW5lcmF0b3IKKyAqLworCitzdGF0aWMgeG1sTXV0ZXggeG1sUm5nTXV0ZXg7CisKK3N0YXRpYyB1bnNpZ25lZCBnbG9iYWxSbmdTdGF0ZVsyXTsKKworI2lmZGVmIFhNTF9USFJFQURfTE9DQUwKK3N0YXRpYyBYTUxfVEhSRUFEX0xPQ0FMIGludCBsb2NhbFJuZ0luaXRpYWxpemVkID0gMDsKK3N0YXRpYyBYTUxfVEhSRUFEX0xPQ0FMIHVuc2lnbmVkIGxvY2FsUm5nU3RhdGVbMl07CisjZW5kaWYKKworQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKK3ZvaWQKK3htbEluaXRSYW5kb20odm9pZCkgeworICAgIGludCB2YXI7CisKKyAgICB4bWxJbml0TXV0ZXgoJnhtbFJuZ011dGV4KTsKKworICAgIC8qIFRPRE86IEdldCBzZWVkIHZhbHVlcyBmcm9tIHN5c3RlbSBQUk5HICovCisKKyAgICBnbG9iYWxSbmdTdGF0ZVswXSA9ICh1bnNpZ25lZCkgdGltZShOVUxMKSBeCisgICAgICAgICAgICAgICAgICAgICAgICBIQVNIX1JPTCgodW5zaWduZWQpIChzaXplX3QpICZ4bWxJbml0UmFuZG9tLCA4KTsKKyAgICBnbG9iYWxSbmdTdGF0ZVsxXSA9IEhBU0hfUk9MKCh1bnNpZ25lZCkgKHNpemVfdCkgJnhtbFJuZ011dGV4LCAxNikgXgorICAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9ST0woKHVuc2lnbmVkKSAoc2l6ZV90KSAmdmFyLCAyNCk7Cit9CisKK3ZvaWQKK3htbENsZWFudXBSYW5kb20odm9pZCkgeworICAgIHhtbENsZWFudXBNdXRleCgmeG1sUm5nTXV0ZXgpOworfQorCitBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUgorc3RhdGljIHVuc2lnbmVkCit4b3Jvc2hpcm82NHNzKHVuc2lnbmVkICpzKSB7CisgICAgdW5zaWduZWQgczAgPSBzWzBdOworICAgIHVuc2lnbmVkIHMxID0gc1sxXTsKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBIQVNIX1JPTChzMCAqIDB4OUUzNzc5QkIsIDUpICogNTsKKworICAgIHMxIF49IHMwOworICAgIHNbMF0gPSBIQVNIX1JPTChzMCwgMjYpIF4gczEgXiAoczEgPDwgOSk7CisgICAgc1sxXSA9IEhBU0hfUk9MKHMxLCAxMyk7CisKKyAgICByZXR1cm4ocmVzdWx0ICYgMHhGRkZGRkZGRik7Cit9CisKK3Vuc2lnbmVkCit4bWxSYW5kb20odm9pZCkgeworI2lmZGVmIFhNTF9USFJFQURfTE9DQUwKKyAgICBpZiAoIWxvY2FsUm5nSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgeG1sTXV0ZXhMb2NrKCZ4bWxSbmdNdXRleCk7CisgICAgICAgIGxvY2FsUm5nU3RhdGVbMF0gPSB4b3Jvc2hpcm82NHNzKGdsb2JhbFJuZ1N0YXRlKTsKKyAgICAgICAgbG9jYWxSbmdTdGF0ZVsxXSA9IHhvcm9zaGlybzY0c3MoZ2xvYmFsUm5nU3RhdGUpOworICAgICAgICBsb2NhbFJuZ0luaXRpYWxpemVkID0gMTsKKyAgICAgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFJuZ011dGV4KTsKKyAgICB9CisKKyAgICByZXR1cm4oeG9yb3NoaXJvNjRzcyhsb2NhbFJuZ1N0YXRlKSk7CisjZWxzZQorICAgIHVuc2lnbmVkIHJldDsKKworICAgIHhtbE11dGV4TG9jaygmeG1sUm5nTXV0ZXgpOworICAgIHJldCA9IHhvcm9zaGlybzY0c3MoZ2xvYmFsUm5nU3RhdGUpOworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxSbmdNdXRleCk7CisKKyAgICByZXR1cm4ocmV0KTsKKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KaW5kZXggNWRhZWYzZS4uNWYxNmZjYSAxMDA2NDQKLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKyBiL2RvYy9NYWtlZmlsZS5hbQpAQCAtNTgsMTAgKzU4LDcgQEAKIAogRVhUUkFfRElTVCA9IFwKIAlhcGlidWlsZC5weSBcCi0JY2hlY2thcGlzeW0ueHNsIFwKIAlsaWJ4bWwyLWFwaS54bWwgXAotCXN5bWJvbHMueG1sIFwKLQlzeW1zLnhzbCBcCiAJeG1sY2F0YWxvZy54bWwgXAogCXhtbGxpbnQueG1sCiAKQEAgLTY5LDkgKzY2LDYgQEAKIAogcmVidWlsZDoKIAljZCAkKHNyY2RpcikgJiYgLi9hcGlidWlsZC5weQotCWNkICQoc3JjZGlyKSAmJiAkKFhTTFRQUk9DKSBjaGVja2FwaXN5bS54c2wgbGlieG1sMi1hcGkueG1sCi0JY2QgJChzcmNkaXIpICYmICQoWFNMVFBST0MpIC1vIC4uL2xpYnhtbDIuc3ltcyBzeW1zLnhzbCBzeW1ib2xzLnhtbAotCWNkICQoc3JjZGlyKSAmJiAkKFhTTFRQUk9DKSAtbyAuLi93aW4zMi9saWJ4bWwyLmRlZi5zcmMgLi4vd2luMzIvZGVmZ2VuLnhzbCBsaWJ4bWwyLWFwaS54bWwKIAljZCAkKHNyY2RpcikgJiYgJChYU0xUUFJPQykgLS1ub25ldCB4bWxsaW50LnhtbAogCWNkICQoc3JjZGlyKSAmJiAkKFhTTFRQUk9DKSAtLW5vbmV0IC1vIHhtbGxpbnQuaHRtbCAkKERPQ0JPT0tfSFRNTCkgeG1sbGludC54bWwKIAljZCAkKHNyY2RpcikgJiYgJChYU0xUUFJPQykgLS1ub25ldCB4bWxjYXRhbG9nLnhtbApkaWZmIC0tZ2l0IGEvZG9jL2FwaWJ1aWxkLnB5IGIvZG9jL2FwaWJ1aWxkLnB5CmluZGV4IGY0NmUxMDYuLmMxYmE0NjMgMTAwNzU1Ci0tLSBhL2RvYy9hcGlidWlsZC5weQorKysgYi9kb2MvYXBpYnVpbGQucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgVGhpcyBpcyB0aGUgQVBJIGJ1aWxkZXIsIGl0IHBhcnNlcyB0aGUgQyBzb3VyY2VzIGFuZCBidWlsZCB0aGUKICMgQVBJIGZvcm1hbCBkZXNjcmlwdGlvbiBpbiBYTUwuCkBAIC0yMywxNSArMjMsMTIgQEAKICAgInRyaW8uYyI6ICJ0b28gbWFueSBub24gc3RhbmRhcmQgbWFjcm9zIiwKICAgInRyaW9uYW4uYyI6ICJ0b28gbWFueSBub24gc3RhbmRhcmQgbWFjcm9zIiwKICAgInRyaW9zdHIuYyI6ICJ0b28gbWFueSBub24gc3RhbmRhcmQgbWFjcm9zIiwKLSAgImFjY29uZmlnLmgiOiAiZ2VuZXJhdGVkIHBvcnRhYmlsaXR5IGxheWVyIiwKICAgImNvbmZpZy5oIjogImdlbmVyYXRlZCBwb3J0YWJpbGl0eSBsYXllciIsCiAgICJsaWJ4bWwuaCI6ICJpbnRlcm5hbCBvbmx5IiwKICAgInRlc3RPT00uYyI6ICJvdXQgb2YgbWVtb3J5IHRlc3RlciIsCiAgICJ0ZXN0T09NbGliLmgiOiAib3V0IG9mIG1lbW9yeSB0ZXN0ZXIiLAogICAidGVzdE9PTWxpYi5jIjogIm91dCBvZiBtZW1vcnkgdGVzdGVyIiwKICAgInJuZ3BhcnNlci5jIjogIm5vdCB5ZXQgaW50ZWdyYXRlZCIsCi0gICJybmdwYXJzZXIuaCI6ICJub3QgeWV0IGludGVncmF0ZWQiLAotICAidGVzdEF1dG9tYXRhLmMiOiAidGVzdCB0b29sIiwKICAgInRlc3RNb2R1bGUuYyI6ICJ0ZXN0IHRvb2wiLAogICAidGVzdFRocmVhZHMuYyI6ICJ0ZXN0IHRvb2wiLAogICAidGVzdGFwaS5jIjogImdlbmVyYXRlZCByZWdyZXNzaW9uIHRlc3RzIiwKQEAgLTQxLDEwICszOCw2IEBACiAgICJ0ZXN0LmMiOiAibm90IHBhcnQgb2YgdGhlIGxpYnJhcnkiLAogICAidGVzdGRzby5jIjogInRlc3QgZm9yIGR5bmFtaWQgc2hhcmVkIGxpYnJhcmllcyIsCiAgICJ0ZXN0cmVjdXJzZS5jIjogInRlc3QgZm9yIGVudGl0aWVzIHJlY3Vyc2lvbnMiLAotICAieHpsaWIuaCI6ICJJbnRlcm5hbCBBUEkgb25seSAyLjguMCIsCi0gICJidWYuaCI6ICJJbnRlcm5hbCBBUEkgb25seSAyLjkuMCIsCi0gICJlbmMuaCI6ICJJbnRlcm5hbCBBUEkgb25seSAyLjkuMCIsCi0gICIvc2F2ZS5oIjogIkludGVybmFsIEFQSSBvbmx5IDIuOS4wIiwKICAgInRpbXNvcnQuaCI6ICJJbnRlcm5hbCBoZWFkZXIgb25seSBmb3IgeHBhdGguYyAyLjkuMCIsCiB9CiAKQEAgLTU3LDkgKzUwLDcgQEAKICAgIlhNTFBVQkZVTiI6ICgwLCAiU3BlY2lhbCBtYWNybyBmb3IgZXh0ZXJuIGZ1bmNzIGZvciB3aW4zMiIpLAogICAiWFNMVFBVQkZVTiI6ICgwLCAiU3BlY2lhbCBtYWNybyBmb3IgZXh0ZXJuIGZ1bmNzIGZvciB3aW4zMiIpLAogICAiRVhTTFRQVUJGVU4iOiAoMCwgIlNwZWNpYWwgbWFjcm8gZm9yIGV4dGVybiBmdW5jcyBmb3Igd2luMzIiKSwKLSAgIlhNTENBTEwiOiAoMCwgIlNwZWNpYWwgbWFjcm8gZm9yIHdpbjMyIGNhbGxzIiksCiAgICJYU0xUQ0FMTCI6ICgwLCAiU3BlY2lhbCBtYWNybyBmb3Igd2luMzIgY2FsbHMiKSwKLSAgIlhNTENERUNMIjogKDAsICJTcGVjaWFsIG1hY3JvIGZvciB3aW4zMiBjYWxscyIpLAogICAiRVhTTFRDQUxMIjogKDAsICJTcGVjaWFsIG1hY3JvIGZvciB3aW4zMiBjYWxscyIpLAogICAiX19kZWNsc3BlYyI6ICgzLCAiV2luZG93cyBrZXl3b3JkIiksCiAgICJfX3N0ZGNhbGwiOiAoMCwgIldpbmRvd3Mga2V5d29yZCIpLApAQCAtNzIsNyArNjMsMTUgQEAKICAgIkxJQlhNTF9BVFRSX0ZPUk1BVCI6ICg1LCAibWFjcm8gZm9yIGdjYyBwcmludGYgYXJncyBjaGVja2luZyBleHRlbnNpb24iKSwKICAgIkxJQlhNTF9BVFRSX0FMTE9DX1NJWkUiOiAoMywgIm1hY3JvIGZvciBnY2MgY2hlY2tpbmcgZXh0ZW5zaW9uIiksCiAgICJBVFRSSUJVVEVfTk9fU0FOSVRJWkUiOiAoMywgIm1hY3JvIGtleXdvcmQiKSwKKyAgIkFUVFJJQlVURV9OT19TQU5JVElaRV9JTlRFR0VSIjogKDAsICJtYWNybyBrZXl3b3JkIiksCiAgICJYTUxfREVQUkVDQVRFRCI6ICgwLCAibWFjcm8ga2V5d29yZCIpLAorICAiWE1MX0dMT0JBTFNfQUxMT0MiOiAoMCwgIm1hY3JvIGtleXdvcmQiKSwKKyAgIlhNTF9HTE9CQUxTX0VSUk9SIjogKDAsICJtYWNybyBrZXl3b3JkIiksCisgICJYTUxfR0xPQkFMU19IVE1MIjogKDAsICJtYWNybyBrZXl3b3JkIiksCisgICJYTUxfR0xPQkFMU19JTyI6ICgwLCAibWFjcm8ga2V5d29yZCIpLAorICAiWE1MX0dMT0JBTFNfUEFSU0VSIjogKDAsICJtYWNybyBrZXl3b3JkIiksCisgICJYTUxfR0xPQkFMU19UUkVFIjogKDAsICJtYWNybyBrZXl3b3JkIiksCisgICJYTUxfVEhSRUFEX0xPQ0FMIjogKDAsICJtYWNybyBrZXl3b3JkIiksCiB9CiAKIGRlZiBlc2NhcGUocmF3KToKQEAgLTE5MiwxMCArMTkxLDEwIEBACiAgICAgICAgIGlmIG5hbWVbMDoyXSA9PSAnX18nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZCA9IE5vbmUKLSAgICAgICAgdHJ5OgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuaWRlbnRpZmllcnM6CiAgICAgICAgICAgIGQgPSBzZWxmLmlkZW50aWZpZXJzW25hbWVdCi0gICAgICAgICAgIGQudXBkYXRlKGhlYWRlciwgbW9kdWxlLCB0eXBlLCBsaW5lbm8sIGluZm8sIGV4dHJhLCBjb25kaXRpb25hbHMpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgZC51cGRhdGUoaGVhZGVyLCBtb2R1bGUsIHR5cGUsIGluZm8sIGV4dHJhLCBjb25kaXRpb25hbHMpCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgIGQgPSBpZGVudGlmaWVyKG5hbWUsIGhlYWRlciwgbW9kdWxlLCB0eXBlLCBsaW5lbm8sIGluZm8sIGV4dHJhLCBjb25kaXRpb25hbHMpCiAgICAgICAgICAgIHNlbGYuaWRlbnRpZmllcnNbbmFtZV0gPSBkCiAKQEAgLTIxNCwxMCArMjEzLDEwIEBACiAgICAgICAgIGlmIG5hbWVbMDoyXSA9PSAnX18nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZCA9IE5vbmUKLSAgICAgICAgdHJ5OgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuaWRlbnRpZmllcnM6CiAgICAgICAgICAgIGQgPSBzZWxmLmlkZW50aWZpZXJzW25hbWVdCi0gICAgICAgICAgIGQudXBkYXRlKGhlYWRlciwgbW9kdWxlLCB0eXBlLCBsaW5lbm8sIGluZm8sIGV4dHJhLCBjb25kaXRpb25hbHMpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgZC51cGRhdGUoaGVhZGVyLCBtb2R1bGUsIHR5cGUsIGluZm8sIGV4dHJhLCBjb25kaXRpb25hbHMpCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgIGQgPSBpZGVudGlmaWVyKG5hbWUsIGhlYWRlciwgbW9kdWxlLCB0eXBlLCBsaW5lbm8sIGluZm8sIGV4dHJhLCBjb25kaXRpb25hbHMpCiAgICAgICAgICAgIHNlbGYuaWRlbnRpZmllcnNbbmFtZV0gPSBkCiAKQEAgLTMwMSw3ICszMDAsNyBAQAogICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIGlmIGlkIGluIHNlbGYuZW51bXM6CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgaWYgaWQgaW4gc2VsZi5tYWNyb3M6CisgICAgICAgICAgICAgaWYgaWQgaW4gc2VsZi5tYWNyb3MgYW5kIGlkICE9ICdYTUxfT1AnOgogICAgICAgICAgICAgICAgICBwcmludCgibWFjcm8gJXMgZnJvbSAlcyByZWRlY2xhcmVkIGluICVzIiAlICgKICAgICAgICAgICAgICAgICAgICAgaWQsIHNlbGYubWFjcm9zW2lkXS5oZWFkZXIsIGlkeC5tYWNyb3NbaWRdLmhlYWRlcikpCiAgICAgICAgICAgICAgZWxzZToKQEAgLTMzMCw3ICszMjksMTkgQEAKICAgICAgICAgICMgICAgIGVsc2U6CiAgICAgICAgICAjICAgICAgICAgcHJpbnQgIkZ1bmN0aW9uICVzIGZyb20gJXMgaXMgbm90IGRlY2xhcmVkIGluIGhlYWRlcnMiICUgKAogICAgICAgICAgIyAgICAgICAgICAgICAgICBpZCwgaWR4LmZ1bmN0aW9uc1tpZF0ubW9kdWxlKQotICAgICAgICAgIyBUT0RPOiBkbyB0aGUgc2FtZSBmb3IgdmFyaWFibGVzLgorCisgICAgICAgIGZvciBpZCBpbiBsaXN0KGlkeC52YXJpYWJsZXMua2V5cygpKToKKyAgICAgICAgICAgIGlmIGlkIGluIHNlbGYudmFyaWFibGVzOgorICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCB2YXJpYWJsZSBjb25kaXRpb24gYWdyZWVzIHdpdGggaGVhZGVyCisgICAgICAgICAgICAgICAgIyBUT0RPOiBwcm9kdWNlcyBtYW55IGZhbHNlIHBvc2l0aXZlcworICAgICAgICAgICAgICAgICNpZiBpZHgudmFyaWFibGVzW2lkXS5jb25kaXRpb25hbHMgIT0gXAorICAgICAgICAgICAgICAgICMgICBzZWxmLnZhcmlhYmxlc1tpZF0uY29uZGl0aW9uYWxzOgorICAgICAgICAgICAgICAgICMgICAgcHJpbnQoIkhlYWRlciBjb25kaXRpb24gZGlmZmVycyBmcm9tIFZhcmlhYmxlIGZvciAlczoiIFwKKyAgICAgICAgICAgICAgICAjICAgICAgICUgaWQpCisgICAgICAgICAgICAgICAgIyAgICBwcmludCgiICBIOiAlcyIgJSBzZWxmLnZhcmlhYmxlc1tpZF0uY29uZGl0aW9uYWxzKQorICAgICAgICAgICAgICAgICMgICAgcHJpbnQoIiAgQzogJXMiICUgaWR4LnZhcmlhYmxlc1tpZF0uY29uZGl0aW9uYWxzKQorICAgICAgICAgICAgICAgIHVwID0gaWR4LnZhcmlhYmxlc1tpZF0KKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1tpZF0udXBkYXRlKE5vbmUsIHVwLm1vZHVsZSwgdXAudHlwZSwgdXAuaW5mbywgdXAuZXh0cmEpCiAKICAgICBkZWYgYW5hbHl6ZV9kaWN0KHNlbGYsIHR5cGUsIGRpY3QpOgogICAgICAgICBjb3VudCA9IDAKQEAgLTU3NywyMyArNTg4LDI1IEBACiAgICAgICAgIHNlbGYubGFzdF9jb21tZW50ID0gIiIKICAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQogICAgICAgICBzZWxmLmNvbGxlY3RfcmVmID0gMAotICAgICAgICBzZWxmLm5vX2Vycm9yID0gMAorICAgICAgICBzZWxmLmRvY19kaXNhYmxlID0gMAogICAgICAgICBzZWxmLmNvbmRpdGlvbmFscyA9IFtdCiAgICAgICAgIHNlbGYuZGVmaW5lcyA9IFtdCiAKICAgICBkZWYgY29sbGVjdF9yZWZlcmVuY2VzKHNlbGYpOgogICAgICAgICBzZWxmLmNvbGxlY3RfcmVmID0gMQogCi0gICAgZGVmIHN0b3BfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYubm9fZXJyb3IgPSAxCisgICAgZGVmIGRpc2FibGUoc2VsZik6CisgICAgICAgIHNlbGYuZG9jX2Rpc2FibGUgPSAxCiAKLSAgICBkZWYgc3RhcnRfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYubm9fZXJyb3IgPSAwCisgICAgZGVmIGVuYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5kb2NfZGlzYWJsZSA9IDAKIAogICAgIGRlZiBsaW5lbm8oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmxleGVyLmdldGxpbmVubygpCiAKICAgICBkZWYgaW5kZXhfYWRkKHNlbGYsIG5hbWUsIG1vZHVsZSwgc3RhdGljLCB0eXBlLCBpbmZvPU5vbmUsIGV4dHJhID0gTm9uZSk6CisgICAgICAgIGlmIHNlbGYuZG9jX2Rpc2FibGU6CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5pc19oZWFkZXIgPT0gMToKICAgICAgICAgICAgIHNlbGYuaW5kZXguYWRkKG5hbWUsIG1vZHVsZSwgbW9kdWxlLCBzdGF0aWMsIHR5cGUsIHNlbGYubGluZW5vKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLCBleHRyYSwgc2VsZi5jb25kaXRpb25hbHMpCkBAIC02MTEsMTIgKzYyNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8sIGV4dHJhLCBzZWxmLmNvbmRpdGlvbmFscykKIAogICAgIGRlZiB3YXJuaW5nKHNlbGYsIG1zZyk6Ci0gICAgICAgIGlmIHNlbGYubm9fZXJyb3I6CisgICAgICAgIGlmIHNlbGYuZG9jX2Rpc2FibGU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcHJpbnQobXNnKQogCiAgICAgZGVmIGVycm9yKHNlbGYsIG1zZywgdG9rZW49LTEpOgotICAgICAgICBpZiBzZWxmLm5vX2Vycm9yOgorICAgICAgICBpZiBzZWxmLmRvY19kaXNhYmxlOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgcHJpbnQoIlBhcnNlIEVycm9yOiAiICsgbXNnKQpAQCAtNjY5LDE3ICs2ODIsMTcgQEAKICAgICAgICAgdG9rZW4gPSBzZWxmLmxleGVyLnRva2VuKCkKIAogICAgICAgICBpZiBzZWxmLmNvbW1lbnQuZmluZCgiRE9DX0RJU0FCTEUiKSAhPSAtMToKLSAgICAgICAgICAgIHNlbGYuc3RvcF9lcnJvcigpCisgICAgICAgICAgICBzZWxmLmRpc2FibGUoKQogCiAgICAgICAgIGlmIHNlbGYuY29tbWVudC5maW5kKCJET0NfRU5BQkxFIikgIT0gLTE6Ci0gICAgICAgICAgICBzZWxmLnN0YXJ0X2Vycm9yKCkKKyAgICAgICAgICAgIHNlbGYuZW5hYmxlKCkKIAogICAgICAgICByZXR1cm4gdG9rZW4KIAogICAgICMKLSAgICAjIFBhcnNlIGEgY29tbWVudCBibG9jayBhc3NvY2lhdGUgdG8gYSB0eXBlZGVmCisgICAgIyBQYXJzZSBhIHNpbXBsZSBjb21tZW50IGJsb2NrIGZvciB0eXBlZGVmcyBvciBnbG9iYWwgdmFyaWFibGVzCiAgICAgIwotICAgIGRlZiBwYXJzZVR5cGVDb21tZW50KHNlbGYsIG5hbWUsIHF1aWV0ID0gMCk6CisgICAgZGVmIHBhcnNlU2ltcGxlQ29tbWVudChzZWxmLCBuYW1lLCBxdWlldCA9IEZhbHNlKToKICAgICAgICAgaWYgbmFtZVswOjJdID09ICdfXyc6CiAgICAgICAgICAgICBxdWlldCA9IDEKIApAQCAtNjg4LDIwICs3MDEsMjAgQEAKIAogICAgICAgICBpZiBzZWxmLmNvbW1lbnQgPT0gTm9uZToKICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKLSAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcoIk1pc3NpbmcgY29tbWVudCBmb3IgdHlwZSAlcyIgJSAobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4oKGFyZ3MsIGRlc2MpKQorICAgICAgICAgICAgICAgIHNlbGYud2FybmluZygiTWlzc2luZyBjb21tZW50IGZvciAlcyIgJSAobmFtZSkpCisgICAgICAgICAgICByZXR1cm4oTm9uZSkKICAgICAgICAgaWYgc2VsZi5jb21tZW50WzBdICE9ICcqJzoKICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKLSAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcoIk1pc3NpbmcgKiBpbiB0eXBlIGNvbW1lbnQgZm9yICVzIiAlIChuYW1lKSkKLSAgICAgICAgICAgIHJldHVybigoYXJncywgZGVzYykpCisgICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nKCJNaXNzaW5nICogaW4gY29tbWVudCBmb3IgJXMiICUgKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuKE5vbmUpCiAgICAgICAgIGxpbmVzID0gc2VsZi5jb21tZW50LnNwbGl0KCdcbicpCiAgICAgICAgIGlmIGxpbmVzWzBdID09ICcqJzoKICAgICAgICAgICAgIGRlbCBsaW5lc1swXQogICAgICAgICBpZiBsaW5lc1swXSAhPSAiKiAlczoiICUgKG5hbWUpOgogICAgICAgICAgICAgaWYgbm90IHF1aWV0OgotICAgICAgICAgICAgICAgIHNlbGYud2FybmluZygiTWlzZm9ybWF0dGVkIHR5cGUgY29tbWVudCBmb3IgJXMiICUgKG5hbWUpKQorICAgICAgICAgICAgICAgIHNlbGYud2FybmluZygiTWlzZm9ybWF0dGVkIGNvbW1lbnQgZm9yICVzIiAlIChuYW1lKSkKICAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcoIiAgRXhwZWN0aW5nICcqICVzOicgZ290ICclcyciICUgKG5hbWUsIGxpbmVzWzBdKSkKLSAgICAgICAgICAgIHJldHVybigoYXJncywgZGVzYykpCisgICAgICAgICAgICByZXR1cm4oTm9uZSkKICAgICAgICAgZGVsIGxpbmVzWzBdCiAgICAgICAgIHdoaWxlIGxlbihsaW5lcykgPiAwIGFuZCBsaW5lc1swXSA9PSAnKic6CiAgICAgICAgICAgICBkZWwgbGluZXNbMF0KQEAgLTcxOCw3ICs3MzEsNyBAQAogCiAgICAgICAgIGlmIHF1aWV0ID09IDA6CiAgICAgICAgICAgICBpZiBkZXNjID09ICIiOgotICAgICAgICAgICAgICAgIHNlbGYud2FybmluZygiVHlwZSBjb21tZW50IGZvciAlcyBsYWNrIGRlc2NyaXB0aW9uIG9mIHRoZSBtYWNybyIgJSAobmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nKCJDb21tZW50IGZvciAlcyBsYWNrcyBkZXNjcmlwdGlvbiIgJSAobmFtZSkpCiAKICAgICAgICAgcmV0dXJuKGRlc2MpCiAgICAgIwpAQCAtOTM1LDcgKzk0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcoJykgWzBdCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYucGFyc2VNYWNyb0NvbW1lbnQobmFtZSwgbm90IHNlbGYuaXNfaGVhZGVyKQorICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLnBhcnNlTWFjcm9Db21tZW50KG5hbWUsIFRydWUpCiAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9hZGQobmFtZSwgc2VsZi5maWxlbmFtZSwgbm90IHNlbGYuaXNfaGVhZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFjcm8iLCBpbmZvKQogICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbgpAQCAtMTA2OCw3ICsxMDgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdHlwZSA9ICJzdHJ1Y3QgIiArIG5hbWUKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETyByZXBvcnQgbWlzc2luZyBvciBtaXNmb3JtYXR0ZWQgY29tbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLnBhcnNlVHlwZUNvbW1lbnQobmFtZSwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLnBhcnNlU2ltcGxlQ29tbWVudChuYW1lLCBUcnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9hZGQobmFtZSwgc2VsZi5maWxlbmFtZSwgbm90IHNlbGYuaXNfaGVhZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGVkZWYiLCB0eXBlLCBpbmZvKQogICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2tlbigpCkBAIC0xMTAzLDcgKzExMTYsNiBAQAogICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2tlbigpCiAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnBhcnNlQmxvY2sodG9rZW4pCiAgICAgICAgICAgICBlbGlmIHRva2VuWzBdID09ICJzZXAiIGFuZCB0b2tlblsxXSA9PSAifSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQogICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2tlbigpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTI2MCwyNiArMTI3MiwyOSBAQAogICAgICAgICBpZiB0b2tlbiA9PSBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHRva2VuCiAKKyAgICAgICAgaGF2ZV9zaWduID0gMAorICAgICAgICBkb25lID0gMAorCiAgICAgICAgIHdoaWxlIHRva2VuWzBdID09ICJuYW1lIiBhbmQgKAogICAgICAgICAgICAgICB0b2tlblsxXSA9PSAiY29uc3QiIG9yIFwKICAgICAgICAgICAgICAgdG9rZW5bMV0gPT0gInVuc2lnbmVkIiBvciBcCiAgICAgICAgICAgICAgIHRva2VuWzFdID09ICJzaWduZWQiKToKKyAgICAgICAgICAgIGlmIHRva2VuWzFdID09ICJ1bnNpZ25lZCIgb3IgdG9rZW5bMV0gPT0gInNpZ25lZCI6CisgICAgICAgICAgICAgICAgaGF2ZV9zaWduID0gMQogICAgICAgICAgICAgaWYgc2VsZi50eXBlID09ICIiOgogICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9IHRva2VuWzFdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9IHNlbGYudHlwZSArICIgIiArIHRva2VuWzFdCiAgICAgICAgICAgICB0b2tlbiA9IHNlbGYudG9rZW4oKQogCi0gICAgICAgIGlmIHRva2VuWzBdID09ICJuYW1lIiBhbmQgKHRva2VuWzFdID09ICJsb25nIiBvciB0b2tlblsxXSA9PSAic2hvcnQiKToKKyAgICAgICAgaWYgdG9rZW5bMF0gPT0gIm5hbWUiIGFuZCB0b2tlblsxXSBpbiAoImNoYXIiLCAic2hvcnQiLCAiaW50IiwgImxvbmciKToKICAgICAgICAgICAgIGlmIHNlbGYudHlwZSA9PSAiIjoKICAgICAgICAgICAgICAgICBzZWxmLnR5cGUgPSB0b2tlblsxXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnR5cGUgPSBzZWxmLnR5cGUgKyAiICIgKyB0b2tlblsxXQotICAgICAgICAgICAgaWYgdG9rZW5bMF0gPT0gIm5hbWUiIGFuZCB0b2tlblsxXSA9PSAiaW50IjoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnR5cGUgPT0gIiI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9IHRtcFsxXQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9IHNlbGYudHlwZSArICIgIiArIHRtcFsxXQorCisgICAgICAgIGVsaWYgaGF2ZV9zaWduOgorICAgICAgICAgICAgZG9uZSA9IDEKIAogICAgICAgICBlbGlmIHRva2VuWzBdID09ICJuYW1lIiBhbmQgdG9rZW5bMV0gPT0gInN0cnVjdCI6CiAgICAgICAgICAgICBpZiBzZWxmLnR5cGUgPT0gIiI6CkBAIC0xMzQ4LDcgKzEzNjMsOCBAQAogICAgICAgICAgICAgc2VsZi5lcnJvcigicGFyc2luZyB0eXBlICVzOiBleHBlY3RpbmcgYSBuYW1lIiAlIChzZWxmLnR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbikKICAgICAgICAgICAgIHJldHVybiB0b2tlbgotICAgICAgICB0b2tlbiA9IHNlbGYudG9rZW4oKQorICAgICAgICBpZiBub3QgZG9uZToKKyAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2tlbigpCiAgICAgICAgIHdoaWxlIHRva2VuICE9IE5vbmUgYW5kICh0b2tlblswXSA9PSAib3AiIG9yCiAgICAgICAgICAgICAgIHRva2VuWzBdID09ICJuYW1lIiBhbmQgdG9rZW5bMV0gPT0gImNvbnN0Iik6CiAgICAgICAgICAgICBzZWxmLnR5cGUgPSBzZWxmLnR5cGUgKyAiICIgKyB0b2tlblsxXQpAQCAtMTUxOCwyNSArMTUzNCwyNCBAQAogICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYudG9rZW4oKQogICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYucGFyc2VCbG9jayh0b2tlbikKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1lbnQgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRva2VuICE9IE5vbmUgYW5kICh0b2tlblswXSAhPSAic2VwIiBvciBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlblsxXSAhPSAnOycgYW5kIHRva2VuWzFdICE9ICcsJykpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2tlbigpCi0gICAgICAgICAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQogICAgICAgICAgICAgICAgIGlmIHRva2VuID09IE5vbmUgb3IgdG9rZW5bMF0gIT0gInNlcCIgb3IgKHRva2VuWzFdICE9ICc7JyBhbmQKICAgICAgICAgICAgICAgICAgICB0b2tlblsxXSAhPSAnLCcpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJtaXNzaW5nICc7JyBvciAnLCcgYWZ0ZXIgdmFsdWUiKQogCiAgICAgICAgICAgICBpZiB0b2tlbiAhPSBOb25lIGFuZCB0b2tlblswXSA9PSAic2VwIjoKICAgICAgICAgICAgICAgICBpZiB0b2tlblsxXSA9PSAiOyI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWVudCA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRva2VuKCkKICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSA9PSAic3RydWN0IjoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZXhfYWRkKHNlbGYubmFtZSwgc2VsZi5maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuaXNfaGVhZGVyLCAic3RydWN0Iiwgc2VsZi5zdHJ1Y3RfZmllbGRzKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYucGFyc2VTaW1wbGVDb21tZW50KHNlbGYubmFtZSwgVHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZXhfYWRkKHNlbGYubmFtZSwgc2VsZi5maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuaXNfaGVhZGVyLCAidmFyaWFibGUiLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5pc19oZWFkZXIsICJ2YXJpYWJsZSIsIHR5cGUsIGluZm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWVudCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRva2VuKCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBlbGlmIHRva2VuWzFdID09ICIoIjoKICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRva2VuKCkKQEAgLTE1NDgsMTggKzE1NjMsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0eXBlLCBOb25lKSwgc2VsZi5zaWduYXR1cmUpLCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9hZGQoc2VsZi5uYW1lLCBzZWxmLmZpbGVuYW1lLCBzdGF0aWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uIiwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWVudCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2tlbigpCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgdG9rZW5bMF0gPT0gInNlcCIgYW5kIHRva2VuWzFdID09ICJ7IjoKICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLm1lcmdlRnVuY3Rpb25Db21tZW50KHNlbGYubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0eXBlLCBOb25lKSwgc2VsZi5zaWduYXR1cmUpLCBzdGF0aWMpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluZGV4X2FkZChzZWxmLm5hbWUsIHNlbGYuZmlsZW5hbWUsIHN0YXRpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24iLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQogICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRva2VuKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5wYXJzZUJsb2NrKHRva2VuKTsKICAgICAgICAgICAgICAgICBlbGlmIHRva2VuWzFdID09ICcsJzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQogICAgICAgICAgICAgICAgICAgICBzZWxmLmluZGV4X2FkZChzZWxmLm5hbWUsIHNlbGYuZmlsZW5hbWUsIHN0YXRpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJpYWJsZSIsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWVudCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVfb3JpZwogICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYudG9rZW4oKQogICAgICAgICAgICAgICAgICAgICB3aGlsZSB0b2tlbiAhPSBOb25lIGFuZCB0b2tlblswXSA9PSAic2VwIjoKQEAgLTE3MzIsMTEgKzE3NDksMTcgQEAKICAgICBkZWYgc2VyaWFsaXplX3ZhcmlhYmxlKHNlbGYsIG91dHB1dCwgbmFtZSk6CiAgICAgICAgIGlkID0gc2VsZi5pZHgudmFyaWFibGVzW25hbWVdCiAgICAgICAgIGlmIGlkLmluZm8gIT0gTm9uZToKLSAgICAgICAgICAgIG91dHB1dC53cml0ZSgiICAgIDx2YXJpYWJsZSBuYW1lPSclcycgZmlsZT0nJXMnIHR5cGU9JyVzJy8+XG4iICUgKAorICAgICAgICAgICAgb3V0cHV0LndyaXRlKCIgICAgPHZhcmlhYmxlIG5hbWU9JyVzJyBmaWxlPSclcycgdHlwZT0nJXMnIiAlICgKICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi5tb2R1bGVuYW1lX2ZpbGUoaWQuaGVhZGVyKSwgaWQuaW5mbykpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvdXRwdXQud3JpdGUoIiAgICA8dmFyaWFibGUgbmFtZT0nJXMnIGZpbGU9JyVzJy8+XG4iICUgKAorICAgICAgICAgICAgb3V0cHV0LndyaXRlKCIgICAgPHZhcmlhYmxlIG5hbWU9JyVzJyBmaWxlPSclcyciICUgKAogICAgICAgICAgICAgICAgICAgICBuYW1lLCBzZWxmLm1vZHVsZW5hbWVfZmlsZShpZC5oZWFkZXIpKSkKKyAgICAgICAgZGVzYyA9IGlkLmV4dHJhCisgICAgICAgIGlmIGRlc2MgIT0gTm9uZSBhbmQgZGVzYyAhPSAiIjoKKyAgICAgICAgICAgIG91dHB1dC53cml0ZSgiPlxuICAgICAgPGluZm8+JXM8L2luZm8+XG4iICUgKGVzY2FwZShkZXNjKSkpCisgICAgICAgICAgICBvdXRwdXQud3JpdGUoIiAgICA8L3ZhcmlhYmxlPlxuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dC53cml0ZSgiLz5cbiIpCiAKICAgICBkZWYgc2VyaWFsaXplX2Z1bmN0aW9uKHNlbGYsIG91dHB1dCwgbmFtZSk6CiAgICAgICAgIGlkID0gc2VsZi5pZHguZnVuY3Rpb25zW25hbWVdCmRpZmYgLS1naXQgYS9kb2MvYnVpbGREb2NCb29rQ2F0YWxvZyBiL2RvYy9idWlsZERvY0Jvb2tDYXRhbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkMWI4Yzk0Li4wMDAwMDAwCi0tLSBhL2RvYy9idWlsZERvY0Jvb2tDYXRhbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLSMhIC9iaW4vYmFzaAotCi11c2FnZSgpCi17Ci0gICAgY2F0IDw8RU9GCi1Vc2FnZTogJHBuYW1lIFtPUFRJT05dCi0KLUtub3duIHZhbHVlcyBmb3IgT1BUSU9OIGFyZToKLSAgLS1wcmVmaXg9RElSICAgICAgICBjaGFuZ2UgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIGNhdGFsb2cgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdCAkRElSXQotICAtLXNob3cgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIG91dHB1dCBmaWxlbmFtZXMgYW5kIHBhdGhzCi0gIC0tdmVyc2lvbj14LnkueiAgICAgY2hhbmdlIHRoZSBEb2NCb29rIHZlcnNpb24gW2RlZmF1bHQgJFZFUlNJT05dCi0gIC0tZGVidWcgICAgICAgICAgICAgZGlzcGxheSBzY3JpcHQgYWN0aW9uIGluZm9ybWF0aW9uCi0gIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKLUVPRgotfQotCi1zZXRkZWZhdWx0KCkKLXsKLSAgICBlY2hvIFVuYWJsZSB0byB1cGRhdGUgcm9vdCBjYXRhbG9nICRST09UQ0FUQUxPRwotICAgIFJPT1RDQVRBTE9HPSRIT01FL3htbGNhdGFsb2cKLSAgICBDQVRBTE9HPSRIT01FL2Ria3htbGNhdGFsb2cKLSAgICBESVI9JEhPTUUKLSAgICBDQVQ9eG1sY2F0YWxvZwotICAgIGVjaG8gVXNpbmcgJFJPT1RDQVRBTE9HIGFzIHRoZSByb290IGNhdGFsb2cKLSAgICBlY2hvIFJlbWVtYmVyIHRvIGV4cG9ydCBYTUxfQ0FUQUxPR19GSUxFUz0kUk9PVENBVEFMT0cKLSAgICBlY2hvCi0gICAgcHJlZml4PTEKLX0KLQotZml4bmFtZSgpCi17Ci0jCi0jIFJPT1RDQVRBTE9HIGNvbnRhaW5zIHRoZSBmdWxsIHBhdGhuYW1lIGZvciB0aGUgY2F0YWxvZy4gIFdlIHdpbGwKLSMgc3BsaXQgdGhhdCBpbnRvIHRoZSBkaXJlY3RvcnkgbmFtZSBhbmQgdGhlIGZpbGVuYW1lLCB0aGVuIHdlIHdpbGwKLSMgc2VlIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzLiAgSWYgaXQgZG9lcyBub3QsIHdlIHdpbGwgYXR0ZW1wdCB0bwotIyBjcmVhdGUgaXQuCi0jCi0gICAgaWYgdGVzdCAkdmVyYm9zZSA9IDEKLSAgICB0aGVuCi0gICAgICAgIGVjaG8gQ2hlY2tpbmcgcGF0aCAkUk9PVENBVEFMT0cgZm9yIHBlcm1pc3Npb25zCi0gICAgZmkKLSMgRmlyc3Qgd2Ugc3BsaXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3RvcnkgbmFtZQotICAgIENBVD1gYmFzZW5hbWUgJFJPT1RDQVRBTE9HYAotICAgIERJUj1gZGlybmFtZSAkUk9PVENBVEFMT0dgCi0gICAgaWYgdGVzdCAiJERJUiIgPSAiIgotICAgIHRoZW4KLSAgICAgICAgZWNobyBVbmFibGUgdG8gaXNvbGF0ZSBkaXJlY3RvcnkgbmFtZSBmcm9tICckUk9PVENBVEFMT0cnIC0gZXhpdGluZwotICAgICAgICBleGl0IDEKLSAgICBmaQotICAgIENBVEFMT0c9JHtESVJ9L2RvY2Jvb2sKLSAgICBwYXJlbnQ9YGRpcm5hbWUgJERJUmAKLSAgICBpZiB0ZXN0ICIkcGFyZW50IiA9PSAiIgotICAgIHRoZW4KLSAgICAgICAgcGFyZW50PS8KLSAgICBmaQotICAgIGlmIFsgISAtZCAkRElSIF0KLSAgICB0aGVuCi0gICAgICAgIGlmIHRlc3QgJHZlcmJvc2UgPSAxCi0gICAgICAgIHRoZW4KLSAgICAgICAgICAgIGVjaG8gRGlyZWN0b3J5ICRESVIgbWlzc2luZyAtIEkgd2lsbCB0cnkgdG8gY3JlYXRlIGl0Ci0gICAgICAgIGZpCi0gICAgICAgIGlmIFsgISAtdyAkcGFyZW50IF0KLSAgICAgICAgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAkdmVyYm9zZSA9IDEKLSAgICAgICAgICAgIHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvIE5vIHdyaXRlIHBlcm1pc3Npb24gZm9yIGRpcmVjdG9yeSAkcGFyZW50Ci0gICAgICAgICAgICBmaQotICAgICAgICAgICAgc2V0ZGVmYXVsdAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdkaXI9MQotICAgICAgICBmaQotICAgIGVsc2UKLSAgICAgICAgaWYgWyAtZiAkUk9PVENBVEFMT0cgLWEgISAtdyAkUk9PVENBVEFMT0cgXSB8fAotCSAgIFsgLWUgJFJPT1RDQVRBTE9HIC1hICEgLWYgJFJPT1RDQVRBTE9HIF0gfHwKLSAgICAgICAgICAgWyAhIC1lICRST09UQ0FUQUxPRyAgLWEgISAtdyAkRElSIF0KLSAgICAgICAgdGhlbgotICAgICAgICAgICAgc2V0ZGVmYXVsdAotICAgICAgICBmaQotICAgIGZpCi0KLX0KLWZpbmRkYngoKQotewotZHRkNDIxPSIiCi1zPSIvL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgViR7VkVSU0lPTn0vL0VOIgotZm91bmQ9YGZpbmQgJDEgLW5hbWUgZG9jYm9va3guZHRkIC1leGVjIGdyZXAgLWwgIiRzIiB7fSBcO2AKLWZvciBkdGQgaW4gJGZvdW5kOyBkbwotICAgIGRvY2Jvb2tkaXI9YGRpcm5hbWUgJGR0ZGAKLSAgICBlY2hvIEZvdW5kIERvY0Jvb2sgWE1MICRWRVJTSU9OIERURCBpbiAkZG9jYm9va2RpcgotIwotIyBUaGUgb3JpZ2luYWwgc2NyaXB0IGhhZCBhIGNoZWNrIGZvciB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBmaWxlCi0jIGJ1dCBJIGNhbid0IHNlZSB3aHkgaXQgc2hvdWxkIGJlIG5lY2Vzc2FyeQotIwotICAgIGR0ZDQyMT0kZHRkCi0gICAgYnJlYWsKLWRvbmUKLX0KLQotIwotIyBQcmVzZXQgc2NyaXB0IGNvbnRyb2wgcGFyYW1zCi1zaG93PTAKLXByZWZpeD0wCi1uZXdkaXI9MAotdmVyYm9zZT0wCi0jCi0jIElzb2xhdGUgdGhlIHNjcmlwdCBuYW1lIGZvciBtZXNzYWdlcwotcG5hbWU9YGJhc2VuYW1lICQwYAotVkVSU0lPTj00LjEuMgotCi1pZiB0ZXN0ICIkWE1MX0NBVEFMT0dfRklMRVMiICE9ICIiCi10aGVuCi0gICAgUk9PVENBVEFMT0c9JFhNTF9DQVRBTE9HX0ZJTEVTCi1lbHNlCi0gICAgUk9PVENBVEFMT0c9L2V0Yy94bWwvY2F0YWxvZwotZmkKLQotIwotIyBJbnRlcnByZXQgc2NyaXB0IHBhcmFtZXRlcnMKLXdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgY2FzZSAiJDEiIGluCi0gICAgLSo9Kikgb3B0YXJnPWBlY2hvICIkMSIgfCBzZWQgJ3MvWy1fYS16QS1aMC05XSo9Ly8nYCA7OwotICAgICopIG9wdGFyZz0gOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICIkMSIgaW4KLSAgICAtcD0qIHwgLS1wcmVmaXg9KikKLSAgICAgICAgUk9PVENBVEFMT0c9JG9wdGFyZy9jYXRhbG9nCi0gICAgICAgIHByZWZpeD0xCi0gICAgICAgIDs7Ci0KLSAgICAtcyB8IC0tc2hvdykKLSAgICAgICAgc2hvdz0xCi0gICAgICAgIDs7Ci0KLSAgICAtdj0qIHwgLS12ZXJzaW9uPSopCi0gICAgICAgIFZFUlNJT049JG9wdGFyZwotCTs7Ci0KLSAgICAtZCB8IC0tZGVidWcpCi0gICAgICAgIHZlcmJvc2U9MQotICAgICAgICA7OwotCi0gICAgLWggfCAtLWhlbHApCi0gICAgICAgIHVzYWdlCi0JZXhpdCAwCi0JOzsKLQotICAgICogKQotICAgICAgICBlY2hvIEludmFsaWQgYXJndW1lbnQgIiQxIgotCXVzYWdlCi0gICAgICAgIGV4aXQgMQotICAgICAgICA7OwotICAgIGVzYWMKLSAgICBzaGlmdAotZG9uZQotZml4bmFtZQotaWYgdGVzdCAkcHJlZml4ICE9IDAKLXRoZW4KLSAgICBleHBvcnQgWE1MX0NBVEFMT0dfRklMRVM9JFJPT1RDQVRBTE9HCi1maQotaWYgdGVzdCAkc2hvdyAhPSAwCi10aGVuCi0gICAgZWNobyBYTUwgQ2F0YWxvZyBpcyAkUk9PVENBVEFMT0cKLSAgICBlY2hvIERvY2Jvb2sgQ2F0YWxvZyBpcyAkQ0FUQUxPRwotICAgIGV4aXQgMAotZmkKLWlmIHRlc3QgJG5ld2RpciE9MAotdGhlbgotICAgIG1rZGlyIC1wICRESVIKLSAgICBjaG1vZCA3NTUgJERJUgotZmkKLQotZWNobyBTdGFydGluZyBydW4KLSMKLSMgY3JlYXRlIHRoZSBjYXRhbG9ncyByb290IGFuZCBkb2Nib29rIHNwZWNpZmljCi0jCi1pZiBbICEgLXIgJFJPT1RDQVRBTE9HIF0gOyB0aGVuCi0gICBlY2hvIGNyZWF0aW5nIFhNTCBDYXRhbG9nIHJvb3QgJFJPT1RDQVRBTE9HCi0gICB4bWxjYXRhbG9nIC0tbm9vdXQgLS1jcmVhdGUgJFJPT1RDQVRBTE9HCi1maQotaWYgWyAhIC1yICRST09UQ0FUQUxPRyBdIDsgdGhlbgotICAgZWNobyBGYWlsZWQgY3JlYXRpbmcgWE1MIENhdGFsb2cgcm9vdCAkUk9PVENBVEFMT0cKLSAgIGV4aXQgMQotZmkKLWlmIFsgISAtciAkQ0FUQUxPRyBdIDsgdGhlbgotICAgZWNobyBjcmVhdGluZyBEb2NCb29rIFhNTCBDYXRhbG9nICRDQVRBTE9HCi0gICB4bWxjYXRhbG9nIC0tbm9vdXQgLS1jcmVhdGUgJENBVEFMT0cKLWZpCi1pZiBbICEgLXIgJENBVEFMT0cgXSA7IHRoZW4KLSAgIGVjaG8gRmFpbGVkIGNyZWF0aW5nIERvY0Jvb2sgWE1MIENhdGFsb2cgJENBVEFMT0cKLSAgIGV4aXQgMQotZmkKLQotIwotIyBmaW5kIHRoZSBwcmVmaXggZm9yIERvY0Jvb2sgRFRECi0jCi1maW5kZGJ4IC91c3Ivc2hhcmUveG1sCi1pZiBbICIkZHRkNDIxIiA9ICIiIF0gOyB0aGVuCi0gICAgZmluZGRieCAkSE9NRQotZmkKLWlmIFsgIiRkdGQ0MjEiID0gIiIgXSA7IHRoZW4KLSAgICBmaW5kZGJ4IC91c3IvbG9jYWwKLWZpCi1pZiBbICIkZHRkNDIxIiA9ICIiIF0gOyB0aGVuCi0gICAgZmluZGRieCAvdXNyL3NoYXJlL3NnbWwKLWZpCi0KLWlmIFsgIiRkdGQ0MjEiID0gIiIgXSA7IHRoZW4KLSAgICBlY2hvIGNvdWxkIG5vdCBsb2NhdGUgdmVyc2lvbiAkVkVSU0lPTiBvZiBEb2NCb29rIFhNTAotICAgIGV4aXQgMQotZmkKLQoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgViR7VkVSU0lPTn0vL0VOIiBcCi0gICAgImZpbGU6Ly8kZG9jYm9va2Rpci9kYnBvb2x4Lm1vZCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgViR7VkVSU0lPTn0vL0VOIiBcCi0gICAgImZpbGU6Ly8kZG9jYm9va2Rpci9kb2Nib29reC5kdGQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFYke1ZFUlNJT059Ly9FTiIgXAotICAgICJmaWxlOi8vJGRvY2Jvb2tkaXIvZGJjZW50eC5tb2QiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgTm90YXRpb25zIFYke1ZFUlNJT059Ly9FTiIgXAotICAgICJmaWxlOi8vJGRvY2Jvb2tkaXIvZGJub3RueC5tb2QiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFYke1ZFUlNJT059Ly9FTiIgXAotICAgICJmaWxlOi8vJGRvY2Jvb2tkaXIvZGJnZW5lbnQubW9kIiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWJHtWRVJTSU9OfS8vRU4iIFwKLSAgICAiZmlsZTovLyRkb2Nib29rZGlyL2RiaGllcngubW9kIiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIiBcCi0gICAgImZpbGU6Ly8kZG9jYm9va2Rpci9zb2V4dGJseC5kdGQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIENBTFMgVGFibGUgTW9kZWwgViR7VkVSU0lPTn0vL0VOIiBcCi0gICAgImZpbGU6Ly8kZG9jYm9va2Rpci9jYWxzdGJseC5kdGQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInJld3JpdGVTeXN0ZW0iIFwKLSAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC8ke1ZFUlNJT059IiBcCi0gICAgImZpbGU6Ly8kZG9jYm9va2RpciIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicmV3cml0ZVVSSSIgXAotICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLyR7VkVSU0lPTn0iIFwKLSAgICAiZmlsZTovLyRkb2Nib29rZGlyIiAkQ0FUQUxPRwotCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgImRlbGVnYXRlUHVibGljIiBcCi0gICAgIi0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCIgXAotICAgICJmaWxlOi8vJENBVEFMT0ciICRST09UQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJkZWxlZ2F0ZVB1YmxpYyIgXAotICAgICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIiBcCi0gICAgImZpbGU6Ly8kQ0FUQUxPRyIgJFJPT1RDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgImRlbGVnYXRlU3lzdGVtIiBcCi0gICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8iIFwKLSAgICAiZmlsZTovLyRDQVRBTE9HIiAkUk9PVENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAiZGVsZWdhdGVVUkkiIFwKLSAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIgXAotICAgICJmaWxlOi8vJENBVEFMT0ciICRST09UQ0FUQUxPRwotCi0jCi0jIGZpbmQgdGhlIHByZWZpeCBmb3IgSVNPIERvY0Jvb2sgZW50aXRpZXMKLSMKLXRvcD1gZGlybmFtZSAkZG9jYm9va2RpcmAKLWZvdW5kPWBmaW5kICR0b3AgLW5hbWUgaXNvLWFtc2IuZW50YAotaWYgWyAiJGZvdW5kIiA9ICIiIF0gOyB0aGVuCi0gICAgZm91bmQ9YGZpbmQgL3Vzci9zaGFyZS94bWwgLW5hbWUgaXNvLWFtc2IuZW50YAotZmkKLWlmIFsgIiRmb3VuZCIgPSAiIiBdIDsgdGhlbgotICAgIGZvdW5kPWBmaW5kICRIT01FIC1uYW1lIGlzby1hbXNiLmVudGAKLWZpCi1pZiBbICIkZm91bmQiID0gIiIgXSA7IHRoZW4KLSAgICBmb3VuZD1gZmluZCAvdXNyL2xvY2FsIC1uYW1lIGlzby1hbXNiLmVudGAKLWZpCi1pZiBbICIkZm91bmQiID0gIiIgXSA7IHRoZW4KLSAgICBmb3VuZD1gZmluZCAvdXNyL3NoYXJlL3NnbWwgLW5hbWUgaXNvLWFtc2IuZW50YAotZmkKLWlmIFsgIiRmb3VuZCIgPSAiIiBdIDsgdGhlbgotICAgIGVjaG8gY291bGQgbm90IGxvY2F0ZSBpc28tYW1zYi5lbnQgb2YgSVNPIERvY0Jvb2sgZW50aXRpZXMKLSAgICBleGl0IDEKLWZpCi0KLWVudHhtbD0iIgotZm9yIHRzdCBpbiAkZm91bmQ7IGRvCi0gICAgY2hlY2s9YGdyZXAgJzwhRU5USVRZIG9taW51cy4iXCYjeDIyOTY7Ij4nICR0c3RgCi0gICAgaWYgWyAiJGNoZWNrIiAhPSAiIiBdIDsgdGhlbgotICAgICAgICBlbnR4bWw9JHRzdAotICAgICAgICBicmVhawotICAgIGZpCi1kb25lCi0KLWlmIFsgIiRlbnR4bWwiID0gIiIgXSA7IHRoZW4KLSAgICBlY2hvIGNvdWxkIG5vdCBsb2NhdGUgSVNPIERvY0Jvb2sgZW50aXRpZXMKLSAgICBleGl0IDEKLWZpCi1pc29kaXI9YGRpcm5hbWUgJGVudHhtbGAKLWVjaG8gRm91bmQgSVNPIERvY0Jvb2sgZW50aXRpZXMgaW4gJGlzb2RpcgotCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTiIgXAotICAgICJmaWxlOi8vJGlzb2Rpci9pc28tcHViLmVudCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOIiBcCi0gICAgImZpbGU6Ly8kaXNvZGlyL2lzby1ncmsxLmVudCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTiIgXAotICAgICJmaWxlOi8vJGlzb2Rpci9pc28tYm94LmVudCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOIiBcCi0gICAgImZpbGU6Ly8kaXNvZGlyL2lzby1ncmszLmVudCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOIiBcCi0gICAgImZpbGU6Ly8kaXNvZGlyL2lzby1hbXNuLmVudCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLW51bS5lbnQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTiIgXAotICAgICJmaWxlOi8vJGlzb2Rpci9pc28tZ3JrNC5lbnQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWRpYS5lbnQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTiIgXAotICAgICJmaWxlOi8vJGlzb2Rpci9pc28tZ3JrMi5lbnQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWFtc2EuZW50IiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWFtc28uZW50IiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWN5cjEuZW50IiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOIiBcCi0gICAgImZpbGU6Ly8kaXNvZGlyL2lzby10ZWNoLmVudCIgJENBVEFMT0cKLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicHVibGljIiBcCi0gICAgIklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWFtc2MuZW50IiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWxhdDEuZW50IiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTiIgXAotICAgICJmaWxlOi8vJGlzb2Rpci9pc28tYW1zYi5lbnQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTiIgXAotICAgICJmaWxlOi8vJGlzb2Rpci9pc28tbGF0Mi5lbnQiICRDQVRBTE9HCi14bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4iIFwKLSAgICAiZmlsZTovLyRpc29kaXIvaXNvLWFtc3IuZW50IiAkQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJwdWJsaWMiIFwKLSAgICAiSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOIiBcCi0gICAgImZpbGU6Ly8kaXNvZGlyL2lzby1jeXIyLmVudCIgJENBVEFMT0cKLQoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJkZWxlZ2F0ZVB1YmxpYyIgXAotICAgICJJU08gODg3OToxOTg2IiBcCi0gICAgImZpbGU6Ly8kQ0FUQUxPRyIgJFJPT1RDQVRBTE9HCi0KLSMKLSMgZmluZCB0aGUgcHJlZml4IGZvciBYU0xUIHN0eWxlc2hlZXRzCi0jCi10b3A9YGRpcm5hbWUgJGRvY2Jvb2tkaXJgCi1mb3VuZD1gZmluZCAkdG9wIC1uYW1lIGNodW5rLnhzbGAKLWlmIFsgIiRmb3VuZCIgPSAiIiBdIDsgdGhlbgotICAgIGZvdW5kPWBmaW5kIC91c3Ivc2hhcmUveG1sIC1uYW1lIGNodW5rLnhzbGAKLWZpCi1pZiBbICIkZm91bmQiID0gIiIgXSA7IHRoZW4KLSAgICBmb3VuZD1gZmluZCAkSE9NRSAtbmFtZSBjaHVuay54c2xgCi1maQotaWYgWyAiJGZvdW5kIiA9ICIiIF0gOyB0aGVuCi0gICAgZm91bmQ9YGZpbmQgL3Vzci9sb2NhbCAtbmFtZSBjaHVuay54c2xgCi1maQotaWYgWyAiJGZvdW5kIiA9ICIiIF0gOyB0aGVuCi0gICAgZm91bmQ9YGZpbmQgL3Vzci9zaGFyZS9zZ21sIC1uYW1lIGNodW5rLnhzbGAKLWZpCi1pZiBbICIkZm91bmQiID0gIiIgXSA7IHRoZW4KLSAgICBlY2hvIGNvdWxkIG5vdCBsb2NhdGUgY2h1bmstY29tbW9uLnhzbCBvZiBEb2NCb29rIFhTTFQgc3R5bGVzaGVldHMKLSAgICBleGl0IDEKLWZpCi0KLXhzbGRpcj0iIgotZm9yIHRzdCBpbiAkZm91bmQ7IGRvCi0gICAgZGlyPWBkaXJuYW1lICR0c3RgCi0gICAgZGlyPWBkaXJuYW1lICRkaXJgCi0gICAgaWYgWyAtciAkZGlyL2h0bWwvZG9jYm9vay54c2wgLWEgLXIgJGRpci9jb21tb24vbDEwbi54bWwgXTsgdGhlbgotICAgICAgICB4c2xkaXI9JGRpcgotICAgICAgICBicmVhawotICAgIGZpCi1kb25lCi0KLWlmIFsgIiR4c2xkaXIiID0gIiIgXSA7IHRoZW4KLSAgICBlY2hvIGNvdWxkIG5vdCBsb2NhdGUgRG9jQm9vayBYU0xUIHN0eWxlc2hlZXRzCi0gICAgZXhpdCAxCi1maQotZWNobyBGb3VuZCBEb2NCb29rIFhTTFQgc3R5bGVzaGVldHMgaW4gJHhzbGRpcgotZm9yIHZlcnNpb24gaW4gY3VycmVudCAxLjM5IDEuNDAgMS40MSAxLjQyIDEuNDMgMS40NCAxLjQ1IDEuNDYgMS40NyBcCi0gICAgICAgICAgICAgICAxLjQ4IDEuNDkgMS41MAotZG8KLSAgICB4bWxjYXRhbG9nIC0tbm9vdXQgLS1hZGQgInJld3JpdGVTeXN0ZW0iIFwKLQkiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyR2ZXJzaW9uIiBcCi0JImZpbGU6Ly8keHNsZGlyIiAkQ0FUQUxPRwotICAgIHhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAicmV3cml0ZVVSSSIgXAotCSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvJHZlcnNpb24iIFwKLQkiZmlsZTovLyR4c2xkaXIiICRDQVRBTE9HCi1kb25lCi0KLXhtbGNhdGFsb2cgLS1ub291dCAtLWFkZCAiZGVsZWdhdGVTeXN0ZW0iIFwKLSAgICAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgXAotICAgICJmaWxlOi8vJENBVEFMT0ciICRST09UQ0FUQUxPRwoteG1sY2F0YWxvZyAtLW5vb3V0IC0tYWRkICJkZWxlZ2F0ZVVSSSIgXAotICAgICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBcCi0gICAgImZpbGU6Ly8kQ0FUQUxPRyIgJFJPT1RDQVRBTE9HCi0KLSMKLSMKZGlmZiAtLWdpdCBhL2RvYy9jaGVja2FwaXN5bS54c2wgYi9kb2MvY2hlY2thcGlzeW0ueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTkxMzkzLi4wMDAwMDAwCi0tLSBhL2RvYy9jaGVja2FwaXN5bS54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gVGhpcyBzdHlsZXNoZWV0IGlzIHVzZWQgdG8gY2hlY2sgdGhhdCBzeW1ib2xzIGV4cG9ydGVkCi0gICAgIGZyb20gbGlieG1sMi1hcGkueG1sIGFyZSBhbHNvIHByZXNlbnQgaW4gdGhlIHN5bWJvbCBmaWxlCi0gICAgIHN5bWJvbHMueG1sIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbGlieG1sMi5zeW1zIHNldHRpbmcKLSAgICAgdXAgdGhlIGFsbG93ZWQgYWNjZXNzIHBvaW50IHRvIHRoZSBzaGFyZWQgbGlicmFyaWVzIC0tPgotCi0KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiPgotICA8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiIGVuY29kaW5nPSJVVEYtOCIvPgotCi0gIDx4c2w6dmFyaWFibGUgbmFtZT0ic3ltcyIgc2VsZWN0PSJkb2N1bWVudCgnc3ltYm9scy54bWwnKSIvPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDx4c2w6bWVzc2FnZSB0ZXJtaW5hdGU9Im5vIj4KLSAgICAgIDx4c2w6dGV4dD5Mb29raW5nIGZvciBmdW5jdGlvbnMgaW4gc3ltYm9scy54bWw8L3hzbDp0ZXh0PgotICAgIDwveHNsOm1lc3NhZ2U+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvYXBpL3N5bWJvbHMvZnVuY3Rpb24iLz4KLSAgICA8eHNsOm1lc3NhZ2UgdGVybWluYXRlPSJubyI+Ci0gICAgICA8eHNsOnRleHQ+Rm91bmQgPC94c2w6dGV4dD4KLSAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudCgvYXBpL3N5bWJvbHMvZnVuY3Rpb24pIi8+Ci0gICAgICA8eHNsOnRleHQ+IGZ1bmN0aW9uczwveHNsOnRleHQ+Ci0gICAgPC94c2w6bWVzc2FnZT4KLSAgICA8eHNsOm1lc3NhZ2UgdGVybWluYXRlPSJubyI+Ci0gICAgICA8eHNsOnRleHQ+TG9va2luZyBmb3IgdmFyaWFibGVzIGluIHN5bWJvbHMueG1sPC94c2w6dGV4dD4KLSAgICA8L3hzbDptZXNzYWdlPgotICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iL2FwaS9zeW1ib2xzL3ZhcmlhYmxlIi8+Ci0gICAgPHhzbDptZXNzYWdlIHRlcm1pbmF0ZT0ibm8iPgotICAgICAgPHhzbDp0ZXh0PkZvdW5kIDwveHNsOnRleHQ+Ci0gICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoL2FwaS9zeW1ib2xzL3ZhcmlhYmxlKSIvPgotICAgICAgPHhzbDp0ZXh0PiB2YXJpYWJsZXM8L3hzbDp0ZXh0PgotICAgIDwveHNsOm1lc3NhZ2U+Ci0gIDwveHNsOnRlbXBsYXRlPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZ1bmN0aW9ufHZhcmlhYmxlIj4KLSAgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im5hbWUiIHNlbGVjdD0iQG5hbWUiLz4KLSAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InN5bWJvbCIKLSAgICAgICAgc2VsZWN0PSIkc3ltcy9zeW1ib2xzL3JlbGVhc2Uvc3ltYm9sWy4gPSAkbmFtZV0iLz4KLSAgICA8eHNsOmlmIHRlc3Q9InN0cmluZygkc3ltYm9sKSAhPSAkbmFtZSI+Ci0gICAgICA8eHNsOm1lc3NhZ2UgdGVybWluYXRlPSJ5ZXMiPgotICAgICAgICA8eHNsOnRleHQ+RmFpbGVkIHRvIGZpbmQgZXhwb3J0IGluIHN5bWJvbHMueG1sOiA8L3hzbDp0ZXh0PgotICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG5hbWUiLz4KLSAgICAgIDwveHNsOm1lc3NhZ2U+Ci0gICAgPC94c2w6aWY+Ci0gIDwveHNsOnRlbXBsYXRlPgotCi08L3hzbDpzdHlsZXNoZWV0PgotCmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9odG1sLnhzbCBiL2RvYy9kZXZoZWxwL2h0bWwueHNsCmluZGV4IGI2NThmNjcuLjNmY2U5MzggMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2h0bWwueHNsCisrKyBiL2RvYy9kZXZoZWxwL2h0bWwueHNsCkBAIC0xNCw2ICsxNCwyMCBAQAogICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRyZWYiPgogICAgICAgICA8YSBocmVmPSJsaWJ4bWwyLXskcmVmL0BmaWxlfS5odG1sI3skcmVmL0BuYW1lfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0b2tlbiIvPjwvYT4KICAgICAgIDwveHNsOndoZW4+CisgICAgICA8IS0tIFRPRE86IFRoaXMgaGFjayBvbmx5IHdvcmtzIGZvciB0b2tlbnMgZm9sbG93ZWQgYnkgYSBwZXJpb2QuIC0tPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnN0cmluZygkdG9rZW4sIHN0cmluZy1sZW5ndGgoJHRva2VuKSkgPSAnLiciPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InRva2VuMiIgc2VsZWN0PSJzdWJzdHJpbmcoJHRva2VuLCAxLCBzdHJpbmctbGVuZ3RoKCR0b2tlbikgLSAxKSIvPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlZjIiIHNlbGVjdD0ia2V5KCdzeW1ib2xzJywgJHRva2VuMikiLz4KKyAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRyZWYyIj4KKyAgICAgICAgICAgIDxhIGhyZWY9ImxpYnhtbDIteyRyZWYyL0BmaWxlfS5odG1sI3skcmVmMi9AbmFtZX0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdG9rZW4yIi8+PC9hPgorICAgICAgICAgICAgPHhzbDp0ZXh0Pi48L3hzbDp0ZXh0PgorICAgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRva2VuIi8+CisgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICA8L3hzbDp3aGVuPgogICAgICAgPHhzbDpvdGhlcndpc2U+CiAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdG9rZW4iLz4KICAgICAgIDwveHNsOm90aGVyd2lzZT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDItSFRNTHBhcnNlci5odG1sIGIvZG9jL2RldmhlbHAvbGlieG1sMi1IVE1McGFyc2VyLmh0bWwKaW5kZXggMTIzNjJiNC4uNWI3ODY1ZiAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi1IVE1McGFyc2VyLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi1IVE1McGFyc2VyLmh0bWwKQEAgLTQyLDkgKzQyLDEwIEBACiBpbnQJPGEgaHJlZj0iI1VURjhUb0h0bWwiPlVURjhUb0h0bWw8L2E+CQkJKHVuc2lnbmVkIGNoYXIgKiBvdXQsIDxicj4JCQkJCSBpbnQgKiBvdXRsZW4sIDxicj4JCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICogaW4sIDxicj4JCQkJCSBpbnQgKiBpbmxlbik7CiA8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sU3RhdHVzIj5odG1sU3RhdHVzPC9hPgk8YSBocmVmPSIjaHRtbEF0dHJBbGxvd2VkIj5odG1sQXR0ckFsbG93ZWQ8L2E+CQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbEVsZW1EZXNjIj5odG1sRWxlbURlc2M8L2E+ICogZWx0LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGF0dHIsIDxicj4JCQkJCSBpbnQgbGVnYWN5KTsKIGludAk8YSBocmVmPSIjaHRtbEF1dG9DbG9zZVRhZyI+aHRtbEF1dG9DbG9zZVRhZzwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sRG9jUHRyIj5odG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxOb2RlUHRyIj5odG1sTm9kZVB0cjwvYT4gZWxlbSk7Cis8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+CTxhIGhyZWY9IiNodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQiPmh0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dDwvYT4JKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgPGJyPgkJCQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nKTsKIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI2h0bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0Ij5odG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dDwvYT4JKGNvbnN0IGNoYXIgKiBidWZmZXIsIDxicj4JCQkJCQkJIGludCBzaXplKTsKIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI2h0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCI+aHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0PC9hPgkoPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbFNBWEhhbmRsZXJQdHIiPmh0bWxTQVhIYW5kbGVyUHRyPC9hPiBzYXgsIDxicj4JCQkJCQkJIHZvaWQgKiB1c2VyX2RhdGEsIDxicj4JCQkJCQkJIGNvbnN0IGNoYXIgKiBjaHVuaywgPGJyPgkJCQkJCQkgaW50IHNpemUsIDxicj4JCQkJCQkJIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiBlbmMpOwotPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbERvY1B0ciI+aHRtbERvY1B0cjwvYT4JPGEgaHJlZj0iI2h0bWxDdHh0UmVhZERvYyI+aHRtbEN0eHRSZWFkRG9jPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjdXIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOworPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbERvY1B0ciI+aHRtbERvY1B0cjwvYT4JPGEgaHJlZj0iI2h0bWxDdHh0UmVhZERvYyI+aHRtbEN0eHRSZWFkRG9jPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbERvY1B0ciI+aHRtbERvY1B0cjwvYT4JPGEgaHJlZj0iI2h0bWxDdHh0UmVhZEZkIj5odG1sQ3R4dFJlYWRGZDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBpbnQgZmQsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbERvY1B0ciI+aHRtbERvY1B0cjwvYT4JPGEgaHJlZj0iI2h0bWxDdHh0UmVhZEZpbGUiPmh0bWxDdHh0UmVhZEZpbGU8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZmlsZW5hbWUsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk7CiA8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sRG9jUHRyIj5odG1sRG9jUHRyPC9hPgk8YSBocmVmPSIjaHRtbEN0eHRSZWFkSU8iPmh0bWxDdHh0UmVhZElPPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dFJlYWRDYWxsYmFjayI+eG1sSW5wdXRSZWFkQ2FsbGJhY2s8L2E+IGlvcmVhZCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dENsb3NlQ2FsbGJhY2siPnhtbElucHV0Q2xvc2VDYWxsYmFjazwvYT4gaW9jbG9zZSwgPGJyPgkJCQkJIHZvaWQgKiBpb2N0eCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBVUkwsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk7CkBAIC01OCw5ICs1OSwxMSBAQAogY29uc3QgPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbEVudGl0eURlc2MiPmh0bWxFbnRpdHlEZXNjPC9hPiAqCTxhIGhyZWY9IiNodG1sRW50aXR5VmFsdWVMb29rdXAiPmh0bWxFbnRpdHlWYWx1ZUxvb2t1cDwvYT4JKHVuc2lnbmVkIGludCB2YWx1ZSk7CiB2b2lkCTxhIGhyZWY9IiNodG1sRnJlZVBhcnNlckN0eHQiPmh0bWxGcmVlUGFyc2VyQ3R4dDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpOwogaW50CTxhIGhyZWY9IiNodG1sSGFuZGxlT21pdHRlZEVsZW0iPmh0bWxIYW5kbGVPbWl0dGVkRWxlbTwvYT4JCShpbnQgdmFsKTsKK3ZvaWQJPGEgaHJlZj0iI2h0bWxJbml0QXV0b0Nsb3NlIj5odG1sSW5pdEF1dG9DbG9zZTwvYT4JCSh2b2lkKTsKIGludAk8YSBocmVmPSIjaHRtbElzQXV0b0Nsb3NlZCI+aHRtbElzQXV0b0Nsb3NlZDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sRG9jUHRyIj5odG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sTm9kZVB0ciI+aHRtbE5vZGVQdHI8L2E+IGVsZW0pOwogaW50CTxhIGhyZWY9IiNodG1sSXNTY3JpcHRBdHRyaWJ1dGUiPmh0bWxJc1NjcmlwdEF0dHJpYnV0ZTwvYT4JCShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk7CiA8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+CTxhIGhyZWY9IiNodG1sTmV3UGFyc2VyQ3R4dCI+aHRtbE5ld1BhcnNlckN0eHQ8L2E+CSh2b2lkKTsKKzxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI2h0bWxOZXdTQVhQYXJzZXJDdHh0Ij5odG1sTmV3U0FYUGFyc2VyQ3R4dDwvYT4JKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxTQVhIYW5kbGVyIj5odG1sU0FYSGFuZGxlcjwvYT4gKiBzYXgsIDxicj4JCQkJCQkgdm9pZCAqIHVzZXJEYXRhKTsKIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxTdGF0dXMiPmh0bWxTdGF0dXM8L2E+CTxhIGhyZWY9IiNodG1sTm9kZVN0YXR1cyI+aHRtbE5vZGVTdGF0dXM8L2E+CQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbE5vZGVQdHIiPmh0bWxOb2RlUHRyPC9hPiBub2RlLCA8YnI+CQkJCQkgaW50IGxlZ2FjeSk7CiBpbnQJPGEgaHJlZj0iI2h0bWxQYXJzZUNoYXJSZWYiPmh0bWxQYXJzZUNoYXJSZWY8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbFBhcnNlckN0eHRQdHIiPmh0bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTsKIGludAk8YSBocmVmPSIjaHRtbFBhcnNlQ2h1bmsiPmh0bWxQYXJzZUNodW5rPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBjb25zdCBjaGFyICogY2h1bmssIDxicj4JCQkJCSBpbnQgc2l6ZSwgPGJyPgkJCQkJIGludCB0ZXJtaW5hdGUpOwpAQCAtMzg1LDYgKzM4OCwzMSBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9Imh0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCI+PC9hPmh0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbFBhcnNlckN0eHRQdHIiPmh0bWxQYXJzZXJDdHh0UHRyPC9hPglodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQJKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgPGJyPgkJCQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nKTxicj4KKzwvcHJlPgorPHA+Q3JlYXRlIGEgcGFyc2VyIGNvbnRleHQgZm9yIGEgZmlsZSBjb250ZW50LiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmZpbGVuYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoZSBmaWxlbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZW5jb2Rpbmc8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+YSBmcmVlIGZvcm0gQyBzdHJpbmcgZGVzY3JpYmluZyB0aGUgSFRNTCBkb2N1bWVudCBlbmNvZGluZywgb3IgTlVMTDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgbmV3IHBhcnNlciBjb250ZXh0IG9yIE5VTEw8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0iaHRtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQiPjwvYT5odG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbFBhcnNlckN0eHRQdHIiPmh0bWxQYXJzZXJDdHh0UHRyPC9hPglodG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dAkoY29uc3QgY2hhciAqIGJ1ZmZlciwgPGJyPgkJCQkJCQkgaW50IHNpemUpPGJyPgogPC9wcmU+CkBAIC00NTIsNyArNDgwLDcgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJodG1sQ3R4dFJlYWREb2MiPjwvYT5odG1sQ3R4dFJlYWREb2MgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxEb2NQdHIiPmh0bWxEb2NQdHI8L2E+CWh0bWxDdHh0UmVhZERvYwkJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjdXIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxEb2NQdHIiPmh0bWxEb2NQdHI8L2E+CWh0bWxDdHh0UmVhZERvYwkJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpPGJyPgogPC9wcmU+CiA8cD5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50IGFuZCBidWlsZCBhIHRyZWUuIFRoaXMgcmV1c2VzIHRoZSBleGlzdGluZyBAY3R4dCBwYXJzZXIgY29udGV4dDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CkBAIC00NjMsNyArNDkxLDcgQEAKIDx0ZD5hbiBIVE1MIHBhcnNlciBjb250ZXh0PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5jdXI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5zdHI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+CiA8dGQ+YSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZzwvdGQ+CiA8L3RyPgogPHRyPgpAQCAtODUwLDYgKzg3OCwxNCBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9Imh0bWxJbml0QXV0b0Nsb3NlIj48L2E+aHRtbEluaXRBdXRvQ2xvc2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJaHRtbEluaXRBdXRvQ2xvc2UJCSh2b2lkKTxicj4KKzwvcHJlPgorPHA+REVQUkVDQVRFRDogVGhpcyBpcyBhIG5vLW9wLjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9Imh0bWxJc0F1dG9DbG9zZWQiPjwvYT5odG1sSXNBdXRvQ2xvc2VkICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJaHRtbElzQXV0b0Nsb3NlZAkJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxEb2NQdHIiPmh0bWxEb2NQdHI8L2E+IGRvYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxOb2RlUHRyIj5odG1sTm9kZVB0cjwvYT4gZWxlbSk8YnI+CiA8L3ByZT4KQEAgLTkxMSw2ICs5NDcsMzEgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Cis8YSBuYW1lPSJodG1sTmV3U0FYUGFyc2VyQ3R4dCI+PC9hPmh0bWxOZXdTQVhQYXJzZXJDdHh0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+CWh0bWxOZXdTQVhQYXJzZXJDdHh0CShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sU0FYSGFuZGxlciI+aHRtbFNBWEhhbmRsZXI8L2E+ICogc2F4LCA8YnI+CQkJCQkJIHZvaWQgKiB1c2VyRGF0YSk8YnI+Cis8L3ByZT4KKzxwPkFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFNBWCBwYXJzZXIgY29udGV4dC4gSWYgdXNlckRhdGEgaXMgTlVMTCwgdGhlIHBhcnNlciBjb250ZXh0IHdpbGwgYmUgcGFzc2VkIGFzIHVzZXIgZGF0YS48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5zYXg8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+U0FYIGhhbmRsZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnVzZXJEYXRhPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnVzZXIgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbFBhcnNlckN0eHRQdHIiPmh0bWxQYXJzZXJDdHh0UHRyPC9hPiBvciBOVUxMIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBlcnJvcjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+CiA8YSBuYW1lPSJodG1sTm9kZVN0YXR1cyI+PC9hPmh0bWxOb2RlU3RhdHVzICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sU3RhdHVzIj5odG1sU3RhdHVzPC9hPglodG1sTm9kZVN0YXR1cwkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxOb2RlUHRyIj5odG1sTm9kZVB0cjwvYT4gbm9kZSwgPGJyPgkJCQkJIGludCBsZWdhY3kpPGJyPgogPC9wcmU+CkBAIC05MzksNyArMTAwMCw3IEBACiA8YSBuYW1lPSJodG1sUGFyc2VDaGFyUmVmIj48L2E+aHRtbFBhcnNlQ2hhclJlZiAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CWh0bWxQYXJzZUNoYXJSZWYJCSg8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBSZWZlcmVuY2UgZGVjbGFyYXRpb25zIFs2Nl0gQ2hhclJlZiA6Oj0gJyZhbXA7IycgWzAtOV0rICc7JyB8ICcmYW1wOyN4JyBbMC05YS1mQS1GXSsgJzsnPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgUmVmZXJlbmNlIGRlY2xhcmF0aW9ucyBbNjZdIENoYXJSZWYgOjo9ICcmYW1wOyMnIFswLTldKyAnOycgfCAnJmFtcDsjeCcgWzAtOWEtZkEtRl0rICc7JzwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTEwNDAsNyArMTEwMSw3IEBACiA8YSBuYW1lPSJodG1sUGFyc2VFbGVtZW50Ij48L2E+aHRtbFBhcnNlRWxlbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAlodG1sUGFyc2VFbGVtZW50CQkoPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbFBhcnNlckN0eHRQdHIiPmh0bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gSFRNTCBlbGVtZW50LCB0aGlzIGlzIGhpZ2hseSByZWN1cnNpdmUgdGhpcyBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgY29kZSB2ZXJzaW9ucyBbMzldIGVsZW1lbnQgOjo9IEVtcHR5RWxlbVRhZyB8IFNUYWcgY29udGVudCBFVGFnIFs0MV0gQXR0cmlidXRlIDo6PSBOYW1lIEVxIEF0dFZhbHVlPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgYW4gSFRNTCBlbGVtZW50LCB0aGlzIGlzIGhpZ2hseSByZWN1cnNpdmUgdGhpcyBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgY29kZSB2ZXJzaW9ucyBbMzldIGVsZW1lbnQgOjo9IEVtcHR5RWxlbVRhZyB8IFNUYWcgY29udGVudCBFVGFnIFs0MV0gQXR0cmlidXRlIDo6PSBOYW1lIEVxIEF0dFZhbHVlPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5Pjx0cj4KQEAgLTEwNTUsNyArMTExNiw3IEBACiA8YSBuYW1lPSJodG1sUGFyc2VFbnRpdHlSZWYiPjwvYT5odG1sUGFyc2VFbnRpdHlSZWYgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxFbnRpdHlEZXNjIj5odG1sRW50aXR5RGVzYzwvYT4gKglodG1sUGFyc2VFbnRpdHlSZWYJKDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoqIHN0cik8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIEhUTUwgRU5USVRZIHJlZmVyZW5jZXMgWzY4XSBFbnRpdHlSZWYgOjo9ICcmYW1wOycgTmFtZSAnOyc8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSBhbiBIVE1MIEVOVElUWSByZWZlcmVuY2VzIFs2OF0gRW50aXR5UmVmIDo6PSAnJmFtcDsnIE5hbWUgJzsnPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTI3OCw3ICsxMzM5LDcgQEAKIDxhIG5hbWU9Imh0bWxTQVhQYXJzZURvYyI+PC9hPmh0bWxTQVhQYXJzZURvYyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbERvY1B0ciI+aHRtbERvY1B0cjwvYT4JaHRtbFNBWFBhcnNlRG9jCQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1ciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxTQVhIYW5kbGVyUHRyIj5odG1sU0FYSGFuZGxlclB0cjwvYT4gc2F4LCA8YnI+CQkJCQkgdm9pZCAqIHVzZXJEYXRhKTxicj4KIDwvcHJlPgotPHA+UGFyc2UgYW4gSFRNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIElmIHNheCBpcyBub3QgTlVMTCwgdXNlIHRoZSBTQVggY2FsbGJhY2tzIHRvIGhhbmRsZSBwYXJzZSBldmVudHMuIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gYmVoYXZpb3IgYW5kIHJldHVybiBhIHRyZWUuPC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxOZXdTQVhQYXJzZXJDdHh0Ij5odG1sTmV3U0FYUGFyc2VyQ3R4dDwvYT4gYW5kIDxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxDdHh0UmVhZERvYyI+aHRtbEN0eHRSZWFkRG9jPC9hPi4gUGFyc2UgYW4gSFRNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIElmIHNheCBpcyBub3QgTlVMTCwgdXNlIHRoZSBTQVggY2FsbGJhY2tzIHRvIGhhbmRsZSBwYXJzZSBldmVudHMuIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gYmVoYXZpb3IgYW5kIHJldHVybiBhIHRyZWUuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTMxMiw3ICsxMzczLDcgQEAKIDxhIG5hbWU9Imh0bWxTQVhQYXJzZUZpbGUiPjwvYT5odG1sU0FYUGFyc2VGaWxlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sRG9jUHRyIj5odG1sRG9jUHRyPC9hPglodG1sU0FYUGFyc2VGaWxlCShjb25zdCBjaGFyICogZmlsZW5hbWUsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sU0FYSGFuZGxlclB0ciI+aHRtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJIHZvaWQgKiB1c2VyRGF0YSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIEhUTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLiBJdCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbE5ld1NBWFBhcnNlckN0eHQiPmh0bWxOZXdTQVhQYXJzZXJDdHh0PC9hPiBhbmQgPGEgaHJlZj0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbEN0eHRSZWFkRmlsZSI+aHRtbEN0eHRSZWFkRmlsZTwvYT4uIHBhcnNlIGFuIEhUTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLiBJdCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLUhUTUx0cmVlLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLUhUTUx0cmVlLmh0bWwKaW5kZXggMjAzY2IzOC4uN2U2MGFiNiAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi1IVE1MdHJlZS5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDItSFRNTHRyZWUuaHRtbApAQCAtMjUwLDcgKzI1MCw3IEBACiA8YSBuYW1lPSJodG1sSXNCb29sZWFuQXR0ciI+PC9hPmh0bWxJc0Jvb2xlYW5BdHRyICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJaHRtbElzQm9vbGVhbkF0dHIJCShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk8YnI+CiA8L3ByZT4KLTxwPkRldGVybWluZSBpZiBhIGdpdmVuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUuPC9wPgorPHA+RGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gaXMgYSBib29sZWFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDItU0FYLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLVNBWC5odG1sCmluZGV4IGI4N2E2ZTYuLjYzMjgzNmMgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDItU0FYLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi1TQVguaHRtbApAQCAtODI3LDcgKzgyNyw3IEBACiA8YSBuYW1lPSJzZXREb2N1bWVudExvY2F0b3IiPjwvYT5zZXREb2N1bWVudExvY2F0b3IgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJc2V0RG9jdW1lbnRMb2NhdG9yCQkodm9pZCAqIGN0eCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWExvY2F0b3JQdHIiPnhtbFNBWExvY2F0b3JQdHI8L2E+IGxvYyk8YnI+CiA8L3ByZT4KLTxwPlJlY2VpdmUgdGhlIGRvY3VtZW50IGxvY2F0b3IgYXQgc3RhcnR1cCwgYWN0dWFsbHkgPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sRGVmYXVsdFNBWExvY2F0b3IiPnhtbERlZmF1bHRTQVhMb2NhdG9yPC9hPiBFdmVyeXRoaW5nIGlzIGF2YWlsYWJsZSBvbiB0aGUgY29udGV4dCwgc28gdGhpcyBpcyB1c2VsZXNzIGluIG91ciBjYXNlLiBERVBSRUNBVEVEPC9wPgorPHA+UmVjZWl2ZSB0aGUgZG9jdW1lbnQgbG9jYXRvciBhdCBzdGFydHVwLCBhY3R1YWxseSB4bWxEZWZhdWx0U0FYTG9jYXRvciBFdmVyeXRoaW5nIGlzIGF2YWlsYWJsZSBvbiB0aGUgY29udGV4dCwgc28gdGhpcyBpcyB1c2VsZXNzIGluIG91ciBjYXNlLiBERVBSRUNBVEVEPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi1TQVgyLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLVNBWDIuaHRtbAppbmRleCAxNzA0MjNjLi45ZDRlMmM2IDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLVNBWDIuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLVNBWDIuaHRtbApAQCAtNjksNyArNjksNyBAQAogPGEgbmFtZT0iaHRtbERlZmF1bHRTQVhIYW5kbGVySW5pdCI+PC9hPmh0bWxEZWZhdWx0U0FYSGFuZGxlckluaXQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJaHRtbERlZmF1bHRTQVhIYW5kbGVySW5pdAkodm9pZCk8YnI+CiA8L3ByZT4KLTxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPiB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IFNBWCBoYW5kbGVyPC9wPgorPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4gdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC03Nyw3ICs3Nyw3IEBACiA8YSBuYW1lPSJ4bWxEZWZhdWx0U0FYSGFuZGxlckluaXQiPjwvYT54bWxEZWZhdWx0U0FYSGFuZGxlckluaXQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0CSh2b2lkKTxicj4KIDwvcHJlPgotPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEluaXRQYXJzZXIiPnhtbEluaXRQYXJzZXI8L2E+IHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgU0FYMiBoYW5kbGVyPC9wPgorPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4gdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4gSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBTQVgyIGhhbmRsZXI8L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC03NTAsNyArNzUwLDcgQEAKIDxhIG5hbWU9InhtbFNBWDJTZXREb2N1bWVudExvY2F0b3IiPjwvYT54bWxTQVgyU2V0RG9jdW1lbnRMb2NhdG9yICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFNBWDJTZXREb2N1bWVudExvY2F0b3IJKHZvaWQgKiBjdHgsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhMb2NhdG9yUHRyIj54bWxTQVhMb2NhdG9yUHRyPC9hPiBsb2MpPGJyPgogPC9wcmU+Ci08cD5SZWNlaXZlIHRoZSBkb2N1bWVudCBsb2NhdG9yIGF0IHN0YXJ0dXAsIGFjdHVhbGx5IDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlZmF1bHRTQVhMb2NhdG9yIj54bWxEZWZhdWx0U0FYTG9jYXRvcjwvYT4gRXZlcnl0aGluZyBpcyBhdmFpbGFibGUgb24gdGhlIGNvbnRleHQsIHNvIHRoaXMgaXMgdXNlbGVzcyBpbiBvdXIgY2FzZS48L3A+Cis8cD5SZWNlaXZlIHRoZSBkb2N1bWVudCBsb2NhdG9yIGF0IHN0YXJ0dXAsIGFjdHVhbGx5IHhtbERlZmF1bHRTQVhMb2NhdG9yIEV2ZXJ5dGhpbmcgaXMgYXZhaWxhYmxlIG9uIHRoZSBjb250ZXh0LCBzbyB0aGlzIGlzIHVzZWxlc3MgaW4gb3VyIGNhc2UuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtODkzLDcgKzg5Myw3IEBACiA8YSBuYW1lPSJ4bWxTQVhEZWZhdWx0VmVyc2lvbiI+PC9hPnhtbFNBWERlZmF1bHRWZXJzaW9uICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sU0FYRGVmYXVsdFZlcnNpb24JCShpbnQgdmVyc2lvbik8YnI+CiA8L3ByZT4KLTxwPlNldCB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mIFNBWCB1c2VkIGdsb2JhbGx5IGJ5IHRoZSBsaWJyYXJ5LiBCeSBkZWZhdWx0LCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdGhlIGRlZmF1bHQgaXMgc2V0IHRvIDIuIE5vdGUgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYSBiZXR0ZXIgY29kaW5nIHN0eWxlIHRvIHVzZSB4bWxTQVhWZXJzaW9uKCkgdG8gc2V0IHVwIHRoZSB2ZXJzaW9uIGV4cGxpY2l0bHkgZm9yIGEgZ2l2ZW4gcGFyc2luZyBjb250ZXh0LjwvcD4KKzxwPkRFUFJFQ0FURUQ6IFVzZSBwYXJzZXIgb3B0aW9uIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjWE1MX1BBUlNFX1NBWDEiPlhNTF9QQVJTRV9TQVgxPC9hPi4gU2V0IHRoZSBkZWZhdWx0IHZlcnNpb24gb2YgU0FYIHVzZWQgZ2xvYmFsbHkgYnkgdGhlIGxpYnJhcnkuIEJ5IGRlZmF1bHQsIGR1cmluZyBpbml0aWFsaXphdGlvbiB0aGUgZGVmYXVsdCBpcyBzZXQgdG8gMi4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhIGJldHRlciBjb2Rpbmcgc3R5bGUgdG8gdXNlIHhtbFNBWFZlcnNpb24oKSB0byBzZXQgdXAgdGhlIHZlcnNpb24gZXhwbGljaXRseSBmb3IgYSBnaXZlbiBwYXJzaW5nIGNvbnRleHQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi1kaWN0Lmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLWRpY3QuaHRtbAppbmRleCA1YTJjODgzLi5kMmE1NmMxIDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLWRpY3QuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLWRpY3QuaHRtbApAQCAtNjYsNyArNjYsNyBAQAogPGEgbmFtZT0ieG1sRGljdENsZWFudXAiPjwvYT54bWxEaWN0Q2xlYW51cCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxEaWN0Q2xlYW51cAkJCSh2b2lkKTxicj4KIDwvcHJlPgotPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbid0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuIEZyZWUgdGhlIGRpY3Rpb25hcnkgbXV0ZXguIERvIG5vdCBjYWxsIHVubGVzcyBzdXJlIHRoZSBsaWJyYXJ5IGlzIG5vdCBpbiB1c2UgYW55bW9yZSAhPC9wPgorPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJ3QgaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC0xMTAsNyArMTEwLDcgQEAKIDxhIG5hbWU9InhtbERpY3RFeGlzdHMiPjwvYT54bWxEaWN0RXhpc3RzICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJeG1sRGljdEV4aXN0cwkJKDxhIGhyZWY9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RQdHIiPnhtbERpY3RQdHI8L2E+IGRpY3QsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGludCBsZW4pPGJyPgogPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgQG5hbWUgZXhpc3RzIGluIHRoZSBkaWN0aW9uYXJ5IEBkaWN0LjwvcD4KKzxwPkNoZWNrIGlmIGEgc3RyaW5nIGV4aXN0cyBpbiB0aGUgZGljdGlvbmFyeS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNzUsMjUgKzE3NSwyNSBAQAogPGEgbmFtZT0ieG1sRGljdExvb2t1cCI+PC9hPnhtbERpY3RMb29rdXAgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxEaWN0TG9va3VwCQkoPGEgaHJlZj0ibGlieG1sMi1kaWN0Lmh0bWwjeG1sRGljdFB0ciI+eG1sRGljdFB0cjwvYT4gZGljdCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgaW50IGxlbik8YnI+CiA8L3ByZT4KLTxwPkFkZCB0aGUgQG5hbWUgdG8gdGhlIGRpY3Rpb25hcnkgQGRpY3QgaWYgbm90IHByZXNlbnQuPC9wPgorPHA+TG9va3VwIGEgc3RyaW5nIGFuZCBhZGQgaXQgdG8gdGhlIGRpY3Rpb25hcnkgaWYgaXQgd2Fzbid0IGZvdW5kLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmRpY3Q8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGRpY3Rpb25hcnk8L3RkPgorPHRkPmRpY3Rpb25hcnk8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD5zdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5sZW48L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGxlbmd0aCBvZiB0aGUgbmFtZSwgaWYgLTEgaXQgaXMgcmVjb21wdXRlZDwvdGQ+Cis8dGQ+bGVuZ3RoIG9mIHRoZSBrZXksIGlmIC0xIGl0IGlzIHJlY29tcHV0ZWQ8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGludGVybmFsIGNvcHkgb2YgdGhlIG5hbWUgb3IgTlVMTCBpbiBjYXNlIG9mIGludGVybmFsIGVycm9yPC90ZD4KKzx0ZD50aGUgaW50ZXJuZWQgY29weSBvZiB0aGUgc3RyaW5nIG9yIE5VTEwgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTIyOSw3ICsyMjksNyBAQAogPGEgbmFtZT0ieG1sRGljdFFMb29rdXAiPjwvYT54bWxEaWN0UUxvb2t1cCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbERpY3RRTG9va3VwCQkoPGEgaHJlZj0ibGlieG1sMi1kaWN0Lmh0bWwjeG1sRGljdFB0ciI+eG1sRGljdFB0cjwvYT4gZGljdCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk8YnI+CiA8L3ByZT4KLTxwPkFkZCB0aGUgUU5hbWUgQHByZWZpeDpAbmFtZSB0byB0aGUgaGFzaCBAZGljdCBpZiBub3QgcHJlc2VudC48L3A+Cis8cD5Mb29rdXAgdGhlIFFOYW1lIEBwcmVmaXg6QG5hbWUgYW5kIGFkZCBpdCB0byB0aGUgZGljdGlvbmFyeSBpZiBpdCB3YXNuJ3QgZm91bmQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjQ3LDcgKzI0Nyw3IEBACiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaW50ZXJuYWwgY29weSBvZiB0aGUgUU5hbWUgb3IgTlVMTCBpbiBjYXNlIG9mIGludGVybmFsIGVycm9yPC90ZD4KKzx0ZD50aGUgaW50ZXJuZWQgY29weSBvZiB0aGUgc3RyaW5nIG9yIE5VTEwgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTMyNSwxMiArMzI1LDEyIEBACiA8YSBuYW1lPSJ4bWxJbml0aWFsaXplRGljdCI+PC9hPnhtbEluaXRpYWxpemVEaWN0ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSW5pdGlhbGl6ZURpY3QJCSh2b2lkKTxicj4KIDwvcHJlPgotPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEluaXRQYXJzZXIiPnhtbEluaXRQYXJzZXI8L2E+IHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuIERvIHRoZSBkaWN0aW9uYXJ5IG11dGV4IGluaXRpYWxpemF0aW9uLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEFsaWFzIGZvciA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEluaXRQYXJzZXIiPnhtbEluaXRQYXJzZXI8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgaWYgaW5pdGlhbGl6YXRpb24gd2FzIGFscmVhZHkgZG9uZSwgYW5kIDEgaWYgdGhhdCBjYWxsIGxlZCB0byB0aGUgaW5pdGlhbGl6YXRpb248L3RkPgorPHRkPjAuPC90ZD4KIDwvdHI+PC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDItZW5jb2RpbmcuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItZW5jb2RpbmcuaHRtbAppbmRleCA5NGQ3MDU3Li4zOTc4MjQ3IDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLWVuY29kaW5nLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi1lbmNvZGluZy5odG1sCkBAIC0yMiw3ICsyMiw4IEBACiA8cD5BdXRob3Iocyk6IERhbmllbCBWZWlsbGFyZCA8L3A+CiA8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+CiA8aDI+U3lub3BzaXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPnR5cGVkZWYgZW51bSA8YSBocmVmPSIjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+OworPHByZSBjbGFzcz0ic3lub3BzaXMiPnR5cGVkZWYgZW51bSA8YSBocmVmPSIjeG1sQ2hhckVuY0Vycm9yIj54bWxDaGFyRW5jRXJyb3I8L2E+OwordHlwZWRlZiBlbnVtIDxhIGhyZWY9IiN4bWxDaGFyRW5jb2RpbmciPnhtbENoYXJFbmNvZGluZzwvYT47CiB0eXBlZGVmIHN0cnVjdCBfeG1sQ2hhckVuY29kaW5nSGFuZGxlciA8YSBocmVmPSIjeG1sQ2hhckVuY29kaW5nSGFuZGxlciI+eG1sQ2hhckVuY29kaW5nSGFuZGxlcjwvYT47CiB0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyPC9hPiAqIDxhIGhyZWY9IiN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPjsKIGludAk8YSBocmVmPSIjVVRGOFRvaXNvbGF0MSI+VVRGOFRvaXNvbGF0MTwvYT4JCQkodW5zaWduZWQgY2hhciAqIG91dCwgPGJyPgkJCQkJIGludCAqIG91dGxlbiwgPGJyPgkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBpbiwgPGJyPgkJCQkJIGludCAqIGlubGVuKTsKQEAgLTU0LDYgKzU1LDIxIEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9InhtbENoYXJFbmNFcnJvciI+RW51bSA8L2E+eG1sQ2hhckVuY0Vycm9yPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbnVtIDxhIGhyZWY9IiN4bWxDaGFyRW5jRXJyb3IiPnhtbENoYXJFbmNFcnJvcjwvYT4geworICAgIDxhIG5hbWU9IlhNTF9FTkNfRVJSX01FTU9SWSI+WE1MX0VOQ19FUlJfTUVNT1JZPC9hPiA9IC01CisgICAgPGEgbmFtZT0iWE1MX0VOQ19FUlJfSU5URVJOQUwiPlhNTF9FTkNfRVJSX0lOVEVSTkFMPC9hPiA9IC00CisgICAgPGEgbmFtZT0iWE1MX0VOQ19FUlJfUEFSVElBTCI+WE1MX0VOQ19FUlJfUEFSVElBTDwvYT4gPSAtMworICAgIDxhIG5hbWU9IlhNTF9FTkNfRVJSX0lOUFVUIj5YTUxfRU5DX0VSUl9JTlBVVDwvYT4gPSAtMgorICAgIDxhIG5hbWU9IlhNTF9FTkNfRVJSX1NQQUNFIj5YTUxfRU5DX0VSUl9TUEFDRTwvYT4gPSAtMQorICAgIDxhIG5hbWU9IlhNTF9FTkNfRVJSX1NVQ0NFU1MiPlhNTF9FTkNfRVJSX1NVQ0NFU1M8L2E+ID0gMAorfTsKKzwvcHJlPgorPHA+PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0ieG1sQ2hhckVuY29kaW5nIj5FbnVtIDwvYT54bWxDaGFyRW5jb2Rpbmc8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmVudW0gPGEgaHJlZj0iI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiB7CiAgICAgPGEgbmFtZT0iWE1MX0NIQVJfRU5DT0RJTkdfRVJST1IiPlhNTF9DSEFSX0VOQ09ESU5HX0VSUk9SPC9hPiA9IC0xIC8qIE5vIGNoYXIgZW5jb2RpbmcgZGV0ZWN0ZWQgKi8KQEAgLTIwMiw3ICsyMTgsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGlmIHN1Y2Nlc3MsIC0yIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscywgb3IgLTEgb3RoZXJ3aXNlIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4gVGhlIHZhbHVlIG9mIEBvdXRsZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHByb2R1Y2VkLjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4gVGhlIHZhbHVlIG9mIEBvdXRsZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHByb2R1Y2VkLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0yMzUsNyArMjUxLDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpZiBzdWNjZXNzLCBvciAtMSBvdGhlcndpc2UgVGhlIHZhbHVlIG9mIEBpbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuPC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4gVGhlIHZhbHVlIG9mIEBpbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTI5Miw3ICszMDgsNyBAQAogPGEgbmFtZT0ieG1sQ2hhckVuY0ZpcnN0TGluZSI+PC9hPnhtbENoYXJFbmNGaXJzdExpbmUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxDaGFyRW5jRmlyc3RMaW5lCQkoPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXI8L2E+ICogaGFuZGxlciwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlclB0ciI+eG1sQnVmZmVyUHRyPC9hPiBvdXQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJQdHIiPnhtbEJ1ZmZlclB0cjwvYT4gaW4pPGJyPgogPC9wcmU+Ci08cD5Gcm9udC1lbmQgZm9yIHRoZSBlbmNvZGluZyBoYW5kbGVyIGlucHV0IGZ1bmN0aW9uLCBidXQgaGFuZGxlIG9ubHkgdGhlIHZlcnkgZmlyc3QgbGluZSwgaS5lLiBsaW1pdCBpdHNlbGYgdG8gNDUgY2hhcnMuPC9wPgorPHA+REVQRVJFQ0FURUQ6IERvbid0IHVzZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0zMTAsNyArMzI2LDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yIC0xIGdlbmVyYWwgZXJyb3IgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChmb3IgKmluIGlzIG5vdCB2YWxpZCB1dGY4IHN0cmluZyBvciB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3I8L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0zMzksNyArMzU1LDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yIC0xIGdlbmVyYWwgZXJyb3IgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChmb3IgKmluIGlzIG5vdCB2YWxpZCB1dGY4IHN0cmluZyBvciB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3I8L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0zNjgsNyArMzg0LDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yIC0xIGdlbmVyYWwgZXJyb3IgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChmb3IgKmluIGlzIG5vdCB2YWxpZCB1dGY4IHN0cmluZyBvciB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3I8L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC00NDEsNyArNDU3LDcgQEAKIDxhIG5hbWU9InhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyIj48L2E+eG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPgl4bWxGaW5kQ2hhckVuY29kaW5nSGFuZGxlcgkoY29uc3QgY2hhciAqIG5hbWUpPGJyPgogPC9wcmU+Ci08cD5TZWFyY2ggaW4gdGhlIHJlZ2lzdGVyZWQgc2V0IHRoZSBoYW5kbGVyIGFibGUgdG8gcmVhZC93cml0ZSB0aGF0IGVuY29kaW5nLjwvcD4KKzxwPlNlYXJjaCBpbiB0aGUgcmVnaXN0ZXJlZCBzZXQgdGhlIGhhbmRsZXIgYWJsZSB0byByZWFkL3dyaXRlIHRoYXQgZW5jb2Rpbmcgb3IgY3JlYXRlIGEgbmV3IG9uZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC01MjUsNyArNTQxLDcgQEAKIDxhIG5hbWU9InhtbEluaXRDaGFyRW5jb2RpbmdIYW5kbGVycyI+PC9hPnhtbEluaXRDaGFyRW5jb2RpbmdIYW5kbGVycyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxJbml0Q2hhckVuY29kaW5nSGFuZGxlcnMJKHZvaWQpPGJyPgogPC9wcmU+Ci08cD5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4gdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4gSW5pdGlhbGl6ZSB0aGUgY2hhciBlbmNvZGluZyBzdXBwb3J0LCBpdCByZWdpc3RlcnMgdGhlIGRlZmF1bHQgZW5jb2Rpbmcgc3VwcG9ydGVkLiBOT1RFOiB3aGlsZSBwdWJsaWMsIHRoaXMgZnVuY3Rpb24gdXN1YWxseSBkb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkIGluIG5vcm1hbCBwcm9jZXNzaW5nLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEFsaWFzIGZvciA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEluaXRQYXJzZXIiPnhtbEluaXRQYXJzZXI8L2E+LjwvcD4KIDwvZGl2PgogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KQEAgLTUzMyw3ICs1NDksNyBAQAogPGEgbmFtZT0ieG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlciI+PC9hPnhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPgl4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyCShjb25zdCBjaGFyICogbmFtZSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0lucHV0RnVuYyI+eG1sQ2hhckVuY29kaW5nSW5wdXRGdW5jPC9hPiBpbnB1dCwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ091dHB1dEZ1bmMiPnhtbENoYXJFbmNvZGluZ091dHB1dEZ1bmM8L2E+IG91dHB1dCk8YnI+CiA8L3ByZT4KLTxwPkNyZWF0ZSBhbmQgcmVnaXN0ZXJzIGFuIHhtbENoYXJFbmNvZGluZ0hhbmRsZXIuPC9wPgorPHA+Q3JlYXRlIGFuZCByZWdpc3RlcnMgYW4gPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXI8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDItZW50aXRpZXMuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItZW50aXRpZXMuaHRtbAppbmRleCAyYjBlYTU4Li5lMjFjYmNmIDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLWVudGl0aWVzLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi1lbnRpdGllcy5odG1sCkBAIC0zNiw2ICszNiw3IEBACiA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJPGEgaHJlZj0iI3htbEVuY29kZUVudGl0aWVzUmVlbnRyYW50Ij54bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGlucHV0KTsKIDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgk8YSBocmVmPSIjeG1sRW5jb2RlU3BlY2lhbENoYXJzIj54bWxFbmNvZGVTcGVjaWFsQ2hhcnM8L2E+CShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2MiPnhtbERvYzwvYT4gKiBkb2MsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogaW5wdXQpOwogdm9pZAk8YSBocmVmPSIjeG1sRnJlZUVudGl0aWVzVGFibGUiPnhtbEZyZWVFbnRpdGllc1RhYmxlPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItZW50aXRpZXMuaHRtbCN4bWxFbnRpdGllc1RhYmxlUHRyIj54bWxFbnRpdGllc1RhYmxlUHRyPC9hPiB0YWJsZSk7Cit2b2lkCTxhIGhyZWY9IiN4bWxGcmVlRW50aXR5Ij54bWxGcmVlRW50aXR5PC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxFbnRpdHlQdHIiPnhtbEVudGl0eVB0cjwvYT4gZW50aXR5KTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVudGl0eVB0ciI+eG1sRW50aXR5UHRyPC9hPgk8YSBocmVmPSIjeG1sR2V0RG9jRW50aXR5Ij54bWxHZXREb2NFbnRpdHk8L2E+CQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jIj54bWxEb2M8L2E+ICogZG9jLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRW50aXR5UHRyIj54bWxFbnRpdHlQdHI8L2E+CTxhIGhyZWY9IiN4bWxHZXREdGRFbnRpdHkiPnhtbEdldER0ZEVudGl0eTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRW50aXR5UHRyIj54bWxFbnRpdHlQdHI8L2E+CTxhIGhyZWY9IiN4bWxHZXRQYXJhbWV0ZXJFbnRpdHkiPnhtbEdldFBhcmFtZXRlckVudGl0eTwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk7CkBAIC0zNDEsNiArMzQyLDIxIEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgorPGEgbmFtZT0ieG1sRnJlZUVudGl0eSI+PC9hPnhtbEZyZWVFbnRpdHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sRnJlZUVudGl0eQkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxFbnRpdHlQdHIiPnhtbEVudGl0eVB0cjwvYT4gZW50aXR5KTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5Pjx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmVudGl0eTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbEdldERvY0VudGl0eSI+PC9hPnhtbEdldERvY0VudGl0eSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRW50aXR5UHRyIj54bWxFbnRpdHlQdHI8L2E+CXhtbEdldERvY0VudGl0eQkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvYyI+eG1sRG9jPC9hPiAqIGRvYywgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTxicj4KIDwvcHJlPgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi1nbG9iYWxzLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLWdsb2JhbHMuaHRtbAppbmRleCBkM2IyNGE2Li5kYmQ3YjNlIDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLWdsb2JhbHMuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLWdsb2JhbHMuaHRtbApAQCAtMTgsNDIgKzE4LDE2IEBACiA8L3RyPjwvdGFibGU+CiA8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmdsb2JhbHM8L3NwYW4+PC9oMj4KIDxwPmdsb2JhbHMgLSBpbnRlcmZhY2UgZm9yIGFsbCBnbG9iYWwgdmFyaWFibGVzIG9mIHRoZSBsaWJyYXJ5PC9wPgotPHA+YWxsIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFuZCB0aHJlYWQgaGFuZGxpbmcgZm9yIHRob3NlIHZhcmlhYmxlcyBpcyBoYW5kbGVkIGJ5IHRoaXMgbW9kdWxlLiAgVGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYnVpbGRfZ2xvYi5weSBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gZmlsZSBnbG9iYWwuZGF0YSA8L3A+Ci08cD5BdXRob3Iocyk6IEdhcnkgUGVubmluZ3RvbiAmbHQ7R2FyeS5QZW5uaW5ndG9uQHVrLnN1bi5jb20mZ3Q7LCBEYW5pZWwgVmVpbGxhcmQgPC9wPgorPHA+RGVwcmVjYXRlZCwgZG9uJ3QgdXNlIDwvcD4KKzxwPkF1dGhvcihzKTogPC9wPgogPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgogPGgyPlN5bm9wc2lzPC9oMj4KIDxwcmUgY2xhc3M9InN5bm9wc2lzIj50eXBlZGVmIHN0cnVjdCBfeG1sR2xvYmFsU3RhdGUgPGEgaHJlZj0iI3htbEdsb2JhbFN0YXRlIj54bWxHbG9iYWxTdGF0ZTwvYT47CiB0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEdsb2JhbFN0YXRlIj54bWxHbG9iYWxTdGF0ZTwvYT4gKiA8YSBocmVmPSIjeG1sR2xvYmFsU3RhdGVQdHIiPnhtbEdsb2JhbFN0YXRlUHRyPC9hPjsKIHZvaWQJPGEgaHJlZj0iI3htbENsZWFudXBHbG9iYWxzIj54bWxDbGVhbnVwR2xvYmFsczwvYT4JCSh2b2lkKTsKLTxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0Ij54bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPnhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk7Ci10eXBlZGVmIHZvaWQgPGEgaHJlZj0iI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG5vZGUpOworPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sR2xvYmFsU3RhdGVQdHIiPnhtbEdsb2JhbFN0YXRlUHRyPC9hPgk8YSBocmVmPSIjeG1sR2V0R2xvYmFsU3RhdGUiPnhtbEdldEdsb2JhbFN0YXRlPC9hPgkodm9pZCk7CiB2b2lkCTxhIGhyZWY9IiN4bWxJbml0R2xvYmFscyI+eG1sSW5pdEdsb2JhbHM8L2E+CQkJKHZvaWQpOwogdm9pZAk8YSBocmVmPSIjeG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlIj54bWxJbml0aWFsaXplR2xvYmFsU3RhdGU8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxHbG9iYWxTdGF0ZVB0ciI+eG1sR2xvYmFsU3RhdGVQdHI8L2E+IGdzKTsKLTxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPgk8YSBocmVmPSIjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk7Ci10eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPiA8YSBocmVmPSIjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CShjb25zdCBjaGFyICogVVJJLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciI+eG1sQ2hhckVuY29kaW5nSGFuZGxlclB0cjwvYT4gZW5jb2RlciwgPGJyPgkJCQkJCQkgaW50IGNvbXByZXNzaW9uKTsKLTxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JPGEgaHJlZj0iI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk7Ci10eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyUHRyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cjwvYT4gPGEgaHJlZj0iI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JKGNvbnN0IGNoYXIgKiBVUkksIDxicj4JCQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmciPnhtbENoYXJFbmNvZGluZzwvYT4gZW5jKTsKLTxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+CTxhIGhyZWY9IiN4bWxSZWdpc3Rlck5vZGVEZWZhdWx0Ij54bWxSZWdpc3Rlck5vZGVEZWZhdWx0PC9hPgkoPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk7Ci10eXBlZGVmIHZvaWQgPGEgaHJlZj0iI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gbm9kZSk7Ci08YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIj54bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUiPnhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lPC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSI+eG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZTwvYT4gdik7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZkRlZmF1bHRCdWZmZXJTaXplIj54bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZTwvYT4JKGludCB2KTsKLTxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0Ij54bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPnhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlPC9hPgkoaW50IHYpOwotaW50CTxhIGhyZWY9IiN4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWU8L2E+CShpbnQgdik7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZkluZGVudFRyZWVPdXRwdXQiPnhtbFRockRlZkluZGVudFRyZWVPdXRwdXQ8L2E+CShpbnQgdik7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUiPnhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWU8L2E+CShpbnQgdik7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlIj54bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTwvYT4JKGludCB2KTsKLWludAk8YSBocmVmPSIjeG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZTwvYT4JKGludCB2KTsKLTxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij54bWxUaHJEZWZPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMiPnhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXM8L2E+CShpbnQgdik7Ci08YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CTxhIGhyZWY9IiN4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCI+eG1sVGhyRGVmUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpOwotaW50CTxhIGhyZWY9IiN4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU8L2E+CShpbnQgdik7Ci08YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxSZWdpc3Rlck5vZGVGdW5jIj54bWxSZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdCI+eG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+IGZ1bmMpOwotaW50CTxhIGhyZWY9IiN4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MiPnhtbFRockRlZlNhdmVOb0VtcHR5VGFnczwvYT4JKGludCB2KTsKLXZvaWQJPGEgaHJlZj0iI3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMiPnhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmM8L2E+CSh2b2lkICogY3R4LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEdlbmVyaWNFcnJvckZ1bmMiPnhtbEdlbmVyaWNFcnJvckZ1bmM8L2E+IGhhbmRsZXIpOwotdm9pZAk8YSBocmVmPSIjeG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyI+eG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYzwvYT4JKHZvaWQgKiBjdHgsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sU3RydWN0dXJlZEVycm9yRnVuYyI+eG1sU3RydWN0dXJlZEVycm9yRnVuYzwvYT4gaGFuZGxlcik7Ci1pbnQJPGEgaHJlZj0iI3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlPC9hPgkoaW50IHYpOwotY29uc3QgY2hhciAqCTxhIGhyZWY9IiN4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nIj54bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nPC9hPgkoY29uc3QgY2hhciAqIHYpOwogPC9wcmU+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9InJlZnNlY3QxIiBsYW5nPSJlbiI+PGgyPkRlc2NyaXB0aW9uPC9oMj48L2Rpdj4KQEAgLTY0LDM5ICszOCw3IEBACiA8aDM+CiA8YSBuYW1lPSJ4bWxHbG9iYWxTdGF0ZSI+U3RydWN0dXJlIDwvYT54bWxHbG9iYWxTdGF0ZTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IF94bWxHbG9iYWxTdGF0ZSB7Ci0gICAgY29uc3QgY2hhciAqCXhtbFBhcnNlclZlcnNpb24KLSAgICA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhMb2NhdG9yIj54bWxTQVhMb2NhdG9yPC9hPgl4bWxEZWZhdWx0U0FYTG9jYXRvcgotICAgIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sU0FYSGFuZGxlclYxIj54bWxTQVhIYW5kbGVyVjE8L2E+CXhtbERlZmF1bHRTQVhIYW5kbGVyCi0gICAgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxTQVhIYW5kbGVyVjEiPnhtbFNBWEhhbmRsZXJWMTwvYT4JZG9jYkRlZmF1bHRTQVhIYW5kbGVyCTogdW51c2VkCi0gICAgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxTQVhIYW5kbGVyVjEiPnhtbFNBWEhhbmRsZXJWMTwvYT4JaHRtbERlZmF1bHRTQVhIYW5kbGVyCi0gICAgPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxGcmVlRnVuYyI+eG1sRnJlZUZ1bmM8L2E+CXhtbEZyZWUKLSAgICA8YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1hbGxvY0Z1bmMiPnhtbE1hbGxvY0Z1bmM8L2E+CXhtbE1hbGxvYwotICAgIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sU3RyZHVwRnVuYyI+eG1sU3RyZHVwRnVuYzwvYT4JeG1sTWVtU3RyZHVwCi0gICAgPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxSZWFsbG9jRnVuYyI+eG1sUmVhbGxvY0Z1bmM8L2E+CXhtbFJlYWxsb2MKLSAgICA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sR2VuZXJpY0Vycm9yRnVuYyI+eG1sR2VuZXJpY0Vycm9yRnVuYzwvYT4JeG1sR2VuZXJpY0Vycm9yCi0gICAgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbFN0cnVjdHVyZWRFcnJvckZ1bmMiPnhtbFN0cnVjdHVyZWRFcnJvckZ1bmM8L2E+CXhtbFN0cnVjdHVyZWRFcnJvcgotICAgIHZvaWQgKgl4bWxHZW5lcmljRXJyb3JDb250ZXh0Ci0gICAgaW50CW9sZFhNTFdEY29tcGF0aWJpbGl0eQotICAgIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUiPnhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWU8L2E+CXhtbEJ1ZmZlckFsbG9jU2NoZW1lCi0gICAgaW50CXhtbERlZmF1bHRCdWZmZXJTaXplCi0gICAgaW50CXhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZQotICAgIGludAl4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUKLSAgICBpbnQJeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUKLSAgICBpbnQJeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZQotICAgIGludAl4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZQotICAgIGludAl4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlCi0gICAgaW50CXhtbFBhcnNlckRlYnVnRW50aXRpZXMKLSAgICBpbnQJeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUKLSAgICBpbnQJeG1sU2F2ZU5vRW1wdHlUYWdzCi0gICAgaW50CXhtbEluZGVudFRyZWVPdXRwdXQKLSAgICBjb25zdCBjaGFyICoJeG1sVHJlZUluZGVudFN0cmluZwotICAgIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+CXhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZQotICAgIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgl4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZQotICAgIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWFsbG9jRnVuYyI+eG1sTWFsbG9jRnVuYzwvYT4JeG1sTWFsbG9jQXRvbWljCi0gICAgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEVycm9yIj54bWxFcnJvcjwvYT4JeG1sTGFzdEVycm9yCi0gICAgPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPgl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUKLSAgICA8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZQotICAgIHZvaWQgKgl4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0CitUaGUgY29udGVudCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBub3QgbWFkZSBwdWJsaWMgYnkgdGhlIEFQSS4KIH0geG1sR2xvYmFsU3RhdGU7CiA8L3ByZT4KIDxwPjwvcD4KQEAgLTExMiwzNzAgKzU0LDI0IEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgotPGEgbmFtZT0ieG1sRGVyZWdpc3Rlck5vZGVGdW5jIj48L2E+RnVuY3Rpb24gdHlwZSB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sRGVyZWdpc3Rlck5vZGVGdW5jCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gbm9kZSk8YnI+Ci08L3ByZT4KLTxwPlNpZ25hdHVyZSBmb3IgdGhlIGRlcmVnaXN0cmF0aW9uIGNhbGxiYWNrIG9mIGEgZGlzY2FyZGVkIG5vZGU8L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+PHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bm9kZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgY3VycmVudCBub2RlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+CXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYwkoY29uc3QgY2hhciAqIFVSSSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHI8L2E+IGVuY29kZXIsIDxicj4JCQkJCQkJIGludCBjb21wcmVzc2lvbik8YnI+Ci08L3ByZT4KLTxwPlNpZ25hdHVyZSBmb3IgdGhlIGZ1bmN0aW9uIGRvaW5nIHRoZSBsb29rdXAgZm9yIGEgc3VpdGFibGUgb3V0cHV0IG1ldGhvZCBjb3JyZXNwb25kaW5nIHRvIGFuIFVSSS48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5VUkk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIFVSSSB0byB3cml0ZSB0bzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZW5jb2RlcjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmNvbXByZXNzaW9uPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmV3IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPiBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgTlVMTCBpZiBubyBtZXRob2Qgd2FzIGZvdW5kLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+PC9hPkZ1bmN0aW9uIHR5cGUgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyUHRyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cjwvYT4JeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMJKGNvbnN0IGNoYXIgKiBVUkksIDxicj4JCQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmciPnhtbENoYXJFbmNvZGluZzwvYT4gZW5jKTxicj4KLTwvcHJlPgotPHA+U2lnbmF0dXJlIGZvciB0aGUgZnVuY3Rpb24gZG9pbmcgdGhlIGxvb2t1cCBmb3IgYSBzdWl0YWJsZSBpbnB1dCBtZXRob2QgY29ycmVzcG9uZGluZyB0byBhbiBVUkkuPC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+VVJJPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBVUkkgdG8gcmVhZCBmcm9tPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5lbmM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHJlcXVlc3RlZCBzb3VyY2UgZW5jb2Rpbmc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5ldyA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+IGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBOVUxMIGlmIG5vIG1ldGhvZCB3YXMgZm91bmQuPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFJlZ2lzdGVyTm9kZUZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUmVnaXN0ZXJOb2RlRnVuYwkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG5vZGUpPGJyPgotPC9wcmU+Ci08cD5TaWduYXR1cmUgZm9yIHRoZSByZWdpc3RyYXRpb24gY2FsbGJhY2sgb2YgYSBjcmVhdGVkIG5vZGU8L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+PHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bm9kZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgY3VycmVudCBub2RlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJodG1sRGVmYXVsdFNBWEhhbmRsZXIiPlZhcmlhYmxlIDwvYT5odG1sRGVmYXVsdFNBWEhhbmRsZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sU0FYSGFuZGxlclYxIj54bWxTQVhIYW5kbGVyVjE8L2E+IGh0bWxEZWZhdWx0U0FYSGFuZGxlcjsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ib2xkWE1MV0Rjb21wYXRpYmlsaXR5Ij5WYXJpYWJsZSA8L2E+b2xkWE1MV0Rjb21wYXRpYmlsaXR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgb2xkWE1MV0Rjb21wYXRpYmlsaXR5OwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxCdWZmZXJBbGxvY1NjaGVtZSI+VmFyaWFibGUgPC9hPnhtbEJ1ZmZlckFsbG9jU2NoZW1lPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIj54bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lPC9hPiB4bWxCdWZmZXJBbGxvY1NjaGVtZTsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sRGVmYXVsdEJ1ZmZlclNpemUiPlZhcmlhYmxlIDwvYT54bWxEZWZhdWx0QnVmZmVyU2l6ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IHhtbERlZmF1bHRCdWZmZXJTaXplOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxEZWZhdWx0U0FYSGFuZGxlciI+VmFyaWFibGUgPC9hPnhtbERlZmF1bHRTQVhIYW5kbGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFNBWEhhbmRsZXJWMSI+eG1sU0FYSGFuZGxlclYxPC9hPiB4bWxEZWZhdWx0U0FYSGFuZGxlcjsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sRGVmYXVsdFNBWExvY2F0b3IiPlZhcmlhYmxlIDwvYT54bWxEZWZhdWx0U0FYTG9jYXRvcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU0FYTG9jYXRvciI+eG1sU0FYTG9jYXRvcjwvYT4geG1sRGVmYXVsdFNBWExvY2F0b3I7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlIj5WYXJpYWJsZSA8L2E+eG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPiB4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZTsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIj5WYXJpYWJsZSA8L2E+eG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxGcmVlIj5WYXJpYWJsZSA8L2E+eG1sRnJlZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxGcmVlRnVuYyI+eG1sRnJlZUZ1bmM8L2E+IHhtbEZyZWU7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbEdlbmVyaWNFcnJvciI+VmFyaWFibGUgPC9hPnhtbEdlbmVyaWNFcnJvcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEdlbmVyaWNFcnJvckZ1bmMiPnhtbEdlbmVyaWNFcnJvckZ1bmM8L2E+IHhtbEdlbmVyaWNFcnJvcjsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sR2VuZXJpY0Vycm9yQ29udGV4dCI+VmFyaWFibGUgPC9hPnhtbEdlbmVyaWNFcnJvckNvbnRleHQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKiB4bWxHZW5lcmljRXJyb3JDb250ZXh0OwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSI+VmFyaWFibGUgPC9hPnhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWU7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbEluZGVudFRyZWVPdXRwdXQiPlZhcmlhYmxlIDwvYT54bWxJbmRlbnRUcmVlT3V0cHV0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgeG1sSW5kZW50VHJlZU91dHB1dDsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSI+VmFyaWFibGUgPC9hPnhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxMYXN0RXJyb3IiPlZhcmlhYmxlIDwvYT54bWxMYXN0RXJyb3I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+IHhtbExhc3RFcnJvcjsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUiPlZhcmlhYmxlIDwvYT54bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIj5WYXJpYWJsZSA8L2E+eG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWU7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbE1hbGxvYyI+VmFyaWFibGUgPC9hPnhtbE1hbGxvYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNYWxsb2NGdW5jIj54bWxNYWxsb2NGdW5jPC9hPiB4bWxNYWxsb2M7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbE1hbGxvY0F0b21pYyI+VmFyaWFibGUgPC9hPnhtbE1hbGxvY0F0b21pYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNYWxsb2NGdW5jIj54bWxNYWxsb2NGdW5jPC9hPiB4bWxNYWxsb2NBdG9taWM7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbE1lbVN0cmR1cCI+VmFyaWFibGUgPC9hPnhtbE1lbVN0cmR1cDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxTdHJkdXBGdW5jIj54bWxTdHJkdXBGdW5jPC9hPiB4bWxNZW1TdHJkdXA7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUiPlZhcmlhYmxlIDwvYT54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4geG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZTsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sUGFyc2VyRGVidWdFbnRpdGllcyI+VmFyaWFibGUgPC9hPnhtbFBhcnNlckRlYnVnRW50aXRpZXM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCB4bWxQYXJzZXJEZWJ1Z0VudGl0aWVzOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUiPlZhcmlhYmxlIDwvYT54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxQYXJzZXJWZXJzaW9uIj5WYXJpYWJsZSA8L2E+eG1sUGFyc2VyVmVyc2lvbjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgY2hhciAqIHhtbFBhcnNlclZlcnNpb247Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlIj5WYXJpYWJsZSA8L2E+eG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCB4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZTsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sUmVhbGxvYyI+VmFyaWFibGUgPC9hPnhtbFJlYWxsb2M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sUmVhbGxvY0Z1bmMiPnhtbFJlYWxsb2NGdW5jPC9hPiB4bWxSZWFsbG9jOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUiPlZhcmlhYmxlIDwvYT54bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+IHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZTsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sU2F2ZU5vRW1wdHlUYWdzIj5WYXJpYWJsZSA8L2E+eG1sU2F2ZU5vRW1wdHlUYWdzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgeG1sU2F2ZU5vRW1wdHlUYWdzOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxTdHJ1Y3R1cmVkRXJyb3IiPlZhcmlhYmxlIDwvYT54bWxTdHJ1Y3R1cmVkRXJyb3I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIj54bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jPC9hPiB4bWxTdHJ1Y3R1cmVkRXJyb3I7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQiPlZhcmlhYmxlIDwvYT54bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkICogeG1sU3RydWN0dXJlZEVycm9yQ29udGV4dDsKLTwvcHJlPgotPHA+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlIj5WYXJpYWJsZSA8L2E+eG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlOwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUcmVlSW5kZW50U3RyaW5nIj5WYXJpYWJsZSA8L2E+eG1sVHJlZUluZGVudFN0cmluZzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgY2hhciAqIHhtbFRyZWVJbmRlbnRTdHJpbmc7Ci08L3ByZT4KLTxwPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KIDxhIG5hbWU9InhtbENsZWFudXBHbG9iYWxzIj48L2E+eG1sQ2xlYW51cEdsb2JhbHMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sQ2xlYW51cEdsb2JhbHMJCSh2b2lkKTxicj4KIDwvcHJlPgotPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbid0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuIEFkZGl0aW9uYWwgY2xlYW51cCBmb3IgbXVsdGktdGhyZWFkaW5nPC9wPgorPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJ3QgaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJ4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQiPjwvYT54bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgl4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQJKDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPiBmdW5jKTxicj4KKzxhIG5hbWU9InhtbEdldEdsb2JhbFN0YXRlIj48L2E+eG1sR2V0R2xvYmFsU3RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEdsb2JhbFN0YXRlUHRyIj54bWxHbG9iYWxTdGF0ZVB0cjwvYT4JeG1sR2V0R2xvYmFsU3RhdGUJKHZvaWQpPGJyPgogPC9wcmU+Ci08cD5SZWdpc3RlcnMgYSBjYWxsYmFjayBmb3Igbm9kZSBkZXN0cnVjdGlvbjwvcD4KKzxwPkRFUFJFQ0FURUQ8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mdW5jPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIG5ldyBEZXJlZ2lzdGVyTm9kZUZ1bmM8L3RkPgotPC90cj4KLTx0cj4KKzx0Ym9keT48dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb248L3RkPgotPC90cj4KLTwvdGJvZHk+Cis8dGQ+TlVMTC48L3RkPgorPC90cj48L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KIDwvZGl2PgogPGhyPgpAQCAtNDg0LDcgKzgwLDcgQEAKIDxhIG5hbWU9InhtbEluaXRHbG9iYWxzIj48L2E+eG1sSW5pdEdsb2JhbHMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sSW5pdEdsb2JhbHMJCQkodm9pZCk8YnI+CiA8L3ByZT4KLTxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPiB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LiBBZGRpdGlvbmFsIGluaXRpYWxpc2F0aW9uIGZvciBtdWx0aS10aHJlYWRpbmc8L3A+Cis8cD5ERVBSRUNBVEVEOiBBbGlhcyBmb3IgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPi48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC00OTIsNyArODgsNyBAQAogPGEgbmFtZT0ieG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlIj48L2E+eG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEluaXRpYWxpemVHbG9iYWxTdGF0ZQkoPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sR2xvYmFsU3RhdGVQdHIiPnhtbEdsb2JhbFN0YXRlUHRyPC9hPiBncyk8YnI+CiA8L3ByZT4KLTxwPnhtbEluaXRpYWxpemVHbG9iYWxTdGF0ZSgpIGluaXRpYWxpemUgYSBnbG9iYWwgc3RhdGUgd2l0aCBhbGwgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBsaWJyYXJ5LjwvcD4KKzxwPkRFUFJFQ0FURUQ6IE5vLW9wLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC01MDIsNDY4ICs5OCw2IEBACiA8L3RhYmxlPjwvZGl2PgogPC9kaXY+CiA8aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij48L2E+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk8YnI+Ci08L3ByZT4KLTxwPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBVUkkgb3V0cHV0IGZpbGUgaGFuZGxpbmc8L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mdW5jPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIG5ldyBPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij48L2E+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQJKDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk8YnI+Ci08L3ByZT4KLTxwPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBVUkkgaW5wdXQgZmlsZSBoYW5kbGluZzwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmZ1bmM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+ZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgbmV3IFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBvbGQgdmFsdWUgb2YgdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxSZWdpc3Rlck5vZGVEZWZhdWx0Ij48L2E+eG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4JeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdAkoPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk8YnI+Ci08L3ByZT4KLTxwPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGNyZWF0aW9uPC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5mdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgUmVnaXN0ZXJOb2RlRnVuYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgb2xkIHZhbHVlIG9mIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUiPjwvYT54bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSI+eG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZTwvYT4JeG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUiPnhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWU8L2E+IHYpPGJyPgotPC9wcmU+Ci08cD48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUiPjwvYT54bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplCShpbnQgdik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQiPjwvYT54bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgl4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQJKDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPiBmdW5jKTxicj4KLTwvcHJlPgotPHA+PC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSI+PC9hPnhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZQkoaW50IHYpPGJyPgotPC9wcmU+Ci08cD48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUiPjwvYT54bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlCShpbnQgdik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0Ij48L2E+eG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkluZGVudFRyZWVPdXRwdXQJKGludCB2KTxicj4KLTwvcHJlPgotPHA+PC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+djwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUiPjwvYT54bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZQkoaW50IHYpPGJyPgotPC9wcmU+Ci08cD48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUiPjwvYT54bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlCShpbnQgdik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIj48L2E+eG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUJKGludCB2KTxicj4KLTwvcHJlPgotPHA+PC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+djwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCI+PC9hPnhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CXhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdAkoPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpPGJyPgotPC9wcmU+Ci08cD48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mdW5jPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyI+PC9hPnhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzCShpbnQgdik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCI+PC9hPnhtbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CXhtbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0CSg8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpPGJyPgotPC9wcmU+Ci08cD48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mdW5jPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUiPjwvYT54bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlCShpbnQgdik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0Ij48L2E+eG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdCAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4JeG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdAkoPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmZ1bmM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJ4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MiPjwvYT54bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MJKGludCB2KTxicj4KLTwvcHJlPgotPHA+PC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+djwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMiPjwvYT54bWxUaHJEZWZTZXRHZW5lcmljRXJyb3JGdW5jICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMJKHZvaWQgKiBjdHgsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sR2VuZXJpY0Vycm9yRnVuYyI+eG1sR2VuZXJpY0Vycm9yRnVuYzwvYT4gaGFuZGxlcik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmN0eDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmhhbmRsZXI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFRockRlZlNldFN0cnVjdHVyZWRFcnJvckZ1bmMiPjwvYT54bWxUaHJEZWZTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFRockRlZlNldFN0cnVjdHVyZWRFcnJvckZ1bmMJKHZvaWQgKiBjdHgsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sU3RydWN0dXJlZEVycm9yRnVuYyI+eG1sU3RydWN0dXJlZEVycm9yRnVuYzwvYT4gaGFuZGxlcik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmN0eDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmhhbmRsZXI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9InhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSI+PC9hPnhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZQkoaW50IHYpPGJyPgotPC9wcmU+Ci08cD48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0ieG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyI+PC9hPnhtbFRockRlZlRyZWVJbmRlbnRTdHJpbmcgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IGNoYXIgKgl4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nCShjb25zdCBjaGFyICogdik8YnI+Ci08L3ByZT4KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KIDwvZGl2PgogPC9kaXY+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLWhhc2guaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItaGFzaC5odG1sCmluZGV4IDg5NGMzZjguLjQ0NTI3MzkgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDItaGFzaC5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDItaGFzaC5odG1sCkBAIC0yNSwzNSArMjUsMzUgQEAKIDxwcmUgY2xhc3M9InN5bm9wc2lzIj4jZGVmaW5lIDxhIGhyZWY9IiNYTUxfQ0FTVF9GUFRSIj5YTUxfQ0FTVF9GUFRSPC9hPihmcHRyKTsKIHR5cGVkZWYgc3RydWN0IF94bWxIYXNoVGFibGUgPGEgaHJlZj0iI3htbEhhc2hUYWJsZSI+eG1sSGFzaFRhYmxlPC9hPjsKIHR5cGVkZWYgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlIj54bWxIYXNoVGFibGU8L2E+ICogPGEgaHJlZj0iI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPjsKLWludAk8YSBocmVmPSIjeG1sSGFzaEFkZEVudHJ5Ij54bWxIYXNoQWRkRW50cnk8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgdm9pZCAqIHVzZXJkYXRhKTsKLWludAk8YSBocmVmPSIjeG1sSGFzaEFkZEVudHJ5MiI+eG1sSGFzaEFkZEVudHJ5MjwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIHZvaWQgKiB1c2VyZGF0YSk7Ci1pbnQJPGEgaHJlZj0iI3htbEhhc2hBZGRFbnRyeTMiPnhtbEhhc2hBZGRFbnRyeTM8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTMsIDxicj4JCQkJCSB2b2lkICogdXNlcmRhdGEpOworaW50CTxhIGhyZWY9IiN4bWxIYXNoQWRkRW50cnkiPnhtbEhhc2hBZGRFbnRyeTwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgdm9pZCAqIHBheWxvYWQpOworaW50CTxhIGhyZWY9IiN4bWxIYXNoQWRkRW50cnkyIj54bWxIYXNoQWRkRW50cnkyPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgdm9pZCAqIHBheWxvYWQpOworaW50CTxhIGhyZWY9IiN4bWxIYXNoQWRkRW50cnkzIj54bWxIYXNoQWRkRW50cnkzPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTMsIDxicj4JCQkJCSB2b2lkICogcGF5bG9hZCk7CiB0eXBlZGVmIHZvaWQgKiA8YSBocmVmPSIjeG1sSGFzaENvcGllciI+eG1sSGFzaENvcGllcjwvYT4JCQkodm9pZCAqIHBheWxvYWQsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk7Ci08YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4JPGEgaHJlZj0iI3htbEhhc2hDb3B5Ij54bWxIYXNoQ29weTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoQ29waWVyIj54bWxIYXNoQ29waWVyPC9hPiBmKTsKKzxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPgk8YSBocmVmPSIjeG1sSGFzaENvcHkiPnhtbEhhc2hDb3B5PC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaENvcGllciI+eG1sSGFzaENvcGllcjwvYT4gY29weSk7CiA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4JPGEgaHJlZj0iI3htbEhhc2hDcmVhdGUiPnhtbEhhc2hDcmVhdGU8L2E+CQkoaW50IHNpemUpOwogPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+CTxhIGhyZWY9IiN4bWxIYXNoQ3JlYXRlRGljdCI+eG1sSGFzaENyZWF0ZURpY3Q8L2E+CShpbnQgc2l6ZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RQdHIiPnhtbERpY3RQdHI8L2E+IGRpY3QpOwogdHlwZWRlZiB2b2lkIDxhIGhyZWY9IiN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4JCSh2b2lkICogcGF5bG9hZCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTsKLXZvaWQJPGEgaHJlZj0iI3htbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IiPnhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3I8L2E+CSh2b2lkICogZW50cnksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk7Ci12b2lkCTxhIGhyZWY9IiN4bWxIYXNoRnJlZSI+eG1sSGFzaEZyZWU8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKLXZvaWQgKgk8YSBocmVmPSIjeG1sSGFzaExvb2t1cCI+eG1sSGFzaExvb2t1cDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUpOwotdm9pZCAqCTxhIGhyZWY9IiN4bWxIYXNoTG9va3VwMiI+eG1sSGFzaExvb2t1cDI8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyKTsKLXZvaWQgKgk8YSBocmVmPSIjeG1sSGFzaExvb2t1cDMiPnhtbEhhc2hMb29rdXAzPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMyk7Ci12b2lkICoJPGEgaHJlZj0iI3htbEhhc2hRTG9va3VwIj54bWxIYXNoUUxvb2t1cDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTsKLXZvaWQgKgk8YSBocmVmPSIjeG1sSGFzaFFMb29rdXAyIj54bWxIYXNoUUxvb2t1cDI8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyKTsKLXZvaWQgKgk8YSBocmVmPSIjeG1sSGFzaFFMb29rdXAzIj54bWxIYXNoUUxvb2t1cDM8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeDMsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTMpOwotaW50CTxhIGhyZWY9IiN4bWxIYXNoUmVtb3ZlRW50cnkiPnhtbEhhc2hSZW1vdmVFbnRyeTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKLWludAk8YSBocmVmPSIjeG1sSGFzaFJlbW92ZUVudHJ5MiI+eG1sSGFzaFJlbW92ZUVudHJ5MjwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKLWludAk8YSBocmVmPSIjeG1sSGFzaFJlbW92ZUVudHJ5MyI+eG1sSGFzaFJlbW92ZUVudHJ5MzwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKLXZvaWQJPGEgaHJlZj0iI3htbEhhc2hTY2FuIj54bWxIYXNoU2NhbjwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFNjYW5uZXIiPnhtbEhhc2hTY2FubmVyPC9hPiBmLCA8YnI+CQkJCQkgdm9pZCAqIGRhdGEpOwotdm9pZAk8YSBocmVmPSIjeG1sSGFzaFNjYW4zIj54bWxIYXNoU2NhbjM8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUzLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFNjYW5uZXIiPnhtbEhhc2hTY2FubmVyPC9hPiBmLCA8YnI+CQkJCQkgdm9pZCAqIGRhdGEpOwotdm9pZAk8YSBocmVmPSIjeG1sSGFzaFNjYW5GdWxsIj54bWxIYXNoU2NhbkZ1bGw8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hTY2FubmVyRnVsbCI+eG1sSGFzaFNjYW5uZXJGdWxsPC9hPiBmLCA8YnI+CQkJCQkgdm9pZCAqIGRhdGEpOwotdm9pZAk8YSBocmVmPSIjeG1sSGFzaFNjYW5GdWxsMyI+eG1sSGFzaFNjYW5GdWxsMzwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hTY2FubmVyRnVsbCI+eG1sSGFzaFNjYW5uZXJGdWxsPC9hPiBmLCA8YnI+CQkJCQkgdm9pZCAqIGRhdGEpOwordm9pZAk8YSBocmVmPSIjeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvciI+eG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcjwvYT4JKHZvaWQgKiBlbnRyeSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkpOwordm9pZAk8YSBocmVmPSIjeG1sSGFzaEZyZWUiPnhtbEhhc2hGcmVlPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBkZWFsbG9jKTsKK3ZvaWQgKgk8YSBocmVmPSIjeG1sSGFzaExvb2t1cCI+eG1sSGFzaExvb2t1cDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5KTsKK3ZvaWQgKgk8YSBocmVmPSIjeG1sSGFzaExvb2t1cDIiPnhtbEhhc2hMb29rdXAyPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5Mik7Cit2b2lkICoJPGEgaHJlZj0iI3htbEhhc2hMb29rdXAzIj54bWxIYXNoTG9va3VwMzwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5Myk7Cit2b2lkICoJPGEgaHJlZj0iI3htbEhhc2hRTG9va3VwIj54bWxIYXNoUUxvb2t1cDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUpOwordm9pZCAqCTxhIGhyZWY9IiN4bWxIYXNoUUxvb2t1cDIiPnhtbEhhc2hRTG9va3VwMjwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4MiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMik7Cit2b2lkICoJPGEgaHJlZj0iI3htbEhhc2hRTG9va3VwMyI+eG1sSGFzaFFMb29rdXAzPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeDMsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTMpOworaW50CTxhIGhyZWY9IiN4bWxIYXNoUmVtb3ZlRW50cnkiPnhtbEhhc2hSZW1vdmVFbnRyeTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZGVhbGxvYyk7CitpbnQJPGEgaHJlZj0iI3htbEhhc2hSZW1vdmVFbnRyeTIiPnhtbEhhc2hSZW1vdmVFbnRyeTI8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZGVhbGxvYyk7CitpbnQJPGEgaHJlZj0iI3htbEhhc2hSZW1vdmVFbnRyeTMiPnhtbEhhc2hSZW1vdmVFbnRyeTM8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBkZWFsbG9jKTsKK3ZvaWQJPGEgaHJlZj0iI3htbEhhc2hTY2FuIj54bWxIYXNoU2NhbjwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoU2Nhbm5lciI+eG1sSGFzaFNjYW5uZXI8L2E+IHNjYW4sIDxicj4JCQkJCSB2b2lkICogZGF0YSk7Cit2b2lkCTxhIGhyZWY9IiN4bWxIYXNoU2NhbjMiPnhtbEhhc2hTY2FuMzwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hTY2FubmVyIj54bWxIYXNoU2Nhbm5lcjwvYT4gc2NhbiwgPGJyPgkJCQkJIHZvaWQgKiBkYXRhKTsKK3ZvaWQJPGEgaHJlZj0iI3htbEhhc2hTY2FuRnVsbCI+eG1sSGFzaFNjYW5GdWxsPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hTY2FubmVyRnVsbCI+eG1sSGFzaFNjYW5uZXJGdWxsPC9hPiBzY2FuLCA8YnI+CQkJCQkgdm9pZCAqIGRhdGEpOwordm9pZAk8YSBocmVmPSIjeG1sSGFzaFNjYW5GdWxsMyI+eG1sSGFzaFNjYW5GdWxsMzwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkzLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFNjYW5uZXJGdWxsIj54bWxIYXNoU2Nhbm5lckZ1bGw8L2E+IHNjYW4sIDxicj4JCQkJCSB2b2lkICogZGF0YSk7CiB0eXBlZGVmIHZvaWQgPGEgaHJlZj0iI3htbEhhc2hTY2FubmVyIj54bWxIYXNoU2Nhbm5lcjwvYT4JCQkodm9pZCAqIHBheWxvYWQsIDxicj4JCQkJCSB2b2lkICogZGF0YSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTsKIHR5cGVkZWYgdm9pZCA8YSBocmVmPSIjeG1sSGFzaFNjYW5uZXJGdWxsIj54bWxIYXNoU2Nhbm5lckZ1bGw8L2E+CQkodm9pZCAqIHBheWxvYWQsIDxicj4JCQkJCSB2b2lkICogZGF0YSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUzKTsKLWludAk8YSBocmVmPSIjeG1sSGFzaFNpemUiPnhtbEhhc2hTaXplPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUpOwotaW50CTxhIGhyZWY9IiN4bWxIYXNoVXBkYXRlRW50cnkiPnhtbEhhc2hVcGRhdGVFbnRyeTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIHZvaWQgKiB1c2VyZGF0YSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKLWludAk8YSBocmVmPSIjeG1sSGFzaFVwZGF0ZUVudHJ5MiI+eG1sSGFzaFVwZGF0ZUVudHJ5MjwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIHZvaWQgKiB1c2VyZGF0YSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKLWludAk8YSBocmVmPSIjeG1sSGFzaFVwZGF0ZUVudHJ5MyI+eG1sSGFzaFVwZGF0ZUVudHJ5MzwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMywgPGJyPgkJCQkJIHZvaWQgKiB1c2VyZGF0YSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTsKK2ludAk8YSBocmVmPSIjeG1sSGFzaFNpemUiPnhtbEhhc2hTaXplPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCk7CitpbnQJPGEgaHJlZj0iI3htbEhhc2hVcGRhdGVFbnRyeSI+eG1sSGFzaFVwZGF0ZUVudHJ5PC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIHZvaWQgKiBwYXlsb2FkLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaERlYWxsb2NhdG9yIj54bWxIYXNoRGVhbGxvY2F0b3I8L2E+IGRlYWxsb2MpOworaW50CTxhIGhyZWY9IiN4bWxIYXNoVXBkYXRlRW50cnkyIj54bWxIYXNoVXBkYXRlRW50cnkyPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgdm9pZCAqIHBheWxvYWQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZGVhbGxvYyk7CitpbnQJPGEgaHJlZj0iI3htbEhhc2hVcGRhdGVFbnRyeTMiPnhtbEhhc2hVcGRhdGVFbnRyeTM8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MywgPGJyPgkJCQkJIHZvaWQgKiBwYXlsb2FkLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaERlYWxsb2NhdG9yIj54bWxIYXNoRGVhbGxvY2F0b3I8L2E+IGRlYWxsb2MpOwogPC9wcmU+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9InJlZnNlY3QxIiBsYW5nPSJlbiI+PGgyPkRlc2NyaXB0aW9uPC9oMj48L2Rpdj4KQEAgLTIwMCwyNyArMjAwLDI3IEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sSGFzaEFkZEVudHJ5Ij48L2E+eG1sSGFzaEFkZEVudHJ5ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaEFkZEVudHJ5CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgdm9pZCAqIHVzZXJkYXRhKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaEFkZEVudHJ5CQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIHZvaWQgKiBwYXlsb2FkKTxicj4KIDwvcHJlPgotPHA+QWRkIHRoZSBAdXNlcmRhdGEgdG8gdGhlIGhhc2ggQHRhYmxlLiBUaGlzIGNhbiBsYXRlciBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGhlIEBuYW1lLiBEdXBsaWNhdGUgbmFtZXMgZ2VuZXJhdGUgZXJyb3JzLjwvcD4KKzxwPkFkZCBhIGhhc2ggdGFibGUgZW50cnkuIElmIGFuIGVudHJ5IHdpdGggdGhpcyBrZXkgYWxyZWFkeSBleGlzdHMsIHBheWxvYWQgd2lsbCBub3QgYmUgdXBkYXRlZCBhbmQgLTEgaXMgcmV0dXJuZWQuIFRoaXMgcmV0dXJuIHZhbHVlIGNhbid0IGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBvdXQtb2YtbWVtb3J5IGVycm9ycywgc28gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c3RyaW5nIGtleTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dXNlcmRhdGE8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5wYXlsb2FkPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIHBheWxvYWQ8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+MCB0aGUgYWRkaXRpb24gc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLjwvdGQ+Cis8dGQ+MCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0yMjksMzEgKzIyOSwzMSBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hBZGRFbnRyeTIiPjwvYT54bWxIYXNoQWRkRW50cnkyICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaEFkZEVudHJ5MgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyLCA8YnI+CQkJCQkgdm9pZCAqIHVzZXJkYXRhKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaEFkZEVudHJ5MgkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgdm9pZCAqIHBheWxvYWQpPGJyPgogPC9wcmU+Ci08cD5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlLiBEdXBsaWNhdGUgdHVwbGVzIGdlbmVyYXRlIGVycm9ycy48L3A+Cis8cD5BZGQgYSBoYXNoIHRhYmxlIGVudHJ5IHdpdGggdHdvIHN0cmluZ3MgYXMga2V5LiBTZWUgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaEFkZEVudHJ5Ij54bWxIYXNoQWRkRW50cnk8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnRhYmxlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pmhhc2g8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+aGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmZpcnN0IHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c2Vjb25kIHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnVzZXJkYXRhPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+cGF5bG9hZDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBwYXlsb2FkPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMjYyLDM1ICsyNjIsMzUgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoQWRkRW50cnkzIj48L2E+eG1sSGFzaEFkZEVudHJ5MyAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hBZGRFbnRyeTMJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMywgPGJyPgkJCQkJIHZvaWQgKiB1c2VyZGF0YSk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hBZGRFbnRyeTMJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkzLCA8YnI+CQkJCQkgdm9pZCAqIHBheWxvYWQpPGJyPgogPC9wcmU+Ci08cD5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgdHVwbGUgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykuIER1cGxpY2F0ZSBlbnRyaWVzIGdlbmVyYXRlIGVycm9ycy48L3A+Cis8cD5BZGQgYSBoYXNoIHRhYmxlIGVudHJ5IHdpdGggdGhyZWUgc3RyaW5ncyBhcyBrZXkuIFNlZSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoQWRkRW50cnkiPnhtbEhhc2hBZGRFbnRyeTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+Zmlyc3Qgc3RyaW5nIGtleTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5MjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5zZWNvbmQgc3RyaW5nIGtleTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkzPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoaXJkIHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnVzZXJkYXRhPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+cGF5bG9hZDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBwYXlsb2FkPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMjk5LDIzICsyOTksMjMgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoQ29weSI+PC9hPnhtbEhhc2hDb3B5ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4JeG1sSGFzaENvcHkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoQ29waWVyIj54bWxIYXNoQ29waWVyPC9hPiBmKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4JeG1sSGFzaENvcHkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hDb3BpZXIiPnhtbEhhc2hDb3BpZXI8L2E+IGNvcHkpPGJyPgogPC9wcmU+Ci08cD5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbGllZCBAZiB0byBlYWNoIHZhbHVlLjwvcD4KKzxwPkNvcHkgdGhlIGhhc2ggQHRhYmxlIHVzaW5nIEBjb3B5IHRvIGNvcHkgcGF5bG9hZHMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBjb3BpZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmNvcHk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+Y29waWVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaDwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmV3IHRhYmxlIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci48L3RkPgorPHRkPnRoZSBuZXcgdGFibGUgb3IgTlVMTCBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMzI2LDE3ICszMjYsMTcgQEAKIDxhIG5hbWU9InhtbEhhc2hDcmVhdGUiPjwvYT54bWxIYXNoQ3JlYXRlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4JeG1sSGFzaENyZWF0ZQkJKGludCBzaXplKTxicj4KIDwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IHhtbEhhc2hUYWJsZVB0ci48L3A+Cis8cD5DcmVhdGUgYSBuZXcgaGFzaCB0YWJsZS4gU2V0IHNpemUgdG8gemVybyBpZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY2FuJ3QgYmUgZXN0aW1hdGVkLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnNpemU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPmluaXRpYWwgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuPC90ZD4KKzx0ZD50aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QsIG9yIE5VTEwgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTM0Nyw3ICszNDcsNyBAQAogPGEgbmFtZT0ieG1sSGFzaENyZWF0ZURpY3QiPjwvYT54bWxIYXNoQ3JlYXRlRGljdCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+CXhtbEhhc2hDcmVhdGVEaWN0CShpbnQgc2l6ZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RQdHIiPnhtbERpY3RQdHI8L2E+IGRpY3QpPGJyPgogPC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHdoaWNoIHdpbGwgdXNlIEBkaWN0IGFzIHRoZSBpbnRlcm5hbCBkaWN0aW9uYXJ5PC9wPgorPHA+Q3JlYXRlIGEgbmV3IGhhc2ggdGFibGUgYmFja2VkIGJ5IGEgZGljdGlvbmFyeS4gVGhpcyBjYW4gcmVkdWNlIHJlc291cmNlIHVzYWdlIGNvbnNpZGVyYWJseSBpZiBtb3N0IGtleXMgcGFzc2VkIHRvIEFQSSBmdW5jdGlvbnMgb3JpZ2luYXRlIGZyb20gdGhpcyBkaWN0aW9uYXJ5LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTM2MSw3ICszNjEsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLjwvdGQ+Cis8dGQ+dGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LCBvciBOVUxMIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0zNzAsMTkgKzM3MCwxOSBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IiPjwvYT54bWxIYXNoRGVmYXVsdERlYWxsb2NhdG9yICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IJKHZvaWQgKiBlbnRyeSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IJKHZvaWQgKiBlbnRyeSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkpPGJyPgogPC9wcmU+Ci08cD5GcmVlIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHhtbEZyZWUuPC9wPgorPHA+RnJlZSBhIGhhc2ggdGFibGUgZW50cnkgd2l0aCA8YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbEZyZWUiPnhtbEZyZWU8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmVudHJ5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlIGVudHJ5PC90ZD4KKzx0ZD5oYXNoIHRhYmxlIGVudHJ5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBlbnRyeSdzIG5hbWU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoZSBlbnRyeSdzIHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMzkxLDE5ICszOTEsMTkgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoRnJlZSI+PC9hPnhtbEhhc2hGcmVlICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hGcmVlCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hGcmVlCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaERlYWxsb2NhdG9yIj54bWxIYXNoRGVhbGxvY2F0b3I8L2E+IGRlYWxsb2MpPGJyPgogPC9wcmU+Ci08cD5GcmVlIHRoZSBoYXNoIEB0YWJsZSBhbmQgaXRzIGNvbnRlbnRzLiBUaGUgdXNlcmRhdGEgaXMgZGVhbGxvY2F0ZWQgd2l0aCBAZiBpZiBwcm92aWRlZC48L3A+Cis8cD5GcmVlIHRoZSBoYXNoIGFuZCBpdHMgY29udGVudHMuIFRoZSBwYXlsb2FkIGlzIGRlYWxsb2NhdGVkIHdpdGggQGRlYWxsb2MgaWYgcHJvdmlkZWQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2g8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZGVhbGxvYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5kZWFsbG9jYXRvciBmdW5jdGlvbiBvciBOVUxMPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTQxMiwyMyArNDEyLDIzIEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sSGFzaExvb2t1cCI+PC9hPnhtbEhhc2hMb29rdXAgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoTG9va3VwCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkICoJeG1sSGFzaExvb2t1cAkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkpPGJyPgogPC9wcmU+Ci08cD5GaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIEBuYW1lLjwvcD4KKzxwPkZpbmQgdGhlIGVudHJ5IHNwZWNpZmllZCBieSBAa2V5LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnRhYmxlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pmhhc2g8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+aGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIHBheWxvYWQgb3IgTlVMTCBpZiBubyBlbnRyeSB3YXMgZm91bmQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTQzNywyNyArNDM3LDI3IEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sSGFzaExvb2t1cDIiPjwvYT54bWxIYXNoTG9va3VwMiAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCAqCXhtbEhhc2hMb29rdXAyCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkICoJeG1sSGFzaExvb2t1cDIJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIpPGJyPgogPC9wcmU+Ci08cD5GaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIChAbmFtZSwgQG5hbWUyKSB0dXBsZS48L3A+Cis8cD5GaW5kIHRoZSBwYXlsb2FkIHNwZWNpZmllZCBieSB0aGUgKEBrZXksIEBrZXkyKSB0dXBsZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5maXJzdCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnNlY29uZCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIG9yIE5VTEwgaWYgbm8gZW50cnkgd2FzIGZvdW5kLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC00NjYsMzEgKzQ2NiwzMSBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hMb29rdXAzIj48L2E+eG1sSGFzaExvb2t1cDMgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoTG9va3VwMwkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMyk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCAqCXhtbEhhc2hMb29rdXAzCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTMpPGJyPgogPC9wcmU+Ci08cD5GaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpIHR1cGxlLjwvcD4KKzxwPkZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSAoQGtleSwgQGtleTIsIEBrZXkzKSB0dXBsZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5maXJzdCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnNlY29uZCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+dGhpcmQgc3RyaW5nIGtleTwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIG9yIE5VTEwgaWYgbm8gZW50cnkgd2FzIGZvdW5kLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC00OTksMjcgKzQ5OSwyNyBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hRTG9va3VwIj48L2E+eG1sSGFzaFFMb29rdXAgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoUUxvb2t1cAkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoUUxvb2t1cAkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk8YnI+CiA8L3ByZT4KLTxwPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgUU5hbWUgQHByZWZpeDpAbmFtZS9AbmFtZS48L3A+Cis8cD5GaW5kIHRoZSBwYXlsb2FkIHNwZWNpZmllZCBieSB0aGUgUU5hbWUgQHByZWZpeDpAbmFtZSBvciBAbmFtZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnByZWZpeDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgcHJlZml4IG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+cHJlZml4IG9mIHRoZSBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+bG9jYWwgbmFtZSBvZiB0aGUgc3RyaW5nIGtleTwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgcG9pbnRlciB0byB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPmEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtNTI4LDM1ICs1MjgsMzUgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoUUxvb2t1cDIiPjwvYT54bWxIYXNoUUxvb2t1cDIgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoUUxvb2t1cDIJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeDIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoUUxvb2t1cDIJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4MiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMik8YnI+CiA8L3ByZT4KLTxwPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgUU5hbWVzIHR1cGxlPC9wPgorPHA+RmluZCB0aGUgcGF5bG9hZCBzcGVjaWZpZWQgYnkgdGhlIFFOYW1lcyB0dXBsZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnByZWZpeDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgcHJlZml4IG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+Zmlyc3QgcHJlZml4PC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+Zmlyc3QgbG9jYWwgbmFtZTwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+cHJlZml4MjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgc2Vjb25kIHByZWZpeCBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPnNlY29uZCBwcmVmaXg8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD5zZWNvbmQgbG9jYWwgbmFtZTwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgcG9pbnRlciB0byB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPmEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtNTY1LDQzICs1NjUsNDMgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoUUxvb2t1cDMiPjwvYT54bWxIYXNoUUxvb2t1cDMgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgKgl4bWxIYXNoUUxvb2t1cDMJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeDIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4MywgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMyk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCAqCXhtbEhhc2hRTG9va3VwMwkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBwcmVmaXgyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIHByZWZpeDMsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTMpPGJyPgogPC9wcmU+Ci08cD5GaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpIHR1cGxlLjwvcD4KKzxwPkZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSBRTmFtZXMgdHVwbGUuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5wcmVmaXg8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPmZpcnN0IHByZWZpeDwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPmZpcnN0IGxvY2FsIG5hbWU8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnByZWZpeDI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHNlY29uZCBwcmVmaXggb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD5zZWNvbmQgcHJlZml4PC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+c2Vjb25kIGxvY2FsIG5hbWU8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnByZWZpeDM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHRoaXJkIHByZWZpeCBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPnRoaXJkIHByZWZpeDwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+dGhpcmQgbG9jYWwgbmFtZTwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIG9yIE5VTEwgaWYgbm8gZW50cnkgd2FzIGZvdW5kLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC02MTAsMjcgKzYxMCwyNyBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hSZW1vdmVFbnRyeSI+PC9hPnhtbEhhc2hSZW1vdmVFbnRyeSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hSZW1vdmVFbnRyeQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaERlYWxsb2NhdG9yIj54bWxIYXNoRGVhbGxvY2F0b3I8L2E+IGYpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxIYXNoUmVtb3ZlRW50cnkJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZGVhbGxvYyk8YnI+CiA8L3ByZT4KLTxwPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgQG5hbWUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBoYXNoIEB0YWJsZS4gRXhpc3RpbmcgdXNlcmRhdGEgZm9yIHRoaXMgdHVwbGUgd2lsbCBiZSByZW1vdmVkIGFuZCBmcmVlZCB3aXRoIEBmLjwvcD4KKzxwPkZpbmQgdGhlIGVudHJ5IHNwZWNpZmllZCBieSB0aGUgQGtleSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGhhc2ggdGFibGUuIFBheWxvYWQgd2lsbCBiZSBmcmVlZCB3aXRoIEBkZWFsbG9jLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnRhYmxlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pmhhc2g8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+aGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZW1vdmVkIGl0ZW0gKGlmIGFueSk8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZGVhbGxvYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5kZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIG9yIE5VTEw8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+MCBpZiB0aGUgcmVtb3ZhbCBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3Igb3Igbm90IGZvdW5kLjwvdGQ+Cis8dGQ+MCBvbiBzdWNjZXNzIGFuZCAtMSBpZiBubyBlbnRyeSB3YXMgZm91bmQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTYzOSwzMSArNjM5LDMxIEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sSGFzaFJlbW92ZUVudHJ5MiI+PC9hPnhtbEhhc2hSZW1vdmVFbnRyeTIgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxIYXNoUmVtb3ZlRW50cnkyCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZik8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hSZW1vdmVFbnRyeTIJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MiwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBkZWFsbG9jKTxicj4KIDwvcHJlPgotPHA+RmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSAoQG5hbWUsIEBuYW1lMikgdHVwbGUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBoYXNoIEB0YWJsZS4gRXhpc3RpbmcgdXNlcmRhdGEgZm9yIHRoaXMgdHVwbGUgd2lsbCBiZSByZW1vdmVkIGFuZCBmcmVlZCB3aXRoIEBmLjwvcD4KKzxwPlJlbW92ZSBhbiBlbnRyeSB3aXRoIHR3byBzdHJpbmdzIGFzIGtleS4gU2VlIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hSZW1vdmVFbnRyeSI+eG1sSGFzaFJlbW92ZUVudHJ5PC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5maXJzdCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnNlY29uZCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIChpZiBhbnkpPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmRlYWxsb2M8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+ZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSBvciBOVUxMPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgaWYgdGhlIHJlbW92YWwgc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yIG9yIG5vdCBmb3VuZC48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtNjcyLDM1ICs2NzIsMzUgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoUmVtb3ZlRW50cnkzIj48L2E+eG1sSGFzaFJlbW92ZUVudHJ5MyAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hSZW1vdmVFbnRyeTMJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaFJlbW92ZUVudHJ5MwkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZGVhbGxvYyk8YnI+CiA8L3ByZT4KLTxwPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykgdHVwbGUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBoYXNoIEB0YWJsZS4gRXhpc3RpbmcgdXNlcmRhdGEgZm9yIHRoaXMgdHVwbGUgd2lsbCBiZSByZW1vdmVkIGFuZCBmcmVlZCB3aXRoIEBmLjwvcD4KKzxwPlJlbW92ZSBhbiBlbnRyeSB3aXRoIHRocmVlIHN0cmluZ3MgYXMga2V5LiBTZWUgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFJlbW92ZUVudHJ5Ij54bWxIYXNoUmVtb3ZlRW50cnk8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnRhYmxlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pmhhc2g8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+aGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmZpcnN0IHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c2Vjb25kIHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUzPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5MzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGlyZCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIChpZiBhbnkpPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmRlYWxsb2M8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+ZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSBvciBOVUxMPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgaWYgdGhlIHJlbW92YWwgc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yIG9yIG5vdCBmb3VuZC48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtNzA5LDIzICs3MDksMjMgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoU2NhbiI+PC9hPnhtbEhhc2hTY2FuICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hTY2FuCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiB0YWJsZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hTY2FubmVyIj54bWxIYXNoU2Nhbm5lcjwvYT4gZiwgPGJyPgkJCQkJIHZvaWQgKiBkYXRhKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hTY2FuCQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFNjYW5uZXIiPnhtbEhhc2hTY2FubmVyPC9hPiBzY2FuLCA8YnI+CQkJCQkgdm9pZCAqIGRhdGEpPGJyPgogPC9wcmU+Ci08cD5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbGllZCBAZiB0byBlYWNoIHZhbHVlLjwvcD4KKzxwPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBseSBAc2NhbiB0byBlYWNoIHZhbHVlLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnRhYmxlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pmhhc2g8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+aGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2g8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+c2NhbjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5zY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaDwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZGF0YTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5leHRyYSBkYXRhIHBhc3NlZCB0byBmPC90ZD4KKzx0ZD5leHRyYSBkYXRhIHBhc3NlZCB0byBAc2NhbjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC03MzQsMzUgKzczNCwzNSBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hTY2FuMyI+PC9hPnhtbEhhc2hTY2FuMyAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxIYXNoU2NhbjMJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoU2Nhbm5lciI+eG1sSGFzaFNjYW5uZXI8L2E+IGYsIDxicj4JCQkJCSB2b2lkICogZGF0YSk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxIYXNoU2NhbjMJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hTY2FubmVyIj54bWxIYXNoU2Nhbm5lcjwvYT4gc2NhbiwgPGJyPgkJCQkJIHZvaWQgKiBkYXRhKTxicj4KIDwvcHJlPgotPHA+U2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGxpZWQgQGYgdG8gZWFjaCB2YWx1ZSBtYXRjaGluZyAoQG5hbWUsIEBuYW1lMiwgQG5hbWUzKSB0dXBsZS4gSWYgb25lIG9mIHRoZSBuYW1lcyBpcyBudWxsLCB0aGUgY29tcGFyaXNvbiBpcyBjb25zaWRlcmVkIHRvIG1hdGNoLjwvcD4KKzxwPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBseSBAc2NhbiB0byBlYWNoIHZhbHVlIG1hdGNoaW5nIChAa2V5LCBAa2V5MiwgQGtleTMpIHR1cGxlLiBJZiBvbmUgb2YgdGhlIGtleXMgaXMgbnVsbCwgdGhlIGNvbXBhcmlzb24gaXMgY29uc2lkZXJlZCB0byBtYXRjaC48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEw8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmZpcnN0IHN0cmluZyBrZXkgb3IgTlVMTDwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgb3IgTlVMTDwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnNlY29uZCBzdHJpbmcga2V5IG9yIE5VTEw8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUzPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgb3IgTlVMTDwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkzPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoaXJkIHN0cmluZyBrZXkgb3IgTlVMTDwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2g8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+c2NhbjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5zY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaDwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZGF0YTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5leHRyYSBkYXRhIHBhc3NlZCB0byBmPC90ZD4KKzx0ZD5leHRyYSBkYXRhIHBhc3NlZCB0byBAc2NhbjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC03NzEsMjMgKzc3MSwyMyBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbEhhc2hTY2FuRnVsbCI+PC9hPnhtbEhhc2hTY2FuRnVsbCAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxIYXNoU2NhbkZ1bGwJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFNjYW5uZXJGdWxsIj54bWxIYXNoU2Nhbm5lckZ1bGw8L2E+IGYsIDxicj4JCQkJCSB2b2lkICogZGF0YSk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxIYXNoU2NhbkZ1bGwJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoU2Nhbm5lckZ1bGwiPnhtbEhhc2hTY2FubmVyRnVsbDwvYT4gc2NhbiwgPGJyPgkJCQkJIHZvaWQgKiBkYXRhKTxicj4KIDwvcHJlPgotPHA+U2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGxpZWQgQGYgdG8gZWFjaCB2YWx1ZS48L3A+Cis8cD5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbHkgQHNjYW4gdG8gZWFjaCB2YWx1ZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHNjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnNjYW48L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2g8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmRhdGE8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+ZXh0cmEgZGF0YSBwYXNzZWQgdG8gZjwvdGQ+Cis8dGQ+ZXh0cmEgZGF0YSBwYXNzZWQgdG8gQHNjYW48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtNzk2LDM1ICs3OTYsMzUgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoU2NhbkZ1bGwzIj48L2E+eG1sSGFzaFNjYW5GdWxsMyAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxIYXNoU2NhbkZ1bGwzCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoU2Nhbm5lckZ1bGwiPnhtbEhhc2hTY2FubmVyRnVsbDwvYT4gZiwgPGJyPgkJCQkJIHZvaWQgKiBkYXRhKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEhhc2hTY2FuRnVsbDMJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkzLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFNjYW5uZXJGdWxsIj54bWxIYXNoU2Nhbm5lckZ1bGw8L2E+IHNjYW4sIDxicj4JCQkJCSB2b2lkICogZGF0YSk8YnI+CiA8L3ByZT4KLTxwPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBsaWVkIEBmIHRvIGVhY2ggdmFsdWUgbWF0Y2hpbmcgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykgdHVwbGUuIElmIG9uZSBvZiB0aGUgbmFtZXMgaXMgbnVsbCwgdGhlIGNvbXBhcmlzb24gaXMgY29uc2lkZXJlZCB0byBtYXRjaC48L3A+Cis8cD5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbHkgQHNjYW4gdG8gZWFjaCB2YWx1ZSBtYXRjaGluZyAoQGtleSwgQGtleTIsIEBrZXkzKSB0dXBsZS4gSWYgb25lIG9mIHRoZSBrZXlzIGlzIG51bGwsIHRoZSBjb21wYXJpc29uIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2guPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5maXJzdCBzdHJpbmcga2V5IG9yIE5VTEw8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEw8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5MjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5zZWNvbmQgc3RyaW5nIGtleSBvciBOVUxMPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEw8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5MzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGlyZCBzdHJpbmcga2V5IG9yIE5VTEw8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIHNjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnNjYW48L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2g8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmRhdGE8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+ZXh0cmEgZGF0YSBwYXNzZWQgdG8gZjwvdGQ+Cis8dGQ+ZXh0cmEgZGF0YSBwYXNzZWQgdG8gQHNjYW48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtODMzLDE5ICs4MzMsMTkgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoU2l6ZSI+PC9hPnhtbEhhc2hTaXplICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaFNpemUJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaFNpemUJCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IGhhc2gpPGJyPgogPC9wcmU+Ci08cD5RdWVyeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc3RhbGxlZCBpbiB0aGUgaGFzaCBAdGFibGUuPC9wPgorPHA+UXVlcnkgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZSBvciAtMSBpbiBjYXNlIG9mIGVycm9yPC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTg1NCwzMSArODU0LDMxIEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sSGFzaFVwZGF0ZUVudHJ5Ij48L2E+eG1sSGFzaFVwZGF0ZUVudHJ5ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaFVwZGF0ZUVudHJ5CQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSB2b2lkICogdXNlcmRhdGEsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZik8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hVcGRhdGVFbnRyeQkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIHZvaWQgKiBwYXlsb2FkLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaERlYWxsb2NhdG9yIj54bWxIYXNoRGVhbGxvY2F0b3I8L2E+IGRlYWxsb2MpPGJyPgogPC9wcmU+Ci08cD5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgQG5hbWUuIEV4aXN0aW5nIGVudHJ5IGZvciB0aGlzIEBuYW1lIHdpbGwgYmUgcmVtb3ZlZCBhbmQgZnJlZWQgd2l0aCBAZiBpZiBmb3VuZC48L3A+Cis8cD5BZGQgYSBoYXNoIHRhYmxlIGVudHJ5LiBJZiBhbiBlbnRyeSB3aXRoIHRoaXMga2V5IGFscmVhZHkgZXhpc3RzLCB0aGUgb2xkIHBheWxvYWQgd2lsbCBiZSBmcmVlZCBhbmQgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWUuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dGFibGU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGhhc2ggdGFibGU8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFzaDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5oYXNoIHRhYmxlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c3RyaW5nIGtleTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+dXNlcmRhdGE8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5wYXlsb2FkPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIHBheWxvYWQ8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZXBsYWNlZCBpdGVtIChpZiBhbnkpPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmRlYWxsb2M8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+ZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gb3IgTlVMTDwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD4wIHRoZSBhZGRpdGlvbiBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuPC90ZD4KKzx0ZD4wIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTg4NywzNSArODg3LDM1IEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sSGFzaFVwZGF0ZUVudHJ5MiI+PC9hPnhtbEhhc2hVcGRhdGVFbnRyeTIgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxIYXNoVXBkYXRlRW50cnkyCQkoPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFRhYmxlUHRyIj54bWxIYXNoVGFibGVQdHI8L2E+IHRhYmxlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZTIsIDxicj4JCQkJCSB2b2lkICogdXNlcmRhdGEsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoRGVhbGxvY2F0b3IiPnhtbEhhc2hEZWFsbG9jYXRvcjwvYT4gZik8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hVcGRhdGVFbnRyeTIJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gaGFzaCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXksIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoga2V5MiwgPGJyPgkJCQkJIHZvaWQgKiBwYXlsb2FkLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaERlYWxsb2NhdG9yIj54bWxIYXNoRGVhbGxvY2F0b3I8L2E+IGRlYWxsb2MpPGJyPgogPC9wcmU+Ci08cD5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlLiBFeGlzdGluZyBlbnRyeSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIGZyZWVkIHdpdGggQGYgaWYgZm91bmQuPC9wPgorPHA+QWRkIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHR3byBzdHJpbmdzIGFzIGtleS4gU2VlIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hVcGRhdGVFbnRyeSI+eG1sSGFzaFVwZGF0ZUVudHJ5PC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD50YWJsZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgaGFzaCB0YWJsZTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5oYXNoPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmhhc2ggdGFibGU8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5maXJzdCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lMjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YTwvdGQ+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5rZXkyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnNlY29uZCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD51c2VyZGF0YTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnBheWxvYWQ8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgcGF5bG9hZDwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gKGlmIGFueSk8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZGVhbGxvYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5kZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSBvciBOVUxMPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtOTI0LDM5ICs5MjQsMzkgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxIYXNoVXBkYXRlRW50cnkzIj48L2E+eG1sSGFzaFVwZGF0ZUVudHJ5MyAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEhhc2hVcGRhdGVFbnRyeTMJCSg8YSBocmVmPSJsaWJ4bWwyLWhhc2guaHRtbCN4bWxIYXNoVGFibGVQdHIiPnhtbEhhc2hUYWJsZVB0cjwvYT4gdGFibGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMiwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lMywgPGJyPgkJCQkJIHZvaWQgKiB1c2VyZGF0YSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBmKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSGFzaFVwZGF0ZUVudHJ5MwkJKDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPiBoYXNoLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBrZXkyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGtleTMsIDxicj4JCQkJCSB2b2lkICogcGF5bG9hZCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hEZWFsbG9jYXRvciI+eG1sSGFzaERlYWxsb2NhdG9yPC9hPiBkZWFsbG9jKTxicj4KIDwvcHJlPgotPHA+QWRkIHRoZSBAdXNlcmRhdGEgdG8gdGhlIGhhc2ggQHRhYmxlLiBUaGlzIGNhbiBsYXRlciBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGhlIHR1cGxlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpLiBFeGlzdGluZyBlbnRyeSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIGZyZWVkIHdpdGggQGYgaWYgZm91bmQuPC9wPgorPHA+QWRkIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHRocmVlIHN0cmluZ3MgYXMga2V5LiBTZWUgPGEgaHJlZj0ibGlieG1sMi1oYXNoLmh0bWwjeG1sSGFzaFVwZGF0ZUVudHJ5Ij54bWxIYXNoVXBkYXRlRW50cnk8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnRhYmxlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBoYXNoIHRhYmxlPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pmhhc2g8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+aGFzaCB0YWJsZTwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmZpcnN0IHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmtleTI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+c2Vjb25kIHN0cmluZyBrZXk8L3RkPgogPC90cj4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0Pm5hbWUzPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGE8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+a2V5MzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGlyZCBzdHJpbmcga2V5PC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD51c2VyZGF0YTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhPC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnBheWxvYWQ8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgcGF5bG9hZDwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gKGlmIGFueSk8L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZGVhbGxvYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5kZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSBvciBOVUxMPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPjAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwKaW5kZXggZmJkZGY1YS4uZjE4MTc2ZiAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfREVURUNUX0lEUyI+WE1MX0RFVEVDVF9JRFM8L2E+OwogI2RlZmluZSA8YSBocmVmPSIjWE1MX1NBWDJfTUFHSUMiPlhNTF9TQVgyX01BR0lDPC9hPjsKICNkZWZpbmUgPGEgaHJlZj0iI1hNTF9TS0lQX0lEUyI+WE1MX1NLSVBfSURTPC9hPjsKK3R5cGVkZWYgc3RydWN0IF94bWxBdHRySGFzaEJ1Y2tldCA8YSBocmVmPSIjeG1sQXR0ckhhc2hCdWNrZXQiPnhtbEF0dHJIYXNoQnVja2V0PC9hPjsKIHR5cGVkZWYgZW51bSA8YSBocmVmPSIjeG1sRmVhdHVyZSI+eG1sRmVhdHVyZTwvYT47CiB0eXBlZGVmIGVudW0gPGEgaHJlZj0iI3htbFBhcnNlcklucHV0U3RhdGUiPnhtbFBhcnNlcklucHV0U3RhdGU8L2E+OwogdHlwZWRlZiBlbnVtIDxhIGhyZWY9IiN4bWxQYXJzZXJNb2RlIj54bWxQYXJzZXJNb2RlPC9hPjsKQEAgLTM0LDYgKzM1LDcgQEAKIHR5cGVkZWYgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mbyI+eG1sUGFyc2VyTm9kZUluZm88L2E+ICogPGEgaHJlZj0iI3htbFBhcnNlck5vZGVJbmZvUHRyIj54bWxQYXJzZXJOb2RlSW5mb1B0cjwvYT47CiB0eXBlZGVmIHN0cnVjdCBfeG1sUGFyc2VyTm9kZUluZm9TZXEgPGEgaHJlZj0iI3htbFBhcnNlck5vZGVJbmZvU2VxIj54bWxQYXJzZXJOb2RlSW5mb1NlcTwvYT47CiB0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyTm9kZUluZm9TZXEiPnhtbFBhcnNlck5vZGVJbmZvU2VxPC9hPiAqIDxhIGhyZWY9IiN4bWxQYXJzZXJOb2RlSW5mb1NlcVB0ciI+eG1sUGFyc2VyTm9kZUluZm9TZXFQdHI8L2E+OwordHlwZWRlZiBzdHJ1Y3QgX3htbFBhcnNlck5zRGF0YSA8YSBocmVmPSIjeG1sUGFyc2VyTnNEYXRhIj54bWxQYXJzZXJOc0RhdGE8L2E+OwogdHlwZWRlZiBlbnVtIDxhIGhyZWY9IiN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT47CiB0eXBlZGVmIHN0cnVjdCBfeG1sU0FYSGFuZGxlclYxIDxhIGhyZWY9IiN4bWxTQVhIYW5kbGVyVjEiPnhtbFNBWEhhbmRsZXJWMTwvYT47CiB0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sU0FYSGFuZGxlclYxIj54bWxTQVhIYW5kbGVyVjE8L2E+ICogPGEgaHJlZj0iI3htbFNBWEhhbmRsZXJWMVB0ciI+eG1sU0FYSGFuZGxlclYxUHRyPC9hPjsKQEAgLTcyLDE2ICs3NCwxNyBAQAogdm9pZAk8YSBocmVmPSIjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4JCSh2b2lkKTsKIHZvaWQJPGEgaHJlZj0iI3htbENsZWFyTm9kZUluZm9TZXEiPnhtbENsZWFyTm9kZUluZm9TZXE8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mb1NlcVB0ciI+eG1sUGFyc2VyTm9kZUluZm9TZXFQdHI8L2E+IHNlcSk7CiB2b2lkCTxhIGhyZWY9IiN4bWxDbGVhclBhcnNlckN0eHQiPnhtbENsZWFyUGFyc2VyQ3R4dDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTsKLTxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+CTxhIGhyZWY9IiN4bWxDcmVhdGVEb2NQYXJzZXJDdHh0Ij54bWxDcmVhdGVEb2NQYXJzZXJDdHh0PC9hPgkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1cik7Cis8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPgk8YSBocmVmPSIjeG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCI+eG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dDwvYT4JKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHIpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI3htbENyZWF0ZUlPUGFyc2VyQ3R4dCI+eG1sQ3JlYXRlSU9QYXJzZXJDdHh0PC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU0FYSGFuZGxlclB0ciI+eG1sU0FYSGFuZGxlclB0cjwvYT4gc2F4LCA8YnI+CQkJCQkJIHZvaWQgKiB1c2VyX2RhdGEsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbElucHV0UmVhZENhbGxiYWNrIj54bWxJbnB1dFJlYWRDYWxsYmFjazwvYT4gaW9yZWFkLCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dENsb3NlQ2FsbGJhY2siPnhtbElucHV0Q2xvc2VDYWxsYmFjazwvYT4gaW9jbG9zZSwgPGJyPgkJCQkJCSB2b2lkICogaW9jdHgsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiBlbmMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI3htbENyZWF0ZVB1c2hQYXJzZXJDdHh0Ij54bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXJQdHIiPnhtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJCSB2b2lkICogdXNlcl9kYXRhLCA8YnI+CQkJCQkJIGNvbnN0IGNoYXIgKiBjaHVuaywgPGJyPgkJCQkJCSBpbnQgc2l6ZSwgPGJyPgkJCQkJCSBjb25zdCBjaGFyICogZmlsZW5hbWUpOwotPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CTxhIGhyZWY9IiN4bWxDdHh0UmVhZERvYyI+eG1sQ3R4dFJlYWREb2M8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjdXIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOworPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CTxhIGhyZWY9IiN4bWxDdHh0UmVhZERvYyI+eG1sQ3R4dFJlYWREb2M8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CTxhIGhyZWY9IiN4bWxDdHh0UmVhZEZkIj54bWxDdHh0UmVhZEZkPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBpbnQgZmQsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CTxhIGhyZWY9IiN4bWxDdHh0UmVhZEZpbGUiPnhtbEN0eHRSZWFkRmlsZTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CTxhIGhyZWY9IiN4bWxDdHh0UmVhZElPIj54bWxDdHh0UmVhZElPPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sSW5wdXRSZWFkQ2FsbGJhY2siPnhtbElucHV0UmVhZENhbGxiYWNrPC9hPiBpb3JlYWQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sSW5wdXRDbG9zZUNhbGxiYWNrIj54bWxJbnB1dENsb3NlQ2FsbGJhY2s8L2E+IGlvY2xvc2UsIDxicj4JCQkJCSB2b2lkICogaW9jdHgsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CTxhIGhyZWY9IiN4bWxDdHh0UmVhZE1lbW9yeSI+eG1sQ3R4dFJlYWRNZW1vcnk8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGJ1ZmZlciwgPGJyPgkJCQkJIGludCBzaXplLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIFVSTCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJIGludCBvcHRpb25zKTsKIHZvaWQJPGEgaHJlZj0iI3htbEN0eHRSZXNldCI+eG1sQ3R4dFJlc2V0PC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTsKIGludAk8YSBocmVmPSIjeG1sQ3R4dFJlc2V0UHVzaCI+eG1sQ3R4dFJlc2V0UHVzaDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGNodW5rLCA8YnI+CQkJCQkgaW50IHNpemUsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZmlsZW5hbWUsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcpOwordm9pZAk8YSBocmVmPSIjeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24iPnhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uPC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIHVuc2lnbmVkIG1heEFtcGwpOwogaW50CTxhIGhyZWY9IiN4bWxDdHh0VXNlT3B0aW9ucyI+eG1sQ3R4dFVzZU9wdGlvbnM8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGludCBvcHRpb25zKTsKIHR5cGVkZWYgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPiA8YSBocmVmPSIjeG1sRXh0ZXJuYWxFbnRpdHlMb2FkZXIiPnhtbEV4dGVybmFsRW50aXR5TG9hZGVyPC9hPgkoY29uc3QgY2hhciAqIFVSTCwgPGJyPgkJCQkJCSBjb25zdCBjaGFyICogSUQsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY29udGV4dCk7CiB2b2lkCTxhIGhyZWY9IiN4bWxGcmVlUGFyc2VyQ3R4dCI+eG1sRnJlZVBhcnNlckN0eHQ8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk7CkBAIC05OCw2ICsxMDEsNyBAQAogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPgk8YSBocmVmPSIjeG1sTG9hZEV4dGVybmFsRW50aXR5Ij54bWxMb2FkRXh0ZXJuYWxFbnRpdHk8L2E+CShjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkJIGNvbnN0IGNoYXIgKiBJRCwgPGJyPgkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0UHRyIj54bWxQYXJzZXJJbnB1dFB0cjwvYT4JPGEgaHJlZj0iI3htbE5ld0lPSW5wdXRTdHJlYW0iPnhtbE5ld0lPSW5wdXRTdHJlYW08L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyUHRyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cjwvYT4gaW5wdXQsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiBlbmMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI3htbE5ld1BhcnNlckN0eHQiPnhtbE5ld1BhcnNlckN0eHQ8L2E+CSh2b2lkKTsKKzxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+CTxhIGhyZWY9IiN4bWxOZXdTQVhQYXJzZXJDdHh0Ij54bWxOZXdTQVhQYXJzZXJDdHh0PC9hPgkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU0FYSGFuZGxlciI+eG1sU0FYSGFuZGxlcjwvYT4gKiBzYXgsIDxicj4JCQkJCQkgdm9pZCAqIHVzZXJEYXRhKTsKIGludAk8YSBocmVmPSIjeG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5Ij54bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnk8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU0FYSGFuZGxlclB0ciI+eG1sU0FYSGFuZGxlclB0cjwvYT4gc2F4LCA8YnI+CQkJCQkgdm9pZCAqIHVzZXJfZGF0YSwgPGJyPgkJCQkJIGludCBkZXB0aCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHJpbmcsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiAqIGxzdCk7CiBpbnQJPGEgaHJlZj0iI3htbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXIiPnhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXI8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXJQdHIiPnhtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJCSB2b2lkICogdXNlcl9kYXRhLCA8YnI+CQkJCQkJIGludCBkZXB0aCwgPGJyPgkJCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogc3RyaW5nLCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+ICogbHN0LCA8YnI+CQkJCQkJIGludCByZWNvdmVyKTsKIGludAk8YSBocmVmPSIjeG1sUGFyc2VDaHVuayI+eG1sUGFyc2VDaHVuazwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBjaHVuaywgPGJyPgkJCQkJIGludCBzaXplLCA8YnI+CQkJCQkgaW50IHRlcm1pbmF0ZSk7CkBAIC0xNDAsNiArMTQ0LDE0IEBACiB2b2lkCTxhIGhyZWY9IiN4bWxTZXR1cFBhcnNlckZvckJ1ZmZlciI+eG1sU2V0dXBQYXJzZXJGb3JCdWZmZXI8L2E+CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBidWZmZXIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZmlsZW5hbWUpOwogdm9pZAk8YSBocmVmPSIjeG1sU3RvcFBhcnNlciI+eG1sU3RvcFBhcnNlcjwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk7CiBpbnQJPGEgaHJlZj0iI3htbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQiPnhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQ8L2E+CShpbnQgdmFsKTsKK2ludAk8YSBocmVmPSIjeG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIj54bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWU8L2E+CShpbnQgdik7CitpbnQJPGEgaHJlZj0iI3htbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlIj54bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZTwvYT4JKGludCB2KTsKK2ludAk8YSBocmVmPSIjeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZTwvYT4JKGludCB2KTsKK2ludAk8YSBocmVmPSIjeG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUiPnhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlPC9hPgkoaW50IHYpOworaW50CTxhIGhyZWY9IiN4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIj54bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlPC9hPgkoaW50IHYpOworaW50CTxhIGhyZWY9IiN4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzIj54bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzPC9hPgkoaW50IHYpOworaW50CTxhIGhyZWY9IiN4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU8L2E+CShpbnQgdik7CitpbnQJPGEgaHJlZj0iI3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSI+eG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlPC9hPgkoaW50IHYpOwogPC9wcmU+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9InJlZnNlY3QxIiBsYW5nPSJlbiI+PGgyPkRlc2NyaXB0aW9uPC9oMj48L2Rpdj4KQEAgLTE4Myw3ICsxOTUsMTcgQEAKIDxhIG5hbWU9IlhNTF9TS0lQX0lEUyI+TWFjcm8gPC9hPlhNTF9TS0lQX0lEUzwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSA8YSBocmVmPSIjWE1MX1NLSVBfSURTIj5YTUxfU0tJUF9JRFM8L2E+OwogPC9wcmU+Ci08cD5CaXQgaW4gdGhlIGxvYWRzdWJzZXQgY29udGV4dCBmaWVsZCB0byB0ZWxsIHRvIG5vdCBkbyBJRC9SRUZzIHJlZ2lzdHJhdGlvbi4gVXNlZCB0byBpbml0aWFsaXplIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbExvYWRFeHREdGREZWZhdWx0VmFsdWUiPnhtbExvYWRFeHREdGREZWZhdWx0VmFsdWU8L2E+IGluIHNvbWUgc3BlY2lhbCBjYXNlcy48L3A+Cis8cD5CaXQgaW4gdGhlIGxvYWRzdWJzZXQgY29udGV4dCBmaWVsZCB0byB0ZWxsIHRvIG5vdCBkbyBJRC9SRUZzIHJlZ2lzdHJhdGlvbi4gVXNlZCB0byBpbml0aWFsaXplIHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUgaW4gc29tZSBzcGVjaWFsIGNhc2VzLjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbEF0dHJIYXNoQnVja2V0Ij5TdHJ1Y3R1cmUgPC9hPnhtbEF0dHJIYXNoQnVja2V0PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgX3htbEF0dHJIYXNoQnVja2V0IHsKK1RoZSBjb250ZW50IG9mIHRoaXMgc3RydWN0dXJlIGlzIG5vdCBtYWRlIHB1YmxpYyBieSB0aGUgQVBJLgorfSB4bWxBdHRySGFzaEJ1Y2tldDsKKzwvcHJlPgorPHA+PC9wPgogPC9kaXY+CiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgpAQCAtMjUwLDcgKzI3Miw4IEBACiAgICAgPGEgbmFtZT0iWE1MX1BBUlNFUl9TWVNURU1fTElURVJBTCI+WE1MX1BBUlNFUl9TWVNURU1fTElURVJBTDwvYT4gPSAxMyAvKiB3aXRoaW4gYSBTWVNURU0gdmFsdWUgKi8KICAgICA8YSBuYW1lPSJYTUxfUEFSU0VSX0VQSUxPRyI+WE1MX1BBUlNFUl9FUElMT0c8L2E+ID0gMTQgLyogdGhlIE1pc2MqIGFmdGVyIHRoZSBsYXN0IGVuZCB0YWcgKi8KICAgICA8YSBuYW1lPSJYTUxfUEFSU0VSX0lHTk9SRSI+WE1MX1BBUlNFUl9JR05PUkU8L2E+ID0gMTUgLyogd2l0aGluIGFuIElHTk9SRUQgc2VjdGlvbiAqLwotICAgIDxhIG5hbWU9IlhNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUwiPlhNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUw8L2E+ID0gMTYgLyogIHdpdGhpbiBhIFBVQkxJQyB2YWx1ZSAqLworICAgIDxhIG5hbWU9IlhNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUwiPlhNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUw8L2E+ID0gMTYgLyogd2l0aGluIGEgUFVCTElDIHZhbHVlICovCisgICAgPGEgbmFtZT0iWE1MX1BBUlNFUl9YTUxfREVDTCI+WE1MX1BBUlNFUl9YTUxfREVDTDwvYT4gPSAxNyAvKiAgYmVmb3JlIFhNTCBkZWNsIChidXQgYWZ0ZXIgQk9NKSAqLwogfTsKIDwvcHJlPgogPHA+PC9wPgpAQCAtMzE1LDYgKzMzOCwxNiBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9InhtbFBhcnNlck5zRGF0YSI+U3RydWN0dXJlIDwvYT54bWxQYXJzZXJOc0RhdGE8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBfeG1sUGFyc2VyTnNEYXRhIHsKK1RoZSBjb250ZW50IG9mIHRoaXMgc3RydWN0dXJlIGlzIG5vdCBtYWRlIHB1YmxpYyBieSB0aGUgQVBJLgorfSB4bWxQYXJzZXJOc0RhdGE7Cis8L3ByZT4KKzxwPjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbFBhcnNlck9wdGlvbiI+RW51bSA8L2E+eG1sUGFyc2VyT3B0aW9uPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbnVtIDxhIGhyZWY9IiN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT4gewogICAgIDxhIG5hbWU9IlhNTF9QQVJTRV9SRUNPVkVSIj5YTUxfUEFSU0VfUkVDT1ZFUjwvYT4gPSAxIC8qIHJlY292ZXIgb24gZXJyb3JzICovCkBAIC04NDUsNyArODc4LDcgQEAKIDxhIG5hbWU9Imlnbm9yYWJsZVdoaXRlc3BhY2VTQVhGdW5jIj48L2E+RnVuY3Rpb24gdHlwZSBpZ25vcmFibGVXaGl0ZXNwYWNlU0FYRnVuYzwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAlpZ25vcmFibGVXaGl0ZXNwYWNlU0FYRnVuYwkodm9pZCAqIGN0eCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjaCwgPGJyPgkJCQkJIGludCBsZW4pPGJyPgogPC9wcmU+Ci08cD5SZWNlaXZpbmcgc29tZSBpZ25vcmFibGUgd2hpdGVzcGFjZXMgZnJvbSB0aGUgcGFyc2VyLiBVTlVTRUQ6IGJ5IGRlZmF1bHQgdGhlIERPTSBidWlsZGluZyB3aWxsIHVzZSBjaGFyYWN0ZXJzLjwvcD4KKzxwPlJlY2VpdmluZyBzb21lIGlnbm9yYWJsZSB3aGl0ZXNwYWNlcyBmcm9tIHRoZSBwYXJzZXIuIFVOVVNFRDogYnkgZGVmYXVsdCB0aGUgRE9NIGJ1aWxkaW5nIHdpbGwgdXNlIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY2hhcmFjdGVycyI+Y2hhcmFjdGVyczwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTIzNCw2ICsxMjY3LDE0IEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgorPGEgbmFtZT0ieG1sUGFyc2VyVmVyc2lvbiI+VmFyaWFibGUgPC9hPnhtbFBhcnNlclZlcnNpb248L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IGNoYXIgKiBjb25zdCB4bWxQYXJzZXJWZXJzaW9uOworPC9wcmU+Cis8cD5Db25zdGFudCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgaW50ZXJuYWwgdmVyc2lvbiBvZiB0aGUgbGlicmFyeTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbEJ5dGVDb25zdW1lZCI+PC9hPnhtbEJ5dGVDb25zdW1lZCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+bG9uZwl4bWxCeXRlQ29uc3VtZWQJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KQEAgLTEyNjYsNyArMTMwNyw3IEBACiA8YSBuYW1lPSJ4bWxDbGVhck5vZGVJbmZvU2VxIj48L2E+eG1sQ2xlYXJOb2RlSW5mb1NlcSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxDbGVhck5vZGVJbmZvU2VxCQkoPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mb1NlcVB0ciI+eG1sUGFyc2VyTm9kZUluZm9TZXFQdHI8L2E+IHNlcSk8YnI+CiA8L3ByZT4KLTxwPi0tIENsZWFyIChyZWxlYXNlIG1lbW9yeSBhbmQgcmVpbml0aWFsaXplKSBub2RlIGluZm8gc2VxdWVuY2U8L3A+Cis8cD5ERVBSRUNBVEVEOiBEb24ndCB1c2UuIC0tIENsZWFyIChyZWxlYXNlIG1lbW9yeSBhbmQgcmVpbml0aWFsaXplKSBub2RlIGluZm8gc2VxdWVuY2U8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTI5NCwxNCArMTMzNSwxNCBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbENyZWF0ZURvY1BhcnNlckN0eHQiPjwvYT54bWxDcmVhdGVEb2NQYXJzZXJDdHh0ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPgl4bWxDcmVhdGVEb2NQYXJzZXJDdHh0CShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogY3VyKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPgl4bWxDcmVhdGVEb2NQYXJzZXJDdHh0CShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogc3RyKTxicj4KIDwvcHJlPgogPHA+Q3JlYXRlcyBhIHBhcnNlciBjb250ZXh0IGZvciBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KIDx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmN1cjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnN0cjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KIDx0ZD5hIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPgogPC90ZD4KIDwvdHI+CkBAIC0xMzU5LDcgKzE0MDAsNyBAQAogPGEgbmFtZT0ieG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQiPjwvYT54bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4JeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXJQdHIiPnhtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJCSB2b2lkICogdXNlcl9kYXRhLCA8YnI+CQkJCQkJIGNvbnN0IGNoYXIgKiBjaHVuaywgPGJyPgkJCQkJCSBpbnQgc2l6ZSwgPGJyPgkJCQkJCSBjb25zdCBjaGFyICogZmlsZW5hbWUpPGJyPgogPC9wcmU+Ci08cD5DcmVhdGUgYSBwYXJzZXIgY29udGV4dCBmb3IgdXNpbmcgdGhlIFhNTCBwYXJzZXIgaW4gcHVzaCBtb2RlLiBJZiBAYnVmZmVyIGFuZCBAc2l6ZSBhcmUgbm9uLU5VTEwsIHRoZSBkYXRhIGlzIHVzZWQgdG8gZGV0ZWN0IHRoZSBlbmNvZGluZy4gVGhlIHJlbWFpbmluZyA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2NoYXJhY3RlcnMiPmNoYXJhY3RlcnM8L2E+IHdpbGwgYmUgcGFyc2VkIHNvIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBmZWQgaW4gYWdhaW4gdGhyb3VnaCB4bWxQYXJzZUNodW5rLiBUbyBhbGxvdyBjb250ZW50IGVuY29kaW5nIGRldGVjdGlvbiwgQHNpemUgc2hvdWxkIGJlICZndDs9IDQgVGhlIHZhbHVlIG9mIEBmaWxlbmFtZSBpcyB1c2VkIGZvciBmZXRjaGluZyBleHRlcm5hbCBlbnRpdGllcyBhbmQgZXJyb3Ivd2FybmluZyByZXBvcnRzLjwvcD4KKzxwPkNyZWF0ZSBhIHBhcnNlciBjb250ZXh0IGZvciB1c2luZyB0aGUgWE1MIHBhcnNlciBpbiBwdXNoIG1vZGUuIElmIEBidWZmZXIgYW5kIEBzaXplIGFyZSBub24tTlVMTCwgdGhlIGRhdGEgaXMgdXNlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nLiBUaGUgcmVtYWluaW5nIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY2hhcmFjdGVycyI+Y2hhcmFjdGVyczwvYT4gd2lsbCBiZSBwYXJzZWQgc28gdGhleSBkb24ndCBuZWVkIHRvIGJlIGZlZCBpbiBhZ2FpbiB0aHJvdWdoIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VDaHVuayI+eG1sUGFyc2VDaHVuazwvYT4uIFRvIGFsbG93IGNvbnRlbnQgZW5jb2RpbmcgZGV0ZWN0aW9uLCBAc2l6ZSBzaG91bGQgYmUgJmd0Oz0gNCBUaGUgdmFsdWUgb2YgQGZpbGVuYW1lIGlzIHVzZWQgZm9yIGZldGNoaW5nIGV4dGVybmFsIGVudGl0aWVzIGFuZCBlcnJvci93YXJuaW5nIHJlcG9ydHMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTM5NCw3ICsxNDM1LDcgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxDdHh0UmVhZERvYyI+PC9hPnhtbEN0eHRSZWFkRG9jICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4JeG1sQ3R4dFJlYWREb2MJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1ciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBVUkwsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CXhtbEN0eHRSZWFkRG9jCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpPGJyPgogPC9wcmU+CiA8cD5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50IGFuZCBidWlsZCBhIHRyZWUuIFRoaXMgcmV1c2VzIHRoZSBleGlzdGluZyBAY3R4dCBwYXJzZXIgY29udGV4dDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CkBAIC0xNDA1LDcgKzE0NDYsNyBAQAogPHRkPmFuIFhNTCBwYXJzZXIgY29udGV4dDwvdGQ+CiA8L3RyPgogPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+Y3VyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+c3RyPC90dD48L2k+Ojwvc3Bhbj48L3RkPgogPHRkPmEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmc8L3RkPgogPC90cj4KIDx0cj4KQEAgLTE2NDMsNiArMTY4NCwyNyBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9InhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uIj48L2E+eG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSB1bnNpZ25lZCBtYXhBbXBsKTxicj4KKzwvcHJlPgorPHA+VG8gcHJvdGVjdCBhZ2FpbnN0IGV4cG9uZW50aWFsIGVudGl0eSBleHBhbnNpb24gKCJiaWxsaW9uIGxhdWdocyIpLCB0aGUgc2l6ZSBvZiBzZXJpYWxpemVkIG91dHB1dCBpcyAocm91Z2hseSkgbGltaXRlZCB0byB0aGUgaW5wdXQgc2l6ZSBtdWx0aXBsaWVkIGJ5IHRoaXMgZmFjdG9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LiBXaGVuIHdvcmtpbmcgd2l0aCBkb2N1bWVudHMgbWFraW5nIGhlYXZ5IHVzZSBvZiBlbnRpdHkgZXhwYW5zaW9uLCBpdCBjYW4gYmUgbmVjZXNzYXJ5IHRvIGluY3JlYXNlIHRoZSB2YWx1ZS4gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCB3aGVuIHByb2Nlc3NpbmcgdHJ1c3RlZCBpbnB1dC48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5jdHh0PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPmFuIFhNTCBwYXJzZXIgY29udGV4dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bWF4QW1wbDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5tYXhpbXVtIGFtcGxpZmljYXRpb24gZmFjdG9yPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbEN0eHRVc2VPcHRpb25zIj48L2E+eG1sQ3R4dFVzZU9wdGlvbnMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxDdHh0VXNlT3B0aW9ucwkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk8YnI+CiA8L3ByZT4KQEAgLTE4MDYsNyArMTg2OCw3IEBACiA8YSBuYW1lPSJ4bWxJbml0Tm9kZUluZm9TZXEiPjwvYT54bWxJbml0Tm9kZUluZm9TZXEgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sSW5pdE5vZGVJbmZvU2VxCQkoPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mb1NlcVB0ciI+eG1sUGFyc2VyTm9kZUluZm9TZXFQdHI8L2E+IHNlcSk8YnI+CiA8L3ByZT4KLTxwPi0tIEluaXRpYWxpemUgKHNldCB0byBpbml0aWFsIHN0YXRlKSBub2RlIGluZm8gc2VxdWVuY2U8L3A+Cis8cD5ERVBSRUNBVEVEOiBEb24ndCB1c2UuIC0tIEluaXRpYWxpemUgKHNldCB0byBpbml0aWFsIHN0YXRlKSBub2RlIGluZm8gc2VxdWVuY2U8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTgyMSw3ICsxODgzLDcgQEAKIDxhIG5hbWU9InhtbEluaXRQYXJzZXIiPjwvYT54bWxJbml0UGFyc2VyICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEluaXRQYXJzZXIJCQkodm9pZCk8YnI+CiA8L3ByZT4KLTxwPkluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgWE1MIHBhcnNlci4gVGhpcyBpcyBub3QgcmVlbnRyYW50LiBDYWxsIG9uY2UgYmVmb3JlIHByb2Nlc3NpbmcgaW4gY2FzZSBvZiB1c2UgaW4gbXVsdGl0aHJlYWRlZCBwcm9ncmFtcy48L3A+Cis8cD5Jbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFhNTCBwYXJzZXIuIENhbGwgb25jZSBmcm9tIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgdXNpbmcgdGhlIGxpYnJhcnkgaW4gbXVsdGl0aHJlYWRlZCBwcm9ncmFtcy48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC0xODI5LDcgKzE4OTEsNyBAQAogPGEgbmFtZT0ieG1sSW5pdFBhcnNlckN0eHQiPjwvYT54bWxJbml0UGFyc2VyQ3R4dCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEluaXRQYXJzZXJDdHh0CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPkluaXRpYWxpemUgYSBwYXJzZXIgY29udGV4dDwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgbWFkZSBwcml2YXRlIGluIGEgZnV0dXJlIHZlcnNpb24uIEluaXRpYWxpemUgYSBwYXJzZXIgY29udGV4dDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTE4NTAsNyArMTkxMiw3IEBACiA8YSBuYW1lPSJ4bWxLZWVwQmxhbmtzRGVmYXVsdCI+PC9hPnhtbEtlZXBCbGFua3NEZWZhdWx0ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sS2VlcEJsYW5rc0RlZmF1bHQJCShpbnQgdmFsKTxicj4KIDwvcHJlPgotPHA+U2V0IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIGZvciBkZWZhdWx0IGJsYW5rcyB0ZXh0IG5vZGVzIHN1cHBvcnQuIFRoZSAxLnggdmVyc2lvbiBvZiB0aGUgcGFyc2VyIHVzZWQgYW4gaGV1cmlzdGljIHRvIHRyeSB0byBkZXRlY3QgaWdub3JhYmxlIHdoaXRlIHNwYWNlcy4gQXMgYSByZXN1bHQgdGhlIFNBWCBjYWxsYmFjayB3YXMgZ2VuZXJhdGluZyB4bWxTQVgySWdub3JhYmxlV2hpdGVzcGFjZSgpIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIGNoYXJhY3RlcnMoKSBvbmUsIGFuZCB3aGVuIHVzaW5nIHRoZSBET00gb3V0cHV0IHRleHQgbm9kZXMgY29udGFpbmluZyB0aG9zZSBibGFua3Mgd2VyZSBub3QgZ2VuZXJhdGVkLiBUaGUgMi54IGFuZCBsYXRlciB2ZXJzaW9uIHdpbGwgc3dpdGNoIHRvIHRoZSBYTUwgc3RhbmRhcmQgd2F5IGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgYXJlIG9ubHkgZ2VuZXJhdGVkIHdoZW4gcnVubmluZyB0aGUgcGFyc2VyIGluIHZhbGlkYXRpbmcgbW9kZSBhbmQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGRvZXNuJ3QgYWxsb3cgQ0RBVEEgb3IgbWl4ZWQgY29udGVudC4gVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBhcyBhIHdheSB0byBmb3JjZSB0aGUgc3RhbmRhcmQgYmVoYXZpb3Igb24gMS5YIGxpYnMgYW5kIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBvbGQgbW9kZSBmb3IgY29tcGF0aWJpbGl0eSB3aGVuIHJ1bm5pbmcgMS5YIGNsaWVudCBjb2RlIG9uIDIuWCAuIFVwZ3JhZGUgb2YgMS5YIGNvZGUgc2hvdWxkIGJlIGRvbmUgYnkgdXNpbmcgeG1sSXNCbGFua05vZGUoKSBjb21tb2RpdHkgZnVuY3Rpb24gdG8gZGV0ZWN0IHRoZSAiZW1wdHkiIG5vZGVzIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBhbHNvIGFmZmVjdCBhdXRvZ2VuZXJhdGlvbiBvZiBpbmRlbnRhdGlvbiB3aGVuIHNhdmluZyBjb2RlIGlmIGJsYW5rcyBzZWN0aW9ucyBhcmUga2VwdCwgaW5kZW50YXRpb24gaXMgbm90IGdlbmVyYXRlZC48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgdGhlIG1vZGVybiBvcHRpb25zIEFQSSB3aXRoIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjWE1MX1BBUlNFX05PQkxBTktTIj5YTUxfUEFSU0VfTk9CTEFOS1M8L2E+LiBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGRlZmF1bHQgYmxhbmtzIHRleHQgbm9kZXMgc3VwcG9ydC4gVGhlIDEueCB2ZXJzaW9uIG9mIHRoZSBwYXJzZXIgdXNlZCBhbiBoZXVyaXN0aWMgdG8gdHJ5IHRvIGRldGVjdCBpZ25vcmFibGUgd2hpdGUgc3BhY2VzLiBBcyBhIHJlc3VsdCB0aGUgU0FYIGNhbGxiYWNrIHdhcyBnZW5lcmF0aW5nIHhtbFNBWDJJZ25vcmFibGVXaGl0ZXNwYWNlKCkgY2FsbGJhY2tzIGluc3RlYWQgb2YgY2hhcmFjdGVycygpIG9uZSwgYW5kIHdoZW4gdXNpbmcgdGhlIERPTSBvdXRwdXQgdGV4dCBub2RlcyBjb250YWluaW5nIHRob3NlIGJsYW5rcyB3ZXJlIG5vdCBnZW5lcmF0ZWQuIFRoZSAyLnggYW5kIGxhdGVyIHZlcnNpb24gd2lsbCBzd2l0Y2ggdG8gdGhlIFhNTCBzdGFuZGFyZCB3YXkgYW5kIGlnbm9yYWJsZVdoaXRlc3BhY2UoKSBhcmUgb25seSBnZW5lcmF0ZWQgd2hlbiBydW5uaW5nIHRoZSBwYXJzZXIgaW4gdmFsaWRhdGluZyBtb2RlIGFuZCB3aGVuIHRoZSBjdXJyZW50IGVsZW1lbnQgZG9lc24ndCBhbGxvdyBDREFUQSBvciBtaXhlZCBjb250ZW50LiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGFzIGEgd2F5IHRvIGZvcmNlIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBvbiAxLlggbGlicyBhbmQgdG8gc3dpdGNoIGJhY2sgdG8gdGhlIG9sZCBtb2RlIGZvciBjb21wYXRpYmlsaXR5IHdoZW4gcnVubmluZyAxLlggY2xpZW50IGNvZGUgb24gMi5YIC4gVXBncmFkZSBvZiAxLlggY29kZSBzaG91bGQgYmUgZG9uZSBieSB1c2luZyB4bWxJc0JsYW5rTm9kZSgpIGNvbW1vZGl0eSBmdW5jdGlvbiB0byBkZXRlY3QgdGhlICJlbXB0eSIgbm9kZXMgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIGFsc28gYWZmZWN0IGF1dG9nZW5lcmF0aW9uIG9mIGluZGVudGF0aW9uIHdoZW4gc2F2aW5nIGNvZGUgaWYgYmxhbmtzIHNlY3Rpb25zIGFyZSBrZXB0LCBpbmRlbnRhdGlvbiBpcyBub3QgZ2VuZXJhdGVkLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTE4NzEsNyArMTkzMyw3IEBACiA8YSBuYW1lPSJ4bWxMaW5lTnVtYmVyc0RlZmF1bHQiPjwvYT54bWxMaW5lTnVtYmVyc0RlZmF1bHQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxMaW5lTnVtYmVyc0RlZmF1bHQJCShpbnQgdmFsKTxicj4KIDwvcHJlPgotPHA+U2V0IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIGZvciBlbmFibGluZyBsaW5lIG51bWJlcnMgaW4gZWxlbWVudHMgY29udGVudHMuIFRoaXMgbWF5IGJyZWFrIG9uIG9sZCBhcHBsaWNhdGlvbiBhbmQgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LjwvcD4KKzxwPkRFUFJFQ0FURUQ6IFRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgYWx3YXlzIGVuYWJsZXMgbGluZSBudW1iZXJzLiBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGVuYWJsaW5nIGxpbmUgbnVtYmVycyBpbiBlbGVtZW50cyBjb250ZW50cy4gVGhpcyBtYXkgYnJlYWsgb24gb2xkIGFwcGxpY2F0aW9uIGFuZCBpcyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTk2Miw2ICsyMDI0LDMxIEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgorPGEgbmFtZT0ieG1sTmV3U0FYUGFyc2VyQ3R4dCI+PC9hPnhtbE5ld1NBWFBhcnNlckN0eHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+CXhtbE5ld1NBWFBhcnNlckN0eHQJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXIiPnhtbFNBWEhhbmRsZXI8L2E+ICogc2F4LCA8YnI+CQkJCQkJIHZvaWQgKiB1c2VyRGF0YSk8YnI+Cis8L3ByZT4KKzxwPkFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFNBWCBwYXJzZXIgY29udGV4dC4gSWYgdXNlckRhdGEgaXMgTlVMTCwgdGhlIHBhcnNlciBjb250ZXh0IHdpbGwgYmUgcGFzc2VkIGFzIHVzZXIgZGF0YS48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5zYXg8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+U0FYIGhhbmRsZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnVzZXJEYXRhPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnVzZXIgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gb3IgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeSI+PC9hPnhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGRvYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXJQdHIiPnhtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJIHZvaWQgKiB1c2VyX2RhdGEsIDxicj4JCQkJCSBpbnQgZGVwdGgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogc3RyaW5nLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gKiBsc3QpPGJyPgogPC9wcmU+CkBAIC0yMTQyLDcgKzIyMjksNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VEb2MiPjwvYT54bWxQYXJzZURvYyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CXhtbFBhcnNlRG9jCQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1cik8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQgYW5kIGJ1aWxkIGEgdHJlZS48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxSZWFkRG9jIj54bWxSZWFkRG9jPC9hPi4gcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTIyNzIsNyArMjM1OSw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZUZpbGUiPjwvYT54bWxQYXJzZUZpbGUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPgl4bWxQYXJzZUZpbGUJCShjb25zdCBjaGFyICogZmlsZW5hbWUpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IFVzZSA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFJlYWRGaWxlIj54bWxSZWFkRmlsZTwvYT4uIHBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjMzMiw3ICsyNDE5LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlTWVtb3J5Ij48L2E+eG1sUGFyc2VNZW1vcnkgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPgl4bWxQYXJzZU1lbW9yeQkJKGNvbnN0IGNoYXIgKiBidWZmZXIsIDxicj4JCQkJCSBpbnQgc2l6ZSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIGJ1aWxkIGEgdHJlZS48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxSZWFkTWVtb3J5Ij54bWxSZWFkTWVtb3J5PC9hPi4gcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBibG9jayBhbmQgYnVpbGQgYSB0cmVlLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTIzNTcsNyArMjQ0NCw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZXJBZGROb2RlSW5mbyI+PC9hPnhtbFBhcnNlckFkZE5vZGVJbmZvICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlckFkZE5vZGVJbmZvCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyTm9kZUluZm9QdHIiPnhtbFBhcnNlck5vZGVJbmZvUHRyPC9hPiBpbmZvKTxicj4KIDwvcHJlPgotPHA+SW5zZXJ0IG5vZGUgaW5mbyByZWNvcmQgaW50byB0aGUgc29ydGVkIHNlcXVlbmNlPC9wPgorPHA+REVQUkVDQVRFRDogRG9uJ3QgdXNlLiBJbnNlcnQgbm9kZSBpbmZvIHJlY29yZCBpbnRvIHRoZSBzb3J0ZWQgc2VxdWVuY2U8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yMzc4LDcgKzI0NjUsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VyRmluZE5vZGVJbmZvIj48L2E+eG1sUGFyc2VyRmluZE5vZGVJbmZvICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlck5vZGVJbmZvIj54bWxQYXJzZXJOb2RlSW5mbzwvYT4gKgl4bWxQYXJzZXJGaW5kTm9kZUluZm8JKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eCwgPGJyPgkJCQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gbm9kZSk8YnI+CiA8L3ByZT4KLTxwPkZpbmQgdGhlIHBhcnNlciBub2RlIGluZm8gc3RydWN0IGZvciBhIGdpdmVuIG5vZGU8L3A+Cis8cD5ERVBSRUNBVEVEOiBEb24ndCB1c2UuIEZpbmQgdGhlIHBhcnNlciBub2RlIGluZm8gc3RydWN0IGZvciBhIGdpdmVuIG5vZGU8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yNDAzLDcgKzI0OTAsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VyRmluZE5vZGVJbmZvSW5kZXgiPjwvYT54bWxQYXJzZXJGaW5kTm9kZUluZm9JbmRleCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dW5zaWduZWQgbG9uZwl4bWxQYXJzZXJGaW5kTm9kZUluZm9JbmRleAkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mb1NlcVB0ciI+eG1sUGFyc2VyTm9kZUluZm9TZXFQdHI8L2E+IHNlcSwgPGJyPgkJCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBub2RlKTxicj4KIDwvcHJlPgotPHA+PGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJGaW5kTm9kZUluZm9JbmRleCI+eG1sUGFyc2VyRmluZE5vZGVJbmZvSW5kZXg8L2E+IDogRmluZCB0aGUgaW5kZXggdGhhdCB0aGUgaW5mbyByZWNvcmQgZm9yIHRoZSBnaXZlbiBub2RlIGlzIG9yIHNob3VsZCBiZSBhdCBpbiBhIHNvcnRlZCBzZXF1ZW5jZTwvcD4KKzxwPkRFUFJFQ0FURUQ6IERvbid0IHVzZS4gPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJGaW5kTm9kZUluZm9JbmRleCI+eG1sUGFyc2VyRmluZE5vZGVJbmZvSW5kZXg8L2E+IDogRmluZCB0aGUgaW5kZXggdGhhdCB0aGUgaW5mbyByZWNvcmQgZm9yIHRoZSBnaXZlbiBub2RlIGlzIG9yIHNob3VsZCBiZSBhdCBpbiBhIHNvcnRlZCBzZXF1ZW5jZTwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI0MjgsNyArMjUxNSw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZXJJbnB1dEdyb3ciPjwvYT54bWxQYXJzZXJJbnB1dEdyb3cgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxQYXJzZXJJbnB1dEdyb3cJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dFB0ciI+eG1sUGFyc2VySW5wdXRQdHI8L2E+IGluLCA8YnI+CQkJCQkgaW50IGxlbik8YnI+CiA8L3ByZT4KLTxwPlRoaXMgZnVuY3Rpb24gaW5jcmVhc2UgdGhlIGlucHV0IGZvciB0aGUgcGFyc2VyLiBJdCB0cmllcyB0byBwcmVzZXJ2ZSBwb2ludGVycyB0byB0aGUgaW5wdXQgYnVmZmVyLCBhbmQga2VlcCBhbHJlYWR5IHJlYWQgZGF0YTwvcD4KKzxwPkRFUFJFQ0FURUQ6IERvbid0IHVzZS4gVGhpcyBmdW5jdGlvbiBpbmNyZWFzZSB0aGUgaW5wdXQgZm9yIHRoZSBwYXJzZXIuIEl0IHRyaWVzIHRvIHByZXNlcnZlIHBvaW50ZXJzIHRvIHRoZSBpbnB1dCBidWZmZXIsIGFuZCBrZWVwIGFscmVhZHkgcmVhZCBkYXRhPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjQ1Myw3ICsyNTQwLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlcklucHV0UmVhZCI+PC9hPnhtbFBhcnNlcklucHV0UmVhZCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFBhcnNlcklucHV0UmVhZAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0UHRyIj54bWxQYXJzZXJJbnB1dFB0cjwvYT4gaW4sIDxicj4JCQkJCSBpbnQgbGVuKTxicj4KIDwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiB3YXMgaW50ZXJuYWwgYW5kIGlzIGRlcHJlY2F0ZWQuPC9wPgorPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3YXMgaW50ZXJuYWwgYW5kIGlzIGRlcHJlY2F0ZWQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjQ3OCw3ICsyNTY1LDcgQEAKIDxhIG5hbWU9InhtbFBlZGFudGljUGFyc2VyRGVmYXVsdCI+PC9hPnhtbFBlZGFudGljUGFyc2VyRGVmYXVsdCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFBlZGFudGljUGFyc2VyRGVmYXVsdAkoaW50IHZhbCk8YnI+CiA8L3ByZT4KLTxwPlNldCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgZW5hYmxpbmcgcGVkYW50aWMgd2FybmluZ3MuPC9wPgorPHA+REVQUkVDQVRFRDogVXNlIHRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgd2l0aCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI1hNTF9QQVJTRV9QRURBTlRJQyI+WE1MX1BBUlNFX1BFREFOVElDPC9hPi4gU2V0IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIGZvciBlbmFibGluZyBwZWRhbnRpYyB3YXJuaW5ncy48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yNjc3LDcgKzI3NjQsNyBAQAogPGEgbmFtZT0ieG1sUmVjb3ZlckRvYyI+PC9hPnhtbFJlY292ZXJEb2MgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPgl4bWxSZWNvdmVyRG9jCQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1cik8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQgYW5kIGJ1aWxkIGEgdHJlZS4gSW4gdGhlIGNhc2UgdGhlIGRvY3VtZW50IGlzIG5vdCBXZWxsIEZvcm1lZCwgYSBhdHRlbXB0IHRvIGJ1aWxkIGEgdHJlZSBpcyB0cmllZCBhbnl3YXk8L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxSZWFkRG9jIj54bWxSZWFkRG9jPC9hPiB3aXRoIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjWE1MX1BBUlNFX1JFQ09WRVIiPlhNTF9QQVJTRV9SRUNPVkVSPC9hPi4gcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLiBJbiB0aGUgY2FzZSB0aGUgZG9jdW1lbnQgaXMgbm90IFdlbGwgRm9ybWVkLCBhIGF0dGVtcHQgdG8gYnVpbGQgYSB0cmVlIGlzIHRyaWVkIGFueXdheTwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI2OTksNyArMjc4Niw3IEBACiA8YSBuYW1lPSJ4bWxSZWNvdmVyRmlsZSI+PC9hPnhtbFJlY292ZXJGaWxlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4JeG1sUmVjb3ZlckZpbGUJCShjb25zdCBjaGFyICogZmlsZW5hbWUpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLiBJbiB0aGUgY2FzZSB0aGUgZG9jdW1lbnQgaXMgbm90IFdlbGwgRm9ybWVkLCBpdCBhdHRlbXB0cyB0byBidWlsZCBhIHRyZWUgYW55d2F5PC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUmVhZEZpbGUiPnhtbFJlYWRGaWxlPC9hPiB3aXRoIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjWE1MX1BBUlNFX1JFQ09WRVIiPlhNTF9QQVJTRV9SRUNPVkVSPC9hPi4gcGFyc2UgYW4gWE1MIGZpbGUgYW5kIGJ1aWxkIGEgdHJlZS4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MgY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4gSW4gdGhlIGNhc2UgdGhlIGRvY3VtZW50IGlzIG5vdCBXZWxsIEZvcm1lZCwgaXQgYXR0ZW1wdHMgdG8gYnVpbGQgYSB0cmVlIGFueXdheTwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI3MjAsNyArMjgwNyw3IEBACiA8YSBuYW1lPSJ4bWxSZWNvdmVyTWVtb3J5Ij48L2E+eG1sUmVjb3Zlck1lbW9yeSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CXhtbFJlY292ZXJNZW1vcnkJKGNvbnN0IGNoYXIgKiBidWZmZXIsIDxicj4JCQkJCSBpbnQgc2l6ZSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIGJ1aWxkIGEgdHJlZS4gSW4gdGhlIGNhc2UgdGhlIGRvY3VtZW50IGlzIG5vdCBXZWxsIEZvcm1lZCwgYW4gYXR0ZW1wdCB0byBidWlsZCBhIHRyZWUgaXMgdHJpZWQgYW55d2F5PC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUmVhZE1lbW9yeSI+eG1sUmVhZE1lbW9yeTwvYT4gd2l0aCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI1hNTF9QQVJTRV9SRUNPVkVSIj5YTUxfUEFSU0VfUkVDT1ZFUjwvYT4uIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIGJ1aWxkIGEgdHJlZS4gSW4gdGhlIGNhc2UgdGhlIGRvY3VtZW50IGlzIG5vdCBXZWxsIEZvcm1lZCwgYW4gYXR0ZW1wdCB0byBidWlsZCBhIHRyZWUgaXMgdHJpZWQgYW55d2F5PC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjc0NSw3ICsyODMyLDcgQEAKIDxhIG5hbWU9InhtbFNBWFBhcnNlRFREIj48L2E+eG1sU0FYUGFyc2VEVEQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbER0ZFB0ciI+eG1sRHRkUHRyPC9hPgl4bWxTQVhQYXJzZURURAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXJQdHIiPnhtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBFeHRlcm5hbElELCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIFN5c3RlbUlEKTxicj4KIDwvcHJlPgotPHA+TG9hZCBhbmQgcGFyc2UgYW4gZXh0ZXJuYWwgc3Vic2V0LjwvcD4KKzxwPkRFUFJFQ0FURUQ6IERvbid0IHVzZS4gTG9hZCBhbmQgcGFyc2UgYW4gZXh0ZXJuYWwgc3Vic2V0LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI3NzQsNyArMjg2MSw3IEBACiA8YSBuYW1lPSJ4bWxTQVhQYXJzZURvYyI+PC9hPnhtbFNBWFBhcnNlRG9jICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4JeG1sU0FYUGFyc2VEb2MJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhIYW5kbGVyUHRyIj54bWxTQVhIYW5kbGVyUHRyPC9hPiBzYXgsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogY3VyLCA8YnI+CQkJCQkgaW50IHJlY292ZXJ5KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLiBJdCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxOZXdTQVhQYXJzZXJDdHh0Ij54bWxOZXdTQVhQYXJzZXJDdHh0PC9hPiBhbmQgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0UmVhZERvYyI+eG1sQ3R4dFJlYWREb2M8L2E+LiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50IGFuZCBidWlsZCBhIHRyZWUuIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI4MDQsNyArMjg5MSw3IEBACiA8YSBuYW1lPSJ4bWxTQVhQYXJzZUVudGl0eSI+PC9hPnhtbFNBWFBhcnNlRW50aXR5ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4JeG1sU0FYUGFyc2VFbnRpdHkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFNBWEhhbmRsZXJQdHIiPnhtbFNBWEhhbmRsZXJQdHI8L2E+IHNheCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBleHRlcm5hbCBlbnRpdHkgb3V0IG9mIGNvbnRleHQgYW5kIGJ1aWxkIGEgdHJlZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuIFs3OF0gZXh0UGFyc2VkRW50IDo6PSBUZXh0RGVjbD8gY29udGVudCBUaGlzIGNvcnJlc3BvbmQgdG8gYSAiV2VsbCBCYWxhbmNlZCIgY2h1bms8L3A+Cis8cD5ERVBSRUNBVEVEOiBEb24ndCB1c2UuIHBhcnNlIGFuIFhNTCBleHRlcm5hbCBlbnRpdHkgb3V0IG9mIGNvbnRleHQgYW5kIGJ1aWxkIGEgdHJlZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuIFs3OF0gZXh0UGFyc2VkRW50IDo6PSBUZXh0RGVjbD8gY29udGVudCBUaGlzIGNvcnJlc3BvbmQgdG8gYSAiV2VsbCBCYWxhbmNlZCIgY2h1bms8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yODI5LDcgKzI5MTYsNyBAQAogPGEgbmFtZT0ieG1sU0FYUGFyc2VGaWxlIj48L2E+eG1sU0FYUGFyc2VGaWxlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4JeG1sU0FYUGFyc2VGaWxlCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU0FYSGFuZGxlclB0ciI+eG1sU0FYSGFuZGxlclB0cjwvYT4gc2F4LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkgaW50IHJlY292ZXJ5KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gWE1MIGZpbGUgYW5kIGJ1aWxkIGEgdHJlZS4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MgY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuPC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sTmV3U0FYUGFyc2VyQ3R4dCI+eG1sTmV3U0FYUGFyc2VyQ3R4dDwvYT4gYW5kIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ3R4dFJlYWRGaWxlIj54bWxDdHh0UmVhZEZpbGU8L2E+LiBwYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLiBJdCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yODU4LDcgKzI5NDUsNyBAQAogPGEgbmFtZT0ieG1sU0FYUGFyc2VGaWxlV2l0aERhdGEiPjwvYT54bWxTQVhQYXJzZUZpbGVXaXRoRGF0YSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CXhtbFNBWFBhcnNlRmlsZVdpdGhEYXRhCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhIYW5kbGVyUHRyIj54bWxTQVhIYW5kbGVyUHRyPC9hPiBzYXgsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZmlsZW5hbWUsIDxicj4JCQkJCSBpbnQgcmVjb3ZlcnksIDxicj4JCQkJCSB2b2lkICogZGF0YSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLiBVc2VyIGRhdGEgKHZvaWQgKikgaXMgc3RvcmVkIHdpdGhpbiB0aGUgcGFyc2VyIGNvbnRleHQgaW4gdGhlIGNvbnRleHQncyBfcHJpdmF0ZSBtZW1iZXIsIHNvIGl0IGlzIGF2YWlsYWJsZSBuZWFybHkgZXZlcnl3aGVyZSBpbiBsaWJ4bWw8L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxOZXdTQVhQYXJzZXJDdHh0Ij54bWxOZXdTQVhQYXJzZXJDdHh0PC9hPiBhbmQgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0UmVhZEZpbGUiPnhtbEN0eHRSZWFkRmlsZTwvYT4uIHBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLiBVc2VyIGRhdGEgKHZvaWQgKikgaXMgc3RvcmVkIHdpdGhpbiB0aGUgcGFyc2VyIGNvbnRleHQgaW4gdGhlIGNvbnRleHQncyBfcHJpdmF0ZSBtZW1iZXIsIHNvIGl0IGlzIGF2YWlsYWJsZSBuZWFybHkgZXZlcnl3aGVyZSBpbiBsaWJ4bWw8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yODkxLDcgKzI5NzgsNyBAQAogPGEgbmFtZT0ieG1sU0FYUGFyc2VNZW1vcnkiPjwvYT54bWxTQVhQYXJzZU1lbW9yeSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CXhtbFNBWFBhcnNlTWVtb3J5CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhIYW5kbGVyUHRyIj54bWxTQVhIYW5kbGVyUHRyPC9hPiBzYXgsIDxicj4JCQkJCSBjb25zdCBjaGFyICogYnVmZmVyLCA8YnI+CQkJCQkgaW50IHNpemUsIDxicj4JCQkJCSBpbnQgcmVjb3ZlcnkpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxOZXdTQVhQYXJzZXJDdHh0Ij54bWxOZXdTQVhQYXJzZXJDdHh0PC9hPiBhbmQgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0UmVhZE1lbW9yeSI+eG1sQ3R4dFJlYWRNZW1vcnk8L2E+LiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yOTI0LDcgKzMwMTEsNyBAQAogPGEgbmFtZT0ieG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YSI+PC9hPnhtbFNBWFBhcnNlTWVtb3J5V2l0aERhdGEgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPgl4bWxTQVhQYXJzZU1lbW9yeVdpdGhEYXRhCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhIYW5kbGVyUHRyIj54bWxTQVhIYW5kbGVyUHRyPC9hPiBzYXgsIDxicj4JCQkJCQkgY29uc3QgY2hhciAqIGJ1ZmZlciwgPGJyPgkJCQkJCSBpbnQgc2l6ZSwgPGJyPgkJCQkJCSBpbnQgcmVjb3ZlcnksIDxicj4JCQkJCQkgdm9pZCAqIGRhdGEpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy4gVXNlciBkYXRhICh2b2lkICopIGlzIHN0b3JlZCB3aXRoaW4gdGhlIHBhcnNlciBjb250ZXh0IGluIHRoZSBjb250ZXh0J3MgX3ByaXZhdGUgbWVtYmVyLCBzbyBpdCBpcyBhdmFpbGFibGUgbmVhcmx5IGV2ZXJ5d2hlcmUgaW4gbGlieG1sPC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sTmV3U0FYUGFyc2VyQ3R4dCI+eG1sTmV3U0FYUGFyc2VyQ3R4dDwvYT4gYW5kIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ3R4dFJlYWRNZW1vcnkiPnhtbEN0eHRSZWFkTWVtb3J5PC9hPi4gcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBibG9jayBhbmQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuIFVzZXIgZGF0YSAodm9pZCAqKSBpcyBzdG9yZWQgd2l0aGluIHRoZSBwYXJzZXIgY29udGV4dCBpbiB0aGUgY29udGV4dCdzIF9wcml2YXRlIG1lbWJlciwgc28gaXQgaXMgYXZhaWxhYmxlIG5lYXJseSBldmVyeXdoZXJlIGluIGxpYnhtbDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI5NjEsNyArMzA0OCw3IEBACiA8YSBuYW1lPSJ4bWxTQVhVc2VyUGFyc2VGaWxlIj48L2E+eG1sU0FYVXNlclBhcnNlRmlsZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFNBWFVzZXJQYXJzZUZpbGUJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxTQVhIYW5kbGVyUHRyIj54bWxTQVhIYW5kbGVyUHRyPC9hPiBzYXgsIDxicj4JCQkJCSB2b2lkICogdXNlcl9kYXRhLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGZpbGVuYW1lKTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gWE1MIGZpbGUgYW5kIGNhbGwgdGhlIGdpdmVuIFNBWCBoYW5kbGVyIHJvdXRpbmVzLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkPC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sTmV3U0FYUGFyc2VyQ3R4dCI+eG1sTmV3U0FYUGFyc2VyQ3R4dDwvYT4gYW5kIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ3R4dFJlYWRGaWxlIj54bWxDdHh0UmVhZEZpbGU8L2E+LiBwYXJzZSBhbiBYTUwgZmlsZSBhbmQgY2FsbCB0aGUgZ2l2ZW4gU0FYIGhhbmRsZXIgcm91dGluZXMuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQ8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yOTkwLDcgKzMwNzcsNyBAQAogPGEgbmFtZT0ieG1sU0FYVXNlclBhcnNlTWVtb3J5Ij48L2E+eG1sU0FYVXNlclBhcnNlTWVtb3J5ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sU0FYVXNlclBhcnNlTWVtb3J5CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU0FYSGFuZGxlclB0ciI+eG1sU0FYSGFuZGxlclB0cjwvYT4gc2F4LCA8YnI+CQkJCQkgdm9pZCAqIHVzZXJfZGF0YSwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBidWZmZXIsIDxicj4JCQkJCSBpbnQgc2l6ZSk8YnI+CiA8L3ByZT4KLTxwPkEgYmV0dGVyIFNBWCBwYXJzaW5nIHJvdXRpbmUuIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYnVmZmVyIGFuZCBjYWxsIHRoZSBnaXZlbiBTQVggaGFuZGxlciByb3V0aW5lcy48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxOZXdTQVhQYXJzZXJDdHh0Ij54bWxOZXdTQVhQYXJzZXJDdHh0PC9hPiBhbmQgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0UmVhZE1lbW9yeSI+eG1sQ3R4dFJlYWRNZW1vcnk8L2E+LiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJ1ZmZlciBhbmQgY2FsbCB0aGUgZ2l2ZW4gU0FYIGhhbmRsZXIgcm91dGluZXMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMzA2Nyw3ICszMTU0LDcgQEAKIDxhIG5hbWU9InhtbFNldHVwUGFyc2VyRm9yQnVmZmVyIj48L2E+eG1sU2V0dXBQYXJzZXJGb3JCdWZmZXIgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sU2V0dXBQYXJzZXJGb3JCdWZmZXIJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGJ1ZmZlciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSk8YnI+CiA8L3ByZT4KLTxwPlNldHVwIHRoZSBwYXJzZXIgY29udGV4dCB0byBwYXJzZSBhIG5ldyBidWZmZXI7IENsZWFycyBhbnkgcHJpb3IgY29udGVudHMgZnJvbSB0aGUgcGFyc2VyIGNvbnRleHQuIFRoZSBidWZmZXIgcGFyYW1ldGVyIG11c3Qgbm90IGJlIE5VTEwsIGJ1dCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyIGNhbiBiZTwvcD4KKzxwPkRFUFJFQ0FURUQ6IERvbid0IHVzZS4gU2V0dXAgdGhlIHBhcnNlciBjb250ZXh0IHRvIHBhcnNlIGEgbmV3IGJ1ZmZlcjsgQ2xlYXJzIGFueSBwcmlvciBjb250ZW50cyBmcm9tIHRoZSBwYXJzZXIgY29udGV4dC4gVGhlIGJ1ZmZlciBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgTlVMTCwgYnV0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgY2FuIGJlPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMzEwNyw3ICszMTk0LDcgQEAKIDxhIG5hbWU9InhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQiPjwvYT54bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdAkoaW50IHZhbCk8YnI+CiA8L3ByZT4KLTxwPlNldCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgZGVmYXVsdCBlbnRpdHkgc3VwcG9ydC4gSW5pdGlhbGx5IHRoZSBwYXJzZXIgYWx3YXlzIGtlZXAgZW50aXR5IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBzdWJzdGl0dXRpbmcgZW50aXR5IHZhbHVlcyBpbiB0aGUgb3V0cHV0LiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBwYXJzZXIgYmVoYXZpb3IgU0FYOjpzdWJzdGl0dXRlRW50aXRpZXMoKSBoYXMgdG8gYmUgdXNlZCBmb3IgY2hhbmdpbmcgdGhhdCBvbiBhIGZpbGUgYnkgZmlsZSBiYXNpcy48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgdGhlIG1vZGVybiBvcHRpb25zIEFQSSB3aXRoIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjWE1MX1BBUlNFX05PRU5UIj5YTUxfUEFSU0VfTk9FTlQ8L2E+LiBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGRlZmF1bHQgZW50aXR5IHN1cHBvcnQuIEluaXRpYWxseSB0aGUgcGFyc2VyIGFsd2F5cyBrZWVwIGVudGl0eSByZWZlcmVuY2VzIGluc3RlYWQgb2Ygc3Vic3RpdHV0aW5nIGVudGl0eSB2YWx1ZXMgaW4gdGhlIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcGFyc2VyIGJlaGF2aW9yIFNBWDo6c3Vic3RpdHV0ZUVudGl0aWVzKCkgaGFzIHRvIGJlIHVzZWQgZm9yIGNoYW5naW5nIHRoYXQgb24gYSBmaWxlIGJ5IGZpbGUgYmFzaXMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMzEyMyw2ICszMjEwLDE3NCBAQAogPC90YWJsZT48L2Rpdj4KIDwvZGl2PgogPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSI+PC9hPnhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZQkoaW50IHYpPGJyPgorPC9wcmU+Cis8cD48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUiPjwvYT54bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlCShpbnQgdik8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+Cis8YSBuYW1lPSJ4bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlIj48L2E+eG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUJKGludCB2KTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+djwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlIj48L2E+eG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZQkoaW50IHYpPGJyPgorPC9wcmU+Cis8cD48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSI+PC9hPnhtbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlCShpbnQgdik8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+Cis8YSBuYW1lPSJ4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzIj48L2E+eG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMJKGludCB2KTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+djwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlIj48L2E+eG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZQkoaW50IHYpPGJyPgorPC9wcmU+Cis8cD48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlIj48L2E+eG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlCShpbnQgdik8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KIDwvZGl2PgogPC9kaXY+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sIGIvZG9jL2RldmhlbHAvbGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbAppbmRleCA0ZGU2ZTZkLi4zOGE0NjQxIDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwKQEAgLTQyLDEwICs0Miw4IEBACiAjZGVmaW5lIDxhIGhyZWY9IiNJU19MRVRURVJfQ0giPklTX0xFVFRFUl9DSDwvYT4oYyk7CiAjZGVmaW5lIDxhIGhyZWY9IiNJU19QVUJJRENIQVIiPklTX1BVQklEQ0hBUjwvYT4oYyk7CiAjZGVmaW5lIDxhIGhyZWY9IiNJU19QVUJJRENIQVJfQ0giPklTX1BVQklEQ0hBUl9DSDwvYT4oYyk7Ci0jZGVmaW5lIDxhIGhyZWY9IiNNT1ZFVE9fRU5EVEFHIj5NT1ZFVE9fRU5EVEFHPC9hPihwKTsKLSNkZWZpbmUgPGEgaHJlZj0iI01PVkVUT19TVEFSVFRBRyI+TU9WRVRPX1NUQVJUVEFHPC9hPihwKTsKLSNkZWZpbmUgPGEgaHJlZj0iI1NLSVBfRU9MIj5TS0lQX0VPTDwvYT4ocCk7CiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfTUFYX0RJQ1RJT05BUllfTElNSVQiPlhNTF9NQVhfRElDVElPTkFSWV9MSU1JVDwvYT47CisjZGVmaW5lIDxhIGhyZWY9IiNYTUxfTUFYX0hVR0VfTEVOR1RIIj5YTUxfTUFYX0hVR0VfTEVOR1RIPC9hPjsKICNkZWZpbmUgPGEgaHJlZj0iI1hNTF9NQVhfTE9PS1VQX0xJTUlUIj5YTUxfTUFYX0xPT0tVUF9MSU1JVDwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfTUFYX05BTUVMRU4iPlhNTF9NQVhfTkFNRUxFTjwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfTUFYX05BTUVfTEVOR1RIIj5YTUxfTUFYX05BTUVfTEVOR1RIPC9hPjsKQEAgLTU0LDggKzUyLDYgQEAKICNkZWZpbmUgPGEgaHJlZj0iI1hNTF9TVUJTVElUVVRFX05PTkUiPlhNTF9TVUJTVElUVVRFX05PTkU8L2E+OwogI2RlZmluZSA8YSBocmVmPSIjWE1MX1NVQlNUSVRVVEVfUEVSRUYiPlhNTF9TVUJTVElUVVRFX1BFUkVGPC9hPjsKICNkZWZpbmUgPGEgaHJlZj0iI1hNTF9TVUJTVElUVVRFX1JFRiI+WE1MX1NVQlNUSVRVVEVfUkVGPC9hPjsKLTxhIGhyZWY9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxQYXJzZXJDdHh0UHRyIj5odG1sUGFyc2VyQ3R4dFB0cjwvYT4JPGEgaHJlZj0iI2h0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCI+aHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0PC9hPgkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcpOwotdm9pZAk8YSBocmVmPSIjaHRtbEluaXRBdXRvQ2xvc2UiPmh0bWxJbml0QXV0b0Nsb3NlPC9hPgkJKHZvaWQpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPgk8YSBocmVmPSIjaW5wdXRQb3AiPmlucHV0UG9wPC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk7CiBpbnQJPGEgaHJlZj0iI2lucHV0UHVzaCI+aW5wdXRQdXNoPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPiB2YWx1ZSk7CiBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJPGEgaHJlZj0iI25hbWVQb3AiPm5hbWVQb3A8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpOwpAQCAtNzIsNyArNjgsNiBAQAogaW50CTxhIGhyZWY9IiN4bWxDdXJyZW50Q2hhciI+eG1sQ3VycmVudENoYXI8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBpbnQgKiBsZW4pOwogPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCTxhIGhyZWY9IiN4bWxEZWNvZGVFbnRpdGllcyI+eG1sRGVjb2RlRW50aXRpZXM8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgaW50IGxlbiwgPGJyPgkJCQkJIGludCB3aGF0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiBlbmQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+IGVuZDIsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+IGVuZDMpOwogdHlwZWRlZiB2b2lkIDxhIGhyZWY9IiN4bWxFbnRpdHlSZWZlcmVuY2VGdW5jIj54bWxFbnRpdHlSZWZlcmVuY2VGdW5jPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVudGl0eVB0ciI+eG1sRW50aXR5UHRyPC9hPiBlbnQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBmaXJzdE5vZGUsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBsYXN0Tm9kZSk7Ci12b2lkCTxhIGhyZWY9IiN4bWxFcnJNZW1vcnkiPnhtbEVyck1lbW9yeTwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBleHRyYSk7CiB2b2lkCTxhIGhyZWY9IiN4bWxGcmVlSW5wdXRTdHJlYW0iPnhtbEZyZWVJbnB1dFN0cmVhbTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dFB0ciI+eG1sUGFyc2VySW5wdXRQdHI8L2E+IGlucHV0KTsKIHZvaWQJPGEgaHJlZj0iI3htbEhhbmRsZUVudGl0eSI+eG1sSGFuZGxlRW50aXR5PC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRW50aXR5UHRyIj54bWxFbnRpdHlQdHI8L2E+IGVudGl0eSk7CiBpbnQJPGEgaHJlZj0iI3htbElzTGV0dGVyIj54bWxJc0xldHRlcjwvYT4JCQkoaW50IGMpOwpAQCAtNDQ2LDUxICs0NDEsNiBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KLTxhIG5hbWU9Ik1PVkVUT19FTkRUQUciPk1hY3JvIDwvYT5NT1ZFVE9fRU5EVEFHPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNNT1ZFVE9fRU5EVEFHIj5NT1ZFVE9fRU5EVEFHPC9hPihwKTsKLTwvcHJlPgotPHA+U2tpcHMgdG8gdGhlIG5leHQgJyZndDsnIGNoYXIuPC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5Pjx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnA8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+YW5kIFVURjggc3RyaW5nIHBvaW50ZXI8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9Ik1PVkVUT19TVEFSVFRBRyI+TWFjcm8gPC9hPk1PVkVUT19TVEFSVFRBRzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSA8YSBocmVmPSIjTU9WRVRPX1NUQVJUVEFHIj5NT1ZFVE9fU1RBUlRUQUc8L2E+KHApOwotPC9wcmU+Ci08cD5Ta2lwcyB0byB0aGUgbmV4dCAnJmx0OycgY2hhci48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+PHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+cDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hbmQgVVRGOCBzdHJpbmcgcG9pbnRlcjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0iU0tJUF9FT0wiPk1hY3JvIDwvYT5TS0lQX0VPTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSA8YSBocmVmPSIjU0tJUF9FT0wiPlNLSVBfRU9MPC9hPihwKTsKLTwvcHJlPgotPHA+U2tpcHMgdGhlIGVuZCBvZiBsaW5lIGNoYXJzLjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT48dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5wPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmFuZCBVVEY4IHN0cmluZyBwb2ludGVyPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+CiA8YSBuYW1lPSJYTUxfTUFYX0RJQ1RJT05BUllfTElNSVQiPk1hY3JvIDwvYT5YTUxfTUFYX0RJQ1RJT05BUllfTElNSVQ8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTF9NQVhfRElDVElPTkFSWV9MSU1JVCI+WE1MX01BWF9ESUNUSU9OQVJZX0xJTUlUPC9hPjsKIDwvcHJlPgpAQCAtNDk5LDYgKzQ0OSwxNCBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9IlhNTF9NQVhfSFVHRV9MRU5HVEgiPk1hY3JvIDwvYT5YTUxfTUFYX0hVR0VfTEVOR1RIPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYTUxfTUFYX0hVR0VfTEVOR1RIIj5YTUxfTUFYX0hVR0VfTEVOR1RIPC9hPjsKKzwvcHJlPgorPHA+TWF4aW11bSBzaXplIGFsbG93ZWQgd2hlbiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI1hNTF9QQVJTRV9IVUdFIj5YTUxfUEFSU0VfSFVHRTwvYT4gaXMgc2V0LjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9IlhNTF9NQVhfTE9PS1VQX0xJTUlUIj5NYWNybyA8L2E+WE1MX01BWF9MT09LVVBfTElNSVQ8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTF9NQVhfTE9PS1VQX0xJTUlUIj5YTUxfTUFYX0xPT0tVUF9MSU1JVDwvYT47CiA8L3ByZT4KQEAgLTU5MSw3ICs1NDksNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VyTWF4RGVwdGgiPlZhcmlhYmxlIDwvYT54bWxQYXJzZXJNYXhEZXB0aDwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dW5zaWduZWQgaW50IHhtbFBhcnNlck1heERlcHRoOwogPC9wcmU+Ci08cD48L3A+Cis8cD5hcmJpdHJhcnkgZGVwdGggbGltaXQgZm9yIHRoZSBYTUwgZG9jdW1lbnRzIHRoYXQgd2UgYWxsb3cgdG8gcHJvY2Vzcy4gVGhpcyBpcyBub3QgYSBsaW1pdGF0aW9uIG9mIHRoZSBwYXJzZXIgYnV0IGEgc2FmZXR5IGJvdW5kYXJ5IGZlYXR1cmUuIEl0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI1hNTF9QQVJTRV9IVUdFIj5YTUxfUEFSU0VfSFVHRTwvYT4gcGFyc2VyIG9wdGlvbi48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC02MjAsMzkgKzU3OCw2IEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgotPGEgbmFtZT0iaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0Ij48L2E+aHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0ICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sUGFyc2VyQ3R4dFB0ciI+aHRtbFBhcnNlckN0eHRQdHI8L2E+CWh0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dAkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcpPGJyPgotPC9wcmU+Ci08cD5DcmVhdGUgYSBwYXJzZXIgY29udGV4dCBmb3IgYSBmaWxlIGNvbnRlbnQuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuPC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZmlsZW5hbWU8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIGZpbGVuYW1lPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5lbmNvZGluZzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5hIGZyZWUgZm9ybSBDIHN0cmluZyBkZXNjcmliaW5nIHRoZSBIVE1MIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuZXcgcGFyc2VyIGNvbnRleHQgb3IgTlVMTDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJodG1sSW5pdEF1dG9DbG9zZSI+PC9hPmh0bWxJbml0QXV0b0Nsb3NlICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCWh0bWxJbml0QXV0b0Nsb3NlCQkodm9pZCk8YnI+Ci08L3ByZT4KLTxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPiB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LiBUaGlzIGlzIGEgbm8tb3Agbm93LjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KIDxhIG5hbWU9ImlucHV0UG9wIj48L2E+aW5wdXRQb3AgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0UHRyIj54bWxQYXJzZXJJbnB1dFB0cjwvYT4JaW5wdXRQb3AJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+CkBAIC03MDIsNyArNjI3LDcgQEAKIDxhIG5hbWU9Im5hbWVQb3AiPjwvYT5uYW1lUG9wICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJbmFtZVBvcAkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+UG9wcyB0aGUgdG9wIGVsZW1lbnQgbmFtZSBmcm9tIHRoZSBuYW1lIHN0YWNrPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuIFBvcHMgdGhlIHRvcCBlbGVtZW50IG5hbWUgZnJvbSB0aGUgbmFtZSBzdGFjazwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTcyMyw3ICs2NDgsNyBAQAogPGEgbmFtZT0ibmFtZVB1c2giPjwvYT5uYW1lUHVzaCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CW5hbWVQdXNoCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogdmFsdWUpPGJyPgogPC9wcmU+Ci08cD5QdXNoZXMgYSBuZXcgZWxlbWVudCBuYW1lIG9uIHRvcCBvZiB0aGUgbmFtZSBzdGFjazwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiBQdXNoZXMgYSBuZXcgZWxlbWVudCBuYW1lIG9uIHRvcCBvZiB0aGUgbmFtZSBzdGFjazwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTc0OCw3ICs2NzMsNyBAQAogPGEgbmFtZT0ibm9kZVBvcCI+PC9hPm5vZGVQb3AgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CW5vZGVQb3AJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPlBvcHMgdGhlIHRvcCBlbGVtZW50IG5vZGUgZnJvbSB0aGUgbm9kZSBzdGFjazwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiBQb3BzIHRoZSB0b3AgZWxlbWVudCBub2RlIGZyb20gdGhlIG5vZGUgc3RhY2s8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC03NjksNyArNjk0LDcgQEAKIDxhIG5hbWU9Im5vZGVQdXNoIj48L2E+bm9kZVB1c2ggKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAlub2RlUHVzaAkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gdmFsdWUpPGJyPgogPC9wcmU+Ci08cD5QdXNoZXMgYSBuZXcgZWxlbWVudCBub2RlIG9uIHRvcCBvZiB0aGUgbm9kZSBzdGFjazwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiBQdXNoZXMgYSBuZXcgZWxlbWVudCBub2RlIG9uIHRvcCBvZiB0aGUgbm9kZSBzdGFjazwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTc5NCw3ICs3MTksNyBAQAogPGEgbmFtZT0ieG1sQ2hlY2tMYW5ndWFnZUlEIj48L2E+eG1sQ2hlY2tMYW5ndWFnZUlEICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sQ2hlY2tMYW5ndWFnZUlECQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGxhbmcpPGJyPgogPC9wcmU+Ci08cD5DaGVja3MgdGhhdCB0aGUgdmFsdWUgY29uZm9ybXMgdG8gdGhlIExhbmd1YWdlSUQgcHJvZHVjdGlvbjogTk9URTogdGhpcyBpcyBzb21ld2hhdCBkZXByZWNhdGVkLCB0aG9zZSBwcm9kdWN0aW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgWE1MIFNlY29uZCBlZGl0aW9uLiBbMzNdIExhbmd1YWdlSUQgOjo9IExhbmdjb2RlICgnLScgU3ViY29kZSkqIFszNF0gTGFuZ2NvZGUgOjo9IElTTzYzOUNvZGUgfCBJYW5hQ29kZSB8IFVzZXJDb2RlIFszNV0gSVNPNjM5Q29kZSA6Oj0gKFthLXpdIHwgW0EtWl0pIChbYS16XSB8IFtBLVpdKSBbMzZdIElhbmFDb2RlIDo6PSAoJ2knIHwgJ0knKSAnLScgKFthLXpdIHwgW0EtWl0pKyBbMzddIFVzZXJDb2RlIDo6PSAoJ3gnIHwgJ1gnKSAnLScgKFthLXpdIHwgW0EtWl0pKyBbMzhdIFN1YmNvZGUgOjo9IChbYS16XSB8IFtBLVpdKSsgVGhlIGN1cnJlbnQgUkVDIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IHRoZSBzdWNjZXNzb3JzIG9mIFJGQyAxNzY2LCBjdXJyZW50bHkgNTY0NiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1NjQ2LnR4dCBsYW5ndGFnID0gbGFuZ3VhZ2UgWyItIiBzY3JpcHRdIFsiLSIgcmVnaW9uXSAqKCItIiB2YXJpYW50KSAqKCItIiBleHRlbnNpb24pIFsiLSIgcHJpdmF0ZXVzZV0gbGFuZ3VhZ2UgPSAyKjNBTFBIQSA7IHNob3J0ZXN0IElTTyA2MzkgY29kZSBbIi0iIGV4dGxhbmddIDsgc29tZXRpbWVzIGZvbGxvd2VkIGJ5IDsgZXh0ZW5kZWQgbGFuZ3VhZ2Ugc3VidGFncyAvIDRBTFBIQSA7IG9yIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIC8gNSo4QUxQSEEgOyBvciByZWdpc3RlcmVkIGxhbmd1YWdlIHN1YnRhZyBleHRsYW5nID0gM0FMUEhBIDsgc2VsZWN0ZWQgSVNPIDYzOSBjb2RlcyAqMigiLSIgM0FMUEhBKSA7IHBlcm1hbmVudGx5IHJlc2VydmVkIHNjcmlwdCA9IDRBTFBIQSA7IElTTyAxNTkyNCBjb2RlIHJlZ2lvbiA9IDJBTFBIQSA7IElTTyAzMTY2LTEgY29kZSAvIDNESUdJVCA7IFVOIE0uNDkgY29kZSB2YXJpYW50ID0gNSo4YWxwaGFudW0gOyByZWdpc3RlcmVkIHZhcmlhbnRzIC8gKERJR0lUIDNhbHBoYW51bSkgZXh0ZW5zaW9uID0gc2luZ2xldG9uIDEqKCItIiAoMio4YWxwaGFudW0pKSA7IFNpbmdsZSBhbHBoYW51bWVyaWNzIDsgIngiIHJlc2VydmVkIGZvciBwcml2YXRlIHVzZSBzaW5nbGV0b24gPSBESUdJVCA7IDAgLSA5IC8gJXg0MS01NyA7IEEgLSBXIC8gJXg1OS01QSA7IFkgLSBaIC8gJXg2MS03NyA7IGEgLSB3IC8gJXg3OS03QSA7IHkgLSB6IGl0IHNvdW5kcyByaWdodCB0byBzdGlsbCBhbGxvdyBJcnJlZ3VsYXIgaS14eHggSUFOQSBhbmQgdXNlciBjb2RlcyB0b28gVGhlIHBhcnNlciBiZWxvdyBkb2Vzbid0IHRyeSB0byBjb3BlIHdpdGggZXh0ZW5zaW9uIG9yIHByaXZhdGV1c2UgdGhhdCBjb3VsZCBiZSBhZGRlZCBidXQgdGhhdCdzIG5vdCBpbnRlcm9wZXJhYmxlIGFueXdheTwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiBDaGVja3MgdGhhdCB0aGUgdmFsdWUgY29uZm9ybXMgdG8gdGhlIExhbmd1YWdlSUQgcHJvZHVjdGlvbjogTk9URTogdGhpcyBpcyBzb21ld2hhdCBkZXByZWNhdGVkLCB0aG9zZSBwcm9kdWN0aW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgWE1MIFNlY29uZCBlZGl0aW9uLiBbMzNdIExhbmd1YWdlSUQgOjo9IExhbmdjb2RlICgnLScgU3ViY29kZSkqIFszNF0gTGFuZ2NvZGUgOjo9IElTTzYzOUNvZGUgfCBJYW5hQ29kZSB8IFVzZXJDb2RlIFszNV0gSVNPNjM5Q29kZSA6Oj0gKFthLXpdIHwgW0EtWl0pIChbYS16XSB8IFtBLVpdKSBbMzZdIElhbmFDb2RlIDo6PSAoJ2knIHwgJ0knKSAnLScgKFthLXpdIHwgW0EtWl0pKyBbMzddIFVzZXJDb2RlIDo6PSAoJ3gnIHwgJ1gnKSAnLScgKFthLXpdIHwgW0EtWl0pKyBbMzhdIFN1YmNvZGUgOjo9IChbYS16XSB8IFtBLVpdKSsgVGhlIGN1cnJlbnQgUkVDIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IHRoZSBzdWNjZXNzb3JzIG9mIFJGQyAxNzY2LCBjdXJyZW50bHkgNTY0NiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1NjQ2LnR4dCBsYW5ndGFnID0gbGFuZ3VhZ2UgWyItIiBzY3JpcHRdIFsiLSIgcmVnaW9uXSAqKCItIiB2YXJpYW50KSAqKCItIiBleHRlbnNpb24pIFsiLSIgcHJpdmF0ZXVzZV0gbGFuZ3VhZ2UgPSAyKjNBTFBIQSA7IHNob3J0ZXN0IElTTyA2MzkgY29kZSBbIi0iIGV4dGxhbmddIDsgc29tZXRpbWVzIGZvbGxvd2VkIGJ5IDsgZXh0ZW5kZWQgbGFuZ3VhZ2Ugc3VidGFncyAvIDRBTFBIQSA7IG9yIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIC8gNSo4QUxQSEEgOyBvciByZWdpc3RlcmVkIGxhbmd1YWdlIHN1YnRhZyBleHRsYW5nID0gM0FMUEhBIDsgc2VsZWN0ZWQgSVNPIDYzOSBjb2RlcyAqMigiLSIgM0FMUEhBKSA7IHBlcm1hbmVudGx5IHJlc2VydmVkIHNjcmlwdCA9IDRBTFBIQSA7IElTTyAxNTkyNCBjb2RlIHJlZ2lvbiA9IDJBTFBIQSA7IElTTyAzMTY2LTEgY29kZSAvIDNESUdJVCA7IFVOIE0uNDkgY29kZSB2YXJpYW50ID0gNSo4YWxwaGFudW0gOyByZWdpc3RlcmVkIHZhcmlhbnRzIC8gKERJR0lUIDNhbHBoYW51bSkgZXh0ZW5zaW9uID0gc2luZ2xldG9uIDEqKCItIiAoMio4YWxwaGFudW0pKSA7IFNpbmdsZSBhbHBoYW51bWVyaWNzIDsgIngiIHJlc2VydmVkIGZvciBwcml2YXRlIHVzZSBzaW5nbGV0b24gPSBESUdJVCA7IDAgLSA5IC8gJXg0MS01NyA7IEEgLSBXIC8gJXg1OS01QSA7IFkgLSBaIC8gJXg2MS03NyA7IGEgLSB3IC8gJXg3OS03QSA7IHkgLSB6IGl0IHNvdW5kcyByaWdodCB0byBzdGlsbCBhbGxvdyBJcnJlZ3VsYXIgaS14eHggSUFOQSBhbmQgdXNlciBjb2RlcyB0b28gVGhlIHBhcnNlciBiZWxvdyBkb2Vzbid0IHRyeSB0byBjb3BlIHdpdGggZXh0ZW5zaW9uIG9yIHByaXZhdGV1c2UgdGhhdCBjb3VsZCBiZSBhZGRlZCBidXQgdGhhdCdzIG5vdCBpbnRlcm9wZXJhYmxlIGFueXdheTwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTk3Miw3ICs4OTcsNyBAQAogPGEgbmFtZT0ieG1sQ3VycmVudENoYXIiPjwvYT54bWxDdXJyZW50Q2hhciAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEN1cnJlbnRDaGFyCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBpbnQgKiBsZW4pPGJyPgogPC9wcmU+Ci08cD5UaGUgY3VycmVudCBjaGFyIHZhbHVlLCBpZiB1c2luZyBVVEYtOCB0aGlzIG1heSBhY3R1YWxseSBzcGFuIG11bHRpcGxlIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuIEltcGxlbWVudCB0aGUgZW5kIG9mIGxpbmUgbm9ybWFsaXphdGlvbjogMi4xMSBFbmQtb2YtTGluZSBIYW5kbGluZyBXaGVyZXZlciBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IG9yIHRoZSBsaXRlcmFsIGVudGl0eSB2YWx1ZSBvZiBhbiBpbnRlcm5hbCBwYXJzZWQgZW50aXR5IGNvbnRhaW5zIGVpdGhlciB0aGUgbGl0ZXJhbCB0d28tY2hhcmFjdGVyIHNlcXVlbmNlICIjeEQjeEEiIG9yIGEgc3RhbmRhbG9uZSBsaXRlcmFsICN4RCwgYW4gWE1MIHByb2Nlc3NvciBtdXN0IHBhc3MgdG8gdGhlIGFwcGxpY2F0aW9uIHRoZSBzaW5nbGUgY2hhcmFjdGVyICN4QS4gVGhpcyBiZWhhdmlvciBjYW4gY29udmVuaWVudGx5IGJlIHByb2R1Y2VkIGJ5IG5vcm1hbGl6aW5nIGFsbCBsaW5lIGJyZWFrcyB0byAjeEEgb24gaW5wdXQsIGJlZm9yZSBwYXJzaW5nLik8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gVGhlIGN1cnJlbnQgY2hhciB2YWx1ZSwgaWYgdXNpbmcgVVRGLTggdGhpcyBtYXkgYWN0dWFsbHkgc3BhbiBtdWx0aXBsZSBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyLiBJbXBsZW1lbnQgdGhlIGVuZCBvZiBsaW5lIG5vcm1hbGl6YXRpb246IDIuMTEgRW5kLW9mLUxpbmUgSGFuZGxpbmcgV2hlcmV2ZXIgYW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0eSBvciB0aGUgbGl0ZXJhbCBlbnRpdHkgdmFsdWUgb2YgYW4gaW50ZXJuYWwgcGFyc2VkIGVudGl0eSBjb250YWlucyBlaXRoZXIgdGhlIGxpdGVyYWwgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSAiI3hEI3hBIiBvciBhIHN0YW5kYWxvbmUgbGl0ZXJhbCAjeEQsIGFuIFhNTCBwcm9jZXNzb3IgbXVzdCBwYXNzIHRvIHRoZSBhcHBsaWNhdGlvbiB0aGUgc2luZ2xlIGNoYXJhY3RlciAjeEEuIFRoaXMgYmVoYXZpb3IgY2FuIGNvbnZlbmllbnRseSBiZSBwcm9kdWNlZCBieSBub3JtYWxpemluZyBhbGwgbGluZSBicmVha3MgdG8gI3hBIG9uIGlucHV0LCBiZWZvcmUgcGFyc2luZy4pPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTAzNiwyNyArOTYxLDYgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJ4bWxFcnJNZW1vcnkiPjwvYT54bWxFcnJNZW1vcnkgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sRXJyTWVtb3J5CQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZXh0cmEpPGJyPgotPC9wcmU+Ci08cD5IYW5kbGUgYSByZWRlZmluaXRpb24gb2YgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gZXJyb3I8L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgotPGNvbCBhbGlnbj0ibGVmdCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5jdHh0PC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmFuIFhNTCBwYXJzZXIgY29udGV4dDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZXh0cmE8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+ZXh0cmEgaW5mb3JtYXRpb248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgogPGEgbmFtZT0ieG1sRnJlZUlucHV0U3RyZWFtIj48L2E+eG1sRnJlZUlucHV0U3RyZWFtICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEZyZWVJbnB1dFN0cmVhbQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0UHRyIj54bWxQYXJzZXJJbnB1dFB0cjwvYT4gaW5wdXQpPGJyPgogPC9wcmU+CkBAIC0xMTg1LDcgKzEwODksNyBAQAogPGEgbmFtZT0ieG1sTmV3RW50aXR5SW5wdXRTdHJlYW0iPjwvYT54bWxOZXdFbnRpdHlJbnB1dFN0cmVhbSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPgl4bWxOZXdFbnRpdHlJbnB1dFN0cmVhbQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxFbnRpdHlQdHIiPnhtbEVudGl0eVB0cjwvYT4gZW50aXR5KTxicj4KIDwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGlucHV0IHN0cmVhbSBiYXNlZCBvbiBhbiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxFbnRpdHlQdHIiPnhtbEVudGl0eVB0cjwvYT48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gQ3JlYXRlIGEgbmV3IGlucHV0IHN0cmVhbSBiYXNlZCBvbiBhbiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxFbnRpdHlQdHIiPnhtbEVudGl0eVB0cjwvYT48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xMjgxLDcgKzExODUsNyBAQAogPGEgbmFtZT0ieG1sTmV4dENoYXIiPjwvYT54bWxOZXh0Q2hhciAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxOZXh0Q2hhcgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+U2tpcCB0byB0aGUgbmV4dCBjaGFyIGlucHV0IGNoYXIuPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuIFNraXAgdG8gdGhlIG5leHQgY2hhciBpbnB1dCBjaGFyLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0xMjk2LDcgKzEyMDAsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VBdHRWYWx1ZSI+PC9hPnhtbFBhcnNlQXR0VmFsdWUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxQYXJzZUF0dFZhbHVlCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYSB2YWx1ZSBmb3IgYW4gPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gTm90ZTogdGhlIHBhcnNlciB3b24ndCBkbyBzdWJzdGl0dXRpb24gb2YgZW50aXRpZXMgaGVyZSwgdGhpcyB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIgaW4gPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sU3RyaW5nR2V0Tm9kZUxpc3QiPnhtbFN0cmluZ0dldE5vZGVMaXN0PC9hPiBbMTBdIEF0dFZhbHVlIDo6PSAnIicgKFteJmx0OyZhbXA7Il0gfCBSZWZlcmVuY2UpKiAnIicgfCAiJyIgKFteJmx0OyZhbXA7J10gfCBSZWZlcmVuY2UpKiAiJyIgMy4zLjMgQXR0cmlidXRlLVZhbHVlIE5vcm1hbGl6YXRpb246IEJlZm9yZSB0aGUgdmFsdWUgb2YgYW4gPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gaXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBvciBjaGVja2VkIGZvciB2YWxpZGl0eSwgdGhlIFhNTCBwcm9jZXNzb3IgbXVzdCBub3JtYWxpemUgaXQgYXMgZm9sbG93czogLSBhIGNoYXJhY3RlciA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiBpcyBwcm9jZXNzZWQgYnkgYXBwZW5kaW5nIHRoZSByZWZlcmVuY2VkIGNoYXJhY3RlciB0byB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gdmFsdWUgLSBhbiBlbnRpdHkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gaXMgcHJvY2Vzc2VkIGJ5IHJlY3Vyc2l2ZWx5IHByb2Nlc3NpbmcgdGhlIHJlcGxhY2VtZW50IHRleHQgb2YgdGhlIGVudGl0eSAtIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgKCN4MjAsICN4RCwgI3hBLCAjeDkpIGlzIHByb2Nlc3NlZCBieSBhcHBlbmRpbmcgI3gyMCB0byB0aGUgbm9ybWFsaXplZCB2YWx1ZSwgZXhjZXB0IHRoYXQgb25seSBhIHNpbmdsZSAjeDIwIGlzIGFwcGVuZGVkIGZvciBhICIjeEQjeEEiIHNlcXVlbmNlIHRoYXQgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IG9yIHRoZSBsaXRlcmFsIGVudGl0eSB2YWx1ZSBvZiBhbiBpbnRlcm5hbCBwYXJzZWQgZW50aXR5IC0gb3RoZXIgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNjaGFyYWN0ZXJzIj5jaGFyYWN0ZXJzPC9hPiBhcmUgcHJvY2Vzc2VkIGJ5IGFwcGVuZGluZyB0aGVtIHRvIHRoZSBub3JtYWxpemVkIHZhbHVlIElmIHRoZSBkZWNsYXJlZCB2YWx1ZSBpcyBub3QgQ0RBVEEsIHRoZW4gdGhlIFhNTCBwcm9jZXNzb3IgbXVzdCBmdXJ0aGVyIHByb2Nlc3MgdGhlIG5vcm1hbGl6ZWQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gdmFsdWUgYnkgZGlzY2FyZGluZyBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgKCN4MjApIGNoYXJhY3RlcnMsIGFuZCBieSByZXBsYWNpbmcgc2VxdWVuY2VzIG9mIHNwYWNlICgjeDIwKSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2NoYXJhY3RlcnMiPmNoYXJhY3RlcnM8L2E+IGJ5IGEgc2luZ2xlIHNwYWNlICgjeDIwKSBjaGFyYWN0ZXIuIEFsbCBhdHRyaWJ1dGVzIGZvciB3aGljaCBubyBkZWNsYXJhdGlvbiBoYXMgYmVlbiByZWFkIHNob3VsZCBiZSB0cmVhdGVkIGJ5IGEgbm9uLXZhbGlkYXRpbmcgcGFyc2VyIGFzIGlmIGRlY2xhcmVkIENEQVRBLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGEgdmFsdWUgZm9yIGFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IE5vdGU6IHRoZSBwYXJzZXIgd29uJ3QgZG8gc3Vic3RpdHV0aW9uIG9mIGVudGl0aWVzIGhlcmUsIHRoaXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyIGluIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFN0cmluZ0dldE5vZGVMaXN0Ij54bWxTdHJpbmdHZXROb2RlTGlzdDwvYT4gWzEwXSBBdHRWYWx1ZSA6Oj0gJyInIChbXiZsdDsmYW1wOyJdIHwgUmVmZXJlbmNlKSogJyInIHwgIiciIChbXiZsdDsmYW1wOyddIHwgUmVmZXJlbmNlKSogIiciIDMuMy4zIEF0dHJpYnV0ZS1WYWx1ZSBOb3JtYWxpemF0aW9uOiBCZWZvcmUgdGhlIHZhbHVlIG9mIGFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IGlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gb3IgY2hlY2tlZCBmb3IgdmFsaWRpdHksIHRoZSBYTUwgcHJvY2Vzc29yIG11c3Qgbm9ybWFsaXplIGl0IGFzIGZvbGxvd3M6IC0gYSBjaGFyYWN0ZXIgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gaXMgcHJvY2Vzc2VkIGJ5IGFwcGVuZGluZyB0aGUgcmVmZXJlbmNlZCBjaGFyYWN0ZXIgdG8gdGhlIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IHZhbHVlIC0gYW4gZW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IGlzIHByb2Nlc3NlZCBieSByZWN1cnNpdmVseSBwcm9jZXNzaW5nIHRoZSByZXBsYWNlbWVudCB0ZXh0IG9mIHRoZSBlbnRpdHkgLSBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyICgjeDIwLCAjeEQsICN4QSwgI3g5KSBpcyBwcm9jZXNzZWQgYnkgYXBwZW5kaW5nICN4MjAgdG8gdGhlIG5vcm1hbGl6ZWQgdmFsdWUsIGV4Y2VwdCB0aGF0IG9ubHkgYSBzaW5nbGUgI3gyMCBpcyBhcHBlbmRlZCBmb3IgYSAiI3hEI3hBIiBzZXF1ZW5jZSB0aGF0IGlzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0eSBvciB0aGUgbGl0ZXJhbCBlbnRpdHkgdmFsdWUgb2YgYW4gaW50ZXJuYWwgcGFyc2VkIGVudGl0eSAtIG90aGVyIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY2hhcmFjdGVycyI+Y2hhcmFjdGVyczwvYT4gYXJlIHByb2Nlc3NlZCBieSBhcHBlbmRpbmcgdGhlbSB0byB0aGUgbm9ybWFsaXplZCB2YWx1ZSBJZiB0aGUgZGVjbGFyZWQgdmFsdWUgaXMgbm90IENEQVRBLCB0aGVuIHRoZSBYTUwgcHJvY2Vzc29yIG11c3QgZnVydGhlciBwcm9jZXNzIHRoZSBub3JtYWxpemVkIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IHZhbHVlIGJ5IGRpc2NhcmRpbmcgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlICgjeDIwKSBjaGFyYWN0ZXJzLCBhbmQgYnkgcmVwbGFjaW5nIHNlcXVlbmNlcyBvZiBzcGFjZSAoI3gyMCkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNjaGFyYWN0ZXJzIj5jaGFyYWN0ZXJzPC9hPiBieSBhIHNpbmdsZSBzcGFjZSAoI3gyMCkgY2hhcmFjdGVyLiBBbGwgYXR0cmlidXRlcyBmb3Igd2hpY2ggbm8gZGVjbGFyYXRpb24gaGFzIGJlZW4gcmVhZCBzaG91bGQgYmUgdHJlYXRlZCBieSBhIG5vbi12YWxpZGF0aW5nIHBhcnNlciBhcyBpZiBkZWNsYXJlZCBDREFUQS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xMzE3LDcgKzEyMjEsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VBdHRyaWJ1dGUiPjwvYT54bWxQYXJzZUF0dHJpYnV0ZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbFBhcnNlQXR0cmlidXRlCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqKiB2YWx1ZSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IFs0MV0gQXR0cmlidXRlIDo6PSBOYW1lIEVxIEF0dFZhbHVlIFsgV0ZDOiBObyBFeHRlcm5hbCBFbnRpdHkgUmVmZXJlbmNlcyBdIEF0dHJpYnV0ZSB2YWx1ZXMgY2Fubm90IGNvbnRhaW4gZGlyZWN0IG9yIGluZGlyZWN0IGVudGl0eSByZWZlcmVuY2VzIHRvIGV4dGVybmFsIGVudGl0aWVzLiBbIFdGQzogTm8gJmx0OyBpbiBBdHRyaWJ1dGUgVmFsdWVzIF0gVGhlIHJlcGxhY2VtZW50IHRleHQgb2YgYW55IGVudGl0eSByZWZlcnJlZCB0byBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluIGFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IHZhbHVlIChvdGhlciB0aGFuICImYW1wO2x0OyIpIG11c3Qgbm90IGNvbnRhaW4gYSAmbHQ7LiBbIFZDOiBBdHRyaWJ1dGUgVmFsdWUgVHlwZSBdIFRoZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBtdXN0IGhhdmUgYmVlbiBkZWNsYXJlZDsgdGhlIHZhbHVlIG11c3QgYmUgb2YgdGhlIHR5cGUgZGVjbGFyZWQgZm9yIGl0LiBbMjVdIEVxIDo6PSBTPyAnPScgUz8gV2l0aCBuYW1lc3BhY2U6IFtOUyAxMV0gQXR0cmlidXRlIDo6PSBRTmFtZSBFcSBBdHRWYWx1ZSBBbHNvIHRoZSBjYXNlIFFOYW1lID09IHhtbG5zOj8/PyBpcyBoYW5kbGVkIGluZGVwZW5kZW50bHkgYXMgYSBuYW1lc3BhY2UgZGVmaW5pdGlvbi48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBbNDFdIEF0dHJpYnV0ZSA6Oj0gTmFtZSBFcSBBdHRWYWx1ZSBbIFdGQzogTm8gRXh0ZXJuYWwgRW50aXR5IFJlZmVyZW5jZXMgXSBBdHRyaWJ1dGUgdmFsdWVzIGNhbm5vdCBjb250YWluIGRpcmVjdCBvciBpbmRpcmVjdCBlbnRpdHkgcmVmZXJlbmNlcyB0byBleHRlcm5hbCBlbnRpdGllcy4gWyBXRkM6IE5vICZsdDsgaW4gQXR0cmlidXRlIFZhbHVlcyBdIFRoZSByZXBsYWNlbWVudCB0ZXh0IG9mIGFueSBlbnRpdHkgcmVmZXJyZWQgdG8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbiBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB2YWx1ZSAob3RoZXIgdGhhbiAiJmFtcDtsdDsiKSBtdXN0IG5vdCBjb250YWluIGEgJmx0Oy4gWyBWQzogQXR0cmlidXRlIFZhbHVlIFR5cGUgXSBUaGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gbXVzdCBoYXZlIGJlZW4gZGVjbGFyZWQ7IHRoZSB2YWx1ZSBtdXN0IGJlIG9mIHRoZSB0eXBlIGRlY2xhcmVkIGZvciBpdC4gWzI1XSBFcSA6Oj0gUz8gJz0nIFM/IFdpdGggbmFtZXNwYWNlOiBbTlMgMTFdIEF0dHJpYnV0ZSA6Oj0gUU5hbWUgRXEgQXR0VmFsdWUgQWxzbyB0aGUgY2FzZSBRTmFtZSA9PSB4bWxuczo/Pz8gaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5IGFzIGEgbmFtZXNwYWNlIGRlZmluaXRpb24uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTM0Myw3ICsxMjQ3LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlQXR0cmlidXRlTGlzdERlY2wiPjwvYT54bWxQYXJzZUF0dHJpYnV0ZUxpc3REZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlQXR0cmlidXRlTGlzdERlY2wJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD46IHBhcnNlIHRoZSBBdHRyaWJ1dGUgbGlzdCBkZWYgZm9yIGFuIGVsZW1lbnQgWzUyXSBBdHRsaXN0RGVjbCA6Oj0gJyZsdDshQVRUTElTVCcgUyBOYW1lIEF0dERlZiogUz8gJyZndDsnIFs1M10gQXR0RGVmIDo6PSBTIE5hbWUgUyBBdHRUeXBlIFMgRGVmYXVsdERlY2w8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBQYXJzZSBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBsaXN0IGRlY2xhcmF0aW9uIGZvciBhbiBlbGVtZW50LiBBbHdheXMgY29uc3VtZXMgJyZsdDshJy4gWzUyXSBBdHRsaXN0RGVjbCA6Oj0gJyZsdDshQVRUTElTVCcgUyBOYW1lIEF0dERlZiogUz8gJyZndDsnIFs1M10gQXR0RGVmIDo6PSBTIE5hbWUgUyBBdHRUeXBlIFMgRGVmYXVsdERlY2w8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTM1OCw3ICsxMjYyLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlQXR0cmlidXRlVHlwZSI+PC9hPnhtbFBhcnNlQXR0cmlidXRlVHlwZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFBhcnNlQXR0cmlidXRlVHlwZQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxFbnVtZXJhdGlvblB0ciI+eG1sRW51bWVyYXRpb25QdHI8L2E+ICogdHJlZSk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIHRoZSBBdHRyaWJ1dGUgbGlzdCBkZWYgZm9yIGFuIGVsZW1lbnQgWzU0XSBBdHRUeXBlIDo6PSBTdHJpbmdUeXBlIHwgVG9rZW5pemVkVHlwZSB8IEVudW1lcmF0ZWRUeXBlIFs1NV0gU3RyaW5nVHlwZSA6Oj0gJ0NEQVRBJyBbNTZdIFRva2VuaXplZFR5cGUgOjo9ICdJRCcgfCAnSURSRUYnIHwgJ0lEUkVGUycgfCAnRU5USVRZJyB8ICdFTlRJVElFUycgfCAnTk1UT0tFTicgfCAnTk1UT0tFTlMnIFZhbGlkaXR5IGNvbnN0cmFpbnRzIGZvciA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB2YWx1ZXMgc3ludGF4IGFyZSBjaGVja2VkIGluIHhtbFZhbGlkYXRlQXR0cmlidXRlVmFsdWUoKSBbIFZDOiBJRCBdIFZhbHVlcyBvZiB0eXBlIElEIG11c3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbi4gQSBuYW1lIG11c3Qgbm90IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhbiBYTUwgZG9jdW1lbnQgYXMgYSB2YWx1ZSBvZiB0aGlzIHR5cGU7IGkuZS4sIElEIHZhbHVlcyBtdXN0IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBlbGVtZW50cyB3aGljaCBiZWFyIHRoZW0uIFsgVkM6IE9uZSBJRCBwZXIgRWxlbWVudCBUeXBlIF0gTm8gZWxlbWVudCB0eXBlIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgSUQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gc3BlY2lmaWVkLiBbIFZDOiBJRCBBdHRyaWJ1dGUgRGVmYXVsdCBdIEFuIElEIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IG11c3QgaGF2ZSBhIGRlY2xhcmVkIGRlZmF1bHQgb2YgI0lNUExJRUQgb3IgI1JFUVVJUkVELiBbIFZDOiBJRFJFRiBdIFZhbHVlcyBvZiB0eXBlIElEUkVGIG11c3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbiwgYW5kIHZhbHVlcyBvZiB0eXBlIElEUkVGUyBtdXN0IG1hdGNoIE5hbWVzOyBlYWNoIElEUkVGIE5hbWUgbXVzdCBtYXRjaCB0aGUgdmFsdWUgb2YgYW4gSUQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gb24gc29tZSBlbGVtZW50IGluIHRoZSBYTUwgZG9jdW1lbnQ7IGkuZS4gSURSRUYgdmFsdWVzIG11c3QgbWF0Y2ggdGhlIHZhbHVlIG9mIHNvbWUgSUQgYXR0cmlidXRlLiBbIFZDOiBFbnRpdHkgTmFtZSBdIFZhbHVlcyBvZiB0eXBlIEVOVElUWSBtdXN0IG1hdGNoIHRoZSBOYW1lIHByb2R1Y3Rpb24sIHZhbHVlcyBvZiB0eXBlIEVOVElUSUVTIG11c3QgbWF0Y2ggTmFtZXM7IGVhY2ggRW50aXR5IE5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBhbiB1bnBhcnNlZCBlbnRpdHkgZGVjbGFyZWQgaW4gdGhlIERURC4gWyBWQzogTmFtZSBUb2tlbiBdIFZhbHVlcyBvZiB0eXBlIE5NVE9LRU4gbXVzdCBtYXRjaCB0aGUgTm10b2tlbiBwcm9kdWN0aW9uOyB2YWx1ZXMgb2YgdHlwZSBOTVRPS0VOUyBtdXN0IG1hdGNoIE5tdG9rZW5zLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIHRoZSBBdHRyaWJ1dGUgbGlzdCBkZWYgZm9yIGFuIGVsZW1lbnQgWzU0XSBBdHRUeXBlIDo6PSBTdHJpbmdUeXBlIHwgVG9rZW5pemVkVHlwZSB8IEVudW1lcmF0ZWRUeXBlIFs1NV0gU3RyaW5nVHlwZSA6Oj0gJ0NEQVRBJyBbNTZdIFRva2VuaXplZFR5cGUgOjo9ICdJRCcgfCAnSURSRUYnIHwgJ0lEUkVGUycgfCAnRU5USVRZJyB8ICdFTlRJVElFUycgfCAnTk1UT0tFTicgfCAnTk1UT0tFTlMnIFZhbGlkaXR5IGNvbnN0cmFpbnRzIGZvciA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB2YWx1ZXMgc3ludGF4IGFyZSBjaGVja2VkIGluIHhtbFZhbGlkYXRlQXR0cmlidXRlVmFsdWUoKSBbIFZDOiBJRCBdIFZhbHVlcyBvZiB0eXBlIElEIG11c3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbi4gQSBuYW1lIG11c3Qgbm90IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhbiBYTUwgZG9jdW1lbnQgYXMgYSB2YWx1ZSBvZiB0aGlzIHR5cGU7IGkuZS4sIElEIHZhbHVlcyBtdXN0IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBlbGVtZW50cyB3aGljaCBiZWFyIHRoZW0uIFsgVkM6IE9uZSBJRCBwZXIgRWxlbWVudCBUeXBlIF0gTm8gZWxlbWVudCB0eXBlIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgSUQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gc3BlY2lmaWVkLiBbIFZDOiBJRCBBdHRyaWJ1dGUgRGVmYXVsdCBdIEFuIElEIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IG11c3QgaGF2ZSBhIGRlY2xhcmVkIGRlZmF1bHQgb2YgI0lNUExJRUQgb3IgI1JFUVVJUkVELiBbIFZDOiBJRFJFRiBdIFZhbHVlcyBvZiB0eXBlIElEUkVGIG11c3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbiwgYW5kIHZhbHVlcyBvZiB0eXBlIElEUkVGUyBtdXN0IG1hdGNoIE5hbWVzOyBlYWNoIElEUkVGIE5hbWUgbXVzdCBtYXRjaCB0aGUgdmFsdWUgb2YgYW4gSUQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gb24gc29tZSBlbGVtZW50IGluIHRoZSBYTUwgZG9jdW1lbnQ7IGkuZS4gSURSRUYgdmFsdWVzIG11c3QgbWF0Y2ggdGhlIHZhbHVlIG9mIHNvbWUgSUQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uIFsgVkM6IEVudGl0eSBOYW1lIF0gVmFsdWVzIG9mIHR5cGUgRU5USVRZIG11c3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbiwgdmFsdWVzIG9mIHR5cGUgRU5USVRJRVMgbXVzdCBtYXRjaCBOYW1lczsgZWFjaCBFbnRpdHkgTmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIGFuIHVucGFyc2VkIGVudGl0eSBkZWNsYXJlZCBpbiB0aGUgRFRELiBbIFZDOiBOYW1lIFRva2VuIF0gVmFsdWVzIG9mIHR5cGUgTk1UT0tFTiBtdXN0IG1hdGNoIHRoZSBObXRva2VuIHByb2R1Y3Rpb247IHZhbHVlcyBvZiB0eXBlIE5NVE9LRU5TIG11c3QgbWF0Y2ggTm10b2tlbnMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTM4Myw3ICsxMjg3LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlQ0RTZWN0Ij48L2E+eG1sUGFyc2VDRFNlY3QgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUGFyc2VDRFNlY3QJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPlBhcnNlIGVzY2FwZWQgcHVyZSByYXcgY29udGVudC4gWzE4XSBDRFNlY3QgOjo9IENEU3RhcnQgQ0RhdGEgQ0RFbmQgWzE5XSBDRFN0YXJ0IDo6PSAnJmx0OyFbQ0RBVEFbJyBbMjBdIERhdGEgOjo9IChDaGFyKiAtIChDaGFyKiAnXV0mZ3Q7JyBDaGFyKikpIFsyMV0gQ0RFbmQgOjo9ICddXSZndDsnPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgZXNjYXBlZCBwdXJlIHJhdyBjb250ZW50LiBBbHdheXMgY29uc3VtZXMgJyZsdDshWycuIFsxOF0gQ0RTZWN0IDo6PSBDRFN0YXJ0IENEYXRhIENERW5kIFsxOV0gQ0RTdGFydCA6Oj0gJyZsdDshW0NEQVRBWycgWzIwXSBEYXRhIDo6PSAoQ2hhciogLSAoQ2hhciogJ11dJmd0OycgQ2hhciopKSBbMjFdIENERW5kIDo6PSAnXV0mZ3Q7JzwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0xMzk4LDcgKzEzMDIsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VDaGFyRGF0YSI+PC9hPnhtbFBhcnNlQ2hhckRhdGEgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUGFyc2VDaGFyRGF0YQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBpbnQgY2RhdGEpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhIENoYXJEYXRhIHNlY3Rpb24uIGlmIHdlIGFyZSB3aXRoaW4gYSBDREFUQSBzZWN0aW9uICddXSZndDsnIG1hcmtzIGFuIGVuZCBvZiBzZWN0aW9uLiBUaGUgcmlnaHQgYW5nbGUgYnJhY2tldCAoJmd0OykgbWF5IGJlIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBzdHJpbmcgIiZhbXA7Z3Q7IiwgYW5kIG11c3QsIGZvciBjb21wYXRpYmlsaXR5LCBiZSBlc2NhcGVkIHVzaW5nICImYW1wO2d0OyIgb3IgYSBjaGFyYWN0ZXIgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gd2hlbiBpdCBhcHBlYXJzIGluIHRoZSBzdHJpbmcgIl1dJmd0OyIgaW4gY29udGVudCwgd2hlbiB0aGF0IHN0cmluZyBpcyBub3QgbWFya2luZyB0aGUgZW5kIG9mIGEgQ0RBVEEgc2VjdGlvbi4gWzE0XSBDaGFyRGF0YSA6Oj0gW14mbHQ7JmFtcDtdKiAtIChbXiZsdDsmYW1wO10qICddXSZndDsnIFteJmx0OyZhbXA7XSopPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNDA4LDcgKzEzMTIsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmNkYXRhPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPmludCBpbmRpY2F0aW5nIHdoZXRoZXIgd2UgYXJlIHdpdGhpbiBhIENEQVRBIHNlY3Rpb248L3RkPgorPHRkPnVudXNlZDwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0xNDE5LDcgKzEzMjMsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VDaGFyUmVmIj48L2E+eG1sUGFyc2VDaGFyUmVmICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sUGFyc2VDaGFyUmVmCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBSZWZlcmVuY2UgZGVjbGFyYXRpb25zIFs2Nl0gQ2hhclJlZiA6Oj0gJyZhbXA7IycgWzAtOV0rICc7JyB8ICcmYW1wOyN4JyBbMC05YS1mQS1GXSsgJzsnIFsgV0ZDOiBMZWdhbCBDaGFyYWN0ZXIgXSBDaGFyYWN0ZXJzIHJlZmVycmVkIHRvIHVzaW5nIGNoYXJhY3RlciByZWZlcmVuY2VzIG11c3QgbWF0Y2ggdGhlIHByb2R1Y3Rpb24gZm9yIENoYXIuPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgYSBudW1lcmljIGNoYXJhY3RlciA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPi4gQWx3YXlzIGNvbnN1bWVzICcmYW1wOycuIFs2Nl0gQ2hhclJlZiA6Oj0gJyZhbXA7IycgWzAtOV0rICc7JyB8ICcmYW1wOyN4JyBbMC05YS1mQS1GXSsgJzsnIFsgV0ZDOiBMZWdhbCBDaGFyYWN0ZXIgXSBDaGFyYWN0ZXJzIHJlZmVycmVkIHRvIHVzaW5nIGNoYXJhY3RlciByZWZlcmVuY2VzIG11c3QgbWF0Y2ggdGhlIHByb2R1Y3Rpb24gZm9yIENoYXIuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTQ0MCw3ICsxMzQ0LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlQ29tbWVudCI+PC9hPnhtbFBhcnNlQ29tbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxQYXJzZUNvbW1lbnQJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPlNraXAgYW4gWE1MIChTR01MKSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2NvbW1lbnQiPmNvbW1lbnQ8L2E+ICZsdDshLS0gLi4uLiAtLSZndDsgVGhlIHNwZWMgc2F5cyB0aGF0ICJGb3IgY29tcGF0aWJpbGl0eSwgdGhlIHN0cmluZyAiLS0iIChkb3VibGUtaHlwaGVuKSBtdXN0IG5vdCBvY2N1ciB3aXRoaW4gY29tbWVudHMuICIgWzE1XSBDb21tZW50IDo6PSAnJmx0OyEtLScgKChDaGFyIC0gJy0nKSB8ICgnLScgKENoYXIgLSAnLScpKSkqICctLSZndDsnPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgYW4gWE1MIChTR01MKSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2NvbW1lbnQiPmNvbW1lbnQ8L2E+LiBBbHdheXMgY29uc3VtZXMgJyZsdDshJy4gVGhlIHNwZWMgc2F5cyB0aGF0ICJGb3IgY29tcGF0aWJpbGl0eSwgdGhlIHN0cmluZyAiLS0iIChkb3VibGUtaHlwaGVuKSBtdXN0IG5vdCBvY2N1ciB3aXRoaW4gY29tbWVudHMuICIgWzE1XSBDb21tZW50IDo6PSAnJmx0OyEtLScgKChDaGFyIC0gJy0nKSB8ICgnLScgKENoYXIgLSAnLScpKSkqICctLSZndDsnPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5Pjx0cj4KQEAgLTE0NzAsNyArMTM3NCw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZURlZmF1bHREZWNsIj48L2E+eG1sUGFyc2VEZWZhdWx0RGVjbCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFBhcnNlRGVmYXVsdERlY2wJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqKiB2YWx1ZSk8YnI+CiA8L3ByZT4KLTxwPlBhcnNlIGFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IGRlZmF1bHQgZGVjbGFyYXRpb24gWzYwXSBEZWZhdWx0RGVjbCA6Oj0gJyNSRVFVSVJFRCcgfCAnI0lNUExJRUQnIHwgKCgnI0ZJWEVEJyBTKT8gQXR0VmFsdWUpIFsgVkM6IFJlcXVpcmVkIEF0dHJpYnV0ZSBdIGlmIHRoZSBkZWZhdWx0IGRlY2xhcmF0aW9uIGlzIHRoZSBrZXl3b3JkICNSRVFVSVJFRCwgdGhlbiB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGUgdHlwZSBpbiB0aGUgYXR0cmlidXRlLWxpc3QgZGVjbGFyYXRpb24uIFsgVkM6IEF0dHJpYnV0ZSBEZWZhdWx0IExlZ2FsIF0gVGhlIGRlY2xhcmVkIGRlZmF1bHQgdmFsdWUgbXVzdCBtZWV0IHRoZSBsZXhpY2FsIGNvbnN0cmFpbnRzIG9mIHRoZSBkZWNsYXJlZCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB0eXBlIGMuZi4geG1sVmFsaWRhdGVBdHRyaWJ1dGVEZWNsKCkgWyBWQzogRml4ZWQgQXR0cmlidXRlIERlZmF1bHQgXSBpZiBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBoYXMgYSBkZWZhdWx0IHZhbHVlIGRlY2xhcmVkIHdpdGggdGhlICNGSVhFRCBrZXl3b3JkLCBpbnN0YW5jZXMgb2YgdGhhdCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBtdXN0IG1hdGNoIHRoZSBkZWZhdWx0IHZhbHVlLiBbIFdGQzogTm8gJmx0OyBpbiBBdHRyaWJ1dGUgVmFsdWVzIF0gaGFuZGxlZCBpbiB4bWxQYXJzZUF0dFZhbHVlKCk8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBQYXJzZSBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBkZWZhdWx0IGRlY2xhcmF0aW9uIFs2MF0gRGVmYXVsdERlY2wgOjo9ICcjUkVRVUlSRUQnIHwgJyNJTVBMSUVEJyB8ICgoJyNGSVhFRCcgUyk/IEF0dFZhbHVlKSBbIFZDOiBSZXF1aXJlZCBBdHRyaWJ1dGUgXSBpZiB0aGUgZGVmYXVsdCBkZWNsYXJhdGlvbiBpcyB0aGUga2V5d29yZCAjUkVRVUlSRUQsIHRoZW4gdGhlIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IG11c3QgYmUgc3BlY2lmaWVkIGZvciBhbGwgZWxlbWVudHMgb2YgdGhlIHR5cGUgaW4gdGhlIGF0dHJpYnV0ZS1saXN0IGRlY2xhcmF0aW9uLiBbIFZDOiBBdHRyaWJ1dGUgRGVmYXVsdCBMZWdhbCBdIFRoZSBkZWNsYXJlZCBkZWZhdWx0IHZhbHVlIG11c3QgbWVldCB0aGUgbGV4aWNhbCBjb25zdHJhaW50cyBvZiB0aGUgZGVjbGFyZWQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gdHlwZSBjLmYuIHhtbFZhbGlkYXRlQXR0cmlidXRlRGVjbCgpIFsgVkM6IEZpeGVkIEF0dHJpYnV0ZSBEZWZhdWx0IF0gaWYgYW4gPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gaGFzIGEgZGVmYXVsdCB2YWx1ZSBkZWNsYXJlZCB3aXRoIHRoZSAjRklYRUQga2V5d29yZCwgaW5zdGFuY2VzIG9mIHRoYXQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gbXVzdCBtYXRjaCB0aGUgZGVmYXVsdCB2YWx1ZS4gWyBXRkM6IE5vICZsdDsgaW4gQXR0cmlidXRlIFZhbHVlcyBdIGhhbmRsZWQgaW4geG1sUGFyc2VBdHRWYWx1ZSgpPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTQ4NSw3ICsxMzg5LDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPlhNTF9BVFRSSUJVVEVfTk9ORSwgWE1MX0FUVFJJQlVURV9SRVFVSVJFRCwgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjWE1MX0FUVFJJQlVURV9JTVBMSUVEIj5YTUxfQVRUUklCVVRFX0lNUExJRUQ8L2E+IG9yIFhNTF9BVFRSSUJVVEVfRklYRUQuPC90ZD4KKzx0ZD5YTUxfQVRUUklCVVRFX05PTkUsIFhNTF9BVFRSSUJVVEVfUkVRVUlSRUQsIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI1hNTF9BVFRSSUJVVEVfSU1QTElFRCI+WE1MX0FUVFJJQlVURV9JTVBMSUVEPC9hPiBvciA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCNYTUxfQVRUUklCVVRFX0ZJWEVEIj5YTUxfQVRUUklCVVRFX0ZJWEVEPC9hPi48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMTQ5Niw3ICsxNDAwLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlRG9jVHlwZURlY2wiPjwvYT54bWxQYXJzZURvY1R5cGVEZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlRG9jVHlwZURlY2wJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYSBET0NUWVBFIGRlY2xhcmF0aW9uIFsyOF0gZG9jdHlwZWRlY2wgOjo9ICcmbHQ7IURPQ1RZUEUnIFMgTmFtZSAoUyBFeHRlcm5hbElEKT8gUz8gKCdbJyAobWFya3VwZGVjbCB8IFBFUmVmZXJlbmNlIHwgUykqICddJyBTPyk/ICcmZ3Q7JyBbIFZDOiBSb290IEVsZW1lbnQgVHlwZSBdIFRoZSBOYW1lIGluIHRoZSBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9uIG11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgcm9vdCBlbGVtZW50LjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGEgRE9DVFlQRSBkZWNsYXJhdGlvbiBbMjhdIGRvY3R5cGVkZWNsIDo6PSAnJmx0OyFET0NUWVBFJyBTIE5hbWUgKFMgRXh0ZXJuYWxJRCk/IFM/ICgnWycgKG1hcmt1cGRlY2wgfCBQRVJlZmVyZW5jZSB8IFMpKiAnXScgUz8pPyAnJmd0OycgWyBWQzogUm9vdCBFbGVtZW50IFR5cGUgXSBUaGUgTmFtZSBpbiB0aGUgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbiBtdXN0IG1hdGNoIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIHJvb3QgZWxlbWVudC48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTUxMSw3ICsxNDE1LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlRWxlbWVudCI+PC9hPnhtbFBhcnNlRWxlbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxQYXJzZUVsZW1lbnQJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBlbGVtZW50IFszOV0gZWxlbWVudCA6Oj0gRW1wdHlFbGVtVGFnIHwgU1RhZyBjb250ZW50IEVUYWcgWyBXRkM6IEVsZW1lbnQgVHlwZSBNYXRjaCBdIFRoZSBOYW1lIGluIGFuIGVsZW1lbnQncyBlbmQtdGFnIG11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBpbiB0aGUgc3RhcnQtdGFnLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIFhNTCBlbGVtZW50IFszOV0gZWxlbWVudCA6Oj0gRW1wdHlFbGVtVGFnIHwgU1RhZyBjb250ZW50IEVUYWcgWyBXRkM6IEVsZW1lbnQgVHlwZSBNYXRjaCBdIFRoZSBOYW1lIGluIGFuIGVsZW1lbnQncyBlbmQtdGFnIG11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBpbiB0aGUgc3RhcnQtdGFnLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0xNTI2LDcgKzE0MzAsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbGVtZW50Q2hpbGRyZW5Db250ZW50RGVjbCI+PC9hPnhtbFBhcnNlRWxlbWVudENoaWxkcmVuQ29udGVudERlY2wgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVsZW1lbnRDb250ZW50UHRyIj54bWxFbGVtZW50Q29udGVudFB0cjwvYT4JeG1sUGFyc2VFbGVtZW50Q2hpbGRyZW5Db250ZW50RGVjbAkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJCQkgaW50IGlucHV0Y2hrKTxicj4KIDwvcHJlPgotPHA+cGFyc2UgdGhlIGRlY2xhcmF0aW9uIGZvciBhIE1peGVkIEVsZW1lbnQgY29udGVudCBUaGUgbGVhZGluZyAnKCcgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI3htbFBhcnNlRWxlbWVudENvbnRlbnREZWNsIj54bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbDwvYT4gWzQ3XSBjaGlsZHJlbiA6Oj0gKGNob2ljZSB8IHNlcSkgKCc/JyB8ICcqJyB8ICcrJyk/IFs0OF0gY3AgOjo9IChOYW1lIHwgY2hvaWNlIHwgc2VxKSAoJz8nIHwgJyonIHwgJysnKT8gWzQ5XSBjaG9pY2UgOjo9ICcoJyBTPyBjcCAoIFM/ICd8JyBTPyBjcCApKiBTPyAnKScgWzUwXSBzZXEgOjo9ICcoJyBTPyBjcCAoIFM/ICcsJyBTPyBjcCApKiBTPyAnKScgWyBWQzogUHJvcGVyIEdyb3VwL1BFIE5lc3RpbmcgXSBhcHBsaWVzIHRvIFs0OV0gYW5kIFs1MF0gVE9ETyBQYXJhbWV0ZXItZW50aXR5IHJlcGxhY2VtZW50IHRleHQgbXVzdCBiZSBwcm9wZXJseSBuZXN0ZWQgd2l0aCBwYXJlbnRoZXNpemVkIGdyb3Vwcy4gVGhhdCBpcyB0byBzYXksIGlmIGVpdGhlciBvZiB0aGUgb3BlbmluZyBvciBjbG9zaW5nIHBhcmVudGhlc2VzIGluIGEgY2hvaWNlLCBzZXEsIG9yIE1peGVkIGNvbnN0cnVjdCBpcyBjb250YWluZWQgaW4gdGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIGEgcGFyYW1ldGVyIGVudGl0eSwgYm90aCBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgc2FtZSByZXBsYWNlbWVudCB0ZXh0LiBGb3IgaW50ZXJvcGVyYWJpbGl0eSwgaWYgYSBwYXJhbWV0ZXItZW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IGFwcGVhcnMgaW4gYSBjaG9pY2UsIHNlcSwgb3IgTWl4ZWQgY29uc3RydWN0LCBpdHMgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgbm90IGJlIGVtcHR5LCBhbmQgbmVpdGhlciB0aGUgZmlyc3Qgbm9yIGxhc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgYmUgYSBjb25uZWN0b3IgKHwgb3IgLCkuPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgdGhlIGRlY2xhcmF0aW9uIGZvciBhIE1peGVkIEVsZW1lbnQgY29udGVudCBUaGUgbGVhZGluZyAnKCcgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI3htbFBhcnNlRWxlbWVudENvbnRlbnREZWNsIj54bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbDwvYT4gWzQ3XSBjaGlsZHJlbiA6Oj0gKGNob2ljZSB8IHNlcSkgKCc/JyB8ICcqJyB8ICcrJyk/IFs0OF0gY3AgOjo9IChOYW1lIHwgY2hvaWNlIHwgc2VxKSAoJz8nIHwgJyonIHwgJysnKT8gWzQ5XSBjaG9pY2UgOjo9ICcoJyBTPyBjcCAoIFM/ICd8JyBTPyBjcCApKiBTPyAnKScgWzUwXSBzZXEgOjo9ICcoJyBTPyBjcCAoIFM/ICcsJyBTPyBjcCApKiBTPyAnKScgWyBWQzogUHJvcGVyIEdyb3VwL1BFIE5lc3RpbmcgXSBhcHBsaWVzIHRvIFs0OV0gYW5kIFs1MF0gVE9ETyBQYXJhbWV0ZXItZW50aXR5IHJlcGxhY2VtZW50IHRleHQgbXVzdCBiZSBwcm9wZXJseSBuZXN0ZWQgd2l0aCBwYXJlbnRoZXNpemVkIGdyb3Vwcy4gVGhhdCBpcyB0byBzYXksIGlmIGVpdGhlciBvZiB0aGUgb3BlbmluZyBvciBjbG9zaW5nIHBhcmVudGhlc2VzIGluIGEgY2hvaWNlLCBzZXEsIG9yIE1peGVkIGNvbnN0cnVjdCBpcyBjb250YWluZWQgaW4gdGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIGEgcGFyYW1ldGVyIGVudGl0eSwgYm90aCBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgc2FtZSByZXBsYWNlbWVudCB0ZXh0LiBGb3IgaW50ZXJvcGVyYWJpbGl0eSwgaWYgYSBwYXJhbWV0ZXItZW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IGFwcGVhcnMgaW4gYSBjaG9pY2UsIHNlcSwgb3IgTWl4ZWQgY29uc3RydWN0LCBpdHMgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgbm90IGJlIGVtcHR5LCBhbmQgbmVpdGhlciB0aGUgZmlyc3Qgbm9yIGxhc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBzaG91bGQgYmUgYSBjb25uZWN0b3IgKHwgb3IgLCkuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTU1MSw3ICsxNDU1LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlRWxlbWVudENvbnRlbnREZWNsIj48L2E+eG1sUGFyc2VFbGVtZW50Q29udGVudERlY2wgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbAkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRWxlbWVudENvbnRlbnRQdHIiPnhtbEVsZW1lbnRDb250ZW50UHRyPC9hPiAqIHJlc3VsdCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIHRoZSBkZWNsYXJhdGlvbiBmb3IgYW4gRWxlbWVudCBjb250ZW50IGVpdGhlciBNaXhlZCBvciBDaGlsZHJlbiwgdGhlIGNhc2VzIEVNUFRZIGFuZCBBTlkgYXJlIGhhbmRsZWQgZGlyZWN0bHkgaW4gPGEgaHJlZj0ibGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbCN4bWxQYXJzZUVsZW1lbnREZWNsIj54bWxQYXJzZUVsZW1lbnREZWNsPC9hPiBbNDZdIGNvbnRlbnRzcGVjIDo6PSAnRU1QVFknIHwgJ0FOWScgfCBNaXhlZCB8IGNoaWxkcmVuPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgdGhlIGRlY2xhcmF0aW9uIGZvciBhbiBFbGVtZW50IGNvbnRlbnQgZWl0aGVyIE1peGVkIG9yIENoaWxkcmVuLCB0aGUgY2FzZXMgRU1QVFkgYW5kIEFOWSBhcmUgaGFuZGxlZCBkaXJlY3RseSBpbiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI3htbFBhcnNlRWxlbWVudERlY2wiPnhtbFBhcnNlRWxlbWVudERlY2w8L2E+IFs0Nl0gY29udGVudHNwZWMgOjo9ICdFTVBUWScgfCAnQU5ZJyB8IE1peGVkIHwgY2hpbGRyZW48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNTgwLDcgKzE0ODQsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbGVtZW50RGVjbCI+PC9hPnhtbFBhcnNlRWxlbWVudERlY2wgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxQYXJzZUVsZW1lbnREZWNsCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIEVsZW1lbnQgZGVjbGFyYXRpb24uIFs0NV0gZWxlbWVudGRlY2wgOjo9ICcmbHQ7IUVMRU1FTlQnIFMgTmFtZSBTIGNvbnRlbnRzcGVjIFM/ICcmZ3Q7JyBbIFZDOiBVbmlxdWUgRWxlbWVudCBUeXBlIERlY2xhcmF0aW9uIF0gTm8gZWxlbWVudCB0eXBlIG1heSBiZSBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZTwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIFBhcnNlIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24uIEFsd2F5cyBjb25zdW1lcyAnJmx0OyEnLiBbNDVdIGVsZW1lbnRkZWNsIDo6PSAnJmx0OyFFTEVNRU5UJyBTIE5hbWUgUyBjb250ZW50c3BlYyBTPyAnJmd0OycgWyBWQzogVW5pcXVlIEVsZW1lbnQgVHlwZSBEZWNsYXJhdGlvbiBdIE5vIGVsZW1lbnQgdHlwZSBtYXkgYmUgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2U8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNjAxLDcgKzE1MDUsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbGVtZW50TWl4ZWRDb250ZW50RGVjbCI+PC9hPnhtbFBhcnNlRWxlbWVudE1peGVkQ29udGVudERlY2wgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVsZW1lbnRDb250ZW50UHRyIj54bWxFbGVtZW50Q29udGVudFB0cjwvYT4JeG1sUGFyc2VFbGVtZW50TWl4ZWRDb250ZW50RGVjbAkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJCQkgaW50IGlucHV0Y2hrKTxicj4KIDwvcHJlPgotPHA+cGFyc2UgdGhlIGRlY2xhcmF0aW9uIGZvciBhIE1peGVkIEVsZW1lbnQgY29udGVudCBUaGUgbGVhZGluZyAnKCcgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI3htbFBhcnNlRWxlbWVudENvbnRlbnREZWNsIj54bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbDwvYT4gWzUxXSBNaXhlZCA6Oj0gJygnIFM/ICcjUENEQVRBJyAoUz8gJ3wnIFM/IE5hbWUpKiBTPyAnKSonIHwgJygnIFM/ICcjUENEQVRBJyBTPyAnKScgWyBWQzogUHJvcGVyIEdyb3VwL1BFIE5lc3RpbmcgXSBhcHBsaWVzIHRvIFs1MV0gdG9vIChzZWUgWzQ5XSkgWyBWQzogTm8gRHVwbGljYXRlIFR5cGVzIF0gVGhlIHNhbWUgbmFtZSBtdXN0IG5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gYSBzaW5nbGUgbWl4ZWQtY29udGVudCBkZWNsYXJhdGlvbi48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGEgTWl4ZWQgRWxlbWVudCBjb250ZW50IFRoZSBsZWFkaW5nICcoJyBhbmQgc3BhY2VzIGhhdmUgYmVlbiBza2lwcGVkIGluIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sUGFyc2VFbGVtZW50Q29udGVudERlY2wiPnhtbFBhcnNlRWxlbWVudENvbnRlbnREZWNsPC9hPiBbNTFdIE1peGVkIDo6PSAnKCcgUz8gJyNQQ0RBVEEnIChTPyAnfCcgUz8gTmFtZSkqIFM/ICcpKicgfCAnKCcgUz8gJyNQQ0RBVEEnIFM/ICcpJyBbIFZDOiBQcm9wZXIgR3JvdXAvUEUgTmVzdGluZyBdIGFwcGxpZXMgdG8gWzUxXSB0b28gKHNlZSBbNDldKSBbIFZDOiBObyBEdXBsaWNhdGUgVHlwZXMgXSBUaGUgc2FtZSBuYW1lIG11c3Qgbm90IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhIHNpbmdsZSBtaXhlZC1jb250ZW50IGRlY2xhcmF0aW9uLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTE2MjYsNyArMTUzMCw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZUVuY05hbWUiPjwvYT54bWxQYXJzZUVuY05hbWUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxQYXJzZUVuY05hbWUJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgdGhlIFhNTCBlbmNvZGluZyBuYW1lIFs4MV0gRW5jTmFtZSA6Oj0gW0EtWmEtel0gKFtBLVphLXowLTkuX10gfCAnLScpKjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIHRoZSBYTUwgZW5jb2RpbmcgbmFtZSBbODFdIEVuY05hbWUgOjo9IFtBLVphLXpdIChbQS1aYS16MC05Ll9dIHwgJy0nKSo8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNjQ3LDcgKzE1NTEsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbmNvZGluZ0RlY2wiPjwvYT54bWxQYXJzZUVuY29kaW5nRGVjbCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbFBhcnNlRW5jb2RpbmdEZWNsCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgdGhlIFhNTCBlbmNvZGluZyBkZWNsYXJhdGlvbiBbODBdIEVuY29kaW5nRGVjbCA6Oj0gUyAnZW5jb2RpbmcnIEVxICgnIicgRW5jTmFtZSAnIicgfCAiJyIgRW5jTmFtZSAiJyIpIHRoaXMgc2V0dXBzIHRoZSBjb252ZXJzaW9uIGZpbHRlcnMuPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgdGhlIFhNTCBlbmNvZGluZyBkZWNsYXJhdGlvbiBbODBdIEVuY29kaW5nRGVjbCA6Oj0gUyAnZW5jb2RpbmcnIEVxICgnIicgRW5jTmFtZSAnIicgfCAiJyIgRW5jTmFtZSAiJyIpIHRoaXMgc2V0dXBzIHRoZSBjb252ZXJzaW9uIGZpbHRlcnMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTY2OCw3ICsxNTcyLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlRW5kVGFnIj48L2E+eG1sUGFyc2VFbmRUYWcgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUGFyc2VFbmRUYWcJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIGVuZCBvZiB0YWcgWzQyXSBFVGFnIDo6PSAnJmx0Oy8nIE5hbWUgUz8gJyZndDsnIFdpdGggbmFtZXNwYWNlIFtOUyA5XSBFVGFnIDo6PSAnJmx0Oy8nIFFOYW1lIFM/ICcmZ3Q7JzwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIGVuZCBvZiB0YWcgWzQyXSBFVGFnIDo6PSAnJmx0Oy8nIE5hbWUgUz8gJyZndDsnIFdpdGggbmFtZXNwYWNlIFtOUyA5XSBFVGFnIDo6PSAnJmx0Oy8nIFFOYW1lIFM/ICcmZ3Q7JzwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0xNjgzLDcgKzE1ODcsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbnRpdHlEZWNsIj48L2E+eG1sUGFyc2VFbnRpdHlEZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlRW50aXR5RGVjbAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSAmbHQ7IUVOVElUWSBkZWNsYXJhdGlvbnMgWzcwXSBFbnRpdHlEZWNsIDo6PSBHRURlY2wgfCBQRURlY2wgWzcxXSBHRURlY2wgOjo9ICcmbHQ7IUVOVElUWScgUyBOYW1lIFMgRW50aXR5RGVmIFM/ICcmZ3Q7JyBbNzJdIFBFRGVjbCA6Oj0gJyZsdDshRU5USVRZJyBTICclJyBTIE5hbWUgUyBQRURlZiBTPyAnJmd0OycgWzczXSBFbnRpdHlEZWYgOjo9IEVudGl0eVZhbHVlIHwgKEV4dGVybmFsSUQgTkRhdGFEZWNsPykgWzc0XSBQRURlZiA6Oj0gRW50aXR5VmFsdWUgfCBFeHRlcm5hbElEIFs3Nl0gTkRhdGFEZWNsIDo6PSBTICdOREFUQScgUyBOYW1lIFsgVkM6IE5vdGF0aW9uIERlY2xhcmVkIF0gVGhlIE5hbWUgbXVzdCBtYXRjaCB0aGUgZGVjbGFyZWQgbmFtZSBvZiBhIG5vdGF0aW9uLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIFBhcnNlIGFuIGVudGl0eSBkZWNsYXJhdGlvbi4gQWx3YXlzIGNvbnN1bWVzICcmbHQ7IScuIFs3MF0gRW50aXR5RGVjbCA6Oj0gR0VEZWNsIHwgUEVEZWNsIFs3MV0gR0VEZWNsIDo6PSAnJmx0OyFFTlRJVFknIFMgTmFtZSBTIEVudGl0eURlZiBTPyAnJmd0OycgWzcyXSBQRURlY2wgOjo9ICcmbHQ7IUVOVElUWScgUyAnJScgUyBOYW1lIFMgUEVEZWYgUz8gJyZndDsnIFs3M10gRW50aXR5RGVmIDo6PSBFbnRpdHlWYWx1ZSB8IChFeHRlcm5hbElEIE5EYXRhRGVjbD8pIFs3NF0gUEVEZWYgOjo9IEVudGl0eVZhbHVlIHwgRXh0ZXJuYWxJRCBbNzZdIE5EYXRhRGVjbCA6Oj0gUyAnTkRBVEEnIFMgTmFtZSBbIFZDOiBOb3RhdGlvbiBEZWNsYXJlZCBdIFRoZSBOYW1lIG11c3QgbWF0Y2ggdGhlIGRlY2xhcmVkIG5hbWUgb2YgYSBub3RhdGlvbi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTY5OCw3ICsxNjAyLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlRW50aXR5UmVmIj48L2E+eG1sUGFyc2VFbnRpdHlSZWYgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVudGl0eVB0ciI+eG1sRW50aXR5UHRyPC9hPgl4bWxQYXJzZUVudGl0eVJlZgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIEVOVElUWSByZWZlcmVuY2VzIGRlY2xhcmF0aW9ucyBbNjhdIEVudGl0eVJlZiA6Oj0gJyZhbXA7JyBOYW1lICc7JyBbIFdGQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRob3V0IGFueSBEVEQsIGEgZG9jdW1lbnQgd2l0aCBvbmx5IGFuIGludGVybmFsIERURCBzdWJzZXQgd2hpY2ggY29udGFpbnMgbm8gcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2VzLCBvciBhIGRvY3VtZW50IHdpdGggInN0YW5kYWxvbmU9J3llcyciLCB0aGUgTmFtZSBnaXZlbiBpbiB0aGUgZW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IG11c3QgbWF0Y2ggdGhhdCBpbiBhbiBlbnRpdHkgZGVjbGFyYXRpb24sIGV4Y2VwdCB0aGF0IHdlbGwtZm9ybWVkIGRvY3VtZW50cyBuZWVkIG5vdCBkZWNsYXJlIGFueSBvZiB0aGUgZm9sbG93aW5nIGVudGl0aWVzOiBhbXAsIGx0LCBndCwgYXBvcywgcXVvdC4gVGhlIGRlY2xhcmF0aW9uIG9mIGEgcGFyYW1ldGVyIGVudGl0eSBtdXN0IHByZWNlZGUgYW55IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IHRvIGl0LiBTaW1pbGFybHksIHRoZSBkZWNsYXJhdGlvbiBvZiBhIGdlbmVyYWwgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXQgd2hpY2ggYXBwZWFycyBpbiBhIGRlZmF1bHQgdmFsdWUgaW4gYW4gYXR0cmlidXRlLWxpc3QgZGVjbGFyYXRpb24uIE5vdGUgdGhhdCBpZiBlbnRpdGllcyBhcmUgZGVjbGFyZWQgaW4gdGhlIGV4dGVybmFsIHN1YnNldCBvciBpbiBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMsIGEgbm9uLXZhbGlkYXRpbmcgcHJvY2Vzc29yIGlzIG5vdCBvYmxpZ2F0ZWQgdG8gcmVhZCBhbmQgcHJvY2VzcyB0aGVpciBkZWNsYXJhdGlvbnM7IGZvciBzdWNoIGRvY3VtZW50cywgdGhlIHJ1bGUgdGhhdCBhbiBlbnRpdHkgbXVzdCBiZSBkZWNsYXJlZCBpcyBhIHdlbGwtZm9ybWVkbmVzcyBjb25zdHJhaW50IG9ubHkgaWYgc3RhbmRhbG9uZT0neWVzJy4gWyBXRkM6IFBhcnNlZCBFbnRpdHkgXSBBbiBlbnRpdHkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gbXVzdCBub3QgY29udGFpbiB0aGUgbmFtZSBvZiBhbiB1bnBhcnNlZCBlbnRpdHk8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBQYXJzZSBhbiBlbnRpdGl5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+LiBBbHdheXMgY29uc3VtZXMgJyZhbXA7Jy4gWzY4XSBFbnRpdHlSZWYgOjo9ICcmYW1wOycgTmFtZSAnOycgWyBXRkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aG91dCBhbnkgRFRELCBhIGRvY3VtZW50IHdpdGggb25seSBhbiBpbnRlcm5hbCBEVEQgc3Vic2V0IHdoaWNoIGNvbnRhaW5zIG5vIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlcywgb3IgYSBkb2N1bWVudCB3aXRoICJzdGFuZGFsb25lPSd5ZXMnIiwgdGhlIE5hbWUgZ2l2ZW4gaW4gdGhlIGVudGl0eSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiBtdXN0IG1hdGNoIHRoYXQgaW4gYW4gZW50aXR5IGRlY2xhcmF0aW9uLCBleGNlcHQgdGhhdCB3ZWxsLWZvcm1lZCBkb2N1bWVudHMgbmVlZCBub3QgZGVjbGFyZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBlbnRpdGllczogYW1wLCBsdCwgZ3QsIGFwb3MsIHF1b3QuIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdC4gU2ltaWxhcmx5LCB0aGUgZGVjbGFyYXRpb24gb2YgYSBnZW5lcmFsIGVudGl0eSBtdXN0IHByZWNlZGUgYW55IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IHRvIGl0IHdoaWNoIGFwcGVhcnMgaW4gYSBkZWZhdWx0IHZhbHVlIGluIGFuIGF0dHJpYnV0ZS1saXN0IGRlY2xhcmF0aW9uLiBOb3RlIHRoYXQgaWYgZW50aXRpZXMgYXJlIGRlY2xhcmVkIGluIHRoZSBleHRlcm5hbCBzdWJzZXQgb3IgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzLCBhIG5vbi12YWxpZGF0aW5nIHByb2Nlc3NvciBpcyBub3Qgb2JsaWdhdGVkIHRvIHJlYWQgYW5kIHByb2Nlc3MgdGhlaXIgZGVjbGFyYXRpb25zOyBmb3Igc3VjaCBkb2N1bWVudHMsIHRoZSBydWxlIHRoYXQgYW4gZW50aXR5IG11c3QgYmUgZGVjbGFyZWQgaXMgYSB3ZWxsLWZvcm1lZG5lc3MgY29uc3RyYWludCBvbmx5IGlmIHN0YW5kYWxvbmU9J3llcycuIFsgV0ZDOiBQYXJzZWQgRW50aXR5IF0gQW4gZW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IG11c3Qgbm90IGNvbnRhaW4gdGhlIG5hbWUgb2YgYW4gdW5wYXJzZWQgZW50aXR5PC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTcxOSw3ICsxNjIzLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlRW50aXR5VmFsdWUiPjwvYT54bWxQYXJzZUVudGl0eVZhbHVlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJeG1sUGFyc2VFbnRpdHlWYWx1ZQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiogb3JpZyk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGEgdmFsdWUgZm9yIEVOVElUWSBkZWNsYXJhdGlvbnMgWzldIEVudGl0eVZhbHVlIDo6PSAnIicgKFteJSZhbXA7Il0gfCBQRVJlZmVyZW5jZSB8IFJlZmVyZW5jZSkqICciJyB8ICInIiAoW14lJmFtcDsnXSB8IFBFUmVmZXJlbmNlIHwgUmVmZXJlbmNlKSogIiciPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgYSB2YWx1ZSBmb3IgRU5USVRZIGRlY2xhcmF0aW9ucyBbOV0gRW50aXR5VmFsdWUgOjo9ICciJyAoW14lJmFtcDsiXSB8IFBFUmVmZXJlbmNlIHwgUmVmZXJlbmNlKSogJyInIHwgIiciIChbXiUmYW1wOyddIHwgUEVSZWZlcmVuY2UgfCBSZWZlcmVuY2UpKiAiJyI8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNzQ0LDcgKzE2NDgsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbnVtZXJhdGVkVHlwZSI+PC9hPnhtbFBhcnNlRW51bWVyYXRlZFR5cGUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxQYXJzZUVudW1lcmF0ZWRUeXBlCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVudW1lcmF0aW9uUHRyIj54bWxFbnVtZXJhdGlvblB0cjwvYT4gKiB0cmVlKTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gRW51bWVyYXRlZCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB0eXBlLiBbNTddIEVudW1lcmF0ZWRUeXBlIDo6PSBOb3RhdGlvblR5cGUgfCBFbnVtZXJhdGlvbiBbNThdIE5vdGF0aW9uVHlwZSA6Oj0gJ05PVEFUSU9OJyBTICcoJyBTPyBOYW1lIChTPyAnfCcgUz8gTmFtZSkqIFM/ICcpJzwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIEVudW1lcmF0ZWQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gdHlwZS4gWzU3XSBFbnVtZXJhdGVkVHlwZSA6Oj0gTm90YXRpb25UeXBlIHwgRW51bWVyYXRpb24gWzU4XSBOb3RhdGlvblR5cGUgOjo9ICdOT1RBVElPTicgUyAnKCcgUz8gTmFtZSAoUz8gJ3wnIFM/IE5hbWUpKiBTPyAnKSc8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNzcxLDcgKzE2NzUsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VFbnVtZXJhdGlvblR5cGUiPjwvYT54bWxQYXJzZUVudW1lcmF0aW9uVHlwZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRW51bWVyYXRpb25QdHIiPnhtbEVudW1lcmF0aW9uUHRyPC9hPgl4bWxQYXJzZUVudW1lcmF0aW9uVHlwZQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIEVudW1lcmF0aW9uIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IHR5cGUuIFs1OV0gRW51bWVyYXRpb24gOjo9ICcoJyBTPyBObXRva2VuIChTPyAnfCcgUz8gTm10b2tlbikqIFM/ICcpJyBbIFZDOiBFbnVtZXJhdGlvbiBdIFZhbHVlcyBvZiB0aGlzIHR5cGUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIE5tdG9rZW4gdG9rZW5zIGluIHRoZSBkZWNsYXJhdGlvbjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIEVudW1lcmF0aW9uIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IHR5cGUuIFs1OV0gRW51bWVyYXRpb24gOjo9ICcoJyBTPyBObXRva2VuIChTPyAnfCcgUz8gTm10b2tlbikqIFM/ICcpJyBbIFZDOiBFbnVtZXJhdGlvbiBdIFZhbHVlcyBvZiB0aGlzIHR5cGUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIE5tdG9rZW4gdG9rZW5zIGluIHRoZSBkZWNsYXJhdGlvbjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTE3OTIsNyArMTY5Niw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZUV4dGVybmFsSUQiPjwvYT54bWxQYXJzZUV4dGVybmFsSUQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxQYXJzZUV4dGVybmFsSUQJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoqIHB1YmxpY0lELCA8YnI+CQkJCQkgaW50IHN0cmljdCk8YnI+CiA8L3ByZT4KLTxwPlBhcnNlIGFuIEV4dGVybmFsIElEIG9yIGEgUHVibGljIElEIE5PVEU6IFByb2R1Y3Rpb25zIFs3NV0gYW5kIFs4M10gaW50ZXJhY3QgYmFkbHkgc2luY2UgWzc1XSBjYW4gZ2VuZXJhdGUgJ1BVQkxJQycgUyBQdWJpZExpdGVyYWwgUyBTeXN0ZW1MaXRlcmFsIFs3NV0gRXh0ZXJuYWxJRCA6Oj0gJ1NZU1RFTScgUyBTeXN0ZW1MaXRlcmFsIHwgJ1BVQkxJQycgUyBQdWJpZExpdGVyYWwgUyBTeXN0ZW1MaXRlcmFsIFs4M10gUHVibGljSUQgOjo9ICdQVUJMSUMnIFMgUHViaWRMaXRlcmFsPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgYW4gRXh0ZXJuYWwgSUQgb3IgYSBQdWJsaWMgSUQgTk9URTogUHJvZHVjdGlvbnMgWzc1XSBhbmQgWzgzXSBpbnRlcmFjdCBiYWRseSBzaW5jZSBbNzVdIGNhbiBnZW5lcmF0ZSAnUFVCTElDJyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwgWzc1XSBFeHRlcm5hbElEIDo6PSAnU1lTVEVNJyBTIFN5c3RlbUxpdGVyYWwgfCAnUFVCTElDJyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwgWzgzXSBQdWJsaWNJRCA6Oj0gJ1BVQkxJQycgUyBQdWJpZExpdGVyYWw8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xODQ2LDcgKzE3NTAsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VNYXJrdXBEZWNsIj48L2E+eG1sUGFyc2VNYXJrdXBEZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlTWFya3VwRGVjbAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBNYXJrdXAgZGVjbGFyYXRpb25zIFsyOV0gbWFya3VwZGVjbCA6Oj0gZWxlbWVudGRlY2wgfCBBdHRsaXN0RGVjbCB8IEVudGl0eURlY2wgfCBOb3RhdGlvbkRlY2wgfCBQSSB8IENvbW1lbnQgWyBWQzogUHJvcGVyIERlY2xhcmF0aW9uL1BFIE5lc3RpbmcgXSBQYXJhbWV0ZXItZW50aXR5IHJlcGxhY2VtZW50IHRleHQgbXVzdCBiZSBwcm9wZXJseSBuZXN0ZWQgd2l0aCBtYXJrdXAgZGVjbGFyYXRpb25zLiBUaGF0IGlzIHRvIHNheSwgaWYgZWl0aGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3IgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEgbWFya3VwIGRlY2xhcmF0aW9uIChtYXJrdXBkZWNsIGFib3ZlKSBpcyBjb250YWluZWQgaW4gdGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIGEgcGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2UsIGJvdGggbXVzdCBiZSBjb250YWluZWQgaW4gdGhlIHNhbWUgcmVwbGFjZW1lbnQgdGV4dC4gWyBXRkM6IFBFcyBpbiBJbnRlcm5hbCBTdWJzZXQgXSBJbiB0aGUgaW50ZXJuYWwgRFREIHN1YnNldCwgcGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2VzIGNhbiBvY2N1ciBvbmx5IHdoZXJlIG1hcmt1cCBkZWNsYXJhdGlvbnMgY2FuIG9jY3VyLCBub3Qgd2l0aGluIG1hcmt1cCBkZWNsYXJhdGlvbnMuIChUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHJlZmVyZW5jZXMgdGhhdCBvY2N1ciBpbiBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgb3IgdG8gdGhlIGV4dGVybmFsIHN1YnNldC4pPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgbWFya3VwIGRlY2xhcmF0aW9ucy4gQWx3YXlzIGNvbnN1bWVzICcmbHQ7IScgb3IgJyZsdDs/Jy4gWzI5XSBtYXJrdXBkZWNsIDo6PSBlbGVtZW50ZGVjbCB8IEF0dGxpc3REZWNsIHwgRW50aXR5RGVjbCB8IE5vdGF0aW9uRGVjbCB8IFBJIHwgQ29tbWVudCBbIFZDOiBQcm9wZXIgRGVjbGFyYXRpb24vUEUgTmVzdGluZyBdIFBhcmFtZXRlci1lbnRpdHkgcmVwbGFjZW1lbnQgdGV4dCBtdXN0IGJlIHByb3Blcmx5IG5lc3RlZCB3aXRoIG1hcmt1cCBkZWNsYXJhdGlvbnMuIFRoYXQgaXMgdG8gc2F5LCBpZiBlaXRoZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBvciB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBtYXJrdXAgZGVjbGFyYXRpb24gKG1hcmt1cGRlY2wgYWJvdmUpIGlzIGNvbnRhaW5lZCBpbiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBmb3IgYSBwYXJhbWV0ZXItZW50aXR5IHJlZmVyZW5jZSwgYm90aCBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgc2FtZSByZXBsYWNlbWVudCB0ZXh0LiBbIFdGQzogUEVzIGluIEludGVybmFsIFN1YnNldCBdIEluIHRoZSBpbnRlcm5hbCBEVEQgc3Vic2V0LCBwYXJhbWV0ZXItZW50aXR5IHJlZmVyZW5jZXMgY2FuIG9jY3VyIG9ubHkgd2hlcmUgbWFya3VwIGRlY2xhcmF0aW9ucyBjYW4gb2NjdXIsIG5vdCB3aXRoaW4gbWFya3VwIGRlY2xhcmF0aW9ucy4gKFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gcmVmZXJlbmNlcyB0aGF0IG9jY3VyIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcyBvciB0byB0aGUgZXh0ZXJuYWwgc3Vic2V0Lik8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTg2MSw3ICsxNzY1LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlTWlzYyI+PC9hPnhtbFBhcnNlTWlzYyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxQYXJzZU1pc2MJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBNaXNjKiBvcHRpb25hbCBmaWVsZC4gWzI3XSBNaXNjIDo6PSBDb21tZW50IHwgUEkgfCBTPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgYW4gWE1MIE1pc2MqIG9wdGlvbmFsIGZpZWxkLiBbMjddIE1pc2MgOjo9IENvbW1lbnQgfCBQSSB8IFM8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTg3Niw3ICsxNzgwLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlTmFtZSI+PC9hPnhtbFBhcnNlTmFtZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbFBhcnNlTmFtZQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgbmFtZS4gWzRdIE5hbWVDaGFyIDo6PSBMZXR0ZXIgfCBEaWdpdCB8ICcuJyB8ICctJyB8ICdfJyB8ICc6JyB8IENvbWJpbmluZ0NoYXIgfCBFeHRlbmRlciBbNV0gTmFtZSA6Oj0gKExldHRlciB8ICdfJyB8ICc6JykgKE5hbWVDaGFyKSogWzZdIE5hbWVzIDo6PSBOYW1lICgjeDIwIE5hbWUpKjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIFhNTCBuYW1lLiBbNF0gTmFtZUNoYXIgOjo9IExldHRlciB8IERpZ2l0IHwgJy4nIHwgJy0nIHwgJ18nIHwgJzonIHwgQ29tYmluaW5nQ2hhciB8IEV4dGVuZGVyIFs1XSBOYW1lIDo6PSAoTGV0dGVyIHwgJ18nIHwgJzonKSAoTmFtZUNoYXIpKiBbNl0gTmFtZXMgOjo9IE5hbWUgKCN4MjAgTmFtZSkqPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTkxMiw3ICsxODE2LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlTm10b2tlbiI+PC9hPnhtbFBhcnNlTm10b2tlbiAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbFBhcnNlTm10b2tlbgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgTm10b2tlbi4gWzddIE5tdG9rZW4gOjo9IChOYW1lQ2hhcikrIFs4XSBObXRva2VucyA6Oj0gTm10b2tlbiAoI3gyMCBObXRva2VuKSo8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSBhbiBYTUwgTm10b2tlbi4gWzddIE5tdG9rZW4gOjo9IChOYW1lQ2hhcikrIFs4XSBObXRva2VucyA6Oj0gTm10b2tlbiAoI3gyMCBObXRva2VuKSo8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xOTMzLDcgKzE4MzcsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VOb3RhdGlvbkRlY2wiPjwvYT54bWxQYXJzZU5vdGF0aW9uRGVjbCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxQYXJzZU5vdGF0aW9uRGVjbAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhIG5vdGF0aW9uIGRlY2xhcmF0aW9uIFs4Ml0gTm90YXRpb25EZWNsIDo6PSAnJmx0OyFOT1RBVElPTicgUyBOYW1lIFMgKEV4dGVybmFsSUQgfCBQdWJsaWNJRCkgUz8gJyZndDsnIEhlbmNlIHRoZXJlIGlzIGFjdHVhbGx5IDMgY2hvaWNlczogJ1BVQkxJQycgUyBQdWJpZExpdGVyYWwgJ1BVQkxJQycgUyBQdWJpZExpdGVyYWwgUyBTeXN0ZW1MaXRlcmFsIGFuZCAnU1lTVEVNJyBTIFN5c3RlbUxpdGVyYWwgU2VlIHRoZSBOT1RFIG9uIHhtbFBhcnNlRXh0ZXJuYWxJRCgpLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIFBhcnNlIGEgbm90YXRpb24gZGVjbGFyYXRpb24uIEFsd2F5cyBjb25zdW1lcyAnJmx0OyEnLiBbODJdIE5vdGF0aW9uRGVjbCA6Oj0gJyZsdDshTk9UQVRJT04nIFMgTmFtZSBTIChFeHRlcm5hbElEIHwgUHVibGljSUQpIFM/ICcmZ3Q7JyBIZW5jZSB0aGVyZSBpcyBhY3R1YWxseSAzIGNob2ljZXM6ICdQVUJMSUMnIFMgUHViaWRMaXRlcmFsICdQVUJMSUMnIFMgUHViaWRMaXRlcmFsIFMgU3lzdGVtTGl0ZXJhbCBhbmQgJ1NZU1RFTScgUyBTeXN0ZW1MaXRlcmFsIFNlZSB0aGUgTk9URSBvbiB4bWxQYXJzZUV4dGVybmFsSUQoKS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTk0OCw3ICsxODUyLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlTm90YXRpb25UeXBlIj48L2E+eG1sUGFyc2VOb3RhdGlvblR5cGUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEVudW1lcmF0aW9uUHRyIj54bWxFbnVtZXJhdGlvblB0cjwvYT4JeG1sUGFyc2VOb3RhdGlvblR5cGUJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBOb3RhdGlvbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB0eXBlLiBOb3RlOiB0aGUgbGVhZGluZyAnTk9UQVRJT04nIFMgcGFydCBoYXMgYWxyZWFkeSBiZWluZyBwYXJzZWQuLi4gWzU4XSBOb3RhdGlvblR5cGUgOjo9ICdOT1RBVElPTicgUyAnKCcgUz8gTmFtZSAoUz8gJ3wnIFM/IE5hbWUpKiBTPyAnKScgWyBWQzogTm90YXRpb24gQXR0cmlidXRlcyBdIFZhbHVlcyBvZiB0aGlzIHR5cGUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIG5vdGF0aW9uIG5hbWVzIGluY2x1ZGVkIGluIHRoZSBkZWNsYXJhdGlvbjsgYWxsIG5vdGF0aW9uIG5hbWVzIGluIHRoZSBkZWNsYXJhdGlvbiBtdXN0IGJlIGRlY2xhcmVkLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIE5vdGF0aW9uIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IHR5cGUuIE5vdGU6IHRoZSBsZWFkaW5nICdOT1RBVElPTicgUyBwYXJ0IGhhcyBhbHJlYWR5IGJlaW5nIHBhcnNlZC4uLiBbNThdIE5vdGF0aW9uVHlwZSA6Oj0gJ05PVEFUSU9OJyBTICcoJyBTPyBOYW1lIChTPyAnfCcgUz8gTmFtZSkqIFM/ICcpJyBbIFZDOiBOb3RhdGlvbiBBdHRyaWJ1dGVzIF0gVmFsdWVzIG9mIHRoaXMgdHlwZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgbm90YXRpb24gbmFtZXMgaW5jbHVkZWQgaW4gdGhlIGRlY2xhcmF0aW9uOyBhbGwgbm90YXRpb24gbmFtZXMgaW4gdGhlIGRlY2xhcmF0aW9uIG11c3QgYmUgZGVjbGFyZWQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTk2OSw3ICsxODczLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlUEVSZWZlcmVuY2UiPjwvYT54bWxQYXJzZVBFUmVmZXJlbmNlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlUEVSZWZlcmVuY2UJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgUEVSZWZlcmVuY2UgZGVjbGFyYXRpb25zIFRoZSBlbnRpdHkgY29udGVudCBpcyBoYW5kbGVkIGRpcmVjdGx5IGJ5IHB1c2hpbmcgaXQncyBjb250ZW50IGFzIGEgbmV3IGlucHV0IHN0cmVhbS4gWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJyUnIE5hbWUgJzsnIFsgV0ZDOiBObyBSZWN1cnNpb24gXSBBIHBhcnNlZCBlbnRpdHkgbXVzdCBub3QgY29udGFpbiBhIHJlY3Vyc2l2ZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdHNlbGYsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBbIFdGQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRob3V0IGFueSBEVEQsIGEgZG9jdW1lbnQgd2l0aCBvbmx5IGFuIGludGVybmFsIERURCBzdWJzZXQgd2hpY2ggY29udGFpbnMgbm8gcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2VzLCBvciBhIGRvY3VtZW50IHdpdGggInN0YW5kYWxvbmU9J3llcyciLCAuLi4gLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdC4uLiBbIFZDOiBFbnRpdHkgRGVjbGFyZWQgXSBJbiBhIGRvY3VtZW50IHdpdGggYW4gZXh0ZXJuYWwgc3Vic2V0IG9yIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcyB3aXRoICJzdGFuZGFsb25lPSdubyciLCAuLi4gLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdC4uLiBbIFdGQzogSW4gRFREIF0gUGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2VzIG1heSBvbmx5IGFwcGVhciBpbiB0aGUgRFRELiBOT1RFOiBtaXNsZWFkaW5nIGJ1dCB0aGlzIGlzIGhhbmRsZWQuPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgYSBwYXJhbWV0ZXIgZW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+LiBBbHdheXMgY29uc3VtZXMgJyUnLiBUaGUgZW50aXR5IGNvbnRlbnQgaXMgaGFuZGxlZCBkaXJlY3RseSBieSBwdXNoaW5nIGl0J3MgY29udGVudCBhcyBhIG5ldyBpbnB1dCBzdHJlYW0uIFs2OV0gUEVSZWZlcmVuY2UgOjo9ICclJyBOYW1lICc7JyBbIFdGQzogTm8gUmVjdXJzaW9uIF0gQSBwYXJzZWQgZW50aXR5IG11c3Qgbm90IGNvbnRhaW4gYSByZWN1cnNpdmUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXRzZWxmLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gWyBXRkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aG91dCBhbnkgRFRELCBhIGRvY3VtZW50IHdpdGggb25seSBhbiBpbnRlcm5hbCBEVEQgc3Vic2V0IHdoaWNoIGNvbnRhaW5zIG5vIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlcywgb3IgYSBkb2N1bWVudCB3aXRoICJzdGFuZGFsb25lPSd5ZXMnIiwgLi4uIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXQuLi4gWyBWQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRoIGFuIGV4dGVybmFsIHN1YnNldCBvciBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgd2l0aCAic3RhbmRhbG9uZT0nbm8nIiwgLi4uIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXQuLi4gWyBXRkM6IEluIERURCBdIFBhcmFtZXRlci1lbnRpdHkgcmVmZXJlbmNlcyBtYXkgb25seSBhcHBlYXIgaW4gdGhlIERURC4gTk9URTogbWlzbGVhZGluZyBidXQgdGhpcyBpcyBoYW5kbGVkLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0xOTg0LDcgKzE4ODgsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VQSSI+PC9hPnhtbFBhcnNlUEkgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUGFyc2VQSQkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gWE1MIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24uIFsxNl0gUEkgOjo9ICcmbHQ7PycgUElUYXJnZXQgKFMgKENoYXIqIC0gKENoYXIqICc/Jmd0OycgQ2hhciopKSk/ICc/Jmd0OycgVGhlIHByb2Nlc3NpbmcgaXMgdHJhbnNmZXJyZWQgdG8gU0FYIG9uY2UgcGFyc2VkLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIFhNTCBQcm9jZXNzaW5nIEluc3RydWN0aW9uLiBbMTZdIFBJIDo6PSAnJmx0Oz8nIFBJVGFyZ2V0IChTIChDaGFyKiAtIChDaGFyKiAnPyZndDsnIENoYXIqKSkpPyAnPyZndDsnIFRoZSBwcm9jZXNzaW5nIGlzIHRyYW5zZmVycmVkIHRvIFNBWCBvbmNlIHBhcnNlZC48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTk5OSw3ICsxOTAzLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlUElUYXJnZXQiPjwvYT54bWxQYXJzZVBJVGFyZ2V0ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJeG1sUGFyc2VQSVRhcmdldAkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIHRoZSBuYW1lIG9mIGEgUEkgWzE3XSBQSVRhcmdldCA6Oj0gTmFtZSAtICgoJ1gnIHwgJ3gnKSAoJ00nIHwgJ20nKSAoJ0wnIHwgJ2wnKSk8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSB0aGUgbmFtZSBvZiBhIFBJIFsxN10gUElUYXJnZXQgOjo9IE5hbWUgLSAoKCdYJyB8ICd4JykgKCdNJyB8ICdtJykgKCdMJyB8ICdsJykpPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjAyMCw3ICsxOTI0LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlUHViaWRMaXRlcmFsIj48L2E+eG1sUGFyc2VQdWJpZExpdGVyYWwgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxQYXJzZVB1YmlkTGl0ZXJhbAkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBwdWJsaWMgbGl0ZXJhbCBbMTJdIFB1YmlkTGl0ZXJhbCA6Oj0gJyInIFB1YmlkQ2hhciogJyInIHwgIiciIChQdWJpZENoYXIgLSAiJyIpKiAiJyI8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSBhbiBYTUwgcHVibGljIGxpdGVyYWwgWzEyXSBQdWJpZExpdGVyYWwgOjo9ICciJyBQdWJpZENoYXIqICciJyB8ICInIiAoUHViaWRDaGFyIC0gIiciKSogIiciPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjA2Miw3ICsxOTY2LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlUmVmZXJlbmNlIj48L2E+eG1sUGFyc2VSZWZlcmVuY2UgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUGFyc2VSZWZlcmVuY2UJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW5kIGhhbmRsZSBlbnRpdHkgcmVmZXJlbmNlcyBpbiBjb250ZW50LCBkZXBlbmRpbmcgb24gdGhlIFNBWCBpbnRlcmZhY2UsIHRoaXMgbWF5IGVuZC11cCBpbiBhIGNhbGwgdG8gY2hhcmFjdGVyKCkgaWYgdGhpcyBpcyBhIENoYXJSZWYsIGEgcHJlZGVmaW5lZCBlbnRpdHksIGlmIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSgpIGNhbGxiYWNrLiBvciBpZiB0aGUgcGFyc2VyIHdhcyBhc2tlZCB0byBzd2l0Y2ggdG8gdGhhdCBtb2RlLiBbNjddIFJlZmVyZW5jZSA6Oj0gRW50aXR5UmVmIHwgQ2hhclJlZjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuZCBoYW5kbGUgZW50aXR5IHJlZmVyZW5jZXMgaW4gY29udGVudCwgZGVwZW5kaW5nIG9uIHRoZSBTQVggaW50ZXJmYWNlLCB0aGlzIG1heSBlbmQtdXAgaW4gYSBjYWxsIHRvIGNoYXJhY3RlcigpIGlmIHRoaXMgaXMgYSBDaGFyUmVmLCBhIHByZWRlZmluZWQgZW50aXR5LCBpZiB0aGVyZSBpcyBubyByZWZlcmVuY2UoKSBjYWxsYmFjay4gb3IgaWYgdGhlIHBhcnNlciB3YXMgYXNrZWQgdG8gc3dpdGNoIHRvIHRoYXQgbW9kZS4gQWx3YXlzIGNvbnN1bWVzICcmYW1wOycuIFs2N10gUmVmZXJlbmNlIDo6PSBFbnRpdHlSZWYgfCBDaGFyUmVmPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5Pjx0cj4KQEAgLTIwNzcsNyArMTk4MSw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZVNERGVjbCI+PC9hPnhtbFBhcnNlU0REZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sUGFyc2VTRERlY2wJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIHRoZSBYTUwgc3RhbmRhbG9uZSBkZWNsYXJhdGlvbiBbMzJdIFNERGVjbCA6Oj0gUyAnc3RhbmRhbG9uZScgRXEgKCgiJyIgKCd5ZXMnIHwgJ25vJykgIiciKSB8ICgnIicgKCd5ZXMnIHwgJ25vJyknIicpKSBbIFZDOiBTdGFuZGFsb25lIERvY3VtZW50IERlY2xhcmF0aW9uIF0gVE9ETyBUaGUgc3RhbmRhbG9uZSBkb2N1bWVudCBkZWNsYXJhdGlvbiBtdXN0IGhhdmUgdGhlIHZhbHVlICJubyIgaWYgYW55IGV4dGVybmFsIG1hcmt1cCBkZWNsYXJhdGlvbnMgY29udGFpbiBkZWNsYXJhdGlvbnMgb2Y6IC0gYXR0cmlidXRlcyB3aXRoIGRlZmF1bHQgdmFsdWVzLCBpZiBlbGVtZW50cyB0byB3aGljaCB0aGVzZSBhdHRyaWJ1dGVzIGFwcGx5IGFwcGVhciBpbiB0aGUgZG9jdW1lbnQgd2l0aG91dCBzcGVjaWZpY2F0aW9ucyBvZiB2YWx1ZXMgZm9yIHRoZXNlIGF0dHJpYnV0ZXMsIG9yIC0gZW50aXRpZXMgKG90aGVyIHRoYW4gYW1wLCBsdCwgZ3QsIGFwb3MsIHF1b3QpLCBpZiByZWZlcmVuY2VzIHRvIHRob3NlIGVudGl0aWVzIGFwcGVhciBpbiB0aGUgZG9jdW1lbnQsIG9yIC0gYXR0cmlidXRlcyB3aXRoIHZhbHVlcyBzdWJqZWN0IHRvIG5vcm1hbGl6YXRpb24sIHdoZXJlIHRoZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBhcHBlYXJzIGluIHRoZSBkb2N1bWVudCB3aXRoIGEgdmFsdWUgd2hpY2ggd2lsbCBjaGFuZ2UgYXMgYSByZXN1bHQgb2Ygbm9ybWFsaXphdGlvbiwgb3IgLSBlbGVtZW50IHR5cGVzIHdpdGggZWxlbWVudCBjb250ZW50LCBpZiB3aGl0ZSBzcGFjZSBvY2N1cnMgZGlyZWN0bHkgd2l0aGluIGFueSBpbnN0YW5jZSBvZiB0aG9zZSB0eXBlcy48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSB0aGUgWE1MIHN0YW5kYWxvbmUgZGVjbGFyYXRpb24gWzMyXSBTRERlY2wgOjo9IFMgJ3N0YW5kYWxvbmUnIEVxICgoIiciICgneWVzJyB8ICdubycpICInIikgfCAoJyInICgneWVzJyB8ICdubycpJyInKSkgWyBWQzogU3RhbmRhbG9uZSBEb2N1bWVudCBEZWNsYXJhdGlvbiBdIFRPRE8gVGhlIHN0YW5kYWxvbmUgZG9jdW1lbnQgZGVjbGFyYXRpb24gbXVzdCBoYXZlIHRoZSB2YWx1ZSAibm8iIGlmIGFueSBleHRlcm5hbCBtYXJrdXAgZGVjbGFyYXRpb25zIGNvbnRhaW4gZGVjbGFyYXRpb25zIG9mOiAtIGF0dHJpYnV0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlcywgaWYgZWxlbWVudHMgdG8gd2hpY2ggdGhlc2UgYXR0cmlidXRlcyBhcHBseSBhcHBlYXIgaW4gdGhlIGRvY3VtZW50IHdpdGhvdXQgc3BlY2lmaWNhdGlvbnMgb2YgdmFsdWVzIGZvciB0aGVzZSBhdHRyaWJ1dGVzLCBvciAtIGVudGl0aWVzIChvdGhlciB0aGFuIGFtcCwgbHQsIGd0LCBhcG9zLCBxdW90KSwgaWYgcmVmZXJlbmNlcyB0byB0aG9zZSBlbnRpdGllcyBhcHBlYXIgaW4gdGhlIGRvY3VtZW50LCBvciAtIGF0dHJpYnV0ZXMgd2l0aCB2YWx1ZXMgc3ViamVjdCB0byBub3JtYWxpemF0aW9uLCB3aGVyZSB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gYXBwZWFycyBpbiB0aGUgZG9jdW1lbnQgd2l0aCBhIHZhbHVlIHdoaWNoIHdpbGwgY2hhbmdlIGFzIGEgcmVzdWx0IG9mIG5vcm1hbGl6YXRpb24sIG9yIC0gZWxlbWVudCB0eXBlcyB3aXRoIGVsZW1lbnQgY29udGVudCwgaWYgd2hpdGUgc3BhY2Ugb2NjdXJzIGRpcmVjdGx5IHdpdGhpbiBhbnkgaW5zdGFuY2Ugb2YgdGhvc2UgdHlwZXMuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjA5OCw3ICsyMDAyLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlU3RhcnRUYWciPjwvYT54bWxQYXJzZVN0YXJ0VGFnICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJeG1sUGFyc2VTdGFydFRhZwkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGEgc3RhcnQgb2YgdGFnIGVpdGhlciBmb3IgcnVsZSBlbGVtZW50IG9yIEVtcHR5RWxlbWVudC4gSW4gYm90aCBjYXNlIHdlIGRvbid0IHBhcnNlIHRoZSB0YWcgY2xvc2luZyBjaGFycy4gWzQwXSBTVGFnIDo6PSAnJmx0OycgTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAnJmd0OycgWyBXRkM6IFVuaXF1ZSBBdHQgU3BlYyBdIE5vIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IG5hbWUgbWF5IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdGFydC10YWcgb3IgZW1wdHktZWxlbWVudCB0YWcuIFs0NF0gRW1wdHlFbGVtVGFnIDo6PSAnJmx0OycgTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAnLyZndDsnIFsgV0ZDOiBVbmlxdWUgQXR0IFNwZWMgXSBObyA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBuYW1lIG1heSBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc3RhcnQtdGFnIG9yIGVtcHR5LWVsZW1lbnQgdGFnLiBXaXRoIG5hbWVzcGFjZTogW05TIDhdIFNUYWcgOjo9ICcmbHQ7JyBRTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAnJmd0OycgW05TIDEwXSBFbXB0eUVsZW1lbnQgOjo9ICcmbHQ7JyBRTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAnLyZndDsnPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gUGFyc2UgYSBzdGFydCB0YWcuIEFsd2F5cyBjb25zdW1lcyAnJmx0OycuIFs0MF0gU1RhZyA6Oj0gJyZsdDsnIE5hbWUgKFMgQXR0cmlidXRlKSogUz8gJyZndDsnIFsgV0ZDOiBVbmlxdWUgQXR0IFNwZWMgXSBObyA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBuYW1lIG1heSBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc3RhcnQtdGFnIG9yIGVtcHR5LWVsZW1lbnQgdGFnLiBbNDRdIEVtcHR5RWxlbVRhZyA6Oj0gJyZsdDsnIE5hbWUgKFMgQXR0cmlidXRlKSogUz8gJy8mZ3Q7JyBbIFdGQzogVW5pcXVlIEF0dCBTcGVjIF0gTm8gPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gbmFtZSBtYXkgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN0YXJ0LXRhZyBvciBlbXB0eS1lbGVtZW50IHRhZy4gV2l0aCBuYW1lc3BhY2U6IFtOUyA4XSBTVGFnIDo6PSAnJmx0OycgUU5hbWUgKFMgQXR0cmlidXRlKSogUz8gJyZndDsnIFtOUyAxMF0gRW1wdHlFbGVtZW50IDo6PSAnJmx0OycgUU5hbWUgKFMgQXR0cmlidXRlKSogUz8gJy8mZ3Q7JzwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTIxMTksNyArMjAyMyw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZVN5c3RlbUxpdGVyYWwiPjwvYT54bWxQYXJzZVN5c3RlbUxpdGVyYWwgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxQYXJzZVN5c3RlbUxpdGVyYWwJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgTGl0ZXJhbCBbMTFdIFN5c3RlbUxpdGVyYWwgOjo9ICgnIicgW14iXSogJyInKSB8ICgiJyIgW14nXSogIiciKTwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIFhNTCBMaXRlcmFsIFsxMV0gU3lzdGVtTGl0ZXJhbCA6Oj0gKCciJyBbXiJdKiAnIicpIHwgKCInIiBbXiddKiAiJyIpPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjE0MCw3ICsyMDQ0LDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlVGV4dERlY2wiPjwvYT54bWxQYXJzZVRleHREZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlVGV4dERlY2wJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gWE1MIGRlY2xhcmF0aW9uIGhlYWRlciBmb3IgZXh0ZXJuYWwgZW50aXRpZXMgWzc3XSBUZXh0RGVjbCA6Oj0gJyZsdDs/eG1sJyBWZXJzaW9uSW5mbz8gRW5jb2RpbmdEZWNsIFM/ICc/Jmd0Oyc8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBwYXJzZSBhbiBYTUwgZGVjbGFyYXRpb24gaGVhZGVyIGZvciBleHRlcm5hbCBlbnRpdGllcyBbNzddIFRleHREZWNsIDo6PSAnJmx0Oz94bWwnIFZlcnNpb25JbmZvPyBFbmNvZGluZ0RlY2wgUz8gJz8mZ3Q7JzwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0yMTU1LDcgKzIwNTksNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VWZXJzaW9uSW5mbyI+PC9hPnhtbFBhcnNlVmVyc2lvbkluZm8gKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxQYXJzZVZlcnNpb25JbmZvCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+cGFyc2UgdGhlIFhNTCB2ZXJzaW9uLiBbMjRdIFZlcnNpb25JbmZvIDo6PSBTICd2ZXJzaW9uJyBFcSAoJyBWZXJzaW9uTnVtICcgfCAiIFZlcnNpb25OdW0gIikgWzI1XSBFcSA6Oj0gUz8gJz0nIFM/PC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4gcGFyc2UgdGhlIFhNTCB2ZXJzaW9uLiBbMjRdIFZlcnNpb25JbmZvIDo6PSBTICd2ZXJzaW9uJyBFcSAoJyBWZXJzaW9uTnVtICcgfCAiIFZlcnNpb25OdW0gIikgWzI1XSBFcSA6Oj0gUz8gJz0nIFM/PC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjE3Niw3ICsyMDgwLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlVmVyc2lvbk51bSI+PC9hPnhtbFBhcnNlVmVyc2lvbk51bSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbFBhcnNlVmVyc2lvbk51bQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIHRoZSBYTUwgdmVyc2lvbiB2YWx1ZS4gWzI2XSBWZXJzaW9uTnVtIDo6PSAnMS4nIFswLTldKyBJbiBwcmFjdGljZSBhbGxvdyBbMC05XS5bMC05XSsgYXQgdGhhdCBsZXZlbDwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIHRoZSBYTUwgdmVyc2lvbiB2YWx1ZS4gWzI2XSBWZXJzaW9uTnVtIDo6PSAnMS4nIFswLTldKyBJbiBwcmFjdGljZSBhbGxvdyBbMC05XS5bMC05XSsgYXQgdGhhdCBsZXZlbDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTIxOTcsNyArMjEwMSw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZVhNTERlY2wiPjwvYT54bWxQYXJzZVhNTERlY2wgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUGFyc2VYTUxEZWNsCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQpPGJyPgogPC9wcmU+Ci08cD5wYXJzZSBhbiBYTUwgZGVjbGFyYXRpb24gaGVhZGVyIFsyM10gWE1MRGVjbCA6Oj0gJyZsdDs/eG1sJyBWZXJzaW9uSW5mbyBFbmNvZGluZ0RlY2w/IFNERGVjbD8gUz8gJz8mZ3Q7JzwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIHBhcnNlIGFuIFhNTCBkZWNsYXJhdGlvbiBoZWFkZXIgWzIzXSBYTUxEZWNsIDo6PSAnJmx0Oz94bWwnIFZlcnNpb25JbmZvIEVuY29kaW5nRGVjbD8gU0REZWNsPyBTPyAnPyZndDsnPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5Pjx0cj4KQEAgLTIyMTIsNyArMjExNiw3IEBACiA8YSBuYW1lPSJ4bWxQYXJzZXJIYW5kbGVQRVJlZmVyZW5jZSI+PC9hPnhtbFBhcnNlckhhbmRsZVBFUmVmZXJlbmNlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFBhcnNlckhhbmRsZVBFUmVmZXJlbmNlCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0KTxicj4KIDwvcHJlPgotPHA+WzY5XSBQRVJlZmVyZW5jZSA6Oj0gJyUnIE5hbWUgJzsnIFsgV0ZDOiBObyBSZWN1cnNpb24gXSBBIHBhcnNlZCBlbnRpdHkgbXVzdCBub3QgY29udGFpbiBhIHJlY3Vyc2l2ZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdHNlbGYsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBbIFdGQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRob3V0IGFueSBEVEQsIGEgZG9jdW1lbnQgd2l0aCBvbmx5IGFuIGludGVybmFsIERURCBzdWJzZXQgd2hpY2ggY29udGFpbnMgbm8gcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2VzLCBvciBhIGRvY3VtZW50IHdpdGggInN0YW5kYWxvbmU9J3llcyciLCAuLi4gLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdC4uLiBbIFZDOiBFbnRpdHkgRGVjbGFyZWQgXSBJbiBhIGRvY3VtZW50IHdpdGggYW4gZXh0ZXJuYWwgc3Vic2V0IG9yIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcyB3aXRoICJzdGFuZGFsb25lPSdubyciLCAuLi4gLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB0byBpdC4uLiBbIFdGQzogSW4gRFREIF0gUGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2VzIG1heSBvbmx5IGFwcGVhciBpbiB0aGUgRFRELiBOT1RFOiBtaXNsZWFkaW5nIGJ1dCB0aGlzIGlzIGhhbmRsZWQuIEEgUEVSZWZlcmVuY2UgbWF5IGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0gdGhlIGhhbmRsaW5nIGlzIGRvbmUgYWNjb3JkaW5nbHkgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNlbnRwcm9jIGkuZS4gLSBJbmNsdWRlZCBpbiBsaXRlcmFsIGluIGVudGl0eSB2YWx1ZXMgLSBJbmNsdWRlZCBhcyBQYXJhbWV0ZXIgRW50aXR5IDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjcmVmZXJlbmNlIj5yZWZlcmVuY2U8L2E+IHdpdGhpbiBEVERzPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuIFs2OV0gUEVSZWZlcmVuY2UgOjo9ICclJyBOYW1lICc7JyBbIFdGQzogTm8gUmVjdXJzaW9uIF0gQSBwYXJzZWQgZW50aXR5IG11c3Qgbm90IGNvbnRhaW4gYSByZWN1cnNpdmUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXRzZWxmLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gWyBXRkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aG91dCBhbnkgRFRELCBhIGRvY3VtZW50IHdpdGggb25seSBhbiBpbnRlcm5hbCBEVEQgc3Vic2V0IHdoaWNoIGNvbnRhaW5zIG5vIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlcywgb3IgYSBkb2N1bWVudCB3aXRoICJzdGFuZGFsb25lPSd5ZXMnIiwgLi4uIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXQuLi4gWyBWQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRoIGFuIGV4dGVybmFsIHN1YnNldCBvciBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgd2l0aCAic3RhbmRhbG9uZT0nbm8nIiwgLi4uIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNyZWZlcmVuY2UiPnJlZmVyZW5jZTwvYT4gdG8gaXQuLi4gWyBXRkM6IEluIERURCBdIFBhcmFtZXRlci1lbnRpdHkgcmVmZXJlbmNlcyBtYXkgb25seSBhcHBlYXIgaW4gdGhlIERURC4gTk9URTogbWlzbGVhZGluZyBidXQgdGhpcyBpcyBoYW5kbGVkLiBBIFBFUmVmZXJlbmNlIG1heSBoYXZlIGJlZW4gZGV0ZWN0ZWQgaW4gdGhlIGN1cnJlbnQgaW5wdXQgc3RyZWFtIHRoZSBoYW5kbGluZyBpcyBkb25lIGFjY29yZGluZ2x5IHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwjZW50cHJvYyBpLmUuIC0gSW5jbHVkZWQgaW4gbGl0ZXJhbCBpbiBlbnRpdHkgdmFsdWVzIC0gSW5jbHVkZWQgYXMgUGFyYW1ldGVyIEVudGl0eSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI3JlZmVyZW5jZSI+cmVmZXJlbmNlPC9hPiB3aXRoaW4gRFREczwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0yMjQyLDcgKzIxNDYsNyBAQAogPGEgbmFtZT0ieG1sUGFyc2VySW5wdXRTaHJpbmsiPjwvYT54bWxQYXJzZXJJbnB1dFNocmluayAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxQYXJzZXJJbnB1dFNocmluawkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0UHRyIj54bWxQYXJzZXJJbnB1dFB0cjwvYT4gaW4pPGJyPgogPC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdXNlZCBpbnB1dCBmb3IgdGhlIHBhcnNlci48L3A+Cis8cD5ERVBSRUNBVEVEOiBEb24ndCB1c2UuIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB1c2VkIGlucHV0IGZvciB0aGUgcGFyc2VyLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC0yMzM5LDcgKzIyNDMsNyBAQAogPGEgbmFtZT0ieG1sU2tpcEJsYW5rQ2hhcnMiPjwvYT54bWxTa2lwQmxhbmtDaGFycyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFNraXBCbGFua0NoYXJzCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCk8YnI+CiA8L3ByZT4KLTxwPnNraXAgYWxsIGJsYW5rcyBjaGFyYWN0ZXIgZm91bmQgYXQgdGhhdCBwb2ludCBpbiB0aGUgaW5wdXQgc3RyZWFtcy4gSXQgcG9wcyB1cCBmaW5pc2hlZCBlbnRpdGllcyBpbiB0aGUgcHJvY2VzcyBpZiBhbGxvd2FibGUgYXQgdGhhdCBwb2ludC48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gc2tpcCBhbGwgYmxhbmtzIGNoYXJhY3RlciBmb3VuZCBhdCB0aGF0IHBvaW50IGluIHRoZSBpbnB1dCBzdHJlYW1zLiBJdCBwb3BzIHVwIGZpbmlzaGVkIGVudGl0aWVzIGluIHRoZSBwcm9jZXNzIGlmIGFsbG93YWJsZSBhdCB0aGF0IHBvaW50LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTIzODksNyArMjI5Myw3IEBACiA8YSBuYW1lPSJ4bWxTdHJpbmdDdXJyZW50Q2hhciI+PC9hPnhtbFN0cmluZ0N1cnJlbnRDaGFyICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sU3RyaW5nQ3VycmVudENoYXIJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1ciwgPGJyPgkJCQkJIGludCAqIGxlbik8YnI+CiA8L3ByZT4KLTxwPlRoZSBjdXJyZW50IGNoYXIgdmFsdWUsIGlmIHVzaW5nIFVURi04IHRoaXMgbWF5IGFjdHVhbGx5IHNwYW4gbXVsdGlwbGUgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlci48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gVGhlIGN1cnJlbnQgY2hhciB2YWx1ZSwgaWYgdXNpbmcgVVRGLTggdGhpcyBtYXkgYWN0dWFsbHkgc3BhbiBtdWx0aXBsZSBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI0MTgsNyArMjMyMiw3IEBACiA8YSBuYW1lPSJ4bWxTdHJpbmdEZWNvZGVFbnRpdGllcyI+PC9hPnhtbFN0cmluZ0RlY29kZUVudGl0aWVzICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJeG1sU3RyaW5nRGVjb2RlRW50aXRpZXMJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogc3RyLCA8YnI+CQkJCQkgaW50IHdoYXQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+IGVuZCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gZW5kMiwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gZW5kMyk8YnI+CiA8L3ByZT4KLTxwPlRha2VzIGEgZW50aXR5IHN0cmluZyBjb250ZW50IGFuZCBwcm9jZXNzIHRvIGRvIHRoZSBhZGVxdWF0ZSBzdWJzdGl0dXRpb25zLiBbNjddIFJlZmVyZW5jZSA6Oj0gRW50aXR5UmVmIHwgQ2hhclJlZiBbNjldIFBFUmVmZXJlbmNlIDo6PSAnJScgTmFtZSAnOyc8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBUYWtlcyBhIGVudGl0eSBzdHJpbmcgY29udGVudCBhbmQgcHJvY2VzcyB0byBkbyB0aGUgYWRlcXVhdGUgc3Vic3RpdHV0aW9ucy4gWzY3XSBSZWZlcmVuY2UgOjo9IEVudGl0eVJlZiB8IENoYXJSZWYgWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJyUnIE5hbWUgJzsnPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjQ2MCw3ICsyMzY0LDcgQEAKIDxhIG5hbWU9InhtbFN0cmluZ0xlbkRlY29kZUVudGl0aWVzIj48L2E+eG1sU3RyaW5nTGVuRGVjb2RlRW50aXRpZXMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl4bWxTdHJpbmdMZW5EZWNvZGVFbnRpdGllcwkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogc3RyLCA8YnI+CQkJCQkJIGludCBsZW4sIDxicj4JCQkJCQkgaW50IHdoYXQsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiBlbmQsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiBlbmQyLCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gZW5kMyk8YnI+CiA8L3ByZT4KLTxwPlRha2VzIGEgZW50aXR5IHN0cmluZyBjb250ZW50IGFuZCBwcm9jZXNzIHRvIGRvIHRoZSBhZGVxdWF0ZSBzdWJzdGl0dXRpb25zLiBbNjddIFJlZmVyZW5jZSA6Oj0gRW50aXR5UmVmIHwgQ2hhclJlZiBbNjldIFBFUmVmZXJlbmNlIDo6PSAnJScgTmFtZSAnOyc8L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLiBUYWtlcyBhIGVudGl0eSBzdHJpbmcgY29udGVudCBhbmQgcHJvY2VzcyB0byBkbyB0aGUgYWRlcXVhdGUgc3Vic3RpdHV0aW9ucy4gWzY3XSBSZWZlcmVuY2UgOjo9IEVudGl0eVJlZiB8IENoYXJSZWYgWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJyUnIE5hbWUgJzsnPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjUwNiw3ICsyNDEwLDcgQEAKIDxhIG5hbWU9InhtbFN3aXRjaEVuY29kaW5nIj48L2E+eG1sU3dpdGNoRW5jb2RpbmcgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxTd2l0Y2hFbmNvZGluZwkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlckN0eHRQdHIiPnhtbFBhcnNlckN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+IGVuYyk8YnI+CiA8L3ByZT4KLTxwPmNoYW5nZSB0aGUgaW5wdXQgZnVuY3Rpb25zIHdoZW4gZGlzY292ZXJpbmcgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBvZiBhIGdpdmVuIGVudGl0eS48L3A+Cis8cD5Vc2UgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5IGVudW0gdG8gZGVjb2RlIGlucHV0IGRhdGEuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW5mb3JjZSB0aGUgZW5jb2Rpbmcgb2YgY2h1bmtzIHBhc3NlZCB0byA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlQ2h1bmsiPnhtbFBhcnNlQ2h1bms8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI1MzEsNyArMjQzNSw3IEBACiA8YSBuYW1lPSJ4bWxTd2l0Y2hJbnB1dEVuY29kaW5nIj48L2E+eG1sU3dpdGNoSW5wdXRFbmNvZGluZyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFN3aXRjaElucHV0RW5jb2RpbmcJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPiBpbnB1dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPiBoYW5kbGVyKTxicj4KIDwvcHJlPgotPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sU3dpdGNoVG9FbmNvZGluZyI+eG1sU3dpdGNoVG9FbmNvZGluZzwvYT4gY2hhbmdlIHRoZSBpbnB1dCBmdW5jdGlvbnMgd2hlbiBkaXNjb3ZlcmluZyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIGEgZ2l2ZW4gZW50aXR5LjwvcD4KKzxwPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuIFVzZSBlbmNvZGluZyBoYW5kbGVyIHRvIGRlY29kZSBpbnB1dCBkYXRhLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI1NjAsNyArMjQ2NCw3IEBACiA8YSBuYW1lPSJ4bWxTd2l0Y2hUb0VuY29kaW5nIj48L2E+eG1sU3dpdGNoVG9FbmNvZGluZyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFN3aXRjaFRvRW5jb2RpbmcJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJDdHh0UHRyIj54bWxQYXJzZXJDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHI8L2E+IGhhbmRsZXIpPGJyPgogPC9wcmU+Ci08cD5jaGFuZ2UgdGhlIGlucHV0IGZ1bmN0aW9ucyB3aGVuIGRpc2NvdmVyaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgYSBnaXZlbiBlbnRpdHkuPC9wPgorPHA+VXNlIGVuY29kaW5nIGhhbmRsZXIgdG8gZGVjb2RlIGlucHV0IGRhdGEuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW5mb3JjZSB0aGUgZW5jb2Rpbmcgb2YgY2h1bmtzIHBhc3NlZCB0byA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlQ2h1bmsiPnhtbFBhcnNlQ2h1bms8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDItdGhyZWFkcy5odG1sIGIvZG9jL2RldmhlbHAvbGlieG1sMi10aHJlYWRzLmh0bWwKaW5kZXggNGFiNTJkYy4uNmVmY2ViNyAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi10aHJlYWRzLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi10aHJlYWRzLmh0bWwKQEAgLTI2LDExICsyNiwxMCBAQAogdHlwZWRlZiA8YSBocmVmPSJsaWJ4bWwyLXRocmVhZHMuaHRtbCN4bWxNdXRleCI+eG1sTXV0ZXg8L2E+ICogPGEgaHJlZj0iI3htbE11dGV4UHRyIj54bWxNdXRleFB0cjwvYT47CiB0eXBlZGVmIHN0cnVjdCBfeG1sUk11dGV4IDxhIGhyZWY9IiN4bWxSTXV0ZXgiPnhtbFJNdXRleDwvYT47CiB0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItdGhyZWFkcy5odG1sI3htbFJNdXRleCI+eG1sUk11dGV4PC9hPiAqIDxhIGhyZWY9IiN4bWxSTXV0ZXhQdHIiPnhtbFJNdXRleFB0cjwvYT47CitpbnQJPGEgaHJlZj0iI3htbENoZWNrVGhyZWFkTG9jYWxTdG9yYWdlIj54bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZTwvYT4JKHZvaWQpOwogdm9pZAk8YSBocmVmPSIjeG1sQ2xlYW51cFRocmVhZHMiPnhtbENsZWFudXBUaHJlYWRzPC9hPgkJKHZvaWQpOwotaW50CTxhIGhyZWY9IiN4bWxEbGxNYWluIj54bWxEbGxNYWluPC9hPgkJCSh2b2lkICogaGluc3RETEwsIDxicj4JCQkJCSB1bnNpZ25lZCBsb25nIGZkd1JlYXNvbiwgPGJyPgkJCQkJIHZvaWQgKiBscHZSZXNlcnZlZCk7CiB2b2lkCTxhIGhyZWY9IiN4bWxGcmVlTXV0ZXgiPnhtbEZyZWVNdXRleDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi10aHJlYWRzLmh0bWwjeG1sTXV0ZXhQdHIiPnhtbE11dGV4UHRyPC9hPiB0b2spOwogdm9pZAk8YSBocmVmPSIjeG1sRnJlZVJNdXRleCI+eG1sRnJlZVJNdXRleDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi10aHJlYWRzLmh0bWwjeG1sUk11dGV4UHRyIj54bWxSTXV0ZXhQdHI8L2E+IHRvayk7Ci08YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxHbG9iYWxTdGF0ZVB0ciI+eG1sR2xvYmFsU3RhdGVQdHI8L2E+CTxhIGhyZWY9IiN4bWxHZXRHbG9iYWxTdGF0ZSI+eG1sR2V0R2xvYmFsU3RhdGU8L2E+CSh2b2lkKTsKIGludAk8YSBocmVmPSIjeG1sR2V0VGhyZWFkSWQiPnhtbEdldFRocmVhZElkPC9hPgkJCSh2b2lkKTsKIHZvaWQJPGEgaHJlZj0iI3htbEluaXRUaHJlYWRzIj54bWxJbml0VGhyZWFkczwvYT4JCQkodm9pZCk7CiBpbnQJPGEgaHJlZj0iI3htbElzTWFpblRocmVhZCI+eG1sSXNNYWluVGhyZWFkPC9hPgkJCSh2b2lkKTsKQEAgLTg2LDM5ICs4NSwyNSBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KLTxhIG5hbWU9InhtbENsZWFudXBUaHJlYWRzIj48L2E+eG1sQ2xlYW51cFRocmVhZHMgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sQ2xlYW51cFRocmVhZHMJCSh2b2lkKTxicj4KKzxhIG5hbWU9InhtbENoZWNrVGhyZWFkTG9jYWxTdG9yYWdlIj48L2E+eG1sQ2hlY2tUaHJlYWRMb2NhbFN0b3JhZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZQkodm9pZCk8YnI+CiA8L3ByZT4KLTxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDbGVhbnVwUGFyc2VyIj54bWxDbGVhbnVwUGFyc2VyPC9hPiB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4gPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDbGVhbnVwUGFyc2VyIj54bWxDbGVhbnVwUGFyc2VyPC9hPiBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24ndCBoYXZlIGNhbGwgY2xlYW51cCBmdW5jdGlvbnMgYXQgYWxsLiB4bWxDbGVhbnVwVGhyZWFkcygpIGlzIHVzZWQgdG8gdG8gY2xlYW51cCBhbGwgdGhlIHRocmVhZCByZWxhdGVkIGRhdGEgb2YgdGhlIGxpYnhtbDIgbGlicmFyeSBvbmNlIHByb2Nlc3NpbmcgaGFzIGVuZGVkLiBXQVJOSU5HOiBpZiB5b3VyIGFwcGxpY2F0aW9uIGlzIG11bHRpdGhyZWFkZWQgb3IgaGFzIHBsdWdpbiBzdXBwb3J0IGNhbGxpbmcgdGhpcyBtYXkgY3Jhc2ggdGhlIGFwcGxpY2F0aW9uIGlmIGFub3RoZXIgdGhyZWFkIG9yIGEgcGx1Z2luIGlzIHN0aWxsIHVzaW5nIGxpYnhtbDIuIEl0J3Mgc29tZXRpbWVzIHZlcnkgaGFyZCB0byBndWVzcyBpZiBsaWJ4bWwyIGlzIGluIHVzZSBpbiB0aGUgYXBwbGljYXRpb24sIHNvbWUgbGlicmFyaWVzIG9yIHBsdWdpbnMgbWF5IHVzZSBpdCB3aXRob3V0IG5vdGljZS4gSW4gY2FzZSBvZiBkb3VidCBhYnN0YWluIGZyb20gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9yIGRvIGl0IGp1c3QgYmVmb3JlIGNhbGxpbmcgZXhpdCgpIHRvIGF2b2lkIGxlYWsgcmVwb3J0cyBmcm9tIHZhbGdyaW5kICE8L3A+Cis8cD5DaGVjayB3aGV0aGVyIHRocmVhZC1sb2NhbCBzdG9yYWdlIGNvdWxkIGJlIGFsbG9jYXRlZC4gSW4gY3Jvc3MtcGxhdGZvcm0gY29kZSBydW5uaW5nIGluIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnRzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25jZSBpbiBlYWNoIHRocmVhZCBiZWZvcmUgY2FsbGluZyBvdGhlciBsaWJyYXJ5IGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhhdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSB3YXMgYWxsb2NhdGVkIHByb3Blcmx5LjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT48dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjAgb24gc3VjY2VzcyBvciAtMSBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gQSBmYWlsZWQgYWxsb2NhdGlvbiBzaWduYWxzIGEgdHlwaWNhbGx5IGZhdGFsIGFuZCBpcnJlY292ZXJhYmxlIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9uLiBEb24ndCBjYWxsIGFueSBsaWJyYXJ5IGZ1bmN0aW9ucyBpbiB0aGlzIGNhc2UuIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgaWYgdGhlIGxpYnJhcnkgaXMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZS4gVGhpcyBmdW5jdGlvbiBuZXZlciBmYWlscyBmb3IgdGhlICJtYWluIiB0aHJlYWQgd2hpY2ggaXMgdGhlIGZpcnN0IHRocmVhZCBjYWxsaW5nIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4uIEF2YWlsYWJsZSBzaW5jZSB2Mi4xMi4wLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgogPC9kaXY+CiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgotPGEgbmFtZT0ieG1sRGxsTWFpbiI+PC9hPnhtbERsbE1haW4gKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxEbGxNYWluCQkJKHZvaWQgKiBoaW5zdERMTCwgPGJyPgkJCQkJIHVuc2lnbmVkIGxvbmcgZmR3UmVhc29uLCA8YnI+CQkJCQkgdm9pZCAqIGxwdlJlc2VydmVkKTxicj4KKzxhIG5hbWU9InhtbENsZWFudXBUaHJlYWRzIj48L2E+eG1sQ2xlYW51cFRocmVhZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sQ2xlYW51cFRocmVhZHMJCSh2b2lkKTxicj4KIDwvcHJlPgotPHA+PC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KLTxjb2wgYWxpZ249ImxlZnQiPgotPHRib2R5PgotPHRyPgotPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGluc3RETEw8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5mZHdSZWFzb248L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5scHZSZXNlcnZlZDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KKzxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbid0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuPC9wPgogPC9kaXY+CiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgpAQCAtMTI2LDcgKzExMSw3IEBACiA8YSBuYW1lPSJ4bWxGcmVlTXV0ZXgiPjwvYT54bWxGcmVlTXV0ZXggKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sRnJlZU11dGV4CQkJKDxhIGhyZWY9ImxpYnhtbDItdGhyZWFkcy5odG1sI3htbE11dGV4UHRyIj54bWxNdXRleFB0cjwvYT4gdG9rKTxicj4KIDwvcHJlPgotPHA+eG1sRnJlZU11dGV4KCkgaXMgdXNlZCB0byByZWNsYWltIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBsaWJ4bWwyIHRva2VuIHN0cnVjdC48L3A+Cis8cD5GcmVlIGEgbXV0ZXguPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5Pjx0cj4KQEAgLTE1MywyNSArMTM4LDEwIEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgotPGEgbmFtZT0ieG1sR2V0R2xvYmFsU3RhdGUiPjwvYT54bWxHZXRHbG9iYWxTdGF0ZSAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sR2xvYmFsU3RhdGVQdHIiPnhtbEdsb2JhbFN0YXRlUHRyPC9hPgl4bWxHZXRHbG9iYWxTdGF0ZQkodm9pZCk8YnI+Ci08L3ByZT4KLTxwPnhtbEdldEdsb2JhbFN0YXRlKCkgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgdGhyZWFkLjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Ci08Y29sIGFsaWduPSJsZWZ0Ij4KLTx0Ym9keT48dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSB0aHJlYWQgZ2xvYmFsIHN0YXRlIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvcjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgogPGEgbmFtZT0ieG1sR2V0VGhyZWFkSWQiPjwvYT54bWxHZXRUaHJlYWRJZCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbEdldFRocmVhZElkCQkJKHZvaWQpPGJyPgogPC9wcmU+Ci08cD54bWxHZXRUaHJlYWRJZCgpIGZpbmQgdGhlIGN1cnJlbnQgdGhyZWFkIElEIG51bWJlciBOb3RlIHRoYXQgdGhpcyBpcyBsaWtlbHkgdG8gYmUgYnJva2VuIG9uIHNvbWUgcGxhdGZvcm1zIHVzaW5nIHB0aHJlYWRzIGFzIHRoZSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgbWFuZGF0ZSBwdGhyZWFkX3QgdG8gYmUgYW4gaW50ZWdlciB0eXBlPC9wPgorPHA+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuIHhtbEdldFRocmVhZElkKCkgZmluZCB0aGUgY3VycmVudCB0aHJlYWQgSUQgbnVtYmVyIE5vdGUgdGhhdCB0aGlzIGlzIGxpa2VseSB0byBiZSBicm9rZW4gb24gc29tZSBwbGF0Zm9ybXMgdXNpbmcgcHRocmVhZHMgYXMgdGhlIHNwZWNpZmljYXRpb24gZG9lc24ndCBtYW5kYXRlIHB0aHJlYWRfdCB0byBiZSBhbiBpbnRlZ2VyIHR5cGU8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgpAQCAtMTg2LDcgKzE1Niw3IEBACiA8YSBuYW1lPSJ4bWxJbml0VGhyZWFkcyI+PC9hPnhtbEluaXRUaHJlYWRzICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEluaXRUaHJlYWRzCQkJKHZvaWQpPGJyPgogPC9wcmU+Ci08cD5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4gdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4geG1sSW5pdFRocmVhZHMoKSBpcyB1c2VkIHRvIHRvIGluaXRpYWxpemUgYWxsIHRoZSB0aHJlYWQgcmVsYXRlZCBkYXRhIG9mIHRoZSBsaWJ4bWwyIGxpYnJhcnkuPC9wPgorPHA+REVQUkVDQVRFRDogQWxpYXMgZm9yIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4uPC9wPgogPC9kaXY+CiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgpAQCAtMTk0LDcgKzE2NCw3IEBACiA8YSBuYW1lPSJ4bWxJc01haW5UaHJlYWQiPjwvYT54bWxJc01haW5UaHJlYWQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxJc01haW5UaHJlYWQJCQkodm9pZCk8YnI+CiA8L3ByZT4KLTxwPnhtbElzTWFpblRocmVhZCgpIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSBtYWluIHRocmVhZC48L3A+Cis8cD5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCB0aHJlYWQgaXMgdGhlIG1haW4gdGhyZWFkLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sCmluZGV4IDYxNWFiZDcuLjYxZDZhYTcgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sCkBAIC0yNCw3ICsyNCw2IEBACiA8aDI+U3lub3BzaXM8L2gyPgogPHByZSBjbGFzcz0ic3lub3BzaXMiPiNkZWZpbmUgPGEgaHJlZj0iI0JBU0VfQlVGRkVSX1NJWkUiPkJBU0VfQlVGRkVSX1NJWkU8L2E+OwogI2RlZmluZSA8YSBocmVmPSIjTElCWE1MMl9ORVdfQlVGRkVSIj5MSUJYTUwyX05FV19CVUZGRVI8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjWE1MX0RPQ0JfRE9DVU1FTlRfTk9ERSI+WE1MX0RPQ0JfRE9DVU1FTlRfTk9ERTwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfR0VUX0NPTlRFTlQiPlhNTF9HRVRfQ09OVEVOVDwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfR0VUX0xJTkUiPlhNTF9HRVRfTElORTwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNYTUxfTE9DQUxfTkFNRVNQQUNFIj5YTUxfTE9DQUxfTkFNRVNQQUNFPC9hPjsKQEAgLTEzNSw2ICsxMzQsOCBAQAogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRE9NV3JhcEN0eHRQdHIiPnhtbERPTVdyYXBDdHh0UHRyPC9hPgk8YSBocmVmPSIjeG1sRE9NV3JhcE5ld0N0eHQiPnhtbERPTVdyYXBOZXdDdHh0PC9hPgkodm9pZCk7CiBpbnQJPGEgaHJlZj0iI3htbERPTVdyYXBSZWNvbmNpbGVOYW1lc3BhY2VzIj54bWxET01XcmFwUmVjb25jaWxlTmFtZXNwYWNlczwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERPTVdyYXBDdHh0UHRyIj54bWxET01XcmFwQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGVsZW0sIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk7CiBpbnQJPGEgaHJlZj0iI3htbERPTVdyYXBSZW1vdmVOb2RlIj54bWxET01XcmFwUmVtb3ZlTm9kZTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxET01XcmFwQ3R4dFB0ciI+eG1sRE9NV3JhcEN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gbm9kZSwgPGJyPgkJCQkJIGludCBvcHRpb25zKTsKKzxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0Ij54bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPnhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk7Cit0eXBlZGVmIHZvaWQgPGEgaHJlZj0iI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG5vZGUpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4JPGEgaHJlZj0iI3htbERvY0NvcHlOb2RlIj54bWxEb2NDb3B5Tm9kZTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBub2RlLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGRvYywgPGJyPgkJCQkJIGludCBleHRlbmRlZCk7CiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgk8YSBocmVmPSIjeG1sRG9jQ29weU5vZGVMaXN0Ij54bWxEb2NDb3B5Tm9kZUxpc3Q8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gbm9kZSk7CiBpbnQJPGEgaHJlZj0iI3htbERvY0R1bXAiPnhtbERvY0R1bXA8L2E+CQkJKEZJTEUgKiBmLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGN1cik7CkBAIC0yMTksNiArMjIwLDggQEAKIHZvaWQJPGEgaHJlZj0iI3htbE5vZGVTZXRTcGFjZVByZXNlcnZlIj54bWxOb2RlU2V0U3BhY2VQcmVzZXJ2ZTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjdXIsIDxicj4JCQkJCSBpbnQgdmFsKTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CTxhIGhyZWY9IiN4bWxQcmV2aW91c0VsZW1lbnRTaWJsaW5nIj54bWxQcmV2aW91c0VsZW1lbnRTaWJsaW5nPC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gbm9kZSk7CiBpbnQJPGEgaHJlZj0iI3htbFJlY29uY2lsaWF0ZU5zIj54bWxSZWNvbmNpbGlhdGVOczwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gdHJlZSk7Cis8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxSZWdpc3Rlck5vZGVGdW5jIj54bWxSZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCI+eG1sUmVnaXN0ZXJOb2RlRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+IGZ1bmMpOwordHlwZWRlZiB2b2lkIDxhIGhyZWY9IiN4bWxSZWdpc3Rlck5vZGVGdW5jIj54bWxSZWdpc3Rlck5vZGVGdW5jPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG5vZGUpOwogaW50CTxhIGhyZWY9IiN4bWxSZW1vdmVQcm9wIj54bWxSZW1vdmVQcm9wPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxBdHRyUHRyIj54bWxBdHRyUHRyPC9hPiBjdXIpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4JPGEgaHJlZj0iI3htbFJlcGxhY2VOb2RlIj54bWxSZXBsYWNlTm9kZTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBvbGQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjdXIpOwogaW50CTxhIGhyZWY9IiN4bWxTYXZlRmlsZSI+eG1sU2F2ZUZpbGU8L2E+CQkJKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBjdXIpOwpAQCAtMjQzLDYgKzI0NiwxMCBAQAogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4JPGEgaHJlZj0iI3htbFN0cmluZ0xlbkdldE5vZGVMaXN0Ij54bWxTdHJpbmdMZW5HZXROb2RlTGlzdDwvYT4JKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvYyI+eG1sRG9jPC9hPiAqIGRvYywgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiB2YWx1ZSwgPGJyPgkJCQkJIGludCBsZW4pOwogaW50CTxhIGhyZWY9IiN4bWxUZXh0Q29uY2F0Ij54bWxUZXh0Q29uY2F0PC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBub2RlLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGNvbnRlbnQsIDxicj4JCQkJCSBpbnQgbGVuKTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CTxhIGhyZWY9IiN4bWxUZXh0TWVyZ2UiPnhtbFRleHRNZXJnZTwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBmaXJzdCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IHNlY29uZCk7Cis8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIj54bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUiPnhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lPC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSI+eG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZTwvYT4gdik7CitpbnQJPGEgaHJlZj0iI3htbFRockRlZkRlZmF1bHRCdWZmZXJTaXplIj54bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZTwvYT4JKGludCB2KTsKKzxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0Ij54bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPnhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk7Cis8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxSZWdpc3Rlck5vZGVGdW5jIj54bWxSZWdpc3Rlck5vZGVGdW5jPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdCI+eG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiPnhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2E+IGZ1bmMpOwogdm9pZAk8YSBocmVmPSIjeG1sVW5saW5rTm9kZSI+eG1sVW5saW5rTm9kZTwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyKTsKIGludAk8YSBocmVmPSIjeG1sVW5zZXROc1Byb3AiPnhtbFVuc2V0TnNQcm9wPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBub2RlLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTnNQdHIiPnhtbE5zUHRyPC9hPiBucywgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTsKIGludAk8YSBocmVmPSIjeG1sVW5zZXRQcm9wIj54bWxVbnNldFByb3A8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG5vZGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk7CkBAIC0yNjksMTUgKzI3Niw3IEBACiA8YSBuYW1lPSJMSUJYTUwyX05FV19CVUZGRVIiPk1hY3JvIDwvYT5MSUJYTUwyX05FV19CVUZGRVI8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI0xJQlhNTDJfTkVXX0JVRkZFUiI+TElCWE1MMl9ORVdfQlVGRkVSPC9hPjsKIDwvcHJlPgotPHA+TWFjcm8gdXNlZCB0byBleHByZXNzIHRoYXQgdGhlIEFQSSB1c2UgdGhlIG5ldyBidWZmZXJzIGZvciA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlciI+eG1sUGFyc2VySW5wdXRCdWZmZXI8L2E+IGFuZCB4bWxPdXRwdXRCdWZmZXIuIFRoZSBjaGFuZ2Ugd2FzIGludHJvZHVjZWQgaW4gMi45LjAuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0iWE1MX0RPQ0JfRE9DVU1FTlRfTk9ERSI+TWFjcm8gPC9hPlhNTF9ET0NCX0RPQ1VNRU5UX05PREU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTF9ET0NCX0RPQ1VNRU5UX05PREUiPlhNTF9ET0NCX0RPQ1VNRU5UX05PREU8L2E+OwotPC9wcmU+Ci08cD48L3A+Cis8cD5NYWNybyB1c2VkIHRvIGV4cHJlc3MgdGhhdCB0aGUgQVBJIHVzZSB0aGUgbmV3IGJ1ZmZlcnMgZm9yIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlcjwvYT4gYW5kIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlciI+eG1sT3V0cHV0QnVmZmVyPC9hPi4gVGhlIGNoYW5nZSB3YXMgaW50cm9kdWNlZCBpbiAyLjkuMC48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC00NjgsNyArNDY3LDcgQEAKIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbnVtIDxhIGhyZWY9IiN4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIj54bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lPC9hPiB7CiAgICAgPGEgbmFtZT0iWE1MX0JVRkZFUl9BTExPQ19ET1VCTEVJVCI+WE1MX0JVRkZFUl9BTExPQ19ET1VCTEVJVDwvYT4gPSAxIC8qIGRvdWJsZSBlYWNoIHRpbWUgb25lIG5lZWQgdG8gZ3JvdyAqLwogICAgIDxhIG5hbWU9IlhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QiPlhNTF9CVUZGRVJfQUxMT0NfRVhBQ1Q8L2E+ID0gMiAvKiBncm93IG9ubHkgdG8gdGhlIG1pbmltYWwgc2l6ZSAqLwotICAgIDxhIG5hbWU9IlhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFIj5YTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRTwvYT4gPSAzIC8qIGltbXV0YWJsZSBidWZmZXIgKi8KKyAgICA8YSBuYW1lPSJYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSI+WE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEU8L2E+ID0gMyAvKiBpbW11dGFibGUgYnVmZmVyLCBkZXByZWNhdGVkICovCiAgICAgPGEgbmFtZT0iWE1MX0JVRkZFUl9BTExPQ19JTyI+WE1MX0JVRkZFUl9BTExPQ19JTzwvYT4gPSA0IC8qIHNwZWNpYWwgYWxsb2NhdGlvbiBzY2hlbWUgdXNlZCBmb3IgSS9PICovCiAgICAgPGEgbmFtZT0iWE1MX0JVRkZFUl9BTExPQ19IWUJSSUQiPlhNTF9CVUZGRVJfQUxMT0NfSFlCUklEPC9hPiA9IDUgLyogZXhhY3QgdXAgdG8gYSB0aHJlc2hvbGQsIGFuZCBkb3VibGVpdCB0aGVyZWFmdGVyICovCiAgICAgPGEgbmFtZT0iWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEIj5YTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQ8L2E+ID0gNiAvKiAgbGltaXQgdGhlIHVwcGVyIHNpemUgb2YgdGhlIGJ1ZmZlciAqLwpAQCAtNTI1LDExICs1MjQsMTEgQEAKICAgICBzdHJ1Y3QgX3htbER0ZCAqCWV4dFN1YnNldAk6IHRoZSBkb2N1bWVudCBleHRlcm5hbCBzdWJzZXQKICAgICBzdHJ1Y3QgX3htbE5zICoJb2xkTnMJOiBHbG9iYWwgbmFtZXNwYWNlLCB0aGUgb2xkIHdheQogICAgIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl2ZXJzaW9uCTogdGhlIFhNTCB2ZXJzaW9uIHN0cmluZwotICAgIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgllbmNvZGluZwk6IGV4dGVybmFsIGluaXRpYWwgZW5jb2RpbmcsIGlmIGFueQorICAgIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgllbmNvZGluZwk6IGFjdHVhbCBlbmNvZGluZywgaWYgYW55CiAgICAgdm9pZCAqCWlkcwk6IEhhc2ggdGFibGUgZm9yIElEIGF0dHJpYnV0ZXMgaWYgYW55CiAgICAgdm9pZCAqCXJlZnMJOiBIYXNoIHRhYmxlIGZvciBJRFJFRnMgYXR0cmlidXRlcyBpZiBhbnkKICAgICBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJVVJMCTogVGhlIFVSSSBmb3IgdGhhdCBkb2N1bWVudAotICAgIGludAljaGFyc2V0CTogSW50ZXJuYWwgZmxhZyBmb3IgY2hhcnNldCBoYW5kbGluZywgYWN0dWFsbHkgYW4gPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPgorICAgIGludAljaGFyc2V0CTogdW51c2VkCiAgICAgc3RydWN0IF94bWxEaWN0ICoJZGljdAk6IGRpY3QgdXNlZCB0byBhbGxvY2F0ZSBuYW1lcyBvciBOVUxMCiAgICAgdm9pZCAqCXBzdmkJOiBmb3IgdHlwZS9QU1ZJIGluZm9ybWF0aW9uCiAgICAgaW50CXBhcnNlRmxhZ3MJOiBzZXQgb2YgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT4gdXNlZCB0byBwYXJzZSB0aGUgZG9jdW1lbnQKQEAgLTc0NCw3ICs3NDMsOCBAQAogICAgIHN0cnVjdCBfeG1sRW50aXR5ICoJbmV4dGUJOiB1bnVzZWQKICAgICBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJVVJJCTogdGhlIGZ1bGwgVVJJIGFzIGNvbXB1dGVkCiAgICAgaW50CW93bmVyCTogZG9lcyB0aGUgZW50aXR5IG93biB0aGUgY2hpbGRyZW5zCi0gICAgaW50CWNoZWNrZWQJOiB3YXMgdGhlIGVudGl0eSBjb250ZW50IGNoZWNrZWQgdGhpcyBpcyBhbHNvIHVzZWQgdG8gY291bnQgZW50aXRpZXMgKgorICAgIGludAlmbGFncwk6IHZhcmlvdXMgZmxhZ3MKKyAgICB1bnNpZ25lZCBsb25nCWV4cGFuZGVkU2l6ZQk6IGV4cGFuZGVkIHNpemUKIH0geG1sRW50aXR5OwogPC9wcmU+CiA8cD48L3A+CkBAIC05NjAsNyArOTYwLDcgQEAKICAgICBpbnQgKglzcGFjZVRhYgk6IGFycmF5IG9mIHNwYWNlIGluZm9zCiAgICAgaW50CWRlcHRoCTogdG8gcHJldmVudCBlbnRpdHkgc3Vic3RpdHV0aW9uIGxvb3BzCiAgICAgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRQdHIiPnhtbFBhcnNlcklucHV0UHRyPC9hPgllbnRpdHkJOiB1c2VkIHRvIGNoZWNrIGVudGl0aWVzIGJvdW5kYXJpZXMKLSAgICBpbnQJY2hhcnNldAk6IGVuY29kaW5nIG9mIHRoZSBpbi1tZW1vcnkgY29udGVudCBhY3R1YWxseSBhbiA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+CisgICAgaW50CWNoYXJzZXQJOiB1bnVzZWQKICAgICBpbnQJbm9kZWxlbgk6IFRob3NlIHR3byBmaWVsZHMgYXJlIHRoZXJlIHRvCiAgICAgaW50CW5vZGVtZW0JOiBTcGVlZCB1cCBsYXJnZSBub2RlIHBhcnNpbmcKICAgICBpbnQJcGVkYW50aWMJOiBzaWduYWwgcGVkYW50aWMgd2FybmluZ3MKQEAgLTk4MSw3ICs5ODEsNyBAQAogICAgIGludAluc05yCTogdGhlIG51bWJlciBvZiBpbmhlcml0ZWQgbmFtZXNwYWNlcwogICAgIGludAluc01heAk6IHRoZSBzaXplIG9mIHRoZSBhcnJheXMKICAgICBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogKgluc1RhYgk6IHRoZSBhcnJheSBvZiBwcmVmaXgvbmFtZXNwYWNlIG5hbWUKLSAgICBpbnQgKglhdHRhbGxvY3MJOiB3aGljaCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB3ZXJlIGFsbG9jYXRlZAorICAgIHVuc2lnbmVkICoJYXR0YWxsb2NzCTogd2hpY2ggPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gd2VyZSBhbGxvY2F0ZWQKICAgICA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFN0YXJ0VGFnIj54bWxTdGFydFRhZzwvYT4gKglwdXNoVGFiCTogYXJyYXkgb2YgZGF0YSBmb3IgcHVzaAogICAgIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPglhdHRzRGVmYXVsdAk6IGRlZmF1bHRlZCBhdHRyaWJ1dGVzIGlmIGFueQogICAgIDxhIGhyZWY9ImxpYnhtbDItaGFzaC5odG1sI3htbEhhc2hUYWJsZVB0ciI+eG1sSGFzaFRhYmxlUHRyPC9hPglhdHRzU3BlY2lhbAk6IG5vbi1DREFUQSBhdHRyaWJ1dGVzIGlmIGFueQpAQCAtOTk0LDcgKzk5NCw3IEBACiAgICAgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQXR0clB0ciI+eG1sQXR0clB0cjwvYT4JZnJlZUF0dHJzCTogKiB0aGUgY29tcGxldGUgZXJyb3IgaW5mb3JtYXRpb24gZm9yIHRoZSBsYXN0IGVycm9yLiAqCiAgICAgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEVycm9yIj54bWxFcnJvcjwvYT4JbGFzdEVycm9yCiAgICAgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJNb2RlIj54bWxQYXJzZXJNb2RlPC9hPglwYXJzZU1vZGUJOiB0aGUgcGFyc2VyIG1vZGUKLSAgICB1bnNpZ25lZCBsb25nCW5iZW50aXRpZXMJOiBudW1iZXIgb2YgZW50aXRpZXMgcmVmZXJlbmNlcworICAgIHVuc2lnbmVkIGxvbmcJbmJlbnRpdGllcwk6IHVudXNlZAogICAgIHVuc2lnbmVkIGxvbmcJc2l6ZWVudGl0aWVzCTogc2l6ZSBvZiBwYXJzZWQgZW50aXRpZXMgZm9yIHVzZSBieSBIVE1MIG5vbi1yZWN1cnNpdmUgcGFyc2VyCiAgICAgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mbyI+eG1sUGFyc2VyTm9kZUluZm88L2E+ICoJbm9kZUluZm8JOiBDdXJyZW50IE5vZGVJbmZvCiAgICAgaW50CW5vZGVJbmZvTnIJOiBEZXB0aCBvZiB0aGUgcGFyc2luZyBzdGFjawpAQCAtMTAwMiw2ICsxMDAyLDEzIEBACiAgICAgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mbyI+eG1sUGFyc2VyTm9kZUluZm88L2E+ICoJbm9kZUluZm9UYWIJOiBhcnJheSBvZiBub2RlSW5mb3MKICAgICBpbnQJaW5wdXRfaWQJOiB3ZSBuZWVkIHRvIGxhYmVsIGlucHV0cwogICAgIHVuc2lnbmVkIGxvbmcJc2l6ZWVudGNvcHkJOiB2b2x1bWUgb2YgZW50aXR5IGNvcHkKKyAgICBpbnQJZW5kQ2hlY2tTdGF0ZQk6IHF1b3RlIHN0YXRlIGZvciBwdXNoIHBhcnNlcgorICAgIHVuc2lnbmVkIHNob3J0CW5iRXJyb3JzCTogbnVtYmVyIG9mIGVycm9ycworICAgIHVuc2lnbmVkIHNob3J0CW5iV2FybmluZ3MJOiBudW1iZXIgb2Ygd2FybmluZ3MKKyAgICB1bnNpZ25lZAltYXhBbXBsCTogbWF4aW11bSBhbXBsaWZpY2F0aW9uIGZhY3RvcgorICAgIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyTnNEYXRhIj54bWxQYXJzZXJOc0RhdGE8L2E+ICoJbnNkYgk6IG5hbWVzcGFjZSBkYXRhYmFzZQorICAgIHVuc2lnbmVkCWF0dHJIYXNoTWF4CTogYWxsb2NhdGVkIHNpemUKKyAgICA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEF0dHJIYXNoQnVja2V0Ij54bWxBdHRySGFzaEJ1Y2tldDwvYT4gKglhdHRySGFzaAk6IGF0dHRyaWJ1dGUgaGFzaCB0YWJsZQogfSB4bWxQYXJzZXJDdHh0OwogPC9wcmU+CiA8cD48L3A+CkBAIC0xMDI3LDEzICsxMDM0LDE1IEBACiAgICAgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCWVuZAk6IGVuZCBvZiB0aGUgYXJyYXkgdG8gcGFyc2UKICAgICBpbnQJbGVuZ3RoCTogbGVuZ3RoIGlmIGtub3duCiAgICAgaW50CWxpbmUJOiBDdXJyZW50IGxpbmUKLSAgICBpbnQJY29sCTogKiBOT1RFOiBjb25zdW1lZCBpcyBvbmx5IHRlc3RlZCBmb3IgZXF1YWxpdHkgaW4gdGhlIHBhcnNlciBjb2RlLCAqCisgICAgaW50CWNvbAk6IEN1cnJlbnQgY29sdW1uCiAgICAgdW5zaWduZWQgbG9uZwljb25zdW1lZAk6IEhvdyBtYW55IHhtbENoYXJzIGFscmVhZHkgY29uc3VtZWQKICAgICA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlcklucHV0RGVhbGxvY2F0ZSI+eG1sUGFyc2VySW5wdXREZWFsbG9jYXRlPC9hPglmcmVlCTogZnVuY3Rpb24gdG8gZGVhbGxvY2F0ZSB0aGUgYmFzZQotICAgIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgllbmNvZGluZwk6IHRoZSBlbmNvZGluZyBzdHJpbmcgZm9yIGVudGl0eQorICAgIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgllbmNvZGluZwk6IHVudXNlZAogICAgIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKgl2ZXJzaW9uCTogdGhlIHZlcnNpb24gc3RyaW5nIGZvciBlbnRpdHkKLSAgICBpbnQJc3RhbmRhbG9uZQk6IFdhcyB0aGF0IGVudGl0eSBtYXJrZWQgc3RhbmRhbG9uZQorICAgIGludAlmbGFncwk6IEZsYWdzCiAgICAgaW50CWlkCTogYW4gdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnRpdHkKKyAgICB1bnNpZ25lZCBsb25nCXBhcmVudENvbnN1bWVkCTogY29uc3VtZWQgYnl0ZXMgZnJvbSBwYXJlbnRzCisgICAgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRW50aXR5UHRyIj54bWxFbnRpdHlQdHI8L2E+CWVudGl0eQk6IGVudGl0eSwgaWYgYW55CiB9IHhtbFBhcnNlcklucHV0OwogPC9wcmU+CiA8cD48L3A+CkBAIC0xMjAwLDYgKzEyMDksMzYgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Cis8YSBuYW1lPSJ4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBub2RlKTxicj4KKzwvcHJlPgorPHA+U2lnbmF0dXJlIGZvciB0aGUgZGVyZWdpc3RyYXRpb24gY2FsbGJhY2sgb2YgYSBkaXNjYXJkZWQgbm9kZTwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT48dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5ub2RlPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoZSBjdXJyZW50IG5vZGU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFJlZ2lzdGVyTm9kZUZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbFJlZ2lzdGVyTm9kZUZ1bmM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sUmVnaXN0ZXJOb2RlRnVuYwkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG5vZGUpPGJyPgorPC9wcmU+Cis8cD5TaWduYXR1cmUgZm9yIHRoZSByZWdpc3RyYXRpb24gY2FsbGJhY2sgb2YgYSBjcmVhdGVkIG5vZGU8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+PHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bm9kZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgY3VycmVudCBub2RlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+CiA8YSBuYW1lPSJ4bWxBZGRDaGlsZCI+PC9hPnhtbEFkZENoaWxkICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgl4bWxBZGRDaGlsZAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IHBhcmVudCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGN1cik8YnI+CiA8L3ByZT4KQEAgLTEyMjgsNyArMTI2Nyw3IEBACiA8YSBuYW1lPSJ4bWxBZGRDaGlsZExpc3QiPjwvYT54bWxBZGRDaGlsZExpc3QgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CXhtbEFkZENoaWxkTGlzdAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IHBhcmVudCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGN1cik8YnI+CiA8L3ByZT4KLTxwPkFkZCBhIGxpc3Qgb2Ygbm9kZSBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZCBsaXN0IG9mIHRoZSBwYXJlbnQgbWVyZ2luZyBhZGphY2VudCBURVhUIG5vZGVzIChAY3VyIG1heSBiZSBmcmVlZCkgU2VlIHRoZSBub3RlIHJlZ2FyZGluZyBuYW1lc3BhY2VzIGluIHhtbEFkZENoaWxkLjwvcD4KKzxwPkFkZCBhIGxpc3Qgb2Ygbm9kZSBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZCBsaXN0IG9mIHRoZSBwYXJlbnQgbWVyZ2luZyBhZGphY2VudCBURVhUIG5vZGVzIChAY3VyIG1heSBiZSBmcmVlZCkgU2VlIHRoZSBub3RlIHJlZ2FyZGluZyBuYW1lc3BhY2VzIGluIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEFkZENoaWxkIj54bWxBZGRDaGlsZDwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTI1Myw3ICsxMjkyLDcgQEAKIDxhIG5hbWU9InhtbEFkZE5leHRTaWJsaW5nIj48L2E+eG1sQWRkTmV4dFNpYmxpbmcgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CXhtbEFkZE5leHRTaWJsaW5nCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjdXIsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBlbGVtKTxicj4KIDwvcHJlPgotPHA+QWRkIGEgbmV3IG5vZGUgQGVsZW0gYXMgdGhlIG5leHQgc2libGluZyBvZiBAY3VyIElmIHRoZSBuZXcgbm9kZSB3YXMgYWxyZWFkeSBpbnNlcnRlZCBpbiBhIGRvY3VtZW50IGl0IGlzIGZpcnN0IHVubGlua2VkIGZyb20gaXRzIGV4aXN0aW5nIGNvbnRleHQuIEFzIGEgcmVzdWx0IG9mIHRleHQgbWVyZ2luZyBAZWxlbSBtYXkgYmUgZnJlZWQuIElmIHRoZSBuZXcgbm9kZSBpcyBBVFRSSUJVVEUsIGl0IGlzIGFkZGVkIGludG8gcHJvcGVydGllcyBpbnN0ZWFkIG9mIGNoaWxkcmVuLiBJZiB0aGVyZSBpcyBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB3aXRoIGVxdWFsIG5hbWUsIGl0IGlzIGZpcnN0IGRlc3Ryb3llZC4gU2VlIHRoZSBub3RlIHJlZ2FyZGluZyBuYW1lc3BhY2VzIGluIHhtbEFkZENoaWxkLjwvcD4KKzxwPkFkZCBhIG5ldyBub2RlIEBlbGVtIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgQGN1ciBJZiB0aGUgbmV3IG5vZGUgd2FzIGFscmVhZHkgaW5zZXJ0ZWQgaW4gYSBkb2N1bWVudCBpdCBpcyBmaXJzdCB1bmxpbmtlZCBmcm9tIGl0cyBleGlzdGluZyBjb250ZXh0LiBBcyBhIHJlc3VsdCBvZiB0ZXh0IG1lcmdpbmcgQGVsZW0gbWF5IGJlIGZyZWVkLiBJZiB0aGUgbmV3IG5vZGUgaXMgQVRUUklCVVRFLCBpdCBpcyBhZGRlZCBpbnRvIHByb3BlcnRpZXMgaW5zdGVhZCBvZiBjaGlsZHJlbi4gSWYgdGhlcmUgaXMgYW4gPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gd2l0aCBlcXVhbCBuYW1lLCBpdCBpcyBmaXJzdCBkZXN0cm95ZWQuIFNlZSB0aGUgbm90ZSByZWdhcmRpbmcgbmFtZXNwYWNlcyBpbiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxBZGRDaGlsZCI+eG1sQWRkQ2hpbGQ8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTEyNzgsNyArMTMxNyw3IEBACiA8YSBuYW1lPSJ4bWxBZGRQcmV2U2libGluZyI+PC9hPnhtbEFkZFByZXZTaWJsaW5nICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgl4bWxBZGRQcmV2U2libGluZwkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gZWxlbSk8YnI+CiA8L3ByZT4KLTxwPkFkZCBhIG5ldyBub2RlIEBlbGVtIGFzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIEBjdXIgbWVyZ2luZyBhZGphY2VudCBURVhUIG5vZGVzIChAZWxlbSBtYXkgYmUgZnJlZWQpIElmIHRoZSBuZXcgbm9kZSB3YXMgYWxyZWFkeSBpbnNlcnRlZCBpbiBhIGRvY3VtZW50IGl0IGlzIGZpcnN0IHVubGlua2VkIGZyb20gaXRzIGV4aXN0aW5nIGNvbnRleHQuIElmIHRoZSBuZXcgbm9kZSBpcyBBVFRSSUJVVEUsIGl0IGlzIGFkZGVkIGludG8gcHJvcGVydGllcyBpbnN0ZWFkIG9mIGNoaWxkcmVuLiBJZiB0aGVyZSBpcyBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB3aXRoIGVxdWFsIG5hbWUsIGl0IGlzIGZpcnN0IGRlc3Ryb3llZC4gU2VlIHRoZSBub3RlIHJlZ2FyZGluZyBuYW1lc3BhY2VzIGluIHhtbEFkZENoaWxkLjwvcD4KKzxwPkFkZCBhIG5ldyBub2RlIEBlbGVtIGFzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIEBjdXIgbWVyZ2luZyBhZGphY2VudCBURVhUIG5vZGVzIChAZWxlbSBtYXkgYmUgZnJlZWQpIElmIHRoZSBuZXcgbm9kZSB3YXMgYWxyZWFkeSBpbnNlcnRlZCBpbiBhIGRvY3VtZW50IGl0IGlzIGZpcnN0IHVubGlua2VkIGZyb20gaXRzIGV4aXN0aW5nIGNvbnRleHQuIElmIHRoZSBuZXcgbm9kZSBpcyBBVFRSSUJVVEUsIGl0IGlzIGFkZGVkIGludG8gcHJvcGVydGllcyBpbnN0ZWFkIG9mIGNoaWxkcmVuLiBJZiB0aGVyZSBpcyBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiB3aXRoIGVxdWFsIG5hbWUsIGl0IGlzIGZpcnN0IGRlc3Ryb3llZC4gU2VlIHRoZSBub3RlIHJlZ2FyZGluZyBuYW1lc3BhY2VzIGluIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEFkZENoaWxkIj54bWxBZGRDaGlsZDwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTMwMyw3ICsxMzQyLDcgQEAKIDxhIG5hbWU9InhtbEFkZFNpYmxpbmciPjwvYT54bWxBZGRTaWJsaW5nICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgl4bWxBZGRTaWJsaW5nCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gZWxlbSk8YnI+CiA8L3ByZT4KLTxwPkFkZCBhIG5ldyBlbGVtZW50IEBlbGVtIHRvIHRoZSBsaXN0IG9mIHNpYmxpbmdzIG9mIEBjdXIgbWVyZ2luZyBhZGphY2VudCBURVhUIG5vZGVzIChAZWxlbSBtYXkgYmUgZnJlZWQpIElmIHRoZSBuZXcgZWxlbWVudCB3YXMgYWxyZWFkeSBpbnNlcnRlZCBpbiBhIGRvY3VtZW50IGl0IGlzIGZpcnN0IHVubGlua2VkIGZyb20gaXRzIGV4aXN0aW5nIGNvbnRleHQuIFNlZSB0aGUgbm90ZSByZWdhcmRpbmcgbmFtZXNwYWNlcyBpbiB4bWxBZGRDaGlsZC48L3A+Cis8cD5BZGQgYSBuZXcgZWxlbWVudCBAZWxlbSB0byB0aGUgbGlzdCBvZiBzaWJsaW5ncyBvZiBAY3VyIG1lcmdpbmcgYWRqYWNlbnQgVEVYVCBub2RlcyAoQGVsZW0gbWF5IGJlIGZyZWVkKSBJZiB0aGUgbmV3IGVsZW1lbnQgd2FzIGFscmVhZHkgaW5zZXJ0ZWQgaW4gYSBkb2N1bWVudCBpdCBpcyBmaXJzdCB1bmxpbmtlZCBmcm9tIGl0cyBleGlzdGluZyBjb250ZXh0LiBTZWUgdGhlIG5vdGUgcmVnYXJkaW5nIG5hbWVzcGFjZXMgaW4gPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQWRkQ2hpbGQiPnhtbEFkZENoaWxkPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNDI1LDcgKzE0NjQsNyBAQAogPGEgbmFtZT0ieG1sQnVmTm9kZUR1bXAiPjwvYT54bWxCdWZOb2RlRHVtcCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c2l6ZV90CXhtbEJ1Zk5vZGVEdW1wCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZlB0ciI+eG1sQnVmUHRyPC9hPiBidWYsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyLCA8YnI+CQkJCQkgaW50IGxldmVsLCA8YnI+CQkJCQkgaW50IGZvcm1hdCk8YnI+CiA8L3ByZT4KLTxwPkR1bXAgYW4gWE1MIG5vZGUsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIsY2hpbGRyZW4gYXJlIHByaW50ZWQgdG9vLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEluZGVudFRyZWVPdXRwdXQiPnhtbEluZGVudFRyZWVPdXRwdXQ8L2E+ID0gMSBvciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3YXMgY2FsbGVkPC9wPgorPHA+RHVtcCBhbiBYTUwgbm9kZSwgcmVjdXJzaXZlIGJlaGF2aW91cixjaGlsZHJlbiBhcmUgcHJpbnRlZCB0b28uIE5vdGUgdGhhdCBAZm9ybWF0ID0gMSBwcm92aWRlIG5vZGUgaW5kZW50aW5nIG9ubHkgaWYgeG1sSW5kZW50VHJlZU91dHB1dCA9IDEgb3IgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgd2FzIGNhbGxlZDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTE2NzMsNyArMTcxMiw3IEBACiA8YSBuYW1lPSJ4bWxCdWZmZXJDcmVhdGVTdGF0aWMiPjwvYT54bWxCdWZmZXJDcmVhdGVTdGF0aWMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlclB0ciI+eG1sQnVmZmVyUHRyPC9hPgl4bWxCdWZmZXJDcmVhdGVTdGF0aWMJKHZvaWQgKiBtZW0sIDxicj4JCQkJCSBzaXplX3Qgc2l6ZSk8YnI+CiA8L3ByZT4KLTxwPnJvdXRpbmUgdG8gY3JlYXRlIGFuIFhNTCBidWZmZXIgZnJvbSBhbiBpbW11dGFibGUgbWVtb3J5IGFyZWEuIFRoZSBhcmVhIHdvbid0IGJlIG1vZGlmaWVkIG5vciBjb3BpZWQsIGFuZCBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50IHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBsaWZldGltZS48L3A+Cis8cD48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xNjg3LDcgKzE3MjYsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5ldyBzdHJ1Y3R1cmUuPC90ZD4KKzx0ZD5hbiBYTUwgYnVmZmVyIGluaXRpYWxpemVkIHdpdGggYnl0ZXMuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KQEAgLTIxNDIsNyArMjE4MSw3IEBACiA8YSBuYW1lPSJ4bWxDb3B5UHJvcCI+PC9hPnhtbENvcHlQcm9wICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxBdHRyUHRyIj54bWxBdHRyUHRyPC9hPgl4bWxDb3B5UHJvcAkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IHRhcmdldCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEF0dHJQdHIiPnhtbEF0dHJQdHI8L2E+IGN1cik8YnI+CiA8L3ByZT4KLTxwPkRvIGEgY29weSBvZiB0aGUgYXR0cmlidXRlLjwvcD4KKzxwPkRvIGEgY29weSBvZiB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjQwNiw2ICsyNDQ1LDI3IEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgorPGEgbmFtZT0ieG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0Ij48L2E+eG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPnhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvYT4JeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMiPnhtbERlcmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk8YnI+Cis8L3ByZT4KKzxwPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGRlc3RydWN0aW9uPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5mdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgRGVyZWdpc3Rlck5vZGVGdW5jPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0ieG1sRG9jQ29weU5vZGUiPjwvYT54bWxEb2NDb3B5Tm9kZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4JeG1sRG9jQ29weU5vZGUJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBub2RlLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGRvYywgPGJyPgkJCQkJIGludCBleHRlbmRlZCk8YnI+CiA8L3ByZT4KQEAgLTI0ODgsNyArMjU0OCw3IEBACiA8YSBuYW1lPSJ4bWxEb2NEdW1wRm9ybWF0TWVtb3J5Ij48L2E+eG1sRG9jRHVtcEZvcm1hdE1lbW9yeSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxEb2NEdW1wRm9ybWF0TWVtb3J5CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGN1ciwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiogbWVtLCA8YnI+CQkJCQkgaW50ICogc2l6ZSwgPGJyPgkJCQkJIGludCBmb3JtYXQpPGJyPgogPC9wcmU+Ci08cD5EdW1wIGFuIFhNTCBkb2N1bWVudCBpbiBtZW1vcnkgYW5kIHJldHVybiB0aGUgI3htbENoYXIgKiBhbmQgaXQncyBzaXplLiBJdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZnJlZSB0aGUgbWVtb3J5IHdpdGggeG1sRnJlZSgpLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEluZGVudFRyZWVPdXRwdXQiPnhtbEluZGVudFRyZWVPdXRwdXQ8L2E+ID0gMSBvciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3YXMgY2FsbGVkPC9wPgorPHA+RHVtcCBhbiBYTUwgZG9jdW1lbnQgaW4gbWVtb3J5IGFuZCByZXR1cm4gdGhlICN4bWxDaGFyICogYW5kIGl0J3Mgc2l6ZS4gSXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGZyZWUgdGhlIG1lbW9yeSB3aXRoIHhtbEZyZWUoKS4gTm90ZSB0aGF0IEBmb3JtYXQgPSAxIHByb3ZpZGUgbm9kZSBpbmRlbnRpbmcgb25seSBpZiB4bWxJbmRlbnRUcmVlT3V0cHV0ID0gMSBvciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3YXMgY2FsbGVkPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMjUxNyw3ICsyNTc3LDcgQEAKIDxhIG5hbWU9InhtbERvY0R1bXBGb3JtYXRNZW1vcnlFbmMiPjwvYT54bWxEb2NEdW1wRm9ybWF0TWVtb3J5RW5jICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbERvY0R1bXBGb3JtYXRNZW1vcnlFbmMJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBvdXRfZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqKiBkb2NfdHh0X3B0ciwgPGJyPgkJCQkJIGludCAqIGRvY190eHRfbGVuLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIHR4dF9lbmNvZGluZywgPGJyPgkJCQkJIGludCBmb3JtYXQpPGJyPgogPC9wcmU+Ci08cD5EdW1wIHRoZSBjdXJyZW50IERPTSB0cmVlIGludG8gbWVtb3J5IHVzaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuIE5vdGUgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgd2l0aCB4bWxGcmVlKCkuIE5vdGUgdGhhdCBAZm9ybWF0ID0gMSBwcm92aWRlIG5vZGUgaW5kZW50aW5nIG9ubHkgaWYgPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sSW5kZW50VHJlZU91dHB1dCI+eG1sSW5kZW50VHJlZU91dHB1dDwvYT4gPSAxIG9yIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdhcyBjYWxsZWQ8L3A+Cis8cD5EdW1wIHRoZSBjdXJyZW50IERPTSB0cmVlIGludG8gbWVtb3J5IHVzaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuIE5vdGUgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgd2l0aCB4bWxGcmVlKCkuIE5vdGUgdGhhdCBAZm9ybWF0ID0gMSBwcm92aWRlIG5vZGUgaW5kZW50aW5nIG9ubHkgaWYgeG1sSW5kZW50VHJlZU91dHB1dCA9IDEgb3IgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgd2FzIGNhbGxlZDwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTI2MjIsNyArMjY4Miw3IEBACiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgLTEgaW4gY2FzZSBvZiBmYWlsdXJlLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEluZGVudFRyZWVPdXRwdXQiPnhtbEluZGVudFRyZWVPdXRwdXQ8L2E+ID0gMSBvciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3YXMgY2FsbGVkPC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgLTEgaW4gY2FzZSBvZiBmYWlsdXJlLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIHhtbEluZGVudFRyZWVPdXRwdXQgPSAxIG9yIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdhcyBjYWxsZWQ8L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMzA2MCw3ICszMTIwLDcgQEAKIDxhIG5hbWU9InhtbEdldFByb3AiPjwvYT54bWxHZXRQcm9wICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICoJeG1sR2V0UHJvcAkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGUiPnhtbE5vZGU8L2E+ICogbm9kZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTxicj4KIDwvcHJlPgotPHA+U2VhcmNoIGFuZCBnZXQgdGhlIHZhbHVlIG9mIGFuIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IGFzc29jaWF0ZWQgdG8gYSBub2RlIFRoaXMgZG9lcyB0aGUgZW50aXR5IHN1YnN0aXR1dGlvbi4gVGhpcyBmdW5jdGlvbiBsb29rcyBpbiBEVEQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gZGVjbGFyYXRpb24gZm9yICNGSVhFRCBvciBkZWZhdWx0IGRlY2xhcmF0aW9uIHZhbHVlcyB1bmxlc3MgRFREIHVzZSBoYXMgYmVlbiB0dXJuZWQgb2ZmLiBOT1RFOiB0aGlzIGZ1bmN0aW9uIGFjdHMgaW5kZXBlbmRlbnRseSBvZiBuYW1lc3BhY2VzIGFzc29jaWF0ZWQgdG8gdGhlIGF0dHJpYnV0ZS4gVXNlIHhtbEdldE5zUHJvcCgpIG9yIHhtbEdldE5vTnNQcm9wKCkgZm9yIG5hbWVzcGFjZSBhd2FyZSBwcm9jZXNzaW5nLjwvcD4KKzxwPlNlYXJjaCBhbmQgZ2V0IHRoZSB2YWx1ZSBvZiBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBhc3NvY2lhdGVkIHRvIGEgbm9kZSBUaGlzIGRvZXMgdGhlIGVudGl0eSBzdWJzdGl0dXRpb24uIFRoaXMgZnVuY3Rpb24gbG9va3MgaW4gRFREIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IGRlY2xhcmF0aW9uIGZvciAjRklYRUQgb3IgZGVmYXVsdCBkZWNsYXJhdGlvbiB2YWx1ZXMgdW5sZXNzIERURCB1c2UgaGFzIGJlZW4gdHVybmVkIG9mZi4gTk9URTogdGhpcyBmdW5jdGlvbiBhY3RzIGluZGVwZW5kZW50bHkgb2YgbmFtZXNwYWNlcyBhc3NvY2lhdGVkIHRvIHRoZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi4gVXNlIHhtbEdldE5zUHJvcCgpIG9yIHhtbEdldE5vTnNQcm9wKCkgZm9yIG5hbWVzcGFjZSBhd2FyZSBwcm9jZXNzaW5nLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTMyOTMsNyArMzM1Myw3IEBACiA8YSBuYW1lPSJ4bWxOZXdDb21tZW50Ij48L2E+eG1sTmV3Q29tbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4JeG1sTmV3Q29tbWVudAkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjb250ZW50KTxicj4KIDwvcHJlPgotPHA+VXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgRElTQ09VUkFHRUQgaW4gZmF2b3Igb2YgeG1sTmV3RG9jQ29tbWVudC4gQ3JlYXRpb24gb2YgYSBuZXcgbm9kZSBjb250YWluaW5nIGEgY29tbWVudC48L3A+Cis8cD5Vc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBESVNDT1VSQUdFRCBpbiBmYXZvciBvZiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOZXdEb2NDb21tZW50Ij54bWxOZXdEb2NDb21tZW50PC9hPi4gQ3JlYXRpb24gb2YgYSBuZXcgbm9kZSBjb250YWluaW5nIGEgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNjb21tZW50Ij5jb21tZW50PC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0zNjU4LDcgKzM3MTgsNyBAQAogPGEgbmFtZT0ieG1sTmV3Tm9kZSI+PC9hPnhtbE5ld05vZGUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CXhtbE5ld05vZGUJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOc1B0ciI+eG1sTnNQdHI8L2E+IG5zLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUpPGJyPgogPC9wcmU+Ci08cD5DcmVhdGlvbiBvZiBhIG5ldyBub2RlIGVsZW1lbnQuIEBucyBpcyBvcHRpb25hbCAoTlVMTCkuIFVzZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIERJU0NPVVJBR0VEIGluIGZhdm9yIG9mIHhtbE5ld0RvY05vZGUuPC9wPgorPHA+Q3JlYXRpb24gb2YgYSBuZXcgbm9kZSBlbGVtZW50LiBAbnMgaXMgb3B0aW9uYWwgKE5VTEwpLiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBESVNDT1VSQUdFRCBpbiBmYXZvciBvZiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOZXdEb2NOb2RlIj54bWxOZXdEb2NOb2RlPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0zNjgzLDcgKzM3NDMsNyBAQAogPGEgbmFtZT0ieG1sTmV3Tm9kZUVhdE5hbWUiPjwvYT54bWxOZXdOb2RlRWF0TmFtZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4JeG1sTmV3Tm9kZUVhdE5hbWUJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5zUHRyIj54bWxOc1B0cjwvYT4gbnMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSk8YnI+CiA8L3ByZT4KLTxwPkNyZWF0aW9uIG9mIGEgbmV3IG5vZGUgZWxlbWVudC4gQG5zIGlzIG9wdGlvbmFsIChOVUxMKS4gVXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgRElTQ09VUkFHRUQgaW4gZmF2b3Igb2YgeG1sTmV3RG9jTm9kZUVhdE5hbWUuPC9wPgorPHA+Q3JlYXRpb24gb2YgYSBuZXcgbm9kZSBlbGVtZW50LiBAbnMgaXMgb3B0aW9uYWwgKE5VTEwpLiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBESVNDT1VSQUdFRCBpbiBmYXZvciBvZiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOZXdEb2NOb2RlRWF0TmFtZSI+eG1sTmV3RG9jTm9kZUVhdE5hbWU8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTM4MDksNyArMzg2OSw3IEBACiA8YSBuYW1lPSJ4bWxOZXdQSSI+PC9hPnhtbE5ld1BJICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgl4bWxOZXdQSQkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGNvbnRlbnQpPGJyPgogPC9wcmU+Ci08cD5DcmVhdGlvbiBvZiBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gZWxlbWVudC4gVXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgRElTQ09VUkFHRUQgaW4gZmF2b3Igb2YgeG1sTmV3RG9jUEkuPC9wPgorPHA+Q3JlYXRpb24gb2YgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGVsZW1lbnQuIFVzZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIERJU0NPVVJBR0VEIGluIGZhdm9yIG9mIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5ld0RvY1BJIj54bWxOZXdEb2NQSTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMzg5MSw3ICszOTUxLDcgQEAKIDxhIG5hbWU9InhtbE5ld1RleHQiPjwvYT54bWxOZXdUZXh0ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgl4bWxOZXdUZXh0CQkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGNvbnRlbnQpPGJyPgogPC9wcmU+Ci08cD5DcmVhdGlvbiBvZiBhIG5ldyB0ZXh0IG5vZGUuIFVzZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIERJU0NPVVJBR0VEIGluIGZhdm9yIG9mIHhtbE5ld0RvY1RleHQuPC9wPgorPHA+Q3JlYXRpb24gb2YgYSBuZXcgdGV4dCBub2RlLiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBESVNDT1VSQUdFRCBpbiBmYXZvciBvZiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOZXdEb2NUZXh0Ij54bWxOZXdEb2NUZXh0PC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0zOTQ1LDcgKzQwMDUsNyBAQAogPGEgbmFtZT0ieG1sTmV3VGV4dExlbiI+PC9hPnhtbE5ld1RleHRMZW4gKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CXhtbE5ld1RleHRMZW4JCShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogY29udGVudCwgPGJyPgkJCQkJIGludCBsZW4pPGJyPgogPC9wcmU+Ci08cD5Vc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBESVNDT1VSQUdFRCBpbiBmYXZvciBvZiB4bWxOZXdEb2NUZXh0TGVuLiBDcmVhdGlvbiBvZiBhIG5ldyB0ZXh0IG5vZGUgd2l0aCBhbiBleHRyYSBwYXJhbWV0ZXIgZm9yIHRoZSBjb250ZW50J3MgbGVuZ3RoPC9wPgorPHA+VXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgRElTQ09VUkFHRUQgaW4gZmF2b3Igb2YgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTmV3RG9jVGV4dExlbiI+eG1sTmV3RG9jVGV4dExlbjwvYT4uIENyZWF0aW9uIG9mIGEgbmV3IHRleHQgbm9kZSB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlciBmb3IgdGhlIGNvbnRlbnQncyBsZW5ndGg8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00MDYyLDcgKzQxMjIsNyBAQAogPGEgbmFtZT0ieG1sTm9kZUR1bXAiPjwvYT54bWxOb2RlRHVtcCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbE5vZGVEdW1wCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlclB0ciI+eG1sQnVmZmVyUHRyPC9hPiBidWYsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyLCA8YnI+CQkJCQkgaW50IGxldmVsLCA8YnI+CQkJCQkgaW50IGZvcm1hdCk8YnI+CiA8L3ByZT4KLTxwPkR1bXAgYW4gWE1MIG5vZGUsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIsY2hpbGRyZW4gYXJlIHByaW50ZWQgdG9vLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEluZGVudFRyZWVPdXRwdXQiPnhtbEluZGVudFRyZWVPdXRwdXQ8L2E+ID0gMSBvciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3YXMgY2FsbGVkLiBTaW5jZSB0aGlzIGlzIHVzaW5nIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlciI+eG1sQnVmZmVyPC9hPiBzdHJ1Y3R1cmVzIGl0IGlzIGxpbWl0ZWQgdG8gMkdCIGFuZCBzb21laG93IGRlcHJlY2F0ZWQsIHVzZSB4bWxOb2RlRHVtcE91dHB1dCgpIGluc3RlYWQuPC9wPgorPHA+RHVtcCBhbiBYTUwgbm9kZSwgcmVjdXJzaXZlIGJlaGF2aW91cixjaGlsZHJlbiBhcmUgcHJpbnRlZCB0b28uIE5vdGUgdGhhdCBAZm9ybWF0ID0gMSBwcm92aWRlIG5vZGUgaW5kZW50aW5nIG9ubHkgaWYgeG1sSW5kZW50VHJlZU91dHB1dCA9IDEgb3IgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgd2FzIGNhbGxlZC4gU2luY2UgdGhpcyBpcyB1c2luZyA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXIiPnhtbEJ1ZmZlcjwvYT4gc3RydWN0dXJlcyBpdCBpcyBsaW1pdGVkIHRvIDJHQiBhbmQgc29tZWhvdyBkZXByZWNhdGVkLCB1c2UgeG1sTm9kZUR1bXBPdXRwdXQoKSBpbnN0ZWFkLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTQwOTksNyArNDE1OSw3IEBACiA8YSBuYW1lPSJ4bWxOb2RlRHVtcE91dHB1dCI+PC9hPnhtbE5vZGVEdW1wT3V0cHV0ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbE5vZGVEdW1wT3V0cHV0CQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+IGJ1ZiwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjdXIsIDxicj4JCQkJCSBpbnQgbGV2ZWwsIDxicj4JCQkJCSBpbnQgZm9ybWF0LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nKTxicj4KIDwvcHJlPgotPHA+RHVtcCBhbiBYTUwgbm9kZSwgcmVjdXJzaXZlIGJlaGF2aW91ciwgY2hpbGRyZW4gYXJlIHByaW50ZWQgdG9vLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIDxhIGhyZWY9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEluZGVudFRyZWVPdXRwdXQiPnhtbEluZGVudFRyZWVPdXRwdXQ8L2E+ID0gMSBvciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3YXMgY2FsbGVkPC9wPgorPHA+RHVtcCBhbiBYTUwgbm9kZSwgcmVjdXJzaXZlIGJlaGF2aW91ciwgY2hpbGRyZW4gYXJlIHByaW50ZWQgdG9vLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIHhtbEluZGVudFRyZWVPdXRwdXQgPSAxIG9yIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdhcyBjYWxsZWQ8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00MzAzLDcgKzQzNjMsNyBAQAogPGEgbmFtZT0ieG1sTm9kZVNldEJhc2UiPjwvYT54bWxOb2RlU2V0QmFzZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxOb2RlU2V0QmFzZQkJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjdXIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogdXJpKTxicj4KIDwvcHJlPgotPHA+U2V0IChvciByZXNldCkgdGhlIGJhc2UgVVJJIG9mIGEgbm9kZSwgaS5lLiB0aGUgdmFsdWUgb2YgdGhlIHhtbDpiYXNlIGF0dHJpYnV0ZS48L3A+Cis8cD5TZXQgKG9yIHJlc2V0KSB0aGUgYmFzZSBVUkkgb2YgYSBub2RlLCBpLmUuIHRoZSB2YWx1ZSBvZiB0aGUgeG1sOmJhc2UgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtNDM3MCw3ICs0NDMwLDcgQEAKIDxhIG5hbWU9InhtbE5vZGVTZXRMYW5nIj48L2E+eG1sTm9kZVNldExhbmcgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sTm9kZVNldExhbmcJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGxhbmcpPGJyPgogPC9wcmU+Ci08cD5TZXQgdGhlIGxhbmd1YWdlIG9mIGEgbm9kZSwgaS5lLiB0aGUgdmFsdWVzIG9mIHRoZSB4bWw6bGFuZyBhdHRyaWJ1dGUuPC9wPgorPHA+U2V0IHRoZSBsYW5ndWFnZSBvZiBhIG5vZGUsIGkuZS4gdGhlIHZhbHVlcyBvZiB0aGUgeG1sOmxhbmcgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtNDQxMiw3ICs0NDcyLDcgQEAKIDxhIG5hbWU9InhtbE5vZGVTZXRTcGFjZVByZXNlcnZlIj48L2E+eG1sTm9kZVNldFNwYWNlUHJlc2VydmUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sTm9kZVNldFNwYWNlUHJlc2VydmUJCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjdXIsIDxicj4JCQkJCSBpbnQgdmFsKTxicj4KIDwvcHJlPgotPHA+U2V0IChvciByZXNldCkgdGhlIHNwYWNlIHByZXNlcnZpbmcgYmVoYXZpb3VyIG9mIGEgbm9kZSwgaS5lLiB0aGUgdmFsdWUgb2YgdGhlIHhtbDpzcGFjZSBhdHRyaWJ1dGUuPC9wPgorPHA+U2V0IChvciByZXNldCkgdGhlIHNwYWNlIHByZXNlcnZpbmcgYmVoYXZpb3VyIG9mIGEgbm9kZSwgaS5lLiB0aGUgdmFsdWUgb2YgdGhlIHhtbDpzcGFjZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00NDc2LDYgKzQ1MzYsMjcgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Cis8YSBuYW1lPSJ4bWxSZWdpc3Rlck5vZGVEZWZhdWx0Ij48L2E+eG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4JeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdAkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyI+eG1sUmVnaXN0ZXJOb2RlRnVuYzwvYT4gZnVuYyk8YnI+Cis8L3ByZT4KKzxwPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGNyZWF0aW9uPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5mdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgUmVnaXN0ZXJOb2RlRnVuYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgb2xkIHZhbHVlIG9mIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0ieG1sUmVtb3ZlUHJvcCI+PC9hPnhtbFJlbW92ZVByb3AgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxSZW1vdmVQcm9wCQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEF0dHJQdHIiPnhtbEF0dHJQdHI8L2E+IGN1cik8YnI+CiA8L3ByZT4KQEAgLTQ1MDEsNyArNDU4Miw3IEBACiA8YSBuYW1lPSJ4bWxSZXBsYWNlTm9kZSI+PC9hPnhtbFJlcGxhY2VOb2RlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPgl4bWxSZXBsYWNlTm9kZQkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IG9sZCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGN1cik8YnI+CiA8L3ByZT4KLTxwPlVubGluayB0aGUgb2xkIG5vZGUgZnJvbSBpdHMgY3VycmVudCBjb250ZXh0LCBwcnVuZSB0aGUgbmV3IG9uZSBhdCB0aGUgc2FtZSBwbGFjZS4gSWYgQGN1ciB3YXMgYWxyZWFkeSBpbnNlcnRlZCBpbiBhIGRvY3VtZW50IGl0IGlzIGZpcnN0IHVubGlua2VkIGZyb20gaXRzIGV4aXN0aW5nIGNvbnRleHQuIFNlZSB0aGUgbm90ZSByZWdhcmRpbmcgbmFtZXNwYWNlcyBpbiB4bWxBZGRDaGlsZC48L3A+Cis8cD5VbmxpbmsgdGhlIG9sZCBub2RlIGZyb20gaXRzIGN1cnJlbnQgY29udGV4dCwgcHJ1bmUgdGhlIG5ldyBvbmUgYXQgdGhlIHNhbWUgcGxhY2UuIElmIEBjdXIgd2FzIGFscmVhZHkgaW5zZXJ0ZWQgaW4gYSBkb2N1bWVudCBpdCBpcyBmaXJzdCB1bmxpbmtlZCBmcm9tIGl0cyBleGlzdGluZyBjb250ZXh0LiBTZWUgdGhlIG5vdGUgcmVnYXJkaW5nIG5hbWVzcGFjZXMgaW4gPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQWRkQ2hpbGQiPnhtbEFkZENoaWxkPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00NjA5LDcgKzQ2OTAsNyBAQAogPGEgbmFtZT0ieG1sU2F2ZUZvcm1hdEZpbGUiPjwvYT54bWxTYXZlRm9ybWF0RmlsZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFNhdmVGb3JtYXRGaWxlCQkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGN1ciwgPGJyPgkJCQkJIGludCBmb3JtYXQpPGJyPgogPC9wcmU+Ci08cD5EdW1wIGFuIFhNTCBkb2N1bWVudCB0byBhIGZpbGUuIFdpbGwgdXNlIGNvbXByZXNzaW9uIGlmIGNvbXBpbGVkIGluIGFuZCBlbmFibGVkLiBJZiBAZmlsZW5hbWUgaXMgIi0iIHRoZSBzdGRvdXQgZmlsZSBpcyB1c2VkLiBJZiBAZm9ybWF0IGlzIHNldCB0aGVuIHRoZSBkb2N1bWVudCB3aWxsIGJlIGluZGVudGVkIG9uIG91dHB1dC4gTm90ZSB0aGF0IEBmb3JtYXQgPSAxIHByb3ZpZGUgbm9kZSBpbmRlbnRpbmcgb25seSBpZiA8YSBocmVmPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxJbmRlbnRUcmVlT3V0cHV0Ij54bWxJbmRlbnRUcmVlT3V0cHV0PC9hPiA9IDEgb3IgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgd2FzIGNhbGxlZDwvcD4KKzxwPkR1bXAgYW4gWE1MIGRvY3VtZW50IHRvIGEgZmlsZS4gV2lsbCB1c2UgY29tcHJlc3Npb24gaWYgY29tcGlsZWQgaW4gYW5kIGVuYWJsZWQuIElmIEBmaWxlbmFtZSBpcyAiLSIgdGhlIHN0ZG91dCBmaWxlIGlzIHVzZWQuIElmIEBmb3JtYXQgaXMgc2V0IHRoZW4gdGhlIGRvY3VtZW50IHdpbGwgYmUgaW5kZW50ZWQgb24gb3V0cHV0LiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIHhtbEluZGVudFRyZWVPdXRwdXQgPSAxIG9yIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdhcyBjYWxsZWQ8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00NjYwLDcgKzQ3NDEsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuIE5vdGUgdGhhdCBAZm9ybWF0ID0gMSBwcm92aWRlIG5vZGUgaW5kZW50aW5nIG9ubHkgaWYgPGEgaHJlZj0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sSW5kZW50VHJlZU91dHB1dCI+eG1sSW5kZW50VHJlZU91dHB1dDwvYT4gPSAxIG9yIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdhcyBjYWxsZWQ8L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciAtMSBpbiBjYXNlIG9mIGVycm9yLiBOb3RlIHRoYXQgQGZvcm1hdCA9IDEgcHJvdmlkZSBub2RlIGluZGVudGluZyBvbmx5IGlmIHhtbEluZGVudFRyZWVPdXRwdXQgPSAxIG9yIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdhcyBjYWxsZWQ8L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtNTA5NCw2ICs1MTc1LDkwIEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUiPjwvYT54bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSI+eG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZTwvYT4JeG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUiPnhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWU8L2E+IHYpPGJyPgorPC9wcmU+Cis8cD48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUiPjwvYT54bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplCShpbnQgdik8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+Cis8YSBuYW1lPSJ4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQiPjwvYT54bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPgl4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERlcmVnaXN0ZXJOb2RlRnVuYyI+eG1sRGVyZWdpc3Rlck5vZGVGdW5jPC9hPiBmdW5jKTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQiPjwvYT54bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxSZWdpc3Rlck5vZGVGdW5jIj54bWxSZWdpc3Rlck5vZGVGdW5jPC9hPgl4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0CSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxSZWdpc3Rlck5vZGVGdW5jIj54bWxSZWdpc3Rlck5vZGVGdW5jPC9hPiBmdW5jKTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbFVubGlua05vZGUiPjwvYT54bWxVbmxpbmtOb2RlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFVubGlua05vZGUJCQkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gY3VyKTxicj4KIDwvcHJlPgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi11cmkuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItdXJpLmh0bWwKaW5kZXggNzU1ZTc4ZC4uZGU3YTBhYSAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi11cmkuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXVyaS5odG1sCkBAIC0zNTgsNyArMzU4LDcgQEAKIDxhIG5hbWU9InhtbFVSSUVzY2FwZVN0ciI+PC9hPnhtbFVSSUVzY2FwZVN0ciAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCXhtbFVSSUVzY2FwZVN0cgkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBzdHIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbGlzdCk8YnI+CiA8L3ByZT4KLTxwPlRoaXMgcm91dGluZSBlc2NhcGVzIGEgc3RyaW5nIHRvIGhleCwgaWdub3JpbmcgcmVzZXJ2ZWQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNjaGFyYWN0ZXJzIj5jaGFyYWN0ZXJzPC9hPiAoYS16KSBhbmQgdGhlIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY2hhcmFjdGVycyI+Y2hhcmFjdGVyczwvYT4gaW4gdGhlIGV4Y2VwdGlvbiBsaXN0LjwvcD4KKzxwPlRoaXMgcm91dGluZSBlc2NhcGVzIGEgc3RyaW5nIHRvIGhleCwgaWdub3JpbmcgcmVzZXJ2ZWQgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNjaGFyYWN0ZXJzIj5jaGFyYWN0ZXJzPC9hPiAoYS16LCBBLVosIDAtOSwgIkAtXy4hfionKCkiKSBhbmQgdGhlIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY2hhcmFjdGVycyI+Y2hhcmFjdGVyczwvYT4gaW4gdGhlIGV4Y2VwdGlvbiBsaXN0LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDItdmFsaWQuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDItdmFsaWQuaHRtbAppbmRleCAzZWEwYmI4Li43ZjQ4OGRkIDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLXZhbGlkLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi12YWxpZC5odG1sCkBAIC0yMiw5ICsyMiw3IEBACiA8cD5BdXRob3Iocyk6IERhbmllbCBWZWlsbGFyZCA8L3A+CiA8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+CiA8aDI+U3lub3BzaXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNkZWZpbmUgPGEgaHJlZj0iI1hNTF9WQ1RYVF9EVERfVkFMSURBVEVEIj5YTUxfVkNUWFRfRFREX1ZBTElEQVRFRDwvYT47Ci0jZGVmaW5lIDxhIGhyZWY9IiNYTUxfVkNUWFRfVVNFX1BDVFhUIj5YTUxfVkNUWFRfVVNFX1BDVFhUPC9hPjsKLXR5cGVkZWYgc3RydWN0IF94bWxIYXNoVGFibGUgPGEgaHJlZj0iI3htbEF0dHJpYnV0ZVRhYmxlIj54bWxBdHRyaWJ1dGVUYWJsZTwvYT47Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+dHlwZWRlZiBzdHJ1Y3QgX3htbEhhc2hUYWJsZSA8YSBocmVmPSIjeG1sQXR0cmlidXRlVGFibGUiPnhtbEF0dHJpYnV0ZVRhYmxlPC9hPjsKIHR5cGVkZWYgPGEgaHJlZj0ibGlieG1sMi12YWxpZC5odG1sI3htbEF0dHJpYnV0ZVRhYmxlIj54bWxBdHRyaWJ1dGVUYWJsZTwvYT4gKiA8YSBocmVmPSIjeG1sQXR0cmlidXRlVGFibGVQdHIiPnhtbEF0dHJpYnV0ZVRhYmxlUHRyPC9hPjsKIHR5cGVkZWYgc3RydWN0IF94bWxIYXNoVGFibGUgPGEgaHJlZj0iI3htbEVsZW1lbnRUYWJsZSI+eG1sRWxlbWVudFRhYmxlPC9hPjsKIHR5cGVkZWYgPGEgaHJlZj0ibGlieG1sMi12YWxpZC5odG1sI3htbEVsZW1lbnRUYWJsZSI+eG1sRWxlbWVudFRhYmxlPC9hPiAqIDxhIGhyZWY9IiN4bWxFbGVtZW50VGFibGVQdHIiPnhtbEVsZW1lbnRUYWJsZVB0cjwvYT47CkBAIC05Myw3ICs5MSw3IEBACiBpbnQJPGEgaHJlZj0iI3htbFZhbGlkYXRlRG9jdW1lbnRGaW5hbCI+eG1sVmFsaWRhdGVEb2N1bWVudEZpbmFsPC9hPgkoPGEgaHJlZj0ibGlieG1sMi12YWxpZC5odG1sI3htbFZhbGlkQ3R4dFB0ciI+eG1sVmFsaWRDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGRvYyk7CiBpbnQJPGEgaHJlZj0iI3htbFZhbGlkYXRlRHRkIj54bWxWYWxpZGF0ZUR0ZDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi12YWxpZC5odG1sI3htbFZhbGlkQ3R4dFB0ciI+eG1sVmFsaWRDdHh0UHRyPC9hPiBjdHh0LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGRvYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbER0ZFB0ciI+eG1sRHRkUHRyPC9hPiBkdGQpOwogaW50CTxhIGhyZWY9IiN4bWxWYWxpZGF0ZUR0ZEZpbmFsIj54bWxWYWxpZGF0ZUR0ZEZpbmFsPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdmFsaWQuaHRtbCN4bWxWYWxpZEN0eHRQdHIiPnhtbFZhbGlkQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MpOwotaW50CTxhIGhyZWY9IiN4bWxWYWxpZGF0ZUVsZW1lbnQiPnhtbFZhbGlkYXRlRWxlbWVudDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXZhbGlkLmh0bWwjeG1sVmFsaWRDdHh0UHRyIj54bWxWYWxpZEN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gZWxlbSk7CitpbnQJPGEgaHJlZj0iI3htbFZhbGlkYXRlRWxlbWVudCI+eG1sVmFsaWRhdGVFbGVtZW50PC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdmFsaWQuaHRtbCN4bWxWYWxpZEN0eHRQdHIiPnhtbFZhbGlkQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiByb290KTsKIGludAk8YSBocmVmPSIjeG1sVmFsaWRhdGVFbGVtZW50RGVjbCI+eG1sVmFsaWRhdGVFbGVtZW50RGVjbDwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXZhbGlkLmh0bWwjeG1sVmFsaWRDdHh0UHRyIj54bWxWYWxpZEN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRWxlbWVudFB0ciI+eG1sRWxlbWVudFB0cjwvYT4gZWxlbSk7CiBpbnQJPGEgaHJlZj0iI3htbFZhbGlkYXRlTmFtZVZhbHVlIj54bWxWYWxpZGF0ZU5hbWVWYWx1ZTwvYT4JCShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogdmFsdWUpOwogaW50CTxhIGhyZWY9IiN4bWxWYWxpZGF0ZU5hbWVzVmFsdWUiPnhtbFZhbGlkYXRlTmFtZXNWYWx1ZTwvYT4JCShjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogdmFsdWUpOwpAQCAtMTE4LDIyICsxMTYsNiBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJYTUxfVkNUWFRfRFREX1ZBTElEQVRFRCI+TWFjcm8gPC9hPlhNTF9WQ1RYVF9EVERfVkFMSURBVEVEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYTUxfVkNUWFRfRFREX1ZBTElEQVRFRCI+WE1MX1ZDVFhUX0RURF9WQUxJREFURUQ8L2E+OwotPC9wcmU+Ci08cD5TZXQgYWZ0ZXIgPGEgaHJlZj0ibGlieG1sMi12YWxpZC5odG1sI3htbFZhbGlkYXRlRHRkRmluYWwiPnhtbFZhbGlkYXRlRHRkRmluYWw8L2E+IHdhcyBjYWxsZWQuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0iWE1MX1ZDVFhUX1VTRV9QQ1RYVCI+TWFjcm8gPC9hPlhNTF9WQ1RYVF9VU0VfUENUWFQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTF9WQ1RYVF9VU0VfUENUWFQiPlhNTF9WQ1RYVF9VU0VfUENUWFQ8L2E+OwotPC9wcmU+Ci08cD5TZXQgaWYgdGhlIHZhbGlkYXRpb24gY29udGV4dCBpcyBwYXJ0IG9mIGEgcGFyc2VyIGNvbnRleHQuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgogPGEgbmFtZT0ieG1sQXR0cmlidXRlVGFibGUiPlN0cnVjdHVyZSA8L2E+eG1sQXR0cmlidXRlVGFibGU8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBfeG1sSGFzaFRhYmxlIHsKIFRoZSBjb250ZW50IG9mIHRoaXMgc3RydWN0dXJlIGlzIG5vdCBtYWRlIHB1YmxpYyBieSB0aGUgQVBJLgpAQCAtMTcxMyw3ICsxNjk1LDcgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxWYWxpZGF0ZUVsZW1lbnQiPjwvYT54bWxWYWxpZGF0ZUVsZW1lbnQgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxWYWxpZGF0ZUVsZW1lbnQJCSg8YSBocmVmPSJsaWJ4bWwyLXZhbGlkLmh0bWwjeG1sVmFsaWRDdHh0UHRyIj54bWxWYWxpZEN0eHRQdHI8L2E+IGN0eHQsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NQdHIiPnhtbERvY1B0cjwvYT4gZG9jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gZWxlbSk8YnI+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFZhbGlkYXRlRWxlbWVudAkJKDxhIGhyZWY9ImxpYnhtbDItdmFsaWQuaHRtbCN4bWxWYWxpZEN0eHRQdHIiPnhtbFZhbGlkQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiByb290KTxicj4KIDwvcHJlPgogPHA+VHJ5IHRvIHZhbGlkYXRlIHRoZSBzdWJ0cmVlIHVuZGVyIGFuIGVsZW1lbnQ8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgpAQCAtMTcyOCw3ICsxNzEwLDcgQEAKIDx0ZD5hIGRvY3VtZW50IGluc3RhbmNlPC90ZD4KIDwvdHI+CiA8dHI+Ci08dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5lbGVtPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+cm9vdDwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KIDx0ZD5hbiBlbGVtZW50IGluc3RhbmNlPC90ZD4KIDwvdHI+CiA8dHI+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbElPLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbElPLmh0bWwKaW5kZXggZTI1ZWUwMi4uYThjYzM4YyAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWxJTy5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sSU8uaHRtbApAQCAtNTMsNiArNTMsOCBAQAogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+CTxhIGhyZWY9IiN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGZCI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmQ8L2E+CShpbnQgZmQsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHI8L2E+IGVuY29kZXIpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+CTxhIGhyZWY9IiN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlPC9hPgkoRklMRSAqIGZpbGUsIDxicj4JCQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPiBlbmNvZGVyKTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPgk8YSBocmVmPSIjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lPC9hPgkoY29uc3QgY2hhciAqIFVSSSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHI8L2E+IGVuY29kZXIsIDxicj4JCQkJCQkJIGludCBjb21wcmVzc2lvbik7Cis8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CTxhIGhyZWY9IiN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk7Cit0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPiA8YSBocmVmPSIjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CShjb25zdCBjaGFyICogVVJJLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciI+eG1sQ2hhckVuY29kaW5nSGFuZGxlclB0cjwvYT4gZW5jb2RlciwgPGJyPgkJCQkJCQkgaW50IGNvbXByZXNzaW9uKTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPgk8YSBocmVmPSIjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlSU8iPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUlPPC9hPgkoPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dFdyaXRlQ2FsbGJhY2siPnhtbE91dHB1dFdyaXRlQ2FsbGJhY2s8L2E+IGlvd3JpdGUsIDxicj4JCQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dENsb3NlQ2FsbGJhY2siPnhtbE91dHB1dENsb3NlQ2FsbGJhY2s8L2E+IGlvY2xvc2UsIDxicj4JCQkJCQkgdm9pZCAqIGlvY3R4LCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPiBlbmNvZGVyKTsKIGludAk8YSBocmVmPSIjeG1sT3V0cHV0QnVmZmVyRmx1c2giPnhtbE91dHB1dEJ1ZmZlckZsdXNoPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPiBvdXQpOwogY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqCTxhIGhyZWY9IiN4bWxPdXRwdXRCdWZmZXJHZXRDb250ZW50Ij54bWxPdXRwdXRCdWZmZXJHZXRDb250ZW50PC9hPgkoPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+IG91dCk7CkBAIC02OCw2ICs3MCw4IEBACiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+CTxhIGhyZWY9IiN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZkIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZkPC9hPgkoaW50IGZkLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+IGVuYyk7CiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+CTxhIGhyZWY9IiN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGUiPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZTwvYT4JKEZJTEUgKiBmaWxlLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+IGVuYyk7CiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+CTxhIGhyZWY9IiN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lPC9hPgkoY29uc3QgY2hhciAqIFVSSSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiBlbmMpOworPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JPGEgaHJlZj0iI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpOwordHlwZWRlZiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+IDxhIGhyZWY9IiN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CShjb25zdCBjaGFyICogVVJJLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+IGVuYyk7CiA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+CTxhIGhyZWY9IiN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPPC9hPgkoPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbElucHV0UmVhZENhbGxiYWNrIj54bWxJbnB1dFJlYWRDYWxsYmFjazwvYT4gaW9yZWFkLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sSW5wdXRDbG9zZUNhbGxiYWNrIj54bWxJbnB1dENsb3NlQ2FsbGJhY2s8L2E+IGlvY2xvc2UsIDxicj4JCQkJCQkJIHZvaWQgKiBpb2N0eCwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiBlbmMpOwogPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIiPnhtbFBhcnNlcklucHV0QnVmZmVyUHRyPC9hPgk8YSBocmVmPSIjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0iPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtPC9hPgkoY29uc3QgY2hhciAqIG1lbSwgPGJyPgkJCQkJCQkgaW50IHNpemUsIDxicj4JCQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmciPnhtbENoYXJFbmNvZGluZzwvYT4gZW5jKTsKIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyUHRyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cjwvYT4JPGEgaHJlZj0iI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYzwvYT4JKGNvbnN0IGNoYXIgKiBtZW0sIDxicj4JCQkJCQkJIGludCBzaXplLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+IGVuYyk7CkBAIC04MSw2ICs4NSw4IEBACiB2b2lkCTxhIGhyZWY9IiN4bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzIj54bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzPC9hPgkodm9pZCk7CiBpbnQJPGEgaHJlZj0iI3htbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MiPnhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3M8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sSW5wdXRNYXRjaENhbGxiYWNrIj54bWxJbnB1dE1hdGNoQ2FsbGJhY2s8L2E+IG1hdGNoRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dE9wZW5DYWxsYmFjayI+eG1sSW5wdXRPcGVuQ2FsbGJhY2s8L2E+IG9wZW5GdW5jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbElucHV0UmVhZENhbGxiYWNrIj54bWxJbnB1dFJlYWRDYWxsYmFjazwvYT4gcmVhZEZ1bmMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sSW5wdXRDbG9zZUNhbGxiYWNrIj54bWxJbnB1dENsb3NlQ2FsbGJhY2s8L2E+IGNsb3NlRnVuYyk7CiBpbnQJPGEgaHJlZj0iI3htbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzIj54bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrczwvYT4JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRNYXRjaENhbGxiYWNrIj54bWxPdXRwdXRNYXRjaENhbGxiYWNrPC9hPiBtYXRjaEZ1bmMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0T3BlbkNhbGxiYWNrIj54bWxPdXRwdXRPcGVuQ2FsbGJhY2s8L2E+IG9wZW5GdW5jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dFdyaXRlQ2FsbGJhY2siPnhtbE91dHB1dFdyaXRlQ2FsbGJhY2s8L2E+IHdyaXRlRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRDbG9zZUNhbGxiYWNrIj54bWxPdXRwdXRDbG9zZUNhbGxiYWNrPC9hPiBjbG9zZUZ1bmMpOworPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPgk8YSBocmVmPSIjeG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij54bWxUaHJEZWZPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQ8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpOworPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JPGEgaHJlZj0iI3htbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij54bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdDwvYT4JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpOwogPC9wcmU+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9InJlZnNlY3QxIiBsYW5nPSJlbiI+PGgyPkRlc2NyaXB0aW9uPC9oMj48L2Rpdj4KQEAgLTE4MSw2ICsxODcsMzUgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Cis8YSBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+CXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYwkoY29uc3QgY2hhciAqIFVSSSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHI8L2E+IGVuY29kZXIsIDxicj4JCQkJCQkJIGludCBjb21wcmVzc2lvbik8YnI+Cis8L3ByZT4KKzxwPlNpZ25hdHVyZSBmb3IgdGhlIGZ1bmN0aW9uIGRvaW5nIHRoZSBsb29rdXAgZm9yIGEgc3VpdGFibGUgb3V0cHV0IG1ldGhvZCBjb3JyZXNwb25kaW5nIHRvIGFuIFVSSS48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5VUkk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+dGhlIFVSSSB0byB3cml0ZSB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZW5jb2RlcjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmNvbXByZXNzaW9uPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE91dHB1dEJ1ZmZlclB0ciI+eG1sT3V0cHV0QnVmZmVyUHRyPC9hPiBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgTlVMTCBpZiBubyBtZXRob2Qgd2FzIGZvdW5kLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+CiA8YSBuYW1lPSJ4bWxPdXRwdXRDbG9zZUNhbGxiYWNrIj48L2E+RnVuY3Rpb24gdHlwZSB4bWxPdXRwdXRDbG9zZUNhbGxiYWNrPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sT3V0cHV0Q2xvc2VDYWxsYmFjawkJKHZvaWQgKiBjb250ZXh0KTxicj4KIDwvcHJlPgpAQCAtMjczLDYgKzMwOCwzMSBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj48L2E+RnVuY3Rpb24gdHlwZSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIiPnhtbFBhcnNlcklucHV0QnVmZmVyUHRyPC9hPgl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYwkoY29uc3QgY2hhciAqIFVSSSwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZyI+eG1sQ2hhckVuY29kaW5nPC9hPiBlbmMpPGJyPgorPC9wcmU+Cis8cD5TaWduYXR1cmUgZm9yIHRoZSBmdW5jdGlvbiBkb2luZyB0aGUgbG9va3VwIGZvciBhIHN1aXRhYmxlIGlucHV0IG1ldGhvZCBjb3JyZXNwb25kaW5nIHRvIGFuIFVSSS48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5VUkk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+dGhlIFVSSSB0byByZWFkIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgcmVxdWVzdGVkIHNvdXJjZSBlbmNvZGluZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyUHRyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cjwvYT4gaW4gY2FzZSBvZiBzdWNjZXNzIG9yIE5VTEwgaWYgbm8gbWV0aG9kIHdhcyBmb3VuZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0ieG1sQWxsb2NPdXRwdXRCdWZmZXIiPjwvYT54bWxBbGxvY091dHB1dEJ1ZmZlciAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sT3V0cHV0QnVmZmVyUHRyIj54bWxPdXRwdXRCdWZmZXJQdHI8L2E+CXhtbEFsbG9jT3V0cHV0QnVmZmVyCSg8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciI+eG1sQ2hhckVuY29kaW5nSGFuZGxlclB0cjwvYT4gZW5jb2Rlcik8YnI+CiA8L3ByZT4KQEAgLTg2OSw2ICs5MjksMjcgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Cis8YSBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQiPjwvYT54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4JeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0CSg8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+IGZ1bmMpPGJyPgorPC9wcmU+Cis8cD5SZWdpc3RlcnMgYSBjYWxsYmFjayBmb3IgVVJJIG91dHB1dCBmaWxlIGhhbmRsaW5nPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5mdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPnRoZSBvbGQgdmFsdWUgb2YgdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+CiA8YSBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVJTyI+PC9hPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUlPICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxPdXRwdXRCdWZmZXJQdHIiPnhtbE91dHB1dEJ1ZmZlclB0cjwvYT4JeG1sT3V0cHV0QnVmZmVyQ3JlYXRlSU8JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRXcml0ZUNhbGxiYWNrIj54bWxPdXRwdXRXcml0ZUNhbGxiYWNrPC9hPiBpb3dyaXRlLCA8YnI+CQkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRDbG9zZUNhbGxiYWNrIj54bWxPdXRwdXRDbG9zZUNhbGxiYWNrPC9hPiBpb2Nsb3NlLCA8YnI+CQkJCQkJIHZvaWQgKiBpb2N0eCwgPGJyPgkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciI+eG1sQ2hhckVuY29kaW5nSGFuZGxlclB0cjwvYT4gZW5jb2Rlcik8YnI+CiA8L3ByZT4KQEAgLTExNDYsNiArMTIyNywyNyBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ij48L2E+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L2E+CXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0CSg8YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPiBmdW5jKTxicj4KKzwvcHJlPgorPHA+UmVnaXN0ZXJzIGEgY2FsbGJhY2sgZm9yIFVSSSBpbnB1dCBmaWxlIGhhbmRsaW5nPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+ZnVuYzwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5mdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+dGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KIDxhIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlSU8iPjwvYT54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdHI8L2E+CXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlSU8JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dFJlYWRDYWxsYmFjayI+eG1sSW5wdXRSZWFkQ2FsbGJhY2s8L2E+IGlvcmVhZCwgPGJyPgkJCQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbElucHV0Q2xvc2VDYWxsYmFjayI+eG1sSW5wdXRDbG9zZUNhbGxiYWNrPC9hPiBpb2Nsb3NlLCA8YnI+CQkJCQkJCSB2b2lkICogaW9jdHgsIDxicj4JCQkJCQkJIDxhIGhyZWY9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmciPnhtbENoYXJFbmNvZGluZzwvYT4gZW5jKTxicj4KIDwvcHJlPgpAQCAtMTIxMSw3ICsxMzEzLDcgQEAKIDxhIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljIj48L2E+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyUHRyIj54bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cjwvYT4JeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMJKGNvbnN0IGNoYXIgKiBtZW0sIDxicj4JCQkJCQkJIGludCBzaXplLCA8YnI+CQkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIj54bWxDaGFyRW5jb2Rpbmc8L2E+IGVuYyk8YnI+CiA8L3ByZT4KLTxwPkNyZWF0ZSBhIGJ1ZmZlcmVkIHBhcnNlciBpbnB1dCBmb3IgdGhlIHByb2dyZXNzaXZlIHBhcnNpbmcgZm9yIHRoZSBpbnB1dCBmcm9tIGFuIGltbXV0YWJsZSBtZW1vcnkgYXJlYS4gVGhpcyB3aWxsIG5vdCBjb3B5IHRoZSBtZW1vcnkgYXJlYSB0byB0aGUgYnVmZmVyLCBidXQgdGhlIG1lbW9yeSBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgdW50aWwgdGhlIGVuZCBvZiB0aGUgcGFyc2luZywgdGhpcyBpcyB1c2VmdWwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyBtbWFwJ2VkIGZpbGUuPC9wPgorPHA+REVQUkVDQVRFRDogVXNlIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbSI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW08L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTE0NDIsNiArMTU0NCw0OCBAQAogPC90YWJsZT48L2Rpdj4KIDwvZGl2PgogPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCI+PC9hPnhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPgl4bWxUaHJEZWZPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQJKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmZ1bmM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+Cis8YSBuYW1lPSJ4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCI+PC9hPnhtbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jPC9hPgl4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdAkoPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzwvYT4gZnVuYyk8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmZ1bmM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KIDwvZGl2PgogPC9kaXY+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbGVycm9yLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbGVycm9yLmh0bWwKaW5kZXggZjk3YzhlMS4uNjc4NzcwZiAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWxlcnJvci5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sZXJyb3IuaHRtbApAQCAtMjgsMTEgKzI4LDExIEBACiB0eXBlZGVmIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+ICogPGEgaHJlZj0iI3htbEVycm9yUHRyIj54bWxFcnJvclB0cjwvYT47CiB0eXBlZGVmIGVudW0gPGEgaHJlZj0iI3htbFBhcnNlckVycm9ycyI+eG1sUGFyc2VyRXJyb3JzPC9hPjsKIHZvaWQJPGEgaHJlZj0iI2luaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyI+aW5pdEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jPC9hPgkoPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEdlbmVyaWNFcnJvckZ1bmMiPnhtbEdlbmVyaWNFcnJvckZ1bmM8L2E+ICogaGFuZGxlcik7Ci1pbnQJPGEgaHJlZj0iI3htbENvcHlFcnJvciI+eG1sQ29weUVycm9yPC9hPgkJCSg8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sRXJyb3JQdHIiPnhtbEVycm9yUHRyPC9hPiBmcm9tLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEVycm9yUHRyIj54bWxFcnJvclB0cjwvYT4gdG8pOwotPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEVycm9yUHRyIj54bWxFcnJvclB0cjwvYT4JPGEgaHJlZj0iI3htbEN0eHRHZXRMYXN0RXJyb3IiPnhtbEN0eHRHZXRMYXN0RXJyb3I8L2E+CSh2b2lkICogY3R4KTsKK2ludAk8YSBocmVmPSIjeG1sQ29weUVycm9yIj54bWxDb3B5RXJyb3I8L2E+CQkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+ICogZnJvbSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+IHRvKTsKK2NvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+ICoJPGEgaHJlZj0iI3htbEN0eHRHZXRMYXN0RXJyb3IiPnhtbEN0eHRHZXRMYXN0RXJyb3I8L2E+CSh2b2lkICogY3R4KTsKIHZvaWQJPGEgaHJlZj0iI3htbEN0eHRSZXNldExhc3RFcnJvciI+eG1sQ3R4dFJlc2V0TGFzdEVycm9yPC9hPgkJKHZvaWQgKiBjdHgpOwogdHlwZWRlZiB2b2lkIDxhIGhyZWY9IiN4bWxHZW5lcmljRXJyb3JGdW5jIj54bWxHZW5lcmljRXJyb3JGdW5jPC9hPgkJKHZvaWQgKiBjdHgsIDxicj4JCQkJCSBjb25zdCBjaGFyICogbXNnLCA8YnI+CQkJCQkgLi4uIC4uLik7Ci08YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sRXJyb3JQdHIiPnhtbEVycm9yUHRyPC9hPgk8YSBocmVmPSIjeG1sR2V0TGFzdEVycm9yIj54bWxHZXRMYXN0RXJyb3I8L2E+CQkodm9pZCk7Citjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sRXJyb3IiPnhtbEVycm9yPC9hPiAqCTxhIGhyZWY9IiN4bWxHZXRMYXN0RXJyb3IiPnhtbEdldExhc3RFcnJvcjwvYT4JKHZvaWQpOwogdm9pZAk8YSBocmVmPSIjeG1sUGFyc2VyRXJyb3IiPnhtbFBhcnNlckVycm9yPC9hPgkJCSh2b2lkICogY3R4LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIG1zZywgPGJyPgkJCQkJIC4uLiAuLi4pOwogdm9pZAk8YSBocmVmPSIjeG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dCI+eG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0UHRyIj54bWxQYXJzZXJJbnB1dFB0cjwvYT4gaW5wdXQpOwogdm9pZAk8YSBocmVmPSIjeG1sUGFyc2VyUHJpbnRGaWxlSW5mbyI+eG1sUGFyc2VyUHJpbnRGaWxlSW5mbzwvYT4JCSg8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxQYXJzZXJJbnB1dFB0ciI+eG1sUGFyc2VySW5wdXRQdHI8L2E+IGlucHV0KTsKQEAgLTQzLDcgKzQzLDkgQEAKIHZvaWQJPGEgaHJlZj0iI3htbFJlc2V0TGFzdEVycm9yIj54bWxSZXNldExhc3RFcnJvcjwvYT4JCSh2b2lkKTsKIHZvaWQJPGEgaHJlZj0iI3htbFNldEdlbmVyaWNFcnJvckZ1bmMiPnhtbFNldEdlbmVyaWNFcnJvckZ1bmM8L2E+CQkodm9pZCAqIGN0eCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxHZW5lcmljRXJyb3JGdW5jIj54bWxHZW5lcmljRXJyb3JGdW5jPC9hPiBoYW5kbGVyKTsKIHZvaWQJPGEgaHJlZj0iI3htbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMiPnhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmM8L2E+CSh2b2lkICogY3R4LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbFN0cnVjdHVyZWRFcnJvckZ1bmMiPnhtbFN0cnVjdHVyZWRFcnJvckZ1bmM8L2E+IGhhbmRsZXIpOwotdHlwZWRlZiB2b2lkIDxhIGhyZWY9IiN4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIj54bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jPC9hPgkJKHZvaWQgKiB1c2VyRGF0YSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+IGVycm9yKTsKK3R5cGVkZWYgdm9pZCA8YSBocmVmPSIjeG1sU3RydWN0dXJlZEVycm9yRnVuYyI+eG1sU3RydWN0dXJlZEVycm9yRnVuYzwvYT4JCSh2b2lkICogdXNlckRhdGEsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sRXJyb3IiPnhtbEVycm9yPC9hPiAqIGVycm9yKTsKK3ZvaWQJPGEgaHJlZj0iI3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMiPnhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmM8L2E+CSh2b2lkICogY3R4LCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEdlbmVyaWNFcnJvckZ1bmMiPnhtbEdlbmVyaWNFcnJvckZ1bmM8L2E+IGhhbmRsZXIpOwordm9pZAk8YSBocmVmPSIjeG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyI+eG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYzwvYT4JKHZvaWQgKiBjdHgsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sU3RydWN0dXJlZEVycm9yRnVuYyI+eG1sU3RydWN0dXJlZEVycm9yRnVuYzwvYT4gaGFuZGxlcik7CiA8L3ByZT4KIDwvZGl2PgogPGRpdiBjbGFzcz0icmVmc2VjdDEiIGxhbmc9ImVuIj48aDI+RGVzY3JpcHRpb248L2gyPjwvZGl2PgpAQCAtMjUwLDYgKzI1Miw3IEBACiAgICAgPGEgbmFtZT0iWE1MX0VSUl9OQU1FX1RPT19MT05HIj5YTUxfRVJSX05BTUVfVE9PX0xPTkc8L2E+ID0gMTEwIC8qIDExMCAqLwogICAgIDxhIG5hbWU9IlhNTF9FUlJfVVNFUl9TVE9QIj5YTUxfRVJSX1VTRVJfU1RPUDwvYT4gPSAxMTEgLyogMTExICovCiAgICAgPGEgbmFtZT0iWE1MX0VSUl9DT01NRU5UX0FCUlVQVExZX0VOREVEIj5YTUxfRVJSX0NPTU1FTlRfQUJSVVBUTFlfRU5ERUQ8L2E+ID0gMTEyIC8qIDExMiAqLworICAgIDxhIG5hbWU9IlhNTF9XQVJfRU5DT0RJTkdfTUlTTUFUQ0giPlhNTF9XQVJfRU5DT0RJTkdfTUlTTUFUQ0g8L2E+ID0gMTEzIC8qIDExMyAqLwogICAgIDxhIG5hbWU9IlhNTF9OU19FUlJfWE1MX05BTUVTUEFDRSI+WE1MX05TX0VSUl9YTUxfTkFNRVNQQUNFPC9hPiA9IDIwMAogICAgIDxhIG5hbWU9IlhNTF9OU19FUlJfVU5ERUZJTkVEX05BTUVTUEFDRSI+WE1MX05TX0VSUl9VTkRFRklORURfTkFNRVNQQUNFPC9hPiA9IDIwMSAvKiAyMDEgKi8KICAgICA8YSBuYW1lPSJYTUxfTlNfRVJSX1FOQU1FIj5YTUxfTlNfRVJSX1FOQU1FPC9hPiA9IDIwMiAvKiAyMDIgKi8KQEAgLTkwNiw3ICs5MDksNyBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KIDxhIG5hbWU9InhtbFN0cnVjdHVyZWRFcnJvckZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sU3RydWN0dXJlZEVycm9yRnVuYwkJKHZvaWQgKiB1c2VyRGF0YSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+IGVycm9yKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFN0cnVjdHVyZWRFcnJvckZ1bmMJCSh2b2lkICogdXNlckRhdGEsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sRXJyb3IiPnhtbEVycm9yPC9hPiAqIGVycm9yKTxicj4KIDwvcHJlPgogPHA+U2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiB0byB1c2Ugd2hlbiB0aGVyZSBpcyBhbiBlcnJvciBhbmQgdGhlIG1vZHVsZSBoYW5kbGVzIHRoZSBuZXcgZXJyb3IgcmVwb3J0aW5nIG1lY2hhbmlzbS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgpAQCAtOTI5LDcgKzkzMiw3IEBACiA8YSBuYW1lPSJpbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMiPjwvYT5pbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJaW5pdEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jCSg8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sR2VuZXJpY0Vycm9yRnVuYyI+eG1sR2VuZXJpY0Vycm9yRnVuYzwvYT4gKiBoYW5kbGVyKTxicj4KIDwvcHJlPgotPHA+U2V0IG9yIHJlc2V0IChpZiBOVUxMKSB0aGUgZGVmYXVsdCBoYW5kbGVyIGZvciBnZW5lcmljIGVycm9ycyB0byB0aGUgYnVpbHRpbiBlcnJvciBmdW5jdGlvbi48L3A+Cis8cD5ERVBSRUNBVEVEOiBVc2UgPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbFNldEdlbmVyaWNFcnJvckZ1bmMiPnhtbFNldEdlbmVyaWNFcnJvckZ1bmM8L2E+LiBTZXQgb3IgcmVzZXQgKGlmIE5VTEwpIHRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIGdlbmVyaWMgZXJyb3JzIHRvIHRoZSBidWlsdGluIGVycm9yIGZ1bmN0aW9uLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT48dHI+CkBAIC05NDIsNyArOTQ1LDcgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxDb3B5RXJyb3IiPjwvYT54bWxDb3B5RXJyb3IgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxDb3B5RXJyb3IJCQkoPGEgaHJlZj0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbEVycm9yUHRyIj54bWxFcnJvclB0cjwvYT4gZnJvbSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+IHRvKTxicj4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sQ29weUVycm9yCQkJKGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+ICogZnJvbSwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+IHRvKTxicj4KIDwvcHJlPgogPHA+U2F2ZSB0aGUgb3JpZ2luYWwgZXJyb3IgdG8gdGhlIG5ldyBwbGFjZS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgpAQCAtOTY3LDcgKzk3MCw3IEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sQ3R4dEdldExhc3RFcnJvciI+PC9hPnhtbEN0eHRHZXRMYXN0RXJyb3IgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+CXhtbEN0eHRHZXRMYXN0RXJyb3IJKHZvaWQgKiBjdHgpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+ICoJeG1sQ3R4dEdldExhc3RFcnJvcgkodm9pZCAqIGN0eCk8YnI+CiA8L3ByZT4KIDxwPkdldCB0aGUgbGFzdCBwYXJzaW5nIGVycm9yIHJlZ2lzdGVyZWQuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KQEAgLTEwMDMsMTQgKzEwMDYsMTQgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+CiA8YSBuYW1lPSJ4bWxHZXRMYXN0RXJyb3IiPjwvYT54bWxHZXRMYXN0RXJyb3IgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvclB0ciI+eG1sRXJyb3JQdHI8L2E+CXhtbEdldExhc3RFcnJvcgkJKHZvaWQpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxFcnJvciI+eG1sRXJyb3I8L2E+ICoJeG1sR2V0TGFzdEVycm9yCSh2b2lkKTxicj4KIDwvcHJlPgogPHA+R2V0IHRoZSBsYXN0IGdsb2JhbCBlcnJvciByZWdpc3RlcmVkLiBUaGlzIGlzIHBlciB0aHJlYWQgaWYgY29tcGlsZWQgd2l0aCB0aHJlYWQgc3VwcG9ydC48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD5OVUxMIGlmIG5vIGVycm9yIG9jY3VycmVkIG9yIGEgcG9pbnRlciB0byB0aGUgZXJyb3I8L3RkPgorPHRkPmEgcG9pbnRlciB0byB0aGUgZXJyb3I8L3RkPgogPC90cj48L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KIDwvZGl2PgpAQCAtMTIxMCw2ICsxMjEzLDQ4IEBACiA8L3RhYmxlPjwvZGl2PgogPC9kaXY+CiA8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYyI+PC9hPnhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYwkodm9pZCAqIGN0eCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxHZW5lcmljRXJyb3JGdW5jIj54bWxHZW5lcmljRXJyb3JGdW5jPC9hPiBoYW5kbGVyKTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+Y3R4PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFuZGxlcjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyI+PC9hPnhtbFRockRlZlNldFN0cnVjdHVyZWRFcnJvckZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYwkodm9pZCAqIGN0eCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCN4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIj54bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jPC9hPiBoYW5kbGVyKTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+Y3R4PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+aGFuZGxlcjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+CiA8L2Rpdj4KIDwvZGl2PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWxleHBvcnRzLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbGV4cG9ydHMuaHRtbAppbmRleCA5YmY0NzVlLi45MzdkN2NiIDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbGV4cG9ydHMuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbGV4cG9ydHMuaHRtbApAQCAtMjIsMTEgKzIyLDcgQEAKIDxwPkF1dGhvcihzKTogPC9wPgogPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgogPGgyPlN5bm9wc2lzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfRExMX0lNUE9SVCI+TElCWE1MX0RMTF9JTVBPUlQ8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjWE1MQ0FMTCI+WE1MQ0FMTDwvYT47Ci0jZGVmaW5lIDxhIGhyZWY9IiNYTUxDREVDTCI+WE1MQ0RFQ0w8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjWE1MUFVCRlVOIj5YTUxQVUJGVU48L2E+OwotI2RlZmluZSA8YSBocmVmPSIjWE1MUFVCTElDIj5YTUxQVUJMSUM8L2E+OworPHByZSBjbGFzcz0ic3lub3BzaXMiPiNkZWZpbmUgPGEgaHJlZj0iI1hNTFBVQkZVTiI+WE1MUFVCRlVOPC9hPjsKICNkZWZpbmUgPGEgaHJlZj0iI1hNTFBVQlZBUiI+WE1MUFVCVkFSPC9hPjsKIDwvcHJlPgogPC9kaXY+CkBAIC0zNiwzMCArMzIsNiBAQAogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJMSUJYTUxfRExMX0lNUE9SVCI+TWFjcm8gPC9hPkxJQlhNTF9ETExfSU1QT1JUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfRExMX0lNUE9SVCI+TElCWE1MX0RMTF9JTVBPUlQ8L2E+OwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJYTUxDQUxMIj5NYWNybyA8L2E+WE1MQ0FMTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSA8YSBocmVmPSIjWE1MQ0FMTCI+WE1MQ0FMTDwvYT47Ci08L3ByZT4KLTxwPk1hY3JvIHdoaWNoIGRlY2xhcmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGV4cG9ydGVkIGZ1bmN0aW9uczwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KLTxhIG5hbWU9IlhNTENERUNMIj5NYWNybyA8L2E+WE1MQ0RFQ0w8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTENERUNMIj5YTUxDREVDTDwvYT47Ci08L3ByZT4KLTxwPk1hY3JvIHdoaWNoIGRlY2xhcmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IHVzZSAnLi4uJy48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+CiA8YSBuYW1lPSJYTUxQVUJGVU4iPk1hY3JvIDwvYT5YTUxQVUJGVU48L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTFBVQkZVTiI+WE1MUFVCRlVOPC9hPjsKIDwvcHJlPgpAQCAtNjgsMTQgKzQwLDYgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJYTUxQVUJMSUMiPk1hY3JvIDwvYT5YTUxQVUJMSUM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI1hNTFBVQkxJQyI+WE1MUFVCTElDPC9hPjsKLTwvcHJlPgotPHA+TWFjcm8gd2hpY2ggZGVjbGFyZXMgYSBwdWJsaWMgc3ltYm9sPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgogPGEgbmFtZT0iWE1MUFVCVkFSIj5NYWNybyA8L2E+WE1MUFVCVkFSPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYTUxQVUJWQVIiPlhNTFBVQlZBUjwvYT47CiA8L3ByZT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sbWVtb3J5Lmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbG1lbW9yeS5odG1sCmluZGV4IGUxYWVmOWQuLjBhMTE5OGQgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sbWVtb3J5Lmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi14bWxtZW1vcnkuaHRtbApAQCAtMjIsMTIgKzIyLDcgQEAKIDxwPkF1dGhvcihzKTogRGFuaWVsIFZlaWxsYXJkIDwvcD4KIDxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KIDxoMj5TeW5vcHNpczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2RlZmluZSA8YSBocmVmPSIjREVCVUdfTUVNT1JZIj5ERUJVR19NRU1PUlk8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjeG1sTWFsbG9jIj54bWxNYWxsb2M8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjeG1sTWFsbG9jQXRvbWljIj54bWxNYWxsb2NBdG9taWM8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjeG1sTWVtU3RyZHVwIj54bWxNZW1TdHJkdXA8L2E+OwotI2RlZmluZSA8YSBocmVmPSIjeG1sUmVhbGxvYyI+eG1sUmVhbGxvYzwvYT47Ci12b2lkCTxhIGhyZWY9IiN4bWxDbGVhbnVwTWVtb3J5Ij54bWxDbGVhbnVwTWVtb3J5PC9hPgkJKHZvaWQpOworPHByZSBjbGFzcz0ic3lub3BzaXMiPnZvaWQJPGEgaHJlZj0iI3htbENsZWFudXBNZW1vcnkiPnhtbENsZWFudXBNZW1vcnk8L2E+CQkodm9pZCk7CiB0eXBlZGVmIHZvaWQgPGEgaHJlZj0iI3htbEZyZWVGdW5jIj54bWxGcmVlRnVuYzwvYT4JCQkodm9pZCAqIG1lbSk7CiBpbnQJPGEgaHJlZj0iI3htbEdjTWVtR2V0Ij54bWxHY01lbUdldDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxGcmVlRnVuYyI+eG1sRnJlZUZ1bmM8L2E+ICogZnJlZUZ1bmMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1hbGxvY0Z1bmMiPnhtbE1hbGxvY0Z1bmM8L2E+ICogbWFsbG9jRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWFsbG9jRnVuYyI+eG1sTWFsbG9jRnVuYzwvYT4gKiBtYWxsb2NBdG9taWNGdW5jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxSZWFsbG9jRnVuYyI+eG1sUmVhbGxvY0Z1bmM8L2E+ICogcmVhbGxvY0Z1bmMsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbFN0cmR1cEZ1bmMiPnhtbFN0cmR1cEZ1bmM8L2E+ICogc3RyZHVwRnVuYyk7CiBpbnQJPGEgaHJlZj0iI3htbEdjTWVtU2V0dXAiPnhtbEdjTWVtU2V0dXA8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sRnJlZUZ1bmMiPnhtbEZyZWVGdW5jPC9hPiBmcmVlRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWFsbG9jRnVuYyI+eG1sTWFsbG9jRnVuYzwvYT4gbWFsbG9jRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWFsbG9jRnVuYyI+eG1sTWFsbG9jRnVuYzwvYT4gbWFsbG9jQXRvbWljRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sUmVhbGxvY0Z1bmMiPnhtbFJlYWxsb2NGdW5jPC9hPiByZWFsbG9jRnVuYywgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sU3RyZHVwRnVuYyI+eG1sU3RyZHVwRnVuYzwvYT4gc3RyZHVwRnVuYyk7CkBAIC00NCw2ICszOSw3IEBACiB2b2lkICoJPGEgaHJlZj0iI3htbE1lbVJlYWxsb2MiPnhtbE1lbVJlYWxsb2M8L2E+CQkJKHZvaWQgKiBwdHIsIDxicj4JCQkJCSBzaXplX3Qgc2l6ZSk7CiBpbnQJPGEgaHJlZj0iI3htbE1lbVNldHVwIj54bWxNZW1TZXR1cDwvYT4JCQkoPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxGcmVlRnVuYyI+eG1sRnJlZUZ1bmM8L2E+IGZyZWVGdW5jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNYWxsb2NGdW5jIj54bWxNYWxsb2NGdW5jPC9hPiBtYWxsb2NGdW5jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxSZWFsbG9jRnVuYyI+eG1sUmVhbGxvY0Z1bmM8L2E+IHJlYWxsb2NGdW5jLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxTdHJkdXBGdW5jIj54bWxTdHJkdXBGdW5jPC9hPiBzdHJkdXBGdW5jKTsKIHZvaWQJPGEgaHJlZj0iI3htbE1lbVNob3ciPnhtbE1lbVNob3c8L2E+CQkJKEZJTEUgKiBmcCwgPGJyPgkJCQkJIGludCBucik7CitzaXplX3QJPGEgaHJlZj0iI3htbE1lbVNpemUiPnhtbE1lbVNpemU8L2E+CQkJKHZvaWQgKiBwdHIpOwogY2hhciAqCTxhIGhyZWY9IiN4bWxNZW1TdHJkdXBMb2MiPnhtbE1lbVN0cmR1cExvYzwvYT4JCQkoY29uc3QgY2hhciAqIHN0ciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBmaWxlLCA8YnI+CQkJCQkgaW50IGxpbmUpOwogaW50CTxhIGhyZWY9IiN4bWxNZW1Vc2VkIj54bWxNZW1Vc2VkPC9hPgkJCSh2b2lkKTsKIHZvaWQJPGEgaHJlZj0iI3htbE1lbW9yeUR1bXAiPnhtbE1lbW9yeUR1bXA8L2E+CQkJKHZvaWQpOwpAQCAtNTksMTQgKzU1LDYgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgotPGEgbmFtZT0iREVCVUdfTUVNT1JZIj5NYWNybyA8L2E+REVCVUdfTUVNT1JZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNERUJVR19NRU1PUlkiPkRFQlVHX01FTU9SWTwvYT47Ci08L3ByZT4KLTxwPjxhIGhyZWY9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjREVCVUdfTUVNT1JZIj5ERUJVR19NRU1PUlk8L2E+IHJlcGxhY2VzIHRoZSBhbGxvY2F0b3Igd2l0aCBhIGNvbGxlY3QgYW5kIGRlYnVnIHNoZWxsIHRvIHRoZSBsaWJjIGFsbG9jYXRvci4gPGEgaHJlZj0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCNERUJVR19NRU1PUlkiPkRFQlVHX01FTU9SWTwvYT4gc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIHdoZW4gZGVidWdnaW5nIGxpYnhtbCBpLmUuIGlmIGxpYnhtbCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggLS13aXRoLWRlYnVnLW1lbSB0b28uICNkZWZpbmUgREVCVUdfTUVNT1JZX0ZSRUVEICNkZWZpbmUgPGEgaHJlZj0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjREVCVUdfTUVNT1JZX0xPQ0FUSU9OIj5ERUJVR19NRU1PUllfTE9DQVRJT048L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgogPGEgbmFtZT0ieG1sRnJlZUZ1bmMiPjwvYT5GdW5jdGlvbiB0eXBlIHhtbEZyZWVGdW5jPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbEZyZWVGdW5jCQkJKHZvaWQgKiBtZW0pPGJyPgogPC9wcmU+CkBAIC0xNDksMTAgKzEzNyw1MCBAQAogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KIDxoMz4KKzxhIG5hbWU9InhtbEZyZWUiPlZhcmlhYmxlIDwvYT54bWxGcmVlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbEZyZWVGdW5jIj54bWxGcmVlRnVuYzwvYT4geG1sRnJlZTsKKzwvcHJlPgorPHA+QG1lbTogYW4gYWxyZWFkeSBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5IFRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBsaWJ4bWwgZnJlZSgpIGltcGxlbWVudGF0aW9uPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sTWFsbG9jIj5WYXJpYWJsZSA8L2E+eG1sTWFsbG9jPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1hbGxvY0Z1bmMiPnhtbE1hbGxvY0Z1bmM8L2E+IHhtbE1hbGxvYzsKKzwvcHJlPgorPHA+QHNpemU6IHRoZSBzaXplIHJlcXVlc3RlZCBpbiBieXRlcyBUaGUgdmFyaWFibGUgaG9sZGluZyB0aGUgbGlieG1sIG1hbGxvYygpIGltcGxlbWVudGF0aW9uIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sTWFsbG9jQXRvbWljIj5WYXJpYWJsZSA8L2E+eG1sTWFsbG9jQXRvbWljPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1hbGxvY0Z1bmMiPnhtbE1hbGxvY0Z1bmM8L2E+IHhtbE1hbGxvY0F0b21pYzsKKzwvcHJlPgorPHA+QHNpemU6IHRoZSBzaXplIHJlcXVlc3RlZCBpbiBieXRlcyBUaGUgdmFyaWFibGUgaG9sZGluZyB0aGUgbGlieG1sIG1hbGxvYygpIGltcGxlbWVudGF0aW9uIGZvciBhdG9taWMgZGF0YSAoaS5lLiBibG9ja3Mgbm90IGNvbnRhaW5pbmcgcG9pbnRlcnMpLCB1c2VmdWwgd2hlbiB1c2luZyBhIGdhcmJhZ2UgY29sbGVjdGluZyBhbGxvY2F0b3IuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sTWVtU3RyZHVwIj5WYXJpYWJsZSA8L2E+eG1sTWVtU3RyZHVwPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbFN0cmR1cEZ1bmMiPnhtbFN0cmR1cEZ1bmM8L2E+IHhtbE1lbVN0cmR1cDsKKzwvcHJlPgorPHA+QHN0cjogYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIFRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBsaWJ4bWwgc3RyZHVwKCkgaW1wbGVtZW50YXRpb24gUmV0dXJucyB0aGUgY29weSBvZiB0aGUgc3RyaW5nIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvcjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFJlYWxsb2MiPlZhcmlhYmxlIDwvYT54bWxSZWFsbG9jPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbFJlYWxsb2NGdW5jIj54bWxSZWFsbG9jRnVuYzwvYT4geG1sUmVhbGxvYzsKKzwvcHJlPgorPHA+QG1lbTogYW4gYWxyZWFkeSBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5IEBzaXplOiB0aGUgbmV3IHNpemUgcmVxdWVzdGVkIGluIGJ5dGVzIFRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBsaWJ4bWwgcmVhbGxvYygpIGltcGxlbWVudGF0aW9uIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSByZWFsbG9jYXRlZCBibG9jayBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3I8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+CiA8YSBuYW1lPSJ4bWxDbGVhbnVwTWVtb3J5Ij48L2E+eG1sQ2xlYW51cE1lbW9yeSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxDbGVhbnVwTWVtb3J5CQkodm9pZCk8YnI+CiA8L3ByZT4KLTxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDbGVhbnVwUGFyc2VyIj54bWxDbGVhbnVwUGFyc2VyPC9hPiB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4gPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDbGVhbnVwUGFyc2VyIj54bWxDbGVhbnVwUGFyc2VyPC9hPiBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24ndCBoYXZlIGNhbGwgY2xlYW51cCBmdW5jdGlvbnMgYXQgYWxsLiBGcmVlIHVwIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgbGlicmFyeSBmb3IgaXRzIG93biB1c2UuIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgdXNlciBsZXZlbCBjb2RlLjwvcD4KKzxwPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbid0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuPC9wPgogPC9kaXY+CiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgpAQCAtMjM0LDEyICsyNjIsMTIgQEAKIDxhIG5hbWU9InhtbEluaXRNZW1vcnkiPjwvYT54bWxJbml0TWVtb3J5ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sSW5pdE1lbW9yeQkJCSh2b2lkKTxicj4KIDwvcHJlPgotPHA+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEluaXRQYXJzZXIiPnhtbEluaXRQYXJzZXI8L2E+IHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuIEluaXRpYWxpemUgdGhlIG1lbW9yeSBsYXllci48L3A+Cis8cD5ERVBSRUNBVEVEOiBBbGlhcyBmb3IgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+PHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD4wIG9uIHN1Y2Nlc3M8L3RkPgorPHRkPjwvdGQ+CiA8L3RyPjwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgogPC9kaXY+CkBAIC01MDMsNiArNTMxLDI3IEBACiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgorPGEgbmFtZT0ieG1sTWVtU2l6ZSI+PC9hPnhtbE1lbVNpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnNpemVfdAl4bWxNZW1TaXplCQkJKHZvaWQgKiBwdHIpPGJyPgorPC9wcmU+Cis8cD48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5wdHI8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgbWVtb3J5IGFsbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgYSBtZW1vcnkgYWxsb2NhdGlvbi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0ieG1sTWVtU3RyZHVwTG9jIj48L2E+eG1sTWVtU3RyZHVwTG9jICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jaGFyICoJeG1sTWVtU3RyZHVwTG9jCQkJKGNvbnN0IGNoYXIgKiBzdHIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZmlsZSwgPGJyPgkJCQkJIGludCBsaW5lKTxicj4KIDwvcHJlPgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCBiL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwKaW5kZXggMDIzMDY4Ny4uNzZiM2E3MiAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sCkBAIC0xMDksNiArMTA5LDcgQEAKIGludAk8YSBocmVmPSIjeG1sVGV4dFJlYWRlclNjaGVtYVZhbGlkYXRlIj54bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGU8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiB4c2QpOwogaW50CTxhIGhyZWY9IiN4bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGVDdHh0Ij54bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGVDdHh0PC9hPgkoPGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPiByZWFkZXIsIDxicj4JCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbHNjaGVtYXMuaHRtbCN4bWxTY2hlbWFWYWxpZEN0eHRQdHIiPnhtbFNjaGVtYVZhbGlkQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGludCBvcHRpb25zKTsKIHZvaWQJPGEgaHJlZj0iI3htbFRleHRSZWFkZXJTZXRFcnJvckhhbmRsZXIiPnhtbFRleHRSZWFkZXJTZXRFcnJvckhhbmRsZXI8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlckVycm9yRnVuYyI+eG1sVGV4dFJlYWRlckVycm9yRnVuYzwvYT4gZiwgPGJyPgkJCQkJIHZvaWQgKiBhcmcpOwordm9pZAk8YSBocmVmPSIjeG1sVGV4dFJlYWRlclNldE1heEFtcGxpZmljYXRpb24iPnhtbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uPC9hPgkoPGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPiByZWFkZXIsIDxicj4JCQkJCQkgdW5zaWduZWQgbWF4QW1wbCk7CiBpbnQJPGEgaHJlZj0iI3htbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wIj54bWxUZXh0UmVhZGVyU2V0UGFyc2VyUHJvcDwvYT4JKDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gcmVhZGVyLCA8YnI+CQkJCQkgaW50IHByb3AsIDxicj4JCQkJCSBpbnQgdmFsdWUpOwogaW50CTxhIGhyZWY9IiN4bWxUZXh0UmVhZGVyU2V0U2NoZW1hIj54bWxUZXh0UmVhZGVyU2V0U2NoZW1hPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gcmVhZGVyLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxzY2hlbWFzLmh0bWwjeG1sU2NoZW1hUHRyIj54bWxTY2hlbWFQdHI8L2E+IHNjaGVtYSk7CiB2b2lkCTxhIGhyZWY9IiN4bWxUZXh0UmVhZGVyU2V0U3RydWN0dXJlZEVycm9ySGFuZGxlciI+eG1sVGV4dFJlYWRlclNldFN0cnVjdHVyZWRFcnJvckhhbmRsZXI8L2E+CSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJCSA8YSBocmVmPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sU3RydWN0dXJlZEVycm9yRnVuYyI+eG1sU3RydWN0dXJlZEVycm9yRnVuYzwvYT4gZiwgPGJyPgkJCQkJCSB2b2lkICogYXJnKTsKQEAgLTMxMiw3ICszMTMsNyBAQAogPGEgbmFtZT0ieG1sUmVhZGVyRm9yRG9jIj48L2E+eG1sUmVhZGVyRm9yRG9jICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+CXhtbFJlYWRlckZvckRvYwkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGN1ciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBVUkwsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk8YnI+CiA8L3ByZT4KLTxwPkNyZWF0ZSBhbiB4bWx0ZXh0UmVhZGVyIGZvciBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50LiBUaGUgcGFyc2luZyBmbGFncyBAb3B0aW9ucyBhcmUgYSBjb21iaW5hdGlvbiBvZiB4bWxQYXJzZXJPcHRpb24uPC9wPgorPHA+Q3JlYXRlIGFuIHhtbHRleHRSZWFkZXIgZm9yIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyT3B0aW9uIj54bWxQYXJzZXJPcHRpb248L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTM0Niw3ICszNDcsNyBAQAogPGEgbmFtZT0ieG1sUmVhZGVyRm9yRmQiPjwvYT54bWxSZWFkZXJGb3JGZCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPgl4bWxSZWFkZXJGb3JGZAkoaW50IGZkLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIFVSTCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJIGludCBvcHRpb25zKTxicj4KIDwvcHJlPgotPHA+Q3JlYXRlIGFuIHhtbHRleHRSZWFkZXIgZm9yIGFuIFhNTCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgcGFyc2luZyBmbGFncyBAb3B0aW9ucyBhcmUgYSBjb21iaW5hdGlvbiBvZiB4bWxQYXJzZXJPcHRpb24uIE5PVEUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSByZWFkZXIgaXMgY2xvc2VkIG9yIHJlc2V0LjwvcD4KKzxwPkNyZWF0ZSBhbiB4bWx0ZXh0UmVhZGVyIGZvciBhbiBYTUwgZnJvbSBhIGZpbGUgZGVzY3JpcHRvci4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT4uIE5PVEUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSByZWFkZXIgaXMgY2xvc2VkIG9yIHJlc2V0LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTM4MCw3ICszODEsNyBAQAogPGEgbmFtZT0ieG1sUmVhZGVyRm9yRmlsZSI+PC9hPnhtbFJlYWRlckZvckZpbGUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4JeG1sUmVhZGVyRm9yRmlsZQkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJCSBpbnQgb3B0aW9ucyk8YnI+CiA8L3ByZT4KLTxwPnBhcnNlIGFuIFhNTCBmaWxlIGZyb20gdGhlIGZpbGVzeXN0ZW0gb3IgdGhlIG5ldHdvcmsuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHhtbFBhcnNlck9wdGlvbi48L3A+Cis8cD5wYXJzZSBhbiBYTUwgZmlsZSBmcm9tIHRoZSBmaWxlc3lzdGVtIG9yIHRoZSBuZXR3b3JrLiBUaGUgcGFyc2luZyBmbGFncyBAb3B0aW9ucyBhcmUgYSBjb21iaW5hdGlvbiBvZiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlck9wdGlvbiI+eG1sUGFyc2VyT3B0aW9uPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00MTAsNyArNDExLDcgQEAKIDxhIG5hbWU9InhtbFJlYWRlckZvcklPIj48L2E+eG1sUmVhZGVyRm9ySU8gKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4JeG1sUmVhZGVyRm9ySU8JKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dFJlYWRDYWxsYmFjayI+eG1sSW5wdXRSZWFkQ2FsbGJhY2s8L2E+IGlvcmVhZCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxJbnB1dENsb3NlQ2FsbGJhY2siPnhtbElucHV0Q2xvc2VDYWxsYmFjazwvYT4gaW9jbG9zZSwgPGJyPgkJCQkJIHZvaWQgKiBpb2N0eCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBVUkwsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk8YnI+CiA8L3ByZT4KLTxwPkNyZWF0ZSBhbiB4bWx0ZXh0UmVhZGVyIGZvciBhbiBYTUwgZG9jdW1lbnQgZnJvbSBJL08gZnVuY3Rpb25zIGFuZCBzb3VyY2UuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHhtbFBhcnNlck9wdGlvbi48L3A+Cis8cD5DcmVhdGUgYW4geG1sdGV4dFJlYWRlciBmb3IgYW4gWE1MIGRvY3VtZW50IGZyb20gSS9PIGZ1bmN0aW9ucyBhbmQgc291cmNlLiBUaGUgcGFyc2luZyBmbGFncyBAb3B0aW9ucyBhcmUgYSBjb21iaW5hdGlvbiBvZiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlck9wdGlvbiI+eG1sUGFyc2VyT3B0aW9uPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00NTIsNyArNDUzLDcgQEAKIDxhIG5hbWU9InhtbFJlYWRlckZvck1lbW9yeSI+PC9hPnhtbFJlYWRlckZvck1lbW9yeSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPgl4bWxSZWFkZXJGb3JNZW1vcnkJKGNvbnN0IGNoYXIgKiBidWZmZXIsIDxicj4JCQkJCQkgaW50IHNpemUsIDxicj4JCQkJCQkgY29uc3QgY2hhciAqIFVSTCwgPGJyPgkJCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCQkgaW50IG9wdGlvbnMpPGJyPgogPC9wcmU+Ci08cD5DcmVhdGUgYW4geG1sdGV4dFJlYWRlciBmb3IgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudC4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgeG1sUGFyc2VyT3B0aW9uLjwvcD4KKzxwPkNyZWF0ZSBhbiB4bWx0ZXh0UmVhZGVyIGZvciBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50LiBUaGUgcGFyc2luZyBmbGFncyBAb3B0aW9ucyBhcmUgYSBjb21iaW5hdGlvbiBvZiA8YSBocmVmPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlck9wdGlvbiI+eG1sUGFyc2VyT3B0aW9uPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC00OTAsNyArNDkxLDcgQEAKIDxhIG5hbWU9InhtbFJlYWRlck5ld0RvYyI+PC9hPnhtbFJlYWRlck5ld0RvYyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFJlYWRlck5ld0RvYwkJCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjdXIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogVVJMLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpPGJyPgogPC9wcmU+Ci08cD5TZXR1cCBhbiB4bWx0ZXh0UmVhZGVyIHRvIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHhtbFBhcnNlck9wdGlvbi4gVGhpcyByZXVzZXMgdGhlIGV4aXN0aW5nIEByZWFkZXIgeG1sVGV4dFJlYWRlci48L3A+Cis8cD5TZXR1cCBhbiB4bWx0ZXh0UmVhZGVyIHRvIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyT3B0aW9uIj54bWxQYXJzZXJPcHRpb248L2E+LiBUaGlzIHJldXNlcyB0aGUgZXhpc3RpbmcgQHJlYWRlciA8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXIiPnhtbFRleHRSZWFkZXI8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTUyOCw3ICs1MjksNyBAQAogPGEgbmFtZT0ieG1sUmVhZGVyTmV3RmQiPjwvYT54bWxSZWFkZXJOZXdGZCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFJlYWRlck5ld0ZkCQkJKDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gcmVhZGVyLCA8YnI+CQkJCQkgaW50IGZkLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIFVSTCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJIGludCBvcHRpb25zKTxicj4KIDwvcHJlPgotPHA+U2V0dXAgYW4geG1sdGV4dFJlYWRlciB0byBwYXJzZSBhbiBYTUwgZnJvbSBhIGZpbGUgZGVzY3JpcHRvci4gTk9URSB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBub3QgYmUgY2xvc2VkIHdoZW4gdGhlIHJlYWRlciBpcyBjbG9zZWQgb3IgcmVzZXQuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHhtbFBhcnNlck9wdGlvbi4gVGhpcyByZXVzZXMgdGhlIGV4aXN0aW5nIEByZWFkZXIgeG1sVGV4dFJlYWRlci48L3A+Cis8cD5TZXR1cCBhbiB4bWx0ZXh0UmVhZGVyIHRvIHBhcnNlIGFuIFhNTCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLiBOT1RFIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciB3aWxsIG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgcmVhZGVyIGlzIGNsb3NlZCBvciByZXNldC4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT4uIFRoaXMgcmV1c2VzIHRoZSBleGlzdGluZyBAcmVhZGVyIDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlciI+eG1sVGV4dFJlYWRlcjwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtNTY2LDcgKzU2Nyw3IEBACiA8YSBuYW1lPSJ4bWxSZWFkZXJOZXdGaWxlIj48L2E+eG1sUmVhZGVyTmV3RmlsZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFJlYWRlck5ld0ZpbGUJCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJIGludCBvcHRpb25zKTxicj4KIDwvcHJlPgotPHA+cGFyc2UgYW4gWE1MIGZpbGUgZnJvbSB0aGUgZmlsZXN5c3RlbSBvciB0aGUgbmV0d29yay4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgeG1sUGFyc2VyT3B0aW9uLiBUaGlzIHJldXNlcyB0aGUgZXhpc3RpbmcgQHJlYWRlciB4bWxUZXh0UmVhZGVyLjwvcD4KKzxwPnBhcnNlIGFuIFhNTCBmaWxlIGZyb20gdGhlIGZpbGVzeXN0ZW0gb3IgdGhlIG5ldHdvcmsuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyT3B0aW9uIj54bWxQYXJzZXJPcHRpb248L2E+LiBUaGlzIHJldXNlcyB0aGUgZXhpc3RpbmcgQHJlYWRlciA8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXIiPnhtbFRleHRSZWFkZXI8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTYwMCw3ICs2MDEsNyBAQAogPGEgbmFtZT0ieG1sUmVhZGVyTmV3SU8iPjwvYT54bWxSZWFkZXJOZXdJTyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFJlYWRlck5ld0lPCQkJKDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gcmVhZGVyLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbElucHV0UmVhZENhbGxiYWNrIj54bWxJbnB1dFJlYWRDYWxsYmFjazwvYT4gaW9yZWFkLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbElucHV0Q2xvc2VDYWxsYmFjayI+eG1sSW5wdXRDbG9zZUNhbGxiYWNrPC9hPiBpb2Nsb3NlLCA8YnI+CQkJCQkgdm9pZCAqIGlvY3R4LCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIFVSTCwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBlbmNvZGluZywgPGJyPgkJCQkJIGludCBvcHRpb25zKTxicj4KIDwvcHJlPgotPHA+U2V0dXAgYW4geG1sdGV4dFJlYWRlciB0byBwYXJzZSBhbiBYTUwgZG9jdW1lbnQgZnJvbSBJL08gZnVuY3Rpb25zIGFuZCBzb3VyY2UuIFRoZSBwYXJzaW5nIGZsYWdzIEBvcHRpb25zIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHhtbFBhcnNlck9wdGlvbi4gVGhpcyByZXVzZXMgdGhlIGV4aXN0aW5nIEByZWFkZXIgeG1sVGV4dFJlYWRlci48L3A+Cis8cD5TZXR1cCBhbiB4bWx0ZXh0UmVhZGVyIHRvIHBhcnNlIGFuIFhNTCBkb2N1bWVudCBmcm9tIEkvTyBmdW5jdGlvbnMgYW5kIHNvdXJjZS4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT4uIFRoaXMgcmV1c2VzIHRoZSBleGlzdGluZyBAcmVhZGVyIDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlciI+eG1sVGV4dFJlYWRlcjwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtNjQ2LDcgKzY0Nyw3IEBACiA8YSBuYW1lPSJ4bWxSZWFkZXJOZXdNZW1vcnkiPjwvYT54bWxSZWFkZXJOZXdNZW1vcnkgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxSZWFkZXJOZXdNZW1vcnkJCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBidWZmZXIsIDxicj4JCQkJCSBpbnQgc2l6ZSwgPGJyPgkJCQkJIGNvbnN0IGNoYXIgKiBVUkwsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk8YnI+CiA8L3ByZT4KLTxwPlNldHVwIGFuIHhtbHRleHRSZWFkZXIgdG8gcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudC4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgeG1sUGFyc2VyT3B0aW9uLiBUaGlzIHJldXNlcyB0aGUgZXhpc3RpbmcgQHJlYWRlciB4bWxUZXh0UmVhZGVyLjwvcD4KKzxwPlNldHVwIGFuIHhtbHRleHRSZWFkZXIgdG8gcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudC4gVGhlIHBhcnNpbmcgZmxhZ3MgQG9wdGlvbnMgYXJlIGEgY29tYmluYXRpb24gb2YgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJPcHRpb24iPnhtbFBhcnNlck9wdGlvbjwvYT4uIFRoaXMgcmV1c2VzIHRoZSBleGlzdGluZyBAcmVhZGVyIDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlciI+eG1sVGV4dFJlYWRlcjwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtNjg4LDcgKzY4OSw3IEBACiA8YSBuYW1lPSJ4bWxSZWFkZXJOZXdXYWxrZXIiPjwvYT54bWxSZWFkZXJOZXdXYWxrZXIgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxSZWFkZXJOZXdXYWxrZXIJCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBkb2MpPGJyPgogPC9wcmU+Ci08cD5TZXR1cCBhbiB4bWx0ZXh0UmVhZGVyIHRvIHBhcnNlIGEgcHJlcGFyc2VkIFhNTCBkb2N1bWVudC4gVGhpcyByZXVzZXMgdGhlIGV4aXN0aW5nIEByZWFkZXIgeG1sVGV4dFJlYWRlci48L3A+Cis8cD5TZXR1cCBhbiB4bWx0ZXh0UmVhZGVyIHRvIHBhcnNlIGEgcHJlcGFyc2VkIFhNTCBkb2N1bWVudC4gVGhpcyByZXVzZXMgdGhlIGV4aXN0aW5nIEByZWFkZXIgPGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyIj54bWxUZXh0UmVhZGVyPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xMDMyLDcgKzEwMzMsNyBAQAogPGEgbmFtZT0ieG1sVGV4dFJlYWRlckN1cnJlbnREb2MiPjwvYT54bWxUZXh0UmVhZGVyQ3VycmVudERvYyAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+CXhtbFRleHRSZWFkZXJDdXJyZW50RG9jCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlcik8YnI+CiA8L3ByZT4KLTxwPkhhY2tpbmcgaW50ZXJmYWNlIGFsbG93aW5nIHRvIGdldCB0aGUgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQgYmVpbmcgYWNjZXNzZWQgYnkgdGhlIHhtbFRleHRSZWFkZXIuIE5PVEU6IGFzIGEgcmVzdWx0IG9mIHRoaXMgY2FsbCwgdGhlIHJlYWRlciB3aWxsIG5vdCBkZXN0cm95IHRoZSBhc3NvY2lhdGVkIFhNTCBkb2N1bWVudCBhbmQgY2FsbGluZyB4bWxGcmVlRG9jKCkgb24gdGhlIHJlc3VsdCBpcyBuZWVkZWQgb25jZSB0aGUgcmVhZGVyIHBhcnNpbmcgaGFzIGZpbmlzaGVkLjwvcD4KKzxwPkhhY2tpbmcgaW50ZXJmYWNlIGFsbG93aW5nIHRvIGdldCB0aGUgPGEgaHJlZj0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQgYmVpbmcgYWNjZXNzZWQgYnkgdGhlIDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlciI+eG1sVGV4dFJlYWRlcjwvYT4uIE5PVEU6IGFzIGEgcmVzdWx0IG9mIHRoaXMgY2FsbCwgdGhlIHJlYWRlciB3aWxsIG5vdCBkZXN0cm95IHRoZSBhc3NvY2lhdGVkIFhNTCBkb2N1bWVudCBhbmQgY2FsbGluZyB4bWxGcmVlRG9jKCkgb24gdGhlIHJlc3VsdCBpcyBuZWVkZWQgb25jZSB0aGUgcmVhZGVyIHBhcnNpbmcgaGFzIGZpbmlzaGVkLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTEwNTMsNyArMTA1NCw3IEBACiA8YSBuYW1lPSJ4bWxUZXh0UmVhZGVyQ3VycmVudE5vZGUiPjwvYT54bWxUZXh0UmVhZGVyQ3VycmVudE5vZGUgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CXhtbFRleHRSZWFkZXJDdXJyZW50Tm9kZQkoPGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPiByZWFkZXIpPGJyPgogPC9wcmU+Ci08cD5IYWNraW5nIGludGVyZmFjZSBhbGxvd2luZyB0byBnZXQgdGhlIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgbm9kZSBiZWluZyBhY2Nlc3NlZCBieSB0aGUgeG1sVGV4dFJlYWRlci4gVGhpcyBpcyBkYW5nZXJvdXMgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBub2RlIG1heSBiZSBkZXN0cm95ZWQgb24gdGhlIG5leHQgUmVhZHMuPC9wPgorPHA+SGFja2luZyBpbnRlcmZhY2UgYWxsb3dpbmcgdG8gZ2V0IHRoZSA8YSBocmVmPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IG5vZGUgYmVpbmcgYWNjZXNzZWQgYnkgdGhlIDxhIGhyZWY9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlciI+eG1sVGV4dFJlYWRlcjwvYT4uIFRoaXMgaXMgZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgbm9kZSBtYXkgYmUgZGVzdHJveWVkIG9uIHRoZSBuZXh0IFJlYWRzLjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTExMjYsNyArMTEyNyw3IEBACiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS48L3RkPgorPHRkPnRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgpAQCAtMTE3NiwxMSArMTE3NywxMSBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmxvY2FsTmFtZTwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbG9jYWwgbmFtZSBvZiB0aGUgYXR0cmlidXRlLjwvdGQ+Cis8dGQ+dGhlIGxvY2FsIG5hbWUgb2YgdGhlIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+LjwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bmFtZXNwYWNlVVJJPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBhdHRyaWJ1dGUuPC90ZD4KKzx0ZD50aGUgbmFtZXNwYWNlIFVSSSBvZiB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgpAQCAtMTM5Miw3ICsxMzkzLDcgQEAKIDxhIG5hbWU9InhtbFRleHRSZWFkZXJJc05hbWVzcGFjZURlY2wiPjwvYT54bWxUZXh0UmVhZGVySXNOYW1lc3BhY2VEZWNsICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGV4dFJlYWRlcklzTmFtZXNwYWNlRGVjbAkoPGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPiByZWFkZXIpPGJyPgogPC9wcmU+Ci08cD5EZXRlcm1pbmUgd2hldGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHJhdGhlciB0aGFuIGEgcmVndWxhciBhdHRyaWJ1dGUuPC9wPgorPHA+RGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiByYXRoZXIgdGhhbiBhIHJlZ3VsYXIgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTUzMiw3ICsxNTMzLDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgYXR0cmlidXRlLjwvdGQ+Cis8dGQ+dGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi48L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+CkBAIC0xNTgyLDExICsxNTgzLDExIEBACiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+bG9jYWxOYW1lPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBsb2NhbCBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuPC90ZD4KKzx0ZD50aGUgbG9jYWwgbmFtZSBvZiB0aGUgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5uYW1lc3BhY2VVUkk8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGF0dHJpYnV0ZS48L3RkPgorPHRkPnRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi48L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+CkBAIC0xODYxLDcgKzE4NjIsNyBAQAogPGEgbmFtZT0ieG1sVGV4dFJlYWRlclF1b3RlQ2hhciI+PC9hPnhtbFRleHRSZWFkZXJRdW90ZUNoYXIgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUZXh0UmVhZGVyUXVvdGVDaGFyCQkoPGEgaHJlZj0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHRyIj54bWxUZXh0UmVhZGVyUHRyPC9hPiByZWFkZXIpPGJyPgogPC9wcmU+Ci08cD5UaGUgcXVvdGF0aW9uIG1hcmsgY2hhcmFjdGVyIHVzZWQgdG8gZW5jbG9zZSB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLjwvcD4KKzxwPlRoZSBxdW90YXRpb24gbWFyayBjaGFyYWN0ZXIgdXNlZCB0byBlbmNsb3NlIHRoZSB2YWx1ZSBvZiBhbiA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yMTYzLDYgKzIxNjQsMjcgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Cis8YSBuYW1lPSJ4bWxUZXh0UmVhZGVyU2V0TWF4QW1wbGlmaWNhdGlvbiI+PC9hPnhtbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJCSB1bnNpZ25lZCBtYXhBbXBsKTxicj4KKzwvcHJlPgorPHA+U2V0IHRoZSBtYXhpbXVtIGFtcGxpZmljYXRpb24gZmFjdG9yLiBTZWUgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbiI+eG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb248L2E+LjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnJlYWRlcjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD5hbiBYTUwgcmVhZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5tYXhBbXBsPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPm1heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3I8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgogPGEgbmFtZT0ieG1sVGV4dFJlYWRlclNldFBhcnNlclByb3AiPjwvYT54bWxUZXh0UmVhZGVyU2V0UGFyc2VyUHJvcCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IHJlYWRlciwgPGJyPgkJCQkJIGludCBwcm9wLCA8YnI+CQkJCQkgaW50IHZhbHVlKTxicj4KIDwvcHJlPgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWxzYXZlLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHNhdmUuaHRtbAppbmRleCBmZTJjMmQyLi4yMTI2Mjc1IDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHNhdmUuaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHNhdmUuaHRtbApAQCAtMzUsNiArMzUsOSBAQAogPGEgaHJlZj0ibGlieG1sMi14bWxzYXZlLmh0bWwjeG1sU2F2ZUN0eHRQdHIiPnhtbFNhdmVDdHh0UHRyPC9hPgk8YSBocmVmPSIjeG1sU2F2ZVRvRmlsZW5hbWUiPnhtbFNhdmVUb0ZpbGVuYW1lPC9hPgkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCA8YnI+CQkJCQkgY29uc3QgY2hhciAqIGVuY29kaW5nLCA8YnI+CQkJCQkgaW50IG9wdGlvbnMpOwogPGEgaHJlZj0ibGlieG1sMi14bWxzYXZlLmh0bWwjeG1sU2F2ZUN0eHRQdHIiPnhtbFNhdmVDdHh0UHRyPC9hPgk8YSBocmVmPSIjeG1sU2F2ZVRvSU8iPnhtbFNhdmVUb0lPPC9hPgkJKDxhIGhyZWY9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRXcml0ZUNhbGxiYWNrIj54bWxPdXRwdXRXcml0ZUNhbGxiYWNrPC9hPiBpb3dyaXRlLCA8YnI+CQkJCQkgPGEgaHJlZj0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dENsb3NlQ2FsbGJhY2siPnhtbE91dHB1dENsb3NlQ2FsbGJhY2s8L2E+IGlvY2xvc2UsIDxicj4JCQkJCSB2b2lkICogaW9jdHgsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZW5jb2RpbmcsIDxicj4JCQkJCSBpbnQgb3B0aW9ucyk7CiBsb25nCTxhIGhyZWY9IiN4bWxTYXZlVHJlZSI+eG1sU2F2ZVRyZWU8L2E+CQkJKDxhIGhyZWY9ImxpYnhtbDIteG1sc2F2ZS5odG1sI3htbFNhdmVDdHh0UHRyIj54bWxTYXZlQ3R4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGN1cik7CitpbnQJPGEgaHJlZj0iI3htbFRockRlZkluZGVudFRyZWVPdXRwdXQiPnhtbFRockRlZkluZGVudFRyZWVPdXRwdXQ8L2E+CShpbnQgdik7CitpbnQJPGEgaHJlZj0iI3htbFRockRlZlNhdmVOb0VtcHR5VGFncyI+eG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzPC9hPgkoaW50IHYpOworY29uc3QgY2hhciAqCTxhIGhyZWY9IiN4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nIj54bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nPC9hPgkoY29uc3QgY2hhciAqIHYpOwogPC9wcmU+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9InJlZnNlY3QxIiBsYW5nPSJlbiI+PGgyPkRlc2NyaXB0aW9uPC9oMj48L2Rpdj4KQEAgLTMzMiw3ICszMzUsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PmN1cjwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD48L3RkPgorPHRkPnRoZSB0b3Agbm9kZSBvZiB0aGUgc3VidHJlZSB0byBzYXZlPC90ZD4KIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgpAQCAtMzQyLDYgKzM0NSw2OSBAQAogPC90YWJsZT48L2Rpdj4KIDwvZGl2PgogPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KKzxoMz4KKzxhIG5hbWU9InhtbFRockRlZkluZGVudFRyZWVPdXRwdXQiPjwvYT54bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dAkoaW50IHYpPGJyPgorPC9wcmU+Cis8cD48L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD52PC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgorPGgzPgorPGEgbmFtZT0ieG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzIj48L2E+eG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzCShpbnQgdik8YnI+Cis8L3ByZT4KKzxwPjwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0Ij4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PnY8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgorPHRkPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Cis8aDM+Cis8YSBuYW1lPSJ4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nIj48L2E+eG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgY2hhciAqCXhtbFRockRlZlRyZWVJbmRlbnRTdHJpbmcJKGNvbnN0IGNoYXIgKiB2KTxicj4KKzwvcHJlPgorPHA+PC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiPgorPHRib2R5PgorPHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+djwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Cis8dGQ+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgogPC9kaXY+CiA8L2Rpdj4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sc2NoZW1hc3R5cGVzLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHNjaGVtYXN0eXBlcy5odG1sCmluZGV4IDU3NjBhZGYuLjAxMWRhNzggMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sc2NoZW1hc3R5cGVzLmh0bWwKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi14bWxzY2hlbWFzdHlwZXMuaHRtbApAQCAtMzgsNyArMzgsNyBAQAogdW5zaWduZWQgbG9uZwk8YSBocmVmPSIjeG1sU2NoZW1hR2V0RmFjZXRWYWx1ZUFzVUxvbmciPnhtbFNjaGVtYUdldEZhY2V0VmFsdWVBc1VMb25nPC9hPgkoPGEgaHJlZj0ibGlieG1sMi1zY2hlbWFzSW50ZXJuYWxzLmh0bWwjeG1sU2NoZW1hRmFjZXRQdHIiPnhtbFNjaGVtYUZhY2V0UHRyPC9hPiBmYWNldCk7CiA8YSBocmVmPSJsaWJ4bWwyLXNjaGVtYXNJbnRlcm5hbHMuaHRtbCN4bWxTY2hlbWFUeXBlUHRyIj54bWxTY2hlbWFUeXBlUHRyPC9hPgk8YSBocmVmPSIjeG1sU2NoZW1hR2V0UHJlZGVmaW5lZFR5cGUiPnhtbFNjaGVtYUdldFByZWRlZmluZWRUeXBlPC9hPgkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBucyk7CiA8YSBocmVmPSJsaWJ4bWwyLXNjaGVtYXNJbnRlcm5hbHMuaHRtbCN4bWxTY2hlbWFWYWxUeXBlIj54bWxTY2hlbWFWYWxUeXBlPC9hPgk8YSBocmVmPSIjeG1sU2NoZW1hR2V0VmFsVHlwZSI+eG1sU2NoZW1hR2V0VmFsVHlwZTwvYT4JKDxhIGhyZWY9ImxpYnhtbDItc2NoZW1hc0ludGVybmFscy5odG1sI3htbFNjaGVtYVZhbFB0ciI+eG1sU2NoZW1hVmFsUHRyPC9hPiB2YWwpOwotdm9pZAk8YSBocmVmPSIjeG1sU2NoZW1hSW5pdFR5cGVzIj54bWxTY2hlbWFJbml0VHlwZXM8L2E+CQkodm9pZCk7CitpbnQJPGEgaHJlZj0iI3htbFNjaGVtYUluaXRUeXBlcyI+eG1sU2NoZW1hSW5pdFR5cGVzPC9hPgkJKHZvaWQpOwogaW50CTxhIGhyZWY9IiN4bWxTY2hlbWFJc0J1aWx0SW5UeXBlRmFjZXQiPnhtbFNjaGVtYUlzQnVpbHRJblR5cGVGYWNldDwvYT4JKDxhIGhyZWY9ImxpYnhtbDItc2NoZW1hc0ludGVybmFscy5odG1sI3htbFNjaGVtYVR5cGVQdHIiPnhtbFNjaGVtYVR5cGVQdHI8L2E+IHR5cGUsIDxicj4JCQkJCSBpbnQgZmFjZXRUeXBlKTsKIDxhIGhyZWY9ImxpYnhtbDItc2NoZW1hc0ludGVybmFscy5odG1sI3htbFNjaGVtYUZhY2V0UHRyIj54bWxTY2hlbWFGYWNldFB0cjwvYT4JPGEgaHJlZj0iI3htbFNjaGVtYU5ld0ZhY2V0Ij54bWxTY2hlbWFOZXdGYWNldDwvYT4JKHZvaWQpOwogPGEgaHJlZj0ibGlieG1sMi1zY2hlbWFzSW50ZXJuYWxzLmh0bWwjeG1sU2NoZW1hVmFsUHRyIj54bWxTY2hlbWFWYWxQdHI8L2E+CTxhIGhyZWY9IiN4bWxTY2hlbWFOZXdOT1RBVElPTlZhbHVlIj54bWxTY2hlbWFOZXdOT1RBVElPTlZhbHVlPC9hPgkoY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5zKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogPGEgbmFtZT0ieG1sU2NoZW1hQ2xlYW51cFR5cGVzIj48L2E+eG1sU2NoZW1hQ2xlYW51cFR5cGVzICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFNjaGVtYUNsZWFudXBUeXBlcwkJKHZvaWQpPGJyPgogPC9wcmU+Ci08cD5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJ3QgaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC4gQ2xlYW51cCB0aGUgZGVmYXVsdCBYTUwgU2NoZW1hcyB0eXBlIGxpYnJhcnk8L3A+Cis8cD5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC4gQ2xlYW51cCB0aGUgZGVmYXVsdCBYTUwgU2NoZW1hcyB0eXBlIGxpYnJhcnk8L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC00MTMsOSArNDEzLDE2IEBACiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgogPGEgbmFtZT0ieG1sU2NoZW1hSW5pdFR5cGVzIj48L2E+eG1sU2NoZW1hSW5pdFR5cGVzICgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkCXhtbFNjaGVtYUluaXRUeXBlcwkJKHZvaWQpPGJyPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxTY2hlbWFJbml0VHlwZXMJCSh2b2lkKTxicj4KIDwvcHJlPgogPHA+SW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBYTUwgU2NoZW1hcyB0eXBlIGxpYnJhcnk8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCI+Cis8dGJvZHk+PHRyPgorPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KKzx0ZD4wIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgogPC9kaXY+CiA8aHI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgpAQCAtNTEzLDcgKzUyMCw3IEBACiA8YSBuYW1lPSJ4bWxTY2hlbWFOZXdTdHJpbmdWYWx1ZSI+PC9hPnhtbFNjaGVtYU5ld1N0cmluZ1ZhbHVlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJsaWJ4bWwyLXNjaGVtYXNJbnRlcm5hbHMuaHRtbCN4bWxTY2hlbWFWYWxQdHIiPnhtbFNjaGVtYVZhbFB0cjwvYT4JeG1sU2NoZW1hTmV3U3RyaW5nVmFsdWUJKDxhIGhyZWY9ImxpYnhtbDItc2NoZW1hc0ludGVybmFscy5odG1sI3htbFNjaGVtYVZhbFR5cGUiPnhtbFNjaGVtYVZhbFR5cGU8L2E+IHR5cGUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogdmFsdWUpPGJyPgogPC9wcmU+Ci08cD5BbGxvY2F0ZSBhIG5ldyBzaW1wbGUgdHlwZSB2YWx1ZS4gVGhlIHR5cGUgY2FuIGJlIG9mIFhNTF9TQ0hFTUFTX1NUUklORy4gV0FSTklORzogVGhpcyBvbmUgaXMgaW50ZW5kZWQgdG8gYmUgZXhwYW5kZWQgZm9yIG90aGVyIHN0cmluZyBiYXNlZCB0eXBlcy4gV2UgbmVlZCB0aGlzIGZvciBhbnlTaW1wbGVUeXBlIGFzIHdlbGwuIFRoZSBnaXZlbiB2YWx1ZSBpcyBjb25zdW1lZCBhbmQgZnJlZWQgd2l0aCB0aGUgc3RydWN0LjwvcD4KKzxwPkFsbG9jYXRlIGEgbmV3IHNpbXBsZSB0eXBlIHZhbHVlLiBUaGUgdHlwZSBjYW4gYmUgb2YgPGEgaHJlZj0ibGlieG1sMi1zY2hlbWFzSW50ZXJuYWxzLmh0bWwjWE1MX1NDSEVNQVNfU1RSSU5HIj5YTUxfU0NIRU1BU19TVFJJTkc8L2E+LiBXQVJOSU5HOiBUaGlzIG9uZSBpcyBpbnRlbmRlZCB0byBiZSBleHBhbmRlZCBmb3Igb3RoZXIgc3RyaW5nIGJhc2VkIHR5cGVzLiBXZSBuZWVkIHRoaXMgZm9yIGFueVNpbXBsZVR5cGUgYXMgd2VsbC4gVGhlIGdpdmVuIHZhbHVlIGlzIGNvbnN1bWVkIGFuZCBmcmVlZCB3aXRoIHRoZSBzdHJ1Y3QuPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi14bWx2ZXJzaW9uLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHZlcnNpb24uaHRtbAppbmRleCA5OGIwODE5Li5iN2ZjOWM0IDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHZlcnNpb24uaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHZlcnNpb24uaHRtbApAQCAtMjIsMTAgKzIyLDcgQEAKIDxwPkF1dGhvcihzKTogRGFuaWVsIFZlaWxsYXJkIDwvcD4KIDxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KIDxoMj5TeW5vcHNpczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2RlZmluZSA8YSBocmVmPSIjQVRUUklCVVRFX1VOVVNFRCI+QVRUUklCVVRFX1VOVVNFRDwvYT47Ci0jZGVmaW5lIDxhIGhyZWY9IiNERUJVR19NRU1PUllfTE9DQVRJT04iPkRFQlVHX01FTU9SWV9MT0NBVElPTjwvYT47Ci0jZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfQVRUUl9BTExPQ19TSVpFIj5MSUJYTUxfQVRUUl9BTExPQ19TSVpFPC9hPjsKLSNkZWZpbmUgPGEgaHJlZj0iI0xJQlhNTF9BVFRSX0ZPUk1BVCI+TElCWE1MX0FUVFJfRk9STUFUPC9hPjsKKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4jZGVmaW5lIDxhIGhyZWY9IiNERUJVR19NRU1PUllfTE9DQVRJT04iPkRFQlVHX01FTU9SWV9MT0NBVElPTjwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfQVVUT01BVEFfRU5BQkxFRCI+TElCWE1MX0FVVE9NQVRBX0VOQUJMRUQ8L2E+OwogI2RlZmluZSA8YSBocmVmPSIjTElCWE1MX0MxNE5fRU5BQkxFRCI+TElCWE1MX0MxNE5fRU5BQkxFRDwvYT47CiAjZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfQ0FUQUxPR19FTkFCTEVEIj5MSUJYTUxfQ0FUQUxPR19FTkFCTEVEPC9hPjsKQEAgLTY4LDcgKzY1LDYgQEAKICNkZWZpbmUgPGEgaHJlZj0iI0xJQlhNTF9aTElCX0VOQUJMRUQiPkxJQlhNTF9aTElCX0VOQUJMRUQ8L2E+OwogI2RlZmluZSA8YSBocmVmPSIjV0lUSE9VVF9UUklPIj5XSVRIT1VUX1RSSU88L2E+OwogI2RlZmluZSA8YSBocmVmPSIjV0lUSF9UUklPIj5XSVRIX1RSSU88L2E+OwotI2RlZmluZSA8YSBocmVmPSIjWE1MX0RFUFJFQ0FURUQiPlhNTF9ERVBSRUNBVEVEPC9hPjsKIHZvaWQJPGEgaHJlZj0iI3htbENoZWNrVmVyc2lvbiI+eG1sQ2hlY2tWZXJzaW9uPC9hPgkJCShpbnQgdmVyc2lvbik7CiA8L3ByZT4KIDwvZGl2PgpAQCAtNzgsMTQgKzc0LDYgQEAKIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgogPGgzPgotPGEgbmFtZT0iQVRUUklCVVRFX1VOVVNFRCI+TWFjcm8gPC9hPkFUVFJJQlVURV9VTlVTRUQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI0FUVFJJQlVURV9VTlVTRUQiPkFUVFJJQlVURV9VTlVTRUQ8L2E+OwotPC9wcmU+Ci08cD5NYWNybyB1c2VkIHRvIHNpZ25hbCB0byBHQ0MgdW51c2VkIGZ1bmN0aW9uIHBhcmFtZXRlcnM8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+CiA8YSBuYW1lPSJERUJVR19NRU1PUllfTE9DQVRJT04iPk1hY3JvIDwvYT5ERUJVR19NRU1PUllfTE9DQVRJT048L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI0RFQlVHX01FTU9SWV9MT0NBVElPTiI+REVCVUdfTUVNT1JZX0xPQ0FUSU9OPC9hPjsKIDwvcHJlPgpAQCAtOTQsMjIgKzgyLDYgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJMSUJYTUxfQVRUUl9BTExPQ19TSVpFIj5NYWNybyA8L2E+TElCWE1MX0FUVFJfQUxMT0NfU0laRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSA8YSBocmVmPSIjTElCWE1MX0FUVFJfQUxMT0NfU0laRSI+TElCWE1MX0FUVFJfQUxMT0NfU0laRTwvYT47Ci08L3ByZT4KLTxwPk1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoaXMgaXMgYW4gYWxsb2NhdG9yIGZ1bmN0aW9uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgotPGEgbmFtZT0iTElCWE1MX0FUVFJfRk9STUFUIj5NYWNybyA8L2E+TElCWE1MX0FUVFJfRk9STUFUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfQVRUUl9GT1JNQVQiPkxJQlhNTF9BVFRSX0ZPUk1BVDwvYT47Ci08L3ByZT4KLTxwPk1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoZSBwYXJhbWV0ZXIgYXJlIHByaW50ZiBsaWtlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiIgbGFuZz0iZW4iPgotPGgzPgogPGEgbmFtZT0iTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQiPk1hY3JvIDwvYT5MSUJYTUxfQVVUT01BVEFfRU5BQkxFRDwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSA8YSBocmVmPSIjTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQiPkxJQlhNTF9BVVRPTUFUQV9FTkFCTEVEPC9hPjsKIDwvcHJlPgpAQCAtMTQ1LDcgKzExNyw3IEBACiA8YSBuYW1lPSJMSUJYTUxfREVCVUdfUlVOVElNRSI+TWFjcm8gPC9hPkxJQlhNTF9ERUJVR19SVU5USU1FPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNMSUJYTUxfREVCVUdfUlVOVElNRSI+TElCWE1MX0RFQlVHX1JVTlRJTUU8L2E+OwogPC9wcmU+Ci08cD5XaGV0aGVyIHRoZSBydW50aW1lIGRlYnVnZ2luZyBpcyBjb25maWd1cmVkIGluPC9wPgorPHA+UmVtb3ZlZDwvcD4KIDwvZGl2PgogPGhyPgogPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KQEAgLTQ0NiwxNCArNDE4LDYgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJYTUxfREVQUkVDQVRFRCI+TWFjcm8gPC9hPlhNTF9ERVBSRUNBVEVEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYTUxfREVQUkVDQVRFRCI+WE1MX0RFUFJFQ0FURUQ8L2E+OwotPC9wcmU+Ci08cD5NYWNybyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBmdW5jdGlvbiwgdmFyaWFibGUsIHR5cGUgb3Igc3RydWN0IG1lbWJlciBpcyBkZXByZWNhdGVkLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiIGxhbmc9ImVuIj4KLTxoMz4KIDxhIG5hbWU9InhtbENoZWNrVmVyc2lvbiI+PC9hPnhtbENoZWNrVmVyc2lvbiAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxDaGVja1ZlcnNpb24JCQkoaW50IHZlcnNpb24pPGJyPgogPC9wcmU+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sIGIvZG9jL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbAppbmRleCA5NDE4ZWE4Li5hMjc0ZDA5IDEwMDY0NAotLS0gYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwKQEAgLTM2NCw3ICszNjQsNyBAQAogPGEgbmFtZT0ieG1sVGV4dFdyaXRlckVuZENvbW1lbnQiPjwvYT54bWxUZXh0V3JpdGVyRW5kQ29tbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRXcml0ZXJFbmRDb21tZW50CQkoPGEgaHJlZj0ibGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyUHRyIj54bWxUZXh0V3JpdGVyUHRyPC9hPiB3cml0ZXIpPGJyPgogPC9wcmU+Ci08cD5FbmQgdGhlIGN1cnJlbnQgeG1sIGNvbW1lbnQuPC9wPgorPHA+RW5kIHRoZSBjdXJyZW50IHhtbCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2NvbW1lbnQiPmNvbW1lbnQ8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTY2Miw3ICs2NjIsNyBAQAogPGEgbmFtZT0ieG1sVGV4dFdyaXRlclN0YXJ0QXR0cmlidXRlIj48L2E+eG1sVGV4dFdyaXRlclN0YXJ0QXR0cmlidXRlICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGV4dFdyaXRlclN0YXJ0QXR0cmlidXRlCSg8YSBocmVmPSJsaWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJQdHIiPnhtbFRleHRXcml0ZXJQdHI8L2E+IHdyaXRlciwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lKTxicj4KIDwvcHJlPgotPHA+U3RhcnQgYW4geG1sIGF0dHJpYnV0ZS48L3A+Cis8cD5TdGFydCBhbiB4bWwgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtNzQ0LDcgKzc0NCw3IEBACiA8YSBuYW1lPSJ4bWxUZXh0V3JpdGVyU3RhcnRDb21tZW50Ij48L2E+eG1sVGV4dFdyaXRlclN0YXJ0Q29tbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRXcml0ZXJTdGFydENvbW1lbnQJKDxhIGhyZWY9ImxpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlclB0ciI+eG1sVGV4dFdyaXRlclB0cjwvYT4gd3JpdGVyKTxicj4KIDwvcHJlPgotPHA+U3RhcnQgYW4geG1sIGNvbW1lbnQuPC9wPgorPHA+U3RhcnQgYW4geG1sIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY29tbWVudCI+Y29tbWVudDwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTAwMiw3ICsxMDAyLDcgQEAKIDxhIG5hbWU9InhtbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZSI+PC9hPnhtbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZQkoPGEgaHJlZj0ibGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyUHRyIj54bWxUZXh0V3JpdGVyUHRyPC9hPiB3cml0ZXIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZSwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjb250ZW50KTxicj4KIDwvcHJlPgotPHA+V3JpdGUgYW4geG1sIGF0dHJpYnV0ZS48L3A+Cis8cD5Xcml0ZSBhbiB4bWwgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKIDxhIG5hbWU9InhtbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZU5TIj48L2E+eG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlTlMgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUZXh0V3JpdGVyV3JpdGVBdHRyaWJ1dGVOUwkoPGEgaHJlZj0ibGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyUHRyIj54bWxUZXh0V3JpdGVyUHRyPC9hPiB3cml0ZXIsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogcHJlZml4LCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCSBjb25zdCA8YSBocmVmPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoYXIiPnhtbENoYXI8L2E+ICogbmFtZXNwYWNlVVJJLCA8YnI+CQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIGNvbnRlbnQpPGJyPgogPC9wcmU+Ci08cD5Xcml0ZSBhbiB4bWwgYXR0cmlidXRlLjwvcD4KKzxwPldyaXRlIGFuIHhtbCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xMTY4LDcgKzExNjgsNyBAQAogPGEgbmFtZT0ieG1sVGV4dFdyaXRlcldyaXRlQ29tbWVudCI+PC9hPnhtbFRleHRXcml0ZXJXcml0ZUNvbW1lbnQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxUZXh0V3JpdGVyV3JpdGVDb21tZW50CSg8YSBocmVmPSJsaWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJQdHIiPnhtbFRleHRXcml0ZXJQdHI8L2E+IHdyaXRlciwgPGJyPgkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBjb250ZW50KTxicj4KIDwvcHJlPgotPHA+V3JpdGUgYW4geG1sIGNvbW1lbnQuPC9wPgorPHA+V3JpdGUgYW4geG1sIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY29tbWVudCI+Y29tbWVudDwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTU1MSw3ICsxNTUxLDcgQEAKIDxhIG5hbWU9InhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEF0dHJpYnV0ZSI+PC9hPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEF0dHJpYnV0ZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEF0dHJpYnV0ZQkoPGEgaHJlZj0ibGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyUHRyIj54bWxUZXh0V3JpdGVyUHRyPC9hPiB3cml0ZXIsIDxicj4JCQkJCQkgY29uc3QgPGEgaHJlZj0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIj54bWxDaGFyPC9hPiAqIG5hbWUsIDxicj4JCQkJCQkgY29uc3QgY2hhciAqIGZvcm1hdCwgPGJyPgkJCQkJCSAuLi4gLi4uKTxicj4KIDwvcHJlPgotPHA+V3JpdGUgYSBmb3JtYXR0ZWQgeG1sIGF0dHJpYnV0ZS48L3A+Cis8cD5Xcml0ZSBhIGZvcm1hdHRlZCB4bWwgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpAQCAtMTY1OSw3ICsxNjU5LDcgQEAKIDxhIG5hbWU9InhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdENvbW1lbnQiPjwvYT54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDb21tZW50ICgpPC9oMz4KIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQJeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0Q29tbWVudAkoPGEgaHJlZj0ibGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyUHRyIj54bWxUZXh0V3JpdGVyUHRyPC9hPiB3cml0ZXIsIDxicj4JCQkJCSBjb25zdCBjaGFyICogZm9ybWF0LCA8YnI+CQkJCQkgLi4uIC4uLik8YnI+CiA8L3ByZT4KLTxwPldyaXRlIGFuIHhtbCBjb21tZW50LjwvcD4KKzxwPldyaXRlIGFuIHhtbCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2NvbW1lbnQiPmNvbW1lbnQ8L2E+LjwvcD4KIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+CiA8Y29sIGFsaWduPSJsZWZ0Ij4KIDx0Ym9keT4KQEAgLTIxMTksNyArMjExOSw3IEBACiA8YSBuYW1lPSJ4bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0QXR0cmlidXRlIj48L2E+eG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdEF0dHJpYnV0ZSAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRBdHRyaWJ1dGUJKDxhIGhyZWY9ImxpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlclB0ciI+eG1sVGV4dFdyaXRlclB0cjwvYT4gd3JpdGVyLCA8YnI+CQkJCQkJIGNvbnN0IDxhIGhyZWY9ImxpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sQ2hhciI+eG1sQ2hhcjwvYT4gKiBuYW1lLCA8YnI+CQkJCQkJIGNvbnN0IGNoYXIgKiBmb3JtYXQsIDxicj4JCQkJCQkgdmFfbGlzdCBhcmdwdHIpPGJyPgogPC9wcmU+Ci08cD5Xcml0ZSBhIGZvcm1hdHRlZCB4bWwgYXR0cmlidXRlLjwvcD4KKzxwPldyaXRlIGEgZm9ybWF0dGVkIHhtbCA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yMjI3LDcgKzIyMjcsNyBAQAogPGEgbmFtZT0ieG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdENvbW1lbnQiPjwvYT54bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0Q29tbWVudCAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50CXhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRDb21tZW50CSg8YSBocmVmPSJsaWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJQdHIiPnhtbFRleHRXcml0ZXJQdHI8L2E+IHdyaXRlciwgPGJyPgkJCQkJCSBjb25zdCBjaGFyICogZm9ybWF0LCA8YnI+CQkJCQkJIHZhX2xpc3QgYXJncHRyKTxicj4KIDwvcHJlPgotPHA+V3JpdGUgYW4geG1sIGNvbW1lbnQuPC9wPgorPHA+V3JpdGUgYW4geG1sIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjY29tbWVudCI+Y29tbWVudDwvYT4uPC9wPgogPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KIDxjb2wgYWxpZ249ImxlZnQiPgogPHRib2R5PgpkaWZmIC0tZ2l0IGEvZG9jL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sIGIvZG9jL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sCmluZGV4IDViMGUxYzYuLjU5Zjk2NTMgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbAorKysgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwKQEAgLTExNywzMCArMTE3LDYgQEAKIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CiA8aDM+Ci08YSBuYW1lPSJYUEFUSF9MT0NBVElPTlNFVCI+TWFjcm8gPC9hPlhQQVRIX0xPQ0FUSU9OU0VUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYUEFUSF9MT0NBVElPTlNFVCI+WFBBVEhfTE9DQVRJT05TRVQ8L2E+OwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJYUEFUSF9QT0lOVCI+TWFjcm8gPC9hPlhQQVRIX1BPSU5UPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYUEFUSF9QT0lOVCI+WFBBVEhfUE9JTlQ8L2E+OwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+Ci08YSBuYW1lPSJYUEFUSF9SQU5HRSI+TWFjcm8gPC9hPlhQQVRIX1JBTkdFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIDxhIGhyZWY9IiNYUEFUSF9SQU5HRSI+WFBBVEhfUkFOR0U8L2E+OwotPC9wcmU+Ci08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+Ci08aDM+CiA8YSBuYW1lPSJ4bWxYUGF0aE5vZGVTZXRHZXRMZW5ndGgiPk1hY3JvIDwvYT54bWxYUGF0aE5vZGVTZXRHZXRMZW5ndGg8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgPGEgaHJlZj0iI3htbFhQYXRoTm9kZVNldEdldExlbmd0aCI+eG1sWFBhdGhOb2RlU2V0R2V0TGVuZ3RoPC9hPihucyk7CiA8L3ByZT4KQEAgLTQyMSw3ICszOTcsNyBAQAogICAgIDxhIGhyZWY9ImxpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aENvbXBFeHByUHRyIj54bWxYUGF0aENvbXBFeHByUHRyPC9hPgljb21wCTogdGhlIHByZWNvbXBpbGVkIGV4cHJlc3Npb24KICAgICBpbnQJeHB0cgk6IGl0IHRoaXMgYW4gWFBvaW50ZXIgZXhwcmVzc2lvbgogICAgIDxhIGhyZWY9ImxpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+CWFuY2VzdG9yCTogdXNlZCBmb3Igd2Fsa2luZyBwcmVjZWRpbmcgYXhpcwotICAgIGludAl2YWx1ZUZyYW1lCTogdXNlZCB0byBsaW1pdCBQb3Agb24gdGhlIHN0YWNrCisgICAgaW50CXZhbHVlRnJhbWUJOiBhbHdheXMgemVybyBmb3IgY29tcGF0aWJpbGl0eQogfSB4bWxYUGF0aFBhcnNlckNvbnRleHQ7CiA8L3ByZT4KIDxwPjwvcD4KQEAgLTEzMTMsNyArMTI4OSw3IEBACiA8YSBuYW1lPSJ4bWxYUGF0aEluaXQiPjwvYT54bWxYUGF0aEluaXQgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQJeG1sWFBhdGhJbml0CQkJKHZvaWQpPGJyPgogPC9wcmU+Ci08cD5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIDxhIGhyZWY9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4gdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4gSW5pdGlhbGl6ZSB0aGUgWFBhdGggZW52aXJvbm1lbnQ8L3A+Cis8cD5ERVBSRUNBVEVEOiBBbGlhcyBmb3IgPGEgaHJlZj0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPi48L3A+CiA8L2Rpdj4KIDxocj4KIDxkaXYgY2xhc3M9InJlZnNlY3QyIiBsYW5nPSJlbiI+CkBAIC0xMzIxLDcgKzEyOTcsNyBAQAogPGEgbmFtZT0ieG1sWFBhdGhJc0luZiI+PC9hPnhtbFhQYXRoSXNJbmYgKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxYUGF0aElzSW5mCQkJKGRvdWJsZSB2YWwpPGJyPgogPC9wcmU+Ci08cD48L3A+Cis8cD5DaGVja3Mgd2hldGhlciBhIGRvdWJsZSBpcyBhbiBpbmZpbml0eS48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0xMzQyLDcgKzEzMTgsNyBAQAogPGEgbmFtZT0ieG1sWFBhdGhJc05hTiI+PC9hPnhtbFhQYXRoSXNOYU4gKCk8L2gzPgogPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludAl4bWxYUGF0aElzTmFOCQkJKGRvdWJsZSB2YWwpPGJyPgogPC9wcmU+Ci08cD48L3A+Cis8cD5DaGVja3Mgd2hldGhlciBhIGRvdWJsZSBpcyBhIE5hTi48L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CmRpZmYgLS1naXQgYS9kb2MvZGV2aGVscC9saWJ4bWwyLXhwYXRoSW50ZXJuYWxzLmh0bWwgYi9kb2MvZGV2aGVscC9saWJ4bWwyLXhwYXRoSW50ZXJuYWxzLmh0bWwKaW5kZXggZTVlZGZhYy4uM2ExZjNiYSAxMDA2NDQKLS0tIGEvZG9jL2RldmhlbHAvbGlieG1sMi14cGF0aEludGVybmFscy5odG1sCisrKyBiL2RvYy9kZXZoZWxwL2xpYnhtbDIteHBhdGhJbnRlcm5hbHMuaHRtbApAQCAtNjUwLDcgKzY1MCw3IEBACiA8L3RyPgogPHRyPgogPHRkPjxzcGFuIGNsYXNzPSJ0ZXJtIj48aT48dHQ+UmV0dXJuczwvdHQ+PC9pPjo8L3NwYW4+PC90ZD4KLTx0ZD50aGUgbnVtYmVyIG9mIGl0ZW1zIG9uIHRoZSB2YWx1ZSBzdGFjaywgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgaXRlbXMgb24gdGhlIHZhbHVlIHN0YWNrLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLiBUaGUgb2JqZWN0IGlzIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGVycm9yLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0xMjI3LDcgKzEyMjcsNyBAQAogPGEgbmFtZT0ieG1sWFBhdGhMYW5nRnVuY3Rpb24iPjwvYT54bWxYUGF0aExhbmdGdW5jdGlvbiAoKTwvaDM+CiA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZAl4bWxYUGF0aExhbmdGdW5jdGlvbgkJKDxhIGhyZWY9ImxpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIiPnhtbFhQYXRoUGFyc2VyQ29udGV4dFB0cjwvYT4gY3R4dCwgPGJyPgkJCQkJIGludCBuYXJncyk8YnI+CiA8L3ByZT4KLTxwPkltcGxlbWVudCB0aGUgbGFuZygpIFhQYXRoIGZ1bmN0aW9uIGJvb2xlYW4gbGFuZyhzdHJpbmcpIFRoZSBsYW5nIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRleHQgbm9kZSBhcyBzcGVjaWZpZWQgYnkgeG1sOmxhbmcgYXR0cmlidXRlcyBpcyB0aGUgc2FtZSBhcyBvciBpcyBhIHN1Ymxhbmd1YWdlIG9mIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50IHN0cmluZy4gVGhlIGxhbmd1YWdlIG9mIHRoZSBjb250ZXh0IG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2YgdGhlIHhtbDpsYW5nIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IG9uIHRoZSBjb250ZXh0IG5vZGUsIG9yLCBpZiB0aGUgY29udGV4dCBub2RlIGhhcyBubyB4bWw6bGFuZyBhdHRyaWJ1dGUsIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgeG1sOmxhbmcgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4gb24gdGhlIG5lYXJlc3QgYW5jZXN0b3Igb2YgdGhlIGNvbnRleHQgbm9kZSB0aGF0IGhhcyBhbiB4bWw6bGFuZyBhdHRyaWJ1dGUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggYXR0cmlidXRlLCB0aGVuIGxhbmc8L3A+Cis8cD5JbXBsZW1lbnQgdGhlIGxhbmcoKSBYUGF0aCBmdW5jdGlvbiBib29sZWFuIGxhbmcoc3RyaW5nKSBUaGUgbGFuZyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGxhbmd1YWdlIG9mIHRoZSBjb250ZXh0IG5vZGUgYXMgc3BlY2lmaWVkIGJ5IHhtbDpsYW5nIGF0dHJpYnV0ZXMgaXMgdGhlIHNhbWUgYXMgb3IgaXMgYSBzdWJsYW5ndWFnZSBvZiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCBzdHJpbmcuIFRoZSBsYW5ndWFnZSBvZiB0aGUgY29udGV4dCBub2RlIGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB4bWw6bGFuZyA8YSBocmVmPSJsaWJ4bWwyLVNBWC5odG1sI2F0dHJpYnV0ZSI+YXR0cmlidXRlPC9hPiBvbiB0aGUgY29udGV4dCBub2RlLCBvciwgaWYgdGhlIGNvbnRleHQgbm9kZSBoYXMgbm8geG1sOmxhbmcgYXR0cmlidXRlLCBieSB0aGUgdmFsdWUgb2YgdGhlIHhtbDpsYW5nIDxhIGhyZWY9ImxpYnhtbDItU0FYLmh0bWwjYXR0cmlidXRlIj5hdHRyaWJ1dGU8L2E+IG9uIHRoZSBuZWFyZXN0IGFuY2VzdG9yIG9mIHRoZSBjb250ZXh0IG5vZGUgdGhhdCBoYXMgYW4geG1sOmxhbmcgPGEgaHJlZj0ibGlieG1sMi1TQVguaHRtbCNhdHRyaWJ1dGUiPmF0dHJpYnV0ZTwvYT4uIElmIHRoZXJlIGlzIG5vIHN1Y2ggYXR0cmlidXRlLCB0aGVuIGxhbmc8L3A+CiA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgogPGNvbCBhbGlnbj0ibGVmdCI+CiA8dGJvZHk+CkBAIC0yMDk1LDcgKzIwOTUsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+QHZhbDEgb25jZSBleHRlbmRlZCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuPC90ZD4KKzx0ZD5AdmFsMSBvbmNlIGV4dGVuZGVkIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gRnJlZXMgQHZhbDEgaW4gY2FzZSBvZiBlcnJvci48L3RkPgogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPjwvZGl2PgpAQCAtMzE2NCw3ICszMTY0LDcgQEAKIDwvdHI+CiA8dHI+CiA8dGQ+PHNwYW4gY2xhc3M9InRlcm0iPjxpPjx0dD5SZXR1cm5zPC90dD48L2k+Ojwvc3Bhbj48L3RkPgotPHRkPnRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC48L3RkPgorPHRkPnRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4gSW4gY2FzZSBvZiBlcnJvciB0aGUgbm9kZSBzZXQgaXMgZGVzdHJveWVkIGFuZCBOVUxMIGlzIHJldHVybmVkLjwvdGQ+CiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+PC9kaXY+CkBAIC0zMTg1LDcgKzMxODUsNyBAQAogPC90cj4KIDx0cj4KIDx0ZD48c3BhbiBjbGFzcz0idGVybSI+PGk+PHR0PlJldHVybnM8L3R0PjwvaT46PC9zcGFuPjwvdGQ+Ci08dGQ+dGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LjwvdGQ+Cis8dGQ+dGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LiBGcmVlcyBAdmFsIGluIGNhc2Ugb2YgZXJyb3IuPC90ZD4KIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT48L2Rpdj4KZGlmZiAtLWdpdCBhL2RvYy9kZXZoZWxwL2xpYnhtbDIuZGV2aGVscDIgYi9kb2MvZGV2aGVscC9saWJ4bWwyLmRldmhlbHAyCmluZGV4IDc5NTQxMzIuLmIzMmNlMjcgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZoZWxwL2xpYnhtbDIuZGV2aGVscDIKKysrIGIvZG9jL2RldmhlbHAvbGlieG1sMi5kZXZoZWxwMgpAQCAtNTEsNyArNTEsNiBAQAogICAgIDwvc3ViPgogICA8L2NoYXB0ZXJzPgogICA8ZnVuY3Rpb25zPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJBVFRSSUJVVEVfVU5VU0VEIiBsaW5rPSJsaWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNBVFRSSUJVVEVfVU5VU0VEIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkJBRF9DQVNUIiBsaW5rPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI0JBRF9DQVNUIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkJBU0VfQlVGRkVSX1NJWkUiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI0JBU0VfQlVGRkVSX1NJWkUiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQ0FTVF9UT19CT09MRUFOIiBsaW5rPSJsaWJ4bWwyLXhwYXRoSW50ZXJuYWxzLmh0bWwjQ0FTVF9UT19CT09MRUFOIi8+CkBAIC02Miw3ICs2MSw2IEBACiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkNIRUNLX0VSUk9SMCIgbGluaz0ibGlieG1sMi14cGF0aEludGVybmFscy5odG1sI0NIRUNLX0VSUk9SMCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJDSEVDS19UWVBFIiBsaW5rPSJsaWJ4bWwyLXhwYXRoSW50ZXJuYWxzLmh0bWwjQ0hFQ0tfVFlQRSIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJDSEVDS19UWVBFMCIgbGluaz0ibGlieG1sMi14cGF0aEludGVybmFscy5odG1sI0NIRUNLX1RZUEUwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkRFQlVHX01FTU9SWSIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCNERUJVR19NRU1PUlkiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iREVCVUdfTUVNT1JZX0xPQ0FUSU9OIiBsaW5rPSJsaWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNERUJVR19NRU1PUllfTE9DQVRJT04iLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iSFRNTF9DT01NRU5UX05PREUiIGxpbms9ImxpYnhtbDItSFRNTHRyZWUuaHRtbCNIVE1MX0NPTU1FTlRfTk9ERSIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJIVE1MX0VOVElUWV9SRUZfTk9ERSIgbGluaz0ibGlieG1sMi1IVE1MdHJlZS5odG1sI0hUTUxfRU5USVRZX1JFRl9OT0RFIi8+CkBAIC05MSwxNCArODksMTEgQEAKICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iSVNfUFVCSURDSEFSIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI0lTX1BVQklEQ0hBUiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJJU19QVUJJRENIQVJfQ0giIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjSVNfUFVCSURDSEFSX0NIIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkxJQlhNTDJfTkVXX0JVRkZFUiIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjTElCWE1MMl9ORVdfQlVGRkVSIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkxJQlhNTF9BVFRSX0FMTE9DX1NJWkUiIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9BVFRSX0FMTE9DX1NJWkUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iTElCWE1MX0FUVFJfRk9STUFUIiBsaW5rPSJsaWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNMSUJYTUxfQVRUUl9GT1JNQVQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQiIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9BVVRPTUFUQV9FTkFCTEVEIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkxJQlhNTF9DMTROX0VOQUJMRUQiIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9DMTROX0VOQUJMRUQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iTElCWE1MX0NBVEFMT0dfRU5BQkxFRCIgbGluaz0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX0NBVEFMT0dfRU5BQkxFRCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJMSUJYTUxfREVCVUdfRU5BQkxFRCIgbGluaz0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX0RFQlVHX0VOQUJMRUQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iTElCWE1MX0RFQlVHX1JVTlRJTUUiIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9ERUJVR19SVU5USU1FIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkxJQlhNTF9ETExfSU1QT1JUIiBsaW5rPSJsaWJ4bWwyLXhtbGV4cG9ydHMuaHRtbCNMSUJYTUxfRExMX0lNUE9SVCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJMSUJYTUxfRE9UVEVEX1ZFUlNJT04iIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9ET1RURURfVkVSU0lPTiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJMSUJYTUxfRVhQUl9FTkFCTEVEIiBsaW5rPSJsaWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNMSUJYTUxfRVhQUl9FTkFCTEVEIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkxJQlhNTF9GVFBfRU5BQkxFRCIgbGluaz0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX0ZUUF9FTkFCTEVEIi8+CkBAIC0xMzQsOSArMTI5LDYgQEAKICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iTElCWE1MX1hQVFJfRU5BQkxFRCIgbGluaz0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX1hQVFJfRU5BQkxFRCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQiIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJMSUJYTUxfWkxJQl9FTkFCTEVEIiBsaW5rPSJsaWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNMSUJYTUxfWkxJQl9FTkFCTEVEIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9Ik1PVkVUT19FTkRUQUciIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjTU9WRVRPX0VORFRBRyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJNT1ZFVE9fU1RBUlRUQUciIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjTU9WRVRPX1NUQVJUVEFHIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlNLSVBfRU9MIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI1NLSVBfRU9MIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlNPQ0tFVCIgbGluaz0ibGlieG1sMi1uYW5vZnRwLmh0bWwjU09DS0VUIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IldJVEhPVVRfVFJJTyIgbGluaz0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjV0lUSE9VVF9UUklPIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IldJVEhfVFJJTyIgbGluaz0ibGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjV0lUSF9UUklPIi8+CkBAIC0xNTAsMjMgKzE0MiwxOSBAQAogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYSU5DTFVERV9QQVJTRV9URVhUIiBsaW5rPSJsaWJ4bWwyLXhpbmNsdWRlLmh0bWwjWElOQ0xVREVfUEFSU0VfVEVYVCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYSU5DTFVERV9QQVJTRV9YTUwiIGxpbms9ImxpYnhtbDIteGluY2x1ZGUuaHRtbCNYSU5DTFVERV9QQVJTRV9YTUwiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWElOQ0xVREVfUEFSU0VfWFBPSU5URVIiIGxpbms9ImxpYnhtbDIteGluY2x1ZGUuaHRtbCNYSU5DTFVERV9QQVJTRV9YUE9JTlRFUiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxDQUxMIiBsaW5rPSJsaWJ4bWwyLXhtbGV4cG9ydHMuaHRtbCNYTUxDQUxMIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTENERUNMIiBsaW5rPSJsaWJ4bWwyLXhtbGV4cG9ydHMuaHRtbCNYTUxDREVDTCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxQVUJGVU4iIGxpbms9ImxpYnhtbDIteG1sZXhwb3J0cy5odG1sI1hNTFBVQkZVTiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxQVUJMSUMiIGxpbms9ImxpYnhtbDIteG1sZXhwb3J0cy5odG1sI1hNTFBVQkxJQyIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxQVUJWQVIiIGxpbms9ImxpYnhtbDIteG1sZXhwb3J0cy5odG1sI1hNTFBVQlZBUiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfQ0FTVF9GUFRSIiBsaW5rPSJsaWJ4bWwyLWhhc2guaHRtbCNYTUxfQ0FTVF9GUFRSIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9DQVRBTE9HU19OQU1FU1BBQ0UiIGxpbms9ImxpYnhtbDItY2F0YWxvZy5odG1sI1hNTF9DQVRBTE9HU19OQU1FU1BBQ0UiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX0NBVEFMT0dfUEkiIGxpbms9ImxpYnhtbDItY2F0YWxvZy5odG1sI1hNTF9DQVRBTE9HX1BJIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9DT01QTEVURV9BVFRSUyIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCNYTUxfQ09NUExFVEVfQVRUUlMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX0RFRkFVTFRfVkVSU0lPTiIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCNYTUxfREVGQVVMVF9WRVJTSU9OIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9ERVBSRUNBVEVEIiBsaW5rPSJsaWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNYTUxfREVQUkVDQVRFRCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfREVURUNUX0lEUyIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCNYTUxfREVURUNUX0lEUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfRE9DQl9ET0NVTUVOVF9OT0RFIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCNYTUxfRE9DQl9ET0NVTUVOVF9OT0RFIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9HRVRfQ09OVEVOVCIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX0dFVF9DT05URU5UIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9HRVRfTElORSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX0dFVF9MSU5FIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9MT0NBTF9OQU1FU1BBQ0UiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI1hNTF9MT0NBTF9OQU1FU1BBQ0UiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX01BWF9ESUNUSU9OQVJZX0xJTUlUIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI1hNTF9NQVhfRElDVElPTkFSWV9MSU1JVCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfTUFYX0hVR0VfTEVOR1RIIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI1hNTF9NQVhfSFVHRV9MRU5HVEgiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX01BWF9MT09LVVBfTElNSVQiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjWE1MX01BWF9MT09LVVBfTElNSVQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX01BWF9OQU1FTEVOIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI1hNTF9NQVhfTkFNRUxFTiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfTUFYX05BTUVfTEVOR1RIIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI1hNTF9NQVhfTkFNRV9MRU5HVEgiLz4KQEAgLTI1OSwxNSArMjQ3LDEwIEBACiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9TVUJTVElUVVRFX05PTkUiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjWE1MX1NVQlNUSVRVVEVfTk9ORSIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfU1VCU1RJVFVURV9QRVJFRiIgbGluaz0ibGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbCNYTUxfU1VCU1RJVFVURV9QRVJFRiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfU1VCU1RJVFVURV9SRUYiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjWE1MX1NVQlNUSVRVVEVfUkVGIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhNTF9WQ1RYVF9EVERfVkFMSURBVEVEIiBsaW5rPSJsaWJ4bWwyLXZhbGlkLmh0bWwjWE1MX1ZDVFhUX0RURF9WQUxJREFURUQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX1ZDVFhUX1VTRV9QQ1RYVCIgbGluaz0ibGlieG1sMi12YWxpZC5odG1sI1hNTF9WQ1RYVF9VU0VfUENUWFQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX1hNTF9JRCIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX1hNTF9JRCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfWE1MX05BTUVTUEFDRSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX1hNTF9OQU1FU1BBQ0UiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWE1MX1hQQVRIX0NIRUNLTlMiIGxpbms9ImxpYnhtbDIteHBhdGguaHRtbCNYTUxfWFBBVEhfQ0hFQ0tOUyIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYTUxfWFBBVEhfTk9WQVIiIGxpbms9ImxpYnhtbDIteHBhdGguaHRtbCNYTUxfWFBBVEhfTk9WQVIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWFBBVEhfTE9DQVRJT05TRVQiIGxpbms9ImxpYnhtbDIteHBhdGguaHRtbCNYUEFUSF9MT0NBVElPTlNFVCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYUEFUSF9QT0lOVCIgbGluaz0ibGlieG1sMi14cGF0aC5odG1sI1hQQVRIX1BPSU5UIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IlhQQVRIX1JBTkdFIiBsaW5rPSJsaWJ4bWwyLXhwYXRoLmh0bWwjWFBBVEhfUkFOR0UiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iWFBfRVJST1IiIGxpbms9ImxpYnhtbDIteHBhdGhJbnRlcm5hbHMuaHRtbCNYUF9FUlJPUiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJYUF9FUlJPUjAiIGxpbms9ImxpYnhtbDIteHBhdGhJbnRlcm5hbHMuaHRtbCNYUF9FUlJPUjAiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iaHRtbERlZmF1bHRTdWJlbGVtZW50IiBsaW5rPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sRGVmYXVsdFN1YmVsZW1lbnQiLz4KQEAgLTUxNiw2ICs0OTksMTIgQEAKICAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfRUxFTUVOVF9UWVBFX0VNUFRZIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCNYTUxfRUxFTUVOVF9UWVBFX0VNUFRZIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX0VMRU1FTlRfVFlQRV9NSVhFRCIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX0VMRU1FTlRfVFlQRV9NSVhFRCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9IlhNTF9FTEVNRU5UX1RZUEVfVU5ERUZJTkVEIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCNYTUxfRUxFTUVOVF9UWVBFX1VOREVGSU5FRCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9IlhNTF9FTkNfRVJSX0lOUFVUIiBsaW5rPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjWE1MX0VOQ19FUlJfSU5QVVQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfRU5DX0VSUl9JTlRFUk5BTCIgbGluaz0ibGlieG1sMi1lbmNvZGluZy5odG1sI1hNTF9FTkNfRVJSX0lOVEVSTkFMIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX0VOQ19FUlJfTUVNT1JZIiBsaW5rPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjWE1MX0VOQ19FUlJfTUVNT1JZIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX0VOQ19FUlJfUEFSVElBTCIgbGluaz0ibGlieG1sMi1lbmNvZGluZy5odG1sI1hNTF9FTkNfRVJSX1BBUlRJQUwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfRU5DX0VSUl9TUEFDRSIgbGluaz0ibGlieG1sMi1lbmNvZGluZy5odG1sI1hNTF9FTkNfRVJSX1NQQUNFIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX0VOQ19FUlJfU1VDQ0VTUyIgbGluaz0ibGlieG1sMi1lbmNvZGluZy5odG1sI1hNTF9FTkNfRVJSX1NVQ0NFU1MiLz4KICAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfRU5USVRZX0RFQ0wiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI1hNTF9FTlRJVFlfREVDTCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9IlhNTF9FTlRJVFlfTk9ERSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX0VOVElUWV9OT0RFIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX0VOVElUWV9SRUZfTk9ERSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjWE1MX0VOVElUWV9SRUZfTk9ERSIvPgpAQCAtNzgxLDYgKzc3MCw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1BBUlNFUl9TVUJTVF9FTlRJVElFUyIgbGluaz0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCNYTUxfUEFSU0VSX1NVQlNUX0VOVElUSUVTIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1BBUlNFUl9TWVNURU1fTElURVJBTCIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCNYTUxfUEFSU0VSX1NZU1RFTV9MSVRFUkFMIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1BBUlNFUl9WQUxJREFURSIgbGluaz0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCNYTUxfUEFSU0VSX1ZBTElEQVRFIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1BBUlNFUl9YTUxfREVDTCIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCNYTUxfUEFSU0VSX1hNTF9ERUNMIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1BBUlNFX0JJR19MSU5FUyIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCNYTUxfUEFSU0VfQklHX0xJTkVTIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1BBUlNFX0NPTVBBQ1QiIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjWE1MX1BBUlNFX0NPTVBBQ1QiLz4KICAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfUEFSU0VfRE9NIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI1hNTF9QQVJTRV9ET00iLz4KQEAgLTE0MzEsNiArMTQyMSw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1RSRUVfTk9UX1VURjgiIGxpbms9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCNYTUxfVFJFRV9OT1RfVVRGOCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9IlhNTF9UUkVFX1VOVEVSTUlOQVRFRF9FTlRJVFkiIGxpbms9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCNYTUxfVFJFRV9VTlRFUk1JTkFURURfRU5USVRZIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1dBUl9DQVRBTE9HX1BJIiBsaW5rPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjWE1MX1dBUl9DQVRBTE9HX1BJIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iWE1MX1dBUl9FTkNPRElOR19NSVNNQVRDSCIgbGluaz0ibGlieG1sMi14bWxlcnJvci5odG1sI1hNTF9XQVJfRU5DT0RJTkdfTUlTTUFUQ0giLz4KICAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfV0FSX0VOVElUWV9SRURFRklORUQiIGxpbms9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCNYTUxfV0FSX0VOVElUWV9SRURFRklORUQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfV0FSX0xBTkdfVkFMVUUiIGxpbms9ImxpYnhtbDIteG1sZXJyb3IuaHRtbCNYTUxfV0FSX0xBTkdfVkFMVUUiLz4KICAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJYTUxfV0FSX05TX0NPTFVNTiIgbGluaz0ibGlieG1sMi14bWxlcnJvci5odG1sI1hNTF9XQVJfTlNfQ09MVU1OIi8+CkBAIC0xNTk1LDYgKzE1ODYsNyBAQAogICAgIDxrZXl3b3JkIHR5cGU9InR5cGVkZWYiIG5hbWU9InhtbENoUmFuZ2VHcm91cFB0ciIgbGluaz0ibGlieG1sMi1jaHZhbGlkLmh0bWwjeG1sQ2hSYW5nZUdyb3VwUHRyIi8+CiAgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0ieG1sQ2hTUmFuZ2VQdHIiIGxpbms9ImxpYnhtbDItY2h2YWxpZC5odG1sI3htbENoU1JhbmdlUHRyIi8+CiAgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0ieG1sQ2hhciIgbGluaz0ibGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxDaGFyIi8+CisgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0ieG1sQ2hhckVuY0Vycm9yIiBsaW5rPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY0Vycm9yIi8+CiAgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0ieG1sQ2hhckVuY29kaW5nIiBsaW5rPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nIi8+CiAgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0ieG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciIgbGluaz0ibGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiLz4KICAgICA8a2V5d29yZCB0eXBlPSJ0eXBlZGVmIiBuYW1lPSJ4bWxET01XcmFwQ3R4dFB0ciIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sRE9NV3JhcEN0eHRQdHIiLz4KQEAgLTE3MTcsNiArMTcwOSw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJodG1sRW50aXR5RGVzYyIgbGluaz0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbEVudGl0eURlc2MiLz4KICAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InhsaW5rSGFuZGxlciIgbGluaz0ibGlieG1sMi14bGluay5odG1sI3hsaW5rSGFuZGxlciIvPgogICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ieG1sQXR0ciIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sQXR0ciIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ieG1sQXR0ckhhc2hCdWNrZXQiIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQXR0ckhhc2hCdWNrZXQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InhtbEF0dHJpYnV0ZSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sQXR0cmlidXRlIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJ4bWxBdHRyaWJ1dGVUYWJsZSIgbGluaz0ibGlieG1sMi12YWxpZC5odG1sI3htbEF0dHJpYnV0ZVRhYmxlIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJ4bWxBdXRvbWF0YSIgbGluaz0ibGlieG1sMi14bWxhdXRvbWF0YS5odG1sI3htbEF1dG9tYXRhIi8+CkBAIC0xNzYxLDYgKzE3NTQsNyBAQAogICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ieG1sUGFyc2VySW5wdXRCdWZmZXIiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJ4bWxQYXJzZXJOb2RlSW5mbyIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOb2RlSW5mbyIvPgogICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ieG1sUGFyc2VyTm9kZUluZm9TZXEiIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyTm9kZUluZm9TZXEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InhtbFBhcnNlck5zRGF0YSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJOc0RhdGEiLz4KICAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InhtbFBhdHRlcm4iIGxpbms9ImxpYnhtbDItcGF0dGVybi5odG1sI3htbFBhdHRlcm4iLz4KICAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InhtbFJNdXRleCIgbGluaz0ibGlieG1sMi10aHJlYWRzLmh0bWwjeG1sUk11dGV4Ii8+CiAgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJ4bWxSZWYiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbFJlZiIvPgpAQCAtMTg1MSw3ICsxODQ1LDcgQEAKICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sQ2hhckVuY29kaW5nSW5wdXRGdW5jIiBsaW5rPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sQ2hhckVuY29kaW5nSW5wdXRGdW5jIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbENoYXJFbmNvZGluZ091dHB1dEZ1bmMiIGxpbms9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdPdXRwdXRGdW5jIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERPTVdyYXBBY3F1aXJlTnNGdW5jdGlvbiIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sRE9NV3JhcEFjcXVpcmVOc0Z1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERlcmVnaXN0ZXJOb2RlRnVuYyIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sRGVyZWdpc3Rlck5vZGVGdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERlcmVnaXN0ZXJOb2RlRnVuYyIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sRGVyZWdpc3Rlck5vZGVGdW5jIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbEVudGl0eVJlZmVyZW5jZUZ1bmMiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sRW50aXR5UmVmZXJlbmNlRnVuYyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxFeHRlcm5hbEVudGl0eUxvYWRlciIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxFeHRlcm5hbEVudGl0eUxvYWRlciIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxGcmVlRnVuYyIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxGcmVlRnVuYyIvPgpAQCAtMTg2OCwxNiArMTg2MiwxNiBAQAogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxMaXN0RGVhbGxvY2F0b3IiIGxpbms9ImxpYnhtbDItbGlzdC5odG1sI3htbExpc3REZWFsbG9jYXRvciIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxMaXN0V2Fsa2VyIiBsaW5rPSJsaWJ4bWwyLWxpc3QuaHRtbCN4bWxMaXN0V2Fsa2VyIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE1hbGxvY0Z1bmMiIGxpbms9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWFsbG9jRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sT3V0cHV0Q2xvc2VDYWxsYmFjayIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dENsb3NlQ2FsbGJhY2siLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sT3V0cHV0TWF0Y2hDYWxsYmFjayIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dE1hdGNoQ2FsbGJhY2siLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sT3V0cHV0T3BlbkNhbGxiYWNrIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0T3BlbkNhbGxiYWNrIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE91dHB1dFdyaXRlQ2FsbGJhY2siIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRXcml0ZUNhbGxiYWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFBhcnNlcklucHV0RGVhbGxvY2F0ZSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZXJJbnB1dERlYWxsb2NhdGUiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sUmVhbGxvY0Z1bmMiIGxpbms9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sUmVhbGxvY0Z1bmMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sUmVnRXhlY0NhbGxiYWNrcyIgbGluaz0ibGlieG1sMi14bWxyZWdleHAuaHRtbCN4bWxSZWdFeGVjQ2FsbGJhY2tzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFJlZ2lzdGVyTm9kZUZ1bmMiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFJlZ2lzdGVyTm9kZUZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sUmVnaXN0ZXJOb2RlRnVuYyIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRnVuYyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxSZWxheE5HVmFsaWRpdHlFcnJvckZ1bmMiIGxpbms9ImxpYnhtbDItcmVsYXhuZy5odG1sI3htbFJlbGF4TkdWYWxpZGl0eUVycm9yRnVuYyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxSZWxheE5HVmFsaWRpdHlXYXJuaW5nRnVuYyIgbGluaz0ibGlieG1sMi1yZWxheG5nLmh0bWwjeG1sUmVsYXhOR1ZhbGlkaXR5V2FybmluZ0Z1bmMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sU2NoZW1hVmFsaWRpdHlFcnJvckZ1bmMiIGxpbms9ImxpYnhtbDIteG1sc2NoZW1hcy5odG1sI3htbFNjaGVtYVZhbGlkaXR5RXJyb3JGdW5jIi8+CkBAIC0xOTAwLDE5ICsxODk0LDcgQEAKICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sWFBhdGhWYXJpYWJsZUxvb2t1cEZ1bmMiIGxpbms9ImxpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aFZhcmlhYmxlTG9va3VwRnVuYyIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJlbXB0eUV4cCIgbGluaz0ibGlieG1sMi14bWxyZWdleHAuaHRtbCNlbXB0eUV4cCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmb3JiaWRkZW5FeHAiIGxpbms9ImxpYnhtbDIteG1scmVnZXhwLmh0bWwjZm9yYmlkZGVuRXhwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9Imh0bWxEZWZhdWx0U0FYSGFuZGxlciIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjaHRtbERlZmF1bHRTQVhIYW5kbGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9Im9sZFhNTFdEY29tcGF0aWJpbGl0eSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjb2xkWE1MV0Rjb21wYXRpYmlsaXR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbEJ1ZmZlckFsbG9jU2NoZW1lIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxCdWZmZXJBbGxvY1NjaGVtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxEZWZhdWx0QnVmZmVyU2l6ZSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sRGVmYXVsdEJ1ZmZlclNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sRGVmYXVsdFNBWEhhbmRsZXIiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlZmF1bHRTQVhIYW5kbGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbERlZmF1bHRTQVhMb2NhdG9yIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxEZWZhdWx0U0FYTG9jYXRvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sRnJlZSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sRnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxHZW5lcmljRXJyb3IiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEdlbmVyaWNFcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxHZW5lcmljRXJyb3JDb250ZXh0IiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxHZW5lcmljRXJyb3JDb250ZXh0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxJbmRlbnRUcmVlT3V0cHV0IiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxJbmRlbnRUcmVlT3V0cHV0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbEZyZWUiIGxpbms9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sRnJlZSIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxJc0Jhc2VDaGFyR3JvdXAiIGxpbms9ImxpYnhtbDItY2h2YWxpZC5odG1sI3htbElzQmFzZUNoYXJHcm91cCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxJc0NoYXJHcm91cCIgbGluaz0ibGlieG1sMi1jaHZhbGlkLmh0bWwjeG1sSXNDaGFyR3JvdXAiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sSXNDb21iaW5pbmdHcm91cCIgbGluaz0ibGlieG1sMi1jaHZhbGlkLmh0bWwjeG1sSXNDb21iaW5pbmdHcm91cCIvPgpAQCAtMTkyMCwyOSArMTkwMiwxNSBAQAogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxJc0V4dGVuZGVyR3JvdXAiIGxpbms9ImxpYnhtbDItY2h2YWxpZC5odG1sI3htbElzRXh0ZW5kZXJHcm91cCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxJc0lkZW9ncmFwaGljR3JvdXAiIGxpbms9ImxpYnhtbDItY2h2YWxpZC5odG1sI3htbElzSWRlb2dyYXBoaWNHcm91cCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxJc1B1YmlkQ2hhcl90YWIiIGxpbms9ImxpYnhtbDItY2h2YWxpZC5odG1sI3htbElzUHViaWRDaGFyX3RhYiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbExhc3RFcnJvciIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sTGFzdEVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbE1hbGxvYyIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sTWFsbG9jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbE1hbGxvY0F0b21pYyIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sTWFsbG9jQXRvbWljIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbE1lbVN0cmR1cCIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sTWVtU3RyZHVwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sUGFyc2VyRGVidWdFbnRpdGllcyIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUGFyc2VyRGVidWdFbnRpdGllcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxNYWxsb2MiIGxpbms9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWFsbG9jIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbE1hbGxvY0F0b21pYyIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNYWxsb2NBdG9taWMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sTWVtU3RyZHVwIiBsaW5rPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1lbVN0cmR1cCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxQYXJzZXJNYXhEZXB0aCIgbGluaz0ibGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbCN4bWxQYXJzZXJNYXhEZXB0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxQYXJzZXJWZXJzaW9uIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQYXJzZXJWZXJzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxSZWFsbG9jIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxSZWFsbG9jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFNhdmVOb0VtcHR5VGFncyIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sU2F2ZU5vRW1wdHlUYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFBhcnNlclZlcnNpb24iIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VyVmVyc2lvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxSZWFsbG9jIiBsaW5rPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbFJlYWxsb2MiLz4KICAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sU3RyaW5nQ29tbWVudCIgbGluaz0ibGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbCN4bWxTdHJpbmdDb21tZW50Ii8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFN0cmluZ1RleHQiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sU3RyaW5nVGV4dCIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxTdHJpbmdUZXh0Tm9lbmMiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sU3RyaW5nVGV4dE5vZW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFN0cnVjdHVyZWRFcnJvciIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sU3RydWN0dXJlZEVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFN0cnVjdHVyZWRFcnJvckNvbnRleHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0ieG1sVHJlZUluZGVudFN0cmluZyIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sVHJlZUluZGVudFN0cmluZyIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxYUGF0aE5BTiIgbGluaz0ibGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoTkFOIi8+CiAgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9InhtbFhQYXRoTklORiIgbGluaz0ibGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoTklORiIvPgogICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJ4bWxYUGF0aFBJTkYiIGxpbms9ImxpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aFBJTkYiLz4KQEAgLTE5NzEsNyArMTkzOSw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9Imhhc0ludGVybmFsU3Vic2V0ICgpIiBsaW5rPSJsaWJ4bWwyLVNBWC5odG1sI2hhc0ludGVybmFsU3Vic2V0Ii8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9Imh0bWxBdHRyQWxsb3dlZCAoKSIgbGluaz0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbEF0dHJBbGxvd2VkIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9Imh0bWxBdXRvQ2xvc2VUYWcgKCkiIGxpbms9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxBdXRvQ2xvc2VUYWciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0ICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI2h0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQgKCkiIGxpbms9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJodG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dCAoKSIgbGluaz0ibGlieG1sMi1IVE1McGFyc2VyLmh0bWwjaHRtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0ICgpIiBsaW5rPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbEN0eHRSZWFkRG9jICgpIiBsaW5rPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sQ3R4dFJlYWREb2MiLz4KQEAgLTE5OTUsMTMgKzE5NjMsMTQgQEAKICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbEZyZWVQYXJzZXJDdHh0ICgpIiBsaW5rPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sRnJlZVBhcnNlckN0eHQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbEdldE1ldGFFbmNvZGluZyAoKSIgbGluaz0ibGlieG1sMi1IVE1MdHJlZS5odG1sI2h0bWxHZXRNZXRhRW5jb2RpbmciLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbEhhbmRsZU9taXR0ZWRFbGVtICgpIiBsaW5rPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sSGFuZGxlT21pdHRlZEVsZW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbEluaXRBdXRvQ2xvc2UgKCkiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjaHRtbEluaXRBdXRvQ2xvc2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbEluaXRBdXRvQ2xvc2UgKCkiIGxpbms9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxJbml0QXV0b0Nsb3NlIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9Imh0bWxJc0F1dG9DbG9zZWQgKCkiIGxpbms9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxJc0F1dG9DbG9zZWQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbElzQm9vbGVhbkF0dHIgKCkiIGxpbms9ImxpYnhtbDItSFRNTHRyZWUuaHRtbCNodG1sSXNCb29sZWFuQXR0ciIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJodG1sSXNTY3JpcHRBdHRyaWJ1dGUgKCkiIGxpbms9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxJc1NjcmlwdEF0dHJpYnV0ZSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJodG1sTmV3RG9jICgpIiBsaW5rPSJsaWJ4bWwyLUhUTUx0cmVlLmh0bWwjaHRtbE5ld0RvYyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJodG1sTmV3RG9jTm9EdEQgKCkiIGxpbms9ImxpYnhtbDItSFRNTHRyZWUuaHRtbCNodG1sTmV3RG9jTm9EdEQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbE5ld1BhcnNlckN0eHQgKCkiIGxpbms9ImxpYnhtbDItSFRNTHBhcnNlci5odG1sI2h0bWxOZXdQYXJzZXJDdHh0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9Imh0bWxOZXdTQVhQYXJzZXJDdHh0ICgpIiBsaW5rPSJsaWJ4bWwyLUhUTUxwYXJzZXIuaHRtbCNodG1sTmV3U0FYUGFyc2VyQ3R4dCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJodG1sTm9kZUR1bXAgKCkiIGxpbms9ImxpYnhtbDItSFRNTHRyZWUuaHRtbCNodG1sTm9kZUR1bXAiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbE5vZGVEdW1wRmlsZSAoKSIgbGluaz0ibGlieG1sMi1IVE1MdHJlZS5odG1sI2h0bWxOb2RlRHVtcEZpbGUiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iaHRtbE5vZGVEdW1wRmlsZUZvcm1hdCAoKSIgbGluaz0ibGlieG1sMi1IVE1MdHJlZS5odG1sI2h0bWxOb2RlRHVtcEZpbGVGb3JtYXQiLz4KQEAgLTIxNjMsNiArMjEzMiw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbENoZWNrRmlsZW5hbWUgKCkiIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxDaGVja0ZpbGVuYW1lIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbENoZWNrSFRUUElucHV0ICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sQ2hlY2tIVFRQSW5wdXQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sQ2hlY2tMYW5ndWFnZUlEICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI3htbENoZWNrTGFuZ3VhZ2VJRCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSAoKSIgbGluaz0ibGlieG1sMi10aHJlYWRzLmh0bWwjeG1sQ2hlY2tUaHJlYWRMb2NhbFN0b3JhZ2UiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sQ2hlY2tVVEY4ICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbENoZWNrVVRGOCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxDaGVja1ZlcnNpb24gKCkiIGxpbms9ImxpYnhtbDIteG1sdmVyc2lvbi5odG1sI3htbENoZWNrVmVyc2lvbiIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxDaGlsZEVsZW1lbnRDb3VudCAoKSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sQ2hpbGRFbGVtZW50Q291bnQiLz4KQEAgLTIyMTYsNiArMjE4Niw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbEN0eHRSZXNldCAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0UmVzZXQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sQ3R4dFJlc2V0TGFzdEVycm9yICgpIiBsaW5rPSJsaWJ4bWwyLXhtbGVycm9yLmh0bWwjeG1sQ3R4dFJlc2V0TGFzdEVycm9yIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbEN0eHRSZXNldFB1c2ggKCkiIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ3R4dFJlc2V0UHVzaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbiAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbiIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxDdHh0VXNlT3B0aW9ucyAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDdHh0VXNlT3B0aW9ucyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxDdXJyZW50Q2hhciAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbCN4bWxDdXJyZW50Q2hhciIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxET01XcmFwQWRvcHROb2RlICgpIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxET01XcmFwQWRvcHROb2RlIi8+CkBAIC0yMjM4LDcgKzIyMDksNyBAQAogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxEZWNvZGVFbnRpdGllcyAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXJJbnRlcm5hbHMuaHRtbCN4bWxEZWNvZGVFbnRpdGllcyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxEZWZhdWx0U0FYSGFuZGxlckluaXQgKCkiIGxpbms9ImxpYnhtbDItU0FYMi5odG1sI3htbERlZmF1bHRTQVhIYW5kbGVySW5pdCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxEZWxFbmNvZGluZ0FsaWFzICgpIiBsaW5rPSJsaWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sRGVsRW5jb2RpbmdBbGlhcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxEZXRlY3RDaGFyRW5jb2RpbmcgKCkiIGxpbms9ImxpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxEZXRlY3RDaGFyRW5jb2RpbmciLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRGljdENsZWFudXAgKCkiIGxpbms9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RDbGVhbnVwIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERpY3RDcmVhdGUgKCkiIGxpbms9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RDcmVhdGUiLz4KQEAgLTIyNTIsNyArMjIyMyw2IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERpY3RSZWZlcmVuY2UgKCkiIGxpbms9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RSZWZlcmVuY2UiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRGljdFNldExpbWl0ICgpIiBsaW5rPSJsaWJ4bWwyLWRpY3QuaHRtbCN4bWxEaWN0U2V0TGltaXQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRGljdFNpemUgKCkiIGxpbms9ImxpYnhtbDItZGljdC5odG1sI3htbERpY3RTaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERsbE1haW4gKCkiIGxpbms9ImxpYnhtbDItdGhyZWFkcy5odG1sI3htbERsbE1haW4iLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRG9jQ29weU5vZGUgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY0NvcHlOb2RlIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERvY0NvcHlOb2RlTGlzdCAoKSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sRG9jQ29weU5vZGVMaXN0Ii8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbERvY0R1bXAgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbERvY0R1bXAiLz4KQEAgLTIyNzUsNyArMjI0NSw2IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbEVuY29kZUVudGl0aWVzICgpIiBsaW5rPSJsaWJ4bWwyLWVudGl0aWVzLmh0bWwjeG1sRW5jb2RlRW50aXRpZXMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQgKCkiIGxpbms9ImxpYnhtbDItZW50aXRpZXMuaHRtbCN4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxFbmNvZGVTcGVjaWFsQ2hhcnMgKCkiIGxpbms9ImxpYnhtbDItZW50aXRpZXMuaHRtbCN4bWxFbmNvZGVTcGVjaWFsQ2hhcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRXJyTWVtb3J5ICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlckludGVybmFscy5odG1sI3htbEVyck1lbW9yeSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxFeHBDdHh0TmJDb25zICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHJlZ2V4cC5odG1sI3htbEV4cEN0eHROYkNvbnMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRXhwQ3R4dE5iTm9kZXMgKCkiIGxpbms9ImxpYnhtbDIteG1scmVnZXhwLmh0bWwjeG1sRXhwQ3R4dE5iTm9kZXMiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRXhwRHVtcCAoKSIgbGluaz0ibGlieG1sMi14bWxyZWdleHAuaHRtbCN4bWxFeHBEdW1wIi8+CkBAIC0yMzEwLDYgKzIyNzksNyBAQAogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxGcmVlRWxlbWVudENvbnRlbnQgKCkiIGxpbms9ImxpYnhtbDItdmFsaWQuaHRtbCN4bWxGcmVlRWxlbWVudENvbnRlbnQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRnJlZUVsZW1lbnRUYWJsZSAoKSIgbGluaz0ibGlieG1sMi12YWxpZC5odG1sI3htbEZyZWVFbGVtZW50VGFibGUiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRnJlZUVudGl0aWVzVGFibGUgKCkiIGxpbms9ImxpYnhtbDItZW50aXRpZXMuaHRtbCN4bWxGcmVlRW50aXRpZXNUYWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxGcmVlRW50aXR5ICgpIiBsaW5rPSJsaWJ4bWwyLWVudGl0aWVzLmh0bWwjeG1sRnJlZUVudGl0eSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxGcmVlRW51bWVyYXRpb24gKCkiIGxpbms9ImxpYnhtbDItdmFsaWQuaHRtbCN4bWxGcmVlRW51bWVyYXRpb24iLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sRnJlZUlEVGFibGUgKCkiIGxpbms9ImxpYnhtbDItdmFsaWQuaHRtbCN4bWxGcmVlSURUYWJsZSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxGcmVlSW5wdXRTdHJlYW0gKCkiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sRnJlZUlucHV0U3RyZWFtIi8+CkBAIC0yMzUwLDcgKzIzMjAsNyBAQAogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxHZXRFeHRlcm5hbEVudGl0eUxvYWRlciAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxHZXRFeHRlcm5hbEVudGl0eUxvYWRlciIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxHZXRGZWF0dXJlICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEdldEZlYXR1cmUiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sR2V0RmVhdHVyZXNMaXN0ICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbEdldEZlYXR1cmVzTGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxHZXRHbG9iYWxTdGF0ZSAoKSIgbGluaz0ibGlieG1sMi10aHJlYWRzLmh0bWwjeG1sR2V0R2xvYmFsU3RhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sR2V0R2xvYmFsU3RhdGUgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbEdldEdsb2JhbFN0YXRlIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbEdldElEICgpIiBsaW5rPSJsaWJ4bWwyLXZhbGlkLmh0bWwjeG1sR2V0SUQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sR2V0SW50U3Vic2V0ICgpIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxHZXRJbnRTdWJzZXQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sR2V0TGFzdENoaWxkICgpIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxHZXRMYXN0Q2hpbGQiLz4KQEAgLTI0NzksNiArMjQ0OSw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE1lbVJlYWxsb2MgKCkiIGxpbms9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWVtUmVhbGxvYyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxNZW1TZXR1cCAoKSIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNZW1TZXR1cCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxNZW1TaG93ICgpIiBsaW5rPSJsaWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1lbVNob3ciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sTWVtU2l6ZSAoKSIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNZW1TaXplIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE1lbVN0cmR1cExvYyAoKSIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNZW1TdHJkdXBMb2MiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sTWVtVXNlZCAoKSIgbGluaz0ibGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNZW1Vc2VkIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE1lbW9yeUR1bXAgKCkiIGxpbms9ImxpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWVtb3J5RHVtcCIvPgpAQCAtMjU2OCw2ICsyNTM5LDcgQEAKICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sTmV3UHJvcCAoKSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sTmV3UHJvcCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxOZXdSTXV0ZXggKCkiIGxpbms9ImxpYnhtbDItdGhyZWFkcy5odG1sI3htbE5ld1JNdXRleCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxOZXdSZWZlcmVuY2UgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbE5ld1JlZmVyZW5jZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxOZXdTQVhQYXJzZXJDdHh0ICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbE5ld1NBWFBhcnNlckN0eHQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sTmV3U3RyaW5nSW5wdXRTdHJlYW0gKCkiIGxpbms9ImxpYnhtbDItcGFyc2VySW50ZXJuYWxzLmh0bWwjeG1sTmV3U3RyaW5nSW5wdXRTdHJlYW0iLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sTmV3VGV4dCAoKSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sTmV3VGV4dCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxOZXdUZXh0Q2hpbGQgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbE5ld1RleHRDaGlsZCIvPgpAQCAtMjYwOSw3ICsyNTgxLDcgQEAKICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmQgKCkiIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxPdXRwdXRCdWZmZXJDcmVhdGVGZCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZSAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxPdXRwdXRCdWZmZXJDcmVhdGVJTyAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dEJ1ZmZlckNyZWF0ZUlPIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbE91dHB1dEJ1ZmZlckZsdXNoICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sT3V0cHV0QnVmZmVyRmx1c2giLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sT3V0cHV0QnVmZmVyR2V0Q29udGVudCAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbE91dHB1dEJ1ZmZlckdldENvbnRlbnQiLz4KQEAgLTI2OTEsNyArMjY2Myw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmQgKCkiIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZkIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZSAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVJTyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbSAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMiLz4KQEAgLTI3NjEsNyArMjczMyw3IEBACiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFJlZ2lzdGVyRGVmYXVsdE91dHB1dENhbGxiYWNrcyAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbFJlZ2lzdGVyRGVmYXVsdE91dHB1dENhbGxiYWNrcyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUmVnaXN0ZXJIVFRQUG9zdENhbGxiYWNrcyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxSZWdpc3Rlck5vZGVEZWZhdWx0ICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxSZWdpc3Rlck5vZGVEZWZhdWx0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFJlZ2lzdGVyTm9kZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbFJlZ2lzdGVyTm9kZURlZmF1bHQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MgKCkiIGxpbms9ImxpYnhtbDIteG1sSU8uaHRtbCN4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxSZWxheE5HQ2xlYW51cFR5cGVzICgpIiBsaW5rPSJsaWJ4bWwyLXJlbGF4bmcuaHRtbCN4bWxSZWxheE5HQ2xlYW51cFR5cGVzIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFJlbGF4TkdEdW1wICgpIiBsaW5rPSJsaWJ4bWwyLXJlbGF4bmcuaHRtbCN4bWxSZWxheE5HRHVtcCIvPgpAQCAtMzA2Miw2ICszMDM0LDcgQEAKICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGV4dFJlYWRlclNjaGVtYVZhbGlkYXRlICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJTY2hlbWFWYWxpZGF0ZSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGVDdHh0ICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJTY2hlbWFWYWxpZGF0ZUN0eHQiLz4KICAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGV4dFJlYWRlclNldEVycm9ySGFuZGxlciAoKSIgbGluaz0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyU2V0RXJyb3JIYW5kbGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRleHRSZWFkZXJTZXRTY2hlbWEgKCkiIGxpbms9ImxpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclNldFNjaGVtYSIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUZXh0UmVhZGVyU2V0U3RydWN0dXJlZEVycm9ySGFuZGxlciAoKSIgbGluaz0ibGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyU2V0U3RydWN0dXJlZEVycm9ySGFuZGxlciIvPgpAQCAtMzE0MiwyNSArMzExNSwyNSBAQAogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0UEkgKCkiIGxpbms9ImxpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFBJIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRSYXcgKCkiIGxpbms9ImxpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFJhdyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0U3RyaW5nICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRTdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0ICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlNhdmVOb0VtcHR5VGFncyAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyAoKSIgbGluaz0ibGlieG1sMi1nbG9iYWxzLmh0bWwjeG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUgKCkiIGxpbms9ImxpYnhtbDItZ2xvYmFscy5odG1sI3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nICgpIiBsaW5rPSJsaWJ4bWwyLWdsb2JhbHMuaHRtbCN4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lICgpIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSAoKSIgbGluaz0ibGlieG1sMi10cmVlLmh0bWwjeG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0ICgpIiBsaW5rPSJsaWJ4bWwyLXRyZWUuaHRtbCN4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0ICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHNhdmUuaHRtbCN4bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUgKCkiIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSAoKSIgbGluaz0ibGlieG1sMi1wYXJzZXIuaHRtbCN4bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0ICgpIiBsaW5rPSJsaWJ4bWwyLXhtbElPLmh0bWwjeG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMgKCkiIGxpbms9ImxpYnhtbDItcGFyc2VyLmh0bWwjeG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCAoKSIgbGluaz0ibGlieG1sMi14bWxJTy5odG1sI3htbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQgKCkiIGxpbms9ImxpYnhtbDItdHJlZS5odG1sI3htbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHNhdmUuaHRtbCN4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYyAoKSIgbGluaz0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyAoKSIgbGluaz0ibGlieG1sMi14bWxlcnJvci5odG1sI3htbFRockRlZlNldFN0cnVjdHVyZWRFcnJvckZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlICgpIiBsaW5rPSJsaWJ4bWwyLXBhcnNlci5odG1sI3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHNhdmUuaHRtbCN4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFVDU0lzQWVnZWFuTnVtYmVycyAoKSIgbGluaz0ibGlieG1sMi14bWx1bmljb2RlLmh0bWwjeG1sVUNTSXNBZWdlYW5OdW1iZXJzIi8+CiAgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9InhtbFVDU0lzQWxwaGFiZXRpY1ByZXNlbnRhdGlvbkZvcm1zICgpIiBsaW5rPSJsaWJ4bWwyLXhtbHVuaWNvZGUuaHRtbCN4bWxVQ1NJc0FscGhhYmV0aWNQcmVzZW50YXRpb25Gb3JtcyIvPgogICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJ4bWxVQ1NJc0FyYWJpYyAoKSIgbGluaz0ibGlieG1sMi14bWx1bmljb2RlLmh0bWwjeG1sVUNTSXNBcmFiaWMiLz4KZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy8uZ2l0aWdub3JlIGIvZG9jL2V4YW1wbGVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyNDRmMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9leGFtcGxlcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTUgQEAKKy9pbzEKKy9pbzIKKy9wYXJzZTEKKy9wYXJzZTIKKy9wYXJzZTMKKy9wYXJzZTQKKy9yZWFkZXIxCisvcmVhZGVyMgorL3JlYWRlcjMKKy9yZWFkZXI0CisvdGVzdFdyaXRlcgorL3RyZWUxCisvdHJlZTIKKy94cGF0aDEKKy94cGF0aDIKZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy9NYWtlZmlsZS5hbSBiL2RvYy9leGFtcGxlcy9NYWtlZmlsZS5hbQppbmRleCA3NWUxMzhiLi5lMzBjMDJiIDEwMDY0NAotLS0gYS9kb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrIGIvZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtCkBAIC0yMiw3ICsyMiw2IEBACiAKIGNsZWFuLWxvY2FsOgogCXRlc3QgLWYgTWFrZWZpbGUuYW0gfHwgcm0gLWYgdGVzdD8ueG1sCi0Jcm0gLWYgLm1lbWR1bXAKIAogRVhUUkFfRElTVCA9IFwKIAlleGFtcGxlcy54bWwgXApAQCAtODYsMzUgKzg1LDE4IEBACiBjaGVjay1sb2NhbDoKIAlAdGVzdCAtZiBNYWtlZmlsZS5hbSB8fCB0ZXN0IC1mIHRlc3QxLnhtbCB8fCAkKExOX1MpICQoc3JjZGlyKS90ZXN0Py54bWwgLgogCUAoZWNobyAnIyMgZXhhbXBsZXMgcmVncmVzc2lvbiB0ZXN0cycpCi0JQChlY2hvID4gLm1lbWR1bXApCiAJQCQoQ0hFQ0tFUikgLi9pbzEgPi9kZXYvbnVsbAotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQCQoQ0hFQ0tFUikgLi9pbzIgPi9kZXYvbnVsbAotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQCQoQ0hFQ0tFUikgLi9wYXJzZTEgdGVzdDEueG1sCi0JQGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCIgOyBleGl0IDAKIAlAJChDSEVDS0VSKSAuL3BhcnNlMiB0ZXN0Mi54bWwKLQlAZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIiA7IGV4aXQgMAogCUAkKENIRUNLRVIpIC4vcGFyc2UzCi0JQGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCIgOyBleGl0IDAKIAlAJChDSEVDS0VSKSAuL3BhcnNlNCB0ZXN0My54bWwKLQlAZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIiA7IGV4aXQgMAogCUAkKENIRUNLRVIpIC4vcmVhZGVyMSB0ZXN0Mi54bWwgPi9kZXYvbnVsbAotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQCQoQ0hFQ0tFUikgLi9yZWFkZXIyIHRlc3QyLnhtbCA+L2Rldi9udWxsCi0JQGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCIgOyBleGl0IDAKIAlAJChDSEVDS0VSKSAuL3JlYWRlcjMgPi9kZXYvbnVsbAotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQCQoQ0hFQ0tFUikgLi9yZWFkZXI0IHRlc3QxLnhtbCB0ZXN0Mi54bWwgdGVzdDMueG1sID4vZGV2L251bGwKLQlAZ3JlcCAiTU9SWSBBTExPIiAubWVtZHVtcCB8IGdyZXAgLXYgIk1FTU9SWSBBTExPQ0FURUQgOiAwIiA7IGV4aXQgMAogCUAkKENIRUNLRVIpIC4vdGVzdFdyaXRlcgotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQCQoQ0hFQ0tFUikgLi90cmVlMSB0ZXN0Mi54bWwgPi9kZXYvbnVsbAotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQCQoQ0hFQ0tFUikgLi90cmVlMiA+L2Rldi9udWxsCi0JQGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCIgOyBleGl0IDAKLQlAJChDSEVDS0VSKSAuL3hwYXRoMSB0ZXN0My54bWwgJy8vY2hpbGQyJyA+L2Rldi9udWxsCi0JQGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCIgOyBleGl0IDAKIAlAJChDSEVDS0VSKSAuL3hwYXRoMiB0ZXN0My54bWwgJy8vZGlzY2FyZGVkJyBkaXNjYXJkZWQgPi9kZXYvbnVsbAotCUBncmVwICJNT1JZIEFMTE8iIC5tZW1kdW1wIHwgZ3JlcCAtdiAiTUVNT1JZIEFMTE9DQVRFRCA6IDAiIDsgZXhpdCAwCiAJQHJtIC1mICoudG1wCmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvZXhhbXBsZXMueG1sIGIvZG9jL2V4YW1wbGVzL2V4YW1wbGVzLnhtbAppbmRleCAzYjI2YmNhLi4zYmRjYTMzIDEwMDY0NAotLS0gYS9kb2MvZXhhbXBsZXMvZXhhbXBsZXMueG1sCisrKyBiL2RvYy9leGFtcGxlcy9leGFtcGxlcy54bWwKQEAgLTgsMjEgKzgsMTkgQEAKICAgICA8Y29weT5zZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuIDwvY29weT4KICAgICA8c2VjdGlvbj5JbnB1dE91dHB1dDwvc2VjdGlvbj4KICAgICA8aW5jbHVkZXM+Ci0gICAgICA8aW5jbHVkZSBsaW5lPScxNic+Jmx0O2xpYnhtbC9wYXJzZXIuaCZndDs8L2luY2x1ZGU+Ci0gICAgICA8aW5jbHVkZSBsaW5lPScxNyc+Jmx0O2xpYnhtbC90cmVlLmgmZ3Q7PC9pbmNsdWRlPgotICAgICAgPGluY2x1ZGUgbGluZT0nMTgnPiZsdDtsaWJ4bWwveGluY2x1ZGUuaCZndDs8L2luY2x1ZGU+Ci0gICAgICA8aW5jbHVkZSBsaW5lPScxOSc+Jmx0O2xpYnhtbC94bWxJTy5oJmd0OzwvaW5jbHVkZT4KKyAgICAgIDxpbmNsdWRlIGxpbmU9JzE3Jz4mbHQ7bGlieG1sL3BhcnNlci5oJmd0OzwvaW5jbHVkZT4KKyAgICAgIDxpbmNsdWRlIGxpbmU9JzE4Jz4mbHQ7bGlieG1sL3RyZWUuaCZndDs8L2luY2x1ZGU+CisgICAgICA8aW5jbHVkZSBsaW5lPScxOSc+Jmx0O2xpYnhtbC94aW5jbHVkZS5oJmd0OzwvaW5jbHVkZT4KKyAgICAgIDxpbmNsdWRlIGxpbmU9JzIwJz4mbHQ7bGlieG1sL3htbElPLmgmZ3Q7PC9pbmNsdWRlPgogICAgIDwvaW5jbHVkZXM+CiAgICAgPHVzZXM+Ci0gICAgICA8bWFjcm8gbGluZT0nMTE3JyBmaWxlPSd4bWx2ZXJzaW9uJyBuYW1lPSdMSUJYTUxfVEVTVF9WRVJTSU9OJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTU0JyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbENsZWFudXBQYXJzZXInLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxNDMnIGZpbGU9J3RyZWUnIG5hbWU9J3htbERvY0R1bXAnLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9JzEwNScgZmlsZT0ndHJlZScgbmFtZT0neG1sRG9jUHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTQ5JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxGcmVlRG9jJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTU4JyBmaWxlPSd4bWxtZW1vcnknIG5hbWU9J3htbE1lbW9yeUR1bXAnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMjQnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sUmVhZE1lbW9yeScvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzExNycgZmlsZT0neG1sSU8nIG5hbWU9J3htbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMzQnIGZpbGU9J3hpbmNsdWRlJyBuYW1lPSd4bWxYSW5jbHVkZVByb2Nlc3MnLz4KKyAgICAgIDxtYWNybyBsaW5lPScxMTgnIGZpbGU9J3htbHZlcnNpb24nIG5hbWU9J0xJQlhNTF9URVNUX1ZFUlNJT04nLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxNDQnIGZpbGU9J3RyZWUnIG5hbWU9J3htbERvY0R1bXAnLz4KKyAgICAgIDx0eXBlZGVmIGxpbmU9JzEwNicgZmlsZT0ndHJlZScgbmFtZT0neG1sRG9jUHRyJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTUwJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxGcmVlRG9jJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTI1JyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbFJlYWRNZW1vcnknLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxMTgnIGZpbGU9J3htbElPJyBuYW1lPSd4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTM1JyBmaWxlPSd4aW5jbHVkZScgbmFtZT0neG1sWEluY2x1ZGVQcm9jZXNzJy8+CiAgICAgPC91c2VzPgogICA8L2V4YW1wbGU+CiAgIDxleGFtcGxlIGZpbGVuYW1lPSdpbzIuYyc+CkBAIC00MCw3ICszOCw3IEBACiAgICAgICA8ZnVuY3Rpb24gbGluZT0nMzYnIGZpbGU9J3RyZWUnIG5hbWU9J3htbERvY0R1bXBGb3JtYXRNZW1vcnknLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzIwJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxEb2NQdHInLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSczMCcgZmlsZT0ndHJlZScgbmFtZT0neG1sRG9jU2V0Um9vdEVsZW1lbnQnLz4KLSAgICAgIDx2YXJpYWJsZSBsaW5lPSc0MicgZmlsZT0nZ2xvYmFscycgbmFtZT0neG1sRnJlZScvPgorICAgICAgPHZhcmlhYmxlIGxpbmU9JzQyJyBmaWxlPSd4bWxtZW1vcnknIG5hbWU9J3htbEZyZWUnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc0MycgZmlsZT0ndHJlZScgbmFtZT0neG1sRnJlZURvYycvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzI3JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOZXdEb2MnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPScyOCcgZmlsZT0ndHJlZScgbmFtZT0neG1sTmV3RG9jTm9kZScvPgpAQCAtODQsMTIgKzgyLDEwIEBACiAgICAgPHVzZXM+CiAgICAgICA8bWFjcm8gbGluZT0nNjEnIGZpbGU9J3htbHZlcnNpb24nIG5hbWU9J0xJQlhNTF9URVNUX1ZFUlNJT04nLz4KICAgICAgIDxlbnVtIGxpbmU9JzM1JyBmaWxlPSdwYXJzZXInIG5hbWU9J1hNTF9QQVJTRV9EVERWQUxJRCcvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzY2JyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbENsZWFudXBQYXJzZXInLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSczNScgZmlsZT0ncGFyc2VyJyBuYW1lPSd4bWxDdHh0UmVhZEZpbGUnLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzI2JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxEb2NQdHInLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc0NCcgZmlsZT0ndHJlZScgbmFtZT0neG1sRnJlZURvYycvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzQ3JyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbEZyZWVQYXJzZXJDdHh0Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nNzAnIGZpbGU9J3htbG1lbW9yeScgbmFtZT0neG1sTWVtb3J5RHVtcCcvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzI5JyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbE5ld1BhcnNlckN0eHQnLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzI1JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxQYXJzZXJDdHh0UHRyJy8+CiAgICAgPC91c2VzPgpAQCAtMTA4LDEwICsxMDQsOCBAQAogICAgIDwvaW5jbHVkZXM+CiAgICAgPHVzZXM+CiAgICAgICA8bWFjcm8gbGluZT0nNDknIGZpbGU9J3htbHZlcnNpb24nIG5hbWU9J0xJQlhNTF9URVNUX1ZFUlNJT04nLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc1NCcgZmlsZT0ncGFyc2VyJyBuYW1lPSd4bWxDbGVhbnVwUGFyc2VyJy8+CiAgICAgICA8dHlwZWRlZiBsaW5lPScyNycgZmlsZT0ndHJlZScgbmFtZT0neG1sRG9jUHRyJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nMzgnIGZpbGU9J3RyZWUnIG5hbWU9J3htbEZyZWVEb2MnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc1OCcgZmlsZT0neG1sbWVtb3J5JyBuYW1lPSd4bWxNZW1vcnlEdW1wJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nMzMnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sUmVhZE1lbW9yeScvPgogICAgIDwvdXNlcz4KICAgPC9leGFtcGxlPgpAQCAtMTI5LDEzICsxMjMsMTEgQEAKICAgICA8L2luY2x1ZGVzPgogICAgIDx1c2VzPgogICAgICAgPG1hY3JvIGxpbmU9JzEyMCcgZmlsZT0neG1sdmVyc2lvbicgbmFtZT0nTElCWE1MX1RFU1RfVkVSU0lPTicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzEzMScgZmlsZT0ncGFyc2VyJyBuYW1lPSd4bWxDbGVhbnVwUGFyc2VyJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nNjcnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQnLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzQ3JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxEb2NQdHInLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPScxMDMnIGZpbGU9J3RyZWUnIG5hbWU9J3htbEZyZWVEb2MnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc5NCcgZmlsZT0ncGFyc2VyJyBuYW1lPSd4bWxGcmVlUGFyc2VyQ3R4dCcvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzEzNScgZmlsZT0neG1sbWVtb3J5JyBuYW1lPSd4bWxNZW1vcnlEdW1wJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nODYnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sUGFyc2VDaHVuaycvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzgwJyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbFBhcnNlQ2h1bmsnLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzQ1JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxQYXJzZXJDdHh0UHRyJy8+CiAgICAgPC91c2VzPgogICA8L2V4YW1wbGU+CkBAIC0xNTIsOSArMTQ0LDcgQEAKICAgICA8L2luY2x1ZGVzPgogICAgIDx1c2VzPgogICAgICAgPG1hY3JvIGxpbmU9Jzg5JyBmaWxlPSd4bWx2ZXJzaW9uJyBuYW1lPSdMSUJYTUxfVEVTVF9WRVJTSU9OJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTQnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sQ2xlYW51cFBhcnNlcicvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzY5JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbEZyZWVUZXh0UmVhZGVyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTgnIGZpbGU9J3htbG1lbW9yeScgbmFtZT0neG1sTWVtb3J5RHVtcCcvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzYyJyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFJlYWRlckZvckZpbGUnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc0NCcgZmlsZT0neG1sc3RyaW5nJyBuYW1lPSd4bWxTdHJsZW4nLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPScyOScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyQ29uc3ROYW1lJy8+CkBAIC0xNjQsNyArMTU0LDcgQEAKICAgICAgIDxmdW5jdGlvbiBsaW5lPSczOScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySXNFbXB0eUVsZW1lbnQnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSczNycgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyTm9kZVR5cGUnLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzU5JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJQdHInLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc2NycgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyUmVhZCcvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzY0JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJSZWFkJy8+CiAgICAgPC91c2VzPgogICA8L2V4YW1wbGU+CiAgIDxleGFtcGxlIGZpbGVuYW1lPSdyZWFkZXIyLmMnPgpAQCAtMTc2LDI0ICsxNjYsMjUgQEAKICAgICA8Y29weT5zZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuIDwvY29weT4KICAgICA8c2VjdGlvbj54bWxSZWFkZXI8L3NlY3Rpb24+CiAgICAgPGluY2x1ZGVzPgorICAgICAgPGluY2x1ZGUgbGluZT0nMTcnPiZsdDtsaWJ4bWwvcGFyc2VyLmgmZ3Q7PC9pbmNsdWRlPgogICAgICAgPGluY2x1ZGUgbGluZT0nMTYnPiZsdDtsaWJ4bWwveG1scmVhZGVyLmgmZ3Q7PC9pbmNsdWRlPgogICAgIDwvaW5jbHVkZXM+CiAgICAgPHVzZXM+Ci0gICAgICA8ZW51bSBsaW5lPSc2OScgZmlsZT0ncGFyc2VyJyBuYW1lPSdYTUxfUEFSU0VfRFREQVRUUicvPgotICAgICAgPGVudW0gbGluZT0nNzEnIGZpbGU9J3BhcnNlcicgbmFtZT0nWE1MX1BBUlNFX0RURFZBTElEJy8+Ci0gICAgICA8ZW51bSBsaW5lPSc3MCcgZmlsZT0ncGFyc2VyJyBuYW1lPSdYTUxfUEFSU0VfTk9FTlQnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc4NCcgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxGcmVlVGV4dFJlYWRlcicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzY4JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFJlYWRlckZvckZpbGUnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc0NScgZmlsZT0neG1sc3RyaW5nJyBuYW1lPSd4bWxTdHJsZW4nLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSczMCcgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyQ29uc3ROYW1lJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMzQnIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sVGV4dFJlYWRlckNvbnN0VmFsdWUnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSczNycgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyRGVwdGgnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc0MScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySGFzVmFsdWUnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc0MCcgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySXNFbXB0eUVsZW1lbnQnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc4MScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySXNWYWxpZCcvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzM4JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJOb2RlVHlwZScvPgotICAgICAgPHR5cGVkZWYgbGluZT0nNjAnIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sVGV4dFJlYWRlclB0cicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzc2JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJSZWFkJy8+CisgICAgICA8ZW51bSBsaW5lPSc3MCcgZmlsZT0ncGFyc2VyJyBuYW1lPSdYTUxfUEFSU0VfRFREQVRUUicvPgorICAgICAgPGVudW0gbGluZT0nNzInIGZpbGU9J3BhcnNlcicgbmFtZT0nWE1MX1BBUlNFX0RURFZBTElEJy8+CisgICAgICA8ZW51bSBsaW5lPSc3MScgZmlsZT0ncGFyc2VyJyBuYW1lPSdYTUxfUEFSU0VfTk9FTlQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc4NScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxGcmVlVGV4dFJlYWRlcicvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzY5JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFJlYWRlckZvckZpbGUnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc0NicgZmlsZT0neG1sc3RyaW5nJyBuYW1lPSd4bWxTdHJsZW4nLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSczMScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyQ29uc3ROYW1lJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMzUnIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sVGV4dFJlYWRlckNvbnN0VmFsdWUnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSczOCcgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyRGVwdGgnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc0MicgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySGFzVmFsdWUnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc0MScgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySXNFbXB0eUVsZW1lbnQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc4MicgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVySXNWYWxpZCcvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzM5JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJOb2RlVHlwZScvPgorICAgICAgPHR5cGVkZWYgbGluZT0nNjEnIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sVGV4dFJlYWRlclB0cicvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzc0JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJSZWFkJy8+CiAgICAgPC91c2VzPgogICA8L2V4YW1wbGU+CiAgIDxleGFtcGxlIGZpbGVuYW1lPSdyZWFkZXIzLmMnPgpAQCAtMjA5LDEyICsyMDAsMTIgQEAKICAgICA8L2luY2x1ZGVzPgogICAgIDx1c2VzPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzk2JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxEb2NEdW1wJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nNjYnIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sRnJlZVRleHRSZWFkZXInLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc1NicgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxGcmVlVGV4dFJlYWRlcicvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzM4JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFJlYWRlckZvckZpbGUnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc2MicgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyQ3VycmVudERvYycvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzQzJyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJQcmVzZXJ2ZVBhdHRlcm4nLz4KICAgICAgIDx0eXBlZGVmIGxpbmU9JzMyJyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJQdHInLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc1MicgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyUmVhZCcvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzUwJyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJSZWFkJy8+CiAgICAgPC91c2VzPgogICA8L2V4YW1wbGU+CiAgIDxleGFtcGxlIGZpbGVuYW1lPSdyZWFkZXI0LmMnPgpAQCAtMjMyLDkgKzIyMyw5IEBACiAgICAgICA8ZnVuY3Rpb24gbGluZT0nMTA0JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbEZyZWVUZXh0UmVhZGVyJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nNzInIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sUmVhZGVyRm9yRmlsZScvPgogICAgICAgPGZ1bmN0aW9uIGxpbmU9JzgzJyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFJlYWRlck5ld0ZpbGUnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc5NycgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyQ3VycmVudERvYycvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzM0JyBmaWxlPSd4bWxyZWFkZXInIG5hbWU9J3htbFRleHRSZWFkZXJDdXJyZW50RG9jJy8+CiAgICAgICA8dHlwZWRlZiBsaW5lPSc1NCcgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyUHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMjYnIGZpbGU9J3htbHJlYWRlcicgbmFtZT0neG1sVGV4dFJlYWRlclJlYWQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScyNCcgZmlsZT0neG1scmVhZGVyJyBuYW1lPSd4bWxUZXh0UmVhZGVyUmVhZCcvPgogICAgIDwvdXNlcz4KICAgPC9leGFtcGxlPgogICA8ZXhhbXBsZSBmaWxlbmFtZT0ndGVzdFdyaXRlci5jJz4KQEAgLTI0NywzOCArMjM4LDM5IEBACiAgICAgPHNlY3Rpb24+eG1sV3JpdGVyPC9zZWN0aW9uPgogICAgIDxpbmNsdWRlcz4KICAgICAgIDxpbmNsdWRlIGxpbmU9JzE2Jz4mbHQ7bGlieG1sL2VuY29kaW5nLmgmZ3Q7PC9pbmNsdWRlPgorICAgICAgPGluY2x1ZGUgbGluZT0nMTgnPiZsdDtsaWJ4bWwvcGFyc2VyLmgmZ3Q7PC9pbmNsdWRlPgogICAgICAgPGluY2x1ZGUgbGluZT0nMTcnPiZsdDtsaWJ4bWwveG1sd3JpdGVyLmgmZ3Q7PC9pbmNsdWRlPgogICAgIDwvaW5jbHVkZXM+CiAgICAgPHVzZXM+Ci0gICAgICA8bWFjcm8gbGluZT0nODg1JyBmaWxlPSdwYXJzZXInIG5hbWU9J1hNTF9ERUZBVUxUX1ZFUlNJT04nLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSczNDcnIGZpbGU9J3RyZWUnIG5hbWU9J3htbEJ1ZmZlckNyZWF0ZScvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzYxMycgZmlsZT0ndHJlZScgbmFtZT0neG1sQnVmZmVyRnJlZScvPgotICAgICAgPHR5cGVkZWYgbGluZT0nMzQxJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxCdWZmZXJQdHInLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9JzExNTEnIGZpbGU9J2VuY29kaW5nJyBuYW1lPSd4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTAxJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxEb2NTZXRSb290RWxlbWVudCcvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzExNTYnIGZpbGU9J2VuY29kaW5nJyBuYW1lPSd4bWxGaW5kQ2hhckVuY29kaW5nSGFuZGxlcicvPgotICAgICAgPHZhcmlhYmxlIGxpbmU9JzExODAnIGZpbGU9J2dsb2JhbHMnIG5hbWU9J3htbEZyZWUnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMTI3JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbEZyZWVUZXh0V3JpdGVyJy8+Ci0gICAgICA8dmFyaWFibGUgbGluZT0nMTE2NicgZmlsZT0nZ2xvYmFscycgbmFtZT0neG1sTWFsbG9jJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nODg1JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOZXdEb2MnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc4OTQnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5ld0RvY05vZGUnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc2MzInIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sTmV3VGV4dFdyaXRlckRvYycvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzc2JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbE5ld1RleHRXcml0ZXJGaWxlbmFtZScvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzM1NScgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxOZXdUZXh0V3JpdGVyTWVtb3J5Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTA0JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbE5ld1RleHRXcml0ZXJUcmVlJy8+Ci0gICAgICA8dHlwZWRlZiBsaW5lPSc4ODAnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5vZGVQdHInLz4KLSAgICAgIDx2YXJpYWJsZSBsaW5lPScxMTgzJyBmaWxlPSdnbG9iYWxzJyBuYW1lPSd4bWxSZWFsbG9jJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTEyOScgZmlsZT0ndHJlZScgbmFtZT0neG1sU2F2ZUZpbGVFbmMnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMTIxJyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJFbmREb2N1bWVudCcvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzExMTEnIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sVGV4dFdyaXRlckVuZEVsZW1lbnQnLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9Jzg3OCcgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyUHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTEzJyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJTdGFydERvY3VtZW50Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTA5NicgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTQ5JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZScvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzkyNScgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyV3JpdGVDb21tZW50Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTEwMycgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyV3JpdGVFbGVtZW50Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTU5JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJXcml0ZUZvcm1hdENvbW1lbnQnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMDczJyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJXcml0ZUZvcm1hdEVsZW1lbnQnLz4KKyAgICAgIDxtYWNybyBsaW5lPSc4NzgnIGZpbGU9J3BhcnNlcicgbmFtZT0nWE1MX0RFRkFVTFRfVkVSU0lPTicvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzM0MCcgZmlsZT0ndHJlZScgbmFtZT0neG1sQnVmZmVyQ3JlYXRlJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nNjA2JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxCdWZmZXJGcmVlJy8+CisgICAgICA8dHlwZWRlZiBsaW5lPSczMzQnIGZpbGU9J3RyZWUnIG5hbWU9J3htbEJ1ZmZlclB0cicvPgorICAgICAgPHR5cGVkZWYgbGluZT0nMTE0NCcgZmlsZT0nZW5jb2RpbmcnIG5hbWU9J3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHInLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc4OTQnIGZpbGU9J3RyZWUnIG5hbWU9J3htbERvY1NldFJvb3RFbGVtZW50Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTE0OScgZmlsZT0nZW5jb2RpbmcnIG5hbWU9J3htbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyJy8+CisgICAgICA8dmFyaWFibGUgbGluZT0nMTA2JyBmaWxlPSd4bWxtZW1vcnknIG5hbWU9J3htbEZyZWUnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSczMjAnIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sRnJlZVRleHRXcml0ZXInLz4KKyAgICAgIDx2YXJpYWJsZSBsaW5lPScxMTU5JyBmaWxlPSd4bWxtZW1vcnknIG5hbWU9J3htbE1hbGxvYycvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzg3OCcgZmlsZT0ndHJlZScgbmFtZT0neG1sTmV3RG9jJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nODg3JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOZXdEb2NOb2RlJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nNjI1JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbE5ld1RleHRXcml0ZXJEb2MnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc2OScgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxOZXdUZXh0V3JpdGVyRmlsZW5hbWUnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSczNDgnIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sTmV3VGV4dFdyaXRlck1lbW9yeScvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzg5NycgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxOZXdUZXh0V3JpdGVyVHJlZScvPgorICAgICAgPHR5cGVkZWYgbGluZT0nODczJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOb2RlUHRyJy8+CisgICAgICA8dmFyaWFibGUgbGluZT0nMTE3NicgZmlsZT0neG1sbWVtb3J5JyBuYW1lPSd4bWxSZWFsbG9jJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nODU2JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxTYXZlRmlsZUVuYycvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzMxMycgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyRW5kRG9jdW1lbnQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxOTMnIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sVGV4dFdyaXRlckVuZEVsZW1lbnQnLz4KKyAgICAgIDx0eXBlZGVmIGxpbmU9JzY1JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJQdHInLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc3OCcgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyU3RhcnREb2N1bWVudCcvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzg3JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJTdGFydEVsZW1lbnQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxMTcnIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTAwJyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJXcml0ZUNvbW1lbnQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxNzQnIGZpbGU9J3htbHdyaXRlcicgbmFtZT0neG1sVGV4dFdyaXRlcldyaXRlRWxlbWVudCcvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzEzNicgZmlsZT0neG1sd3JpdGVyJyBuYW1lPSd4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDb21tZW50Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTU1JyBmaWxlPSd4bWx3cml0ZXInIG5hbWU9J3htbFRleHRXcml0ZXJXcml0ZUZvcm1hdEVsZW1lbnQnLz4KICAgICA8L3VzZXM+CiAgIDwvZXhhbXBsZT4KICAgPGV4YW1wbGUgZmlsZW5hbWU9J3RyZWUxLmMnPgpAQCAtMzEyLDE0ICszMDQsMTQgQEAKICAgICAgIDxpbmNsdWRlIGxpbmU9JzEzJz4mbHQ7bGlieG1sL3RyZWUuaCZndDs8L2luY2x1ZGU+CiAgICAgPC9pbmNsdWRlcz4KICAgICA8dXNlcz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc3NycgZmlsZT0ndHJlZScgbmFtZT0neG1sQWRkQ2hpbGQnLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPSc3NicgZmlsZT0ndHJlZScgbmFtZT0neG1sQWRkQ2hpbGQnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc0NScgZmlsZT0ndHJlZScgbmFtZT0neG1sQ3JlYXRlSW50U3Vic2V0Jy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nNDAnIGZpbGU9J3RyZWUnIG5hbWU9J3htbERvY1NldFJvb3RFbGVtZW50Jy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nODcnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5ld0NoaWxkJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nNTEnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5ld0NoaWxkJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nMzgnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5ld0RvYycvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzczJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOZXdEb2NOb2RlJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMzknIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5ld0RvY05vZGUnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc3NCcgZmlsZT0ndHJlZScgbmFtZT0neG1sTmV3RG9jVGV4dCcvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzg4JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOZXdQcm9wJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nNjUnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5ld1Byb3AnLz4KICAgICAgIDxmdW5jdGlvbiBsaW5lPSc5NScgZmlsZT0ndHJlZScgbmFtZT0neG1sU2F2ZUZvcm1hdEZpbGVFbmMnLz4KICAgICA8L3VzZXM+CiAgIDwvZXhhbXBsZT4KQEAgLTMzOCwyMiArMzMwLDIyIEBACiAgICAgICA8aW5jbHVkZSBsaW5lPScxOSc+Jmx0O2xpYnhtbC94cGF0aEludGVybmFscy5oJmd0OzwvaW5jbHVkZT4KICAgICA8L2luY2x1ZGVzPgogICAgIDx1c2VzPgotICAgICAgPGVudW0gbGluZT0nMjI5JyBmaWxlPSd0cmVlJyBuYW1lPSdYTUxfRUxFTUVOVF9OT0RFJy8+Ci0gICAgICA8ZW51bSBsaW5lPScyMTcnIGZpbGU9J3RyZWUnIG5hbWU9J1hNTF9OQU1FU1BBQ0VfREVDTCcvPgotICAgICAgPHZhcmlhYmxlIGxpbmU9JzE5MycgZmlsZT0nZ2xvYmFscycgbmFtZT0neG1sRnJlZScvPgorICAgICAgPGVudW0gbGluZT0nMjIyJyBmaWxlPSd0cmVlJyBuYW1lPSdYTUxfRUxFTUVOVF9OT0RFJy8+CisgICAgICA8ZW51bSBsaW5lPScyMTAnIGZpbGU9J3RyZWUnIG5hbWU9J1hNTF9OQU1FU1BBQ0VfREVDTCcvPgorICAgICAgPHZhcmlhYmxlIGxpbmU9JzE2NicgZmlsZT0neG1sbWVtb3J5JyBuYW1lPSd4bWxGcmVlJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nMzknIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sSW5pdFBhcnNlcicvPgotICAgICAgPHR5cGVkZWYgbGluZT0nMjA2JyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOb2RlUHRyJy8+Ci0gICAgICA8dHlwZWRlZiBsaW5lPScyMTgnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5zUHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nOTQnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sUGFyc2VGaWxlJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTgwJyBmaWxlPSd4bWxzdHJpbmcnIG5hbWU9J3htbFN0cmNocicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzE1NicgZmlsZT0neG1sc3RyaW5nJyBuYW1lPSd4bWxTdHJkdXAnLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9Jzg3JyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhDb250ZXh0UHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTE3JyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhFdmFsRXhwcmVzc2lvbicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzEzMCcgZmlsZT0neHBhdGgnIG5hbWU9J3htbFhQYXRoRnJlZUNvbnRleHQnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMjknIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aEZyZWVPYmplY3QnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMDEnIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aE5ld0NvbnRleHQnLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9Jzg4JyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhPYmplY3RQdHInLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxODYnIGZpbGU9J3hwYXRoSW50ZXJuYWxzJyBuYW1lPSd4bWxYUGF0aFJlZ2lzdGVyTnMnLz4KKyAgICAgIDx0eXBlZGVmIGxpbmU9JzE5OScgZmlsZT0ndHJlZScgbmFtZT0neG1sTm9kZVB0cicvPgorICAgICAgPHR5cGVkZWYgbGluZT0nMjExJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxOc1B0cicvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9Jzg3JyBmaWxlPSdwYXJzZXInIG5hbWU9J3htbFBhcnNlRmlsZScvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzE2MycgZmlsZT0neG1sc3RyaW5nJyBuYW1lPSd4bWxTdHJjaHInLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxNDknIGZpbGU9J3htbHN0cmluZycgbmFtZT0neG1sU3RyZHVwJy8+CisgICAgICA8dHlwZWRlZiBsaW5lPSc4MCcgZmlsZT0neHBhdGgnIG5hbWU9J3htbFhQYXRoQ29udGV4dFB0cicvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzExMCcgZmlsZT0neHBhdGgnIG5hbWU9J3htbFhQYXRoRXZhbEV4cHJlc3Npb24nLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxMDQnIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aEZyZWVDb250ZXh0Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTIyJyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhGcmVlT2JqZWN0Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nOTQnIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aE5ld0NvbnRleHQnLz4KKyAgICAgIDx0eXBlZGVmIGxpbmU9JzgxJyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhPYmplY3RQdHInLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxNzknIGZpbGU9J3hwYXRoSW50ZXJuYWxzJyBuYW1lPSd4bWxYUGF0aFJlZ2lzdGVyTnMnLz4KICAgICA8L3VzZXM+CiAgIDwvZXhhbXBsZT4KICAgPGV4YW1wbGUgZmlsZW5hbWU9J3hwYXRoMi5jJz4KQEAgLTM3MSwxNyArMzYzLDE3IEBACiAgICAgICA8aW5jbHVkZSBsaW5lPScxOSc+Jmx0O2xpYnhtbC94cGF0aEludGVybmFscy5oJmd0OzwvaW5jbHVkZT4KICAgICA8L2luY2x1ZGVzPgogICAgIDx1c2VzPgotICAgICAgPGVudW0gbGluZT0nMTgwJyBmaWxlPSd0cmVlJyBuYW1lPSdYTUxfTkFNRVNQQUNFX0RFQ0wnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMjcnIGZpbGU9J3RyZWUnIG5hbWU9J3htbERvY0R1bXAnLz4KKyAgICAgIDxlbnVtIGxpbmU9JzE3MycgZmlsZT0ndHJlZScgbmFtZT0nWE1MX05BTUVTUEFDRV9ERUNMJy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTIwJyBmaWxlPSd0cmVlJyBuYW1lPSd4bWxEb2NEdW1wJy8+CiAgICAgICA8ZnVuY3Rpb24gbGluZT0nNDEnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sSW5pdFBhcnNlcicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzE2MicgZmlsZT0ndHJlZScgbmFtZT0neG1sTm9kZVNldENvbnRlbnQnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPSc5NScgZmlsZT0ncGFyc2VyJyBuYW1lPSd4bWxQYXJzZUZpbGUnLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9Jzg3JyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhDb250ZXh0UHRyJy8+Ci0gICAgICA8ZnVuY3Rpb24gbGluZT0nMTEwJyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhFdmFsRXhwcmVzc2lvbicvPgotICAgICAgPGZ1bmN0aW9uIGxpbmU9JzEyNCcgZmlsZT0neHBhdGgnIG5hbWU9J3htbFhQYXRoRnJlZUNvbnRleHQnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMjMnIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aEZyZWVPYmplY3QnLz4KLSAgICAgIDxmdW5jdGlvbiBsaW5lPScxMDInIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aE5ld0NvbnRleHQnLz4KLSAgICAgIDx0eXBlZGVmIGxpbmU9Jzg4JyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhPYmplY3RQdHInLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxNTUnIGZpbGU9J3RyZWUnIG5hbWU9J3htbE5vZGVTZXRDb250ZW50Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nODgnIGZpbGU9J3BhcnNlcicgbmFtZT0neG1sUGFyc2VGaWxlJy8+CisgICAgICA8dHlwZWRlZiBsaW5lPSc4MCcgZmlsZT0neHBhdGgnIG5hbWU9J3htbFhQYXRoQ29udGV4dFB0cicvPgorICAgICAgPGZ1bmN0aW9uIGxpbmU9JzEwMycgZmlsZT0neHBhdGgnIG5hbWU9J3htbFhQYXRoRXZhbEV4cHJlc3Npb24nLz4KKyAgICAgIDxmdW5jdGlvbiBsaW5lPScxMDYnIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aEZyZWVDb250ZXh0Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nMTE2JyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhGcmVlT2JqZWN0Jy8+CisgICAgICA8ZnVuY3Rpb24gbGluZT0nOTUnIGZpbGU9J3hwYXRoJyBuYW1lPSd4bWxYUGF0aE5ld0NvbnRleHQnLz4KKyAgICAgIDx0eXBlZGVmIGxpbmU9JzgxJyBmaWxlPSd4cGF0aCcgbmFtZT0neG1sWFBhdGhPYmplY3RQdHInLz4KICAgICA8L3VzZXM+CiAgIDwvZXhhbXBsZT4KICAgPHN5bWJvbHM+CkBAIC00MjksMTQgKzQyMSw2IEBACiAgICAgPHN5bWJvbCBuYW1lPSd4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyJz4KICAgICAgIDxyZWYgZmlsZW5hbWU9J3Rlc3RXcml0ZXIuYycvPgogICAgIDwvc3ltYm9sPgotICAgIDxzeW1ib2wgbmFtZT0neG1sQ2xlYW51cFBhcnNlcic+Ci0gICAgICA8cmVmIGZpbGVuYW1lPSdpbzEuYycvPgotICAgICAgPHJlZiBmaWxlbmFtZT0ncGFyc2UxLmMnLz4KLSAgICAgIDxyZWYgZmlsZW5hbWU9J3BhcnNlMi5jJy8+Ci0gICAgICA8cmVmIGZpbGVuYW1lPSdwYXJzZTMuYycvPgotICAgICAgPHJlZiBmaWxlbmFtZT0ncGFyc2U0LmMnLz4KLSAgICAgIDxyZWYgZmlsZW5hbWU9J3JlYWRlcjEuYycvPgotICAgIDwvc3ltYm9sPgogICAgIDxzeW1ib2wgbmFtZT0neG1sQ3JlYXRlSW50U3Vic2V0Jz4KICAgICAgIDxyZWYgZmlsZW5hbWU9J3RyZWUyLmMnLz4KICAgICA8L3N5bWJvbD4KQEAgLTUwNiwxNCArNDkwLDYgQEAKICAgICA8c3ltYm9sIG5hbWU9J3htbE1hbGxvYyc+CiAgICAgICA8cmVmIGZpbGVuYW1lPSd0ZXN0V3JpdGVyLmMnLz4KICAgICA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIG5hbWU9J3htbE1lbW9yeUR1bXAnPgotICAgICAgPHJlZiBmaWxlbmFtZT0naW8xLmMnLz4KLSAgICAgIDxyZWYgZmlsZW5hbWU9J3BhcnNlMS5jJy8+Ci0gICAgICA8cmVmIGZpbGVuYW1lPSdwYXJzZTIuYycvPgotICAgICAgPHJlZiBmaWxlbmFtZT0ncGFyc2UzLmMnLz4KLSAgICAgIDxyZWYgZmlsZW5hbWU9J3BhcnNlNC5jJy8+Ci0gICAgICA8cmVmIGZpbGVuYW1lPSdyZWFkZXIxLmMnLz4KLSAgICA8L3N5bWJvbD4KICAgICA8c3ltYm9sIG5hbWU9J3htbE5ld0NoaWxkJz4KICAgICAgIDxyZWYgZmlsZW5hbWU9J3RyZWUyLmMnLz4KICAgICA8L3N5bWJvbD4KZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy9pbmRleC5odG1sIGIvZG9jL2V4YW1wbGVzL2luZGV4Lmh0bWwKaW5kZXggM2Y0NTY4Ny4uMTQ2OTQwMyAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL2luZGV4Lmh0bWwKKysrIGIvZG9jL2V4YW1wbGVzL2luZGV4Lmh0bWwKQEAgLTgwLDE1ICs4MCwxMyBAQAogICAgIDwvdWw+CiAgICAgPHA+VXNlczo8L3A+CiAgICAgPHVsPgotICAgICAgPGxpPiBsaW5lIDEwNTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbERvY1B0ciI+eG1sRG9jUHRyPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTE3OiBNYWNybyA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9URVNUX1ZFUlNJT04iPkxJQlhNTF9URVNUX1ZFUlNJT048L2E+IGZyb20geG1sdmVyc2lvbi5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxMTc6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxJTy5odG1sI3htbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MiPnhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3M8L2E+IGZyb20geG1sSU8uaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTI0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sUmVhZE1lbW9yeSI+eG1sUmVhZE1lbW9yeTwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTM0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteGluY2x1ZGUuaHRtbCN4bWxYSW5jbHVkZVByb2Nlc3MiPnhtbFhJbmNsdWRlUHJvY2VzczwvYT4gZnJvbSB4aW5jbHVkZS5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxNDM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRG9jRHVtcCI+eG1sRG9jRHVtcDwvYT4gZnJvbSB0cmVlLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDE0OTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxGcmVlRG9jIj54bWxGcmVlRG9jPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTU0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTU4OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWVtb3J5RHVtcCI+eG1sTWVtb3J5RHVtcDwvYT4gZnJvbSB4bWxtZW1vcnkuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTA2OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGZyb20gdHJlZS5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxMTg6IE1hY3JvIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX1RFU1RfVkVSU0lPTiI+TElCWE1MX1RFU1RfVkVSU0lPTjwvYT4gZnJvbSB4bWx2ZXJzaW9uLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDExODogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbElPLmh0bWwjeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyI+eG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrczwvYT4gZnJvbSB4bWxJTy5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxMjU6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxSZWFkTWVtb3J5Ij54bWxSZWFkTWVtb3J5PC9hPiBmcm9tIHBhcnNlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxMzU6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14aW5jbHVkZS5odG1sI3htbFhJbmNsdWRlUHJvY2VzcyI+eG1sWEluY2x1ZGVQcm9jZXNzPC9hPiBmcm9tIHhpbmNsdWRlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDE0NDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NEdW1wIj54bWxEb2NEdW1wPC9hPiBmcm9tIHRyZWUuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTUwOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbEZyZWVEb2MiPnhtbEZyZWVEb2M8L2E+IGZyb20gdHJlZS5oPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzYWdlOjwvcD4KICAgICA8cD5pbzE8L3A+CkBAIC0xMzMsOCArMTMxLDYgQEAKICAgICAgIDxsaT4gbGluZSAyNjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sI3htbFJlYWRGaWxlIj54bWxSZWFkRmlsZTwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgMzE6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRnJlZURvYyI+eG1sRnJlZURvYzwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDQ1OiBNYWNybyA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sdmVyc2lvbi5odG1sI0xJQlhNTF9URVNUX1ZFUlNJT04iPkxJQlhNTF9URVNUX1ZFUlNJT048L2E+IGZyb20geG1sdmVyc2lvbi5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA1MDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sI3htbENsZWFudXBQYXJzZXIiPnhtbENsZWFudXBQYXJzZXI8L2E+IGZyb20gcGFyc2VyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDU0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWVtb3J5RHVtcCI+eG1sTWVtb3J5RHVtcDwvYT4gZnJvbSB4bWxtZW1vcnkuaDwvbGk+CiAgICAgPC91bD4KICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgPHA+cGFyc2UxIHRlc3QxLnhtbDwvcD4KQEAgLTE1OSw4ICsxNTUsNiBAQAogICAgICAgPGxpPiBsaW5lIDQ0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbEZyZWVEb2MiPnhtbEZyZWVEb2M8L2E+IGZyb20gdHJlZS5oPC9saT4KICAgICAgIDxsaT4gbGluZSA0NzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sI3htbEZyZWVQYXJzZXJDdHh0Ij54bWxGcmVlUGFyc2VyQ3R4dDwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgNjE6IE1hY3JvIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX1RFU1RfVkVSU0lPTiI+TElCWE1MX1RFU1RfVkVSU0lPTjwvYT4gZnJvbSB4bWx2ZXJzaW9uLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDY2OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNzA6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNZW1vcnlEdW1wIj54bWxNZW1vcnlEdW1wPC9hPiBmcm9tIHhtbG1lbW9yeS5oPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzYWdlOjwvcD4KICAgICA8cD5wYXJzZTIgdGVzdDIueG1sPC9wPgpAQCAtMTgyLDggKzE3Niw2IEBACiAgICAgICA8bGk+IGxpbmUgMzM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxSZWFkTWVtb3J5Ij54bWxSZWFkTWVtb3J5PC9hPiBmcm9tIHBhcnNlci5oPC9saT4KICAgICAgIDxsaT4gbGluZSAzODogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxGcmVlRG9jIj54bWxGcmVlRG9jPC9hPiBmcm9tIHRyZWUuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgNDk6IE1hY3JvIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx2ZXJzaW9uLmh0bWwjTElCWE1MX1RFU1RfVkVSU0lPTiI+TElCWE1MX1RFU1RfVkVSU0lPTjwvYT4gZnJvbSB4bWx2ZXJzaW9uLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDU0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNTg6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxtZW1vcnkuaHRtbCN4bWxNZW1vcnlEdW1wIj54bWxNZW1vcnlEdW1wPC9hPiBmcm9tIHhtbG1lbW9yeS5oPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzYWdlOjwvcD4KICAgICA8cD5wYXJzZTM8L3A+CkBAIC0yMDQsMTIgKzE5NiwxMCBAQAogICAgICAgPGxpPiBsaW5lIDQ1OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sUGFyc2VyQ3R4dFB0ciI+eG1sUGFyc2VyQ3R4dFB0cjwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDQ3OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRG9jUHRyIj54bWxEb2NQdHI8L2E+IGZyb20gdHJlZS5oPC9saT4KICAgICAgIDxsaT4gbGluZSA2NzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sI3htbENyZWF0ZVB1c2hQYXJzZXJDdHh0Ij54bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dDwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZUNodW5rIj54bWxQYXJzZUNodW5rPC9hPiBmcm9tIHBhcnNlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA4MDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlQ2h1bmsiPnhtbFBhcnNlQ2h1bms8L2E+IGZyb20gcGFyc2VyLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDk0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sRnJlZVBhcnNlckN0eHQiPnhtbEZyZWVQYXJzZXJDdHh0PC9hPiBmcm9tIHBhcnNlci5oPC9saT4KICAgICAgIDxsaT4gbGluZSAxMDM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRnJlZURvYyI+eG1sRnJlZURvYzwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDEyMDogTWFjcm8gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNMSUJYTUxfVEVTVF9WRVJTSU9OIj5MSUJYTUxfVEVTVF9WRVJTSU9OPC9hPiBmcm9tIHhtbHZlcnNpb24uaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTMxOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sQ2xlYW51cFBhcnNlciI+eG1sQ2xlYW51cFBhcnNlcjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTM1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sbWVtb3J5Lmh0bWwjeG1sTWVtb3J5RHVtcCI+eG1sTWVtb3J5RHVtcDwvYT4gZnJvbSB4bWxtZW1vcnkuaDwvbGk+CiAgICAgPC91bD4KICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgPHA+cGFyc2U0IHRlc3QzLnhtbDwvcD4KQEAgLTI0OCwxMyArMjM4LDEzIEBACiAgICAgPHA+VXNlczo8L3A+CiAgICAgPHVsPgogICAgICAgPGxpPiBsaW5lIDM4OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld0RvYyI+eG1sTmV3RG9jPC9hPiBmcm9tIHRyZWUuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMzk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sTmV3RG9jTm9kZSI+eG1sTmV3RG9jTm9kZTwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDQwOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbERvY1NldFJvb3RFbGVtZW50Ij54bWxEb2NTZXRSb290RWxlbWVudDwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDQ1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbENyZWF0ZUludFN1YnNldCI+eG1sQ3JlYXRlSW50U3Vic2V0PC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNzM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sTmV3RG9jTm9kZSI+eG1sTmV3RG9jTm9kZTwvYT4gZnJvbSB0cmVlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDUxOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld0NoaWxkIj54bWxOZXdDaGlsZDwvYT4gZnJvbSB0cmVlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDY1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld1Byb3AiPnhtbE5ld1Byb3A8L2E+IGZyb20gdHJlZS5oPC9saT4KICAgICAgIDxsaT4gbGluZSA3NDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxOZXdEb2NUZXh0Ij54bWxOZXdEb2NUZXh0PC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNzc6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sQWRkQ2hpbGQiPnhtbEFkZENoaWxkPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODc6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sTmV3Q2hpbGQiPnhtbE5ld0NoaWxkPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODg6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sTmV3UHJvcCI+eG1sTmV3UHJvcDwvYT4gZnJvbSB0cmVlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDc2OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbEFkZENoaWxkIj54bWxBZGRDaGlsZDwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDk1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbFNhdmVGb3JtYXRGaWxlRW5jIj54bWxTYXZlRm9ybWF0RmlsZUVuYzwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgIDwvdWw+CiAgICAgPHA+VXNhZ2U6PC9wPgpAQCAtMjgxLDE4ICsyNzEsMTggQEAKICAgICA8cD5Vc2VzOjwvcD4KICAgICA8dWw+CiAgICAgICA8bGk+IGxpbmUgMzk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxJbml0UGFyc2VyIj54bWxJbml0UGFyc2VyPC9hPiBmcm9tIHBhcnNlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA4NzogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aENvbnRleHRQdHIiPnhtbFhQYXRoQ29udGV4dFB0cjwvYT4gZnJvbSB4cGF0aC5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA4ODogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aE9iamVjdFB0ciI+eG1sWFBhdGhPYmplY3RQdHI8L2E+IGZyb20geHBhdGguaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgOTQ6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZUZpbGUiPnhtbFBhcnNlRmlsZTwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTAxOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aE5ld0NvbnRleHQiPnhtbFhQYXRoTmV3Q29udGV4dDwvYT4gZnJvbSB4cGF0aC5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxMTc6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoRXZhbEV4cHJlc3Npb24iPnhtbFhQYXRoRXZhbEV4cHJlc3Npb248L2E+IGZyb20geHBhdGguaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTI5OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aEZyZWVPYmplY3QiPnhtbFhQYXRoRnJlZU9iamVjdDwvYT4gZnJvbSB4cGF0aC5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxMzA6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoRnJlZUNvbnRleHQiPnhtbFhQYXRoRnJlZUNvbnRleHQ8L2E+IGZyb20geHBhdGguaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTU2OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sU3RyZHVwIj54bWxTdHJkdXA8L2E+IGZyb20geG1sc3RyaW5nLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDE4MDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbFN0cmNociI+eG1sU3RyY2hyPC9hPiBmcm9tIHhtbHN0cmluZy5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxODY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aEludGVybmFscy5odG1sI3htbFhQYXRoUmVnaXN0ZXJOcyI+eG1sWFBhdGhSZWdpc3Rlck5zPC9hPiBmcm9tIHhwYXRoSW50ZXJuYWxzLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDIwNjogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5vZGVQdHIiPnhtbE5vZGVQdHI8L2E+IGZyb20gdHJlZS5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAyMTg6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxOc1B0ciI+eG1sTnNQdHI8L2E+IGZyb20gdHJlZS5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA4MDogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aENvbnRleHRQdHIiPnhtbFhQYXRoQ29udGV4dFB0cjwvYT4gZnJvbSB4cGF0aC5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA4MTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aE9iamVjdFB0ciI+eG1sWFBhdGhPYmplY3RQdHI8L2E+IGZyb20geHBhdGguaDwvbGk+CisgICAgICA8bGk+IGxpbmUgODc6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxQYXJzZUZpbGUiPnhtbFBhcnNlRmlsZTwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgOTQ6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoTmV3Q29udGV4dCI+eG1sWFBhdGhOZXdDb250ZXh0PC9hPiBmcm9tIHhwYXRoLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDEwNDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhGcmVlQ29udGV4dCI+eG1sWFBhdGhGcmVlQ29udGV4dDwvYT4gZnJvbSB4cGF0aC5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxMTA6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoRXZhbEV4cHJlc3Npb24iPnhtbFhQYXRoRXZhbEV4cHJlc3Npb248L2E+IGZyb20geHBhdGguaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTIyOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aEZyZWVPYmplY3QiPnhtbFhQYXRoRnJlZU9iamVjdDwvYT4gZnJvbSB4cGF0aC5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxNDk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxzdHJpbmcuaHRtbCN4bWxTdHJkdXAiPnhtbFN0cmR1cDwvYT4gZnJvbSB4bWxzdHJpbmcuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTYzOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sc3RyaW5nLmh0bWwjeG1sU3RyY2hyIj54bWxTdHJjaHI8L2E+IGZyb20geG1sc3RyaW5nLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDE3OTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoSW50ZXJuYWxzLmh0bWwjeG1sWFBhdGhSZWdpc3Rlck5zIj54bWxYUGF0aFJlZ2lzdGVyTnM8L2E+IGZyb20geHBhdGhJbnRlcm5hbHMuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTk5OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sTm9kZVB0ciI+eG1sTm9kZVB0cjwvYT4gZnJvbSB0cmVlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDIxMTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5zUHRyIj54bWxOc1B0cjwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgIDwvdWw+CiAgICAgPHA+VXNhZ2U6PC9wPgogICAgIDxwPnhwYXRoMSAmbHQ7eG1sLWZpbGUmZ3Q7ICZsdDt4cGF0aC1leHByJmd0OyBbJmx0O2tub3duLW5zLWxpc3QmZ3Q7XTwvcD4KQEAgLTMxNywxNSArMzA3LDE1IEBACiAgICAgPHA+VXNlczo8L3A+CiAgICAgPHVsPgogICAgICAgPGxpPiBsaW5lIDQxOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sSW5pdFBhcnNlciI+eG1sSW5pdFBhcnNlcjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODc6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhDb250ZXh0UHRyIj54bWxYUGF0aENvbnRleHRQdHI8L2E+IGZyb20geHBhdGguaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODg6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhPYmplY3RQdHIiPnhtbFhQYXRoT2JqZWN0UHRyPC9hPiBmcm9tIHhwYXRoLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDk1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjeG1sUGFyc2VGaWxlIj54bWxQYXJzZUZpbGU8L2E+IGZyb20gcGFyc2VyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDEwMjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhOZXdDb250ZXh0Ij54bWxYUGF0aE5ld0NvbnRleHQ8L2E+IGZyb20geHBhdGguaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTEwOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aEV2YWxFeHByZXNzaW9uIj54bWxYUGF0aEV2YWxFeHByZXNzaW9uPC9hPiBmcm9tIHhwYXRoLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDEyMzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhGcmVlT2JqZWN0Ij54bWxYUGF0aEZyZWVPYmplY3Q8L2E+IGZyb20geHBhdGguaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTI0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aEZyZWVDb250ZXh0Ij54bWxYUGF0aEZyZWVDb250ZXh0PC9hPiBmcm9tIHhwYXRoLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDEyNzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NEdW1wIj54bWxEb2NEdW1wPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTYyOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5vZGVTZXRDb250ZW50Ij54bWxOb2RlU2V0Q29udGVudDwvYT4gZnJvbSB0cmVlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDgwOiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoQ29udGV4dFB0ciI+eG1sWFBhdGhDb250ZXh0UHRyPC9hPiBmcm9tIHhwYXRoLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDgxOiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoT2JqZWN0UHRyIj54bWxYUGF0aE9iamVjdFB0cjwvYT4gZnJvbSB4cGF0aC5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA4ODogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXBhcnNlci5odG1sI3htbFBhcnNlRmlsZSI+eG1sUGFyc2VGaWxlPC9hPiBmcm9tIHBhcnNlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA5NTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhOZXdDb250ZXh0Ij54bWxYUGF0aE5ld0NvbnRleHQ8L2E+IGZyb20geHBhdGguaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTAzOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteHBhdGguaHRtbCN4bWxYUGF0aEV2YWxFeHByZXNzaW9uIj54bWxYUGF0aEV2YWxFeHByZXNzaW9uPC9hPiBmcm9tIHhwYXRoLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDEwNjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhwYXRoLmh0bWwjeG1sWFBhdGhGcmVlQ29udGV4dCI+eG1sWFBhdGhGcmVlQ29udGV4dDwvYT4gZnJvbSB4cGF0aC5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxMTY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14cGF0aC5odG1sI3htbFhQYXRoRnJlZU9iamVjdCI+eG1sWFBhdGhGcmVlT2JqZWN0PC9hPiBmcm9tIHhwYXRoLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDEyMDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxEb2NEdW1wIj54bWxEb2NEdW1wPC9hPiBmcm9tIHRyZWUuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTU1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5vZGVTZXRDb250ZW50Ij54bWxOb2RlU2V0Q29udGVudDwvYT4gZnJvbSB0cmVlLmg8L2xpPgogICAgIDwvdWw+CiAgICAgPHA+VXNhZ2U6PC9wPgogICAgIDxwPnhwYXRoMiAmbHQ7eG1sLWZpbGUmZ3Q7ICZsdDt4cGF0aC1leHByJmd0OyAmbHQ7bmV3LXZhbHVlJmd0OzwvcD4KQEAgLTM1MCwxMSArMzQwLDkgQEAKICAgICAgIDxsaT4gbGluZSA0NDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbFN0cmxlbiI+eG1sU3RybGVuPC9hPiBmcm9tIHhtbHN0cmluZy5oPC9saT4KICAgICAgIDxsaT4gbGluZSA1OTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgNjI6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxSZWFkZXJGb3JGaWxlIj54bWxSZWFkZXJGb3JGaWxlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA2NzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJSZWFkIj54bWxUZXh0UmVhZGVyUmVhZDwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgNjQ6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUmVhZCI+eG1sVGV4dFJlYWRlclJlYWQ8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDY5OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sRnJlZVRleHRSZWFkZXIiPnhtbEZyZWVUZXh0UmVhZGVyPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KICAgICAgIDxsaT4gbGluZSA4OTogTWFjcm8gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHZlcnNpb24uaHRtbCNMSUJYTUxfVEVTVF9WRVJTSU9OIj5MSUJYTUxfVEVTVF9WRVJTSU9OPC9hPiBmcm9tIHhtbHZlcnNpb24uaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgOTQ6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1wYXJzZXIuaHRtbCN4bWxDbGVhbnVwUGFyc2VyIj54bWxDbGVhbnVwUGFyc2VyPC9hPiBmcm9tIHBhcnNlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA5ODogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbG1lbW9yeS5odG1sI3htbE1lbW9yeUR1bXAiPnhtbE1lbW9yeUR1bXA8L2E+IGZyb20geG1sbWVtb3J5Lmg8L2xpPgogICAgIDwvdWw+CiAgICAgPHA+VXNhZ2U6PC9wPgogICAgIDxwPnJlYWRlcjEgJmx0O2ZpbGVuYW1lJmd0OzwvcD4KQEAgLTM2NiwyMSArMzU0LDI0IEBACiAgICAgICA8bGk+CiAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCI+Jmx0O2xpYnhtbC94bWxyZWFkZXIuaCZndDs8L2E+CiAgICAgICA8L2xpPgorICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwiPiZsdDtsaWJ4bWwvcGFyc2VyLmgmZ3Q7PC9hPgorICAgICAgPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzZXM6PC9wPgogICAgIDx1bD4KLSAgICAgIDxsaT4gbGluZSAzMDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJDb25zdE5hbWUiPnhtbFRleHRSZWFkZXJDb25zdE5hbWU8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDM0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlckNvbnN0VmFsdWUiPnhtbFRleHRSZWFkZXJDb25zdFZhbHVlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAzNzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJEZXB0aCI+eG1sVGV4dFJlYWRlckRlcHRoPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAzODogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJOb2RlVHlwZSI+eG1sVGV4dFJlYWRlck5vZGVUeXBlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA0MDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJJc0VtcHR5RWxlbWVudCI+eG1sVGV4dFJlYWRlcklzRW1wdHlFbGVtZW50PC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA0MTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJIYXNWYWx1ZSI+eG1sVGV4dFJlYWRlckhhc1ZhbHVlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA0NTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbFN0cmxlbiI+eG1sU3RybGVuPC9hPiBmcm9tIHhtbHN0cmluZy5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA2MDogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNjg6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxSZWFkZXJGb3JGaWxlIj54bWxSZWFkZXJGb3JGaWxlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA3NjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJSZWFkIj54bWxUZXh0UmVhZGVyUmVhZDwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODE6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVySXNWYWxpZCI+eG1sVGV4dFJlYWRlcklzVmFsaWQ8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDg0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sRnJlZVRleHRSZWFkZXIiPnhtbEZyZWVUZXh0UmVhZGVyPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAzMTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJDb25zdE5hbWUiPnhtbFRleHRSZWFkZXJDb25zdE5hbWU8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDM1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlckNvbnN0VmFsdWUiPnhtbFRleHRSZWFkZXJDb25zdFZhbHVlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAzODogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJEZXB0aCI+eG1sVGV4dFJlYWRlckRlcHRoPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAzOTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJOb2RlVHlwZSI+eG1sVGV4dFJlYWRlck5vZGVUeXBlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA0MTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJJc0VtcHR5RWxlbWVudCI+eG1sVGV4dFJlYWRlcklzRW1wdHlFbGVtZW50PC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA0MjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJIYXNWYWx1ZSI+eG1sVGV4dFJlYWRlckhhc1ZhbHVlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA0NjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHN0cmluZy5odG1sI3htbFN0cmxlbiI+eG1sU3RybGVuPC9hPiBmcm9tIHhtbHN0cmluZy5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA2MTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclB0ciI+eG1sVGV4dFJlYWRlclB0cjwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgNjk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxSZWFkZXJGb3JGaWxlIj54bWxSZWFkZXJGb3JGaWxlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA3NDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJSZWFkIj54bWxUZXh0UmVhZGVyUmVhZDwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgODI6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVySXNWYWxpZCI+eG1sVGV4dFJlYWRlcklzVmFsaWQ8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDg1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sRnJlZVRleHRSZWFkZXIiPnhtbEZyZWVUZXh0UmVhZGVyPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzYWdlOjwvcD4KICAgICA8cD5yZWFkZXIyICZsdDt2YWxpZF94bWxfZmlsZW5hbWUmZ3Q7PC9wPgpAQCAtMzk4LDkgKzM4OSw5IEBACiAgICAgICA8bGk+IGxpbmUgMzI6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDM4OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sUmVhZGVyRm9yRmlsZSI+eG1sUmVhZGVyRm9yRmlsZTwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgNDM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUHJlc2VydmVQYXR0ZXJuIj54bWxUZXh0UmVhZGVyUHJlc2VydmVQYXR0ZXJuPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA1MjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJSZWFkIj54bWxUZXh0UmVhZGVyUmVhZDwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgNTA6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUmVhZCI+eG1sVGV4dFJlYWRlclJlYWQ8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDU2OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sRnJlZVRleHRSZWFkZXIiPnhtbEZyZWVUZXh0UmVhZGVyPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KICAgICAgIDxsaT4gbGluZSA2MjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJDdXJyZW50RG9jIj54bWxUZXh0UmVhZGVyQ3VycmVudERvYzwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNjY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxGcmVlVGV4dFJlYWRlciI+eG1sRnJlZVRleHRSZWFkZXI8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDk2OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbERvY0R1bXAiPnhtbERvY0R1bXA8L2E+IGZyb20gdHJlZS5oPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzYWdlOjwvcD4KQEAgLTQxNiwxMSArNDA3LDExIEBACiAgICAgPC91bD4KICAgICA8cD5Vc2VzOjwvcD4KICAgICA8dWw+Ci0gICAgICA8bGk+IGxpbmUgMjY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxUZXh0UmVhZGVyUmVhZCI+eG1sVGV4dFJlYWRlclJlYWQ8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDI0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sVGV4dFJlYWRlclJlYWQiPnhtbFRleHRSZWFkZXJSZWFkPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAzNDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJDdXJyZW50RG9jIj54bWxUZXh0UmVhZGVyQ3VycmVudERvYzwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgNTQ6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJQdHIiPnhtbFRleHRSZWFkZXJQdHI8L2E+IGZyb20geG1scmVhZGVyLmg8L2xpPgogICAgICAgPGxpPiBsaW5lIDcyOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sUmVhZGVyRm9yRmlsZSI+eG1sUmVhZGVyRm9yRmlsZTwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgODM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWxyZWFkZXIuaHRtbCN4bWxSZWFkZXJOZXdGaWxlIj54bWxSZWFkZXJOZXdGaWxlPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA5NzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHJlYWRlci5odG1sI3htbFRleHRSZWFkZXJDdXJyZW50RG9jIj54bWxUZXh0UmVhZGVyQ3VycmVudERvYzwvYT4gZnJvbSB4bWxyZWFkZXIuaDwvbGk+CiAgICAgICA8bGk+IGxpbmUgMTA0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1scmVhZGVyLmh0bWwjeG1sRnJlZVRleHRSZWFkZXIiPnhtbEZyZWVUZXh0UmVhZGVyPC9hPiBmcm9tIHhtbHJlYWRlci5oPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzYWdlOjwvcD4KQEAgLTQzNywzNSArNDI4LDM4IEBACiAgICAgICA8bGk+CiAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCI+Jmx0O2xpYnhtbC94bWx3cml0ZXIuaCZndDs8L2E+CiAgICAgICA8L2xpPgorICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwiPiZsdDtsaWJ4bWwvcGFyc2VyLmgmZ3Q7PC9hPgorICAgICAgPC9saT4KICAgICA8L3VsPgogICAgIDxwPlVzZXM6PC9wPgogICAgIDx1bD4KLSAgICAgIDxsaT4gbGluZSA3NjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbE5ld1RleHRXcml0ZXJGaWxlbmFtZSI+eG1sTmV3VGV4dFdyaXRlckZpbGVuYW1lPC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAzNDE6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJQdHIiPnhtbEJ1ZmZlclB0cjwvYT4gZnJvbSB0cmVlLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDM0NzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJDcmVhdGUiPnhtbEJ1ZmZlckNyZWF0ZTwvYT4gZnJvbSB0cmVlLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDM1NTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbE5ld1RleHRXcml0ZXJNZW1vcnkiPnhtbE5ld1RleHRXcml0ZXJNZW1vcnk8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDYxMzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxCdWZmZXJGcmVlIj54bWxCdWZmZXJGcmVlPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgNjMyOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sTmV3VGV4dFdyaXRlckRvYyI+eG1sTmV3VGV4dFdyaXRlckRvYzwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODc4OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyUHRyIj54bWxUZXh0V3JpdGVyUHRyPC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA4ODA6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODg1OiBNYWNybyA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjWE1MX0RFRkFVTFRfVkVSU0lPTiI+WE1MX0RFRkFVTFRfVkVSU0lPTjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODg1OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld0RvYyI+eG1sTmV3RG9jPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgODk0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld0RvY05vZGUiPnhtbE5ld0RvY05vZGU8L2E+IGZyb20gdHJlZS5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA5MDE6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRG9jU2V0Um9vdEVsZW1lbnQiPnhtbERvY1NldFJvb3RFbGVtZW50PC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgOTA0OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sTmV3VGV4dFdyaXRlclRyZWUiPnhtbE5ld1RleHRXcml0ZXJUcmVlPC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA5MTM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyU3RhcnREb2N1bWVudCI+eG1sVGV4dFdyaXRlclN0YXJ0RG9jdW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDkyNTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJXcml0ZUNvbW1lbnQiPnhtbFRleHRXcml0ZXJXcml0ZUNvbW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDk0OTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZSI+eG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlPC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSA5NTk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDb21tZW50Ij54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDb21tZW50PC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxMDczOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RWxlbWVudCI+eG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RWxlbWVudDwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTA5NjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJTdGFydEVsZW1lbnQiPnhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDExMDM6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyV3JpdGVFbGVtZW50Ij54bWxUZXh0V3JpdGVyV3JpdGVFbGVtZW50PC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxMTExOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlckVuZEVsZW1lbnQiPnhtbFRleHRXcml0ZXJFbmRFbGVtZW50PC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KLSAgICAgIDxsaT4gbGluZSAxMTIxOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlckVuZERvY3VtZW50Ij54bWxUZXh0V3JpdGVyRW5kRG9jdW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDExMjc6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxGcmVlVGV4dFdyaXRlciI+eG1sRnJlZVRleHRXcml0ZXI8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDExMjk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sU2F2ZUZpbGVFbmMiPnhtbFNhdmVGaWxlRW5jPC9hPiBmcm9tIHRyZWUuaDwvbGk+Ci0gICAgICA8bGk+IGxpbmUgMTE1MTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItZW5jb2RpbmcuaHRtbCN4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIj54bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyPC9hPiBmcm9tIGVuY29kaW5nLmg8L2xpPgotICAgICAgPGxpPiBsaW5lIDExNTY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1lbmNvZGluZy5odG1sI3htbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyIj54bWxGaW5kQ2hhckVuY29kaW5nSGFuZGxlcjwvYT4gZnJvbSBlbmNvZGluZy5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA2NTogVHlwZSA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlclB0ciI+eG1sVGV4dFdyaXRlclB0cjwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgNjk6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxOZXdUZXh0V3JpdGVyRmlsZW5hbWUiPnhtbE5ld1RleHRXcml0ZXJGaWxlbmFtZTwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgNzg6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxUZXh0V3JpdGVyU3RhcnREb2N1bWVudCI+eG1sVGV4dFdyaXRlclN0YXJ0RG9jdW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDg3OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudCI+eG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudDwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTAwOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlcldyaXRlQ29tbWVudCI+eG1sVGV4dFdyaXRlcldyaXRlQ29tbWVudDwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTE3OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlIj54bWxUZXh0V3JpdGVyV3JpdGVBdHRyaWJ1dGU8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDEzNjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJXcml0ZUZvcm1hdENvbW1lbnQiPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdENvbW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDE1NTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJXcml0ZUZvcm1hdEVsZW1lbnQiPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEVsZW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDE3NDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJXcml0ZUVsZW1lbnQiPnhtbFRleHRXcml0ZXJXcml0ZUVsZW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDE5MzogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbFRleHRXcml0ZXJFbmRFbGVtZW50Ij54bWxUZXh0V3JpdGVyRW5kRWxlbWVudDwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMzEzOiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sVGV4dFdyaXRlckVuZERvY3VtZW50Ij54bWxUZXh0V3JpdGVyRW5kRG9jdW1lbnQ8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDMyMDogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbEZyZWVUZXh0V3JpdGVyIj54bWxGcmVlVGV4dFdyaXRlcjwvYT4gZnJvbSB4bWx3cml0ZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMzM0OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyUHRyIj54bWxCdWZmZXJQdHI8L2E+IGZyb20gdHJlZS5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAzNDA6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyQ3JlYXRlIj54bWxCdWZmZXJDcmVhdGU8L2E+IGZyb20gdHJlZS5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAzNDg6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi14bWx3cml0ZXIuaHRtbCN4bWxOZXdUZXh0V3JpdGVyTWVtb3J5Ij54bWxOZXdUZXh0V3JpdGVyTWVtb3J5PC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA2MDY6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sQnVmZmVyRnJlZSI+eG1sQnVmZmVyRnJlZTwvYT4gZnJvbSB0cmVlLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDYyNTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXhtbHdyaXRlci5odG1sI3htbE5ld1RleHRXcml0ZXJEb2MiPnhtbE5ld1RleHRXcml0ZXJEb2M8L2E+IGZyb20geG1sd3JpdGVyLmg8L2xpPgorICAgICAgPGxpPiBsaW5lIDg1NjogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxTYXZlRmlsZUVuYyI+eG1sU2F2ZUZpbGVFbmM8L2E+IGZyb20gdHJlZS5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA4NzM6IFR5cGUgPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLXRyZWUuaHRtbCN4bWxOb2RlUHRyIj54bWxOb2RlUHRyPC9hPiBmcm9tIHRyZWUuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgODc4OiBNYWNybyA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItcGFyc2VyLmh0bWwjWE1MX0RFRkFVTFRfVkVSU0lPTiI+WE1MX0RFRkFVTFRfVkVSU0lPTjwvYT4gZnJvbSBwYXJzZXIuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgODc4OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld0RvYyI+eG1sTmV3RG9jPC9hPiBmcm9tIHRyZWUuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgODg3OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDItdHJlZS5odG1sI3htbE5ld0RvY05vZGUiPnhtbE5ld0RvY05vZGU8L2E+IGZyb20gdHJlZS5oPC9saT4KKyAgICAgIDxsaT4gbGluZSA4OTQ6IEZ1bmN0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi10cmVlLmh0bWwjeG1sRG9jU2V0Um9vdEVsZW1lbnQiPnhtbERvY1NldFJvb3RFbGVtZW50PC9hPiBmcm9tIHRyZWUuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgODk3OiBGdW5jdGlvbiA8YSBocmVmPSJodHRwczovL2dub21lLnBhZ2VzLmdpdGxhYi5nbm9tZS5vcmcvbGlieG1sMi9kZXZoZWxwL2xpYnhtbDIteG1sd3JpdGVyLmh0bWwjeG1sTmV3VGV4dFdyaXRlclRyZWUiPnhtbE5ld1RleHRXcml0ZXJUcmVlPC9hPiBmcm9tIHhtbHdyaXRlci5oPC9saT4KKyAgICAgIDxsaT4gbGluZSAxMTQ0OiBUeXBlIDxhIGhyZWY9Imh0dHBzOi8vZ25vbWUucGFnZXMuZ2l0bGFiLmdub21lLm9yZy9saWJ4bWwyL2RldmhlbHAvbGlieG1sMi1lbmNvZGluZy5odG1sI3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIiPnhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHI8L2E+IGZyb20gZW5jb2RpbmcuaDwvbGk+CisgICAgICA8bGk+IGxpbmUgMTE0OTogRnVuY3Rpb24gPGEgaHJlZj0iaHR0cHM6Ly9nbm9tZS5wYWdlcy5naXRsYWIuZ25vbWUub3JnL2xpYnhtbDIvZGV2aGVscC9saWJ4bWwyLWVuY29kaW5nLmh0bWwjeG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIiPnhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyPC9hPiBmcm9tIGVuY29kaW5nLmg8L2xpPgogICAgIDwvdWw+CiAgICAgPHA+VXNhZ2U6PC9wPgogICAgIDxwPnRlc3RXcml0ZXI8L3A+CmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvaW5kZXgucHkgYi9kb2MvZXhhbXBsZXMvaW5kZXgucHkKaW5kZXggOGNlOGQxMi4uYmNlYWU4YiAxMDA3NTUKLS0tIGEvZG9jL2V4YW1wbGVzL2luZGV4LnB5CisrKyBiL2RvYy9leGFtcGxlcy9pbmRleC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBJbmRleGVzIHRoZSBleGFtcGxlcyBhbmQgYnVpbGQgYW4gWE1MIGRlc2NyaXB0aW9uCiAjCkBAIC0yNjIsMTAgKzI2Miw4IEBACiAgICAgTWFrZWZpbGUgPSBNYWtlZmlsZSArICJ0ZXN0czogJChjaGVja19QUk9HUkFNUylcbiIKICAgICBNYWtlZmlsZSA9IE1ha2VmaWxlICsgIlx0QHRlc3QgLWYgTWFrZWZpbGUuYW0gfHwgdGVzdCAtZiB0ZXN0MS54bWwgfHwgJChMTl9TKSAkKHNyY2RpcikvdGVzdD8ueG1sIC5cbiIKICAgICBNYWtlZmlsZSA9IE1ha2VmaWxlICsgIlx0QChlY2hvICcjIyBleGFtcGxlcyByZWdyZXNzaW9uIHRlc3RzJylcbiIKLSAgICBNYWtlZmlsZSA9IE1ha2VmaWxlICsgIlx0QChlY2hvID4gLm1lbWR1bXApXG4iCiAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgIE1ha2VmaWxlID0gTWFrZWZpbGUgKyAiXHRAJChDSEVDS0VSKSAlc1xuIiAlICh0ZXN0KQotICAgICAgICBNYWtlZmlsZSA9IE1ha2VmaWxlICsgJ1x0QGdyZXAgIk1PUlkgQUxMTyIgLm1lbWR1bXAgfCBncmVwIC12ICJNRU1PUlkgQUxMT0NBVEVEIDogMCIgOyBleGl0IDBcbicKICAgICBNYWtlZmlsZSA9IE1ha2VmaWxlICsgIlx0QHJtICoudG1wXG4iCiAgICAgdHJ5OgogICAgICAgICBvbGQgPSBvcGVuKCJNYWtlZmlsZS5hbSIsICJyIikucmVhZCgpCmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvaW8xLmMgYi9kb2MvZXhhbXBsZXMvaW8xLmMKaW5kZXggNWMyYjI1ZC4uMGRiMzdjNyAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL2lvMS5jCisrKyBiL2RvYy9leGFtcGxlcy9pbzEuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgpAQCAtMTQ4LDE0ICsxNDksNiBAQAogICAgICAqLwogICAgIHhtbEZyZWVEb2MoZG9jKTsKIAotICAgIC8qCi0gICAgICogQ2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LgotICAgICAqLwotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICAvKgotICAgICAqIHRoaXMgaXMgdG8gZGVidWcgbWVtb3J5IGZvciByZWdyZXNzaW9uIHRlc3RzCi0gICAgICovCi0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybigwKTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvcGFyc2UxLmMgYi9kb2MvZXhhbXBsZXMvcGFyc2UxLmMKaW5kZXggZTNjOWQzYS4uMDEwODdkMSAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL3BhcnNlMS5jCisrKyBiL2RvYy9leGFtcGxlcy9wYXJzZTEuYwpAQCAtNDQsMTMgKzQ0LDUgQEAKIAogICAgIGV4YW1wbGUxRnVuYyhhcmd2WzFdKTsKIAotICAgIC8qCi0gICAgICogQ2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LgotICAgICAqLwotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICAvKgotICAgICAqIHRoaXMgaXMgdG8gZGVidWcgbWVtb3J5IGZvciByZWdyZXNzaW9uIHRlc3RzCi0gICAgICovCi0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybigwKTsKIH0KZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy9wYXJzZTIuYyBiL2RvYy9leGFtcGxlcy9wYXJzZTIuYwppbmRleCA0ZGNiZmRlLi4wNzMyZTFlIDEwMDY0NAotLS0gYS9kb2MvZXhhbXBsZXMvcGFyc2UyLmMKKysrIGIvZG9jL2V4YW1wbGVzL3BhcnNlMi5jCkBAIC02MCwxMyArNjAsNSBAQAogCiAgICAgZXhhbXBsZUZ1bmMoYXJndlsxXSk7CiAKLSAgICAvKgotICAgICAqIENsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBYTUwgbGlicmFyeS4KLSAgICAgKi8KLSAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHRvIGRlYnVnIG1lbW9yeSBmb3IgcmVncmVzc2lvbiB0ZXN0cwotICAgICAqLwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICByZXR1cm4oMCk7CiB9CmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvcGFyc2UzLmMgYi9kb2MvZXhhbXBsZXMvcGFyc2UzLmMKaW5kZXggMDc2YTc4Ni4uMTUzNDlkYyAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL3BhcnNlMy5jCisrKyBiL2RvYy9leGFtcGxlcy9wYXJzZTMuYwpAQCAtNDgsMTMgKzQ4LDUgQEAKIAogICAgIGV4YW1wbGUzRnVuYyhkb2N1bWVudCwgNik7CiAKLSAgICAvKgotICAgICAqIENsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBYTUwgbGlicmFyeS4KLSAgICAgKi8KLSAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHRvIGRlYnVnIG1lbW9yeSBmb3IgcmVncmVzc2lvbiB0ZXN0cwotICAgICAqLwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICByZXR1cm4oMCk7CiB9CmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvcGFyc2U0LmMgYi9kb2MvZXhhbXBsZXMvcGFyc2U0LmMKaW5kZXggNDkxOTFkNS4uZWFlYWI0MCAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL3BhcnNlNC5jCisrKyBiL2RvYy9leGFtcGxlcy9wYXJzZTQuYwpAQCAtMTI1LDE4ICsxMjUsMTAgQEAKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgJXNcbiIsIGFyZ3ZbMV0pOwogICAgIH0KIAotICAgIC8qCi0gICAgICogQ2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LgotICAgICAqLwotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICAvKgotICAgICAqIHRoaXMgaXMgdG8gZGVidWcgbWVtb3J5IGZvciByZWdyZXNzaW9uIHRlc3RzCi0gICAgICovCi0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybigwKTsKIH0KICNlbHNlIC8qICEgTElCWE1MX1BVU0hfRU5BQkxFRCAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CitpbnQgbWFpbih2b2lkKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICJMaWJyYXJ5IG5vdCBjb21waWxlZCB3aXRoIHB1c2ggcGFyc2VyIHN1cHBvcnRcbiIpOwogICAgIHJldHVybigwKTsKIH0KZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy9yZWFkZXIxLmMgYi9kb2MvZXhhbXBsZXMvcmVhZGVyMS5jCmluZGV4IDEwMzAxNjguLmVhZmI2ZTEgMTAwNjQ0Ci0tLSBhL2RvYy9leGFtcGxlcy9yZWFkZXIxLmMKKysrIGIvZG9jL2V4YW1wbGVzL3JlYWRlcjEuYwpAQCAtODgsMTQgKzg4LDYgQEAKIAogICAgIHN0cmVhbUZpbGUoYXJndlsxXSk7CiAKLSAgICAvKgotICAgICAqIENsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBYTUwgbGlicmFyeS4KLSAgICAgKi8KLSAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHRvIGRlYnVnIG1lbW9yeSBmb3IgcmVncmVzc2lvbiB0ZXN0cwotICAgICAqLwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICByZXR1cm4oMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy9yZWFkZXIyLmMgYi9kb2MvZXhhbXBsZXMvcmVhZGVyMi5jCmluZGV4IDljMmQyZTYuLmYwN2Y5Y2QgMTAwNjQ0Ci0tLSBhL2RvYy9leGFtcGxlcy9yZWFkZXIyLmMKKysrIGIvZG9jL2V4YW1wbGVzL3JlYWRlcjIuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1scmVhZGVyLmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogCiAjaWZkZWYgTElCWE1MX1JFQURFUl9FTkFCTEVECiAKQEAgLTEwMywxNCArMTA0LDYgQEAKIAogICAgIHN0cmVhbUZpbGUoYXJndlsxXSk7CiAKLSAgICAvKgotICAgICAqIENsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBYTUwgbGlicmFyeS4KLSAgICAgKi8KLSAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHRvIGRlYnVnIG1lbW9yeSBmb3IgcmVncmVzc2lvbiB0ZXN0cwotICAgICAqLwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICByZXR1cm4oMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy9yZWFkZXIzLmMgYi9kb2MvZXhhbXBsZXMvcmVhZGVyMy5jCmluZGV4IGY2MDgyOTcuLmQ2YTQzYjEgMTAwNjQ0Ci0tLSBhL2RvYy9leGFtcGxlcy9yZWFkZXIzLmMKKysrIGIvZG9jL2V4YW1wbGVzL3JlYWRlcjMuYwpAQCAtMTAwLDE1ICsxMDAsNiBAQAogCXhtbEZyZWVEb2MoZG9jKTsKICAgICB9CiAKLQotICAgIC8qCi0gICAgICogQ2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LgotICAgICAqLwotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICAvKgotICAgICAqIHRoaXMgaXMgdG8gZGVidWcgbWVtb3J5IGZvciByZWdyZXNzaW9uIHRlc3RzCi0gICAgICovCi0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybigwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZG9jL2V4YW1wbGVzL3JlYWRlcjQuYyBiL2RvYy9leGFtcGxlcy9yZWFkZXI0LmMKaW5kZXggZjQyNzdlYy4uM2MwZDFiOSAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL3JlYWRlcjQuYworKysgYi9kb2MvZXhhbXBsZXMvcmVhZGVyNC5jCkBAIC0xMDMsMTQgKzEwMyw2IEBACiAgICAgICovCiAgICAgeG1sRnJlZVRleHRSZWFkZXIocmVhZGVyUHRyKTsKIAotICAgIC8qCi0gICAgICogQ2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LgotICAgICAqLwotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICAvKgotICAgICAqIHRoaXMgaXMgdG8gZGVidWcgbWVtb3J5IGZvciByZWdyZXNzaW9uIHRlc3RzCi0gICAgICovCi0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybigwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZG9jL2V4YW1wbGVzL3Rlc3RXcml0ZXIuYyBiL2RvYy9leGFtcGxlcy90ZXN0V3JpdGVyLmMKaW5kZXggYTc3ZWVjNy4uMGZlMTQxYyAxMDA2NDQKLS0tIGEvZG9jL2V4YW1wbGVzL3Rlc3RXcml0ZXIuYworKysgYi9kb2MvZXhhbXBsZXMvdGVzdFdyaXRlci5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL2VuY29kaW5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHdyaXRlci5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KIAogI2lmIGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9PVVRQVVRfRU5BQkxFRCkKIApAQCAtNDgsMTQgKzQ5LDYgQEAKICAgICAvKiBuZXh0LCB0aGUgdHJlZSB2ZXJzaW9uICovCiAgICAgdGVzdFhtbHdyaXRlclRyZWUoIndyaXRlcjQudG1wIik7CiAKLSAgICAvKgotICAgICAqIENsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBYTUwgbGlicmFyeS4KLSAgICAgKi8KLSAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgLyoKLSAgICAgKiB0aGlzIGlzIHRvIGRlYnVnIG1lbW9yeSBmb3IgcmVncmVzc2lvbiB0ZXN0cwotICAgICAqLwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZG9jL2V4YW1wbGVzL3RyZWUxLmMgYi9kb2MvZXhhbXBsZXMvdHJlZTEuYwppbmRleCBlOGZjOGQxLi4yOGZjMWI3IDEwMDY0NAotLS0gYS9kb2MvZXhhbXBsZXMvdHJlZTEuYworKysgYi9kb2MvZXhhbXBsZXMvdHJlZTEuYwpAQCAtNzgsMTIgKzc4LDYgQEAKICAgICAvKmZyZWUgdGhlIGRvY3VtZW50ICovCiAgICAgeG1sRnJlZURvYyhkb2MpOwogCi0gICAgLyoKLSAgICAgKkZyZWUgdGhlIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBtYXkKLSAgICAgKmhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgdGhlIHBhcnNlci4KLSAgICAgKi8KLSAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0KICAgICByZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvdHJlZTIuYyBiL2RvYy9leGFtcGxlcy90cmVlMi5jCmluZGV4IDgzZjI5YTAuLmVmMTM3YWYgMTAwNjQ0Ci0tLSBhL2RvYy9leGFtcGxlcy90cmVlMi5jCisrKyBiL2RvYy9leGFtcGxlcy90cmVlMi5jCkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgKiBBIHNpbXBsZSBsb29wIHRoYXQgImF1dG9tYXRlcyIgbm9kZXMgY3JlYXRpb24gCiAgICAgICovCiAgICAgZm9yIChpID0gNTsgaSA8IDc7IGkrKykgewotICAgICAgICBzcHJpbnRmKGJ1ZmYsICJub2RlJWQiLCBpKTsKKyAgICAgICAgc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAibm9kZSVkIiwgaSk7CiAgICAgICAgIG5vZGUgPSB4bWxOZXdDaGlsZChyb290X25vZGUsIE5VTEwsIEJBRF9DQVNUIGJ1ZmYsIE5VTEwpOwogICAgICAgICBmb3IgKGogPSAxOyBqIDwgNDsgaisrKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKGJ1ZmYsICJub2RlJWQlZCIsIGksIGopOworICAgICAgICAgICAgc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAibm9kZSVkJWQiLCBpLCBqKTsKICAgICAgICAgICAgIG5vZGUxID0geG1sTmV3Q2hpbGQobm9kZSwgTlVMTCwgQkFEX0NBU1QgYnVmZiwgTlVMTCk7CiAgICAgICAgICAgICB4bWxOZXdQcm9wKG5vZGUxLCBCQURfQ0FTVCAib2RkIiwgQkFEX0NBU1QoKGogJSAyKSA/ICJubyIgOiAieWVzIikpOwogICAgICAgICB9CkBAIC05NywxNiArOTcsNiBAQAogICAgIC8qZnJlZSB0aGUgZG9jdW1lbnQgKi8KICAgICB4bWxGcmVlRG9jKGRvYyk7CiAKLSAgICAvKgotICAgICAqRnJlZSB0aGUgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG1heQotICAgICAqaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSB0aGUgcGFyc2VyLgotICAgICAqLwotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLQotICAgIC8qCi0gICAgICogdGhpcyBpcyB0byBkZWJ1ZyBtZW1vcnkgZm9yIHJlZ3Jlc3Npb24gdGVzdHMKLSAgICAgKi8KLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAgICAgcmV0dXJuKDApOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy94cGF0aDEuYyBiL2RvYy9leGFtcGxlcy94cGF0aDEuYwppbmRleCBhZjk5NmU2Li4xNGVmY2JhIDEwMDY0NAotLS0gYS9kb2MvZXhhbXBsZXMveHBhdGgxLmMKKysrIGIvZG9jL2V4YW1wbGVzL3hwYXRoMS5jCkBAIC00NSwxMyArNDUsNiBAQAogCXJldHVybigtMSk7CiAgICAgfQogCi0gICAgLyogU2h1dGRvd24gbGlieG1sICovCi0gICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIAotICAgIC8qCi0gICAgICogdGhpcyBpcyB0byBkZWJ1ZyBtZW1vcnkgZm9yIHJlZ3Jlc3Npb24gdGVzdHMKLSAgICAgKi8KLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RvYy9leGFtcGxlcy94cGF0aDIuYyBiL2RvYy9leGFtcGxlcy94cGF0aDIuYwppbmRleCBhMTdhMDI1Li5iZjRlNjMxIDEwMDY0NAotLS0gYS9kb2MvZXhhbXBsZXMveHBhdGgyLmMKKysrIGIvZG9jL2V4YW1wbGVzL3hwYXRoMi5jCkBAIC00NywxMyArNDcsNiBAQAogCXJldHVybigtMSk7CiAgICAgfQogCi0gICAgLyogU2h1dGRvd24gbGlieG1sICovCi0gICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIAotICAgIC8qCi0gICAgICogdGhpcyBpcyB0byBkZWJ1ZyBtZW1vcnkgZm9yIHJlZ3Jlc3Npb24gdGVzdHMKLSAgICAgKi8KLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RvYy9saWJ4bWwtZG9jLmVsIGIvZG9jL2xpYnhtbC1kb2MuZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZDk2ODguLjAwMDAwMDAKLS0tIGEvZG9jL2xpYnhtbC1kb2MuZWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotOzs7IGxpYnhtbC1kb2MuZWwgLSBsb29rIHVwIGxpYnhtbC1zeW1ib2xzIGFuZCBzdGFydCBicm93c2VyIG9uIGRvY3VtZW50YXRpb24KLQotOzsgQXV0aG9yOiBGZWxpeCBOYXR0ZXIgPGZuYXR0ZXJAZ214Lm5ldD4sIEdlZXJ0IEtsb29zdGVybWFuIDxnZWVydGtAYWkucnVnLm5sPgotOzsgQ3JlYXRlZDogSnVuIDIxIDIwMDAKLTs7IEtleXdvcmRzOiBsaWJ4bWwgZG9jdW1lbnRhdGlvbgotCi07OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi07OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotOzsgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLTs7IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotOzsgCi07OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLTs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi07OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi07OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotOzsgCi07OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotOzsgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLTs7IEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gOzs7IENvbW1lbnRhcnkgLyBSRUFETUUKLQotOzsgdGhlc2UgZnVuY3Rpb25zIGFsbG93IHlvdSB0byBicm93c2UgdGhlIGxpYnhtbCBkb2N1bWVudGF0aW9uCi07OyAodXNpbmcgbHlueCB3aXRoaW4gZW1hY3MgYnkgZGVmYXVsdCkKLTs7Ci07OyAtLS0tLSBJbnN0YWxsaW5nCi07OyAxLiBhZGQgdGhlIGZvbGxvd2luZyB0byB+Ly5lbWFjcyAoYWRhcHQgcGF0aCBhbmQgcmVtb3ZlIGNvbW1lbnRzICEpCi07OyAoYXV0b2xvYWQgJ2xpYnhtbGRvYy1sb29rdXAtc3ltYm9sICJ+L2VsaXNwL2xpYnhtbC1kb2MiIAotOzsgICJMb29rIHVwIGxpYnhtbC1zeW1ib2xzIGFuZCBzdGFydCBicm93c2VyIG9uIGRvY3VtZW50YXRpb24uIiB0KQotOzsgb3IgcHV0IHRoaXMgZmlsZSBpbiBsb2FkLXBhdGggYW5kIHVzZSB0aGlzOgotOzsgKGF1dG9sb2FkICdsaWJ4bWxkb2MtbG9va3VwLXN5bWJvbCAibGlieG1sLWRvYyIKLTs7ICAiTG9vayB1cCBsaWJ4bWwtc3ltYm9scyBhbmQgc3RhcnQgYnJvd3NlciBvbiBkb2N1bWVudGF0aW9uLiIgdCkKLTs7Ci07OyAyLiBhZGFwdCBsaWJ4bWxkb2Mtcm9vdDoKLTs7IGkuZS4gKHNldHEgbGlieG1sZG9jLXJvb3QgIn4vbGlieG1sMi0yLjAuMC9kb2MvaHRtbCIpCi07OwotOzsgMy4gY2hhbmdlIHRoZSBmaWx0ZXItcmVnZXg6IGJ5IGRlZmF1bHQsIGNwcC1kZWZpbmVzLCBjYWxsYmFja3MgYW5kCi07OyBodG1sLWZ1bmN0aW9ucyBhcmUgZXhjbHVkZWQgKEMtaCB2IGxpYnhtbGRvYy1maWx0ZXItcmVnZXhwKQotOzsKLTs7IDQuIGNvbnNpZGVyIGN1c3RvbWl6aW5nIGxpYnhtbGRvYy1icm93c2UtdXJsIChseW54IGJ5IGRlZmF1bHQpOwotOzsgY2Fubm90IHVzZSBFbWFjcy9XMyA0LjBwcmU0NiBiZWNhdXNlIGl0IGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBodG1sCi07OwotOzsgLS0tLS0gVXNpbmcKLTs7IGNhbGwgTS14IGxpYnhtbGRvYy1sb29rdXAtc3ltYm9sOiB0aGlzIHdpbGwgcHJvbXB0IHdpdGggY29tcGxldGlvbiBhbmQKLTs7IHRoZW4gb3BlbiB0aGUgYnJvd3NlciBzaG93aW5nIHRoZSBkb2N1bWVudGF0aW9uLiBJZiB0aGUgd29yZCBhcm91bmQgdGhlCi07OyBwb2ludCBtYXRjaGVzIGEgc3ltYm9sLCB0aGF0IGlzIHVzZWQgaW5zdGVhZC4gIFlvdSBjYW4gYWxzbyBjYWxsCi07OyBsaWJ4bWxkb2MtbG9va3VwLXN5bWJvbCBub25pbnRlcmFjdGl2ZWx5IGFuZCBwYXNzIHRoZSBzeW1ib2wuCi0KLTs7IE5vdGU6Ci07OyBhbiBhbHRlcm5hdGl2ZSB0byBsaWJ4bWwtZG9jIGlzIGVtYWNzIHRhZ3M6Ci07OyAkIGNkIGxpYnhtbDItMi4zLjgKLTs7ICQgbWFrZSBUQUdTCi07OyAkIGVtYWNzCi07OyBNLS4gKE0teCBmaW5kLXRhZykgLi4uICBvcgotOzsgTS14IHRhZ3Mtc2VhcmNoIC4uLiBSRVQgTS0sIE0tLCAuLi4KLTs7IChmb3IgbW9yZSBpbmZvcm1hdGlvbjogaW5mbyBlbWFjcyBSRVQgbSBUYWdzIFJFVCkKLQotCi0gOzs7IENoYW5nZUxvZzoKLTs7IFdlZCBKdW4gMjEgMDE6MDc6MTIgMjAwMDogaW5pdGlhbCByZWxlYXNlCi07OyBXZWQgSnVuIDIxIDAxOjQ1OjI5IDIwMDA6IGFkZGVkIGxpYnhtbGRvYy1sb29rdXAtc3ltYm9sLWF0LXBvaW50Ci07OyBXZWQgSnVuIDIxIDIzOjM3OjU4IDIwMDA6IGxpYnhtbGRvYy1sb29rdXAtc3ltYm9sIG5vdyB1c2VzCi07OyAodGhpbmctYXQtcG9pbnQgJ3dvcmQpIGlmIGl0IG1hdGNoZXMgYSBzeW1ib2wKLTs7IFRodSBKdW4gMjIgMDI6Mzc6NDYgMjAwMDogZmlsdGVyaW5nIGlzIG9ubHkgZG9uZSBmb3IgY29tcGxldGlvbgotOzsgVGh1IEp1biAyMiAyMTowMzo0MSAyMDAwOiBsaWJ4bWxkb2MtYnJvd3NlLXVybCBjYW4gYmUgY3VzdG9taXplZAotOzsgVGh1IE1heSAzMSAyMDAxIChHZWVydCk6IAotOzsgICAgICAgLSBDaGFuZ2VkIHRoZSBgZ25vbWUteG1sLScgaHRtbCBmaWxlIHByZWZpeCBpbnRvIGBsaWJ4bWwtJy4KLTs7ICAgICAgIC0gQ2hhbmdlZCB0aGUgJ3dvcmQgbWF0Y2ggZnJvbSB0aGluZy1hdC1wb2ludCBpbnRvICdzeW1ib2wuCi07OyAgICAgICAgIFdpdGggJ3dvcmQsIGlkZW50aWZpZXJzIHdpdGggYW4gdW5kZXJzY29yZSAoZS5nLiBCQURfQ0FTVCkKLTs7ICAgICAgICAgZG9uJ3QgZ2V0IG1hdGNoZWQuCi07OyBGcmkgSnVuICA4IDE2OjI5OjE4IDIwMDEsIFNhdCBKdW4gMjMgMTY6MTk6NDcgMjAwMToKLTs7IGNvbXBsZXRlIHJld3JpdGUgb2YgbGlieG1sZG9jLWxvb2t1cC1zeW1ib2wKLTs7IGJ5IEZlbGl4IE5hdHRlciA8Zm5hdHRlckBnbXgubmV0PiwgR2VlcnQgS2xvb3N0ZXJtYW4gPGdlZXJ0a0BhaS5ydWcubmw+OgotOzsgICAgICAgLSBOb3cga2VlcHMgdGhlIGxpc3Qgb2Ygc3ltYm9scyBiZXR3ZWVuIGNhbGxzIHRvIHNwZWVkIHRoaW5ncyB1cC4KLTs7ICAgICAgIC0gZmlsdGVyaW5nIGlzIG9ubHkgdXNlZCB3aGVuIG5vIHN5bWJvbCBpcyBwYXNzZWQgYW5kCi07OyAgICAgICB0aGluZy1hdC1wb2ludCBkb2VzIG5vdCBtYXRjaCBhIHN5bWJvbCBhbmQgIioiICsgdGhpbmctYXQtcG9pbnQKLTs7ICAgICAgIGRvZXMgbm90IG1hdGNoIGEgc3ltYm9sICh0aGlzIGlzIHVzZWQgdG8gY2F0Y2ggY2FsbGJhY2tzKSBhbmQKLTs7ICAgICAgIGxpYnhtbGRvYy1maWx0ZXItcmVnZXhwIGlzIG5vbi1uaWwuCi07OyBTYXQgSnVuIDIzIDE2OjIwOjM0IDIwMDE6IHVwZGF0ZSB0aGUgZG9jc3RyaW5ncwotOzsgU2F0IEp1biAyMyAxNjoyMjo1NCAyMDAxIChHZWVydCBLbG9vc3Rlcm1hbiA8Z2VlcnRrQGFpLnJ1Zy5ubD4pOgotOzsgdXBkYXRlIFJFQURNRTogdXNlIGF1dG9sb2FkIGluc3RlYWQgb2YgbG9hZCtjLW1vZGUtaG9vawotOzsgU2F0IEp1bCA3IDE5OjAwOjMxIDIwMDE6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIFhFbWFjczogdGhlCi07OyBzdHJpbmctbWF0Y2ggb2YgWEVtYWNzIHdoZW4gdXNlZCBpbiBjb21wbGV0aW5nLXJlYWQgdXNlZCB0aGUKLTs7IG1pbmlidWZmZXIncyB2YWx1ZSBvZiBjYXNlLWZvbGQtc2VhcmNoLCBhbmQgbm90IHRoZSBvbmUgaW4gdGhlCi07OyBjLW1vZGUgYnVmZmVyIHRoYXQgd2UgaGFkIHNldCA9PiBzbyB0aGVyZSdzIGEgbmV3ICotc3RyaW5nLW1hdGNoLWNzCi07OyAoY2FzZSBzZW5zaXRpdmUpIGZ1bmN0aW9uIHdoaWNoIGJpbmRzIGNhc2UtZm9sZC1zZWFyY2ggYW5kIHJ1bnMgc3RyaW5nLW1hdGNoCi07OyBXZWQgU2VwIDEgMjA6MjY6MjkgMjAwNDogYWRhcHRlZCBmb3IgbGlieG1sMi0yLjYuOTogaGFuZGxlCi07OyBkb2N1bWVudC1yZWxhdGl2ZSAoI1hYWCkgbGlua3MKLQotOzs7IFRPRE86Ci07OyAtIHVzZSBjb21tYW5kLWV4ZWN1dGUgZm9yIGxpYnhtbGRvYy1icm93c2UtdXJsCi07OyAtIGtlZXAgKG1hdGNoLXN0cmluZyAxKSBpbiBhIHZhcmlhYmxlIChsaWJ4bWxkb2MtZ2V0LWxpc3Qtb2Ytc3ltYm9scykKLTs7ICAgKG9ubHkgaWYgaXQgaW1wcm92ZXMgcGVyZm9ybWFuY2UpCi07OyAtIGNoZWNrIHRoZSAocmVxdWlyZSAuLiktc3RhdGVtZW50cwotCi0gOzs7IENvZGU6Ci0KLShyZXF1aXJlICdicm93c2UtdXJsKQotKHJlcXVpcmUgJ3Rlcm0pCi0KLShkZWZ2YXIgbGlieG1sZG9jLXJvb3QgIn4vc3JjL2xpYnhtbDItMi4zLjgvZG9jL2h0bWwiCi0gICJUaGUgcm9vdC1kaXJlY3Rvcnkgb2YgdGhlIGxpYnhtbDItZG9jdW1lbnRhdGlvbiAofiB3aWxsIGJlIGV4cGFuZGVkKS4iKQotKGRlZnZhciBsaWJ4bWxkb2MtZmlsdGVyLXJlZ2V4cCAiXmh0bWxcXHxeXFwqXFx8XltBLVpfXSsiCi0gICJTeW1ib2xzIHRoYXQgbWF0Y2ggdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbCBiZSBleGNsdWRlZCB3aGVuIGRvaW5nCi1jb21wbGV0aW9uIGFuZCBubyBzeW1ib2wgaXMgc3BlY2lmaWVkLgotIEZvciBleGFtcGxlOgotICAgY2FsbGJhY2tzOiAgICAgXCJeXFxcXCpcIiAKLSAgIGNwcC1kZWZpbmVzOiAgIFwiW0EtWl9dK1wiCi0gICB4bWwtZnVuY3Rpb25zICBcIl54bWxcIgotICAgaHRtbC1mdW5jdGlvbnMgXCJeaHRtbFwiCi0gICBzYXgtZnVuY3Rpb25zICBcIi4qU0FYXCIKLUJ5IGRlZmF1bHQsIGNhbGxiYWNrcywgY3BwLWRlZmluZXMgYW5kIGh0bWwqIGFyZSBleGNsdWRlZC4KLVNldCB0aGlzIHRvIG5pbCBpZiB5b3UgZG9uJ3Qgd2FudCBmaWx0ZXJpbmcuIikKLShkZWZ2YXIgbGlieG1sZG9jLWJyb3dzZS11cmwgJ2Jyb3dzZS11cmwtbHlueC1lbWFjcwotICAiQnJvd3NlciB1c2VkIGZvciBicm93c2luZyBkb2N1bWVudGF0aW9uLiBFbWFjcy9XMyA0LjBwcmU0NiBjYW5ub3QgaGFuZGxlCi10aGUgaHRtbCAoYW5kIHdvdWxkIGJlIHRvbyBzbG93KSwgc28gbHlueC1lbWFjcyBpcyB1c2VkIGJ5IGRlZmF1bHQuIikKLShkZWZ2YXIgbGlieG1sZG9jLXN5bWJvbC1oaXN0b3J5IG5pbAotICAiSGlzdG9yeSBmb3IgbG9va2luZyB1cCBsaWJ4bWwtc3ltYm9scy4iKQotKGRlZnZhciBsaWJ4bWxkb2Mtc3ltYm9scyBuaWwgCi0gICJUaGUgbGlzdCBvZiBsaWJ4bWwtc3ltYm9scy4iKQotCi0gOzs7OyBwdWJsaWMgZnVuY3Rpb25zCi0KLShkZWZ1biBsaWJ4bWxkb2MtbG9va3VwLXN5bWJvbCgmb3B0aW9uYWwgc3ltYm9sKQotICAiTG9vayB1cCB4bWwtc3ltYm9sLiIgKGludGVyYWN0aXZlKQotICA7OyBzZXR0aW5nIGNhc2UtZm9sZC1zZWFyY2ggaXMgbm93IGRvbmUgaW4gbGlieG1sZG9jLXN0cmluZy1tYXRjaC1jcwotCi0gIDs7IEJ1aWxkIHVwIGEgc3ltYm9sIGxpc3QgaWYgbmVjZXNzYXJ5Ci0gIChpZiAobnVsbCBsaWJ4bWxkb2Mtc3ltYm9scykKLSAgICAgIChzZXRxIGxpYnhtbGRvYy1zeW1ib2xzIChsaWJ4bWxkb2MtZ2V0LWxpc3Qtb2Ytc3ltYm9scykpKQotICAgIAotICAoY29uZAotICAgKHN5bWJvbCA7OyBzeW1ib2wgaXMgc3BlY2lmaWVkIGFzIGFyZ3VtZW50Ci0gICAgKGlmIChub3QgKGFzc29jIHN5bWJvbCBsaWJ4bWxkb2Mtc3ltYm9scykpCi0gICAgICAgIChzZXRxIHN5bWJvbCBuaWwpKSkKLSAgICgoYXNzb2MgKHRoaW5nLWF0LXBvaW50ICdzeW1ib2wpIGxpYnhtbGRvYy1zeW1ib2xzKQotICAgIChzZXRxIHN5bWJvbCAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpKQotICAgOzsgdGhpcyBpcyBuZWVkZWQgdG8gY2F0Y2ggY2FsbGJhY2tzCi0gICA7OyBub3RlOiB0aGlzIGNvdWxkIGJlIHJld3JpdHRlbiB0byB1c2UgKHRoaW5nLWF0LXBvaW50ICd3b3JkKQotICAgKChhc3NvYyAoY29uY2F0ICIqIiAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpIGxpYnhtbGRvYy1zeW1ib2xzKQotICAgIChzZXRxIHN5bWJvbCAoY29uY2F0ICIqIiAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpKSkKLSAgICkKLQotICA7OyBvbWl0ICIiIHQpIGZyb20gY2FsbCB0byBjb21wbGV0aW5nLXJlYWQgZm9yIHRoZSBzYWtlIG9mIHhlbWFjcwotICAoc2V0cSBzeW1ib2wgKGNvbXBsZXRpbmctcmVhZCAKLSAgICAgICAgICAgICAgICAiTGlieG1sOiAiIGxpYnhtbGRvYy1zeW1ib2xzCi0gICAgICAgICAgICAgICAgKGlmIChvciBzeW1ib2wgKG51bGwgbGlieG1sZG9jLWZpbHRlci1yZWdleHApKQotICAgICAgICAgICAgICAgICAgICBuaWwKLSAgICAgICAgICAgICAgICAgICcobGFtYmRhKGtleSx2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgIChub3QgKGxpYnhtbGRvYy1zdHJpbmctbWF0Y2gtY3MgbGlieG1sZG9jLWZpbHRlci1yZWdleHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhciBrZXksdmFsdWUpKSkpKQotICAgICAgICAgICAgICAgIHQgc3ltYm9sCi0gICAgICAgICAgICAgICAgJ2xpYnhtbGRvYy1zeW1ib2wtaGlzdG9yeSkpCi0gICAgCi0gICAgCi0gIDs7IHN0YXJ0IGJyb3dzZXIKLSAgKGFwcGx5IGxpYnhtbGRvYy1icm93c2UtdXJsIAotICAgICAgICAgKGxpc3QgKGNkciAoYXNzb2Mgc3ltYm9sIGxpYnhtbGRvYy1zeW1ib2xzKSkpKSkKLQotOzsgKGlmIChvciBzeW1ib2wKLTs7ICAgICAgICAgKG51bGwgbGlieG1sZG9jLWZpbHRlci1yZWdleHApKQotOzsgICAgIGxpYnhtbGRvYy1zeW1ib2xzCi07OyAgIChtYXBjYXIKLTs7ICAgICcobGFtYmRhKGtleSx2YWx1ZSkKLTs7ICAgICAgIChpZiAobnVsbCAoc3RyaW5nLW1hdGNoIAotOzsgICAgICAgICAgICAgICAgICBsaWJ4bWxkb2MtZmlsdGVyLXJlZ2V4cAotOzsgICAgICAgICAgICAgICAgICAoY2FyIGtleSx2YWx1ZSkpKQotOzsgICAgICAgICAgIGtleSx2YWx1ZSkpCi07OyAgICBsaWJ4bWxkb2Mtc3ltYm9scykpCi0KLQotOzs7OyBpbnRlcm5hbAotCi0oZGVmdW4gbGlieG1sZG9jLXN0cmluZy1tYXRjaC1jcyhyZWdleHAgc3RyKQotICAiVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzdHJpbmctbWF0Y2ggaW4gWEVtYWNzIHVzZXMgdGhlIGN1cnJlbnQtCi1idWZmZXIncyB2YWx1ZSBvZiBjYXNlLWZvbGQtc2VhcmNoIChkaWZmZXJlbnQgZnJvbSBHTlUgRW1hY3MpLiIKLSAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggbmlsKSkKLSAgICAoc3RyaW5nLW1hdGNoIHJlZ2V4cCBzdHIpKSkKLQotKGRlZnVuIGxpYnhtbGRvYy1nZXQtbGlzdC1vZi1zeW1ib2xzKCkKLSAgIkdldCB0aGUgbGlzdCBvZiBodG1sLWxpbmtzIGluIHRoZSBsaWJ4bWwtZG9jdW1lbnRhdGlvbi4iCi0gIChsZXQgKChmaWxlcwotICAgICAgICAgKGRpcmVjdG9yeS1maWxlcwotICAgICAgICAgIGxpYnhtbGRvYy1yb290IHQKLSAgICAgICAgICAoY29uY2F0ICJeIiAoaWYgKGZpbGUtZXhpc3RzLXAgKGNvbmNhdCBsaWJ4bWxkb2Mtcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvbGlieG1sLXBhcnNlci5odG1sIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJ4bWwtIgotICAgICAgICAgICAgICAgICAgICAgICAgImdub21lLXhtbC0iKQotICAgICAgICAgICAgICAgICAgIi4qXFwuaHRtbCQiKSB0KSkKLSAgICAgICAgKHN5bWJvbHMgKCkpCi0gICAgICAgIChjYXNlLWZvbGQtc2VhcmNoIHQpCi0gICAgICAgICh1cmkpKQotICAgIChtZXNzYWdlICJjb2xsZWN0aW5nIGxpYnhtbC1zeW1ib2xzLi4uIikKLSAgICAod2hpbGUgKGNhciBmaWxlcykKLSAgICAgIChtZXNzYWdlICJwcm9jZXNzaW5nICVzIiAoY2FyIGZpbGVzKSkKLSAgICAgICh3aXRoLXRlbXAtYnVmZmVyCi0gICAgICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyAoY2FyIGZpbGVzKSkKLSAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAgICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZAotICAgICAgICAgICAgICAgICI8YVtePl0qaHJlZlsgXHRcbl0qPVsgXHRcbl0qXCJcXChbXj0+XSpcXClcIltePl0qPiIgbmlsIHQgbmlsKQotICAgICAgICAgIDs7IGlzIGl0IGEgcmVsYXRpdmUgbGluayAoI1hYWCk/Ci0gICAgICAgICAgKGlmIChjaGFyLWVxdWFsIChlbHQgKG1hdGNoLXN0cmluZyAxKSAwKSA/IykKLSAgICAgICAgICAgICAgKHNldHEgdXJpIChjb25jYXQgImZpbGU6Ly8iIChjYXIgZmlsZXMpIChtYXRjaC1zdHJpbmcgMSkpKQotICAgICAgICAgICAgKHNldHEgdXJpIChjb25jYXQgImZpbGU6Ly8iIChleHBhbmQtZmlsZS1uYW1lIGxpYnhtbGRvYy1yb290KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iIChtYXRjaC1zdHJpbmcgMSkpKSkKLSAgICAgICAgICAoaWYgKG5vdCAocmUtc2VhcmNoLWZvcndhcmQgIlxcKFtePF0qXFwpPCIgbmlsIHQgbmlsKSkKLSAgICAgICAgICAgICAgKGVycm9yICJyZWdleHAgZXJyb3Igd2hpbGUgZ2V0dGluZyBsaWJ4bWwtc3ltYm9scy4uIikpCi0gICAgICAgICAgOzsgdGhpcyBuZWVkcyBhZGQtdG8tbGlzdCBiZWNhdXNlIGkuZS4geG1sQ2hhciBhcHBlYXJzIG9mdGVuCi0gICAgICAgICAgKGlmIChub3QgKHN0cmluZy1lcXVhbCAiIiAobWF0Y2gtc3RyaW5nIDEpKSkKLSAgICAgICAgICAgICAgKGFkZC10by1saXN0ICdzeW1ib2xzIChjb25zIChtYXRjaC1zdHJpbmcgMSkgdXJpKSkpKQotICAgICAgICA7OyAgKHNldHEgc3ltYm9scyAoY29ucyAoY29ucyAobWF0Y2gtc3RyaW5nIDEpIHVyaSkgc3ltYm9scykpKQotICAgICAgICApCi0gICAgICAoc2V0cSBmaWxlcyAoY2RyIGZpbGVzKSkpCi0gICAgc3ltYm9scykpCi0KLShwcm92aWRlICdsaWJ4bWxkb2MpCi0KLTs7OyBsaWJ4bWwtZG9jLmVsIGVuZHMgaGVyZQotDAotOzs7IExvY2FsIFZhcmlhYmxlczoKLTs7OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwKLTs7OyBFbmQ6CmRpZmYgLS1naXQgYS9kb2MvbGlieG1sMi1hcGkueG1sIGIvZG9jL2xpYnhtbDItYXBpLnhtbAppbmRleCA4OWE0NDc2Li4xZGVlMTQyIDEwMDY0NAotLS0gYS9kb2MvbGlieG1sMi1hcGkueG1sCisrKyBiL2RvYy9saWJ4bWwyLWFwaS54bWwKQEAgLTQzLDYgKzQzLDcgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSdVVEY4VG9IdG1sJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J2h0bWxBdHRyQWxsb3dlZCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sQXV0b0Nsb3NlVGFnJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J2h0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0naHRtbEN0eHRSZWFkRG9jJyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtNTksOSArNjAsMTEgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sRW50aXR5VmFsdWVMb29rdXAnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0naHRtbEZyZWVQYXJzZXJDdHh0JyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J2h0bWxIYW5kbGVPbWl0dGVkRWxlbScgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sSW5pdEF1dG9DbG9zZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sSXNBdXRvQ2xvc2VkJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J2h0bWxJc1NjcmlwdEF0dHJpYnV0ZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sTmV3UGFyc2VyQ3R4dCcgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sTmV3U0FYUGFyc2VyQ3R4dCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sTm9kZVN0YXR1cycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sUGFyc2VDaGFyUmVmJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J2h0bWxQYXJzZUNodW5rJyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtMzg4LDkgKzM5MSwxNyBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9DSEFSX0VOQ09ESU5HX1VURjE2QkUnIHR5cGU9J2VudW0nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX0NIQVJfRU5DT0RJTkdfVVRGOCcgdHlwZT0nZW51bScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9FTkNfRVJSX0lOUFVUJyB0eXBlPSdlbnVtJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX0VOQ19FUlJfSU5URVJOQUwnIHR5cGU9J2VudW0nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfRU5DX0VSUl9NRU1PUlknIHR5cGU9J2VudW0nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfRU5DX0VSUl9QQVJUSUFMJyB0eXBlPSdlbnVtJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX0VOQ19FUlJfU1BBQ0UnIHR5cGU9J2VudW0nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfRU5DX0VSUl9TVUNDRVNTJyB0eXBlPSdlbnVtJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ2hhckVuY0Vycm9yJyB0eXBlPSd0eXBlZGVmJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ2hhckVuY29kaW5nJyB0eXBlPSd0eXBlZGVmJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ2hhckVuY29kaW5nSGFuZGxlcicgdHlwZT0ndHlwZWRlZicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHInIHR5cGU9J3R5cGVkZWYnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdfeG1sQnVmZmVyJyB0eXBlPSdzdHJ1Y3QnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdfeG1sQ2hhckVuY29kaW5nSGFuZGxlcicgdHlwZT0nc3RydWN0Jy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nVVRGOFRvaXNvbGF0MScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdpc29sYXQxVG9VVEY4JyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtNDM5LDYgKzQ1MCw3IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRW5jb2RlU3BlY2lhbENoYXJzJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEZyZWVFbnRpdGllc1RhYmxlJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEZyZWVFbnRpdHknIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sR2V0RG9jRW50aXR5JyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdldER0ZEVudGl0eScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxHZXRQYXJhbWV0ZXJFbnRpdHknIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC00NDgsNzMgKzQ2MCwxMyBAQAogICAgIDwvZmlsZT4KICAgICA8ZmlsZSBuYW1lPSdnbG9iYWxzJz4KICAgICAgPHN1bW1hcnk+aW50ZXJmYWNlIGZvciBhbGwgZ2xvYmFsIHZhcmlhYmxlcyBvZiB0aGUgbGlicmFyeTwvc3VtbWFyeT4KLSAgICAgPGRlc2NyaXB0aW9uPmFsbCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgdGhyZWFkIGhhbmRsaW5nIGZvciB0aG9zZSB2YXJpYWJsZXMgaXMgaGFuZGxlZCBieSB0aGlzIG1vZHVsZS4gIFRoZSBib3R0b20gb2YgdGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGJ1aWxkX2dsb2IucHkgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIGZpbGUgZ2xvYmFsLmRhdGEgPC9kZXNjcmlwdGlvbj4KLSAgICAgPGF1dGhvcj5HYXJ5IFBlbm5pbmd0b24gJmx0O0dhcnkuUGVubmluZ3RvbkB1ay5zdW4uY29tJmd0OywgRGFuaWVsIFZlaWxsYXJkIDwvYXV0aG9yPgorICAgICA8ZGVzY3JpcHRpb24+RGVwcmVjYXRlZCwgZG9uJmFwb3M7dCB1c2UgPC9kZXNjcmlwdGlvbj4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxHbG9iYWxTdGF0ZScgdHlwZT0ndHlwZWRlZicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdsb2JhbFN0YXRlUHRyJyB0eXBlPSd0eXBlZGVmJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nX3htbEdsb2JhbFN0YXRlJyB0eXBlPSdzdHJ1Y3QnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sRGVmYXVsdFNBWEhhbmRsZXInIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nb2xkWE1MV0Rjb21wYXRpYmlsaXR5JyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEJ1ZmZlckFsbG9jU2NoZW1lJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlZmF1bHRCdWZmZXJTaXplJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlZmF1bHRTQVhIYW5kbGVyJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlZmF1bHRTQVhMb2NhdG9yJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZScgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxGcmVlJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdlbmVyaWNFcnJvcicgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxHZW5lcmljRXJyb3JDb250ZXh0JyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEluZGVudFRyZWVPdXRwdXQnIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZScgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxMYXN0RXJyb3InIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUnIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZScgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxNYWxsb2MnIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTWFsbG9jQXRvbWljJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE1lbVN0cmR1cCcgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlckRlYnVnRW50aXRpZXMnIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlclZlcnNpb24nIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUnIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUmVhbGxvYycgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUnIHR5cGU9J3ZhcmlhYmxlJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU2F2ZU5vRW1wdHlUYWdzJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFN0cnVjdHVyZWRFcnJvcicgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0JyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZScgdHlwZT0ndmFyaWFibGUnLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUcmVlSW5kZW50U3RyaW5nJyB0eXBlPSd2YXJpYWJsZScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbENsZWFudXBHbG9iYWxzJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sR2V0R2xvYmFsU3RhdGUnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sSW5pdEdsb2JhbHMnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSZWdpc3Rlck5vZGVGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkRlZmF1bHRCdWZmZXJTaXplJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0JyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYycgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZScgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nJyB0eXBlPSdmdW5jdGlvbicvPgogICAgIDwvZmlsZT4KICAgICA8ZmlsZSBuYW1lPSdoYXNoJz4KICAgICAgPHN1bW1hcnk+Q2hhaW5lZCBoYXNoIHRhYmxlczwvc3VtbWFyeT4KQEAgLTY3Miw2ICs2MjQsNyBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9QQVJTRVJfU1RBUlQnIHR5cGU9J2VudW0nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfUEFSU0VSX1NUQVJUX1RBRycgdHlwZT0nZW51bScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9QQVJTRVJfU1lTVEVNX0xJVEVSQUwnIHR5cGU9J2VudW0nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfUEFSU0VSX1hNTF9ERUNMJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1BBUlNFX0JJR19MSU5FUycgdHlwZT0nZW51bScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9QQVJTRV9DT01QQUNUJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1BBUlNFX0RPTScgdHlwZT0nZW51bScvPgpAQCAtNzM1LDYgKzY4OCw3IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1dJVEhfWFBBVEgnIHR5cGU9J2VudW0nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfV0lUSF9YUFRSJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1dJVEhfWkxJQicgdHlwZT0nZW51bScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEF0dHJIYXNoQnVja2V0JyB0eXBlPSd0eXBlZGVmJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRmVhdHVyZScgdHlwZT0ndHlwZWRlZicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlcklucHV0U3RhdGUnIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJNb2RlJyB0eXBlPSd0eXBlZGVmJy8+CkBAIC03NDIsNiArNjk2LDcgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJOb2RlSW5mb1B0cicgdHlwZT0ndHlwZWRlZicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlck5vZGVJbmZvU2VxJyB0eXBlPSd0eXBlZGVmJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VyTm9kZUluZm9TZXFQdHInIHR5cGU9J3R5cGVkZWYnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJOc0RhdGEnIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJPcHRpb24nIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTQVhIYW5kbGVyVjEnIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTQVhIYW5kbGVyVjFQdHInIHR5cGU9J3R5cGVkZWYnLz4KQEAgLTc1Myw2ICs3MDgsNyBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J194bWxTQVhIYW5kbGVyJyB0eXBlPSdzdHJ1Y3QnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdfeG1sU0FYSGFuZGxlclYxJyB0eXBlPSdzdHJ1Y3QnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdfeG1sU0FYTG9jYXRvcicgdHlwZT0nc3RydWN0Jy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VyVmVyc2lvbicgdHlwZT0ndmFyaWFibGUnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdhdHRyaWJ1dGVEZWNsU0FYRnVuYycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdhdHRyaWJ1dGVTQVhGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J2NkYXRhQmxvY2tTQVhGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtNzk3LDYgKzc1Myw3IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ3R4dFJlYWRNZW1vcnknIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ3R4dFJlc2V0JyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEN0eHRSZXNldFB1c2gnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24nIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQ3R4dFVzZU9wdGlvbnMnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRXh0ZXJuYWxFbnRpdHlMb2FkZXInIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRnJlZVBhcnNlckN0eHQnIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC04MTMsNiArNzcwLDcgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxMb2FkRXh0ZXJuYWxFbnRpdHknIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTmV3SU9JbnB1dFN0cmVhbScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxOZXdQYXJzZXJDdHh0JyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE5ld1NBWFBhcnNlckN0eHQnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5JyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXInIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VDaHVuaycgdHlwZT0nZnVuY3Rpb24nLz4KQEAgLTg1NSw2ICs4MTMsMTQgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTZXR1cFBhcnNlckZvckJ1ZmZlcicgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTdG9wUGFyc2VyJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZScgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICA8L2ZpbGU+CiAgICAgPGZpbGUgbmFtZT0ncGFyc2VySW50ZXJuYWxzJz4KICAgICAgPHN1bW1hcnk+aW50ZXJuYWxzIHJvdXRpbmVzIGFuZCBsaW1pdHMgZXhwb3J0ZWQgYnkgdGhlIHBhcnNlci48L3N1bW1hcnk+CkBAIC04ODAsMTAgKzg0Niw4IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0nSVNfTEVUVEVSX0NIJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J0lTX1BVQklEQ0hBUicgdHlwZT0nbWFjcm8nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdJU19QVUJJRENIQVJfQ0gnIHR5cGU9J21hY3JvJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nTU9WRVRPX0VORFRBRycgdHlwZT0nbWFjcm8nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdNT1ZFVE9fU1RBUlRUQUcnIHR5cGU9J21hY3JvJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nU0tJUF9FT0wnIHR5cGU9J21hY3JvJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX01BWF9ESUNUSU9OQVJZX0xJTUlUJyB0eXBlPSdtYWNybycvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9NQVhfSFVHRV9MRU5HVEgnIHR5cGU9J21hY3JvJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX01BWF9MT09LVVBfTElNSVQnIHR5cGU9J21hY3JvJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX01BWF9OQU1FTEVOJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9NQVhfTkFNRV9MRU5HVEgnIHR5cGU9J21hY3JvJy8+CkBAIC04OTYsOCArODYwLDYgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTdHJpbmdDb21tZW50JyB0eXBlPSd2YXJpYWJsZScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFN0cmluZ1RleHQnIHR5cGU9J3ZhcmlhYmxlJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU3RyaW5nVGV4dE5vZW5jJyB0eXBlPSd2YXJpYWJsZScvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J2h0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCcgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdodG1sSW5pdEF1dG9DbG9zZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdpbnB1dFBvcCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdpbnB1dFB1c2gnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nbmFtZVBvcCcgdHlwZT0nZnVuY3Rpb24nLz4KQEAgLTkxNCw3ICs4NzYsNiBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEN1cnJlbnRDaGFyJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERlY29kZUVudGl0aWVzJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEVudGl0eVJlZmVyZW5jZUZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRXJyTWVtb3J5JyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEZyZWVJbnB1dFN0cmVhbScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxIYW5kbGVFbnRpdHknIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sSXNMZXR0ZXInIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC0xMzY0LDExICsxMzI1LDEwIEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTXV0ZXhQdHInIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSTXV0ZXgnIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSTXV0ZXhQdHInIHR5cGU9J3R5cGVkZWYnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxDbGVhbnVwVGhyZWFkcycgdHlwZT0nZnVuY3Rpb24nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxEbGxNYWluJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEZyZWVNdXRleCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxGcmVlUk11dGV4JyB0eXBlPSdmdW5jdGlvbicvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdldEdsb2JhbFN0YXRlJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEdldFRocmVhZElkJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEluaXRUaHJlYWRzJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbElzTWFpblRocmVhZCcgdHlwZT0nZnVuY3Rpb24nLz4KQEAgLTEzODcsNyArMTM0Nyw2IEBACiAgICAgIDxhdXRob3I+RGFuaWVsIFZlaWxsYXJkIDwvYXV0aG9yPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J0JBU0VfQlVGRkVSX1NJWkUnIHR5cGU9J21hY3JvJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nTElCWE1MMl9ORVdfQlVGRkVSJyB0eXBlPSdtYWNybycvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9ET0NCX0RPQ1VNRU5UX05PREUnIHR5cGU9J21hY3JvJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX0dFVF9DT05URU5UJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9HRVRfTElORScgdHlwZT0nbWFjcm8nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfTE9DQUxfTkFNRVNQQUNFJyB0eXBlPSdtYWNybycvPgpAQCAtMTU3Myw2ICsxNTMyLDggQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxET01XcmFwTmV3Q3R4dCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxET01XcmFwUmVjb25jaWxlTmFtZXNwYWNlcycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxET01XcmFwUmVtb3ZlTm9kZScgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRGVyZWdpc3Rlck5vZGVGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERvY0NvcHlOb2RlJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbERvY0NvcHlOb2RlTGlzdCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxEb2NEdW1wJyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtMTY1Nyw2ICsxNjE4LDggQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxOb2RlU2V0U3BhY2VQcmVzZXJ2ZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQcmV2aW91c0VsZW1lbnRTaWJsaW5nJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFJlY29uY2lsaWF0ZU5zJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFJlZ2lzdGVyTm9kZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUmVnaXN0ZXJOb2RlRnVuYycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSZW1vdmVQcm9wJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFJlcGxhY2VOb2RlJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFNhdmVGaWxlJyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtMTY4MSw2ICsxNjQ0LDEwIEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU3RyaW5nTGVuR2V0Tm9kZUxpc3QnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGV4dENvbmNhdCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUZXh0TWVyZ2UnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0JyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVW5saW5rTm9kZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxVbnNldE5zUHJvcCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxVbnNldFByb3AnIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC0xNzE2LDggKzE2ODMsNiBAQAogICAgICA8c3VtbWFyeT5UaGUgRFREIHZhbGlkYXRpb248L3N1bW1hcnk+CiAgICAgIDxkZXNjcmlwdGlvbj5BUEkgZm9yIHRoZSBEVEQgaGFuZGxpbmcgYW5kIHRoZSB2YWxpZGl0eSBjaGVja2luZyA8L2Rlc2NyaXB0aW9uPgogICAgICA8YXV0aG9yPkRhbmllbCBWZWlsbGFyZCA8L2F1dGhvcj4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfVkNUWFRfRFREX1ZBTElEQVRFRCcgdHlwZT0nbWFjcm8nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfVkNUWFRfVVNFX1BDVFhUJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbEF0dHJpYnV0ZVRhYmxlJyB0eXBlPSd0eXBlZGVmJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sQXR0cmlidXRlVGFibGVQdHInIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxFbGVtZW50VGFibGUnIHR5cGU9J3R5cGVkZWYnLz4KQEAgLTE5MDQsNiArMTg2OSw4IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmQnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZScgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE91dHB1dEJ1ZmZlckNyZWF0ZUlPJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE91dHB1dEJ1ZmZlckZsdXNoJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE91dHB1dEJ1ZmZlckdldENvbnRlbnQnIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC0xOTE5LDYgKzE4ODYsOCBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmQnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVJTycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYycgdHlwZT0nZnVuY3Rpb24nLz4KQEAgLTE5MzIsNiArMTkwMSw4IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sUmVnaXN0ZXJIVFRQUG9zdENhbGxiYWNrcycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCcgdHlwZT0nZnVuY3Rpb24nLz4KICAgICA8L2ZpbGU+CiAgICAgPGZpbGUgbmFtZT0neG1sYXV0b21hdGEnPgogICAgICA8c3VtbWFyeT5BUEkgdG8gYnVpbGQgcmVnZXhwIGF1dG9tYXRhPC9zdW1tYXJ5PgpAQCAtMjY4Myw2ICsyNjU0LDcgQEAKICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfVFJFRV9OT1RfVVRGOCcgdHlwZT0nZW51bScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTF9UUkVFX1VOVEVSTUlOQVRFRF9FTlRJVFknIHR5cGU9J2VudW0nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfV0FSX0NBVEFMT0dfUEknIHR5cGU9J2VudW0nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfV0FSX0VOQ09ESU5HX01JU01BVENIJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1dBUl9FTlRJVFlfUkVERUZJTkVEJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1dBUl9MQU5HX1ZBTFVFJyB0eXBlPSdlbnVtJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MX1dBUl9OU19DT0xVTU4nIHR5cGU9J2VudW0nLz4KQEAgLTI3NDIsNiArMjcxNCw3IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRXJyb3JQdHInIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxQYXJzZXJFcnJvcnMnIHR5cGU9J3R5cGVkZWYnLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdfeG1sRXJyb3InIHR5cGU9J3N0cnVjdCcvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J194bWxQYXJzZXJJbnB1dCcgdHlwZT0nc3RydWN0Jy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0naW5pdEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbENvcHlFcnJvcicgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxDdHh0R2V0TGFzdEVycm9yJyB0eXBlPSdmdW5jdGlvbicvPgpAQCAtMjc1OSwyNiArMjczMiwyNCBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFNldEdlbmVyaWNFcnJvckZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jJyB0eXBlPSdmdW5jdGlvbicvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICA8L2ZpbGU+CiAgICAgPGZpbGUgbmFtZT0neG1sZXhwb3J0cyc+CiAgICAgIDxzdW1tYXJ5Pm1hY3JvcyBmb3IgbWFya2luZyBzeW1ib2xzIGFzIGV4cG9ydGFibGUvaW1wb3J0YWJsZS48L3N1bW1hcnk+CiAgICAgIDxkZXNjcmlwdGlvbj5tYWNyb3MgZm9yIG1hcmtpbmcgc3ltYm9scyBhcyBleHBvcnRhYmxlL2ltcG9ydGFibGUuIDwvZGVzY3JpcHRpb24+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nTElCWE1MX0RMTF9JTVBPUlQnIHR5cGU9J21hY3JvJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MQ0FMTCcgdHlwZT0nbWFjcm8nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxDREVDTCcgdHlwZT0nbWFjcm8nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxQVUJGVU4nIHR5cGU9J21hY3JvJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nWE1MUFVCTElDJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1hNTFBVQlZBUicgdHlwZT0nbWFjcm8nLz4KICAgICA8L2ZpbGU+CiAgICAgPGZpbGUgbmFtZT0neG1sbWVtb3J5Jz4KICAgICAgPHN1bW1hcnk+aW50ZXJmYWNlIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRvcjwvc3VtbWFyeT4KICAgICAgPGRlc2NyaXB0aW9uPnByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdG9yLCBpbmNsdWRpbmcgZGVidWdnaW5nIGNhcGFiaWxpdGllcy4gPC9kZXNjcmlwdGlvbj4KICAgICAgPGF1dGhvcj5EYW5pZWwgVmVpbGxhcmQgPC9hdXRob3I+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0nREVCVUdfTUVNT1JZJyB0eXBlPSdtYWNybycvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE1hbGxvYycgdHlwZT0nbWFjcm8nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxNYWxsb2NBdG9taWMnIHR5cGU9J21hY3JvJy8+Ci0gICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTWVtU3RyZHVwJyB0eXBlPSdtYWNybycvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFJlYWxsb2MnIHR5cGU9J21hY3JvJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRnJlZScgdHlwZT0ndmFyaWFibGUnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxNYWxsb2MnIHR5cGU9J3ZhcmlhYmxlJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTWFsbG9jQXRvbWljJyB0eXBlPSd2YXJpYWJsZScvPgorICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE1lbVN0cmR1cCcgdHlwZT0ndmFyaWFibGUnLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxSZWFsbG9jJyB0eXBlPSd2YXJpYWJsZScvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbENsZWFudXBNZW1vcnknIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sRnJlZUZ1bmMnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sR2NNZW1HZXQnIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC0yNzk2LDYgKzI3NjcsNyBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE1lbVJlYWxsb2MnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTWVtU2V0dXAnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sTWVtU2hvdycgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxNZW1TaXplJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE1lbVN0cmR1cExvYycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxNZW1Vc2VkJyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbE1lbW9yeUR1bXAnIHR5cGU9J2Z1bmN0aW9uJy8+CkBAIC0yOTQxLDYgKzI5MTMsNyBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRleHRSZWFkZXJTY2hlbWFWYWxpZGF0ZScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGVDdHh0JyB0eXBlPSdmdW5jdGlvbicvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J3htbFRleHRSZWFkZXJTZXRFcnJvckhhbmRsZXInIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGV4dFJlYWRlclNldE1heEFtcGxpZmljYXRpb24nIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGV4dFJlYWRlclNldFBhcnNlclByb3AnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGV4dFJlYWRlclNldFNjaGVtYScgdHlwZT0nZnVuY3Rpb24nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUZXh0UmVhZGVyU2V0U3RydWN0dXJlZEVycm9ySGFuZGxlcicgdHlwZT0nZnVuY3Rpb24nLz4KQEAgLTMwMjcsNiArMzAwMCw5IEBACiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU2F2ZVRvRmlsZW5hbWUnIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU2F2ZVRvSU8nIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sU2F2ZVRyZWUnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCcgdHlwZT0nZnVuY3Rpb24nLz4KKyAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MnIHR5cGU9J2Z1bmN0aW9uJy8+CisgICAgIDxleHBvcnRzIHN5bWJvbD0neG1sVGhyRGVmVHJlZUluZGVudFN0cmluZycgdHlwZT0nZnVuY3Rpb24nLz4KICAgICA8L2ZpbGU+CiAgICAgPGZpbGUgbmFtZT0neG1sc2NoZW1hcyc+CiAgICAgIDxzdW1tYXJ5PmluY29tcGxldGUgWE1MIFNjaGVtYXMgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uPC9zdW1tYXJ5PgpAQCAtMzM1NiwxMCArMzMzMiw3IEBACiAgICAgIDxzdW1tYXJ5PmNvbXBpbGUtdGltZSB2ZXJzaW9uIGluZm9ybWF0aW9uPC9zdW1tYXJ5PgogICAgICA8ZGVzY3JpcHRpb24+Y29tcGlsZS10aW1lIHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBYTUwgbGlicmFyeSA8L2Rlc2NyaXB0aW9uPgogICAgICA8YXV0aG9yPkRhbmllbCBWZWlsbGFyZCA8L2F1dGhvcj4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdBVFRSSUJVVEVfVU5VU0VEJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J0RFQlVHX01FTU9SWV9MT0NBVElPTicgdHlwZT0nbWFjcm8nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdMSUJYTUxfQVRUUl9BTExPQ19TSVpFJyB0eXBlPSdtYWNybycvPgotICAgICA8ZXhwb3J0cyBzeW1ib2w9J0xJQlhNTF9BVFRSX0ZPUk1BVCcgdHlwZT0nbWFjcm8nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdMSUJYTUxfQVVUT01BVEFfRU5BQkxFRCcgdHlwZT0nbWFjcm8nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSdMSUJYTUxfQzE0Tl9FTkFCTEVEJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J0xJQlhNTF9DQVRBTE9HX0VOQUJMRUQnIHR5cGU9J21hY3JvJy8+CkBAIC0zNDAyLDcgKzMzNzUsNiBAQAogICAgICA8ZXhwb3J0cyBzeW1ib2w9J0xJQlhNTF9aTElCX0VOQUJMRUQnIHR5cGU9J21hY3JvJy8+CiAgICAgIDxleHBvcnRzIHN5bWJvbD0nV0lUSE9VVF9UUklPJyB0eXBlPSdtYWNybycvPgogICAgICA8ZXhwb3J0cyBzeW1ib2w9J1dJVEhfVFJJTycgdHlwZT0nbWFjcm8nLz4KLSAgICAgPGV4cG9ydHMgc3ltYm9sPSdYTUxfREVQUkVDQVRFRCcgdHlwZT0nbWFjcm8nLz4KICAgICAgPGV4cG9ydHMgc3ltYm9sPSd4bWxDaGVja1ZlcnNpb24nIHR5cGU9J2Z1bmN0aW9uJy8+CiAgICAgPC9maWxlPgogICAgIDxmaWxlIG5hbWU9J3htbHdyaXRlcic+CkBAIC0zODAwLDkgKzM3NzIsNiBAQAogICAgIDwvZmlsZT4KICAgPC9maWxlcz4KICAgPHN5bWJvbHM+Ci0gICAgPG1hY3JvIG5hbWU9J0FUVFJJQlVURV9VTlVTRUQnIGZpbGU9J3htbHZlcnNpb24nPgotICAgICAgPGluZm8+TWFjcm8gdXNlZCB0byBzaWduYWwgdG8gR0NDIHVudXNlZCBmdW5jdGlvbiBwYXJhbWV0ZXJzPC9pbmZvPgotICAgIDwvbWFjcm8+CiAgICAgPG1hY3JvIG5hbWU9J0JBRF9DQVNUJyBmaWxlPSd4bWxzdHJpbmcnPgogICAgICAgPGluZm8+TWFjcm8gdG8gY2FzdCBhIHN0cmluZyB0byBhbiB4bWxDaGFyICogd2hlbiBvbmUga25vdyBpdHMgc2FmZS48L2luZm8+CiAgICAgPC9tYWNybz4KQEAgLTM4MzYsOSArMzgwNSw2IEBACiAgICAgICA8aW5mbz5NYWNybyB0byBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvbiB0b3Agb2YgdGhlIFhQYXRoIHN0YWNrIGlzIG9mIGEgZ2l2ZW4gdHlwZS4gUmV0dXJuKDApIGluIGNhc2Ugb2YgZmFpbHVyZTwvaW5mbz4KICAgICAgIDxhcmcgbmFtZT0ndHlwZXZhbCcgaW5mbz0ndGhlIFhQYXRoIHR5cGUnLz4KICAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdERUJVR19NRU1PUlknIGZpbGU9J3htbG1lbW9yeSc+Ci0gICAgICA8aW5mbz5ERUJVR19NRU1PUlkgcmVwbGFjZXMgdGhlIGFsbG9jYXRvciB3aXRoIGEgY29sbGVjdCBhbmQgZGVidWcgc2hlbGwgdG8gdGhlIGxpYmMgYWxsb2NhdG9yLiBERUJVR19NRU1PUlkgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIHdoZW4gZGVidWdnaW5nIGxpYnhtbCBpLmUuIGlmIGxpYnhtbCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggLS13aXRoLWRlYnVnLW1lbSB0b28uICNkZWZpbmUgREVCVUdfTUVNT1JZX0ZSRUVEICNkZWZpbmUgREVCVUdfTUVNT1JZX0xPQ0FUSU9OPC9pbmZvPgotICAgIDwvbWFjcm8+CiAgICAgPG1hY3JvIG5hbWU9J0RFQlVHX01FTU9SWV9MT0NBVElPTicgZmlsZT0neG1sdmVyc2lvbic+CiAgICAgICA8aW5mbz5XaGV0aGVyIHRoZSBtZW1vcnkgZGVidWdnaW5nIGlzIGNvbmZpZ3VyZWQgaW48L2luZm8+CiAgICAgPC9tYWNybz4KQEAgLTM5NDIsMTIgKzM5MDgsNiBAQAogICAgIDxtYWNybyBuYW1lPSdMSUJYTUwyX05FV19CVUZGRVInIGZpbGU9J3RyZWUnPgogICAgICAgPGluZm8+TWFjcm8gdXNlZCB0byBleHByZXNzIHRoYXQgdGhlIEFQSSB1c2UgdGhlIG5ldyBidWZmZXJzIGZvciB4bWxQYXJzZXJJbnB1dEJ1ZmZlciBhbmQgeG1sT3V0cHV0QnVmZmVyLiBUaGUgY2hhbmdlIHdhcyBpbnRyb2R1Y2VkIGluIDIuOS4wLjwvaW5mbz4KICAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdMSUJYTUxfQVRUUl9BTExPQ19TSVpFJyBmaWxlPSd4bWx2ZXJzaW9uJz4KLSAgICAgIDxpbmZvPk1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoaXMgaXMgYW4gYWxsb2NhdG9yIGZ1bmN0aW9uPC9pbmZvPgotICAgIDwvbWFjcm8+Ci0gICAgPG1hY3JvIG5hbWU9J0xJQlhNTF9BVFRSX0ZPUk1BVCcgZmlsZT0neG1sdmVyc2lvbic+Ci0gICAgICA8aW5mbz5NYWNybyB1c2VkIHRvIGluZGljYXRlIHRvIEdDQyB0aGUgcGFyYW1ldGVyIGFyZSBwcmludGYgbGlrZTwvaW5mbz4KLSAgICA8L21hY3JvPgogICAgIDxtYWNybyBuYW1lPSdMSUJYTUxfQVVUT01BVEFfRU5BQkxFRCcgZmlsZT0neG1sdmVyc2lvbic+CiAgICAgICA8aW5mbz5XaGV0aGVyIHRoZSBhdXRvbWF0YSBpbnRlcmZhY2VzIGFyZSBjb21waWxlZCBpbjwvaW5mbz4KICAgICA8L21hY3JvPgpAQCAtMzk2MSw5ICszOTIxLDcgQEAKICAgICAgIDxpbmZvPldoZXRoZXIgRGVidWdnaW5nIG1vZHVsZSBpcyBjb25maWd1cmVkIGluPC9pbmZvPgogICAgIDwvbWFjcm8+CiAgICAgPG1hY3JvIG5hbWU9J0xJQlhNTF9ERUJVR19SVU5USU1FJyBmaWxlPSd4bWx2ZXJzaW9uJz4KLSAgICAgIDxpbmZvPldoZXRoZXIgdGhlIHJ1bnRpbWUgZGVidWdnaW5nIGlzIGNvbmZpZ3VyZWQgaW48L2luZm8+Ci0gICAgPC9tYWNybz4KLSAgICA8bWFjcm8gbmFtZT0nTElCWE1MX0RMTF9JTVBPUlQnIGZpbGU9J3htbGV4cG9ydHMnPgorICAgICAgPGluZm8+UmVtb3ZlZDwvaW5mbz4KICAgICA8L21hY3JvPgogICAgIDxtYWNybyBuYW1lPSdMSUJYTUxfRE9UVEVEX1ZFUlNJT04nIGZpbGU9J3htbHZlcnNpb24nPgogICAgICAgPGluZm8+dGhlIHZlcnNpb24gc3RyaW5nIGxpa2UgJnF1b3Q7MS4yLjMmcXVvdDs8L2luZm8+CkBAIC00MDcwLDE4ICs0MDI4LDYgQEAKICAgICA8bWFjcm8gbmFtZT0nTElCWE1MX1pMSUJfRU5BQkxFRCcgZmlsZT0neG1sdmVyc2lvbic+CiAgICAgICA8aW5mbz5XaGV0aGVyIHRoZSBabGliIHN1cHBvcnQgaXMgY29tcGlsZWQgaW48L2luZm8+CiAgICAgPC9tYWNybz4KLSAgICA8bWFjcm8gbmFtZT0nTU9WRVRPX0VORFRBRycgZmlsZT0ncGFyc2VySW50ZXJuYWxzJz4KLSAgICAgIDxpbmZvPlNraXBzIHRvIHRoZSBuZXh0ICZhcG9zOyZndDsmYXBvczsgY2hhci48L2luZm8+Ci0gICAgICA8YXJnIG5hbWU9J3AnIGluZm89J2FuZCBVVEY4IHN0cmluZyBwb2ludGVyJy8+Ci0gICAgPC9tYWNybz4KLSAgICA8bWFjcm8gbmFtZT0nTU9WRVRPX1NUQVJUVEFHJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+U2tpcHMgdG8gdGhlIG5leHQgJmFwb3M7Jmx0OyZhcG9zOyBjaGFyLjwvaW5mbz4KLSAgICAgIDxhcmcgbmFtZT0ncCcgaW5mbz0nYW5kIFVURjggc3RyaW5nIHBvaW50ZXInLz4KLSAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdTS0lQX0VPTCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJz4KLSAgICAgIDxpbmZvPlNraXBzIHRoZSBlbmQgb2YgbGluZSBjaGFycy48L2luZm8+Ci0gICAgICA8YXJnIG5hbWU9J3AnIGluZm89J2FuZCBVVEY4IHN0cmluZyBwb2ludGVyJy8+Ci0gICAgPC9tYWNybz4KICAgICA8bWFjcm8gbmFtZT0nU09DS0VUJyBmaWxlPSduYW5vZnRwJz4KICAgICAgIDxpbmZvPm1hY3JvIHVzZWQgdG8gcHJvdmlkZSBwb3J0YWJpbGl0eSBvZiBjb2RlIHRvIHdpbmRvd3Mgc29ja2V0czwvaW5mbz4KICAgICA8L21hY3JvPgpAQCAtNDEyMSwxOCArNDA2Nyw5IEBACiAgICAgPG1hY3JvIG5hbWU9J1hJTkNMVURFX1BBUlNFX1hQT0lOVEVSJyBmaWxlPSd4aW5jbHVkZSc+CiAgICAgICA8aW5mbz5NYWNybyBkZWZpbmluZyAmcXVvdDt4cG9pbnRlciZxdW90OzwvaW5mbz4KICAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdYTUxDQUxMJyBmaWxlPSd4bWxleHBvcnRzJz4KLSAgICAgIDxpbmZvPk1hY3JvIHdoaWNoIGRlY2xhcmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGV4cG9ydGVkIGZ1bmN0aW9uczwvaW5mbz4KLSAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdYTUxDREVDTCcgZmlsZT0neG1sZXhwb3J0cyc+Ci0gICAgICA8aW5mbz5NYWNybyB3aGljaCBkZWNsYXJlcyB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCB1c2UgJmFwb3M7Li4uJmFwb3M7LjwvaW5mbz4KLSAgICA8L21hY3JvPgogICAgIDxtYWNybyBuYW1lPSdYTUxQVUJGVU4nIGZpbGU9J3htbGV4cG9ydHMnPgogICAgICAgPGluZm8+TWFjcm8gd2hpY2ggZGVjbGFyZXMgYW4gZXhwb3J0YWJsZSBmdW5jdGlvbjwvaW5mbz4KICAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdYTUxQVUJMSUMnIGZpbGU9J3htbGV4cG9ydHMnPgotICAgICAgPGluZm8+TWFjcm8gd2hpY2ggZGVjbGFyZXMgYSBwdWJsaWMgc3ltYm9sPC9pbmZvPgotICAgIDwvbWFjcm8+CiAgICAgPG1hY3JvIG5hbWU9J1hNTFBVQlZBUicgZmlsZT0neG1sZXhwb3J0cyc+CiAgICAgICA8aW5mbz5NYWNybyB3aGljaCBkZWNsYXJlcyBhbiBleHBvcnRhYmxlIHZhcmlhYmxlPC9pbmZvPgogICAgIDwvbWFjcm8+CkBAIC00MTUyLDE0ICs0MDg5LDkgQEAKICAgICA8bWFjcm8gbmFtZT0nWE1MX0RFRkFVTFRfVkVSU0lPTicgZmlsZT0ncGFyc2VyJz4KICAgICAgIDxpbmZvPlRoZSBkZWZhdWx0IHZlcnNpb24gb2YgWE1MIHVzZWQ6IDEuMDwvaW5mbz4KICAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdYTUxfREVQUkVDQVRFRCcgZmlsZT0neG1sdmVyc2lvbic+Ci0gICAgICA8aW5mbz5NYWNybyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBmdW5jdGlvbiwgdmFyaWFibGUsIHR5cGUgb3Igc3RydWN0IG1lbWJlciBpcyBkZXByZWNhdGVkLjwvaW5mbz4KLSAgICA8L21hY3JvPgogICAgIDxtYWNybyBuYW1lPSdYTUxfREVURUNUX0lEUycgZmlsZT0ncGFyc2VyJz4KICAgICAgIDxpbmZvPkJpdCBpbiB0aGUgbG9hZHN1YnNldCBjb250ZXh0IGZpZWxkIHRvIHRlbGwgdG8gZG8gSUQvUkVGcyBsb29rdXBzLiBVc2UgaXQgdG8gaW5pdGlhbGl6ZSB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlLjwvaW5mbz4KICAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdYTUxfRE9DQl9ET0NVTUVOVF9OT0RFJyBmaWxlPSd0cmVlJz4KLSAgICA8L21hY3JvPgogICAgIDxtYWNybyBuYW1lPSdYTUxfR0VUX0NPTlRFTlQnIGZpbGU9J3RyZWUnPgogICAgICAgPGluZm8+TWFjcm8gdG8gZXh0cmFjdCB0aGUgY29udGVudCBwb2ludGVyIG9mIGEgbm9kZS48L2luZm8+CiAgICAgPC9tYWNybz4KQEAgLTQxNzIsNiArNDEwNCw5IEBACiAgICAgPG1hY3JvIG5hbWU9J1hNTF9NQVhfRElDVElPTkFSWV9MSU1JVCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJz4KICAgICAgIDxpbmZvPk1heGltdW0gc2l6ZSBhbGxvd2VkIGJ5IHRoZSBwYXJzZXIgZm9yIGEgZGljdGlvbmFyeSBieSBkZWZhdWx0IFRoaXMgaXMgbm90IGEgbGltaXRhdGlvbiBvZiB0aGUgcGFyc2VyIGJ1dCBhIHNhZmV0eSBib3VuZGFyeSBmZWF0dXJlLCB1c2UgWE1MX1BBUlNFX0hVR0Ugb3B0aW9uIHRvIG92ZXJyaWRlIGl0LiBJbnRyb2R1Y2VkIGluIDIuOS4wPC9pbmZvPgogICAgIDwvbWFjcm8+CisgICAgPG1hY3JvIG5hbWU9J1hNTF9NQVhfSFVHRV9MRU5HVEgnIGZpbGU9J3BhcnNlckludGVybmFscyc+CisgICAgICA8aW5mbz5NYXhpbXVtIHNpemUgYWxsb3dlZCB3aGVuIFhNTF9QQVJTRV9IVUdFIGlzIHNldC48L2luZm8+CisgICAgPC9tYWNybz4KICAgICA8bWFjcm8gbmFtZT0nWE1MX01BWF9MT09LVVBfTElNSVQnIGZpbGU9J3BhcnNlckludGVybmFscyc+CiAgICAgICA8aW5mbz5NYXhpbXVtIHNpemUgYWxsb3dlZCBieSB0aGUgcGFyc2VyIGZvciBhaGVhZCBsb29rdXAgVGhpcyBpcyBhbiB1cHBlciBib3VuZGFyeSBlbmZvcmNlZCBieSB0aGUgcGFyc2VyIHRvIGF2b2lkIGJhZCBiZWhhdmlvdXIgb24gJnF1b3Q7dW5mcmllbmRseSZhcG9zOyBjb250ZW50IEludHJvZHVjZWQgaW4gMi45LjA8L2luZm8+CiAgICAgPC9tYWNybz4KQEAgLTQ0NDgsMTIgKzQzODMsNiBAQAogICAgIDxtYWNybyBuYW1lPSdYTUxfU1VCU1RJVFVURV9SRUYnIGZpbGU9J3BhcnNlckludGVybmFscyc+CiAgICAgICA8aW5mbz5XaGV0aGVyIGdlbmVyYWwgZW50aXRpZXMgbmVlZCB0byBiZSBzdWJzdGl0dXRlZC48L2luZm8+CiAgICAgPC9tYWNybz4KLSAgICA8bWFjcm8gbmFtZT0nWE1MX1ZDVFhUX0RURF9WQUxJREFURUQnIGZpbGU9J3ZhbGlkJz4KLSAgICAgIDxpbmZvPlNldCBhZnRlciB4bWxWYWxpZGF0ZUR0ZEZpbmFsIHdhcyBjYWxsZWQuPC9pbmZvPgotICAgIDwvbWFjcm8+Ci0gICAgPG1hY3JvIG5hbWU9J1hNTF9WQ1RYVF9VU0VfUENUWFQnIGZpbGU9J3ZhbGlkJz4KLSAgICAgIDxpbmZvPlNldCBpZiB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGlzIHBhcnQgb2YgYSBwYXJzZXIgY29udGV4dC48L2luZm8+Ci0gICAgPC9tYWNybz4KICAgICA8bWFjcm8gbmFtZT0nWE1MX1hNTF9JRCcgZmlsZT0ndHJlZSc+CiAgICAgICA8aW5mbz5UaGlzIGlzIHRoZSBuYW1lIGZvciB0aGUgc3BlY2lhbCB4bWw6aWQgYXR0cmlidXRlPC9pbmZvPgogICAgIDwvbWFjcm8+CkBAIC00NDY2LDEyICs0Mzk1LDYgQEAKICAgICA8bWFjcm8gbmFtZT0nWE1MX1hQQVRIX05PVkFSJyBmaWxlPSd4cGF0aCc+CiAgICAgICA8aW5mbz5mb3JiaWQgdmFyaWFibGVzIGluIGV4cHJlc3Npb248L2luZm8+CiAgICAgPC9tYWNybz4KLSAgICA8bWFjcm8gbmFtZT0nWFBBVEhfTE9DQVRJT05TRVQnIGZpbGU9J3hwYXRoJz4KLSAgICA8L21hY3JvPgotICAgIDxtYWNybyBuYW1lPSdYUEFUSF9QT0lOVCcgZmlsZT0neHBhdGgnPgotICAgIDwvbWFjcm8+Ci0gICAgPG1hY3JvIG5hbWU9J1hQQVRIX1JBTkdFJyBmaWxlPSd4cGF0aCc+Ci0gICAgPC9tYWNybz4KICAgICA8bWFjcm8gbmFtZT0nWFBfRVJST1InIGZpbGU9J3hwYXRoSW50ZXJuYWxzJz4KICAgICAgIDxpbmZvPk1hY3JvIHRvIHJhaXNlIGFuIFhQYXRoIGVycm9yIGFuZCByZXR1cm4uPC9pbmZvPgogICAgICAgPGFyZyBuYW1lPSdYJyBpbmZvPSd0aGUgZXJyb3IgY29kZScvPgpAQCAtNDcwMiw3ICs0NjI1LDcgQEAKICAgICA8ZW51bSBuYW1lPSdYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUJyBmaWxlPSd0cmVlJyB2YWx1ZT0nMScgdHlwZT0neG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZScgaW5mbz0nZG91YmxlIGVhY2ggdGltZSBvbmUgbmVlZCB0byBncm93Jy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX0JVRkZFUl9BTExPQ19FWEFDVCcgZmlsZT0ndHJlZScgdmFsdWU9JzInIHR5cGU9J3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUnIGluZm89J2dyb3cgb25seSB0byB0aGUgbWluaW1hbCBzaXplJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX0JVRkZFUl9BTExPQ19IWUJSSUQnIGZpbGU9J3RyZWUnIHZhbHVlPSc1JyB0eXBlPSd4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lJyBpbmZvPSdleGFjdCB1cCB0byBhIHRocmVzaG9sZCwgYW5kIGRvdWJsZWl0IHRoZXJlYWZ0ZXInLz4KLSAgICA8ZW51bSBuYW1lPSdYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRScgZmlsZT0ndHJlZScgdmFsdWU9JzMnIHR5cGU9J3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUnIGluZm89J2ltbXV0YWJsZSBidWZmZXInLz4KKyAgICA8ZW51bSBuYW1lPSdYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRScgZmlsZT0ndHJlZScgdmFsdWU9JzMnIHR5cGU9J3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUnIGluZm89J2ltbXV0YWJsZSBidWZmZXIsIGRlcHJlY2F0ZWQnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfQlVGRkVSX0FMTE9DX0lPJyBmaWxlPSd0cmVlJyB2YWx1ZT0nNCcgdHlwZT0neG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZScgaW5mbz0nc3BlY2lhbCBhbGxvY2F0aW9uIHNjaGVtZSB1c2VkIGZvciBJL08nLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfQlVGX09WRVJGTE9XJyBmaWxlPSd4bWxlcnJvcicgdmFsdWU9JzcwMDAnIHR5cGU9J3htbFBhcnNlckVycm9ycycvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9DMTROXzFfMCcgZmlsZT0nYzE0bicgdmFsdWU9JzAnIHR5cGU9J3htbEMxNE5Nb2RlJyBpbmZvPSdPcmlnaW5hbCBDMTROIDEuMCBzcGVjJy8+CkBAIC00ODYwLDYgKzQ3ODMsMTIgQEAKICAgICA8ZW51bSBuYW1lPSdYTUxfRUxFTUVOVF9UWVBFX0VNUFRZJyBmaWxlPSd0cmVlJyB2YWx1ZT0nMScgdHlwZT0neG1sRWxlbWVudFR5cGVWYWwnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfRUxFTUVOVF9UWVBFX01JWEVEJyBmaWxlPSd0cmVlJyB2YWx1ZT0nMycgdHlwZT0neG1sRWxlbWVudFR5cGVWYWwnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfRUxFTUVOVF9UWVBFX1VOREVGSU5FRCcgZmlsZT0ndHJlZScgdmFsdWU9JzAnIHR5cGU9J3htbEVsZW1lbnRUeXBlVmFsJy8+CisgICAgPGVudW0gbmFtZT0nWE1MX0VOQ19FUlJfSU5QVVQnIGZpbGU9J2VuY29kaW5nJyB2YWx1ZT0nLTInIHR5cGU9J3htbENoYXJFbmNFcnJvcicvPgorICAgIDxlbnVtIG5hbWU9J1hNTF9FTkNfRVJSX0lOVEVSTkFMJyBmaWxlPSdlbmNvZGluZycgdmFsdWU9Jy00JyB0eXBlPSd4bWxDaGFyRW5jRXJyb3InLz4KKyAgICA8ZW51bSBuYW1lPSdYTUxfRU5DX0VSUl9NRU1PUlknIGZpbGU9J2VuY29kaW5nJyB2YWx1ZT0nLTUnIHR5cGU9J3htbENoYXJFbmNFcnJvcicvPgorICAgIDxlbnVtIG5hbWU9J1hNTF9FTkNfRVJSX1BBUlRJQUwnIGZpbGU9J2VuY29kaW5nJyB2YWx1ZT0nLTMnIHR5cGU9J3htbENoYXJFbmNFcnJvcicvPgorICAgIDxlbnVtIG5hbWU9J1hNTF9FTkNfRVJSX1NQQUNFJyBmaWxlPSdlbmNvZGluZycgdmFsdWU9Jy0xJyB0eXBlPSd4bWxDaGFyRW5jRXJyb3InLz4KKyAgICA8ZW51bSBuYW1lPSdYTUxfRU5DX0VSUl9TVUNDRVNTJyBmaWxlPSdlbmNvZGluZycgdmFsdWU9JzAnIHR5cGU9J3htbENoYXJFbmNFcnJvcicvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9FTlRJVFlfREVDTCcgZmlsZT0ndHJlZScgdmFsdWU9JzE3JyB0eXBlPSd4bWxFbGVtZW50VHlwZScvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9FTlRJVFlfTk9ERScgZmlsZT0ndHJlZScgdmFsdWU9JzYnIHR5cGU9J3htbEVsZW1lbnRUeXBlJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX0VOVElUWV9SRUZfTk9ERScgZmlsZT0ndHJlZScgdmFsdWU9JzUnIHR5cGU9J3htbEVsZW1lbnRUeXBlJy8+CkBAIC01MTE1LDcgKzUwNDQsNyBAQAogICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRVJfTUlTQycgZmlsZT0ncGFyc2VyJyB2YWx1ZT0nMScgdHlwZT0neG1sUGFyc2VySW5wdXRTdGF0ZScgaW5mbz0nTWlzYyogYmVmb3JlIGludCBzdWJzZXQnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfUEFSU0VSX1BJJyBmaWxlPSdwYXJzZXInIHZhbHVlPScyJyB0eXBlPSd4bWxQYXJzZXJJbnB1dFN0YXRlJyBpbmZvPSdXaXRoaW4gYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX1BBUlNFUl9QUk9MT0cnIGZpbGU9J3BhcnNlcicgdmFsdWU9JzQnIHR5cGU9J3htbFBhcnNlcklucHV0U3RhdGUnIGluZm89J01pc2MqIGFmdGVyIGludGVybmFsIHN1YnNldCcvPgotICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUwnIGZpbGU9J3BhcnNlcicgdmFsdWU9JzE2JyB0eXBlPSd4bWxQYXJzZXJJbnB1dFN0YXRlJyBpbmZvPScgd2l0aGluIGEgUFVCTElDIHZhbHVlJy8+CisgICAgPGVudW0gbmFtZT0nWE1MX1BBUlNFUl9QVUJMSUNfTElURVJBTCcgZmlsZT0ncGFyc2VyJyB2YWx1ZT0nMTYnIHR5cGU9J3htbFBhcnNlcklucHV0U3RhdGUnIGluZm89J3dpdGhpbiBhIFBVQkxJQyB2YWx1ZScvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRVJfU0VWRVJJVFlfRVJST1InIGZpbGU9J3htbHJlYWRlcicgdmFsdWU9JzQnIHR5cGU9J3htbFBhcnNlclNldmVyaXRpZXMnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfUEFSU0VSX1NFVkVSSVRZX1ZBTElESVRZX0VSUk9SJyBmaWxlPSd4bWxyZWFkZXInIHZhbHVlPScyJyB0eXBlPSd4bWxQYXJzZXJTZXZlcml0aWVzJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX1BBUlNFUl9TRVZFUklUWV9WQUxJRElUWV9XQVJOSU5HJyBmaWxlPSd4bWxyZWFkZXInIHZhbHVlPScxJyB0eXBlPSd4bWxQYXJzZXJTZXZlcml0aWVzJy8+CkBAIC01MTI1LDYgKzUwNTQsNyBAQAogICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRVJfU1VCU1RfRU5USVRJRVMnIGZpbGU9J3htbHJlYWRlcicgdmFsdWU9JzQnIHR5cGU9J3htbFBhcnNlclByb3BlcnRpZXMnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfUEFSU0VSX1NZU1RFTV9MSVRFUkFMJyBmaWxlPSdwYXJzZXInIHZhbHVlPScxMycgdHlwZT0neG1sUGFyc2VySW5wdXRTdGF0ZScgaW5mbz0nd2l0aGluIGEgU1lTVEVNIHZhbHVlJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX1BBUlNFUl9WQUxJREFURScgZmlsZT0neG1scmVhZGVyJyB2YWx1ZT0nMycgdHlwZT0neG1sUGFyc2VyUHJvcGVydGllcycvPgorICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRVJfWE1MX0RFQ0wnIGZpbGU9J3BhcnNlcicgdmFsdWU9JzE3JyB0eXBlPSd4bWxQYXJzZXJJbnB1dFN0YXRlJyBpbmZvPScgYmVmb3JlIFhNTCBkZWNsIChidXQgYWZ0ZXIgQk9NKScvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRV9CSUdfTElORVMnIGZpbGU9J3BhcnNlcicgdmFsdWU9JzQxOTQzMDQnIHR5cGU9J3htbFBhcnNlck9wdGlvbicgaW5mbz0nIFN0b3JlIGJpZyBsaW5lcyBudW1iZXJzIGluIHRleHQgUFNWSSBmaWVsZCcvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9QQVJTRV9DT01QQUNUJyBmaWxlPSdwYXJzZXInIHZhbHVlPSc2NTUzNicgdHlwZT0neG1sUGFyc2VyT3B0aW9uJyBpbmZvPSdjb21wYWN0IHNtYWxsIHRleHQgbm9kZXM7IG5vIG1vZGlmaWNhdGlvbiBvZgogdGhlIHRyZWUgYWxsb3dlZCBhZnRlcndhcmRzICh3aWxsIHBvc3NpYmx5CkBAIC01Nzc5LDYgKzU3MDksNyBAQAogICAgIDxlbnVtIG5hbWU9J1hNTF9UUkVFX05PVF9VVEY4JyBmaWxlPSd4bWxlcnJvcicgdmFsdWU9JzEzMDMnIHR5cGU9J3htbFBhcnNlckVycm9ycycgaW5mbz0nMTMwMycvPgogICAgIDxlbnVtIG5hbWU9J1hNTF9UUkVFX1VOVEVSTUlOQVRFRF9FTlRJVFknIGZpbGU9J3htbGVycm9yJyB2YWx1ZT0nMTMwMicgdHlwZT0neG1sUGFyc2VyRXJyb3JzJyBpbmZvPScxMzAyJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX1dBUl9DQVRBTE9HX1BJJyBmaWxlPSd4bWxlcnJvcicgdmFsdWU9JzkzJyB0eXBlPSd4bWxQYXJzZXJFcnJvcnMnIGluZm89JzkzJy8+CisgICAgPGVudW0gbmFtZT0nWE1MX1dBUl9FTkNPRElOR19NSVNNQVRDSCcgZmlsZT0neG1sZXJyb3InIHZhbHVlPScxMTMnIHR5cGU9J3htbFBhcnNlckVycm9ycycgaW5mbz0nMTEzJy8+CiAgICAgPGVudW0gbmFtZT0nWE1MX1dBUl9FTlRJVFlfUkVERUZJTkVEJyBmaWxlPSd4bWxlcnJvcicgdmFsdWU9JzEwNycgdHlwZT0neG1sUGFyc2VyRXJyb3JzJyBpbmZvPScxMDcnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfV0FSX0xBTkdfVkFMVUUnIGZpbGU9J3htbGVycm9yJyB2YWx1ZT0nOTgnIHR5cGU9J3htbFBhcnNlckVycm9ycycgaW5mbz0nOTgnLz4KICAgICA8ZW51bSBuYW1lPSdYTUxfV0FSX05TX0NPTFVNTicgZmlsZT0neG1sZXJyb3InIHZhbHVlPScxMDYnIHR5cGU9J3htbFBhcnNlckVycm9ycycgaW5mbz0nMTA2Jy8+CkBAIC01OTc1LDYgKzU5MDYsNyBAQAogICAgICAgPGZpZWxkIG5hbWU9J2F0eXBlJyB0eXBlPSd4bWxBdHRyaWJ1dGVUeXBlJyBpbmZvPScgdGhlIGF0dHJpYnV0ZSB0eXBlIGlmIHZhbGlkYXRpbmcnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdwc3ZpJyB0eXBlPSd2b2lkIConIGluZm89JyBmb3IgdHlwZS9QU1ZJIGluZm9ybWF0aW9uJy8+CiAgICAgPC9zdHJ1Y3Q+CisgICAgPHN0cnVjdCBuYW1lPSd4bWxBdHRySGFzaEJ1Y2tldCcgZmlsZT0ncGFyc2VyJyB0eXBlPSdzdHJ1Y3QgX3htbEF0dHJIYXNoQnVja2V0Jy8+CiAgICAgPHR5cGVkZWYgbmFtZT0neG1sQXR0clB0cicgZmlsZT0ndHJlZScgdHlwZT0neG1sQXR0ciAqJy8+CiAgICAgPHN0cnVjdCBuYW1lPSd4bWxBdHRyaWJ1dGUnIGZpbGU9J3RyZWUnIHR5cGU9J3N0cnVjdCBfeG1sQXR0cmlidXRlJz4KICAgICAgIDxmaWVsZCBuYW1lPSdfcHJpdmF0ZScgdHlwZT0ndm9pZCAqJyBpbmZvPScgYXBwbGljYXRpb24gZGF0YScvPgpAQCAtNjA0NSw2ICs1OTc3LDcgQEAKICAgICA8dHlwZWRlZiBuYW1lPSd4bWxDaGFyJyBmaWxlPSd4bWxzdHJpbmcnIHR5cGU9J3Vuc2lnbmVkIGNoYXInPgogICAgICAgPGluZm8+VGhpcyBpcyBhIGJhc2ljIGJ5dGUgaW4gYW4gVVRGLTggZW5jb2RlZCBzdHJpbmcuIEl0JmFwb3M7cyB1bnNpZ25lZCBhbGxvd2luZyB0byBwaW5wb2ludCBjYXNlIHdoZXJlIGNoYXIgKiBhcmUgYXNzaWduZWQgdG8geG1sQ2hhciAqIChwb3NzaWJseSBtYWtpbmcgc2VyaWFsaXphdGlvbiBiYWNrIGltcG9zc2libGUpLjwvaW5mbz4KICAgICA8L3R5cGVkZWY+CisgICAgPHR5cGVkZWYgbmFtZT0neG1sQ2hhckVuY0Vycm9yJyBmaWxlPSdlbmNvZGluZycgdHlwZT0nZW51bScvPgogICAgIDx0eXBlZGVmIG5hbWU9J3htbENoYXJFbmNvZGluZycgZmlsZT0nZW5jb2RpbmcnIHR5cGU9J2VudW0nLz4KICAgICA8c3RydWN0IG5hbWU9J3htbENoYXJFbmNvZGluZ0hhbmRsZXInIGZpbGU9J2VuY29kaW5nJyB0eXBlPSdzdHJ1Y3QgX3htbENoYXJFbmNvZGluZ0hhbmRsZXInPgogICAgICAgPGZpZWxkIG5hbWU9J25hbWUnIHR5cGU9J2NoYXIgKicgaW5mbz0nJy8+CkBAIC02MDkxLDEyICs2MDI0LDExIEBACiAgICAgICA8ZmllbGQgbmFtZT0nZXh0U3Vic2V0JyB0eXBlPSdzdHJ1Y3QgX3htbER0ZCAqJyBpbmZvPScgdGhlIGRvY3VtZW50IGV4dGVybmFsIHN1YnNldCcvPgogICAgICAgPGZpZWxkIG5hbWU9J29sZE5zJyB0eXBlPSdzdHJ1Y3QgX3htbE5zIConIGluZm89JyBHbG9iYWwgbmFtZXNwYWNlLCB0aGUgb2xkIHdheScvPgogICAgICAgPGZpZWxkIG5hbWU9J3ZlcnNpb24nIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nIHRoZSBYTUwgdmVyc2lvbiBzdHJpbmcnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSdlbmNvZGluZycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPScgZXh0ZXJuYWwgaW5pdGlhbCBlbmNvZGluZywgaWYgYW55Jy8+CisgICAgICA8ZmllbGQgbmFtZT0nZW5jb2RpbmcnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nIGFjdHVhbCBlbmNvZGluZywgaWYgYW55Jy8+CiAgICAgICA8ZmllbGQgbmFtZT0naWRzJyB0eXBlPSd2b2lkIConIGluZm89JyBIYXNoIHRhYmxlIGZvciBJRCBhdHRyaWJ1dGVzIGlmIGFueScvPgogICAgICAgPGZpZWxkIG5hbWU9J3JlZnMnIHR5cGU9J3ZvaWQgKicgaW5mbz0nIEhhc2ggdGFibGUgZm9yIElEUkVGcyBhdHRyaWJ1dGVzIGlmIGFueScvPgogICAgICAgPGZpZWxkIG5hbWU9J1VSTCcgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPScgVGhlIFVSSSBmb3IgdGhhdCBkb2N1bWVudCcvPgotICAgICAgPGZpZWxkIG5hbWU9J2NoYXJzZXQnIHR5cGU9J2ludCcgaW5mbz0nIEludGVybmFsIGZsYWcgZm9yIGNoYXJzZXQgaGFuZGxpbmcsCi1hY3R1YWxseSBhbiB4bWxDaGFyRW5jb2RpbmcnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSdjaGFyc2V0JyB0eXBlPSdpbnQnIGluZm89JyB1bnVzZWQnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdkaWN0JyB0eXBlPSdzdHJ1Y3QgX3htbERpY3QgKicgaW5mbz0nIGRpY3QgdXNlZCB0byBhbGxvY2F0ZSBuYW1lcyBvciBOVUxMJy8+CiAgICAgICA8ZmllbGQgbmFtZT0ncHN2aScgdHlwZT0ndm9pZCAqJyBpbmZvPScgZm9yIHR5cGUvUFNWSSBpbmZvcm1hdGlvbicvPgogICAgICAgPGZpZWxkIG5hbWU9J3BhcnNlRmxhZ3MnIHR5cGU9J2ludCcgaW5mbz0nIHNldCBvZiB4bWxQYXJzZXJPcHRpb24gdXNlZCB0byBwYXJzZSB0aGUKQEAgLTYxODAsOSArNjExMiw4IEBACiAgICAgICA8ZmllbGQgbmFtZT0nbmV4dGUnIHR5cGU9J3N0cnVjdCBfeG1sRW50aXR5IConIGluZm89JyB1bnVzZWQnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdVUkknIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nIHRoZSBmdWxsIFVSSSBhcyBjb21wdXRlZCcvPgogICAgICAgPGZpZWxkIG5hbWU9J293bmVyJyB0eXBlPSdpbnQnIGluZm89JyBkb2VzIHRoZSBlbnRpdHkgb3duIHRoZSBjaGlsZHJlbnMnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSdjaGVja2VkJyB0eXBlPSdpbnQnIGluZm89JyB3YXMgdGhlIGVudGl0eSBjb250ZW50IGNoZWNrZWQgdGhpcyBpcyBhbHNvIHVzZWQgdG8gY291bnQgZW50aXRpZXMKLSogcmVmZXJlbmNlcyBkb25lIGZyb20gdGhhdCBlbnRpdHkKLSogYW5kIGlmIGl0IGNvbnRhaW5zICZhcG9zOyZsdDsmYXBvczsnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSdmbGFncycgdHlwZT0naW50JyBpbmZvPScgdmFyaW91cyBmbGFncycvPgorICAgICAgPGZpZWxkIG5hbWU9J2V4cGFuZGVkU2l6ZScgdHlwZT0ndW5zaWduZWQgbG9uZycgaW5mbz0nIGV4cGFuZGVkIHNpemUnLz4KICAgICA8L3N0cnVjdD4KICAgICA8dHlwZWRlZiBuYW1lPSd4bWxFbnRpdHlQdHInIGZpbGU9J3RyZWUnIHR5cGU9J3htbEVudGl0eSAqJy8+CiAgICAgPHR5cGVkZWYgbmFtZT0neG1sRW50aXR5VHlwZScgZmlsZT0nZW50aXRpZXMnIHR5cGU9J2VudW0nLz4KQEAgLTYyMTUsNDEgKzYxNDYsNyBAQAogICAgIDx0eXBlZGVmIG5hbWU9J3htbEV4cE5vZGVQdHInIGZpbGU9J3htbHJlZ2V4cCcgdHlwZT0neG1sRXhwTm9kZSAqJy8+CiAgICAgPHR5cGVkZWYgbmFtZT0neG1sRXhwTm9kZVR5cGUnIGZpbGU9J3htbHJlZ2V4cCcgdHlwZT0nZW51bScvPgogICAgIDx0eXBlZGVmIG5hbWU9J3htbEZlYXR1cmUnIGZpbGU9J3BhcnNlcicgdHlwZT0nZW51bScvPgotICAgIDxzdHJ1Y3QgbmFtZT0neG1sR2xvYmFsU3RhdGUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J3N0cnVjdCBfeG1sR2xvYmFsU3RhdGUnPgotICAgICAgPGZpZWxkIG5hbWU9J3htbFBhcnNlclZlcnNpb24nIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sRGVmYXVsdFNBWExvY2F0b3InIHR5cGU9J3htbFNBWExvY2F0b3InIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbERlZmF1bHRTQVhIYW5kbGVyJyB0eXBlPSd4bWxTQVhIYW5kbGVyVjEnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J2RvY2JEZWZhdWx0U0FYSGFuZGxlcicgdHlwZT0neG1sU0FYSGFuZGxlclYxJyBpbmZvPScgdW51c2VkJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0naHRtbERlZmF1bHRTQVhIYW5kbGVyJyB0eXBlPSd4bWxTQVhIYW5kbGVyVjEnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbEZyZWUnIHR5cGU9J3htbEZyZWVGdW5jJyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxNYWxsb2MnIHR5cGU9J3htbE1hbGxvY0Z1bmMnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbE1lbVN0cmR1cCcgdHlwZT0neG1sU3RyZHVwRnVuYycgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sUmVhbGxvYycgdHlwZT0neG1sUmVhbGxvY0Z1bmMnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbEdlbmVyaWNFcnJvcicgdHlwZT0neG1sR2VuZXJpY0Vycm9yRnVuYycgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sU3RydWN0dXJlZEVycm9yJyB0eXBlPSd4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jJyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxHZW5lcmljRXJyb3JDb250ZXh0JyB0eXBlPSd2b2lkIConIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J29sZFhNTFdEY29tcGF0aWJpbGl0eScgdHlwZT0naW50JyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxCdWZmZXJBbGxvY1NjaGVtZScgdHlwZT0neG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZScgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sRGVmYXVsdEJ1ZmZlclNpemUnIHR5cGU9J2ludCcgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlJyB0eXBlPSdpbnQnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZScgdHlwZT0naW50JyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZScgdHlwZT0naW50JyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlJyB0eXBlPSdpbnQnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlJyB0eXBlPSdpbnQnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbExvYWRFeHREdGREZWZhdWx0VmFsdWUnIHR5cGU9J2ludCcgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sUGFyc2VyRGVidWdFbnRpdGllcycgdHlwZT0naW50JyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZScgdHlwZT0naW50JyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxTYXZlTm9FbXB0eVRhZ3MnIHR5cGU9J2ludCcgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sSW5kZW50VHJlZU91dHB1dCcgdHlwZT0naW50JyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxUcmVlSW5kZW50U3RyaW5nJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZScgdHlwZT0neG1sUmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUnIHR5cGU9J3htbERlcmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0neG1sTWFsbG9jQXRvbWljJyB0eXBlPSd4bWxNYWxsb2NGdW5jJyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxMYXN0RXJyb3InIHR5cGU9J3htbEVycm9yJyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUnIHR5cGU9J3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJyBpbmZvPScnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlJyB0eXBlPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIGluZm89JycvPgotICAgICAgPGZpZWxkIG5hbWU9J3htbFN0cnVjdHVyZWRFcnJvckNvbnRleHQnIHR5cGU9J3ZvaWQgKicgaW5mbz0nJy8+Ci0gICAgPC9zdHJ1Y3Q+CisgICAgPHN0cnVjdCBuYW1lPSd4bWxHbG9iYWxTdGF0ZScgZmlsZT0nZ2xvYmFscycgdHlwZT0nc3RydWN0IF94bWxHbG9iYWxTdGF0ZScvPgogICAgIDx0eXBlZGVmIG5hbWU9J3htbEdsb2JhbFN0YXRlUHRyJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxHbG9iYWxTdGF0ZSAqJy8+CiAgICAgPHN0cnVjdCBuYW1lPSd4bWxIYXNoVGFibGUnIGZpbGU9J2hhc2gnIHR5cGU9J3N0cnVjdCBfeG1sSGFzaFRhYmxlJy8+CiAgICAgPHR5cGVkZWYgbmFtZT0neG1sSGFzaFRhYmxlUHRyJyBmaWxlPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGUgKicvPgpAQCAtNjM4Niw4ICs2MjgzLDcgQEAKICAgICAgIDxmaWVsZCBuYW1lPSdzcGFjZVRhYicgdHlwZT0naW50IConIGluZm89JyBhcnJheSBvZiBzcGFjZSBpbmZvcycvPgogICAgICAgPGZpZWxkIG5hbWU9J2RlcHRoJyB0eXBlPSdpbnQnIGluZm89JyB0byBwcmV2ZW50IGVudGl0eSBzdWJzdGl0dXRpb24gbG9vcHMnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdlbnRpdHknIHR5cGU9J3htbFBhcnNlcklucHV0UHRyJyBpbmZvPScgdXNlZCB0byBjaGVjayBlbnRpdGllcyBib3VuZGFyaWVzJy8+Ci0gICAgICA8ZmllbGQgbmFtZT0nY2hhcnNldCcgdHlwZT0naW50JyBpbmZvPScgZW5jb2Rpbmcgb2YgdGhlIGluLW1lbW9yeSBjb250ZW50Ci1hY3R1YWxseSBhbiB4bWxDaGFyRW5jb2RpbmcnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSdjaGFyc2V0JyB0eXBlPSdpbnQnIGluZm89JyB1bnVzZWQnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdub2RlbGVuJyB0eXBlPSdpbnQnIGluZm89JyBUaG9zZSB0d28gZmllbGRzIGFyZSB0aGVyZSB0bycvPgogICAgICAgPGZpZWxkIG5hbWU9J25vZGVtZW0nIHR5cGU9J2ludCcgaW5mbz0nIFNwZWVkIHVwIGxhcmdlIG5vZGUgcGFyc2luZycvPgogICAgICAgPGZpZWxkIG5hbWU9J3BlZGFudGljJyB0eXBlPSdpbnQnIGluZm89JyBzaWduYWwgcGVkYW50aWMgd2FybmluZ3MnLz4KQEAgLTY0MTAsNyArNjMwNiw3IEBACiAgICAgICA8ZmllbGQgbmFtZT0nbnNOcicgdHlwZT0naW50JyBpbmZvPScgdGhlIG51bWJlciBvZiBpbmhlcml0ZWQgbmFtZXNwYWNlcycvPgogICAgICAgPGZpZWxkIG5hbWU9J25zTWF4JyB0eXBlPSdpbnQnIGluZm89JyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzJy8+CiAgICAgICA8ZmllbGQgbmFtZT0nbnNUYWInIHR5cGU9J2NvbnN0IHhtbENoYXIgKiAqJyBpbmZvPScgdGhlIGFycmF5IG9mIHByZWZpeC9uYW1lc3BhY2UgbmFtZScvPgotICAgICAgPGZpZWxkIG5hbWU9J2F0dGFsbG9jcycgdHlwZT0naW50IConIGluZm89JyB3aGljaCBhdHRyaWJ1dGUgd2VyZSBhbGxvY2F0ZWQnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSdhdHRhbGxvY3MnIHR5cGU9J3Vuc2lnbmVkIConIGluZm89JyB3aGljaCBhdHRyaWJ1dGUgd2VyZSBhbGxvY2F0ZWQnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdwdXNoVGFiJyB0eXBlPSd4bWxTdGFydFRhZyAqJyBpbmZvPScgYXJyYXkgb2YgZGF0YSBmb3IgcHVzaCcvPgogICAgICAgPGZpZWxkIG5hbWU9J2F0dHNEZWZhdWx0JyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89JyBkZWZhdWx0ZWQgYXR0cmlidXRlcyBpZiBhbnknLz4KICAgICAgIDxmaWVsZCBuYW1lPSdhdHRzU3BlY2lhbCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPScgbm9uLUNEQVRBIGF0dHJpYnV0ZXMgaWYgYW55Jy8+CkBAIC02NDI1LDcgKzYzMjEsNyBAQAogKicvPgogICAgICAgPGZpZWxkIG5hbWU9J2xhc3RFcnJvcicgdHlwZT0neG1sRXJyb3InIGluZm89JycvPgogICAgICAgPGZpZWxkIG5hbWU9J3BhcnNlTW9kZScgdHlwZT0neG1sUGFyc2VyTW9kZScgaW5mbz0nIHRoZSBwYXJzZXIgbW9kZScvPgotICAgICAgPGZpZWxkIG5hbWU9J25iZW50aXRpZXMnIHR5cGU9J3Vuc2lnbmVkIGxvbmcnIGluZm89JyBudW1iZXIgb2YgZW50aXRpZXMgcmVmZXJlbmNlcycvPgorICAgICAgPGZpZWxkIG5hbWU9J25iZW50aXRpZXMnIHR5cGU9J3Vuc2lnbmVkIGxvbmcnIGluZm89JyB1bnVzZWQnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdzaXplZW50aXRpZXMnIHR5cGU9J3Vuc2lnbmVkIGxvbmcnIGluZm89JyBzaXplIG9mIHBhcnNlZCBlbnRpdGllcyBmb3IgdXNlIGJ5IEhUTUwgbm9uLXJlY3Vyc2l2ZSBwYXJzZXInLz4KICAgICAgIDxmaWVsZCBuYW1lPSdub2RlSW5mbycgdHlwZT0neG1sUGFyc2VyTm9kZUluZm8gKicgaW5mbz0nIEN1cnJlbnQgTm9kZUluZm8nLz4KICAgICAgIDxmaWVsZCBuYW1lPSdub2RlSW5mb05yJyB0eXBlPSdpbnQnIGluZm89JyBEZXB0aCBvZiB0aGUgcGFyc2luZyBzdGFjaycvPgpAQCAtNjQzMyw2ICs2MzI5LDEzIEBACiAgICAgICA8ZmllbGQgbmFtZT0nbm9kZUluZm9UYWInIHR5cGU9J3htbFBhcnNlck5vZGVJbmZvIConIGluZm89JyBhcnJheSBvZiBub2RlSW5mb3MnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdpbnB1dF9pZCcgdHlwZT0naW50JyBpbmZvPScgd2UgbmVlZCB0byBsYWJlbCBpbnB1dHMnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdzaXplZW50Y29weScgdHlwZT0ndW5zaWduZWQgbG9uZycgaW5mbz0nIHZvbHVtZSBvZiBlbnRpdHkgY29weScvPgorICAgICAgPGZpZWxkIG5hbWU9J2VuZENoZWNrU3RhdGUnIHR5cGU9J2ludCcgaW5mbz0nIHF1b3RlIHN0YXRlIGZvciBwdXNoIHBhcnNlcicvPgorICAgICAgPGZpZWxkIG5hbWU9J25iRXJyb3JzJyB0eXBlPSd1bnNpZ25lZCBzaG9ydCcgaW5mbz0nIG51bWJlciBvZiBlcnJvcnMnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSduYldhcm5pbmdzJyB0eXBlPSd1bnNpZ25lZCBzaG9ydCcgaW5mbz0nIG51bWJlciBvZiB3YXJuaW5ncycvPgorICAgICAgPGZpZWxkIG5hbWU9J21heEFtcGwnIHR5cGU9J3Vuc2lnbmVkJyBpbmZvPScgbWF4aW11bSBhbXBsaWZpY2F0aW9uIGZhY3RvcicvPgorICAgICAgPGZpZWxkIG5hbWU9J25zZGInIHR5cGU9J3htbFBhcnNlck5zRGF0YSAqJyBpbmZvPScgbmFtZXNwYWNlIGRhdGFiYXNlJy8+CisgICAgICA8ZmllbGQgbmFtZT0nYXR0ckhhc2hNYXgnIHR5cGU9J3Vuc2lnbmVkJyBpbmZvPScgYWxsb2NhdGVkIHNpemUnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSdhdHRySGFzaCcgdHlwZT0neG1sQXR0ckhhc2hCdWNrZXQgKicgaW5mbz0nIGF0dHRyaWJ1dGUgaGFzaCB0YWJsZScvPgogICAgIDwvc3RydWN0PgogICAgIDx0eXBlZGVmIG5hbWU9J3htbFBhcnNlckN0eHRQdHInIGZpbGU9J3RyZWUnIHR5cGU9J3htbFBhcnNlckN0eHQgKicvPgogICAgIDx0eXBlZGVmIG5hbWU9J3htbFBhcnNlckVycm9ycycgZmlsZT0neG1sZXJyb3InIHR5cGU9J2VudW0nLz4KQEAgLTY0NDUsMTYgKzYzNDgsMTUgQEAKICAgICAgIDxmaWVsZCBuYW1lPSdlbmQnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nIGVuZCBvZiB0aGUgYXJyYXkgdG8gcGFyc2UnLz4KICAgICAgIDxmaWVsZCBuYW1lPSdsZW5ndGgnIHR5cGU9J2ludCcgaW5mbz0nIGxlbmd0aCBpZiBrbm93bicvPgogICAgICAgPGZpZWxkIG5hbWU9J2xpbmUnIHR5cGU9J2ludCcgaW5mbz0nIEN1cnJlbnQgbGluZScvPgotICAgICAgPGZpZWxkIG5hbWU9J2NvbCcgdHlwZT0naW50JyBpbmZvPScqIE5PVEU6IGNvbnN1bWVkIGlzIG9ubHkgdGVzdGVkIGZvciBlcXVhbGl0eSBpbiB0aGUgcGFyc2VyIGNvZGUsCi0qICAgICAgIHNvIGV2ZW4gaWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3cgdGhpcyBzaG91bGQgbm90IGdpdmUgdHJvdWJsZXMKLSogICAgICAgZm9yIHBhcnNpbmcgdmVyeSBsYXJnZSBpbnN0YW5jZXMuCi0qJy8+CisgICAgICA8ZmllbGQgbmFtZT0nY29sJyB0eXBlPSdpbnQnIGluZm89JyBDdXJyZW50IGNvbHVtbicvPgogICAgICAgPGZpZWxkIG5hbWU9J2NvbnN1bWVkJyB0eXBlPSd1bnNpZ25lZCBsb25nJyBpbmZvPScgSG93IG1hbnkgeG1sQ2hhcnMgYWxyZWFkeSBjb25zdW1lZCcvPgogICAgICAgPGZpZWxkIG5hbWU9J2ZyZWUnIHR5cGU9J3htbFBhcnNlcklucHV0RGVhbGxvY2F0ZScgaW5mbz0nIGZ1bmN0aW9uIHRvIGRlYWxsb2NhdGUgdGhlIGJhc2UnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSdlbmNvZGluZycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPScgdGhlIGVuY29kaW5nIHN0cmluZyBmb3IgZW50aXR5Jy8+CisgICAgICA8ZmllbGQgbmFtZT0nZW5jb2RpbmcnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nIHVudXNlZCcvPgogICAgICAgPGZpZWxkIG5hbWU9J3ZlcnNpb24nIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgZW50aXR5Jy8+Ci0gICAgICA8ZmllbGQgbmFtZT0nc3RhbmRhbG9uZScgdHlwZT0naW50JyBpbmZvPScgV2FzIHRoYXQgZW50aXR5IG1hcmtlZCBzdGFuZGFsb25lJy8+CisgICAgICA8ZmllbGQgbmFtZT0nZmxhZ3MnIHR5cGU9J2ludCcgaW5mbz0nIEZsYWdzJy8+CiAgICAgICA8ZmllbGQgbmFtZT0naWQnIHR5cGU9J2ludCcgaW5mbz0nIGFuIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXR5Jy8+CisgICAgICA8ZmllbGQgbmFtZT0ncGFyZW50Q29uc3VtZWQnIHR5cGU9J3Vuc2lnbmVkIGxvbmcnIGluZm89JyBjb25zdW1lZCBieXRlcyBmcm9tIHBhcmVudHMnLz4KKyAgICAgIDxmaWVsZCBuYW1lPSdlbnRpdHknIHR5cGU9J3htbEVudGl0eVB0cicgaW5mbz0nIGVudGl0eSwgaWYgYW55Jy8+CiAgICAgPC9zdHJ1Y3Q+CiAgICAgPHN0cnVjdCBuYW1lPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlcicgZmlsZT0ndHJlZScgdHlwZT0nc3RydWN0IF94bWxQYXJzZXJJbnB1dEJ1ZmZlcic+CiAgICAgICA8ZmllbGQgbmFtZT0nY29udGV4dCcgdHlwZT0ndm9pZCAqJyBpbmZvPScnLz4KQEAgLTY0ODUsNiArNjM4Nyw3IEBACiAgICAgICA8ZmllbGQgbmFtZT0nYnVmZmVyJyB0eXBlPSd4bWxQYXJzZXJOb2RlSW5mbyAqJyBpbmZvPScnLz4KICAgICA8L3N0cnVjdD4KICAgICA8dHlwZWRlZiBuYW1lPSd4bWxQYXJzZXJOb2RlSW5mb1NlcVB0cicgZmlsZT0ncGFyc2VyJyB0eXBlPSd4bWxQYXJzZXJOb2RlSW5mb1NlcSAqJy8+CisgICAgPHN0cnVjdCBuYW1lPSd4bWxQYXJzZXJOc0RhdGEnIGZpbGU9J3BhcnNlcicgdHlwZT0nc3RydWN0IF94bWxQYXJzZXJOc0RhdGEnLz4KICAgICA8dHlwZWRlZiBuYW1lPSd4bWxQYXJzZXJPcHRpb24nIGZpbGU9J3BhcnNlcicgdHlwZT0nZW51bScvPgogICAgIDx0eXBlZGVmIG5hbWU9J3htbFBhcnNlclByb3BlcnRpZXMnIGZpbGU9J3htbHJlYWRlcicgdHlwZT0nZW51bScvPgogICAgIDx0eXBlZGVmIG5hbWU9J3htbFBhcnNlclNldmVyaXRpZXMnIGZpbGU9J3htbHJlYWRlcicgdHlwZT0nZW51bScvPgpAQCAtNjk0OCw3ICs2ODUxLDcgQEAKICAgICAgIDxmaWVsZCBuYW1lPSdjb21wJyB0eXBlPSd4bWxYUGF0aENvbXBFeHByUHRyJyBpbmZvPScgdGhlIHByZWNvbXBpbGVkIGV4cHJlc3Npb24nLz4KICAgICAgIDxmaWVsZCBuYW1lPSd4cHRyJyB0eXBlPSdpbnQnIGluZm89JyBpdCB0aGlzIGFuIFhQb2ludGVyIGV4cHJlc3Npb24nLz4KICAgICAgIDxmaWVsZCBuYW1lPSdhbmNlc3RvcicgdHlwZT0neG1sTm9kZVB0cicgaW5mbz0nIHVzZWQgZm9yIHdhbGtpbmcgcHJlY2VkaW5nIGF4aXMnLz4KLSAgICAgIDxmaWVsZCBuYW1lPSd2YWx1ZUZyYW1lJyB0eXBlPSdpbnQnIGluZm89JyB1c2VkIHRvIGxpbWl0IFBvcCBvbiB0aGUgc3RhY2snLz4KKyAgICAgIDxmaWVsZCBuYW1lPSd2YWx1ZUZyYW1lJyB0eXBlPSdpbnQnIGluZm89JyBhbHdheXMgemVybyBmb3IgY29tcGF0aWJpbGl0eScvPgogICAgIDwvc3RydWN0PgogICAgIDx0eXBlZGVmIG5hbWU9J3htbFhQYXRoUGFyc2VyQ29udGV4dFB0cicgZmlsZT0neHBhdGgnIHR5cGU9J3htbFhQYXRoUGFyc2VyQ29udGV4dCAqJy8+CiAgICAgPHN0cnVjdCBuYW1lPSd4bWxYUGF0aFR5cGUnIGZpbGU9J3hwYXRoJyB0eXBlPSdzdHJ1Y3QgX3htbFhQYXRoVHlwZSc+CkBAIC02OTYzLDE5ICs2ODY2LDkgQEAKICAgICA8dHlwZWRlZiBuYW1lPSd4bWxYUGF0aFZhcmlhYmxlUHRyJyBmaWxlPSd4cGF0aCcgdHlwZT0neG1sWFBhdGhWYXJpYWJsZSAqJy8+CiAgICAgPHZhcmlhYmxlIG5hbWU9J2VtcHR5RXhwJyBmaWxlPSd4bWxyZWdleHAnIHR5cGU9J3htbEV4cE5vZGVQdHInLz4KICAgICA8dmFyaWFibGUgbmFtZT0nZm9yYmlkZGVuRXhwJyBmaWxlPSd4bWxyZWdleHAnIHR5cGU9J3htbEV4cE5vZGVQdHInLz4KLSAgICA8dmFyaWFibGUgbmFtZT0naHRtbERlZmF1bHRTQVhIYW5kbGVyJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxTQVhIYW5kbGVyVjEnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0nb2xkWE1MV0Rjb21wYXRpYmlsaXR5JyBmaWxlPSdnbG9iYWxzJyB0eXBlPSdpbnQnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sQnVmZmVyQWxsb2NTY2hlbWUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sRGVmYXVsdEJ1ZmZlclNpemUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J2ludCcvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxEZWZhdWx0U0FYSGFuZGxlcicgZmlsZT0nZ2xvYmFscycgdHlwZT0neG1sU0FYSGFuZGxlclYxJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbERlZmF1bHRTQVhMb2NhdG9yJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxTQVhMb2NhdG9yJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSdpbnQnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sRnJlZScgZmlsZT0nZ2xvYmFscycgdHlwZT0neG1sRnJlZUZ1bmMnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sR2VuZXJpY0Vycm9yJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxHZW5lcmljRXJyb3JGdW5jJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbEdlbmVyaWNFcnJvckNvbnRleHQnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J3ZvaWQgKicvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZScgZmlsZT0nZ2xvYmFscycgdHlwZT0naW50Jy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbEluZGVudFRyZWVPdXRwdXQnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J2ludCcvPgorICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxGcmVlJyBmaWxlPSd4bWxtZW1vcnknIHR5cGU9J3htbEZyZWVGdW5jJz4KKyAgICAgIDxpbmZvPkBtZW06IGFuIGFscmVhZHkgYWxsb2NhdGVkIGJsb2NrIG9mIG1lbW9yeSAgVGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIGxpYnhtbCBmcmVlKCkgaW1wbGVtZW50YXRpb248L2luZm8+CisgICAgPC92YXJpYWJsZT4KICAgICA8dmFyaWFibGUgbmFtZT0neG1sSXNCYXNlQ2hhckdyb3VwJyBmaWxlPSdjaHZhbGlkJyB0eXBlPSdjb25zdCB4bWxDaFJhbmdlR3JvdXAnLz4KICAgICA8dmFyaWFibGUgbmFtZT0neG1sSXNDaGFyR3JvdXAnIGZpbGU9J2NodmFsaWQnIHR5cGU9J2NvbnN0IHhtbENoUmFuZ2VHcm91cCcvPgogICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxJc0NvbWJpbmluZ0dyb3VwJyBmaWxlPSdjaHZhbGlkJyB0eXBlPSdjb25zdCB4bWxDaFJhbmdlR3JvdXAnLz4KQEAgLTY5ODMsMjkgKzY4NzYsMjcgQEAKICAgICA8dmFyaWFibGUgbmFtZT0neG1sSXNFeHRlbmRlckdyb3VwJyBmaWxlPSdjaHZhbGlkJyB0eXBlPSdjb25zdCB4bWxDaFJhbmdlR3JvdXAnLz4KICAgICA8dmFyaWFibGUgbmFtZT0neG1sSXNJZGVvZ3JhcGhpY0dyb3VwJyBmaWxlPSdjaHZhbGlkJyB0eXBlPSdjb25zdCB4bWxDaFJhbmdlR3JvdXAnLz4KICAgICA8dmFyaWFibGUgbmFtZT0neG1sSXNQdWJpZENoYXJfdGFiJyBmaWxlPSdjaHZhbGlkJyB0eXBlPSdjb25zdCB1bnNpZ25lZCBjaGFyeG1sSXNQdWJpZENoYXJfdGFiWzI1Nl0nLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZScgZmlsZT0nZ2xvYmFscycgdHlwZT0naW50Jy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbExhc3RFcnJvcicgZmlsZT0nZ2xvYmFscycgdHlwZT0neG1sRXJyb3InLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J2ludCcvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSdpbnQnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sTWFsbG9jJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxNYWxsb2NGdW5jJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbE1hbGxvY0F0b21pYycgZmlsZT0nZ2xvYmFscycgdHlwZT0neG1sTWFsbG9jRnVuYycvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxNZW1TdHJkdXAnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J3htbFN0cmR1cEZ1bmMnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZScgZmlsZT0nZ2xvYmFscycgdHlwZT0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbFBhcnNlckRlYnVnRW50aXRpZXMnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J2ludCcvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbFBhcnNlck1heERlcHRoJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIHR5cGU9J3Vuc2lnbmVkIGludCcvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxQYXJzZXJWZXJzaW9uJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSdjb25zdCBjaGFyIConLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J2ludCcvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxSZWFsbG9jJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd4bWxSZWFsbG9jRnVuYycvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIHR5cGU9J3htbFJlZ2lzdGVyTm9kZUZ1bmMnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sU2F2ZU5vRW1wdHlUYWdzJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSdpbnQnLz4KKyAgICA8dmFyaWFibGUgbmFtZT0neG1sTWFsbG9jJyBmaWxlPSd4bWxtZW1vcnknIHR5cGU9J3htbE1hbGxvY0Z1bmMnPgorICAgICAgPGluZm8+QHNpemU6ICB0aGUgc2l6ZSByZXF1ZXN0ZWQgaW4gYnl0ZXMgIFRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBsaWJ4bWwgbWFsbG9jKCkgaW1wbGVtZW50YXRpb24gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yPC9pbmZvPgorICAgIDwvdmFyaWFibGU+CisgICAgPHZhcmlhYmxlIG5hbWU9J3htbE1hbGxvY0F0b21pYycgZmlsZT0neG1sbWVtb3J5JyB0eXBlPSd4bWxNYWxsb2NGdW5jJz4KKyAgICAgIDxpbmZvPkBzaXplOiAgdGhlIHNpemUgcmVxdWVzdGVkIGluIGJ5dGVzICBUaGUgdmFyaWFibGUgaG9sZGluZyB0aGUgbGlieG1sIG1hbGxvYygpIGltcGxlbWVudGF0aW9uIGZvciBhdG9taWMgZGF0YSAoaS5lLiBibG9ja3Mgbm90IGNvbnRhaW5pbmcgcG9pbnRlcnMpLCB1c2VmdWwgd2hlbiB1c2luZyBhIGdhcmJhZ2UgY29sbGVjdGluZyBhbGxvY2F0b3IuICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvcjwvaW5mbz4KKyAgICA8L3ZhcmlhYmxlPgorICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxNZW1TdHJkdXAnIGZpbGU9J3htbG1lbW9yeScgdHlwZT0neG1sU3RyZHVwRnVuYyc+CisgICAgICA8aW5mbz5Ac3RyOiBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgIFRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBsaWJ4bWwgc3RyZHVwKCkgaW1wbGVtZW50YXRpb24gIFJldHVybnMgdGhlIGNvcHkgb2YgdGhlIHN0cmluZyBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3I8L2luZm8+CisgICAgPC92YXJpYWJsZT4KKyAgICA8dmFyaWFibGUgbmFtZT0neG1sUGFyc2VyTWF4RGVwdGgnIGZpbGU9J3BhcnNlckludGVybmFscycgdHlwZT0ndW5zaWduZWQgaW50Jz4KKyAgICAgIDxpbmZvPmFyYml0cmFyeSBkZXB0aCBsaW1pdCBmb3IgdGhlIFhNTCBkb2N1bWVudHMgdGhhdCB3ZSBhbGxvdyB0byBwcm9jZXNzLiBUaGlzIGlzIG5vdCBhIGxpbWl0YXRpb24gb2YgdGhlIHBhcnNlciBidXQgYSBzYWZldHkgYm91bmRhcnkgZmVhdHVyZS4gSXQgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlIFhNTF9QQVJTRV9IVUdFIHBhcnNlciBvcHRpb24uPC9pbmZvPgorICAgIDwvdmFyaWFibGU+CisgICAgPHZhcmlhYmxlIG5hbWU9J3htbFBhcnNlclZlcnNpb24nIGZpbGU9J3BhcnNlcicgdHlwZT0nY29uc3QgY2hhciAqIGNvbnN0Jz4KKyAgICAgIDxpbmZvPkNvbnN0YW50IHN0cmluZyBkZXNjcmliaW5nIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5PC9pbmZvPgorICAgIDwvdmFyaWFibGU+CisgICAgPHZhcmlhYmxlIG5hbWU9J3htbFJlYWxsb2MnIGZpbGU9J3htbG1lbW9yeScgdHlwZT0neG1sUmVhbGxvY0Z1bmMnPgorICAgICAgPGluZm8+QG1lbTogYW4gYWxyZWFkeSBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5IEBzaXplOiAgdGhlIG5ldyBzaXplIHJlcXVlc3RlZCBpbiBieXRlcyAgVGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIGxpYnhtbCByZWFsbG9jKCkgaW1wbGVtZW50YXRpb24gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSByZWFsbG9jYXRlZCBibG9jayBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3I8L2luZm8+CisgICAgPC92YXJpYWJsZT4KICAgICA8dmFyaWFibGUgbmFtZT0neG1sU3RyaW5nQ29tbWVudCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyB0eXBlPSdjb25zdCB4bWxDaGFyeG1sU3RyaW5nQ29tbWVudFtdJy8+CiAgICAgPHZhcmlhYmxlIG5hbWU9J3htbFN0cmluZ1RleHQnIGZpbGU9J3BhcnNlckludGVybmFscycgdHlwZT0nY29uc3QgeG1sQ2hhcnhtbFN0cmluZ1RleHRbXScvPgogICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxTdHJpbmdUZXh0Tm9lbmMnIGZpbGU9J3BhcnNlckludGVybmFscycgdHlwZT0nY29uc3QgeG1sQ2hhcnhtbFN0cmluZ1RleHROb2VuY1tdJy8+Ci0gICAgPHZhcmlhYmxlIG5hbWU9J3htbFN0cnVjdHVyZWRFcnJvcicgZmlsZT0nZ2xvYmFscycgdHlwZT0neG1sU3RydWN0dXJlZEVycm9yRnVuYycvPgotICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0JyBmaWxlPSdnbG9iYWxzJyB0eXBlPSd2b2lkIConLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJyB0eXBlPSdpbnQnLz4KLSAgICA8dmFyaWFibGUgbmFtZT0neG1sVHJlZUluZGVudFN0cmluZycgZmlsZT0nZ2xvYmFscycgdHlwZT0nY29uc3QgY2hhciAqJy8+CiAgICAgPHZhcmlhYmxlIG5hbWU9J3htbFhQYXRoTkFOJyBmaWxlPSd4cGF0aCcgdHlwZT0nZG91YmxlJy8+CiAgICAgPHZhcmlhYmxlIG5hbWU9J3htbFhQYXRoTklORicgZmlsZT0neHBhdGgnIHR5cGU9J2RvdWJsZScvPgogICAgIDx2YXJpYWJsZSBuYW1lPSd4bWxYUGF0aFBJTkYnIGZpbGU9J3hwYXRoJyB0eXBlPSdkb3VibGUnLz4KQEAgLTcwMjEsNyArNjkxMiw3IEBACiAgICAgPGZ1bmN0aW9uIG5hbWU9J1VURjhUb2lzb2xhdDEnIGZpbGU9J2VuY29kaW5nJyBtb2R1bGU9J2VuY29kaW5nJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKTwvY29uZD4KICAgICAgIDxpbmZvPlRha2UgYSBibG9jayBvZiBVVEYtOCBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gSVNPIExhdGluIDEgYmxvY2sgb2YgY2hhcnMgb3V0LjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaWYgc3VjY2VzcywgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzLCBvciAtMSBvdGhlcndpc2UgVGhlIHZhbHVlIG9mIEBpbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuJy8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuICBUaGUgdmFsdWUgb2YgQGlubGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZCBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLCBlbHNlIHVucHJlZGljdGFibGUuIFRoZSB2YWx1ZSBvZiBAb3V0bGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBwcm9kdWNlZC4nLz4KICAgICAgIDxhcmcgbmFtZT0nb3V0JyB0eXBlPSd1bnNpZ25lZCBjaGFyIConIGluZm89J2EgcG9pbnRlciB0byBhbiBhcnJheSBvZiBieXRlcyB0byBzdG9yZSB0aGUgcmVzdWx0Jy8+CiAgICAgICA8YXJnIG5hbWU9J291dGxlbicgdHlwZT0naW50IConIGluZm89J3RoZSBsZW5ndGggb2YgQG91dCcvPgogICAgICAgPGFyZyBuYW1lPSdpbicgdHlwZT0nY29uc3QgdW5zaWduZWQgY2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgVVRGLTggY2hhcnMnLz4KQEAgLTczNDMsNyArNzIzNCw3IEBACiAgICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nVGhlIHRhZyBuYW1lJy8+CiAgICAgICA8YXJnIG5hbWU9J2VsZW0nIHR5cGU9J2h0bWxOb2RlUHRyJyBpbmZvPSd0aGUgSFRNTCBlbGVtZW50Jy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0naHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0JyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0nSFRNTHBhcnNlcic+CisgICAgPGZ1bmN0aW9uIG5hbWU9J2h0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dCcgZmlsZT0nSFRNTHBhcnNlcicgbW9kdWxlPSdIVE1McGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5DcmVhdGUgYSBwYXJzZXIgY29udGV4dCBmb3IgYSBmaWxlIGNvbnRlbnQuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdodG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIG5ldyBwYXJzZXIgY29udGV4dCBvciBOVUxMJy8+CkBAIC03MzczLDcgKzcyNjQsNyBAQAogICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLiBUaGlzIHJldXNlcyB0aGUgZXhpc3RpbmcgQGN0eHQgcGFyc2VyIGNvbnRleHQ8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2h0bWxEb2NQdHInIGluZm89J3RoZSByZXN1bHRpbmcgZG9jdW1lbnQgdHJlZScvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSdodG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gSFRNTCBwYXJzZXIgY29udGV4dCcvPgotICAgICAgPGFyZyBuYW1lPSdjdXInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZycvPgorICAgICAgPGFyZyBuYW1lPSdzdHInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZycvPgogICAgICAgPGFyZyBuYW1lPSdVUkwnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0ndGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgdGhlIGRvY3VtZW50Jy8+CiAgICAgICA8YXJnIG5hbWU9J2VuY29kaW5nJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBkb2N1bWVudCBlbmNvZGluZywgb3IgTlVMTCcvPgogICAgICAgPGFyZyBuYW1lPSdvcHRpb25zJyB0eXBlPSdpbnQnIGluZm89J2EgY29tYmluYXRpb24gb2YgaHRtbFBhcnNlck9wdGlvbihzKScvPgpAQCAtNzQzNSw3ICs3MzI2LDcgQEAKICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSdodG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0JyBmaWxlPSdTQVgyJyBtb2R1bGU9J1NBWDInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sSW5pdFBhcnNlciB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LiAgSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBTQVggaGFuZGxlcjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0naHRtbERvY0NvbnRlbnREdW1wRm9ybWF0T3V0cHV0JyBmaWxlPSdIVE1MdHJlZScgbW9kdWxlPSdIVE1MdHJlZSc+CkBAIC03NTMzLDkgKzc0MjQsOSBAQAogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBsYXN0IHZhbHVlIGZvciAwIGZvciBubyBoYW5kbGluZywgMSBmb3IgYXV0byBpbnNlcnRpb24uJy8+CiAgICAgICA8YXJnIG5hbWU9J3ZhbCcgdHlwZT0naW50JyBpbmZvPSdpbnQgMCBvciAxJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0naHRtbEluaXRBdXRvQ2xvc2UnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdIVE1McGFyc2VyJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0naHRtbEluaXRBdXRvQ2xvc2UnIGZpbGU9J0hUTUxwYXJzZXInIG1vZHVsZT0nSFRNTHBhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuICBUaGlzIGlzIGEgbm8tb3Agbm93LjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgaXMgYSBuby1vcC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSdodG1sSXNBdXRvQ2xvc2VkJyBmaWxlPSdIVE1McGFyc2VyJyBtb2R1bGU9J0hUTUxwYXJzZXInPgpAQCAtNzU3Niw2ICs3NDY3LDEzIEBACiAgICAgICA8aW5mbz5BbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBwYXJzZXIgY29udGV4dC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2h0bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSd0aGUgaHRtbFBhcnNlckN0eHRQdHIgb3IgTlVMTCBpbiBjYXNlIG9mIGFsbG9jYXRpb24gZXJyb3InLz4KICAgICA8L2Z1bmN0aW9uPgorICAgIDxmdW5jdGlvbiBuYW1lPSdodG1sTmV3U0FYUGFyc2VyQ3R4dCcgZmlsZT0nSFRNTHBhcnNlcicgbW9kdWxlPSdIVE1McGFyc2VyJz4KKyAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCk8L2NvbmQ+CisgICAgICA8aW5mbz5BbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBTQVggcGFyc2VyIGNvbnRleHQuIElmIHVzZXJEYXRhIGlzIE5VTEwsIHRoZSBwYXJzZXIgY29udGV4dCB3aWxsIGJlIHBhc3NlZCBhcyB1c2VyIGRhdGEuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdodG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIGh0bWxQYXJzZXJDdHh0UHRyIG9yIE5VTEwgaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGVycm9yJy8+CisgICAgICA8YXJnIG5hbWU9J3NheCcgdHlwZT0nY29uc3QgaHRtbFNBWEhhbmRsZXIgKicgaW5mbz0nU0FYIGhhbmRsZXInLz4KKyAgICAgIDxhcmcgbmFtZT0ndXNlckRhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0ndXNlciBkYXRhJy8+CisgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0naHRtbE5vZGVEdW1wJyBmaWxlPSdIVE1MdHJlZScgbW9kdWxlPSdIVE1MdHJlZSc+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpICZhbXA7JmFtcDsgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpPC9jb25kPgogICAgICAgPGluZm8+RHVtcCBhbiBIVE1MIG5vZGUsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIsY2hpbGRyZW4gYXJlIHByaW50ZWQgdG9vLCBhbmQgZm9ybWF0dGluZyByZXR1cm5zIGFyZSBhZGRlZC48L2luZm8+CkBAIC03NjMwLDcgKzc1MjgsNyBAQAogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J2h0bWxQYXJzZUNoYXJSZWYnIGZpbGU9J0hUTUxwYXJzZXInIG1vZHVsZT0nSFRNTHBhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+cGFyc2UgUmVmZXJlbmNlIGRlY2xhcmF0aW9ucyAgWzY2XSBDaGFyUmVmIDo6PSAmYXBvczsmYW1wOyMmYXBvczsgWzAtOV0rICZhcG9zOzsmYXBvczsgfCAmYXBvczsmYW1wOyN4JmFwb3M7IFswLTlhLWZBLUZdKyAmYXBvczs7JmFwb3M7PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgUmVmZXJlbmNlIGRlY2xhcmF0aW9ucyAgWzY2XSBDaGFyUmVmIDo6PSAmYXBvczsmYW1wOyMmYXBvczsgWzAtOV0rICZhcG9zOzsmYXBvczsgfCAmYXBvczsmYW1wOyN4JmFwb3M7IFswLTlhLWZBLUZdKyAmYXBvczs7JmFwb3M7PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSB2YWx1ZSBwYXJzZWQgKGFzIGFuIGludCknLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0naHRtbFBhcnNlckN0eHRQdHInIGluZm89J2FuIEhUTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtNzY1OCwxMyArNzU1NiwxMyBAQAogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J2h0bWxQYXJzZUVsZW1lbnQnIGZpbGU9J0hUTUxwYXJzZXInIG1vZHVsZT0nSFRNTHBhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+cGFyc2UgYW4gSFRNTCBlbGVtZW50LCB0aGlzIGlzIGhpZ2hseSByZWN1cnNpdmUgdGhpcyBpcyBrZXB0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgY29kZSB2ZXJzaW9ucyAgWzM5XSBlbGVtZW50IDo6PSBFbXB0eUVsZW1UYWcgfCBTVGFnIGNvbnRlbnQgRVRhZyAgWzQxXSBBdHRyaWJ1dGUgOjo9IE5hbWUgRXEgQXR0VmFsdWU8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBIVE1MIGVsZW1lbnQsIHRoaXMgaXMgaGlnaGx5IHJlY3Vyc2l2ZSB0aGlzIGlzIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyBjb2RlIHZlcnNpb25zICBbMzldIGVsZW1lbnQgOjo9IEVtcHR5RWxlbVRhZyB8IFNUYWcgY29udGVudCBFVGFnICBbNDFdIEF0dHJpYnV0ZSA6Oj0gTmFtZSBFcSBBdHRWYWx1ZTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSdodG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gSFRNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J2h0bWxQYXJzZUVudGl0eVJlZicgZmlsZT0nSFRNTHBhcnNlcicgbW9kdWxlPSdIVE1McGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBIVE1MIEVOVElUWSByZWZlcmVuY2VzICBbNjhdIEVudGl0eVJlZiA6Oj0gJmFwb3M7JmFtcDsmYXBvczsgTmFtZSAmYXBvczs7JmFwb3M7PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYW4gSFRNTCBFTlRJVFkgcmVmZXJlbmNlcyAgWzY4XSBFbnRpdHlSZWYgOjo9ICZhcG9zOyZhbXA7JmFwb3M7IE5hbWUgJmFwb3M7OyZhcG9zOzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgaHRtbEVudGl0eURlc2MgKicgaW5mbz0ndGhlIGFzc29jaWF0ZWQgaHRtbEVudGl0eURlc2NQdHIgaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLCBpZiBub24tTlVMTCAqc3RyIHdpbGwgaGF2ZSB0byBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLicvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSdodG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gSFRNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSdzdHInIHR5cGU9J2NvbnN0IHhtbENoYXIgKionIGluZm89J2xvY2F0aW9uIHRvIHN0b3JlIHRoZSBlbnRpdHkgbmFtZScvPgpAQCAtNzcyNSw3ICs3NjIzLDcgQEAKICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSdodG1sU0FYUGFyc2VEb2MnIGZpbGU9J0hUTUxwYXJzZXInIG1vZHVsZT0nSFRNTHBhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+UGFyc2UgYW4gSFRNTCBpbi1tZW1vcnkgZG9jdW1lbnQuIElmIHNheCBpcyBub3QgTlVMTCwgdXNlIHRoZSBTQVggY2FsbGJhY2tzIHRvIGhhbmRsZSBwYXJzZSBldmVudHMuIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gYmVoYXZpb3IgYW5kIHJldHVybiBhIHRyZWUuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIGh0bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCBodG1sQ3R4dFJlYWREb2MuICBQYXJzZSBhbiBIVE1MIGluLW1lbW9yeSBkb2N1bWVudC4gSWYgc2F4IGlzIG5vdCBOVUxMLCB1c2UgdGhlIFNBWCBjYWxsYmFja3MgdG8gaGFuZGxlIHBhcnNlIGV2ZW50cy4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSBiZWhhdmlvciBhbmQgcmV0dXJuIGEgdHJlZS48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2h0bWxEb2NQdHInIGluZm89J3RoZSByZXN1bHRpbmcgZG9jdW1lbnQgdHJlZSB1bmxlc3MgU0FYIGlzIE5VTEwgb3IgdGhlIGRvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4nLz4KICAgICAgIDxhcmcgbmFtZT0nY3VyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J2EgcG9pbnRlciB0byBhbiBhcnJheSBvZiB4bWxDaGFyJy8+CiAgICAgICA8YXJnIG5hbWU9J2VuY29kaW5nJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J2EgZnJlZSBmb3JtIEMgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIEhUTUwgZG9jdW1lbnQgZW5jb2RpbmcsIG9yIE5VTEwnLz4KQEAgLTc3MzQsNyArNzYzMiw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0naHRtbFNBWFBhcnNlRmlsZScgZmlsZT0nSFRNTHBhcnNlcicgbW9kdWxlPSdIVE1McGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBIVE1MIGZpbGUgYW5kIGJ1aWxkIGEgdHJlZS4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MgY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIGh0bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCBodG1sQ3R4dFJlYWRGaWxlLiAgcGFyc2UgYW4gSFRNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naHRtbERvY1B0cicgaW5mbz0ndGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlIHVubGVzcyBTQVggaXMgTlVMTCBvciB0aGUgZG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLicvPgogICAgICAgPGFyZyBuYW1lPSdmaWxlbmFtZScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgZmlsZW5hbWUnLz4KICAgICAgIDxhcmcgbmFtZT0nZW5jb2RpbmcnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nYSBmcmVlIGZvcm0gQyBzdHJpbmcgZGVzY3JpYmluZyB0aGUgSFRNTCBkb2N1bWVudCBlbmNvZGluZywgb3IgTlVMTCcvPgpAQCAtNzc5NCw3ICs3NjkyLDcgQEAKICAgICAgIDxhcmcgbmFtZT0nbGVuJyB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2YgeG1sQ2hhcicvPgogICAgIDwvZnVuY3R5cGU+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J2luaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYycgZmlsZT0neG1sZXJyb3InIG1vZHVsZT0nZXJyb3InPgotICAgICAgPGluZm8+U2V0IG9yIHJlc2V0IChpZiBOVUxMKSB0aGUgZGVmYXVsdCBoYW5kbGVyIGZvciBnZW5lcmljIGVycm9ycyB0byB0aGUgYnVpbHRpbiBlcnJvciBmdW5jdGlvbi48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBVc2UgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYy4gIFNldCBvciByZXNldCAoaWYgTlVMTCkgdGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgZ2VuZXJpYyBlcnJvcnMgdG8gdGhlIGJ1aWx0aW4gZXJyb3IgZnVuY3Rpb24uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2hhbmRsZXInIHR5cGU9J3htbEdlbmVyaWNFcnJvckZ1bmMgKicgaW5mbz0ndGhlIGhhbmRsZXInLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtNzg1MiwxOSArNzc1MCwxOSBAQAogICAgIDwvZnVuY3R5cGU+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J2lzb2xhdDFUb1VURjgnIGZpbGU9J2VuY29kaW5nJyBtb2R1bGU9J2VuY29kaW5nJz4KICAgICAgIDxpbmZvPlRha2UgYSBibG9jayBvZiBJU08gTGF0aW4gMSBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gVVRGLTggYmxvY2sgb2YgY2hhcnMgb3V0LjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaWYgc3VjY2Vzcywgb3IgLTEgb3RoZXJ3aXNlIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4gVGhlIHZhbHVlIG9mIEBvdXRsZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHByb2R1Y2VkLicvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLiAgVGhlIHZhbHVlIG9mIEBpbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuJy8+CiAgICAgICA8YXJnIG5hbWU9J291dCcgdHlwZT0ndW5zaWduZWQgY2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYnl0ZXMgdG8gc3RvcmUgdGhlIHJlc3VsdCcvPgogICAgICAgPGFyZyBuYW1lPSdvdXRsZW4nIHR5cGU9J2ludCAqJyBpbmZvPSd0aGUgbGVuZ3RoIG9mIEBvdXQnLz4KICAgICAgIDxhcmcgbmFtZT0naW4nIHR5cGU9J2NvbnN0IHVuc2lnbmVkIGNoYXIgKicgaW5mbz0nYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIElTTyBMYXRpbiAxIGNoYXJzJy8+CiAgICAgICA8YXJnIG5hbWU9J2lubGVuJyB0eXBlPSdpbnQgKicgaW5mbz0ndGhlIGxlbmd0aCBvZiBAaW4nLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSduYW1lUG9wJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPlBvcHMgdGhlIHRvcCBlbGVtZW50IG5hbWUgZnJvbSB0aGUgbmFtZSBzdGFjazwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiAgUG9wcyB0aGUgdG9wIGVsZW1lbnQgbmFtZSBmcm9tIHRoZSBuYW1lIHN0YWNrPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIGp1c3QgcmVtb3ZlZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSduYW1lUHVzaCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5QdXNoZXMgYSBuZXcgZWxlbWVudCBuYW1lIG9uIHRvcCBvZiB0aGUgbmFtZSBzdGFjazwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiAgUHVzaGVzIGEgbmV3IGVsZW1lbnQgbmFtZSBvbiB0b3Agb2YgdGhlIG5hbWUgc3RhY2s8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nLTEgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGluZGV4IGluIHRoZSBzdGFjayBvdGhlcndpc2UnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J3ZhbHVlJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBlbGVtZW50IG5hbWUnLz4KQEAgLTc4NzgsMTIgKzc3NzYsMTIgQEAKICAgICAgIDxhcmcgbmFtZT0ncHJlZml4JyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lc3BhY2UgcHJlZml4Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0nbm9kZVBvcCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5Qb3BzIHRoZSB0b3AgZWxlbWVudCBub2RlIGZyb20gdGhlIG5vZGUgc3RhY2s8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gIFBvcHMgdGhlIHRvcCBlbGVtZW50IG5vZGUgZnJvbSB0aGUgbm9kZSBzdGFjazwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sTm9kZVB0cicgaW5mbz0ndGhlIG5vZGUganVzdCByZW1vdmVkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J25vZGVQdXNoJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPlB1c2hlcyBhIG5ldyBlbGVtZW50IG5vZGUgb24gdG9wIG9mIHRoZSBub2RlIHN0YWNrPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICBQdXNoZXMgYSBuZXcgZWxlbWVudCBub2RlIG9uIHRvcCBvZiB0aGUgbm9kZSBzdGFjazwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSctMSBpbiBjYXNlIG9mIGVycm9yLCB0aGUgaW5kZXggaW4gdGhlIHN0YWNrIG90aGVyd2lzZScvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsdWUnIHR5cGU9J3htbE5vZGVQdHInIGluZm89J3RoZSBlbGVtZW50IG5vZGUnLz4KQEAgLTgwMzUsNyArNzkzMyw3IEBACiAgICAgPGZ1bmN0aW9uIG5hbWU9J3ZhbHVlUHVzaCcgZmlsZT0neHBhdGhJbnRlcm5hbHMnIG1vZHVsZT0neHBhdGgnPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfWFBBVEhfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5QdXNoZXMgYSBuZXcgWFBhdGggb2JqZWN0IG9uIHRvcCBvZiB0aGUgdmFsdWUgc3RhY2suIElmIHZhbHVlIGlzIE5VTEwsIGEgbWVtb3J5IGVycm9yIGlzIHJlY29yZGVkIGluIHRoZSBwYXJzZXIgY29udGV4dC48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgdmFsdWUgc3RhY2ssIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuJy8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgdmFsdWUgc3RhY2ssIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuICBUaGUgb2JqZWN0IGlzIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGVycm9yLicvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxYUGF0aFBhcnNlckNvbnRleHRQdHInIGluZm89J2FuIFhQYXRoIGV2YWx1YXRpb24gY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSd2YWx1ZScgdHlwZT0neG1sWFBhdGhPYmplY3RQdHInIGluZm89J3RoZSBYUGF0aCBvYmplY3QnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtODUzOSw4ICs4NDM3LDggQEAKICAgICAgIDxhcmcgbmFtZT0nc2l6ZScgdHlwZT0nc2l6ZV90JyBpbmZvPSdpbml0aWFsIHNpemUgb2YgYnVmZmVyJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQnVmZmVyQ3JlYXRlU3RhdGljJyBmaWxlPSd0cmVlJyBtb2R1bGU9J3RyZWUnPgotICAgICAgPGluZm8+cm91dGluZSB0byBjcmVhdGUgYW4gWE1MIGJ1ZmZlciBmcm9tIGFuIGltbXV0YWJsZSBtZW1vcnkgYXJlYS4gVGhlIGFyZWEgd29uJmFwb3M7dCBiZSBtb2RpZmllZCBub3IgY29waWVkLCBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgbGlmZXRpbWUuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd4bWxCdWZmZXJQdHInIGluZm89J3RoZSBuZXcgc3RydWN0dXJlLicvPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd4bWxCdWZmZXJQdHInIGluZm89J2FuIFhNTCBidWZmZXIgaW5pdGlhbGl6ZWQgd2l0aCBieXRlcy4nLz4KICAgICAgIDxhcmcgbmFtZT0nbWVtJyB0eXBlPSd2b2lkIConIGluZm89J3RoZSBtZW1vcnkgYXJlYScvPgogICAgICAgPGFyZyBuYW1lPSdzaXplJyB0eXBlPSdzaXplX3QnIGluZm89J3RoZSBzaXplIGluIGJ5dGUnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtODYzOCw3ICs4NTM2LDcgQEAKICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQzE0TkRvY0R1bXBNZW1vcnknIGZpbGU9J2MxNG4nIG1vZHVsZT0nYzE0bic+Ci0gICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpICZhbXA7JmFtcDsgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpPC9jb25kPgorICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfQzE0Tl9FTkFCTEVEKTwvY29uZD4KICAgICAgIDxpbmZvPkR1bXBzIHRoZSBjYW5vbml6ZWQgaW1hZ2Ugb2YgZ2l2ZW4gWE1MIGRvY3VtZW50IGludG8gbWVtb3J5LiBGb3IgZGV0YWlscyBzZWUgJnF1b3Q7Q2Fub25pY2FsIFhNTCZxdW90OyAoaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWMxNG4pIG9yICZxdW90O0V4Y2x1c2l2ZSBYTUwgQ2Fub25pY2FsaXphdGlvbiZxdW90OyAoaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWV4Yy1jMTRuKTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWwnLz4KICAgICAgIDxhcmcgbmFtZT0nZG9jJyB0eXBlPSd4bWxEb2NQdHInIGluZm89J3RoZSBYTUwgZG9jdW1lbnQgZm9yIGNhbm9uaXphdGlvbicvPgpAQCAtODY0OSw3ICs4NTQ3LDcgQEAKICAgICAgIDxhcmcgbmFtZT0nZG9jX3R4dF9wdHInIHR5cGU9J3htbENoYXIgKionIGluZm89J3RoZSBtZW1vcnkgcG9pbnRlciBmb3IgYWxsb2NhdGVkIGNhbm9uaWNhbCBYTUwgdGV4dDsgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9ucyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB4bWxGcmVlKCkgdG8gZnJlZSBhbGxvY2F0ZWQgbWVtb3J5Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQzE0TkRvY1NhdmUnIGZpbGU9J2MxNG4nIG1vZHVsZT0nYzE0bic+Ci0gICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpICZhbXA7JmFtcDsgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpPC9jb25kPgorICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfQzE0Tl9FTkFCTEVEKTwvY29uZD4KICAgICAgIDxpbmZvPkR1bXBzIHRoZSBjYW5vbml6ZWQgaW1hZ2Ugb2YgZ2l2ZW4gWE1MIGRvY3VtZW50IGludG8gdGhlIGZpbGUuIEZvciBkZXRhaWxzIHNlZSAmcXVvdDtDYW5vbmljYWwgWE1MJnF1b3Q7IChodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtYzE0bikgb3IgJnF1b3Q7RXhjbHVzaXZlIFhNTCBDYW5vbmljYWxpemF0aW9uJnF1b3Q7IChodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtZXhjLWMxNG4pPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbCcvPgogICAgICAgPGFyZyBuYW1lPSdkb2MnIHR5cGU9J3htbERvY1B0cicgaW5mbz0ndGhlIFhNTCBkb2N1bWVudCBmb3IgY2Fub25pemF0aW9uJy8+CkBAIC04NjYxLDcgKzg1NTksNyBAQAogICAgICAgPGFyZyBuYW1lPSdjb21wcmVzc2lvbicgdHlwZT0naW50JyBpbmZvPSd0aGUgY29tcHJlc3Npb24gbGV2ZWwgKHpsaWIgcmVxdWlyZWQpOiAtMSAtIGxpYnhtbCBkZWZhdWx0LCAwIC0gdW5jb21wcmVzc2VkLCAmZ3Q7MCAtIGNvbXByZXNzaW9uIGxldmVsJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQzE0TkRvY1NhdmVUbycgZmlsZT0nYzE0bicgbW9kdWxlPSdjMTRuJz4KLSAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX0MxNE5fRU5BQkxFRCkgJmFtcDsmYW1wOyBkZWZpbmVkKExJQlhNTF9PVVRQVVRfRU5BQkxFRCk8L2NvbmQ+CisgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpPC9jb25kPgogICAgICAgPGluZm8+RHVtcHMgdGhlIGNhbm9uaXplZCBpbWFnZSBvZiBnaXZlbiBYTUwgZG9jdW1lbnQgaW50byB0aGUgcHJvdmlkZWQgYnVmZmVyLiBGb3IgZGV0YWlscyBzZWUgJnF1b3Q7Q2Fub25pY2FsIFhNTCZxdW90OyAoaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWMxNG4pIG9yICZxdW90O0V4Y2x1c2l2ZSBYTUwgQ2Fub25pY2FsaXphdGlvbiZxdW90OyAoaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWV4Yy1jMTRuKTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSdub24tbmVnYXRpdmUgdmFsdWUgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWwnLz4KICAgICAgIDxhcmcgbmFtZT0nZG9jJyB0eXBlPSd4bWxEb2NQdHInIGluZm89J3RoZSBYTUwgZG9jdW1lbnQgZm9yIGNhbm9uaXphdGlvbicvPgpAQCAtODY3Miw3ICs4NTcwLDcgQEAKICAgICAgIDxhcmcgbmFtZT0nYnVmJyB0eXBlPSd4bWxPdXRwdXRCdWZmZXJQdHInIGluZm89J3RoZSBvdXRwdXQgYnVmZmVyIHRvIHN0b3JlIGNhbm9uaWNhbCBYTUw7IHRoaXMgYnVmZmVyIE1VU1QgaGF2ZSBlbmNvZGVyPT1OVUxMIGJlY2F1c2UgQzE0TiByZXF1aXJlcyBVVEYtOCBvdXRwdXQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDMTRORXhlY3V0ZScgZmlsZT0nYzE0bicgbW9kdWxlPSdjMTRuJz4KLSAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX0MxNE5fRU5BQkxFRCkgJmFtcDsmYW1wOyBkZWZpbmVkKExJQlhNTF9PVVRQVVRfRU5BQkxFRCk8L2NvbmQ+CisgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpPC9jb25kPgogICAgICAgPGluZm8+RHVtcHMgdGhlIGNhbm9uaXplZCBpbWFnZSBvZiBnaXZlbiBYTUwgZG9jdW1lbnQgaW50byB0aGUgcHJvdmlkZWQgYnVmZmVyLiBGb3IgZGV0YWlscyBzZWUgJnF1b3Q7Q2Fub25pY2FsIFhNTCZxdW90OyAoaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWMxNG4pIG9yICZxdW90O0V4Y2x1c2l2ZSBYTUwgQ2Fub25pY2FsaXphdGlvbiZxdW90OyAoaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWV4Yy1jMTRuKTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSdub24tbmVnYXRpdmUgdmFsdWUgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWwnLz4KICAgICAgIDxhcmcgbmFtZT0nZG9jJyB0eXBlPSd4bWxEb2NQdHInIGluZm89J3RoZSBYTUwgZG9jdW1lbnQgZm9yIGNhbm9uaXphdGlvbicvPgpAQCAtODY4NCw3ICs4NTgyLDcgQEAKICAgICAgIDxhcmcgbmFtZT0nYnVmJyB0eXBlPSd4bWxPdXRwdXRCdWZmZXJQdHInIGluZm89J3RoZSBvdXRwdXQgYnVmZmVyIHRvIHN0b3JlIGNhbm9uaWNhbCBYTUw7IHRoaXMgYnVmZmVyIE1VU1QgaGF2ZSBlbmNvZGVyPT1OVUxMIGJlY2F1c2UgQzE0TiByZXF1aXJlcyBVVEYtOCBvdXRwdXQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxDMTROSXNWaXNpYmxlQ2FsbGJhY2snIGZpbGU9J2MxNG4nIG1vZHVsZT0nYzE0bic+Ci0gICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpICZhbXA7JmFtcDsgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpPC9jb25kPgorICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfQzE0Tl9FTkFCTEVEKTwvY29uZD4KICAgICAgIDxpbmZvPlNpZ25hdHVyZSBmb3IgYSBDMTROIGNhbGxiYWNrIG9uIHZpc2libGUgbm9kZXM8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMSBpZiB0aGUgbm9kZSBzaG91bGQgYmUgaW5jbHVkZWQnLz4KICAgICAgIDxhcmcgbmFtZT0ndXNlcl9kYXRhJyB0eXBlPSd2b2lkIConIGluZm89J3VzZXIgZGF0YScvPgpAQCAtODgyNiwyMiArODcyNCwyMiBAQAogICAgICAgPGFyZyBuYW1lPSdoYW5kbGVyJyB0eXBlPSd4bWxDaGFyRW5jb2RpbmdIYW5kbGVyIConIGluZm89J2NoYXIgZW5jb2RpbmcgdHJhbnNmb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDaGFyRW5jRmlyc3RMaW5lJyBmaWxlPSdlbmNvZGluZycgbW9kdWxlPSdlbmNvZGluZyc+Ci0gICAgICA8aW5mbz5Gcm9udC1lbmQgZm9yIHRoZSBlbmNvZGluZyBoYW5kbGVyIGlucHV0IGZ1bmN0aW9uLCBidXQgaGFuZGxlIG9ubHkgdGhlIHZlcnkgZmlyc3QgbGluZSwgaS5lLiBsaW1pdCBpdHNlbGYgdG8gNDUgY2hhcnMuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yIC0xIGdlbmVyYWwgZXJyb3IgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChmb3IgKmluIGlzIG5vdCB2YWxpZCB1dGY4IHN0cmluZyBvciB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbiZhcG9zO3QgZml0IGludG8gdGhlIGVuY29kaW5nIHdlIHdhbnQpLCBvcicvPgorICAgICAgPGluZm8+REVQRVJFQ0FURUQ6IERvbiZhcG9zO3QgdXNlLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4nLz4KICAgICAgIDxhcmcgbmFtZT0naGFuZGxlcicgdHlwZT0neG1sQ2hhckVuY29kaW5nSGFuZGxlciAqJyBpbmZvPSdjaGFyIGVuY29kaW5nIHRyYW5zZm9ybWF0aW9uIGRhdGEgc3RydWN0dXJlJy8+CiAgICAgICA8YXJnIG5hbWU9J291dCcgdHlwZT0neG1sQnVmZmVyUHRyJyBpbmZvPSdhbiB4bWxCdWZmZXIgZm9yIHRoZSBvdXRwdXQuJy8+CiAgICAgICA8YXJnIG5hbWU9J2luJyB0eXBlPSd4bWxCdWZmZXJQdHInIGluZm89J2FuIHhtbEJ1ZmZlciBmb3IgdGhlIGlucHV0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ2hhckVuY0luRnVuYycgZmlsZT0nZW5jb2RpbmcnIG1vZHVsZT0nZW5jb2RpbmcnPgogICAgICAgPGluZm8+R2VuZXJpYyBmcm9udC1lbmQgZm9yIHRoZSBlbmNvZGluZyBoYW5kbGVyIGlucHV0IGZ1bmN0aW9uPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yIC0xIGdlbmVyYWwgZXJyb3IgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChmb3IgKmluIGlzIG5vdCB2YWxpZCB1dGY4IHN0cmluZyBvciB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbiZhcG9zO3QgZml0IGludG8gdGhlIGVuY29kaW5nIHdlIHdhbnQpLCBvcicvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLicvPgogICAgICAgPGFyZyBuYW1lPSdoYW5kbGVyJyB0eXBlPSd4bWxDaGFyRW5jb2RpbmdIYW5kbGVyIConIGluZm89J2NoYXIgZW5jb2RpbmcgdHJhbnNmb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUnLz4KICAgICAgIDxhcmcgbmFtZT0nb3V0JyB0eXBlPSd4bWxCdWZmZXJQdHInIGluZm89J2FuIHhtbEJ1ZmZlciBmb3IgdGhlIG91dHB1dC4nLz4KICAgICAgIDxhcmcgbmFtZT0naW4nIHR5cGU9J3htbEJ1ZmZlclB0cicgaW5mbz0nYW4geG1sQnVmZmVyIGZvciB0aGUgaW5wdXQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDaGFyRW5jT3V0RnVuYycgZmlsZT0nZW5jb2RpbmcnIG1vZHVsZT0nZW5jb2RpbmcnPgogICAgICAgPGluZm8+R2VuZXJpYyBmcm9udC1lbmQgZm9yIHRoZSBlbmNvZGluZyBoYW5kbGVyIG91dHB1dCBmdW5jdGlvbiBhIGZpcnN0IGNhbGwgd2l0aCBAaW4gPT0gTlVMTCBoYXMgdG8gYmUgbWFkZSBmaXJzIHRvIGluaXRpYXRlIHRoZSBvdXRwdXQgaW4gY2FzZSBvZiBub24tc3RhdGVsZXNzIGVuY29kaW5nIG5lZWRpbmcgdG8gaW5pdGlhdGUgdGhlaXIgc3RhdGUgb3IgdGhlIG91dHB1dCAobGlrZSB0aGUgQk9NIGluIFVURjE2KS4gSW4gY2FzZSBvZiBVVEY4IHNlcXVlbmNlIGNvbnZlcnNpb24gZXJyb3JzIGZvciB0aGUgZ2l2ZW4gZW5jb2RlciwgdGhlIGNvbnRlbnQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbWFwcGVkIHRvIGEgQ2hhclJlZiBzZXF1ZW5jZS48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIG51bWJlciBvZiBieXRlIHdyaXR0ZW4gaWYgc3VjY2Vzcywgb3IgLTEgZ2VuZXJhbCBlcnJvciAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yIHRoZSByZXN1bHQgb2YgdHJhbnNmb3JtYXRpb24gY2FuJmFwb3M7dCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yJy8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuJy8+CiAgICAgICA8YXJnIG5hbWU9J2hhbmRsZXInIHR5cGU9J3htbENoYXJFbmNvZGluZ0hhbmRsZXIgKicgaW5mbz0nY2hhciBlbmNvZGluZyB0cmFuc2Zvcm1hdGlvbiBkYXRhIHN0cnVjdHVyZScvPgogICAgICAgPGFyZyBuYW1lPSdvdXQnIHR5cGU9J3htbEJ1ZmZlclB0cicgaW5mbz0nYW4geG1sQnVmZmVyIGZvciB0aGUgb3V0cHV0LicvPgogICAgICAgPGFyZyBuYW1lPSdpbicgdHlwZT0neG1sQnVmZmVyUHRyJyBpbmZvPSdhbiB4bWxCdWZmZXIgZm9yIHRoZSBpbnB1dCcvPgpAQCAtODg5MSwxMCArODc4OSwxNCBAQAogICAgICAgPGFyZyBuYW1lPSdyZXQnIHR5cGU9J3htbFBhcnNlcklucHV0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGlucHV0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ2hlY2tMYW5ndWFnZUlEJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPkNoZWNrcyB0aGF0IHRoZSB2YWx1ZSBjb25mb3JtcyB0byB0aGUgTGFuZ3VhZ2VJRCBwcm9kdWN0aW9uOiAgTk9URTogdGhpcyBpcyBzb21ld2hhdCBkZXByZWNhdGVkLCB0aG9zZSBwcm9kdWN0aW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgWE1MIFNlY29uZCBlZGl0aW9uLiAgWzMzXSBMYW5ndWFnZUlEIDo6PSBMYW5nY29kZSAoJmFwb3M7LSZhcG9zOyBTdWJjb2RlKSogWzM0XSBMYW5nY29kZSA6Oj0gSVNPNjM5Q29kZSB8ICBJYW5hQ29kZSB8ICBVc2VyQ29kZSBbMzVdIElTTzYzOUNvZGUgOjo9IChbYS16XSB8IFtBLVpdKSAoW2Etel0gfCBbQS1aXSkgWzM2XSBJYW5hQ29kZSA6Oj0gKCZhcG9zO2kmYXBvczsgfCAmYXBvcztJJmFwb3M7KSAmYXBvczstJmFwb3M7IChbYS16XSB8IFtBLVpdKSsgWzM3XSBVc2VyQ29kZSA6Oj0gKCZhcG9zO3gmYXBvczsgfCAmYXBvcztYJmFwb3M7KSAmYXBvczstJmFwb3M7IChbYS16XSB8IFtBLVpdKSsgWzM4XSBTdWJjb2RlIDo6PSAoW2Etel0gfCBbQS1aXSkrICBUaGUgY3VycmVudCBSRUMgcmVmZXJlbmNlIHRoZSBzdWNjZXNzb3JzIG9mIFJGQyAxNzY2LCBjdXJyZW50bHkgNTY0NiAgaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni50eHQgbGFuZ3RhZyAgICAgICA9IGxhbmd1YWdlIFsmcXVvdDstJnF1b3Q7IHNjcmlwdF0gWyZxdW90Oy0mcXVvdDsgcmVnaW9uXSAqKCZxdW90Oy0mcXVvdDsgdmFyaWFudCkgKigmcXVvdDstJnF1b3Q7IGV4dGVuc2lvbikgWyZxdW90Oy0mcXVvdDsgcHJpdmF0ZXVzZV0gbGFuZ3VhZ2UgICAgICA9IDIqM0FMUEhBICAgICAgICAgICAgOyBzaG9ydGVzdCBJU08gNjM5IGNvZGUgWyZxdW90Oy0mcXVvdDsgZXh0bGFuZ10gICAgICAgOyBzb21ldGltZXMgZm9sbG93ZWQgYnkgOyBleHRlbmRlZCBsYW5ndWFnZSBzdWJ0YWdzIC8gNEFMUEhBICAgICAgICAgICAgICA7IG9yIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIC8gNSo4QUxQSEEgICAgICAgICAgICA7IG9yIHJlZ2lzdGVyZWQgbGFuZ3VhZ2Ugc3VidGFnICBleHRsYW5nICAgICAgID0gM0FMUEhBICAgICAgICAgICAgICA7IHNlbGVjdGVkIElTTyA2MzkgY29kZXMgKjIoJnF1b3Q7LSZxdW90OyAzQUxQSEEpICAgICAgOyBwZXJtYW5lbnRseSByZXNlcnZlZCAgc2NyaXB0ICAgICAgICA9IDRBTFBIQSAgICAgICAgICAgICAgOyBJU08gMTU5MjQgY29kZSAgcmVnaW9uICAgICAgICA9IDJBTFBIQSAgICAgICAgICAgICAgOyBJU08gMzE2Ni0xIGNvZGUgLyAzRElHSVQgICAgICAgICAgICAgIDsgVU4gTS40OSBjb2RlICB2YXJpYW50ICAgICAgID0gNSo4YWxwaGFudW0gICAgICAgICA7IHJlZ2lzdGVyZWQgdmFyaWFudHMgLyAoRElHSVQgM2FscGhhbnVtKSAgZXh0ZW5zaW9uICAgICA9IHNpbmdsZXRvbiAxKigmcXVvdDstJnF1b3Q7ICgyKjhhbHBoYW51bSkpICA7IFNpbmdsZSBhbHBoYW51bWVyaWNzIDsgJnF1b3Q7eCZxdW90OyByZXNlcnZlZCBmb3IgcHJpdmF0ZSB1c2Ugc2luZ2xldG9uICAgICA9IERJR0lUICAgICAgICAgICAgICAgOyAwIC0gOSAvICV4NDEtNTcgICAgICAgICAgICAgOyBBIC0gVyAvICV4NTktNUEgICAgICAgICAgICAgOyBZIC0gWiAvICV4NjEtNzcgICAgICAgICAgICAgOyBhIC0gdyAvICV4NzktN0EgICAgICAgICAgICAgOyB5IC0geiAgaXQgc291bmRzIHJpZ2h0IHRvIHN0aWxsIGFsbG93IElycmVndWxhciBpLXh4eCBJQU5BIGFuZCB1c2VyIGNvZGVzIHRvbyBUaGUgcGFyc2VyIGJlbG93IGRvZXNuJmFwb3M7dCB0cnkgdG8gY29wZSB3aXRoIGV4dGVuc2lvbiBvciBwcml2YXRldXNlIHRoYXQgY291bGQgYmUgYWRkZWQgYnV0IHRoYXQmYXBvcztzIG5vdCBpbnRlcm9wZXJhYmxlIGFueXdheTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiAgQ2hlY2tzIHRoYXQgdGhlIHZhbHVlIGNvbmZvcm1zIHRvIHRoZSBMYW5ndWFnZUlEIHByb2R1Y3Rpb246ICBOT1RFOiB0aGlzIGlzIHNvbWV3aGF0IGRlcHJlY2F0ZWQsIHRob3NlIHByb2R1Y3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBYTUwgU2Vjb25kIGVkaXRpb24uICBbMzNdIExhbmd1YWdlSUQgOjo9IExhbmdjb2RlICgmYXBvczstJmFwb3M7IFN1YmNvZGUpKiBbMzRdIExhbmdjb2RlIDo6PSBJU082MzlDb2RlIHwgIElhbmFDb2RlIHwgIFVzZXJDb2RlIFszNV0gSVNPNjM5Q29kZSA6Oj0gKFthLXpdIHwgW0EtWl0pIChbYS16XSB8IFtBLVpdKSBbMzZdIElhbmFDb2RlIDo6PSAoJmFwb3M7aSZhcG9zOyB8ICZhcG9zO0kmYXBvczspICZhcG9zOy0mYXBvczsgKFthLXpdIHwgW0EtWl0pKyBbMzddIFVzZXJDb2RlIDo6PSAoJmFwb3M7eCZhcG9zOyB8ICZhcG9zO1gmYXBvczspICZhcG9zOy0mYXBvczsgKFthLXpdIHwgW0EtWl0pKyBbMzhdIFN1YmNvZGUgOjo9IChbYS16XSB8IFtBLVpdKSsgIFRoZSBjdXJyZW50IFJFQyByZWZlcmVuY2UgdGhlIHN1Y2Nlc3NvcnMgb2YgUkZDIDE3NjYsIGN1cnJlbnRseSA1NjQ2ICBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1NjQ2LnR4dCBsYW5ndGFnICAgICAgID0gbGFuZ3VhZ2UgWyZxdW90Oy0mcXVvdDsgc2NyaXB0XSBbJnF1b3Q7LSZxdW90OyByZWdpb25dICooJnF1b3Q7LSZxdW90OyB2YXJpYW50KSAqKCZxdW90Oy0mcXVvdDsgZXh0ZW5zaW9uKSBbJnF1b3Q7LSZxdW90OyBwcml2YXRldXNlXSBsYW5ndWFnZSAgICAgID0gMiozQUxQSEEgICAgICAgICAgICA7IHNob3J0ZXN0IElTTyA2MzkgY29kZSBbJnF1b3Q7LSZxdW90OyBleHRsYW5nXSAgICAgICA7IHNvbWV0aW1lcyBmb2xsb3dlZCBieSA7IGV4dGVuZGVkIGxhbmd1YWdlIHN1YnRhZ3MgLyA0QUxQSEEgICAgICAgICAgICAgIDsgb3IgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgLyA1KjhBTFBIQSAgICAgICAgICAgIDsgb3IgcmVnaXN0ZXJlZCBsYW5ndWFnZSBzdWJ0YWcgIGV4dGxhbmcgICAgICAgPSAzQUxQSEEgICAgICAgICAgICAgIDsgc2VsZWN0ZWQgSVNPIDYzOSBjb2RlcyAqMigmcXVvdDstJnF1b3Q7IDNBTFBIQSkgICAgICA7IHBlcm1hbmVudGx5IHJlc2VydmVkICBzY3JpcHQgICAgICAgID0gNEFMUEhBICAgICAgICAgICAgICA7IElTTyAxNTkyNCBjb2RlICByZWdpb24gICAgICAgID0gMkFMUEhBICAgICAgICAgICAgICA7IElTTyAzMTY2LTEgY29kZSAvIDNESUdJVCAgICAgICAgICAgICAgOyBVTiBNLjQ5IGNvZGUgIHZhcmlhbnQgICAgICAgPSA1KjhhbHBoYW51bSAgICAgICAgIDsgcmVnaXN0ZXJlZCB2YXJpYW50cyAvIChESUdJVCAzYWxwaGFudW0pICBleHRlbnNpb24gICAgID0gc2luZ2xldG9uIDEqKCZxdW90Oy0mcXVvdDsgKDIqOGFscGhhbnVtKSkgIDsgU2luZ2xlIGFscGhhbnVtZXJpY3MgOyAmcXVvdDt4JnF1b3Q7IHJlc2VydmVkIGZvciBwcml2YXRlIHVzZSBzaW5nbGV0b24gICAgID0gRElHSVQgICAgICAgICAgICAgICA7IDAgLSA5IC8gJXg0MS01NyAgICAgICAgICAgICA7IEEgLSBXIC8gJXg1OS01QSAgICAgICAgICAgICA7IFkgLSBaIC8gJXg2MS03NyAgICAgICAgICAgICA7IGEgLSB3IC8gJXg3OS03QSAgICAgICAgICAgICA7IHkgLSB6ICBpdCBzb3VuZHMgcmlnaHQgdG8gc3RpbGwgYWxsb3cgSXJyZWd1bGFyIGkteHh4IElBTkEgYW5kIHVzZXIgY29kZXMgdG9vIFRoZSBwYXJzZXIgYmVsb3cgZG9lc24mYXBvczt0IHRyeSB0byBjb3BlIHdpdGggZXh0ZW5zaW9uIG9yIHByaXZhdGV1c2UgdGhhdCBjb3VsZCBiZSBhZGRlZCBidXQgdGhhdCZhcG9zO3Mgbm90IGludGVyb3BlcmFibGUgYW55d2F5PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzEgaWYgY29ycmVjdCAwIG90aGVyd2lzZScvPgogICAgICAgPGFyZyBuYW1lPSdsYW5nJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3BvaW50ZXIgdG8gdGhlIHN0cmluZyB2YWx1ZScvPgogICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbENoZWNrVGhyZWFkTG9jYWxTdG9yYWdlJyBmaWxlPSd0aHJlYWRzJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+Q2hlY2sgd2hldGhlciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBjb3VsZCBiZSBhbGxvY2F0ZWQuICBJbiBjcm9zcy1wbGF0Zm9ybSBjb2RlIHJ1bm5pbmcgaW4gbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudHMsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGluIGVhY2ggdGhyZWFkIGJlZm9yZSBjYWxsaW5nIG90aGVyIGxpYnJhcnkgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGF0IHRocmVhZC1sb2NhbCBzdG9yYWdlIHdhcyBhbGxvY2F0ZWQgcHJvcGVybHkuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBvciAtMSBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gQSBmYWlsZWQgYWxsb2NhdGlvbiBzaWduYWxzIGEgdHlwaWNhbGx5IGZhdGFsIGFuZCBpcnJlY292ZXJhYmxlIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9uLiBEb24mYXBvczt0IGNhbGwgYW55IGxpYnJhcnkgZnVuY3Rpb25zIGluIHRoaXMgY2FzZS4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgaWYgdGhlIGxpYnJhcnkgaXMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZS4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgZm9yIHRoZSAmcXVvdDttYWluJnF1b3Q7IHRocmVhZCB3aGljaCBpcyB0aGUgZmlyc3QgdGhyZWFkIGNhbGxpbmcgeG1sSW5pdFBhcnNlci4gIEF2YWlsYWJsZSBzaW5jZSB2Mi4xMi4wLicvPgorICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbENoZWNrVVRGOCcgZmlsZT0neG1sc3RyaW5nJyBtb2R1bGU9J3htbHN0cmluZyc+CiAgICAgICA8aW5mbz5DaGVja3MgQHV0ZiBmb3IgYmVpbmcgdmFsaWQgVVRGLTguIEB1dGYgaXMgYXNzdW1lZCB0byBiZSBudWxsLXRlcm1pbmF0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cGVyLXN0cmljdCwgYXMgaXQgd2lsbCBhbGxvdyBsb25nZXIgVVRGLTggc2VxdWVuY2VzIHRoYW4gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgSmF2YSBpcyBjYXBhYmxlIG9mIHByb2R1Y2luZyB0aGVzZSBzZXF1ZW5jZXMgaWYgcHJvdm9rZWQuIEFsc28gbm90ZSwgdGhpcyByb3V0aW5lIGNoZWNrcyBmb3IgdGhlIDQtYnl0ZSBtYXhpbXVtIHNpemUsIGJ1dCBkb2VzIG5vdCBjaGVjayBmb3IgMHgxMGZmZmYgbWF4aW11bSB2YWx1ZS48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndmFsdWU6IHRydWUgaWYgQHV0ZiBpcyB2YWxpZC4nLz4KQEAgLTg5MjAsNyArODgyMiw3IEBACiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDbGVhbnVwR2xvYmFscycgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sQ2xlYW51cFBhcnNlciB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlciBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24mYXBvczt0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuICBBZGRpdGlvbmFsIGNsZWFudXAgZm9yIG11bHRpLXRocmVhZGluZzwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCB4bWxDbGVhbnVwUGFyc2VyIHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiB4bWxDbGVhbnVwUGFyc2VyIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbiZhcG9zO3QgaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MnIGZpbGU9J3htbElPJyBtb2R1bGU9J3htbElPJz4KQEAgLTg5MjgsNyArODgzMCw3IEBACiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDbGVhbnVwTWVtb3J5JyBmaWxlPSd4bWxtZW1vcnknIG1vZHVsZT0neG1sbWVtb3J5Jz4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sQ2xlYW51cFBhcnNlciB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlciBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24mYXBvczt0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuICBGcmVlIHVwIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgbGlicmFyeSBmb3IgaXRzIG93biB1c2UuIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgdXNlciBsZXZlbCBjb2RlLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCB4bWxDbGVhbnVwUGFyc2VyIHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiB4bWxDbGVhbnVwUGFyc2VyIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbiZhcG9zO3QgaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDbGVhbnVwT3V0cHV0Q2FsbGJhY2tzJyBmaWxlPSd4bWxJTycgbW9kdWxlPSd4bWxJTyc+CkBAIC04OTM2LDcgKzg4MzgsNyBAQAogICAgICAgPGluZm8+Y2xlYXJzIHRoZSBlbnRpcmUgb3V0cHV0IGNhbGxiYWNrIHRhYmxlLiB0aGlzIGluY2x1ZGVzIHRoZSBjb21waWxlZC1pbiBJL08gY2FsbGJhY2tzLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbENsZWFudXBQYXJzZXInIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDbGVhbnVwUGFyc2VyJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ndGhyZWFkcyc+CiAgICAgICA8aW5mbz5UaGlzIGZ1bmN0aW9uIG5hbWUgaXMgc29tZXdoYXQgbWlzbGVhZGluZy4gSXQgZG9lcyBub3QgY2xlYW4gdXAgcGFyc2VyIHN0YXRlLCBpdCBjbGVhbnMgdXAgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgbGlicmFyeSBpdHNlbGYuIEl0IGlzIGEgY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LiBJdCB0cmllcyB0byByZWNsYWltIGFsbCByZWxhdGVkIGdsb2JhbCBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgbGlicmFyeSBwcm9jZXNzaW5nLiBJdCBkb2VzbiZhcG9zO3QgZGVhbGxvY2F0ZSBhbnkgZG9jdW1lbnQgcmVsYXRlZCBtZW1vcnkuIE9uZSBzaG91bGQgY2FsbCB4bWxDbGVhbnVwUGFyc2VyKCkgb25seSB3aGVuIHRoZSBwcm9jZXNzIGhhcyBmaW5pc2hlZCB1c2luZyB0aGUgbGlicmFyeSBhbmQgYWxsIFhNTC9IVE1MIGRvY3VtZW50cyBidWlsdCB3aXRoIGl0LiBTZWUgYWxzbyB4bWxJbml0UGFyc2VyKCkgd2hpY2ggaGFzIHRoZSBvcHBvc2l0ZSBmdW5jdGlvbiBvZiBwcmVwYXJpbmcgdGhlIGxpYnJhcnkgZm9yIG9wZXJhdGlvbnMuICBXQVJOSU5HOiBpZiB5b3VyIGFwcGxpY2F0aW9uIGlzIG11bHRpdGhyZWFkZWQgb3IgaGFzIHBsdWdpbiBzdXBwb3J0IGNhbGxpbmcgdGhpcyBtYXkgY3Jhc2ggdGhlIGFwcGxpY2F0aW9uIGlmIGFub3RoZXIgdGhyZWFkIG9yIGEgcGx1Z2luIGlzIHN0aWxsIHVzaW5nIGxpYnhtbDIuIEl0JmFwb3M7cyBzb21ldGltZXMgdmVyeSBoYXJkIHRvIGd1ZXNzIGlmIGxpYnhtbDIgaXMgaW4gdXNlIGluIHRoZSBhcHBsaWNhdGlvbiwgc29tZSBsaWJyYXJpZXMgb3IgcGx1Z2lucyBtYXkgdXNlIGl0IHdpdGhvdXQgbm90aWNlLiBJbiBjYXNlIG9mIGRvdWJ0IGFic3RhaW4gZnJvbSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gb3IgZG8gaXQganVzdCBiZWZvcmUgY2FsbGluZyBleGl0KCkgdG8gYXZvaWQgbGVhayByZXBvcnRzIGZyb20gdmFsZ3JpbmQgITwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CkBAIC04OTQ2LDExICs4ODQ4LDExIEBACiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDbGVhbnVwVGhyZWFkcycgZmlsZT0ndGhyZWFkcycgbW9kdWxlPSd0aHJlYWRzJz4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sQ2xlYW51cFBhcnNlciB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlciBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24mYXBvczt0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuICB4bWxDbGVhbnVwVGhyZWFkcygpIGlzIHVzZWQgdG8gdG8gY2xlYW51cCBhbGwgdGhlIHRocmVhZCByZWxhdGVkIGRhdGEgb2YgdGhlIGxpYnhtbDIgbGlicmFyeSBvbmNlIHByb2Nlc3NpbmcgaGFzIGVuZGVkLiAgV0FSTklORzogaWYgeW91ciBhcHBsaWNhdGlvbiBpcyBtdWx0aXRocmVhZGVkIG9yIGhhcyBwbHVnaW4gc3VwcG9ydCBjYWxsaW5nIHRoaXMgbWF5IGNyYXNoIHRoZSBhcHBsaWNhdGlvbiBpZiBhbm90aGVyIHRocmVhZCBvciBhIHBsdWdpbiBpcyBzdGlsbCB1c2luZyBsaWJ4bWwyLiBJdCZhcG9zO3Mgc29tZXRpbWVzIHZlcnkgaGFyZCB0byBndWVzcyBpZiBsaWJ4bWwyIGlzIGluIHVzZSBpbiB0aGUgYXBwbGljYXRpb24sIHNvbWUgbGlicmFyaWVzIG9yIHBsdWdpbnMgbWF5IHVzZSBpdCB3aXRob3V0IG5vdGljZS4gSW4gY2FzZSBvZiBkb3VidCBhYnN0YWluIGZyb20gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9yIGRvIGl0IGp1c3QgYmVmb3JlIGNhbGxpbmcgZXhpdCgpIHRvIGF2b2lkIGxlYWsgcmVwb3J0cyBmcm9tIHZhbGdyaW5kICE8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIGlzIGEgbm8tb3AuIENhbGwgeG1sQ2xlYW51cFBhcnNlciB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlciBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24mYXBvczt0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ2xlYXJOb2RlSW5mb1NlcScgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz4tLSBDbGVhciAocmVsZWFzZSBtZW1vcnkgYW5kIHJlaW5pdGlhbGl6ZSkgbm9kZSBpbmZvIHNlcXVlbmNlPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogRG9uJmFwb3M7dCB1c2UuICAtLSBDbGVhciAocmVsZWFzZSBtZW1vcnkgYW5kIHJlaW5pdGlhbGl6ZSkgbm9kZSBpbmZvIHNlcXVlbmNlPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J3NlcScgdHlwZT0neG1sUGFyc2VyTm9kZUluZm9TZXFQdHInIGluZm89J2Egbm9kZSBpbmZvIHNlcXVlbmNlIHBvaW50ZXInLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtOTAyOSw3ICs4OTMxLDcgQEAKICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ29weUVycm9yJyBmaWxlPSd4bWxlcnJvcicgbW9kdWxlPSdlcnJvcic+CiAgICAgICA8aW5mbz5TYXZlIHRoZSBvcmlnaW5hbCBlcnJvciB0byB0aGUgbmV3IHBsYWNlLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KLSAgICAgIDxhcmcgbmFtZT0nZnJvbScgdHlwZT0neG1sRXJyb3JQdHInIGluZm89J2Egc291cmNlIGVycm9yJy8+CisgICAgICA8YXJnIG5hbWU9J2Zyb20nIHR5cGU9J2NvbnN0IHhtbEVycm9yIConIGluZm89J2Egc291cmNlIGVycm9yJy8+CiAgICAgICA8YXJnIG5hbWU9J3RvJyB0eXBlPSd4bWxFcnJvclB0cicgaW5mbz0nYSB0YXJnZXQgZXJyb3InLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDb3B5TmFtZXNwYWNlJyBmaWxlPSd0cmVlJyBtb2R1bGU9J3RyZWUnPgpAQCAtOTA3NCw3ICs4OTc2LDcgQEAKICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCcgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlcic+CiAgICAgICA8aW5mbz5DcmVhdGVzIGEgcGFyc2VyIGNvbnRleHQgZm9yIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSd0aGUgbmV3IHBhcnNlciBjb250ZXh0IG9yIE5VTEwnLz4KLSAgICAgIDxhcmcgbmFtZT0nY3VyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J2EgcG9pbnRlciB0byBhbiBhcnJheSBvZiB4bWxDaGFyJy8+CisgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgeG1sQ2hhcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbENyZWF0ZUVudGl0aWVzVGFibGUnIGZpbGU9J2VudGl0aWVzJyBtb2R1bGU9J2VudGl0aWVzJz4KICAgICAgIDxpbmZvPmNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBlbXB0eSBlbnRpdGllcyBoYXNoIHRhYmxlLiBUaGlzIHJlYWxseSBkb2VzbiZhcG9zO3QgbWFrZSBzZW5zZSBhbmQgc2hvdWxkIGJlIGRlcHJlY2F0ZWQ8L2luZm8+CkBAIC05MTQzLDE0ICs5MDQ1LDE0IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ3R4dEdldExhc3RFcnJvcicgZmlsZT0neG1sZXJyb3InIG1vZHVsZT0nZXJyb3InPgogICAgICAgPGluZm8+R2V0IHRoZSBsYXN0IHBhcnNpbmcgZXJyb3IgcmVnaXN0ZXJlZC48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J3htbEVycm9yUHRyJyBpbmZvPSdOVUxMIGlmIG5vIGVycm9yIG9jY3VycmVkIG9yIGEgcG9pbnRlciB0byB0aGUgZXJyb3InLz4KKyAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgeG1sRXJyb3IgKicgaW5mbz0nTlVMTCBpZiBubyBlcnJvciBvY2N1cnJlZCBvciBhIHBvaW50ZXIgdG8gdGhlIGVycm9yJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eCcgdHlwZT0ndm9pZCAqJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDdHh0UmVhZERvYycgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlcic+CiAgICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50IGFuZCBidWlsZCBhIHRyZWUuIFRoaXMgcmV1c2VzIHRoZSBleGlzdGluZyBAY3R4dCBwYXJzZXIgY29udGV4dDwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sRG9jUHRyJyBpbmZvPSd0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+Ci0gICAgICA8YXJnIG5hbWU9J2N1cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nJy8+CisgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nJy8+CiAgICAgICA8YXJnIG5hbWU9J1VSTCcgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgYmFzZSBVUkwgdG8gdXNlIGZvciB0aGUgZG9jdW1lbnQnLz4KICAgICAgIDxhcmcgbmFtZT0nZW5jb2RpbmcnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0ndGhlIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMJy8+CiAgICAgICA8YXJnIG5hbWU9J29wdGlvbnMnIHR5cGU9J2ludCcgaW5mbz0nYSBjb21iaW5hdGlvbiBvZiB4bWxQYXJzZXJPcHRpb24nLz4KQEAgLTkyMTIsNiArOTExNCwxMiBAQAogICAgICAgPGFyZyBuYW1lPSdmaWxlbmFtZScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSdhbiBvcHRpb25hbCBmaWxlIG5hbWUgb3IgVVJJJy8+CiAgICAgICA8YXJnIG5hbWU9J2VuY29kaW5nJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBkb2N1bWVudCBlbmNvZGluZywgb3IgTlVMTCcvPgogICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KKyAgICAgIDxpbmZvPlRvIHByb3RlY3QgYWdhaW5zdCBleHBvbmVudGlhbCBlbnRpdHkgZXhwYW5zaW9uICgmcXVvdDtiaWxsaW9uIGxhdWdocyZxdW90OyksIHRoZSBzaXplIG9mIHNlcmlhbGl6ZWQgb3V0cHV0IGlzIChyb3VnaGx5KSBsaW1pdGVkIHRvIHRoZSBpbnB1dCBzaXplIG11bHRpcGxpZWQgYnkgdGhpcyBmYWN0b3IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuICBXaGVuIHdvcmtpbmcgd2l0aCBkb2N1bWVudHMgbWFraW5nIGhlYXZ5IHVzZSBvZiBlbnRpdHkgZXhwYW5zaW9uLCBpdCBjYW4gYmUgbmVjZXNzYXJ5IHRvIGluY3JlYXNlIHRoZSB2YWx1ZS4gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCB3aGVuIHByb2Nlc3NpbmcgdHJ1c3RlZCBpbnB1dC48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KKyAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CisgICAgICA8YXJnIG5hbWU9J21heEFtcGwnIHR5cGU9J3Vuc2lnbmVkJyBpbmZvPSdtYXhpbXVtIGFtcGxpZmljYXRpb24gZmFjdG9yJy8+CisgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sQ3R4dFVzZU9wdGlvbnMnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGluZm8+QXBwbGllcyB0aGUgb3B0aW9ucyB0byB0aGUgcGFyc2VyIGNvbnRleHQ8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSBzZXQgb2YgdW5rbm93biBvciB1bmltcGxlbWVudGVkIG9wdGlvbnMgaW4gY2FzZSBvZiBlcnJvci4nLz4KQEAgLTkyMTksNyArOTEyNyw3IEBACiAgICAgICA8YXJnIG5hbWU9J29wdGlvbnMnIHR5cGU9J2ludCcgaW5mbz0nYSBjb21iaW5hdGlvbiBvZiB4bWxQYXJzZXJPcHRpb24nLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxDdXJyZW50Q2hhcicgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5UaGUgY3VycmVudCBjaGFyIHZhbHVlLCBpZiB1c2luZyBVVEYtOCB0aGlzIG1heSBhY3R1YWxseSBzcGFuIG11bHRpcGxlIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuIEltcGxlbWVudCB0aGUgZW5kIG9mIGxpbmUgbm9ybWFsaXphdGlvbjogMi4xMSBFbmQtb2YtTGluZSBIYW5kbGluZyBXaGVyZXZlciBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IG9yIHRoZSBsaXRlcmFsIGVudGl0eSB2YWx1ZSBvZiBhbiBpbnRlcm5hbCBwYXJzZWQgZW50aXR5IGNvbnRhaW5zIGVpdGhlciB0aGUgbGl0ZXJhbCB0d28tY2hhcmFjdGVyIHNlcXVlbmNlICZxdW90OyN4RCN4QSZxdW90OyBvciBhIHN0YW5kYWxvbmUgbGl0ZXJhbCAjeEQsIGFuIFhNTCBwcm9jZXNzb3IgbXVzdCBwYXNzIHRvIHRoZSBhcHBsaWNhdGlvbiB0aGUgc2luZ2xlIGNoYXJhY3RlciAjeEEuIFRoaXMgYmVoYXZpb3IgY2FuIGNvbnZlbmllbnRseSBiZSBwcm9kdWNlZCBieSBub3JtYWxpemluZyBhbGwgbGluZSBicmVha3MgdG8gI3hBIG9uIGlucHV0LCBiZWZvcmUgcGFyc2luZy4pPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICBUaGUgY3VycmVudCBjaGFyIHZhbHVlLCBpZiB1c2luZyBVVEYtOCB0aGlzIG1heSBhY3R1YWxseSBzcGFuIG11bHRpcGxlIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuIEltcGxlbWVudCB0aGUgZW5kIG9mIGxpbmUgbm9ybWFsaXphdGlvbjogMi4xMSBFbmQtb2YtTGluZSBIYW5kbGluZyBXaGVyZXZlciBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IG9yIHRoZSBsaXRlcmFsIGVudGl0eSB2YWx1ZSBvZiBhbiBpbnRlcm5hbCBwYXJzZWQgZW50aXR5IGNvbnRhaW5zIGVpdGhlciB0aGUgbGl0ZXJhbCB0d28tY2hhcmFjdGVyIHNlcXVlbmNlICZxdW90OyN4RCN4QSZxdW90OyBvciBhIHN0YW5kYWxvbmUgbGl0ZXJhbCAjeEQsIGFuIFhNTCBwcm9jZXNzb3IgbXVzdCBwYXNzIHRvIHRoZSBhcHBsaWNhdGlvbiB0aGUgc2luZ2xlIGNoYXJhY3RlciAjeEEuIFRoaXMgYmVoYXZpb3IgY2FuIGNvbnZlbmllbnRseSBiZSBwcm9kdWNlZCBieSBub3JtYWxpemluZyBhbGwgbGluZSBicmVha3MgdG8gI3hBIG9uIGlucHV0LCBiZWZvcmUgcGFyc2luZy4pPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBjdXJyZW50IGNoYXIgdmFsdWUgYW5kIGl0cyBsZW5ndGgnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSdsZW4nIHR5cGU9J2ludCAqJyBpbmZvPSdwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNoYXIgcmVhZCcvPgpAQCAtOTM3Miw3ICs5MjgwLDcgQEAKICAgICAgIDxhcmcgbmFtZT0nZW5kMycgdHlwZT0neG1sQ2hhcicgaW5mbz0nYW4gZW5kIG1hcmtlciB4bWxDaGFyLCAwIGlmIG5vbmUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxEZWZhdWx0U0FYSGFuZGxlckluaXQnIGZpbGU9J1NBWDInIG1vZHVsZT0nU0FYMic+Ci0gICAgICA8aW5mbz5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIHhtbEluaXRQYXJzZXIgdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4gIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgU0FYMiBoYW5kbGVyPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIHhtbEluaXRQYXJzZXIgdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4gIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgU0FYMiBoYW5kbGVyPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sRGVsRW5jb2RpbmdBbGlhcycgZmlsZT0nZW5jb2RpbmcnIG1vZHVsZT0nZW5jb2RpbmcnPgpAQCAtOTM4MCwxMiArOTI4OCwxMiBAQAogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBpbiBjYXNlIG9mIGVycm9yJy8+CiAgICAgICA8YXJnIG5hbWU9J2FsaWFzJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBhbGlhcyBuYW1lIGFzIHBhcnNlZCwgaW4gVVRGLTggZm9ybWF0IChBU0NJSSBhY3R1YWxseSknLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0ndHJlZScgbW9kdWxlPSd0cmVlJz4KICAgICAgIDxpbmZvPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGRlc3RydWN0aW9uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMnIGluZm89J3RoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24nLz4KICAgICAgIDxhcmcgbmFtZT0nZnVuYycgdHlwZT0neG1sRGVyZWdpc3Rlck5vZGVGdW5jJyBpbmZvPSdmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgRGVyZWdpc3Rlck5vZGVGdW5jJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3R5cGUgbmFtZT0neG1sRGVyZWdpc3Rlck5vZGVGdW5jJyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMnIGZpbGU9J3RyZWUnIG1vZHVsZT0ndHJlZSc+CiAgICAgICA8aW5mbz5TaWduYXR1cmUgZm9yIHRoZSBkZXJlZ2lzdHJhdGlvbiBjYWxsYmFjayBvZiBhIGRpc2NhcmRlZCBub2RlPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J25vZGUnIHR5cGU9J3htbE5vZGVQdHInIGluZm89J3RoZSBjdXJyZW50IG5vZGUnLz4KQEAgLTkzOTcsNyArOTMwNSw3IEBACiAgICAgICA8YXJnIG5hbWU9J2xlbicgdHlwZT0naW50JyBpbmZvPSdwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbERpY3RDbGVhbnVwJyBmaWxlPSdkaWN0JyBtb2R1bGU9J2RpY3QnPgotICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxDbGVhbnVwUGFyc2VyIHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiB4bWxDbGVhbnVwUGFyc2VyIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbiZhcG9zO3QgaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC4gIEZyZWUgdGhlIGRpY3Rpb25hcnkgbXV0ZXguIERvIG5vdCBjYWxsIHVubGVzcyBzdXJlIHRoZSBsaWJyYXJ5IGlzIG5vdCBpbiB1c2UgYW55bW9yZSAhPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIHhtbENsZWFudXBQYXJzZXIgdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIHhtbENsZWFudXBQYXJzZXIgc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJmFwb3M7dCBoYXZlIGNhbGwgY2xlYW51cCBmdW5jdGlvbnMgYXQgYWxsLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbERpY3RDcmVhdGUnIGZpbGU9J2RpY3QnIG1vZHVsZT0nZGljdCc+CkBAIC05NDEwLDcgKzkzMTgsNyBAQAogICAgICAgPGFyZyBuYW1lPSdzdWInIHR5cGU9J3htbERpY3RQdHInIGluZm89J2FuIGV4aXN0aW5nIGRpY3Rpb25hcnknLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxEaWN0RXhpc3RzJyBmaWxlPSdkaWN0JyBtb2R1bGU9J2RpY3QnPgotICAgICAgPGluZm8+Q2hlY2sgaWYgdGhlIEBuYW1lIGV4aXN0cyBpbiB0aGUgZGljdGlvbmFyeSBAZGljdC48L2luZm8+CisgICAgICA8aW5mbz5DaGVjayBpZiBhIHN0cmluZyBleGlzdHMgaW4gdGhlIGRpY3Rpb25hcnkuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBpbnRlcm5hbCBjb3B5IG9mIHRoZSBuYW1lIG9yIE5VTEwgaWYgbm90IGZvdW5kLicvPgogICAgICAgPGFyZyBuYW1lPSdkaWN0JyB0eXBlPSd4bWxEaWN0UHRyJyBpbmZvPSd0aGUgZGljdGlvbmFyeScvPgogICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgpAQCAtOTQyNywxMSArOTMzNSwxMSBAQAogICAgICAgPGFyZyBuYW1lPSdkaWN0JyB0eXBlPSd4bWxEaWN0UHRyJyBpbmZvPSd0aGUgZGljdGlvbmFyeScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbERpY3RMb29rdXAnIGZpbGU9J2RpY3QnIG1vZHVsZT0nZGljdCc+Ci0gICAgICA8aW5mbz5BZGQgdGhlIEBuYW1lIHRvIHRoZSBkaWN0aW9uYXJ5IEBkaWN0IGlmIG5vdCBwcmVzZW50LjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgaW50ZXJuYWwgY29weSBvZiB0aGUgbmFtZSBvciBOVUxMIGluIGNhc2Ugb2YgaW50ZXJuYWwgZXJyb3InLz4KLSAgICAgIDxhcmcgbmFtZT0nZGljdCcgdHlwZT0neG1sRGljdFB0cicgaW5mbz0ndGhlIGRpY3Rpb25hcnknLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbGVuJyB0eXBlPSdpbnQnIGluZm89J3RoZSBsZW5ndGggb2YgdGhlIG5hbWUsIGlmIC0xIGl0IGlzIHJlY29tcHV0ZWQnLz4KKyAgICAgIDxpbmZvPkxvb2t1cCBhIHN0cmluZyBhbmQgYWRkIGl0IHRvIHRoZSBkaWN0aW9uYXJ5IGlmIGl0IHdhc24mYXBvczt0IGZvdW5kLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgaW50ZXJuZWQgY29weSBvZiB0aGUgc3RyaW5nIG9yIE5VTEwgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuJy8+CisgICAgICA8YXJnIG5hbWU9J2RpY3QnIHR5cGU9J3htbERpY3RQdHInIGluZm89J2RpY3Rpb25hcnknLz4KKyAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2xlbicgdHlwZT0naW50JyBpbmZvPSdsZW5ndGggb2YgdGhlIGtleSwgaWYgLTEgaXQgaXMgcmVjb21wdXRlZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbERpY3RPd25zJyBmaWxlPSdkaWN0JyBtb2R1bGU9J2RpY3QnPgogICAgICAgPGluZm8+Y2hlY2sgaWYgYSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlIGRpY3Rpb25hcnk8L2luZm8+CkBAIC05NDQwLDggKzkzNDgsOCBAQAogICAgICAgPGFyZyBuYW1lPSdzdHInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHN0cmluZycvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbERpY3RRTG9va3VwJyBmaWxlPSdkaWN0JyBtb2R1bGU9J2RpY3QnPgotICAgICAgPGluZm8+QWRkIHRoZSBRTmFtZSBAcHJlZml4OkBuYW1lIHRvIHRoZSBoYXNoIEBkaWN0IGlmIG5vdCBwcmVzZW50LjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgaW50ZXJuYWwgY29weSBvZiB0aGUgUU5hbWUgb3IgTlVMTCBpbiBjYXNlIG9mIGludGVybmFsIGVycm9yJy8+CisgICAgICA8aW5mbz5Mb29rdXAgdGhlIFFOYW1lIEBwcmVmaXg6QG5hbWUgYW5kIGFkZCBpdCB0byB0aGUgZGljdGlvbmFyeSBpZiBpdCB3YXNuJmFwb3M7dCBmb3VuZC48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIGludGVybmVkIGNvcHkgb2YgdGhlIHN0cmluZyBvciBOVUxMIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLicvPgogICAgICAgPGFyZyBuYW1lPSdkaWN0JyB0eXBlPSd4bWxEaWN0UHRyJyBpbmZvPSd0aGUgZGljdGlvbmFyeScvPgogICAgICAgPGFyZyBuYW1lPSdwcmVmaXgnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHByZWZpeCcvPgogICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lJy8+CkBAIC05NDYyLDEzICs5MzcwLDYgQEAKICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkaWN0aW9uYXJ5IG9yIC0xIGluIGNhc2Ugb2YgZXJyb3InLz4KICAgICAgIDxhcmcgbmFtZT0nZGljdCcgdHlwZT0neG1sRGljdFB0cicgaW5mbz0ndGhlIGRpY3Rpb25hcnknLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxEbGxNYWluJyBmaWxlPSd0aHJlYWRzJyBtb2R1bGU9J3RocmVhZHMnPgotICAgICAgPGluZm8+PC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgotICAgICAgPGFyZyBuYW1lPSdoaW5zdERMTCcgdHlwZT0ndm9pZCAqJyBpbmZvPScnLz4KLSAgICAgIDxhcmcgbmFtZT0nZmR3UmVhc29uJyB0eXBlPSd1bnNpZ25lZCBsb25nJyBpbmZvPScnLz4KLSAgICAgIDxhcmcgbmFtZT0nbHB2UmVzZXJ2ZWQnIHR5cGU9J3ZvaWQgKicgaW5mbz0nJy8+Ci0gICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sRG9jQ29weU5vZGUnIGZpbGU9J3RyZWUnIG1vZHVsZT0ndHJlZSc+CiAgICAgICA8aW5mbz5EbyBhIGNvcHkgb2YgdGhlIG5vZGUgdG8gYSBnaXZlbiBkb2N1bWVudC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbE5vZGVQdHInIGluZm89J2EgbmV3ICN4bWxOb2RlUHRyLCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuJy8+CkBAIC05NjM2LDEyICs5NTM3LDYgQEAKICAgICAgIDxhcmcgbmFtZT0nZmlyc3ROb2RlJyB0eXBlPSd4bWxOb2RlUHRyJyBpbmZvPSd0aGUgZmlzdCBub2RlIGluIHRoZSBjaHVuaycvPgogICAgICAgPGFyZyBuYW1lPSdsYXN0Tm9kZScgdHlwZT0neG1sTm9kZVB0cicgaW5mbz0ndGhlIGxhc3Qgbm9kIGluIHRoZSBjaHVuaycvPgogICAgIDwvZnVuY3R5cGU+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbEVyck1lbW9yeScgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5IYW5kbGUgYSByZWRlZmluaXRpb24gb2YgYXR0cmlidXRlIGVycm9yPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+Ci0gICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgotICAgICAgPGFyZyBuYW1lPSdleHRyYScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSdleHRyYSBpbmZvcm1hdGlvbicvPgotICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEV4cEN0eHROYkNvbnMnIGZpbGU9J3htbHJlZ2V4cCcgbW9kdWxlPSd4bWxyZWdleHAnPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfUkVHRVhQX0VOQUJMRUQpICZhbXA7JmFtcDsgZGVmaW5lZChMSUJYTUxfRVhQUl9FTkFCTEVEKTwvY29uZD4KICAgICAgIDxpbmZvPkRlYnVnZ2luZyBmYWNpbGl0eSBwcm92aWRlcyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBub2RlcyBvdmVyIGxpZmV0aW1lPC9pbmZvPgpAQCAtOTgxMiw3ICs5NzA3LDcgQEAKICAgICAgIDxhcmcgbmFtZT0nbGVuJyB0eXBlPSdpbnQnIGluZm89J251bWJlciBvZiBieXRlcyB0byB3cml0ZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyJyBmaWxlPSdlbmNvZGluZycgbW9kdWxlPSdlbmNvZGluZyc+Ci0gICAgICA8aW5mbz5TZWFyY2ggaW4gdGhlIHJlZ2lzdGVyZWQgc2V0IHRoZSBoYW5kbGVyIGFibGUgdG8gcmVhZC93cml0ZSB0aGF0IGVuY29kaW5nLjwvaW5mbz4KKyAgICAgIDxpbmZvPlNlYXJjaCBpbiB0aGUgcmVnaXN0ZXJlZCBzZXQgdGhlIGhhbmRsZXIgYWJsZSB0byByZWFkL3dyaXRlIHRoYXQgZW5jb2Rpbmcgb3IgY3JlYXRlIGEgbmV3IG9uZS48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHInIGluZm89J3RoZSBoYW5kbGVyIG9yIE5VTEwgaWYgbm90IGZvdW5kJy8+CiAgICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2hhciBlbmNvZGluZy4nLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtOTg3MCw2ICs5NzY1LDExIEBACiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEVudGl0aWVzVGFibGVQdHInIGluZm89J0FuIGVudGl0eSB0YWJsZScvPgogICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEZyZWVFbnRpdHknIGZpbGU9J2VudGl0aWVzJyBtb2R1bGU9J2VudGl0aWVzJz4KKyAgICAgIDxpbmZvPjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgorICAgICAgPGFyZyBuYW1lPSdlbnRpdHknIHR5cGU9J3htbEVudGl0eVB0cicgaW5mbz0nJy8+CisgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sRnJlZUVudW1lcmF0aW9uJyBmaWxlPSd2YWxpZCcgbW9kdWxlPSd2YWxpZCc+CiAgICAgICA8aW5mbz5mcmVlIGFuIGVudW1lcmF0aW9uIGF0dHJpYnV0ZSBub2RlIChyZWN1cnNpdmUpLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgpAQCAtOTg5MSw3ICs5NzkxLDcgQEAKICAgICAgIDxhcmcgbmFtZT0naW5wdXQnIHR5cGU9J3htbFBhcnNlcklucHV0UHRyJyBpbmZvPSdhbiB4bWxQYXJzZXJJbnB1dFB0cicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEZyZWVNdXRleCcgZmlsZT0ndGhyZWFkcycgbW9kdWxlPSd0aHJlYWRzJz4KLSAgICAgIDxpbmZvPnhtbEZyZWVNdXRleCgpIGlzIHVzZWQgdG8gcmVjbGFpbSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbGlieG1sMiB0b2tlbiBzdHJ1Y3QuPC9pbmZvPgorICAgICAgPGluZm8+RnJlZSBhIG11dGV4LjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSd0b2snIHR5cGU9J3htbE11dGV4UHRyJyBpbmZvPSd0aGUgc2ltcGxlIG11dGV4Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTEwMTA5LDkgKzEwMDA5LDkgQEAKICAgICAgIDxhcmcgbmFtZT0nbGVuJyB0eXBlPSdpbnQgKicgaW5mbz0ndGhlIGxlbmd0aCBvZiB0aGUgZmVhdHVyZXMgbmFtZSBhcnJheSAoaW5wdXQvb3V0cHV0KScvPgogICAgICAgPGFyZyBuYW1lPSdyZXN1bHQnIHR5cGU9J2NvbnN0IGNoYXIgKionIGluZm89J2FuIGFycmF5IG9mIHN0cmluZyB0byBiZSBmaWxsZWQgd2l0aCB0aGUgZmVhdHVyZXMgbmFtZS4nLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxHZXRHbG9iYWxTdGF0ZScgZmlsZT0ndGhyZWFkcycgbW9kdWxlPSd0aHJlYWRzJz4KLSAgICAgIDxpbmZvPnhtbEdldEdsb2JhbFN0YXRlKCkgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgdGhyZWFkLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0neG1sR2xvYmFsU3RhdGVQdHInIGluZm89J3RoZSB0aHJlYWQgZ2xvYmFsIHN0YXRlIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvcicvPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxHZXRHbG9iYWxTdGF0ZScgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ8L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3htbEdsb2JhbFN0YXRlUHRyJyBpbmZvPSdOVUxMLicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEdldElEJyBmaWxlPSd2YWxpZCcgbW9kdWxlPSd2YWxpZCc+CiAgICAgICA8aW5mbz5TZWFyY2ggdGhlIGF0dHJpYnV0ZSBkZWNsYXJpbmcgdGhlIGdpdmVuIElEPC9pbmZvPgpAQCAtMTAxMzEsNyArMTAwMzEsNyBAQAogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEdldExhc3RFcnJvcicgZmlsZT0neG1sZXJyb3InIG1vZHVsZT0nZXJyb3InPgogICAgICAgPGluZm8+R2V0IHRoZSBsYXN0IGdsb2JhbCBlcnJvciByZWdpc3RlcmVkLiBUaGlzIGlzIHBlciB0aHJlYWQgaWYgY29tcGlsZWQgd2l0aCB0aHJlYWQgc3VwcG9ydC48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J3htbEVycm9yUHRyJyBpbmZvPSdOVUxMIGlmIG5vIGVycm9yIG9jY3VycmVkIG9yIGEgcG9pbnRlciB0byB0aGUgZXJyb3InLz4KKyAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgeG1sRXJyb3IgKicgaW5mbz0nYSBwb2ludGVyIHRvIHRoZSBlcnJvcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEdldExpbmVObycgZmlsZT0ndHJlZScgbW9kdWxlPSd0cmVlJz4KICAgICAgIDxpbmZvPkdldCBsaW5lIG51bWJlciBvZiBAbm9kZS4gVHJ5IHRvIG92ZXJyaWRlIHRoZSBsaW1pdGF0aW9uIG9mIGxpbmVzIGJlaW5nIHN0b3JlIGluIDE2IGJpdHMgaW50cyBpZiBYTUxfUEFSU0VfQklHX0xJTkVTIHBhcnNlciBvcHRpb24gd2FzIHVzZWQ8L2luZm8+CkBAIC0xMDE4OCw3ICsxMDA4OCw3IEBACiAgICAgICA8YXJnIG5hbWU9J0lEJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBJRCB2YWx1ZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEdldFRocmVhZElkJyBmaWxlPSd0aHJlYWRzJyBtb2R1bGU9J3RocmVhZHMnPgotICAgICAgPGluZm8+eG1sR2V0VGhyZWFkSWQoKSBmaW5kIHRoZSBjdXJyZW50IHRocmVhZCBJRCBudW1iZXIgTm90ZSB0aGF0IHRoaXMgaXMgbGlrZWx5IHRvIGJlIGJyb2tlbiBvbiBzb21lIHBsYXRmb3JtcyB1c2luZyBwdGhyZWFkcyBhcyB0aGUgc3BlY2lmaWNhdGlvbiBkb2VzbiZhcG9zO3QgbWFuZGF0ZSBwdGhyZWFkX3QgdG8gYmUgYW4gaW50ZWdlciB0eXBlPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICB4bWxHZXRUaHJlYWRJZCgpIGZpbmQgdGhlIGN1cnJlbnQgdGhyZWFkIElEIG51bWJlciBOb3RlIHRoYXQgdGhpcyBpcyBsaWtlbHkgdG8gYmUgYnJva2VuIG9uIHNvbWUgcGxhdGZvcm1zIHVzaW5nIHB0aHJlYWRzIGFzIHRoZSBzcGVjaWZpY2F0aW9uIGRvZXNuJmFwb3M7dCBtYW5kYXRlIHB0aHJlYWRfdCB0byBiZSBhbiBpbnRlZ2VyIHR5cGU8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIGN1cnJlbnQgdGhyZWFkIElEIG51bWJlcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEdldFVURjhDaGFyJyBmaWxlPSd4bWxzdHJpbmcnIG1vZHVsZT0neG1sc3RyaW5nJz4KQEAgLTEwMjIzLDI4ICsxMDEyMywyOCBAQAogICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBhdHRyaWJ1dGUgbmFtZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hBZGRFbnRyeScgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPkFkZCB0aGUgQHVzZXJkYXRhIHRvIHRoZSBoYXNoIEB0YWJsZS4gVGhpcyBjYW4gbGF0ZXIgYmUgcmV0cmlldmVkIGJ5IHVzaW5nIHRoZSBAbmFtZS4gRHVwbGljYXRlIG5hbWVzIGdlbmVyYXRlIGVycm9ycy48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCB0aGUgYWRkaXRpb24gc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLicvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSd1c2VyZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhJy8+CisgICAgICA8aW5mbz5BZGQgYSBoYXNoIHRhYmxlIGVudHJ5LiBJZiBhbiBlbnRyeSB3aXRoIHRoaXMga2V5IGFscmVhZHkgZXhpc3RzLCBwYXlsb2FkIHdpbGwgbm90IGJlIHVwZGF0ZWQgYW5kIC0xIGlzIHJldHVybmVkLiBUaGlzIHJldHVybiB2YWx1ZSBjYW4mYXBvczt0IGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBvdXQtb2YtbWVtb3J5IGVycm9ycywgc28gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J3BheWxvYWQnIHR5cGU9J3ZvaWQgKicgaW5mbz0ncG9pbnRlciB0byB0aGUgcGF5bG9hZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hBZGRFbnRyeTInIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlLiBEdXBsaWNhdGUgdHVwbGVzIGdlbmVyYXRlIGVycm9ycy48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCB0aGUgYWRkaXRpb24gc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLicvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSd1c2VyZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhJy8+CisgICAgICA8aW5mbz5BZGQgYSBoYXNoIHRhYmxlIGVudHJ5IHdpdGggdHdvIHN0cmluZ3MgYXMga2V5LiAgU2VlIHhtbEhhc2hBZGRFbnRyeS48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5JyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J2ZpcnN0IHN0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5MicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdzZWNvbmQgc3RyaW5nIGtleScvPgorICAgICAgPGFyZyBuYW1lPSdwYXlsb2FkJyB0eXBlPSd2b2lkIConIGluZm89J3BvaW50ZXIgdG8gdGhlIHBheWxvYWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoQWRkRW50cnkzJyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgotICAgICAgPGluZm8+QWRkIHRoZSBAdXNlcmRhdGEgdG8gdGhlIGhhc2ggQHRhYmxlLiBUaGlzIGNhbiBsYXRlciBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGhlIHR1cGxlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpLiBEdXBsaWNhdGUgZW50cmllcyBnZW5lcmF0ZSBlcnJvcnMuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KLSAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIGhhc2ggdGFibGUnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTMnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSd1c2VyZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhJy8+CisgICAgICA8aW5mbz5BZGQgYSBoYXNoIHRhYmxlIGVudHJ5IHdpdGggdGhyZWUgc3RyaW5ncyBhcyBrZXkuICBTZWUgeG1sSGFzaEFkZEVudHJ5LjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgorICAgICAgPGFyZyBuYW1lPSdrZXknIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nZmlyc3Qgc3RyaW5nIGtleScvPgorICAgICAgPGFyZyBuYW1lPSdrZXkyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3NlY29uZCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleTMnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhpcmQgc3RyaW5nIGtleScvPgorICAgICAgPGFyZyBuYW1lPSdwYXlsb2FkJyB0eXBlPSd2b2lkIConIGluZm89J3BvaW50ZXIgdG8gdGhlIHBheWxvYWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxIYXNoQ29waWVyJyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgogICAgICAgPGluZm8+Q2FsbGJhY2sgdG8gY29weSBkYXRhIGZyb20gYSBoYXNoLjwvaW5mbz4KQEAgLTEwMjUzLDE5ICsxMDE1MywxOSBAQAogICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIGFzc29jaWF0ZWQnLz4KICAgICA8L2Z1bmN0eXBlPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoQ29weScgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBsaWVkIEBmIHRvIGVhY2ggdmFsdWUuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBuZXcgdGFibGUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLicvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSdmJyB0eXBlPSd4bWxIYXNoQ29waWVyJyBpbmZvPSd0aGUgY29waWVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaCcvPgorICAgICAgPGluZm8+Q29weSB0aGUgaGFzaCBAdGFibGUgdXNpbmcgQGNvcHkgdG8gY29weSBwYXlsb2Fkcy48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIG5ldyB0YWJsZSBvciBOVUxMIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0nY29weScgdHlwZT0neG1sSGFzaENvcGllcicgaW5mbz0nY29waWVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hDcmVhdGUnIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5DcmVhdGUgYSBuZXcgeG1sSGFzaFRhYmxlUHRyLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuJy8+Ci0gICAgICA8YXJnIG5hbWU9J3NpemUnIHR5cGU9J2ludCcgaW5mbz0ndGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUnLz4KKyAgICAgIDxpbmZvPkNyZWF0ZSBhIG5ldyBoYXNoIHRhYmxlLiBTZXQgc2l6ZSB0byB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZW50cmllcyBjYW4mYXBvczt0IGJlIGVzdGltYXRlZC48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LCBvciBOVUxMIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLicvPgorICAgICAgPGFyZyBuYW1lPSdzaXplJyB0eXBlPSdpbnQnIGluZm89J2luaXRpYWwgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hDcmVhdGVEaWN0JyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgotICAgICAgPGluZm8+Q3JlYXRlIGEgbmV3IHhtbEhhc2hUYWJsZVB0ciB3aGljaCB3aWxsIHVzZSBAZGljdCBhcyB0aGUgaW50ZXJuYWwgZGljdGlvbmFyeTwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuJy8+CisgICAgICA8aW5mbz5DcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBiYWNrZWQgYnkgYSBkaWN0aW9uYXJ5LiBUaGlzIGNhbiByZWR1Y2UgcmVzb3VyY2UgdXNhZ2UgY29uc2lkZXJhYmx5IGlmIG1vc3Qga2V5cyBwYXNzZWQgdG8gQVBJIGZ1bmN0aW9ucyBvcmlnaW5hdGUgZnJvbSB0aGlzIGRpY3Rpb25hcnkuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBuZXdseSBjcmVhdGVkIG9iamVjdCwgb3IgTlVMTCBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4nLz4KICAgICAgIDxhcmcgbmFtZT0nc2l6ZScgdHlwZT0naW50JyBpbmZvPSd0aGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZScvPgogICAgICAgPGFyZyBuYW1lPSdkaWN0JyB0eXBlPSd4bWxEaWN0UHRyJyBpbmZvPSdhIGRpY3Rpb25hcnkgdG8gdXNlIGZvciB0aGUgaGFzaCcvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMDI3OCwxMjAgKzEwMTc4LDEyMCBAQAogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoRGVmYXVsdERlYWxsb2NhdG9yJyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgogICAgICAgPGluZm8+RnJlZSBhIGhhc2ggdGFibGUgZW50cnkgd2l0aCB4bWxGcmVlLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgotICAgICAgPGFyZyBuYW1lPSdlbnRyeScgdHlwZT0ndm9pZCAqJyBpbmZvPSd0aGUgaGFzaCB0YWJsZSBlbnRyeScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBlbnRyeSZhcG9zO3MgbmFtZScvPgorICAgICAgPGFyZyBuYW1lPSdlbnRyeScgdHlwZT0ndm9pZCAqJyBpbmZvPSdoYXNoIHRhYmxlIGVudHJ5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgZW50cnkmYXBvcztzIHN0cmluZyBrZXknLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoRnJlZScgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPkZyZWUgdGhlIGhhc2ggQHRhYmxlIGFuZCBpdHMgY29udGVudHMuIFRoZSB1c2VyZGF0YSBpcyBkZWFsbG9jYXRlZCB3aXRoIEBmIGlmIHByb3ZpZGVkLjwvaW5mbz4KKyAgICAgIDxpbmZvPkZyZWUgdGhlIGhhc2ggYW5kIGl0cyBjb250ZW50cy4gVGhlIHBheWxvYWQgaXMgZGVhbGxvY2F0ZWQgd2l0aCBAZGVhbGxvYyBpZiBwcm92aWRlZC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KLSAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIGhhc2ggdGFibGUnLz4KLSAgICAgIDxhcmcgbmFtZT0nZicgdHlwZT0neG1sSGFzaERlYWxsb2NhdG9yJyBpbmZvPSd0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgorICAgICAgPGFyZyBuYW1lPSdkZWFsbG9jJyB0eXBlPSd4bWxIYXNoRGVhbGxvY2F0b3InIGluZm89J2RlYWxsb2NhdG9yIGZ1bmN0aW9uIG9yIE5VTEwnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoTG9va3VwJyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgotICAgICAgPGluZm8+RmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBAbmFtZS48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQgKicgaW5mbz0ndGhlIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhJy8+CisgICAgICA8aW5mbz5GaW5kIHRoZSBlbnRyeSBzcGVjaWZpZWQgYnkgQGtleS48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQgKicgaW5mbz0nYSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIG9yIE5VTEwgaWYgbm8gZW50cnkgd2FzIGZvdW5kLicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5JyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3N0cmluZyBrZXknLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoTG9va3VwMicgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCAqJyBpbmZvPSd0aGUgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIGhhc2ggdGFibGUnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KKyAgICAgIDxpbmZvPkZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSAoQGtleSwgQGtleTIpIHR1cGxlLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gdGhlIHBheWxvYWQgb3IgTlVMTCBpZiBubyBlbnRyeSB3YXMgZm91bmQuJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgorICAgICAgPGFyZyBuYW1lPSdrZXknIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nZmlyc3Qgc3RyaW5nIGtleScvPgorICAgICAgPGFyZyBuYW1lPSdrZXkyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3NlY29uZCBzdHJpbmcga2V5Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSGFzaExvb2t1cDMnIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5GaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpIHR1cGxlLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCAqJyBpbmZvPSd0aGUgYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhJy8+CisgICAgICA8aW5mbz5GaW5kIHRoZSBwYXlsb2FkIHNwZWNpZmllZCBieSB0aGUgKEBrZXksIEBrZXkyLCBAa2V5MykgdHVwbGUuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd2b2lkIConIGluZm89J2EgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5MycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGlyZCBzdHJpbmcga2V5Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSGFzaFFMb29rdXAnIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5GaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIFFOYW1lIEBwcmVmaXg6QG5hbWUvQG5hbWUuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd2b2lkIConIGluZm89J3RoZSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSdwcmVmaXgnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KKyAgICAgIDxpbmZvPkZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSBRTmFtZSBAcHJlZml4OkBuYW1lIG9yIEBuYW1lLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gdGhlIHBheWxvYWQgb3IgTlVMTCBpZiBubyBlbnRyeSB3YXMgZm91bmQuJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgorICAgICAgPGFyZyBuYW1lPSdwcmVmaXgnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ncHJlZml4IG9mIHRoZSBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nbG9jYWwgbmFtZSBvZiB0aGUgc3RyaW5nIGtleScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hRTG9va3VwMicgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgUU5hbWVzIHR1cGxlPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd2b2lkIConIGluZm89J3RoZSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSdwcmVmaXgnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0ncHJlZml4MicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgc2Vjb25kIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KKyAgICAgIDxpbmZvPkZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSBRTmFtZXMgdHVwbGUuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd2b2lkIConIGluZm89J2EgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J3ByZWZpeCcgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBwcmVmaXgnLz4KKyAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBsb2NhbCBuYW1lJy8+CisgICAgICA8YXJnIG5hbWU9J3ByZWZpeDInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHByZWZpeCcvPgorICAgICAgPGFyZyBuYW1lPSduYW1lMicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdzZWNvbmQgbG9jYWwgbmFtZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hRTG9va3VwMycgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPkZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykgdHVwbGUuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd2b2lkIConIGluZm89J3RoZSBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+Ci0gICAgICA8YXJnIG5hbWU9J3ByZWZpeCcgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgcHJlZml4IG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSdwcmVmaXgyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBzZWNvbmQgcHJlZml4IG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSdwcmVmaXgzJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSB0aGlyZCBwcmVmaXggb2YgdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUzJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J2EgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KKyAgICAgIDxpbmZvPkZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSBRTmFtZXMgdHVwbGUuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd2b2lkIConIGluZm89J2EgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J3ByZWZpeCcgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBwcmVmaXgnLz4KKyAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBsb2NhbCBuYW1lJy8+CisgICAgICA8YXJnIG5hbWU9J3ByZWZpeDInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHByZWZpeCcvPgorICAgICAgPGFyZyBuYW1lPSduYW1lMicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdzZWNvbmQgbG9jYWwgbmFtZScvPgorICAgICAgPGFyZyBuYW1lPSdwcmVmaXgzJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoaXJkIHByZWZpeCcvPgorICAgICAgPGFyZyBuYW1lPSduYW1lMycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGlyZCBsb2NhbCBuYW1lJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSGFzaFJlbW92ZUVudHJ5JyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgotICAgICAgPGluZm8+RmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBAbmFtZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGhhc2ggQHRhYmxlLiBFeGlzdGluZyB1c2VyZGF0YSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIGZyZWVkIHdpdGggQGYuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaWYgdGhlIHJlbW92YWwgc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yIG9yIG5vdCBmb3VuZC4nLz4KLSAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIGhhc2ggdGFibGUnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nZicgdHlwZT0neG1sSGFzaERlYWxsb2NhdG9yJyBpbmZvPSd0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSAoaWYgYW55KScvPgorICAgICAgPGluZm8+RmluZCB0aGUgZW50cnkgc3BlY2lmaWVkIGJ5IHRoZSBAa2V5IGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgaGFzaCB0YWJsZS4gUGF5bG9hZCB3aWxsIGJlIGZyZWVkIHdpdGggQGRlYWxsb2MuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBhbmQgLTEgaWYgbm8gZW50cnkgd2FzIGZvdW5kLicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5JyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3N0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0nZGVhbGxvYycgdHlwZT0neG1sSGFzaERlYWxsb2NhdG9yJyBpbmZvPSdkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIG9yIE5VTEwnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoUmVtb3ZlRW50cnkyJyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgotICAgICAgPGluZm8+RmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSAoQG5hbWUsIEBuYW1lMikgdHVwbGUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBoYXNoIEB0YWJsZS4gRXhpc3RpbmcgdXNlcmRhdGEgZm9yIHRoaXMgdHVwbGUgd2lsbCBiZSByZW1vdmVkIGFuZCBmcmVlZCB3aXRoIEBmLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIGlmIHRoZSByZW1vdmFsIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvciBvciBub3QgZm91bmQuJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J2Egc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J2YnIHR5cGU9J3htbEhhc2hEZWFsbG9jYXRvcicgaW5mbz0ndGhlIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZW1vdmVkIGl0ZW0gKGlmIGFueSknLz4KKyAgICAgIDxpbmZvPlJlbW92ZSBhbiBlbnRyeSB3aXRoIHR3byBzdHJpbmdzIGFzIGtleS4gIFNlZSB4bWxIYXNoUmVtb3ZlRW50cnkuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0nZGVhbGxvYycgdHlwZT0neG1sSGFzaERlYWxsb2NhdG9yJyBpbmZvPSdkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIG9yIE5VTEwnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoUmVtb3ZlRW50cnkzJyBmaWxlPSdoYXNoJyBtb2R1bGU9J2hhc2gnPgotICAgICAgPGluZm8+RmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSAoQG5hbWUsIEBuYW1lMiwgQG5hbWUzKSB0dXBsZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGhhc2ggQHRhYmxlLiBFeGlzdGluZyB1c2VyZGF0YSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIGZyZWVkIHdpdGggQGYuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaWYgdGhlIHJlbW92YWwgc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yIG9yIG5vdCBmb3VuZC4nLz4KLSAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIGhhc2ggdGFibGUnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTMnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSdmJyB0eXBlPSd4bWxIYXNoRGVhbGxvY2F0b3InIGluZm89J3RoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIChpZiBhbnkpJy8+CisgICAgICA8aW5mbz5SZW1vdmUgYW4gZW50cnkgd2l0aCB0aHJlZSBzdHJpbmdzIGFzIGtleS4gIFNlZSB4bWxIYXNoUmVtb3ZlRW50cnkuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5MycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGlyZCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2RlYWxsb2MnIHR5cGU9J3htbEhhc2hEZWFsbG9jYXRvcicgaW5mbz0nZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSBvciBOVUxMJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSGFzaFNjYW4nIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbGllZCBAZiB0byBlYWNoIHZhbHVlLjwvaW5mbz4KKyAgICAgIDxpbmZvPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBseSBAc2NhbiB0byBlYWNoIHZhbHVlLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSdmJyB0eXBlPSd4bWxIYXNoU2Nhbm5lcicgaW5mbz0ndGhlIHNjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoJy8+Ci0gICAgICA8YXJnIG5hbWU9J2RhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0nZXh0cmEgZGF0YSBwYXNzZWQgdG8gZicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0nc2NhbicgdHlwZT0neG1sSGFzaFNjYW5uZXInIGluZm89J3NjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoJy8+CisgICAgICA8YXJnIG5hbWU9J2RhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0nZXh0cmEgZGF0YSBwYXNzZWQgdG8gQHNjYW4nLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoU2NhbjMnIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbGllZCBAZiB0byBlYWNoIHZhbHVlIG1hdGNoaW5nIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpIHR1cGxlLiBJZiBvbmUgb2YgdGhlIG5hbWVzIGlzIG51bGwsIHRoZSBjb21wYXJpc29uIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2guPC9pbmZvPgorICAgICAgPGluZm8+U2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGx5IEBzY2FuIHRvIGVhY2ggdmFsdWUgbWF0Y2hpbmcgKEBrZXksIEBrZXkyLCBAa2V5MykgdHVwbGUuIElmIG9uZSBvZiB0aGUga2V5cyBpcyBudWxsLCB0aGUgY29tcGFyaXNvbiBpcyBjb25zaWRlcmVkIHRvIG1hdGNoLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUyJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J2Egc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEwnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTMnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMJy8+Ci0gICAgICA8YXJnIG5hbWU9J2YnIHR5cGU9J3htbEhhc2hTY2FubmVyJyBpbmZvPSd0aGUgc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2gnLz4KLSAgICAgIDxhcmcgbmFtZT0nZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdleHRyYSBkYXRhIHBhc3NlZCB0byBmJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgorICAgICAgPGFyZyBuYW1lPSdrZXknIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nZmlyc3Qgc3RyaW5nIGtleSBvciBOVUxMJy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXkgb3IgTlVMTCcvPgorICAgICAgPGFyZyBuYW1lPSdrZXkzJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoaXJkIHN0cmluZyBrZXkgb3IgTlVMTCcvPgorICAgICAgPGFyZyBuYW1lPSdzY2FuJyB0eXBlPSd4bWxIYXNoU2Nhbm5lcicgaW5mbz0nc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2gnLz4KKyAgICAgIDxhcmcgbmFtZT0nZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdleHRyYSBkYXRhIHBhc3NlZCB0byBAc2NhbicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hTY2FuRnVsbCcgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBsaWVkIEBmIHRvIGVhY2ggdmFsdWUuPC9pbmZvPgorICAgICAgPGluZm8+U2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGx5IEBzY2FuIHRvIGVhY2ggdmFsdWUuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+Ci0gICAgICA8YXJnIG5hbWU9J2YnIHR5cGU9J3htbEhhc2hTY2FubmVyRnVsbCcgaW5mbz0ndGhlIHNjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoJy8+Ci0gICAgICA8YXJnIG5hbWU9J2RhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0nZXh0cmEgZGF0YSBwYXNzZWQgdG8gZicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0nc2NhbicgdHlwZT0neG1sSGFzaFNjYW5uZXJGdWxsJyBpbmZvPSdzY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaCcvPgorICAgICAgPGFyZyBuYW1lPSdkYXRhJyB0eXBlPSd2b2lkIConIGluZm89J2V4dHJhIGRhdGEgcGFzc2VkIHRvIEBzY2FuJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSGFzaFNjYW5GdWxsMycgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPlNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBsaWVkIEBmIHRvIGVhY2ggdmFsdWUgbWF0Y2hpbmcgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykgdHVwbGUuIElmIG9uZSBvZiB0aGUgbmFtZXMgaXMgbnVsbCwgdGhlIGNvbXBhcmlzb24gaXMgY29uc2lkZXJlZCB0byBtYXRjaC48L2luZm8+CisgICAgICA8aW5mbz5TY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbHkgQHNjYW4gdG8gZWFjaCB2YWx1ZSBtYXRjaGluZyAoQGtleSwgQGtleTIsIEBrZXkzKSB0dXBsZS4gSWYgb25lIG9mIHRoZSBrZXlzIGlzIG51bGwsIHRoZSBjb21wYXJpc29uIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2guPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEwnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgb3IgTlVMTCcvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEwnLz4KLSAgICAgIDxhcmcgbmFtZT0nZicgdHlwZT0neG1sSGFzaFNjYW5uZXJGdWxsJyBpbmZvPSd0aGUgc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2gnLz4KLSAgICAgIDxhcmcgbmFtZT0nZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdleHRyYSBkYXRhIHBhc3NlZCB0byBmJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgorICAgICAgPGFyZyBuYW1lPSdrZXknIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nZmlyc3Qgc3RyaW5nIGtleSBvciBOVUxMJy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXkgb3IgTlVMTCcvPgorICAgICAgPGFyZyBuYW1lPSdrZXkzJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoaXJkIHN0cmluZyBrZXkgb3IgTlVMTCcvPgorICAgICAgPGFyZyBuYW1lPSdzY2FuJyB0eXBlPSd4bWxIYXNoU2Nhbm5lckZ1bGwnIGluZm89J3NjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoJy8+CisgICAgICA8YXJnIG5hbWU9J2RhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0nZXh0cmEgZGF0YSBwYXNzZWQgdG8gQHNjYW4nLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxIYXNoU2Nhbm5lcicgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KICAgICAgIDxpbmZvPkNhbGxiYWNrIHdoZW4gc2Nhbm5pbmcgZGF0YSBpbiBhIGhhc2ggd2l0aCB0aGUgc2ltcGxlIHNjYW5uZXIuPC9pbmZvPgpAQCAtMTA0MTAsMzYgKzEwMzEwLDM2IEBACiAgICAgICA8YXJnIG5hbWU9J25hbWUzJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSB0aGlyZCBuYW1lIGFzc29jaWF0ZWQnLz4KICAgICA8L2Z1bmN0eXBlPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxIYXNoU2l6ZScgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPlF1ZXJ5IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW5zdGFsbGVkIGluIHRoZSBoYXNoIEB0YWJsZS48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZSBvciAtMSBpbiBjYXNlIG9mIGVycm9yJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+CisgICAgICA8aW5mbz5RdWVyeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuJy8+CisgICAgICA8YXJnIG5hbWU9J2hhc2gnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0naGFzaCB0YWJsZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hVcGRhdGVFbnRyeScgZmlsZT0naGFzaCcgbW9kdWxlPSdoYXNoJz4KLSAgICAgIDxpbmZvPkFkZCB0aGUgQHVzZXJkYXRhIHRvIHRoZSBoYXNoIEB0YWJsZS4gVGhpcyBjYW4gbGF0ZXIgYmUgcmV0cmlldmVkIGJ5IHVzaW5nIHRoZSBAbmFtZS4gRXhpc3RpbmcgZW50cnkgZm9yIHRoaXMgQG5hbWUgd2lsbCBiZSByZW1vdmVkIGFuZCBmcmVlZCB3aXRoIEBmIGlmIGZvdW5kLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIHRoZSBhZGRpdGlvbiBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuJy8+Ci0gICAgICA8YXJnIG5hbWU9J3RhYmxlJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J3RoZSBoYXNoIHRhYmxlJy8+Ci0gICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J3VzZXJkYXRhJyB0eXBlPSd2b2lkIConIGluZm89J2EgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nZicgdHlwZT0neG1sSGFzaERlYWxsb2NhdG9yJyBpbmZvPSd0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gKGlmIGFueSknLz4KKyAgICAgIDxpbmZvPkFkZCBhIGhhc2ggdGFibGUgZW50cnkuIElmIGFuIGVudHJ5IHdpdGggdGhpcyBrZXkgYWxyZWFkeSBleGlzdHMsIHRoZSBvbGQgcGF5bG9hZCB3aWxsIGJlIGZyZWVkIGFuZCB1cGRhdGVkIHdpdGggdGhlIG5ldyB2YWx1ZS48L2luZm8+CisgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIC0xIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLicvPgorICAgICAgPGFyZyBuYW1lPSdoYXNoJyB0eXBlPSd4bWxIYXNoVGFibGVQdHInIGluZm89J2hhc2ggdGFibGUnLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5JyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3N0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0ncGF5bG9hZCcgdHlwZT0ndm9pZCAqJyBpbmZvPSdwb2ludGVyIHRvIHRoZSBwYXlsb2FkJy8+CisgICAgICA8YXJnIG5hbWU9J2RlYWxsb2MnIHR5cGU9J3htbEhhc2hEZWFsbG9jYXRvcicgaW5mbz0nZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gb3IgTlVMTCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hVcGRhdGVFbnRyeTInIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlLiBFeGlzdGluZyBlbnRyeSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQgYW5kIGZyZWVkIHdpdGggQGYgaWYgZm91bmQuPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KLSAgICAgIDxhcmcgbmFtZT0ndGFibGUnIHR5cGU9J3htbEhhc2hUYWJsZVB0cicgaW5mbz0ndGhlIGhhc2ggdGFibGUnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nbmFtZTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0ndXNlcmRhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0nYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSdmJyB0eXBlPSd4bWxIYXNoRGVhbGxvY2F0b3InIGluZm89J3RoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSAoaWYgYW55KScvPgorICAgICAgPGluZm8+QWRkIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHR3byBzdHJpbmdzIGFzIGtleS4gIFNlZSB4bWxIYXNoVXBkYXRlRW50cnkuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0ncGF5bG9hZCcgdHlwZT0ndm9pZCAqJyBpbmZvPSdwb2ludGVyIHRvIHRoZSBwYXlsb2FkJy8+CisgICAgICA8YXJnIG5hbWU9J2RlYWxsb2MnIHR5cGU9J3htbEhhc2hEZWFsbG9jYXRvcicgaW5mbz0nZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gb3IgTlVMTCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEhhc2hVcGRhdGVFbnRyeTMnIGZpbGU9J2hhc2gnIG1vZHVsZT0naGFzaCc+Ci0gICAgICA8aW5mbz5BZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZCBieSB1c2luZyB0aGUgdHVwbGUgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykuIEV4aXN0aW5nIGVudHJ5IGZvciB0aGlzIHR1cGxlIHdpbGwgYmUgcmVtb3ZlZCBhbmQgZnJlZWQgd2l0aCBAZiBpZiBmb3VuZC48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCB0aGUgYWRkaXRpb24gc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLicvPgotICAgICAgPGFyZyBuYW1lPSd0YWJsZScgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSd0aGUgaGFzaCB0YWJsZScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YScvPgotICAgICAgPGFyZyBuYW1lPSduYW1lMycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhJy8+Ci0gICAgICA8YXJnIG5hbWU9J3VzZXJkYXRhJyB0eXBlPSd2b2lkIConIGluZm89J2EgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEnLz4KLSAgICAgIDxhcmcgbmFtZT0nZicgdHlwZT0neG1sSGFzaERlYWxsb2NhdG9yJyBpbmZvPSd0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gKGlmIGFueSknLz4KKyAgICAgIDxpbmZvPkFkZCBhIGhhc2ggdGFibGUgZW50cnkgd2l0aCB0aHJlZSBzdHJpbmdzIGFzIGtleS4gIFNlZSB4bWxIYXNoVXBkYXRlRW50cnkuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4nLz4KKyAgICAgIDxhcmcgbmFtZT0naGFzaCcgdHlwZT0neG1sSGFzaFRhYmxlUHRyJyBpbmZvPSdoYXNoIHRhYmxlJy8+CisgICAgICA8YXJnIG5hbWU9J2tleScgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdmaXJzdCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J2tleTInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nc2Vjb25kIHN0cmluZyBrZXknLz4KKyAgICAgIDxhcmcgbmFtZT0na2V5MycgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGlyZCBzdHJpbmcga2V5Jy8+CisgICAgICA8YXJnIG5hbWU9J3BheWxvYWQnIHR5cGU9J3ZvaWQgKicgaW5mbz0ncG9pbnRlciB0byB0aGUgcGF5bG9hZCcvPgorICAgICAgPGFyZyBuYW1lPSdkZWFsbG9jJyB0eXBlPSd4bWxIYXNoRGVhbGxvY2F0b3InIGluZm89J2RlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZXBsYWNlZCBpdGVtIG9yIE5VTEwnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxJT0ZUUENsb3NlJyBmaWxlPSd4bWxJTycgbW9kdWxlPSd4bWxJTyc+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9GVFBfRU5BQkxFRCk8L2NvbmQ+CkBAIC0xMDUwOSwzMyArMTA0MDksMzMgQEAKICAgICAgIDxhcmcgbmFtZT0nZW5jJyB0eXBlPSd4bWxDaGFyRW5jb2RpbmcnIGluZm89J3RoZSBjaGFyc2V0IGVuY29kaW5nIGlmIGtub3duJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdENoYXJFbmNvZGluZ0hhbmRsZXJzJyBmaWxlPSdlbmNvZGluZycgbW9kdWxlPSdlbmNvZGluZyc+Ci0gICAgICA8aW5mbz5ERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIHhtbEluaXRQYXJzZXIgdG8gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4gIEluaXRpYWxpemUgdGhlIGNoYXIgZW5jb2Rpbmcgc3VwcG9ydCwgaXQgcmVnaXN0ZXJzIHRoZSBkZWZhdWx0IGVuY29kaW5nIHN1cHBvcnRlZC4gTk9URTogd2hpbGUgcHVibGljLCB0aGlzIGZ1bmN0aW9uIHVzdWFsbHkgZG9lc24mYXBvczt0IG5lZWQgdG8gYmUgY2FsbGVkIGluIG5vcm1hbCBwcm9jZXNzaW5nLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEFsaWFzIGZvciB4bWxJbml0UGFyc2VyLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEluaXRHbG9iYWxzJyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J2dsb2JhbHMnPgotICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuICBBZGRpdGlvbmFsIGluaXRpYWxpc2F0aW9uIGZvciBtdWx0aS10aHJlYWRpbmc8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBBbGlhcyBmb3IgeG1sSW5pdFBhcnNlci48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxJbml0TWVtb3J5JyBmaWxlPSd4bWxtZW1vcnknIG1vZHVsZT0neG1sbWVtb3J5Jz4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sSW5pdFBhcnNlciB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LiAgSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IGxheWVyLjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIG9uIHN1Y2Nlc3MnLz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEFsaWFzIGZvciB4bWxJbml0UGFyc2VyLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxJbml0Tm9kZUluZm9TZXEnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+LS0gSW5pdGlhbGl6ZSAoc2V0IHRvIGluaXRpYWwgc3RhdGUpIG5vZGUgaW5mbyBzZXF1ZW5jZTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IERvbiZhcG9zO3QgdXNlLiAgLS0gSW5pdGlhbGl6ZSAoc2V0IHRvIGluaXRpYWwgc3RhdGUpIG5vZGUgaW5mbyBzZXF1ZW5jZTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSdzZXEnIHR5cGU9J3htbFBhcnNlck5vZGVJbmZvU2VxUHRyJyBpbmZvPSdhIG5vZGUgaW5mbyBzZXF1ZW5jZSBwb2ludGVyJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdFBhcnNlcicgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5Jbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFhNTCBwYXJzZXIuIFRoaXMgaXMgbm90IHJlZW50cmFudC4gQ2FsbCBvbmNlIGJlZm9yZSBwcm9jZXNzaW5nIGluIGNhc2Ugb2YgdXNlIGluIG11bHRpdGhyZWFkZWQgcHJvZ3JhbXMuPC9pbmZvPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxJbml0UGFyc2VyJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ndGhyZWFkcyc+CisgICAgICA8aW5mbz5Jbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFhNTCBwYXJzZXIuICBDYWxsIG9uY2UgZnJvbSB0aGUgbWFpbiB0aHJlYWQgYmVmb3JlIHVzaW5nIHRoZSBsaWJyYXJ5IGluIG11bHRpdGhyZWFkZWQgcHJvZ3JhbXMuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdFBhcnNlckN0eHQnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+SW5pdGlhbGl6ZSBhIHBhcnNlciBjb250ZXh0PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBtYWRlIHByaXZhdGUgaW4gYSBmdXR1cmUgdmVyc2lvbi4gIEluaXRpYWxpemUgYSBwYXJzZXIgY29udGV4dDwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvcicvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxJbml0VGhyZWFkcycgZmlsZT0ndGhyZWFkcycgbW9kdWxlPSd0aHJlYWRzJz4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sSW5pdFBhcnNlciB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LiAgeG1sSW5pdFRocmVhZHMoKSBpcyB1c2VkIHRvIHRvIGluaXRpYWxpemUgYWxsIHRoZSB0aHJlYWQgcmVsYXRlZCBkYXRhIG9mIHRoZSBsaWJ4bWwyIGxpYnJhcnkuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogQWxpYXMgZm9yIHhtbEluaXRQYXJzZXIuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdGlhbGl6ZUNhdGFsb2cnIGZpbGU9J2NhdGFsb2cnIG1vZHVsZT0nY2F0YWxvZyc+CkBAIC0xMDU0NCwxMSArMTA0NDQsMTEgQEAKICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbEluaXRpYWxpemVEaWN0JyBmaWxlPSdkaWN0JyBtb2R1bGU9J2RpY3QnPgotICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuICBEbyB0aGUgZGljdGlvbmFyeSBtdXRleCBpbml0aWFsaXphdGlvbi48L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBpZiBpbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBkb25lLCBhbmQgMSBpZiB0aGF0IGNhbGwgbGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbicvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogQWxpYXMgZm9yIHhtbEluaXRQYXJzZXIuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAuJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlJyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J2dsb2JhbHMnPgotICAgICAgPGluZm8+eG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlKCkgaW5pdGlhbGl6ZSBhIGdsb2JhbCBzdGF0ZSB3aXRoIGFsbCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIGxpYnJhcnkuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogTm8tb3AuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2dzJyB0eXBlPSd4bWxHbG9iYWxTdGF0ZVB0cicgaW5mbz0nYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGdsb2JhbCBzdGF0ZScvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMDYzMSw4ICsxMDUzMSw4IEBACiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBpZiBub3QsIG5vbi16ZXJvIG90aGVyd2lzZScvPgogICAgICAgPGFyZyBuYW1lPSdjJyB0eXBlPSdpbnQnIGluZm89J2FuIHVuaWNvZGUgY2hhcmFjdGVyIChpbnQpJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSXNNYWluVGhyZWFkJyBmaWxlPSd0aHJlYWRzJyBtb2R1bGU9J3RocmVhZHMnPgotICAgICAgPGluZm8+eG1sSXNNYWluVGhyZWFkKCkgY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCB0aHJlYWQgaXMgdGhlIG1haW4gdGhyZWFkLjwvaW5mbz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sSXNNYWluVGhyZWFkJyBmaWxlPSd0aHJlYWRzJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgbWFpbiB0aHJlYWQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzEgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSBtYWluIHRocmVhZCwgMCBvdGhlcndpc2UnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxJc01peGVkRWxlbWVudCcgZmlsZT0ndmFsaWQnIG1vZHVsZT0ndmFsaWQnPgpAQCAtMTA2NTMsMTQgKzEwNTUzLDE0IEBACiAgICAgICA8YXJnIG5hbWU9J2VsZW0nIHR5cGU9J3htbE5vZGVQdHInIGluZm89J3RoZSBlbGVtZW50IGNhcnJ5aW5nIHRoZSBhdHRyaWJ1dGUnLz4KICAgICAgIDxhcmcgbmFtZT0nYXR0cicgdHlwZT0neG1sQXR0clB0cicgaW5mbz0ndGhlIGF0dHJpYnV0ZScvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbElzWEhUTUwnIGZpbGU9J3RyZWUnIG1vZHVsZT0neG1sc2F2ZSc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbElzWEhUTUwnIGZpbGU9J3RyZWUnIG1vZHVsZT0ndHJlZSc+CiAgICAgICA8aW5mbz5UcnkgdG8gZmluZCBpZiB0aGUgZG9jdW1lbnQgY29ycmVzcG9uZCB0byBhbiBYSFRNTCBEVEQ8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMSBpZiB0cnVlLCAwIGlmIG5vdCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvcicvPgogICAgICAgPGFyZyBuYW1lPSdzeXN0ZW1JRCcgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgc3lzdGVtIGlkZW50aWZpZXInLz4KICAgICAgIDxhcmcgbmFtZT0ncHVibGljSUQnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHB1YmxpYyBpZGVudGlmaWVyJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sS2VlcEJsYW5rc0RlZmF1bHQnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+U2V0IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIGZvciBkZWZhdWx0IGJsYW5rcyB0ZXh0IG5vZGVzIHN1cHBvcnQuIFRoZSAxLnggdmVyc2lvbiBvZiB0aGUgcGFyc2VyIHVzZWQgYW4gaGV1cmlzdGljIHRvIHRyeSB0byBkZXRlY3QgaWdub3JhYmxlIHdoaXRlIHNwYWNlcy4gQXMgYSByZXN1bHQgdGhlIFNBWCBjYWxsYmFjayB3YXMgZ2VuZXJhdGluZyB4bWxTQVgySWdub3JhYmxlV2hpdGVzcGFjZSgpIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIGNoYXJhY3RlcnMoKSBvbmUsIGFuZCB3aGVuIHVzaW5nIHRoZSBET00gb3V0cHV0IHRleHQgbm9kZXMgY29udGFpbmluZyB0aG9zZSBibGFua3Mgd2VyZSBub3QgZ2VuZXJhdGVkLiBUaGUgMi54IGFuZCBsYXRlciB2ZXJzaW9uIHdpbGwgc3dpdGNoIHRvIHRoZSBYTUwgc3RhbmRhcmQgd2F5IGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgYXJlIG9ubHkgZ2VuZXJhdGVkIHdoZW4gcnVubmluZyB0aGUgcGFyc2VyIGluIHZhbGlkYXRpbmcgbW9kZSBhbmQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGRvZXNuJmFwb3M7dCBhbGxvdyBDREFUQSBvciBtaXhlZCBjb250ZW50LiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGFzIGEgd2F5IHRvIGZvcmNlIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBvbiAxLlggbGlicyBhbmQgdG8gc3dpdGNoIGJhY2sgdG8gdGhlIG9sZCBtb2RlIGZvciBjb21wYXRpYmlsaXR5IHdoZW4gcnVubmluZyAxLlggY2xpZW50IGNvZGUgb24gMi5YIC4gVXBncmFkZSBvZiAxLlggY29kZSBzaG91bGQgYmUgZG9uZSBieSB1c2luZyB4bWxJc0JsYW5rTm9kZSgpIGNvbW1vZGl0eSBmdW5jdGlvbiB0byBkZXRlY3QgdGhlICZxdW90O2VtcHR5JnF1b3Q7IG5vZGVzIGdlbmVyYXRlZC4gVGhpcyB2YWx1ZSBhbHNvIGFmZmVjdCBhdXRvZ2VuZXJhdGlvbiBvZiBpbmRlbnRhdGlvbiB3aGVuIHNhdmluZyBjb2RlIGlmIGJsYW5rcyBzZWN0aW9ucyBhcmUga2VwdCwgaW5kZW50YXRpb24gaXMgbm90IGdlbmVyYXRlZC48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBVc2UgdGhlIG1vZGVybiBvcHRpb25zIEFQSSB3aXRoIFhNTF9QQVJTRV9OT0JMQU5LUy4gIFNldCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgZGVmYXVsdCBibGFua3MgdGV4dCBub2RlcyBzdXBwb3J0LiBUaGUgMS54IHZlcnNpb24gb2YgdGhlIHBhcnNlciB1c2VkIGFuIGhldXJpc3RpYyB0byB0cnkgdG8gZGV0ZWN0IGlnbm9yYWJsZSB3aGl0ZSBzcGFjZXMuIEFzIGEgcmVzdWx0IHRoZSBTQVggY2FsbGJhY2sgd2FzIGdlbmVyYXRpbmcgeG1sU0FYMklnbm9yYWJsZVdoaXRlc3BhY2UoKSBjYWxsYmFja3MgaW5zdGVhZCBvZiBjaGFyYWN0ZXJzKCkgb25lLCBhbmQgd2hlbiB1c2luZyB0aGUgRE9NIG91dHB1dCB0ZXh0IG5vZGVzIGNvbnRhaW5pbmcgdGhvc2UgYmxhbmtzIHdlcmUgbm90IGdlbmVyYXRlZC4gVGhlIDIueCBhbmQgbGF0ZXIgdmVyc2lvbiB3aWxsIHN3aXRjaCB0byB0aGUgWE1MIHN0YW5kYXJkIHdheSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIGFyZSBvbmx5IGdlbmVyYXRlZCB3aGVuIHJ1bm5pbmcgdGhlIHBhcnNlciBpbiB2YWxpZGF0aW5nIG1vZGUgYW5kIHdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBkb2VzbiZhcG9zO3QgYWxsb3cgQ0RBVEEgb3IgbWl4ZWQgY29udGVudC4gVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBhcyBhIHdheSB0byBmb3JjZSB0aGUgc3RhbmRhcmQgYmVoYXZpb3Igb24gMS5YIGxpYnMgYW5kIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBvbGQgbW9kZSBmb3IgY29tcGF0aWJpbGl0eSB3aGVuIHJ1bm5pbmcgMS5YIGNsaWVudCBjb2RlIG9uIDIuWCAuIFVwZ3JhZGUgb2YgMS5YIGNvZGUgc2hvdWxkIGJlIGRvbmUgYnkgdXNpbmcgeG1sSXNCbGFua05vZGUoKSBjb21tb2RpdHkgZnVuY3Rpb24gdG8gZGV0ZWN0IHRoZSAmcXVvdDtlbXB0eSZxdW90OyBub2RlcyBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgYWxzbyBhZmZlY3QgYXV0b2dlbmVyYXRpb24gb2YgaW5kZW50YXRpb24gd2hlbiBzYXZpbmcgY29kZSBpZiBibGFua3Mgc2VjdGlvbnMgYXJlIGtlcHQsIGluZGVudGF0aW9uIGlzIG5vdCBnZW5lcmF0ZWQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBsYXN0IHZhbHVlIGZvciAwIGZvciBubyBzdWJzdGl0dXRpb24sIDEgZm9yIHN1YnN0aXR1dGlvbi4nLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsJyB0eXBlPSdpbnQnIGluZm89J2ludCAwIG9yIDEnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtMTA2NzEsNyArMTA1NzEsNyBAQAogICAgICAgPGFyZyBuYW1lPSdwYXJlbnQnIHR5cGU9J3htbE5vZGVQdHInIGluZm89J3RoZSBwYXJlbnQgbm9kZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbExpbmVOdW1iZXJzRGVmYXVsdCcgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5TZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGVuYWJsaW5nIGxpbmUgbnVtYmVycyBpbiBlbGVtZW50cyBjb250ZW50cy4gVGhpcyBtYXkgYnJlYWsgb24gb2xkIGFwcGxpY2F0aW9uIGFuZCBpcyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhlIG1vZGVybiBvcHRpb25zIEFQSSBhbHdheXMgZW5hYmxlcyBsaW5lIG51bWJlcnMuICBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGVuYWJsaW5nIGxpbmUgbnVtYmVycyBpbiBlbGVtZW50cyBjb250ZW50cy4gVGhpcyBtYXkgYnJlYWsgb24gb2xkIGFwcGxpY2F0aW9uIGFuZCBpcyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBsYXN0IHZhbHVlIGZvciAwIGZvciBubyBzdWJzdGl0dXRpb24sIDEgZm9yIHN1YnN0aXR1dGlvbi4nLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsJyB0eXBlPSdpbnQnIGluZm89J2ludCAwIG9yIDEnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtMTA5NTgsNiArMTA4NTgsMTEgQEAKICAgICAgIDxhcmcgbmFtZT0nZnAnIHR5cGU9J0ZJTEUgKicgaW5mbz0nYSBGSUxFIGRlc2NyaXB0b3IgdXNlZCBhcyB0aGUgb3V0cHV0IGZpbGUnLz4KICAgICAgIDxhcmcgbmFtZT0nbnInIHR5cGU9J2ludCcgaW5mbz0nbnVtYmVyIG9mIGVudHJpZXMgdG8gZHVtcCcvPgogICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbE1lbVNpemUnIGZpbGU9J3htbG1lbW9yeScgbW9kdWxlPSd4bWxtZW1vcnknPgorICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSdzaXplX3QnIGluZm89J3RoZSBzaXplIG9mIGEgbWVtb3J5IGFsbG9jYXRpb24uJy8+CisgICAgICA8YXJnIG5hbWU9J3B0cicgdHlwZT0ndm9pZCAqJyBpbmZvPSdwb2ludGVyIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbicvPgorICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbE1lbVN0cmR1cExvYycgZmlsZT0neG1sbWVtb3J5JyBtb2R1bGU9J3htbG1lbW9yeSc+CiAgICAgICA8aW5mbz5hIHN0cmR1cCgpIGVxdWl2YWxlbnQsIHdpdGggbG9nZ2luZyBvZiB0aGUgYWxsb2NhdGlvbiBpbmZvLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0nY2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gdGhlIG5ldyBzdHJpbmcgb3IgTlVMTCBpZiBhbGxvY2F0aW9uIGVycm9yIG9jY3VycmVkLicvPgpAQCAtMTE0NDYsNyArMTEzNTEsNyBAQAogICAgICAgPGFyZyBuYW1lPSdjb250ZW50JyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBlbnRpdHkgY29udGVudCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbE5ld0VudGl0eUlucHV0U3RyZWFtJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VySW50ZXJuYWxzJz4KLSAgICAgIDxpbmZvPkNyZWF0ZSBhIG5ldyBpbnB1dCBzdHJlYW0gYmFzZWQgb24gYW4geG1sRW50aXR5UHRyPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICBDcmVhdGUgYSBuZXcgaW5wdXQgc3RyZWFtIGJhc2VkIG9uIGFuIHhtbEVudGl0eVB0cjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sUGFyc2VySW5wdXRQdHInIGluZm89J3RoZSBuZXcgaW5wdXQgc3RyZWFtIG9yIE5VTEwnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J2VudGl0eScgdHlwZT0neG1sRW50aXR5UHRyJyBpbmZvPSdhbiBFbnRpdHkgcG9pbnRlcicvPgpAQCAtMTE1NDQsNiArMTE0NDksMTIgQEAKICAgICAgIDxhcmcgbmFtZT0nZG9jJyB0eXBlPSdjb25zdCB4bWxEb2MgKicgaW5mbz0ndGhlIGRvY3VtZW50Jy8+CiAgICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHJlZmVyZW5jZSBuYW1lLCBvciB0aGUgcmVmZXJlbmNlIHN0cmluZyB3aXRoICZhbXA7IGFuZCA7Jy8+CiAgICAgPC9mdW5jdGlvbj4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sTmV3U0FYUGFyc2VyQ3R4dCcgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+CisgICAgICA8aW5mbz5BbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBTQVggcGFyc2VyIGNvbnRleHQuIElmIHVzZXJEYXRhIGlzIE5VTEwsIHRoZSBwYXJzZXIgY29udGV4dCB3aWxsIGJlIHBhc3NlZCBhcyB1c2VyIGRhdGEuPC9pbmZvPgorICAgICAgPHJldHVybiB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSd0aGUgeG1sUGFyc2VyQ3R4dFB0ciBvciBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4nLz4KKyAgICAgIDxhcmcgbmFtZT0nc2F4JyB0eXBlPSdjb25zdCB4bWxTQVhIYW5kbGVyIConIGluZm89J1NBWCBoYW5kbGVyJy8+CisgICAgICA8YXJnIG5hbWU9J3VzZXJEYXRhJyB0eXBlPSd2b2lkIConIGluZm89J3VzZXIgZGF0YScvPgorICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbE5ld1N0cmluZ0lucHV0U3RyZWFtJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VySW50ZXJuYWxzJz4KICAgICAgIDxpbmZvPkNyZWF0ZSBhIG5ldyBpbnB1dCBzdHJlYW0gYmFzZWQgb24gYSBtZW1vcnkgYnVmZmVyLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sUGFyc2VySW5wdXRQdHInIGluZm89J3RoZSBuZXcgaW5wdXQgc3RyZWFtJy8+CkBAIC0xMTYzMSw3ICsxMTU0Miw3IEBACiAgICAgICA8cmV0dXJuIHR5cGU9J3htbFZhbGlkQ3R4dFB0cicgaW5mbz0nTlVMTCBpZiBub3QsIG90aGVyd2lzZSB0aGUgbmV3IHZhbGlkYXRpb24gY29udGV4dCBzdHJ1Y3R1cmUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxOZXh0Q2hhcicgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5Ta2lwIHRvIHRoZSBuZXh0IGNoYXIgaW5wdXQgY2hhci48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4gIFNraXAgdG8gdGhlIG5leHQgY2hhciBpbnB1dCBjaGFyLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSd0aGUgWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTExODE2LDEyICsxMTcyNywxMiBAQAogICAgICAgPGFyZyBuYW1lPSdlbmNvZGVyJyB0eXBlPSd4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyJyBpbmZvPSd0aGUgZW5jb2RpbmcgY29udmVydGVyIG9yIE5VTEwnLz4KICAgICAgIDxhcmcgbmFtZT0nY29tcHJlc3Npb24nIHR5cGU9J2ludCcgaW5mbz0ndGhlIGNvbXByZXNzaW9uIHJhdGlvbiAoMCBub25lLCA5IG1heCkuJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0JyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J3htbElPJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0JyBmaWxlPSd4bWxJTycgbW9kdWxlPSd4bWxJTyc+CiAgICAgICA8aW5mbz5SZWdpc3RlcnMgYSBjYWxsYmFjayBmb3IgVVJJIG91dHB1dCBmaWxlIGhhbmRsaW5nPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIGluZm89J3RoZSBvbGQgdmFsdWUgb2YgdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbicvPgogICAgICAgPGFyZyBuYW1lPSdmdW5jJyB0eXBlPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIGluZm89J2Z1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIG5ldyBPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0eXBlIG5hbWU9J3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYycgZmlsZT0neG1sSU8nIG1vZHVsZT0neG1sSU8nPgogICAgICAgPGluZm8+U2lnbmF0dXJlIGZvciB0aGUgZnVuY3Rpb24gZG9pbmcgdGhlIGxvb2t1cCBmb3IgYSBzdWl0YWJsZSBvdXRwdXQgbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gYW4gVVJJLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sT3V0cHV0QnVmZmVyUHRyJyBpbmZvPSd0aGUgbmV3IHhtbE91dHB1dEJ1ZmZlclB0ciBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgTlVMTCBpZiBubyBtZXRob2Qgd2FzIGZvdW5kLicvPgogICAgICAgPGFyZyBuYW1lPSdVUkknIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0ndGhlIFVSSSB0byB3cml0ZSB0bycvPgpAQCAtMTE5MDUsMjQgKzExODE2LDI0IEBACiAgICAgICA8YXJnIG5hbWU9J2xlbicgdHlwZT0naW50JyBpbmZvPSd0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMnLz4KICAgICA8L2Z1bmN0eXBlPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUF0dFZhbHVlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGEgdmFsdWUgZm9yIGFuIGF0dHJpYnV0ZSBOb3RlOiB0aGUgcGFyc2VyIHdvbiZhcG9zO3QgZG8gc3Vic3RpdHV0aW9uIG9mIGVudGl0aWVzIGhlcmUsIHRoaXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyIGluIHhtbFN0cmluZ0dldE5vZGVMaXN0ICBbMTBdIEF0dFZhbHVlIDo6PSAmYXBvczsmcXVvdDsmYXBvczsgKFteJmx0OyZhbXA7JnF1b3Q7XSB8IFJlZmVyZW5jZSkqICZhcG9zOyZxdW90OyZhcG9zOyB8ICZxdW90OyZhcG9zOyZxdW90OyAoW14mbHQ7JmFtcDsmYXBvcztdIHwgUmVmZXJlbmNlKSogJnF1b3Q7JmFwb3M7JnF1b3Q7ICAzLjMuMyBBdHRyaWJ1dGUtVmFsdWUgTm9ybWFsaXphdGlvbjogQmVmb3JlIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgaXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBvciBjaGVja2VkIGZvciB2YWxpZGl0eSwgdGhlIFhNTCBwcm9jZXNzb3IgbXVzdCBub3JtYWxpemUgaXQgYXMgZm9sbG93czogLSBhIGNoYXJhY3RlciByZWZlcmVuY2UgaXMgcHJvY2Vzc2VkIGJ5IGFwcGVuZGluZyB0aGUgcmVmZXJlbmNlZCBjaGFyYWN0ZXIgdG8gdGhlIGF0dHJpYnV0ZSB2YWx1ZSAtIGFuIGVudGl0eSByZWZlcmVuY2UgaXMgcHJvY2Vzc2VkIGJ5IHJlY3Vyc2l2ZWx5IHByb2Nlc3NpbmcgdGhlIHJlcGxhY2VtZW50IHRleHQgb2YgdGhlIGVudGl0eSAtIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgKCN4MjAsICN4RCwgI3hBLCAjeDkpIGlzIHByb2Nlc3NlZCBieSBhcHBlbmRpbmcgI3gyMCB0byB0aGUgbm9ybWFsaXplZCB2YWx1ZSwgZXhjZXB0IHRoYXQgb25seSBhIHNpbmdsZSAjeDIwIGlzIGFwcGVuZGVkIGZvciBhICZxdW90OyN4RCN4QSZxdW90OyBzZXF1ZW5jZSB0aGF0IGlzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0eSBvciB0aGUgbGl0ZXJhbCBlbnRpdHkgdmFsdWUgb2YgYW4gaW50ZXJuYWwgcGFyc2VkIGVudGl0eSAtIG90aGVyIGNoYXJhY3RlcnMgYXJlIHByb2Nlc3NlZCBieSBhcHBlbmRpbmcgdGhlbSB0byB0aGUgbm9ybWFsaXplZCB2YWx1ZSBJZiB0aGUgZGVjbGFyZWQgdmFsdWUgaXMgbm90IENEQVRBLCB0aGVuIHRoZSBYTUwgcHJvY2Vzc29yIG11c3QgZnVydGhlciBwcm9jZXNzIHRoZSBub3JtYWxpemVkIGF0dHJpYnV0ZSB2YWx1ZSBieSBkaXNjYXJkaW5nIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSAoI3gyMCkgY2hhcmFjdGVycywgYW5kIGJ5IHJlcGxhY2luZyBzZXF1ZW5jZXMgb2Ygc3BhY2UgKCN4MjApIGNoYXJhY3RlcnMgYnkgYSBzaW5nbGUgc3BhY2UgKCN4MjApIGNoYXJhY3Rlci4gQWxsIGF0dHJpYnV0ZXMgZm9yIHdoaWNoIG5vIGRlY2xhcmF0aW9uIGhhcyBiZWVuIHJlYWQgc2hvdWxkIGJlIHRyZWF0ZWQgYnkgYSBub24tdmFsaWRhdGluZyBwYXJzZXIgYXMgaWYgZGVjbGFyZWQgQ0RBVEEuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYSB2YWx1ZSBmb3IgYW4gYXR0cmlidXRlIE5vdGU6IHRoZSBwYXJzZXIgd29uJmFwb3M7dCBkbyBzdWJzdGl0dXRpb24gb2YgZW50aXRpZXMgaGVyZSwgdGhpcyB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIgaW4geG1sU3RyaW5nR2V0Tm9kZUxpc3QgIFsxMF0gQXR0VmFsdWUgOjo9ICZhcG9zOyZxdW90OyZhcG9zOyAoW14mbHQ7JmFtcDsmcXVvdDtdIHwgUmVmZXJlbmNlKSogJmFwb3M7JnF1b3Q7JmFwb3M7IHwgJnF1b3Q7JmFwb3M7JnF1b3Q7IChbXiZsdDsmYW1wOyZhcG9zO10gfCBSZWZlcmVuY2UpKiAmcXVvdDsmYXBvczsmcXVvdDsgIDMuMy4zIEF0dHJpYnV0ZS1WYWx1ZSBOb3JtYWxpemF0aW9uOiBCZWZvcmUgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBpcyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIG9yIGNoZWNrZWQgZm9yIHZhbGlkaXR5LCB0aGUgWE1MIHByb2Nlc3NvciBtdXN0IG5vcm1hbGl6ZSBpdCBhcyBmb2xsb3dzOiAtIGEgY2hhcmFjdGVyIHJlZmVyZW5jZSBpcyBwcm9jZXNzZWQgYnkgYXBwZW5kaW5nIHRoZSByZWZlcmVuY2VkIGNoYXJhY3RlciB0byB0aGUgYXR0cmlidXRlIHZhbHVlIC0gYW4gZW50aXR5IHJlZmVyZW5jZSBpcyBwcm9jZXNzZWQgYnkgcmVjdXJzaXZlbHkgcHJvY2Vzc2luZyB0aGUgcmVwbGFjZW1lbnQgdGV4dCBvZiB0aGUgZW50aXR5IC0gYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciAoI3gyMCwgI3hELCAjeEEsICN4OSkgaXMgcHJvY2Vzc2VkIGJ5IGFwcGVuZGluZyAjeDIwIHRvIHRoZSBub3JtYWxpemVkIHZhbHVlLCBleGNlcHQgdGhhdCBvbmx5IGEgc2luZ2xlICN4MjAgaXMgYXBwZW5kZWQgZm9yIGEgJnF1b3Q7I3hEI3hBJnF1b3Q7IHNlcXVlbmNlIHRoYXQgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IG9yIHRoZSBsaXRlcmFsIGVudGl0eSB2YWx1ZSBvZiBhbiBpbnRlcm5hbCBwYXJzZWQgZW50aXR5IC0gb3RoZXIgY2hhcmFjdGVycyBhcmUgcHJvY2Vzc2VkIGJ5IGFwcGVuZGluZyB0aGVtIHRvIHRoZSBub3JtYWxpemVkIHZhbHVlIElmIHRoZSBkZWNsYXJlZCB2YWx1ZSBpcyBub3QgQ0RBVEEsIHRoZW4gdGhlIFhNTCBwcm9jZXNzb3IgbXVzdCBmdXJ0aGVyIHByb2Nlc3MgdGhlIG5vcm1hbGl6ZWQgYXR0cmlidXRlIHZhbHVlIGJ5IGRpc2NhcmRpbmcgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlICgjeDIwKSBjaGFyYWN0ZXJzLCBhbmQgYnkgcmVwbGFjaW5nIHNlcXVlbmNlcyBvZiBzcGFjZSAoI3gyMCkgY2hhcmFjdGVycyBieSBhIHNpbmdsZSBzcGFjZSAoI3gyMCkgY2hhcmFjdGVyLiBBbGwgYXR0cmlidXRlcyBmb3Igd2hpY2ggbm8gZGVjbGFyYXRpb24gaGFzIGJlZW4gcmVhZCBzaG91bGQgYmUgdHJlYXRlZCBieSBhIG5vbi12YWxpZGF0aW5nIHBhcnNlciBhcyBpZiBkZWNsYXJlZCBDREFUQS48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbENoYXIgKicgaW5mbz0ndGhlIEF0dFZhbHVlIHBhcnNlZCBvciBOVUxMLiBUaGUgdmFsdWUgaGFzIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlQXR0cmlidXRlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBhdHRyaWJ1dGUgIFs0MV0gQXR0cmlidXRlIDo6PSBOYW1lIEVxIEF0dFZhbHVlICBbIFdGQzogTm8gRXh0ZXJuYWwgRW50aXR5IFJlZmVyZW5jZXMgXSBBdHRyaWJ1dGUgdmFsdWVzIGNhbm5vdCBjb250YWluIGRpcmVjdCBvciBpbmRpcmVjdCBlbnRpdHkgcmVmZXJlbmNlcyB0byBleHRlcm5hbCBlbnRpdGllcy4gIFsgV0ZDOiBObyAmbHQ7IGluIEF0dHJpYnV0ZSBWYWx1ZXMgXSBUaGUgcmVwbGFjZW1lbnQgdGV4dCBvZiBhbnkgZW50aXR5IHJlZmVycmVkIHRvIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW4gYW4gYXR0cmlidXRlIHZhbHVlIChvdGhlciB0aGFuICZxdW90OyZhbXA7bHQ7JnF1b3Q7KSBtdXN0IG5vdCBjb250YWluIGEgJmx0Oy4gIFsgVkM6IEF0dHJpYnV0ZSBWYWx1ZSBUeXBlIF0gVGhlIGF0dHJpYnV0ZSBtdXN0IGhhdmUgYmVlbiBkZWNsYXJlZDsgdGhlIHZhbHVlIG11c3QgYmUgb2YgdGhlIHR5cGUgZGVjbGFyZWQgZm9yIGl0LiAgWzI1XSBFcSA6Oj0gUz8gJmFwb3M7PSZhcG9zOyBTPyAgV2l0aCBuYW1lc3BhY2U6ICBbTlMgMTFdIEF0dHJpYnV0ZSA6Oj0gUU5hbWUgRXEgQXR0VmFsdWUgIEFsc28gdGhlIGNhc2UgUU5hbWUgPT0geG1sbnM6Pz8/IGlzIGhhbmRsZWQgaW5kZXBlbmRlbnRseSBhcyBhIG5hbWVzcGFjZSBkZWZpbml0aW9uLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIGFuIGF0dHJpYnV0ZSAgWzQxXSBBdHRyaWJ1dGUgOjo9IE5hbWUgRXEgQXR0VmFsdWUgIFsgV0ZDOiBObyBFeHRlcm5hbCBFbnRpdHkgUmVmZXJlbmNlcyBdIEF0dHJpYnV0ZSB2YWx1ZXMgY2Fubm90IGNvbnRhaW4gZGlyZWN0IG9yIGluZGlyZWN0IGVudGl0eSByZWZlcmVuY2VzIHRvIGV4dGVybmFsIGVudGl0aWVzLiAgWyBXRkM6IE5vICZsdDsgaW4gQXR0cmlidXRlIFZhbHVlcyBdIFRoZSByZXBsYWNlbWVudCB0ZXh0IG9mIGFueSBlbnRpdHkgcmVmZXJyZWQgdG8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbiBhbiBhdHRyaWJ1dGUgdmFsdWUgKG90aGVyIHRoYW4gJnF1b3Q7JmFtcDtsdDsmcXVvdDspIG11c3Qgbm90IGNvbnRhaW4gYSAmbHQ7LiAgWyBWQzogQXR0cmlidXRlIFZhbHVlIFR5cGUgXSBUaGUgYXR0cmlidXRlIG11c3QgaGF2ZSBiZWVuIGRlY2xhcmVkOyB0aGUgdmFsdWUgbXVzdCBiZSBvZiB0aGUgdHlwZSBkZWNsYXJlZCBmb3IgaXQuICBbMjVdIEVxIDo6PSBTPyAmYXBvczs9JmFwb3M7IFM/ICBXaXRoIG5hbWVzcGFjZTogIFtOUyAxMV0gQXR0cmlidXRlIDo6PSBRTmFtZSBFcSBBdHRWYWx1ZSAgQWxzbyB0aGUgY2FzZSBRTmFtZSA9PSB4bWxuczo/Pz8gaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5IGFzIGEgbmFtZXNwYWNlIGRlZmluaXRpb24uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBhdHRyaWJ1dGUgbmFtZSwgYW5kIHRoZSB2YWx1ZSBpbiAqdmFsdWUuJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSd2YWx1ZScgdHlwZT0neG1sQ2hhciAqKicgaW5mbz0nYSB4bWxDaGFyICoqIHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUF0dHJpYnV0ZUxpc3REZWNsJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPjogcGFyc2UgdGhlIEF0dHJpYnV0ZSBsaXN0IGRlZiBmb3IgYW4gZWxlbWVudCAgWzUyXSBBdHRsaXN0RGVjbCA6Oj0gJmFwb3M7Jmx0OyFBVFRMSVNUJmFwb3M7IFMgTmFtZSBBdHREZWYqIFM/ICZhcG9zOyZndDsmYXBvczsgIFs1M10gQXR0RGVmIDo6PSBTIE5hbWUgUyBBdHRUeXBlIFMgRGVmYXVsdERlY2w8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBQYXJzZSBhbiBhdHRyaWJ1dGUgbGlzdCBkZWNsYXJhdGlvbiBmb3IgYW4gZWxlbWVudC4gQWx3YXlzIGNvbnN1bWVzICZhcG9zOyZsdDshJmFwb3M7LiAgWzUyXSBBdHRsaXN0RGVjbCA6Oj0gJmFwb3M7Jmx0OyFBVFRMSVNUJmFwb3M7IFMgTmFtZSBBdHREZWYqIFM/ICZhcG9zOyZndDsmYXBvczsgIFs1M10gQXR0RGVmIDo6PSBTIE5hbWUgUyBBdHRUeXBlIFMgRGVmYXVsdERlY2w8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VBdHRyaWJ1dGVUeXBlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIHRoZSBBdHRyaWJ1dGUgbGlzdCBkZWYgZm9yIGFuIGVsZW1lbnQgIFs1NF0gQXR0VHlwZSA6Oj0gU3RyaW5nVHlwZSB8IFRva2VuaXplZFR5cGUgfCBFbnVtZXJhdGVkVHlwZSAgWzU1XSBTdHJpbmdUeXBlIDo6PSAmYXBvcztDREFUQSZhcG9zOyAgWzU2XSBUb2tlbml6ZWRUeXBlIDo6PSAmYXBvcztJRCZhcG9zOyB8ICZhcG9zO0lEUkVGJmFwb3M7IHwgJmFwb3M7SURSRUZTJmFwb3M7IHwgJmFwb3M7RU5USVRZJmFwb3M7IHwgJmFwb3M7RU5USVRJRVMmYXBvczsgfCAmYXBvcztOTVRPS0VOJmFwb3M7IHwgJmFwb3M7Tk1UT0tFTlMmYXBvczsgIFZhbGlkaXR5IGNvbnN0cmFpbnRzIGZvciBhdHRyaWJ1dGUgdmFsdWVzIHN5bnRheCBhcmUgY2hlY2tlZCBpbiB4bWxWYWxpZGF0ZUF0dHJpYnV0ZVZhbHVlKCkgIFsgVkM6IElEIF0gVmFsdWVzIG9mIHR5cGUgSUQgbXVzdCBtYXRjaCB0aGUgTmFtZSBwcm9kdWN0aW9uLiBBIG5hbWUgbXVzdCBub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIGFuIFhNTCBkb2N1bWVudCBhcyBhIHZhbHVlIG9mIHRoaXMgdHlwZTsgaS5lLiwgSUQgdmFsdWVzIG11c3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGVsZW1lbnRzIHdoaWNoIGJlYXIgdGhlbS4gIFsgVkM6IE9uZSBJRCBwZXIgRWxlbWVudCBUeXBlIF0gTm8gZWxlbWVudCB0eXBlIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgSUQgYXR0cmlidXRlIHNwZWNpZmllZC4gIFsgVkM6IElEIEF0dHJpYnV0ZSBEZWZhdWx0IF0gQW4gSUQgYXR0cmlidXRlIG11c3QgaGF2ZSBhIGRlY2xhcmVkIGRlZmF1bHQgb2YgI0lNUExJRUQgb3IgI1JFUVVJUkVELiAgWyBWQzogSURSRUYgXSBWYWx1ZXMgb2YgdHlwZSBJRFJFRiBtdXN0IG1hdGNoIHRoZSBOYW1lIHByb2R1Y3Rpb24sIGFuZCB2YWx1ZXMgb2YgdHlwZSBJRFJFRlMgbXVzdCBtYXRjaCBOYW1lczsgZWFjaCBJRFJFRiBOYW1lIG11c3QgbWF0Y2ggdGhlIHZhbHVlIG9mIGFuIElEIGF0dHJpYnV0ZSBvbiBzb21lIGVsZW1lbnQgaW4gdGhlIFhNTCBkb2N1bWVudDsgaS5lLiBJRFJFRiB2YWx1ZXMgbXVzdCBtYXRjaCB0aGUgdmFsdWUgb2Ygc29tZSBJRCBhdHRyaWJ1dGUuICBbIFZDOiBFbnRpdHkgTmFtZSBdIFZhbHVlcyBvZiB0eXBlIEVOVElUWSBtdXN0IG1hdGNoIHRoZSBOYW1lIHByb2R1Y3Rpb24sIHZhbHVlcyBvZiB0eXBlIEVOVElUSUVTIG11c3QgbWF0Y2ggTmFtZXM7IGVhY2ggRW50aXR5IE5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBhbiB1bnBhcnNlZCBlbnRpdHkgZGVjbGFyZWQgaW4gdGhlIERURC4gIFsgVkM6IE5hbWUgVG9rZW4gXSBWYWx1ZXMgb2YgdHlwZSBOTVRPS0VOIG11c3QgbWF0Y2ggdGhlIE5tdG9rZW4gcHJvZHVjdGlvbjsgdmFsdWVzIG9mIHR5cGUgTk1UT0tFTlMgbXVzdCBtYXRjaCBObXRva2Vucy48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSB0aGUgQXR0cmlidXRlIGxpc3QgZGVmIGZvciBhbiBlbGVtZW50ICBbNTRdIEF0dFR5cGUgOjo9IFN0cmluZ1R5cGUgfCBUb2tlbml6ZWRUeXBlIHwgRW51bWVyYXRlZFR5cGUgIFs1NV0gU3RyaW5nVHlwZSA6Oj0gJmFwb3M7Q0RBVEEmYXBvczsgIFs1Nl0gVG9rZW5pemVkVHlwZSA6Oj0gJmFwb3M7SUQmYXBvczsgfCAmYXBvcztJRFJFRiZhcG9zOyB8ICZhcG9zO0lEUkVGUyZhcG9zOyB8ICZhcG9zO0VOVElUWSZhcG9zOyB8ICZhcG9zO0VOVElUSUVTJmFwb3M7IHwgJmFwb3M7Tk1UT0tFTiZhcG9zOyB8ICZhcG9zO05NVE9LRU5TJmFwb3M7ICBWYWxpZGl0eSBjb25zdHJhaW50cyBmb3IgYXR0cmlidXRlIHZhbHVlcyBzeW50YXggYXJlIGNoZWNrZWQgaW4geG1sVmFsaWRhdGVBdHRyaWJ1dGVWYWx1ZSgpICBbIFZDOiBJRCBdIFZhbHVlcyBvZiB0eXBlIElEIG11c3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbi4gQSBuYW1lIG11c3Qgbm90IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhbiBYTUwgZG9jdW1lbnQgYXMgYSB2YWx1ZSBvZiB0aGlzIHR5cGU7IGkuZS4sIElEIHZhbHVlcyBtdXN0IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBlbGVtZW50cyB3aGljaCBiZWFyIHRoZW0uICBbIFZDOiBPbmUgSUQgcGVyIEVsZW1lbnQgVHlwZSBdIE5vIGVsZW1lbnQgdHlwZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIElEIGF0dHJpYnV0ZSBzcGVjaWZpZWQuICBbIFZDOiBJRCBBdHRyaWJ1dGUgRGVmYXVsdCBdIEFuIElEIGF0dHJpYnV0ZSBtdXN0IGhhdmUgYSBkZWNsYXJlZCBkZWZhdWx0IG9mICNJTVBMSUVEIG9yICNSRVFVSVJFRC4gIFsgVkM6IElEUkVGIF0gVmFsdWVzIG9mIHR5cGUgSURSRUYgbXVzdCBtYXRjaCB0aGUgTmFtZSBwcm9kdWN0aW9uLCBhbmQgdmFsdWVzIG9mIHR5cGUgSURSRUZTIG11c3QgbWF0Y2ggTmFtZXM7IGVhY2ggSURSRUYgTmFtZSBtdXN0IG1hdGNoIHRoZSB2YWx1ZSBvZiBhbiBJRCBhdHRyaWJ1dGUgb24gc29tZSBlbGVtZW50IGluIHRoZSBYTUwgZG9jdW1lbnQ7IGkuZS4gSURSRUYgdmFsdWVzIG11c3QgbWF0Y2ggdGhlIHZhbHVlIG9mIHNvbWUgSUQgYXR0cmlidXRlLiAgWyBWQzogRW50aXR5IE5hbWUgXSBWYWx1ZXMgb2YgdHlwZSBFTlRJVFkgbXVzdCBtYXRjaCB0aGUgTmFtZSBwcm9kdWN0aW9uLCB2YWx1ZXMgb2YgdHlwZSBFTlRJVElFUyBtdXN0IG1hdGNoIE5hbWVzOyBlYWNoIEVudGl0eSBOYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2YgYW4gdW5wYXJzZWQgZW50aXR5IGRlY2xhcmVkIGluIHRoZSBEVEQuICBbIFZDOiBOYW1lIFRva2VuIF0gVmFsdWVzIG9mIHR5cGUgTk1UT0tFTiBtdXN0IG1hdGNoIHRoZSBObXRva2VuIHByb2R1Y3Rpb247IHZhbHVlcyBvZiB0eXBlIE5NVE9LRU5TIG11c3QgbWF0Y2ggTm10b2tlbnMuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBhdHRyaWJ1dGUgdHlwZScvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICAgIDxhcmcgbmFtZT0ndHJlZScgdHlwZT0neG1sRW51bWVyYXRpb25QdHIgKicgaW5mbz0ndGhlIGVudW1lcmF0aW9uIHRyZWUgYnVpbHQgd2hpbGUgcGFyc2luZycvPgpAQCAtMTE5NTEsNyArMTE4NjIsNyBAQAogICAgICAgPGFyZyBuYW1lPSdyZWNvdmVyJyB0eXBlPSdpbnQnIGluZm89J3JldHVybiBub2RlcyBldmVuIGlmIHRoZSBkYXRhIGlzIGJyb2tlbiAodXNlIDApJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VDRFNlY3QnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+UGFyc2UgZXNjYXBlZCBwdXJlIHJhdyBjb250ZW50LiAgWzE4XSBDRFNlY3QgOjo9IENEU3RhcnQgQ0RhdGEgQ0RFbmQgIFsxOV0gQ0RTdGFydCA6Oj0gJmFwb3M7Jmx0OyFbQ0RBVEFbJmFwb3M7ICBbMjBdIERhdGEgOjo9IChDaGFyKiAtIChDaGFyKiAmYXBvcztdXSZndDsmYXBvczsgQ2hhciopKSAgWzIxXSBDREVuZCA6Oj0gJmFwb3M7XV0mZ3Q7JmFwb3M7PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgUGFyc2UgZXNjYXBlZCBwdXJlIHJhdyBjb250ZW50LiBBbHdheXMgY29uc3VtZXMgJmFwb3M7Jmx0OyFbJmFwb3M7LiAgWzE4XSBDRFNlY3QgOjo9IENEU3RhcnQgQ0RhdGEgQ0RFbmQgIFsxOV0gQ0RTdGFydCA6Oj0gJmFwb3M7Jmx0OyFbQ0RBVEFbJmFwb3M7ICBbMjBdIERhdGEgOjo9IChDaGFyKiAtIChDaGFyKiAmYXBvcztdXSZndDsmYXBvczsgQ2hhciopKSAgWzIxXSBDREVuZCA6Oj0gJmFwb3M7XV0mZ3Q7JmFwb3M7PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMTk2MiwxMCArMTE4NzMsMTAgQEAKICAgICAgIDxhcmcgbmFtZT0nZmlsZW5hbWUnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0ndGhlIGZpbGVuYW1lJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VDaGFyRGF0YScgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSBhIENoYXJEYXRhIHNlY3Rpb24uIGlmIHdlIGFyZSB3aXRoaW4gYSBDREFUQSBzZWN0aW9uICZhcG9zO11dJmd0OyZhcG9zOyBtYXJrcyBhbiBlbmQgb2Ygc2VjdGlvbi4gIFRoZSByaWdodCBhbmdsZSBicmFja2V0ICgmZ3Q7KSBtYXkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHN0cmluZyAmcXVvdDsmYW1wO2d0OyZxdW90OywgYW5kIG11c3QsIGZvciBjb21wYXRpYmlsaXR5LCBiZSBlc2NhcGVkIHVzaW5nICZxdW90OyZhbXA7Z3Q7JnF1b3Q7IG9yIGEgY2hhcmFjdGVyIHJlZmVyZW5jZSB3aGVuIGl0IGFwcGVhcnMgaW4gdGhlIHN0cmluZyAmcXVvdDtdXSZndDsmcXVvdDsgaW4gY29udGVudCwgd2hlbiB0aGF0IHN0cmluZyBpcyBub3QgbWFya2luZyB0aGUgZW5kIG9mIGEgQ0RBVEEgc2VjdGlvbi4gIFsxNF0gQ2hhckRhdGEgOjo9IFteJmx0OyZhbXA7XSogLSAoW14mbHQ7JmFtcDtdKiAmYXBvcztdXSZndDsmYXBvczsgW14mbHQ7JmFtcDtdKik8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgotICAgICAgPGFyZyBuYW1lPSdjZGF0YScgdHlwZT0naW50JyBpbmZvPSdpbnQgaW5kaWNhdGluZyB3aGV0aGVyIHdlIGFyZSB3aXRoaW4gYSBDREFUQSBzZWN0aW9uJy8+CisgICAgICA8YXJnIG5hbWU9J2NkYXRhJyB0eXBlPSdpbnQnIGluZm89J3VudXNlZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlQ2hhckVuY29kaW5nJyBmaWxlPSdlbmNvZGluZycgbW9kdWxlPSdlbmNvZGluZyc+CiAgICAgICA8aW5mbz5Db21wYXJlIHRoZSBzdHJpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZXMgYWxyZWFkeSBrbm93bi4gTm90ZSB0aGF0IHRoZSBjb21wYXJpc29uIGlzIGNhc2UgaW5zZW5zaXRpdmUgYWNjb3JkaW5nbHkgdG8gdGhlIHNlY3Rpb24gW1hNTF0gNC4zLjMgQ2hhcmFjdGVyIEVuY29kaW5nIGluIEVudGl0aWVzLjwvaW5mbz4KQEAgLTExOTczLDcgKzExODg0LDcgQEAKICAgICAgIDxhcmcgbmFtZT0nbmFtZScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgZW5jb2RpbmcgbmFtZSBhcyBwYXJzZWQsIGluIFVURi04IGZvcm1hdCAoQVNDSUkgYWN0dWFsbHkpJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VDaGFyUmVmJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIFJlZmVyZW5jZSBkZWNsYXJhdGlvbnMgIFs2Nl0gQ2hhclJlZiA6Oj0gJmFwb3M7JmFtcDsjJmFwb3M7IFswLTldKyAmYXBvczs7JmFwb3M7IHwgJmFwb3M7JmFtcDsjeCZhcG9zOyBbMC05YS1mQS1GXSsgJmFwb3M7OyZhcG9zOyAgWyBXRkM6IExlZ2FsIENoYXJhY3RlciBdIENoYXJhY3RlcnMgcmVmZXJyZWQgdG8gdXNpbmcgY2hhcmFjdGVyIHJlZmVyZW5jZXMgbXVzdCBtYXRjaCB0aGUgcHJvZHVjdGlvbiBmb3IgQ2hhci48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBQYXJzZSBhIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZS4gQWx3YXlzIGNvbnN1bWVzICZhcG9zOyZhbXA7JmFwb3M7LiAgWzY2XSBDaGFyUmVmIDo6PSAmYXBvczsmYW1wOyMmYXBvczsgWzAtOV0rICZhcG9zOzsmYXBvczsgfCAmYXBvczsmYW1wOyN4JmFwb3M7IFswLTlhLWZBLUZdKyAmYXBvczs7JmFwb3M7ICBbIFdGQzogTGVnYWwgQ2hhcmFjdGVyIF0gQ2hhcmFjdGVycyByZWZlcnJlZCB0byB1c2luZyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBtdXN0IG1hdGNoIHRoZSBwcm9kdWN0aW9uIGZvciBDaGFyLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgdmFsdWUgcGFyc2VkIChhcyBhbiBpbnQpLCAwIGluIGNhc2Ugb2YgZXJyb3InLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTExOTg3LDcgKzExODk4LDcgQEAKICAgICAgIDxhcmcgbmFtZT0ndGVybWluYXRlJyB0eXBlPSdpbnQnIGluZm89J2xhc3QgY2h1bmsgaW5kaWNhdG9yJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VDb21tZW50JyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPlNraXAgYW4gWE1MIChTR01MKSBjb21tZW50ICZsdDshLS0gLi4uLiAtLSZndDsgVGhlIHNwZWMgc2F5cyB0aGF0ICZxdW90O0ZvciBjb21wYXRpYmlsaXR5LCB0aGUgc3RyaW5nICZxdW90Oy0tJnF1b3Q7IChkb3VibGUtaHlwaGVuKSBtdXN0IG5vdCBvY2N1ciB3aXRoaW4gY29tbWVudHMuICZxdW90OyAgWzE1XSBDb21tZW50IDo6PSAmYXBvczsmbHQ7IS0tJmFwb3M7ICgoQ2hhciAtICZhcG9zOy0mYXBvczspIHwgKCZhcG9zOy0mYXBvczsgKENoYXIgLSAmYXBvczstJmFwb3M7KSkpKiAmYXBvczstLSZndDsmYXBvczs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBQYXJzZSBhbiBYTUwgKFNHTUwpIGNvbW1lbnQuIEFsd2F5cyBjb25zdW1lcyAmYXBvczsmbHQ7ISZhcG9zOy4gIFRoZSBzcGVjIHNheXMgdGhhdCAmcXVvdDtGb3IgY29tcGF0aWJpbGl0eSwgdGhlIHN0cmluZyAmcXVvdDstLSZxdW90OyAoZG91YmxlLWh5cGhlbikgbXVzdCBub3Qgb2NjdXIgd2l0aGluIGNvbW1lbnRzLiAmcXVvdDsgIFsxNV0gQ29tbWVudCA6Oj0gJmFwb3M7Jmx0OyEtLSZhcG9zOyAoKENoYXIgLSAmYXBvczstJmFwb3M7KSB8ICgmYXBvczstJmFwb3M7IChDaGFyIC0gJmFwb3M7LSZhcG9zOykpKSogJmFwb3M7LS0mZ3Q7JmFwb3M7PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMjAxMiwxOSArMTE5MjMsMTkgQEAKICAgICAgIDxhcmcgbmFtZT0nU3lzdGVtSUQnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBOQU1FKiBjb250YWluaW5nIHRoZSBVUkwgdG8gdGhlIERURCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlRGVmYXVsdERlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+UGFyc2UgYW4gYXR0cmlidXRlIGRlZmF1bHQgZGVjbGFyYXRpb24gIFs2MF0gRGVmYXVsdERlY2wgOjo9ICZhcG9zOyNSRVFVSVJFRCZhcG9zOyB8ICZhcG9zOyNJTVBMSUVEJmFwb3M7IHwgKCgmYXBvczsjRklYRUQmYXBvczsgUyk/IEF0dFZhbHVlKSAgWyBWQzogUmVxdWlyZWQgQXR0cmlidXRlIF0gaWYgdGhlIGRlZmF1bHQgZGVjbGFyYXRpb24gaXMgdGhlIGtleXdvcmQgI1JFUVVJUkVELCB0aGVuIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGUgdHlwZSBpbiB0aGUgYXR0cmlidXRlLWxpc3QgZGVjbGFyYXRpb24uICBbIFZDOiBBdHRyaWJ1dGUgRGVmYXVsdCBMZWdhbCBdIFRoZSBkZWNsYXJlZCBkZWZhdWx0IHZhbHVlIG11c3QgbWVldCB0aGUgbGV4aWNhbCBjb25zdHJhaW50cyBvZiB0aGUgZGVjbGFyZWQgYXR0cmlidXRlIHR5cGUgYy5mLiB4bWxWYWxpZGF0ZUF0dHJpYnV0ZURlY2woKSAgWyBWQzogRml4ZWQgQXR0cmlidXRlIERlZmF1bHQgXSBpZiBhbiBhdHRyaWJ1dGUgaGFzIGEgZGVmYXVsdCB2YWx1ZSBkZWNsYXJlZCB3aXRoIHRoZSAjRklYRUQga2V5d29yZCwgaW5zdGFuY2VzIG9mIHRoYXQgYXR0cmlidXRlIG11c3QgbWF0Y2ggdGhlIGRlZmF1bHQgdmFsdWUuICBbIFdGQzogTm8gJmx0OyBpbiBBdHRyaWJ1dGUgVmFsdWVzIF0gaGFuZGxlZCBpbiB4bWxQYXJzZUF0dFZhbHVlKCk8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBQYXJzZSBhbiBhdHRyaWJ1dGUgZGVmYXVsdCBkZWNsYXJhdGlvbiAgWzYwXSBEZWZhdWx0RGVjbCA6Oj0gJmFwb3M7I1JFUVVJUkVEJmFwb3M7IHwgJmFwb3M7I0lNUExJRUQmYXBvczsgfCAoKCZhcG9zOyNGSVhFRCZhcG9zOyBTKT8gQXR0VmFsdWUpICBbIFZDOiBSZXF1aXJlZCBBdHRyaWJ1dGUgXSBpZiB0aGUgZGVmYXVsdCBkZWNsYXJhdGlvbiBpcyB0aGUga2V5d29yZCAjUkVRVUlSRUQsIHRoZW4gdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgYWxsIGVsZW1lbnRzIG9mIHRoZSB0eXBlIGluIHRoZSBhdHRyaWJ1dGUtbGlzdCBkZWNsYXJhdGlvbi4gIFsgVkM6IEF0dHJpYnV0ZSBEZWZhdWx0IExlZ2FsIF0gVGhlIGRlY2xhcmVkIGRlZmF1bHQgdmFsdWUgbXVzdCBtZWV0IHRoZSBsZXhpY2FsIGNvbnN0cmFpbnRzIG9mIHRoZSBkZWNsYXJlZCBhdHRyaWJ1dGUgdHlwZSBjLmYuIHhtbFZhbGlkYXRlQXR0cmlidXRlRGVjbCgpICBbIFZDOiBGaXhlZCBBdHRyaWJ1dGUgRGVmYXVsdCBdIGlmIGFuIGF0dHJpYnV0ZSBoYXMgYSBkZWZhdWx0IHZhbHVlIGRlY2xhcmVkIHdpdGggdGhlICNGSVhFRCBrZXl3b3JkLCBpbnN0YW5jZXMgb2YgdGhhdCBhdHRyaWJ1dGUgbXVzdCBtYXRjaCB0aGUgZGVmYXVsdCB2YWx1ZS4gIFsgV0ZDOiBObyAmbHQ7IGluIEF0dHJpYnV0ZSBWYWx1ZXMgXSBoYW5kbGVkIGluIHhtbFBhcnNlQXR0VmFsdWUoKTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSdYTUxfQVRUUklCVVRFX05PTkUsIFhNTF9BVFRSSUJVVEVfUkVRVUlSRUQsIFhNTF9BVFRSSUJVVEVfSU1QTElFRCBvciBYTUxfQVRUUklCVVRFX0ZJWEVELicvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsdWUnIHR5cGU9J3htbENoYXIgKionIGluZm89J1JlY2VpdmUgYSBwb3NzaWJsZSBmaXhlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYXR0cmlidXRlJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VEb2MnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQgYW5kIGJ1aWxkIGEgdHJlZS48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBVc2UgeG1sUmVhZERvYy4gIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQgYW5kIGJ1aWxkIGEgdHJlZS48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbERvY1B0cicgaW5mbz0ndGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlJy8+CiAgICAgICA8YXJnIG5hbWU9J2N1cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgeG1sQ2hhcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlRG9jVHlwZURlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYSBET0NUWVBFIGRlY2xhcmF0aW9uICBbMjhdIGRvY3R5cGVkZWNsIDo6PSAmYXBvczsmbHQ7IURPQ1RZUEUmYXBvczsgUyBOYW1lIChTIEV4dGVybmFsSUQpPyBTPyAoJmFwb3M7WyZhcG9zOyAobWFya3VwZGVjbCB8IFBFUmVmZXJlbmNlIHwgUykqICZhcG9zO10mYXBvczsgUz8pPyAmYXBvczsmZ3Q7JmFwb3M7ICBbIFZDOiBSb290IEVsZW1lbnQgVHlwZSBdIFRoZSBOYW1lIGluIHRoZSBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9uIG11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgcm9vdCBlbGVtZW50LjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIGEgRE9DVFlQRSBkZWNsYXJhdGlvbiAgWzI4XSBkb2N0eXBlZGVjbCA6Oj0gJmFwb3M7Jmx0OyFET0NUWVBFJmFwb3M7IFMgTmFtZSAoUyBFeHRlcm5hbElEKT8gUz8gKCZhcG9zO1smYXBvczsgKG1hcmt1cGRlY2wgfCBQRVJlZmVyZW5jZSB8IFMpKiAmYXBvcztdJmFwb3M7IFM/KT8gJmFwb3M7Jmd0OyZhcG9zOyAgWyBWQzogUm9vdCBFbGVtZW50IFR5cGUgXSBUaGUgTmFtZSBpbiB0aGUgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbiBtdXN0IG1hdGNoIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIHJvb3QgZWxlbWVudC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTEyMDM0LDQ3ICsxMTk0NSw0NyBAQAogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVsZW1lbnQnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIGVsZW1lbnQgIFszOV0gZWxlbWVudCA6Oj0gRW1wdHlFbGVtVGFnIHwgU1RhZyBjb250ZW50IEVUYWcgIFsgV0ZDOiBFbGVtZW50IFR5cGUgTWF0Y2ggXSBUaGUgTmFtZSBpbiBhbiBlbGVtZW50JmFwb3M7cyBlbmQtdGFnIG11c3QgbWF0Y2ggdGhlIGVsZW1lbnQgdHlwZSBpbiB0aGUgc3RhcnQtdGFnLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIGFuIFhNTCBlbGVtZW50ICBbMzldIGVsZW1lbnQgOjo9IEVtcHR5RWxlbVRhZyB8IFNUYWcgY29udGVudCBFVGFnICBbIFdGQzogRWxlbWVudCBUeXBlIE1hdGNoIF0gVGhlIE5hbWUgaW4gYW4gZWxlbWVudCZhcG9zO3MgZW5kLXRhZyBtdXN0IG1hdGNoIHRoZSBlbGVtZW50IHR5cGUgaW4gdGhlIHN0YXJ0LXRhZy48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VFbGVtZW50Q2hpbGRyZW5Db250ZW50RGVjbCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGEgTWl4ZWQgRWxlbWVudCBjb250ZW50IFRoZSBsZWFkaW5nICZhcG9zOygmYXBvczsgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiB4bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbCAgWzQ3XSBjaGlsZHJlbiA6Oj0gKGNob2ljZSB8IHNlcSkgKCZhcG9zOz8mYXBvczsgfCAmYXBvczsqJmFwb3M7IHwgJmFwb3M7KyZhcG9zOyk/ICBbNDhdIGNwIDo6PSAoTmFtZSB8IGNob2ljZSB8IHNlcSkgKCZhcG9zOz8mYXBvczsgfCAmYXBvczsqJmFwb3M7IHwgJmFwb3M7KyZhcG9zOyk/ICBbNDldIGNob2ljZSA6Oj0gJmFwb3M7KCZhcG9zOyBTPyBjcCAoIFM/ICZhcG9zO3wmYXBvczsgUz8gY3AgKSogUz8gJmFwb3M7KSZhcG9zOyAgWzUwXSBzZXEgOjo9ICZhcG9zOygmYXBvczsgUz8gY3AgKCBTPyAmYXBvczssJmFwb3M7IFM/IGNwICkqIFM/ICZhcG9zOykmYXBvczsgIFsgVkM6IFByb3BlciBHcm91cC9QRSBOZXN0aW5nIF0gYXBwbGllcyB0byBbNDldIGFuZCBbNTBdIFRPRE8gUGFyYW1ldGVyLWVudGl0eSByZXBsYWNlbWVudCB0ZXh0IG11c3QgYmUgcHJvcGVybHkgbmVzdGVkIHdpdGggcGFyZW50aGVzaXplZCBncm91cHMuIFRoYXQgaXMgdG8gc2F5LCBpZiBlaXRoZXIgb2YgdGhlIG9wZW5pbmcgb3IgY2xvc2luZyBwYXJlbnRoZXNlcyBpbiBhIGNob2ljZSwgc2VxLCBvciBNaXhlZCBjb25zdHJ1Y3QgaXMgY29udGFpbmVkIGluIHRoZSByZXBsYWNlbWVudCB0ZXh0IGZvciBhIHBhcmFtZXRlciBlbnRpdHksIGJvdGggbXVzdCBiZSBjb250YWluZWQgaW4gdGhlIHNhbWUgcmVwbGFjZW1lbnQgdGV4dC4gRm9yIGludGVyb3BlcmFiaWxpdHksIGlmIGEgcGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2UgYXBwZWFycyBpbiBhIGNob2ljZSwgc2VxLCBvciBNaXhlZCBjb25zdHJ1Y3QsIGl0cyByZXBsYWNlbWVudCB0ZXh0IHNob3VsZCBub3QgYmUgZW1wdHksIGFuZCBuZWl0aGVyIHRoZSBmaXJzdCBub3IgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IHNob3VsZCBiZSBhIGNvbm5lY3RvciAofCBvciAsKS48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGEgTWl4ZWQgRWxlbWVudCBjb250ZW50IFRoZSBsZWFkaW5nICZhcG9zOygmYXBvczsgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiB4bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbCAgWzQ3XSBjaGlsZHJlbiA6Oj0gKGNob2ljZSB8IHNlcSkgKCZhcG9zOz8mYXBvczsgfCAmYXBvczsqJmFwb3M7IHwgJmFwb3M7KyZhcG9zOyk/ICBbNDhdIGNwIDo6PSAoTmFtZSB8IGNob2ljZSB8IHNlcSkgKCZhcG9zOz8mYXBvczsgfCAmYXBvczsqJmFwb3M7IHwgJmFwb3M7KyZhcG9zOyk/ICBbNDldIGNob2ljZSA6Oj0gJmFwb3M7KCZhcG9zOyBTPyBjcCAoIFM/ICZhcG9zO3wmYXBvczsgUz8gY3AgKSogUz8gJmFwb3M7KSZhcG9zOyAgWzUwXSBzZXEgOjo9ICZhcG9zOygmYXBvczsgUz8gY3AgKCBTPyAmYXBvczssJmFwb3M7IFM/IGNwICkqIFM/ICZhcG9zOykmYXBvczsgIFsgVkM6IFByb3BlciBHcm91cC9QRSBOZXN0aW5nIF0gYXBwbGllcyB0byBbNDldIGFuZCBbNTBdIFRPRE8gUGFyYW1ldGVyLWVudGl0eSByZXBsYWNlbWVudCB0ZXh0IG11c3QgYmUgcHJvcGVybHkgbmVzdGVkIHdpdGggcGFyZW50aGVzaXplZCBncm91cHMuIFRoYXQgaXMgdG8gc2F5LCBpZiBlaXRoZXIgb2YgdGhlIG9wZW5pbmcgb3IgY2xvc2luZyBwYXJlbnRoZXNlcyBpbiBhIGNob2ljZSwgc2VxLCBvciBNaXhlZCBjb25zdHJ1Y3QgaXMgY29udGFpbmVkIGluIHRoZSByZXBsYWNlbWVudCB0ZXh0IGZvciBhIHBhcmFtZXRlciBlbnRpdHksIGJvdGggbXVzdCBiZSBjb250YWluZWQgaW4gdGhlIHNhbWUgcmVwbGFjZW1lbnQgdGV4dC4gRm9yIGludGVyb3BlcmFiaWxpdHksIGlmIGEgcGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2UgYXBwZWFycyBpbiBhIGNob2ljZSwgc2VxLCBvciBNaXhlZCBjb25zdHJ1Y3QsIGl0cyByZXBsYWNlbWVudCB0ZXh0IHNob3VsZCBub3QgYmUgZW1wdHksIGFuZCBuZWl0aGVyIHRoZSBmaXJzdCBub3IgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IHNob3VsZCBiZSBhIGNvbm5lY3RvciAofCBvciAsKS48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbEVsZW1lbnRDb250ZW50UHRyJyBpbmZvPSd0aGUgdHJlZSBvZiB4bWxFbGVtZW50Q29udGVudFB0ciBkZXNjcmliaW5nIHRoZSBlbGVtZW50IGhpZXJhcmNoeS4nLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J2lucHV0Y2hrJyB0eXBlPSdpbnQnIGluZm89J3RoZSBpbnB1dCB1c2VkIGZvciB0aGUgY3VycmVudCBlbnRpdHksIG5lZWRlZCBmb3IgYm91bmRhcnkgY2hlY2tzJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VFbGVtZW50Q29udGVudERlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgdGhlIGRlY2xhcmF0aW9uIGZvciBhbiBFbGVtZW50IGNvbnRlbnQgZWl0aGVyIE1peGVkIG9yIENoaWxkcmVuLCB0aGUgY2FzZXMgRU1QVFkgYW5kIEFOWSBhcmUgaGFuZGxlZCBkaXJlY3RseSBpbiB4bWxQYXJzZUVsZW1lbnREZWNsICBbNDZdIGNvbnRlbnRzcGVjIDo6PSAmYXBvcztFTVBUWSZhcG9zOyB8ICZhcG9zO0FOWSZhcG9zOyB8IE1peGVkIHwgY2hpbGRyZW48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGFuIEVsZW1lbnQgY29udGVudCBlaXRoZXIgTWl4ZWQgb3IgQ2hpbGRyZW4sIHRoZSBjYXNlcyBFTVBUWSBhbmQgQU5ZIGFyZSBoYW5kbGVkIGRpcmVjdGx5IGluIHhtbFBhcnNlRWxlbWVudERlY2wgIFs0Nl0gY29udGVudHNwZWMgOjo9ICZhcG9zO0VNUFRZJmFwb3M7IHwgJmFwb3M7QU5ZJmFwb3M7IHwgTWl4ZWQgfCBjaGlsZHJlbjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPSd0aGUgdHlwZSBvZiBlbGVtZW50IGNvbnRlbnQgWE1MX0VMRU1FTlRfVFlQRV94eHgnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J25hbWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgYmVpbmcgZGVmaW5lZC4nLz4KICAgICAgIDxhcmcgbmFtZT0ncmVzdWx0JyB0eXBlPSd4bWxFbGVtZW50Q29udGVudFB0ciAqJyBpbmZvPSd0aGUgRWxlbWVudCBDb250ZW50IHBvaW50ZXIgd2lsbCBiZSBzdG9yZWQgaGVyZSBpZiBhbnknLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVsZW1lbnREZWNsJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIEVsZW1lbnQgZGVjbGFyYXRpb24uICBbNDVdIGVsZW1lbnRkZWNsIDo6PSAmYXBvczsmbHQ7IUVMRU1FTlQmYXBvczsgUyBOYW1lIFMgY29udGVudHNwZWMgUz8gJmFwb3M7Jmd0OyZhcG9zOyAgWyBWQzogVW5pcXVlIEVsZW1lbnQgVHlwZSBEZWNsYXJhdGlvbiBdIE5vIGVsZW1lbnQgdHlwZSBtYXkgYmUgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2U8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBQYXJzZSBhbiBlbGVtZW50IGRlY2xhcmF0aW9uLiBBbHdheXMgY29uc3VtZXMgJmFwb3M7Jmx0OyEmYXBvczsuICBbNDVdIGVsZW1lbnRkZWNsIDo6PSAmYXBvczsmbHQ7IUVMRU1FTlQmYXBvczsgUyBOYW1lIFMgY29udGVudHNwZWMgUz8gJmFwb3M7Jmd0OyZhcG9zOyAgWyBWQzogVW5pcXVlIEVsZW1lbnQgVHlwZSBEZWNsYXJhdGlvbiBdIE5vIGVsZW1lbnQgdHlwZSBtYXkgYmUgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2U8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQsIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3InLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VFbGVtZW50TWl4ZWRDb250ZW50RGVjbCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGEgTWl4ZWQgRWxlbWVudCBjb250ZW50IFRoZSBsZWFkaW5nICZhcG9zOygmYXBvczsgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiB4bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbCAgWzUxXSBNaXhlZCA6Oj0gJmFwb3M7KCZhcG9zOyBTPyAmYXBvczsjUENEQVRBJmFwb3M7IChTPyAmYXBvczt8JmFwb3M7IFM/IE5hbWUpKiBTPyAmYXBvczspKiZhcG9zOyB8ICZhcG9zOygmYXBvczsgUz8gJmFwb3M7I1BDREFUQSZhcG9zOyBTPyAmYXBvczspJmFwb3M7ICBbIFZDOiBQcm9wZXIgR3JvdXAvUEUgTmVzdGluZyBdIGFwcGxpZXMgdG8gWzUxXSB0b28gKHNlZSBbNDldKSAgWyBWQzogTm8gRHVwbGljYXRlIFR5cGVzIF0gVGhlIHNhbWUgbmFtZSBtdXN0IG5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gYSBzaW5nbGUgbWl4ZWQtY29udGVudCBkZWNsYXJhdGlvbi48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGEgTWl4ZWQgRWxlbWVudCBjb250ZW50IFRoZSBsZWFkaW5nICZhcG9zOygmYXBvczsgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiB4bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbCAgWzUxXSBNaXhlZCA6Oj0gJmFwb3M7KCZhcG9zOyBTPyAmYXBvczsjUENEQVRBJmFwb3M7IChTPyAmYXBvczt8JmFwb3M7IFM/IE5hbWUpKiBTPyAmYXBvczspKiZhcG9zOyB8ICZhcG9zOygmYXBvczsgUz8gJmFwb3M7I1BDREFUQSZhcG9zOyBTPyAmYXBvczspJmFwb3M7ICBbIFZDOiBQcm9wZXIgR3JvdXAvUEUgTmVzdGluZyBdIGFwcGxpZXMgdG8gWzUxXSB0b28gKHNlZSBbNDldKSAgWyBWQzogTm8gRHVwbGljYXRlIFR5cGVzIF0gVGhlIHNhbWUgbmFtZSBtdXN0IG5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gYSBzaW5nbGUgbWl4ZWQtY29udGVudCBkZWNsYXJhdGlvbi48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbEVsZW1lbnRDb250ZW50UHRyJyBpbmZvPSd0aGUgbGlzdCBvZiB0aGUgeG1sRWxlbWVudENvbnRlbnRQdHIgZGVzY3JpYmluZyB0aGUgZWxlbWVudCBjaG9pY2VzJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSdpbnB1dGNoaycgdHlwZT0naW50JyBpbmZvPSd0aGUgaW5wdXQgdXNlZCBmb3IgdGhlIGN1cnJlbnQgZW50aXR5LCBuZWVkZWQgZm9yIGJvdW5kYXJ5IGNoZWNrcycvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlRW5jTmFtZScgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSB0aGUgWE1MIGVuY29kaW5nIG5hbWUgIFs4MV0gRW5jTmFtZSA6Oj0gW0EtWmEtel0gKFtBLVphLXowLTkuX10gfCAmYXBvczstJmFwb3M7KSo8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSB0aGUgWE1MIGVuY29kaW5nIG5hbWUgIFs4MV0gRW5jTmFtZSA6Oj0gW0EtWmEtel0gKFtBLVphLXowLTkuX10gfCAmYXBvczstJmFwb3M7KSo8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbENoYXIgKicgaW5mbz0ndGhlIGVuY29kaW5nIG5hbWUgdmFsdWUgb3IgTlVMTCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVuY29kaW5nRGVjbCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSB0aGUgWE1MIGVuY29kaW5nIGRlY2xhcmF0aW9uICBbODBdIEVuY29kaW5nRGVjbCA6Oj0gUyAmYXBvcztlbmNvZGluZyZhcG9zOyBFcSAoJmFwb3M7JnF1b3Q7JmFwb3M7IEVuY05hbWUgJmFwb3M7JnF1b3Q7JmFwb3M7IHwgICZxdW90OyZhcG9zOyZxdW90OyBFbmNOYW1lICZxdW90OyZhcG9zOyZxdW90OykgIHRoaXMgc2V0dXBzIHRoZSBjb252ZXJzaW9uIGZpbHRlcnMuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgdGhlIFhNTCBlbmNvZGluZyBkZWNsYXJhdGlvbiAgWzgwXSBFbmNvZGluZ0RlY2wgOjo9IFMgJmFwb3M7ZW5jb2RpbmcmYXBvczsgRXEgKCZhcG9zOyZxdW90OyZhcG9zOyBFbmNOYW1lICZhcG9zOyZxdW90OyZhcG9zOyB8ICAmcXVvdDsmYXBvczsmcXVvdDsgRW5jTmFtZSAmcXVvdDsmYXBvczsmcXVvdDspICB0aGlzIHNldHVwcyB0aGUgY29udmVyc2lvbiBmaWx0ZXJzLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgZW5jb2RpbmcgdmFsdWUgb3IgTlVMTCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVuZFRhZycgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+cGFyc2UgYW4gZW5kIG9mIHRhZyAgWzQyXSBFVGFnIDo6PSAmYXBvczsmbHQ7LyZhcG9zOyBOYW1lIFM/ICZhcG9zOyZndDsmYXBvczsgIFdpdGggbmFtZXNwYWNlICBbTlMgOV0gRVRhZyA6Oj0gJmFwb3M7Jmx0Oy8mYXBvczsgUU5hbWUgUz8gJmFwb3M7Jmd0OyZhcG9zOzwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIGFuIGVuZCBvZiB0YWcgIFs0Ml0gRVRhZyA6Oj0gJmFwb3M7Jmx0Oy8mYXBvczsgTmFtZSBTPyAmYXBvczsmZ3Q7JmFwb3M7ICBXaXRoIG5hbWVzcGFjZSAgW05TIDldIEVUYWcgOjo9ICZhcG9zOyZsdDsvJmFwb3M7IFFOYW1lIFM/ICZhcG9zOyZndDsmYXBvczs8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTEyMDg1LDI5ICsxMTk5NiwyOSBAQAogICAgICAgPGFyZyBuYW1lPSdmaWxlbmFtZScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgZmlsZW5hbWUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVudGl0eURlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgJmx0OyFFTlRJVFkgZGVjbGFyYXRpb25zICBbNzBdIEVudGl0eURlY2wgOjo9IEdFRGVjbCB8IFBFRGVjbCAgWzcxXSBHRURlY2wgOjo9ICZhcG9zOyZsdDshRU5USVRZJmFwb3M7IFMgTmFtZSBTIEVudGl0eURlZiBTPyAmYXBvczsmZ3Q7JmFwb3M7ICBbNzJdIFBFRGVjbCA6Oj0gJmFwb3M7Jmx0OyFFTlRJVFkmYXBvczsgUyAmYXBvczslJmFwb3M7IFMgTmFtZSBTIFBFRGVmIFM/ICZhcG9zOyZndDsmYXBvczsgIFs3M10gRW50aXR5RGVmIDo6PSBFbnRpdHlWYWx1ZSB8IChFeHRlcm5hbElEIE5EYXRhRGVjbD8pICBbNzRdIFBFRGVmIDo6PSBFbnRpdHlWYWx1ZSB8IEV4dGVybmFsSUQgIFs3Nl0gTkRhdGFEZWNsIDo6PSBTICZhcG9zO05EQVRBJmFwb3M7IFMgTmFtZSAgWyBWQzogTm90YXRpb24gRGVjbGFyZWQgXSBUaGUgTmFtZSBtdXN0IG1hdGNoIHRoZSBkZWNsYXJlZCBuYW1lIG9mIGEgbm90YXRpb24uPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgUGFyc2UgYW4gZW50aXR5IGRlY2xhcmF0aW9uLiBBbHdheXMgY29uc3VtZXMgJmFwb3M7Jmx0OyEmYXBvczsuICBbNzBdIEVudGl0eURlY2wgOjo9IEdFRGVjbCB8IFBFRGVjbCAgWzcxXSBHRURlY2wgOjo9ICZhcG9zOyZsdDshRU5USVRZJmFwb3M7IFMgTmFtZSBTIEVudGl0eURlZiBTPyAmYXBvczsmZ3Q7JmFwb3M7ICBbNzJdIFBFRGVjbCA6Oj0gJmFwb3M7Jmx0OyFFTlRJVFkmYXBvczsgUyAmYXBvczslJmFwb3M7IFMgTmFtZSBTIFBFRGVmIFM/ICZhcG9zOyZndDsmYXBvczsgIFs3M10gRW50aXR5RGVmIDo6PSBFbnRpdHlWYWx1ZSB8IChFeHRlcm5hbElEIE5EYXRhRGVjbD8pICBbNzRdIFBFRGVmIDo6PSBFbnRpdHlWYWx1ZSB8IEV4dGVybmFsSUQgIFs3Nl0gTkRhdGFEZWNsIDo6PSBTICZhcG9zO05EQVRBJmFwb3M7IFMgTmFtZSAgWyBWQzogTm90YXRpb24gRGVjbGFyZWQgXSBUaGUgTmFtZSBtdXN0IG1hdGNoIHRoZSBkZWNsYXJlZCBuYW1lIG9mIGEgbm90YXRpb24uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlRW50aXR5UmVmJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIEVOVElUWSByZWZlcmVuY2VzIGRlY2xhcmF0aW9ucyAgWzY4XSBFbnRpdHlSZWYgOjo9ICZhcG9zOyZhbXA7JmFwb3M7IE5hbWUgJmFwb3M7OyZhcG9zOyAgWyBXRkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aG91dCBhbnkgRFRELCBhIGRvY3VtZW50IHdpdGggb25seSBhbiBpbnRlcm5hbCBEVEQgc3Vic2V0IHdoaWNoIGNvbnRhaW5zIG5vIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlcywgb3IgYSBkb2N1bWVudCB3aXRoICZxdW90O3N0YW5kYWxvbmU9JmFwb3M7eWVzJmFwb3M7JnF1b3Q7LCB0aGUgTmFtZSBnaXZlbiBpbiB0aGUgZW50aXR5IHJlZmVyZW5jZSBtdXN0IG1hdGNoIHRoYXQgaW4gYW4gZW50aXR5IGRlY2xhcmF0aW9uLCBleGNlcHQgdGhhdCB3ZWxsLWZvcm1lZCBkb2N1bWVudHMgbmVlZCBub3QgZGVjbGFyZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBlbnRpdGllczogYW1wLCBsdCwgZ3QsIGFwb3MsIHF1b3QuICBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgcmVmZXJlbmNlIHRvIGl0LiAgU2ltaWxhcmx5LCB0aGUgZGVjbGFyYXRpb24gb2YgYSBnZW5lcmFsIGVudGl0eSBtdXN0IHByZWNlZGUgYW55IHJlZmVyZW5jZSB0byBpdCB3aGljaCBhcHBlYXJzIGluIGEgZGVmYXVsdCB2YWx1ZSBpbiBhbiBhdHRyaWJ1dGUtbGlzdCBkZWNsYXJhdGlvbi4gTm90ZSB0aGF0IGlmIGVudGl0aWVzIGFyZSBkZWNsYXJlZCBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0IG9yIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcywgYSBub24tdmFsaWRhdGluZyBwcm9jZXNzb3IgaXMgbm90IG9ibGlnYXRlZCB0byByZWFkIGFuZCBwcm9jZXNzIHRoZWlyIGRlY2xhcmF0aW9uczsgZm9yIHN1Y2ggZG9jdW1lbnRzLCB0aGUgcnVsZSB0aGF0IGFuIGVudGl0eSBtdXN0IGJlIGRlY2xhcmVkIGlzIGEgd2VsbC1mb3JtZWRuZXNzIGNvbnN0cmFpbnQgb25seSBpZiBzdGFuZGFsb25lPSZhcG9zO3llcyZhcG9zOy4gIFsgV0ZDOiBQYXJzZWQgRW50aXR5IF0gQW4gZW50aXR5IHJlZmVyZW5jZSBtdXN0IG5vdCBjb250YWluIHRoZSBuYW1lIG9mIGFuIHVucGFyc2VkIGVudGl0eTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIFBhcnNlIGFuIGVudGl0aXkgcmVmZXJlbmNlLiBBbHdheXMgY29uc3VtZXMgJmFwb3M7JmFtcDsmYXBvczsuICBbNjhdIEVudGl0eVJlZiA6Oj0gJmFwb3M7JmFtcDsmYXBvczsgTmFtZSAmYXBvczs7JmFwb3M7ICBbIFdGQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRob3V0IGFueSBEVEQsIGEgZG9jdW1lbnQgd2l0aCBvbmx5IGFuIGludGVybmFsIERURCBzdWJzZXQgd2hpY2ggY29udGFpbnMgbm8gcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2VzLCBvciBhIGRvY3VtZW50IHdpdGggJnF1b3Q7c3RhbmRhbG9uZT0mYXBvczt5ZXMmYXBvczsmcXVvdDssIHRoZSBOYW1lIGdpdmVuIGluIHRoZSBlbnRpdHkgcmVmZXJlbmNlIG11c3QgbWF0Y2ggdGhhdCBpbiBhbiBlbnRpdHkgZGVjbGFyYXRpb24sIGV4Y2VwdCB0aGF0IHdlbGwtZm9ybWVkIGRvY3VtZW50cyBuZWVkIG5vdCBkZWNsYXJlIGFueSBvZiB0aGUgZm9sbG93aW5nIGVudGl0aWVzOiBhbXAsIGx0LCBndCwgYXBvcywgcXVvdC4gIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSByZWZlcmVuY2UgdG8gaXQuICBTaW1pbGFybHksIHRoZSBkZWNsYXJhdGlvbiBvZiBhIGdlbmVyYWwgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgcmVmZXJlbmNlIHRvIGl0IHdoaWNoIGFwcGVhcnMgaW4gYSBkZWZhdWx0IHZhbHVlIGluIGFuIGF0dHJpYnV0ZS1saXN0IGRlY2xhcmF0aW9uLiBOb3RlIHRoYXQgaWYgZW50aXRpZXMgYXJlIGRlY2xhcmVkIGluIHRoZSBleHRlcm5hbCBzdWJzZXQgb3IgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzLCBhIG5vbi12YWxpZGF0aW5nIHByb2Nlc3NvciBpcyBub3Qgb2JsaWdhdGVkIHRvIHJlYWQgYW5kIHByb2Nlc3MgdGhlaXIgZGVjbGFyYXRpb25zOyBmb3Igc3VjaCBkb2N1bWVudHMsIHRoZSBydWxlIHRoYXQgYW4gZW50aXR5IG11c3QgYmUgZGVjbGFyZWQgaXMgYSB3ZWxsLWZvcm1lZG5lc3MgY29uc3RyYWludCBvbmx5IGlmIHN0YW5kYWxvbmU9JmFwb3M7eWVzJmFwb3M7LiAgWyBXRkM6IFBhcnNlZCBFbnRpdHkgXSBBbiBlbnRpdHkgcmVmZXJlbmNlIG11c3Qgbm90IGNvbnRhaW4gdGhlIG5hbWUgb2YgYW4gdW5wYXJzZWQgZW50aXR5PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxFbnRpdHlQdHInIGluZm89J3RoZSB4bWxFbnRpdHlQdHIgaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLicvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVudGl0eVZhbHVlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGEgdmFsdWUgZm9yIEVOVElUWSBkZWNsYXJhdGlvbnMgIFs5XSBFbnRpdHlWYWx1ZSA6Oj0gJmFwb3M7JnF1b3Q7JmFwb3M7IChbXiUmYW1wOyZxdW90O10gfCBQRVJlZmVyZW5jZSB8IFJlZmVyZW5jZSkqICZhcG9zOyZxdW90OyZhcG9zOyB8ICZxdW90OyZhcG9zOyZxdW90OyAoW14lJmFtcDsmYXBvcztdIHwgUEVSZWZlcmVuY2UgfCBSZWZlcmVuY2UpKiAmcXVvdDsmYXBvczsmcXVvdDs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhIHZhbHVlIGZvciBFTlRJVFkgZGVjbGFyYXRpb25zICBbOV0gRW50aXR5VmFsdWUgOjo9ICZhcG9zOyZxdW90OyZhcG9zOyAoW14lJmFtcDsmcXVvdDtdIHwgUEVSZWZlcmVuY2UgfCBSZWZlcmVuY2UpKiAmYXBvczsmcXVvdDsmYXBvczsgfCAmcXVvdDsmYXBvczsmcXVvdDsgKFteJSZhbXA7JmFwb3M7XSB8IFBFUmVmZXJlbmNlIHwgUmVmZXJlbmNlKSogJnF1b3Q7JmFwb3M7JnF1b3Q7PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxDaGFyIConIGluZm89J3RoZSBFbnRpdHlWYWx1ZSBwYXJzZWQgd2l0aCByZWZlcmVuY2Ugc3Vic3RpdHV0ZWQgb3IgTlVMTCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICAgIDxhcmcgbmFtZT0nb3JpZycgdHlwZT0neG1sQ2hhciAqKicgaW5mbz0naWYgbm9uLU5VTEwgc3RvcmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBlbnRpdHkgdmFsdWUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZUVudW1lcmF0ZWRUeXBlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIEVudW1lcmF0ZWQgYXR0cmlidXRlIHR5cGUuICBbNTddIEVudW1lcmF0ZWRUeXBlIDo6PSBOb3RhdGlvblR5cGUgfCBFbnVtZXJhdGlvbiAgWzU4XSBOb3RhdGlvblR5cGUgOjo9ICZhcG9zO05PVEFUSU9OJmFwb3M7IFMgJmFwb3M7KCZhcG9zOyBTPyBOYW1lIChTPyAmYXBvczt8JmFwb3M7IFM/IE5hbWUpKiBTPyAmYXBvczspJmFwb3M7PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYW4gRW51bWVyYXRlZCBhdHRyaWJ1dGUgdHlwZS4gIFs1N10gRW51bWVyYXRlZFR5cGUgOjo9IE5vdGF0aW9uVHlwZSB8IEVudW1lcmF0aW9uICBbNThdIE5vdGF0aW9uVHlwZSA6Oj0gJmFwb3M7Tk9UQVRJT04mYXBvczsgUyAmYXBvczsoJmFwb3M7IFM/IE5hbWUgKFM/ICZhcG9zO3wmYXBvczsgUz8gTmFtZSkqIFM/ICZhcG9zOykmYXBvczs8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nWE1MX0FUVFJJQlVURV9FTlVNRVJBVElPTiBvciBYTUxfQVRUUklCVVRFX05PVEFUSU9OJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSd0cmVlJyB0eXBlPSd4bWxFbnVtZXJhdGlvblB0ciAqJyBpbmZvPSd0aGUgZW51bWVyYXRpb24gdHJlZSBidWlsdCB3aGlsZSBwYXJzaW5nJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VFbnVtZXJhdGlvblR5cGUnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gRW51bWVyYXRpb24gYXR0cmlidXRlIHR5cGUuICBbNTldIEVudW1lcmF0aW9uIDo6PSAmYXBvczsoJmFwb3M7IFM/IE5tdG9rZW4gKFM/ICZhcG9zO3wmYXBvczsgUz8gTm10b2tlbikqIFM/ICZhcG9zOykmYXBvczsgIFsgVkM6IEVudW1lcmF0aW9uIF0gVmFsdWVzIG9mIHRoaXMgdHlwZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgTm10b2tlbiB0b2tlbnMgaW4gdGhlIGRlY2xhcmF0aW9uPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYW4gRW51bWVyYXRpb24gYXR0cmlidXRlIHR5cGUuICBbNTldIEVudW1lcmF0aW9uIDo6PSAmYXBvczsoJmFwb3M7IFM/IE5tdG9rZW4gKFM/ICZhcG9zO3wmYXBvczsgUz8gTm10b2tlbikqIFM/ICZhcG9zOykmYXBvczsgIFsgVkM6IEVudW1lcmF0aW9uIF0gVmFsdWVzIG9mIHRoaXMgdHlwZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgTm10b2tlbiB0b2tlbnMgaW4gdGhlIGRlY2xhcmF0aW9uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxFbnVtZXJhdGlvblB0cicgaW5mbz0ndGhlIGVudW1lcmF0aW9uIGF0dHJpYnV0ZSB0cmVlIGJ1aWx0IHdoaWxlIHBhcnNpbmcnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTEyMTI5LDcgKzEyMDQwLDcgQEAKICAgICAgIDxhcmcgbmFtZT0nbHN0JyB0eXBlPSd4bWxOb2RlUHRyIConIGluZm89J3RoZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBzZXQgb2YgcGFyc2VkIG5vZGVzJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VFeHRlcm5hbElEJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPlBhcnNlIGFuIEV4dGVybmFsIElEIG9yIGEgUHVibGljIElEICBOT1RFOiBQcm9kdWN0aW9ucyBbNzVdIGFuZCBbODNdIGludGVyYWN0IGJhZGx5IHNpbmNlIFs3NV0gY2FuIGdlbmVyYXRlICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwgIFs3NV0gRXh0ZXJuYWxJRCA6Oj0gJmFwb3M7U1lTVEVNJmFwb3M7IFMgU3lzdGVtTGl0ZXJhbCB8ICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwgIFs4M10gUHVibGljSUQgOjo9ICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbDwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIFBhcnNlIGFuIEV4dGVybmFsIElEIG9yIGEgUHVibGljIElEICBOT1RFOiBQcm9kdWN0aW9ucyBbNzVdIGFuZCBbODNdIGludGVyYWN0IGJhZGx5IHNpbmNlIFs3NV0gY2FuIGdlbmVyYXRlICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwgIFs3NV0gRXh0ZXJuYWxJRCA6Oj0gJmFwb3M7U1lTVEVNJmFwb3M7IFMgU3lzdGVtTGl0ZXJhbCB8ICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwgIFs4M10gUHVibGljSUQgOjo9ICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbDwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSd0aGUgZnVuY3Rpb24gcmV0dXJucyBTeXN0ZW1MaXRlcmFsIGFuZCBpbiB0aGUgc2Vjb25kIGNhc2UgcHVibGljSUQgcmVjZWl2ZXMgUHViaWRMaXRlcmFsLCBpcyBzdHJpY3QgaXMgb2ZmIGl0IGlzIHBvc3NpYmxlIHRvIHJldHVybiBOVUxMIGFuZCBoYXZlIHB1YmxpY0lEIHNldC4nLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J3B1YmxpY0lEJyB0eXBlPSd4bWxDaGFyICoqJyBpbmZvPSdhIHhtbENoYXIqKiByZWNlaXZpbmcgUHViaWRMaXRlcmFsJy8+CkBAIC0xMjE0NCw3ICsxMjA1NSw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VGaWxlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB4bWxSZWFkRmlsZS4gIHBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxEb2NQdHInIGluZm89J3RoZSByZXN1bHRpbmcgZG9jdW1lbnQgdHJlZSBpZiB0aGUgZmlsZSB3YXMgd2VsbGZvcm1lZCwgTlVMTCBvdGhlcndpc2UuJy8+CiAgICAgICA8YXJnIG5hbWU9J2ZpbGVuYW1lJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBmaWxlbmFtZScvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMjE1OCwyNCArMTIwNjksMjQgQEAKICAgICAgIDxhcmcgbmFtZT0nbHN0JyB0eXBlPSd4bWxOb2RlUHRyIConIGluZm89J3RoZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBzZXQgb2YgcGFyc2VkIG5vZGVzJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VNYXJrdXBEZWNsJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIE1hcmt1cCBkZWNsYXJhdGlvbnMgIFsyOV0gbWFya3VwZGVjbCA6Oj0gZWxlbWVudGRlY2wgfCBBdHRsaXN0RGVjbCB8IEVudGl0eURlY2wgfCBOb3RhdGlvbkRlY2wgfCBQSSB8IENvbW1lbnQgIFsgVkM6IFByb3BlciBEZWNsYXJhdGlvbi9QRSBOZXN0aW5nIF0gUGFyYW1ldGVyLWVudGl0eSByZXBsYWNlbWVudCB0ZXh0IG11c3QgYmUgcHJvcGVybHkgbmVzdGVkIHdpdGggbWFya3VwIGRlY2xhcmF0aW9ucy4gVGhhdCBpcyB0byBzYXksIGlmIGVpdGhlciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9yIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIG1hcmt1cCBkZWNsYXJhdGlvbiAobWFya3VwZGVjbCBhYm92ZSkgaXMgY29udGFpbmVkIGluIHRoZSByZXBsYWNlbWVudCB0ZXh0IGZvciBhIHBhcmFtZXRlci1lbnRpdHkgcmVmZXJlbmNlLCBib3RoIG11c3QgYmUgY29udGFpbmVkIGluIHRoZSBzYW1lIHJlcGxhY2VtZW50IHRleHQuICBbIFdGQzogUEVzIGluIEludGVybmFsIFN1YnNldCBdIEluIHRoZSBpbnRlcm5hbCBEVEQgc3Vic2V0LCBwYXJhbWV0ZXItZW50aXR5IHJlZmVyZW5jZXMgY2FuIG9jY3VyIG9ubHkgd2hlcmUgbWFya3VwIGRlY2xhcmF0aW9ucyBjYW4gb2NjdXIsIG5vdCB3aXRoaW4gbWFya3VwIGRlY2xhcmF0aW9ucy4gKFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gcmVmZXJlbmNlcyB0aGF0IG9jY3VyIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcyBvciB0byB0aGUgZXh0ZXJuYWwgc3Vic2V0Lik8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBQYXJzZSBtYXJrdXAgZGVjbGFyYXRpb25zLiBBbHdheXMgY29uc3VtZXMgJmFwb3M7Jmx0OyEmYXBvczsgb3IgJmFwb3M7Jmx0Oz8mYXBvczsuICBbMjldIG1hcmt1cGRlY2wgOjo9IGVsZW1lbnRkZWNsIHwgQXR0bGlzdERlY2wgfCBFbnRpdHlEZWNsIHwgTm90YXRpb25EZWNsIHwgUEkgfCBDb21tZW50ICBbIFZDOiBQcm9wZXIgRGVjbGFyYXRpb24vUEUgTmVzdGluZyBdIFBhcmFtZXRlci1lbnRpdHkgcmVwbGFjZW1lbnQgdGV4dCBtdXN0IGJlIHByb3Blcmx5IG5lc3RlZCB3aXRoIG1hcmt1cCBkZWNsYXJhdGlvbnMuIFRoYXQgaXMgdG8gc2F5LCBpZiBlaXRoZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBvciB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBtYXJrdXAgZGVjbGFyYXRpb24gKG1hcmt1cGRlY2wgYWJvdmUpIGlzIGNvbnRhaW5lZCBpbiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBmb3IgYSBwYXJhbWV0ZXItZW50aXR5IHJlZmVyZW5jZSwgYm90aCBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgc2FtZSByZXBsYWNlbWVudCB0ZXh0LiAgWyBXRkM6IFBFcyBpbiBJbnRlcm5hbCBTdWJzZXQgXSBJbiB0aGUgaW50ZXJuYWwgRFREIHN1YnNldCwgcGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2VzIGNhbiBvY2N1ciBvbmx5IHdoZXJlIG1hcmt1cCBkZWNsYXJhdGlvbnMgY2FuIG9jY3VyLCBub3Qgd2l0aGluIG1hcmt1cCBkZWNsYXJhdGlvbnMuIChUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHJlZmVyZW5jZXMgdGhhdCBvY2N1ciBpbiBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgb3IgdG8gdGhlIGV4dGVybmFsIHN1YnNldC4pPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlTWVtb3J5JyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCBidWlsZCBhIHRyZWUuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbFJlYWRNZW1vcnkuICBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCBidWlsZCBhIHRyZWUuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxEb2NQdHInIGluZm89J3RoZSByZXN1bHRpbmcgZG9jdW1lbnQgdHJlZScvPgogICAgICAgPGFyZyBuYW1lPSdidWZmZXInIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nYW4gcG9pbnRlciB0byBhIGNoYXIgYXJyYXknLz4KICAgICAgIDxhcmcgbmFtZT0nc2l6ZScgdHlwZT0naW50JyBpbmZvPSd0aGUgc2l6ZSBvZiB0aGUgYXJyYXknLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZU1pc2MnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIE1pc2MqIG9wdGlvbmFsIGZpZWxkLiAgWzI3XSBNaXNjIDo6PSBDb21tZW50IHwgUEkgfCAgUzwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIGFuIFhNTCBNaXNjKiBvcHRpb25hbCBmaWVsZC4gIFsyN10gTWlzYyA6Oj0gQ29tbWVudCB8IFBJIHwgIFM8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VOYW1lJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBuYW1lLiAgWzRdIE5hbWVDaGFyIDo6PSBMZXR0ZXIgfCBEaWdpdCB8ICZhcG9zOy4mYXBvczsgfCAmYXBvczstJmFwb3M7IHwgJmFwb3M7XyZhcG9zOyB8ICZhcG9zOzomYXBvczsgfCBDb21iaW5pbmdDaGFyIHwgRXh0ZW5kZXIgIFs1XSBOYW1lIDo6PSAoTGV0dGVyIHwgJmFwb3M7XyZhcG9zOyB8ICZhcG9zOzomYXBvczspIChOYW1lQ2hhcikqICBbNl0gTmFtZXMgOjo9IE5hbWUgKCN4MjAgTmFtZSkqPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYW4gWE1MIG5hbWUuICBbNF0gTmFtZUNoYXIgOjo9IExldHRlciB8IERpZ2l0IHwgJmFwb3M7LiZhcG9zOyB8ICZhcG9zOy0mYXBvczsgfCAmYXBvcztfJmFwb3M7IHwgJmFwb3M7OiZhcG9zOyB8IENvbWJpbmluZ0NoYXIgfCBFeHRlbmRlciAgWzVdIE5hbWUgOjo9IChMZXR0ZXIgfCAmYXBvcztfJmFwb3M7IHwgJmFwb3M7OiZhcG9zOykgKE5hbWVDaGFyKSogIFs2XSBOYW1lcyA6Oj0gTmFtZSAoI3gyMCBOYW1lKSo8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIE5hbWUgcGFyc2VkIG9yIE5VTEwnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTEyMTg2LDM3ICsxMjA5NywzNyBAQAogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZU5tdG9rZW4nIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIE5tdG9rZW4uICBbN10gTm10b2tlbiA6Oj0gKE5hbWVDaGFyKSsgIFs4XSBObXRva2VucyA6Oj0gTm10b2tlbiAoI3gyMCBObXRva2VuKSo8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBYTUwgTm10b2tlbi4gIFs3XSBObXRva2VuIDo6PSAoTmFtZUNoYXIpKyAgWzhdIE5tdG9rZW5zIDo6PSBObXRva2VuICgjeDIwIE5tdG9rZW4pKjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSd0aGUgTm10b2tlbiBwYXJzZWQgb3IgTlVMTCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZU5vdGF0aW9uRGVjbCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSBhIG5vdGF0aW9uIGRlY2xhcmF0aW9uICBbODJdIE5vdGF0aW9uRGVjbCA6Oj0gJmFwb3M7Jmx0OyFOT1RBVElPTiZhcG9zOyBTIE5hbWUgUyAoRXh0ZXJuYWxJRCB8ICBQdWJsaWNJRCkgUz8gJmFwb3M7Jmd0OyZhcG9zOyAgSGVuY2UgdGhlcmUgaXMgYWN0dWFsbHkgMyBjaG9pY2VzOiAmYXBvcztQVUJMSUMmYXBvczsgUyBQdWJpZExpdGVyYWwgJmFwb3M7UFVCTElDJmFwb3M7IFMgUHViaWRMaXRlcmFsIFMgU3lzdGVtTGl0ZXJhbCBhbmQgJmFwb3M7U1lTVEVNJmFwb3M7IFMgU3lzdGVtTGl0ZXJhbCAgU2VlIHRoZSBOT1RFIG9uIHhtbFBhcnNlRXh0ZXJuYWxJRCgpLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIFBhcnNlIGEgbm90YXRpb24gZGVjbGFyYXRpb24uIEFsd2F5cyBjb25zdW1lcyAmYXBvczsmbHQ7ISZhcG9zOy4gIFs4Ml0gTm90YXRpb25EZWNsIDo6PSAmYXBvczsmbHQ7IU5PVEFUSU9OJmFwb3M7IFMgTmFtZSBTIChFeHRlcm5hbElEIHwgIFB1YmxpY0lEKSBTPyAmYXBvczsmZ3Q7JmFwb3M7ICBIZW5jZSB0aGVyZSBpcyBhY3R1YWxseSAzIGNob2ljZXM6ICZhcG9zO1BVQkxJQyZhcG9zOyBTIFB1YmlkTGl0ZXJhbCAmYXBvcztQVUJMSUMmYXBvczsgUyBQdWJpZExpdGVyYWwgUyBTeXN0ZW1MaXRlcmFsIGFuZCAmYXBvcztTWVNURU0mYXBvczsgUyBTeXN0ZW1MaXRlcmFsICBTZWUgdGhlIE5PVEUgb24geG1sUGFyc2VFeHRlcm5hbElEKCkuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlTm90YXRpb25UeXBlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIE5vdGF0aW9uIGF0dHJpYnV0ZSB0eXBlLiAgTm90ZTogdGhlIGxlYWRpbmcgJmFwb3M7Tk9UQVRJT04mYXBvczsgUyBwYXJ0IGhhcyBhbHJlYWR5IGJlaW5nIHBhcnNlZC4uLiAgWzU4XSBOb3RhdGlvblR5cGUgOjo9ICZhcG9zO05PVEFUSU9OJmFwb3M7IFMgJmFwb3M7KCZhcG9zOyBTPyBOYW1lIChTPyAmYXBvczt8JmFwb3M7IFM/IE5hbWUpKiBTPyAmYXBvczspJmFwb3M7ICBbIFZDOiBOb3RhdGlvbiBBdHRyaWJ1dGVzIF0gVmFsdWVzIG9mIHRoaXMgdHlwZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgbm90YXRpb24gbmFtZXMgaW5jbHVkZWQgaW4gdGhlIGRlY2xhcmF0aW9uOyBhbGwgbm90YXRpb24gbmFtZXMgaW4gdGhlIGRlY2xhcmF0aW9uIG11c3QgYmUgZGVjbGFyZWQuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYW4gTm90YXRpb24gYXR0cmlidXRlIHR5cGUuICBOb3RlOiB0aGUgbGVhZGluZyAmYXBvcztOT1RBVElPTiZhcG9zOyBTIHBhcnQgaGFzIGFscmVhZHkgYmVpbmcgcGFyc2VkLi4uICBbNThdIE5vdGF0aW9uVHlwZSA6Oj0gJmFwb3M7Tk9UQVRJT04mYXBvczsgUyAmYXBvczsoJmFwb3M7IFM/IE5hbWUgKFM/ICZhcG9zO3wmYXBvczsgUz8gTmFtZSkqIFM/ICZhcG9zOykmYXBvczsgIFsgVkM6IE5vdGF0aW9uIEF0dHJpYnV0ZXMgXSBWYWx1ZXMgb2YgdGhpcyB0eXBlIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBub3RhdGlvbiBuYW1lcyBpbmNsdWRlZCBpbiB0aGUgZGVjbGFyYXRpb247IGFsbCBub3RhdGlvbiBuYW1lcyBpbiB0aGUgZGVjbGFyYXRpb24gbXVzdCBiZSBkZWNsYXJlZC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbEVudW1lcmF0aW9uUHRyJyBpbmZvPSd0aGUgbm90YXRpb24gYXR0cmlidXRlIHRyZWUgYnVpbHQgd2hpbGUgcGFyc2luZycvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZVBFUmVmZXJlbmNlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIFBFUmVmZXJlbmNlIGRlY2xhcmF0aW9ucyBUaGUgZW50aXR5IGNvbnRlbnQgaXMgaGFuZGxlZCBkaXJlY3RseSBieSBwdXNoaW5nIGl0JmFwb3M7cyBjb250ZW50IGFzIGEgbmV3IGlucHV0IHN0cmVhbS4gIFs2OV0gUEVSZWZlcmVuY2UgOjo9ICZhcG9zOyUmYXBvczsgTmFtZSAmYXBvczs7JmFwb3M7ICBbIFdGQzogTm8gUmVjdXJzaW9uIF0gQSBwYXJzZWQgZW50aXR5IG11c3Qgbm90IGNvbnRhaW4gYSByZWN1cnNpdmUgcmVmZXJlbmNlIHRvIGl0c2VsZiwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuICBbIFdGQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRob3V0IGFueSBEVEQsIGEgZG9jdW1lbnQgd2l0aCBvbmx5IGFuIGludGVybmFsIERURCBzdWJzZXQgd2hpY2ggY29udGFpbnMgbm8gcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2VzLCBvciBhIGRvY3VtZW50IHdpdGggJnF1b3Q7c3RhbmRhbG9uZT0mYXBvczt5ZXMmYXBvczsmcXVvdDssIC4uLiAgLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSByZWZlcmVuY2UgdG8gaXQuLi4gIFsgVkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aCBhbiBleHRlcm5hbCBzdWJzZXQgb3IgZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzIHdpdGggJnF1b3Q7c3RhbmRhbG9uZT0mYXBvcztubyZhcG9zOyZxdW90OywgLi4uICAuLi4gVGhlIGRlY2xhcmF0aW9uIG9mIGEgcGFyYW1ldGVyIGVudGl0eSBtdXN0IHByZWNlZGUgYW55IHJlZmVyZW5jZSB0byBpdC4uLiAgWyBXRkM6IEluIERURCBdIFBhcmFtZXRlci1lbnRpdHkgcmVmZXJlbmNlcyBtYXkgb25seSBhcHBlYXIgaW4gdGhlIERURC4gTk9URTogbWlzbGVhZGluZyBidXQgdGhpcyBpcyBoYW5kbGVkLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIFBhcnNlIGEgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UuIEFsd2F5cyBjb25zdW1lcyAmYXBvczslJmFwb3M7LiAgVGhlIGVudGl0eSBjb250ZW50IGlzIGhhbmRsZWQgZGlyZWN0bHkgYnkgcHVzaGluZyBpdCZhcG9zO3MgY29udGVudCBhcyBhIG5ldyBpbnB1dCBzdHJlYW0uICBbNjldIFBFUmVmZXJlbmNlIDo6PSAmYXBvczslJmFwb3M7IE5hbWUgJmFwb3M7OyZhcG9zOyAgWyBXRkM6IE5vIFJlY3Vyc2lvbiBdIEEgcGFyc2VkIGVudGl0eSBtdXN0IG5vdCBjb250YWluIGEgcmVjdXJzaXZlIHJlZmVyZW5jZSB0byBpdHNlbGYsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiAgWyBXRkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aG91dCBhbnkgRFRELCBhIGRvY3VtZW50IHdpdGggb25seSBhbiBpbnRlcm5hbCBEVEQgc3Vic2V0IHdoaWNoIGNvbnRhaW5zIG5vIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlcywgb3IgYSBkb2N1bWVudCB3aXRoICZxdW90O3N0YW5kYWxvbmU9JmFwb3M7eWVzJmFwb3M7JnF1b3Q7LCAuLi4gIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgcmVmZXJlbmNlIHRvIGl0Li4uICBbIFZDOiBFbnRpdHkgRGVjbGFyZWQgXSBJbiBhIGRvY3VtZW50IHdpdGggYW4gZXh0ZXJuYWwgc3Vic2V0IG9yIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcyB3aXRoICZxdW90O3N0YW5kYWxvbmU9JmFwb3M7bm8mYXBvczsmcXVvdDssIC4uLiAgLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSByZWZlcmVuY2UgdG8gaXQuLi4gIFsgV0ZDOiBJbiBEVEQgXSBQYXJhbWV0ZXItZW50aXR5IHJlZmVyZW5jZXMgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSBEVEQuIE5PVEU6IG1pc2xlYWRpbmcgYnV0IHRoaXMgaXMgaGFuZGxlZC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VQSScgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbi4gIFsxNl0gUEkgOjo9ICZhcG9zOyZsdDs/JmFwb3M7IFBJVGFyZ2V0IChTIChDaGFyKiAtIChDaGFyKiAmYXBvczs/Jmd0OyZhcG9zOyBDaGFyKikpKT8gJmFwb3M7PyZndDsmYXBvczsgIFRoZSBwcm9jZXNzaW5nIGlzIHRyYW5zZmVycmVkIHRvIFNBWCBvbmNlIHBhcnNlZC48L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBYTUwgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbi4gIFsxNl0gUEkgOjo9ICZhcG9zOyZsdDs/JmFwb3M7IFBJVGFyZ2V0IChTIChDaGFyKiAtIChDaGFyKiAmYXBvczs/Jmd0OyZhcG9zOyBDaGFyKikpKT8gJmFwb3M7PyZndDsmYXBvczsgIFRoZSBwcm9jZXNzaW5nIGlzIHRyYW5zZmVycmVkIHRvIFNBWCBvbmNlIHBhcnNlZC48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VQSVRhcmdldCcgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSB0aGUgbmFtZSBvZiBhIFBJICBbMTddIFBJVGFyZ2V0IDo6PSBOYW1lIC0gKCgmYXBvcztYJmFwb3M7IHwgJmFwb3M7eCZhcG9zOykgKCZhcG9zO00mYXBvczsgfCAmYXBvczttJmFwb3M7KSAoJmFwb3M7TCZhcG9zOyB8ICZhcG9zO2wmYXBvczspKTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIHRoZSBuYW1lIG9mIGEgUEkgIFsxN10gUElUYXJnZXQgOjo9IE5hbWUgLSAoKCZhcG9zO1gmYXBvczsgfCAmYXBvczt4JmFwb3M7KSAoJmFwb3M7TSZhcG9zOyB8ICZhcG9zO20mYXBvczspICgmYXBvcztMJmFwb3M7IHwgJmFwb3M7bCZhcG9zOykpPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSBQSVRhcmdldCBuYW1lIG9yIE5VTEwnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VQdWJpZExpdGVyYWwnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIHB1YmxpYyBsaXRlcmFsICBbMTJdIFB1YmlkTGl0ZXJhbCA6Oj0gJmFwb3M7JnF1b3Q7JmFwb3M7IFB1YmlkQ2hhciogJmFwb3M7JnF1b3Q7JmFwb3M7IHwgJnF1b3Q7JmFwb3M7JnF1b3Q7IChQdWJpZENoYXIgLSAmcXVvdDsmYXBvczsmcXVvdDspKiAmcXVvdDsmYXBvczsmcXVvdDs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBYTUwgcHVibGljIGxpdGVyYWwgIFsxMl0gUHViaWRMaXRlcmFsIDo6PSAmYXBvczsmcXVvdDsmYXBvczsgUHViaWRDaGFyKiAmYXBvczsmcXVvdDsmYXBvczsgfCAmcXVvdDsmYXBvczsmcXVvdDsgKFB1YmlkQ2hhciAtICZxdW90OyZhcG9zOyZxdW90OykqICZxdW90OyZhcG9zOyZxdW90OzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSd0aGUgUHViaWRMaXRlcmFsIHBhcnNlZCBvciBOVUxMLicvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtMTIyMjcsMjggKzEyMTM4LDI4IEBACiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlUmVmZXJlbmNlJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGFuZCBoYW5kbGUgZW50aXR5IHJlZmVyZW5jZXMgaW4gY29udGVudCwgZGVwZW5kaW5nIG9uIHRoZSBTQVggaW50ZXJmYWNlLCB0aGlzIG1heSBlbmQtdXAgaW4gYSBjYWxsIHRvIGNoYXJhY3RlcigpIGlmIHRoaXMgaXMgYSBDaGFyUmVmLCBhIHByZWRlZmluZWQgZW50aXR5LCBpZiB0aGVyZSBpcyBubyByZWZlcmVuY2UoKSBjYWxsYmFjay4gb3IgaWYgdGhlIHBhcnNlciB3YXMgYXNrZWQgdG8gc3dpdGNoIHRvIHRoYXQgbW9kZS4gIFs2N10gUmVmZXJlbmNlIDo6PSBFbnRpdHlSZWYgfCBDaGFyUmVmPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgcGFyc2UgYW5kIGhhbmRsZSBlbnRpdHkgcmVmZXJlbmNlcyBpbiBjb250ZW50LCBkZXBlbmRpbmcgb24gdGhlIFNBWCBpbnRlcmZhY2UsIHRoaXMgbWF5IGVuZC11cCBpbiBhIGNhbGwgdG8gY2hhcmFjdGVyKCkgaWYgdGhpcyBpcyBhIENoYXJSZWYsIGEgcHJlZGVmaW5lZCBlbnRpdHksIGlmIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSgpIGNhbGxiYWNrLiBvciBpZiB0aGUgcGFyc2VyIHdhcyBhc2tlZCB0byBzd2l0Y2ggdG8gdGhhdCBtb2RlLiAgQWx3YXlzIGNvbnN1bWVzICZhcG9zOyZhbXA7JmFwb3M7LiAgWzY3XSBSZWZlcmVuY2UgOjo9IEVudGl0eVJlZiB8IENoYXJSZWY8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VTRERlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgdGhlIFhNTCBzdGFuZGFsb25lIGRlY2xhcmF0aW9uICBbMzJdIFNERGVjbCA6Oj0gUyAmYXBvcztzdGFuZGFsb25lJmFwb3M7IEVxICgoJnF1b3Q7JmFwb3M7JnF1b3Q7ICgmYXBvczt5ZXMmYXBvczsgfCAmYXBvcztubyZhcG9zOykgJnF1b3Q7JmFwb3M7JnF1b3Q7KSB8ICgmYXBvczsmcXVvdDsmYXBvczsgKCZhcG9zO3llcyZhcG9zOyB8ICZhcG9zO25vJmFwb3M7KSZhcG9zOyZxdW90OyZhcG9zOykpICBbIFZDOiBTdGFuZGFsb25lIERvY3VtZW50IERlY2xhcmF0aW9uIF0gVE9ETyBUaGUgc3RhbmRhbG9uZSBkb2N1bWVudCBkZWNsYXJhdGlvbiBtdXN0IGhhdmUgdGhlIHZhbHVlICZxdW90O25vJnF1b3Q7IGlmIGFueSBleHRlcm5hbCBtYXJrdXAgZGVjbGFyYXRpb25zIGNvbnRhaW4gZGVjbGFyYXRpb25zIG9mOiAtIGF0dHJpYnV0ZXMgd2l0aCBkZWZhdWx0IHZhbHVlcywgaWYgZWxlbWVudHMgdG8gd2hpY2ggdGhlc2UgYXR0cmlidXRlcyBhcHBseSBhcHBlYXIgaW4gdGhlIGRvY3VtZW50IHdpdGhvdXQgc3BlY2lmaWNhdGlvbnMgb2YgdmFsdWVzIGZvciB0aGVzZSBhdHRyaWJ1dGVzLCBvciAtIGVudGl0aWVzIChvdGhlciB0aGFuIGFtcCwgbHQsIGd0LCBhcG9zLCBxdW90KSwgaWYgcmVmZXJlbmNlcyB0byB0aG9zZSBlbnRpdGllcyBhcHBlYXIgaW4gdGhlIGRvY3VtZW50LCBvciAtIGF0dHJpYnV0ZXMgd2l0aCB2YWx1ZXMgc3ViamVjdCB0byBub3JtYWxpemF0aW9uLCB3aGVyZSB0aGUgYXR0cmlidXRlIGFwcGVhcnMgaW4gdGhlIGRvY3VtZW50IHdpdGggYSB2YWx1ZSB3aGljaCB3aWxsIGNoYW5nZSBhcyBhIHJlc3VsdCBvZiBub3JtYWxpemF0aW9uLCBvciAtIGVsZW1lbnQgdHlwZXMgd2l0aCBlbGVtZW50IGNvbnRlbnQsIGlmIHdoaXRlIHNwYWNlIG9jY3VycyBkaXJlY3RseSB3aXRoaW4gYW55IGluc3RhbmNlIG9mIHRob3NlIHR5cGVzLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIHRoZSBYTUwgc3RhbmRhbG9uZSBkZWNsYXJhdGlvbiAgWzMyXSBTRERlY2wgOjo9IFMgJmFwb3M7c3RhbmRhbG9uZSZhcG9zOyBFcSAoKCZxdW90OyZhcG9zOyZxdW90OyAoJmFwb3M7eWVzJmFwb3M7IHwgJmFwb3M7bm8mYXBvczspICZxdW90OyZhcG9zOyZxdW90OykgfCAoJmFwb3M7JnF1b3Q7JmFwb3M7ICgmYXBvczt5ZXMmYXBvczsgfCAmYXBvcztubyZhcG9zOykmYXBvczsmcXVvdDsmYXBvczspKSAgWyBWQzogU3RhbmRhbG9uZSBEb2N1bWVudCBEZWNsYXJhdGlvbiBdIFRPRE8gVGhlIHN0YW5kYWxvbmUgZG9jdW1lbnQgZGVjbGFyYXRpb24gbXVzdCBoYXZlIHRoZSB2YWx1ZSAmcXVvdDtubyZxdW90OyBpZiBhbnkgZXh0ZXJuYWwgbWFya3VwIGRlY2xhcmF0aW9ucyBjb250YWluIGRlY2xhcmF0aW9ucyBvZjogLSBhdHRyaWJ1dGVzIHdpdGggZGVmYXVsdCB2YWx1ZXMsIGlmIGVsZW1lbnRzIHRvIHdoaWNoIHRoZXNlIGF0dHJpYnV0ZXMgYXBwbHkgYXBwZWFyIGluIHRoZSBkb2N1bWVudCB3aXRob3V0IHNwZWNpZmljYXRpb25zIG9mIHZhbHVlcyBmb3IgdGhlc2UgYXR0cmlidXRlcywgb3IgLSBlbnRpdGllcyAob3RoZXIgdGhhbiBhbXAsIGx0LCBndCwgYXBvcywgcXVvdCksIGlmIHJlZmVyZW5jZXMgdG8gdGhvc2UgZW50aXRpZXMgYXBwZWFyIGluIHRoZSBkb2N1bWVudCwgb3IgLSBhdHRyaWJ1dGVzIHdpdGggdmFsdWVzIHN1YmplY3QgdG8gbm9ybWFsaXphdGlvbiwgd2hlcmUgdGhlIGF0dHJpYnV0ZSBhcHBlYXJzIGluIHRoZSBkb2N1bWVudCB3aXRoIGEgdmFsdWUgd2hpY2ggd2lsbCBjaGFuZ2UgYXMgYSByZXN1bHQgb2Ygbm9ybWFsaXphdGlvbiwgb3IgLSBlbGVtZW50IHR5cGVzIHdpdGggZWxlbWVudCBjb250ZW50LCBpZiB3aGl0ZSBzcGFjZSBvY2N1cnMgZGlyZWN0bHkgd2l0aGluIGFueSBpbnN0YW5jZSBvZiB0aG9zZSB0eXBlcy48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMSBpZiBzdGFuZGFsb25lPSZxdW90O3llcyZxdW90OyAwIGlmIHN0YW5kYWxvbmU9JnF1b3Q7bm8mcXVvdDsgLTIgaWYgc3RhbmRhbG9uZSBhdHRyaWJ1dGUgaXMgbWlzc2luZyBvciBpbnZhbGlkIChBIHN0YW5kYWxvbmUgdmFsdWUgb2YgLTIgbWVhbnMgdGhhdCB0aGUgWE1MIGRlY2xhcmF0aW9uIHdhcyBmb3VuZCwgYnV0IG5vIHZhbHVlIHdhcyBzcGVjaWZpZWQgZm9yIHRoZSBzdGFuZGFsb25lIGF0dHJpYnV0ZSkuJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlU3RhcnRUYWcnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGEgc3RhcnQgb2YgdGFnIGVpdGhlciBmb3IgcnVsZSBlbGVtZW50IG9yIEVtcHR5RWxlbWVudC4gSW4gYm90aCBjYXNlIHdlIGRvbiZhcG9zO3QgcGFyc2UgdGhlIHRhZyBjbG9zaW5nIGNoYXJzLiAgWzQwXSBTVGFnIDo6PSAmYXBvczsmbHQ7JmFwb3M7IE5hbWUgKFMgQXR0cmlidXRlKSogUz8gJmFwb3M7Jmd0OyZhcG9zOyAgWyBXRkM6IFVuaXF1ZSBBdHQgU3BlYyBdIE5vIGF0dHJpYnV0ZSBuYW1lIG1heSBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc3RhcnQtdGFnIG9yIGVtcHR5LWVsZW1lbnQgdGFnLiAgWzQ0XSBFbXB0eUVsZW1UYWcgOjo9ICZhcG9zOyZsdDsmYXBvczsgTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAmYXBvczsvJmd0OyZhcG9zOyAgWyBXRkM6IFVuaXF1ZSBBdHQgU3BlYyBdIE5vIGF0dHJpYnV0ZSBuYW1lIG1heSBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc3RhcnQtdGFnIG9yIGVtcHR5LWVsZW1lbnQgdGFnLiAgV2l0aCBuYW1lc3BhY2U6ICBbTlMgOF0gU1RhZyA6Oj0gJmFwb3M7Jmx0OyZhcG9zOyBRTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAmYXBvczsmZ3Q7JmFwb3M7ICBbTlMgMTBdIEVtcHR5RWxlbWVudCA6Oj0gJmFwb3M7Jmx0OyZhcG9zOyBRTmFtZSAoUyBBdHRyaWJ1dGUpKiBTPyAmYXBvczsvJmd0OyZhcG9zOzwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIFBhcnNlIGEgc3RhcnQgdGFnLiBBbHdheXMgY29uc3VtZXMgJmFwb3M7Jmx0OyZhcG9zOy4gIFs0MF0gU1RhZyA6Oj0gJmFwb3M7Jmx0OyZhcG9zOyBOYW1lIChTIEF0dHJpYnV0ZSkqIFM/ICZhcG9zOyZndDsmYXBvczsgIFsgV0ZDOiBVbmlxdWUgQXR0IFNwZWMgXSBObyBhdHRyaWJ1dGUgbmFtZSBtYXkgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN0YXJ0LXRhZyBvciBlbXB0eS1lbGVtZW50IHRhZy4gIFs0NF0gRW1wdHlFbGVtVGFnIDo6PSAmYXBvczsmbHQ7JmFwb3M7IE5hbWUgKFMgQXR0cmlidXRlKSogUz8gJmFwb3M7LyZndDsmYXBvczsgIFsgV0ZDOiBVbmlxdWUgQXR0IFNwZWMgXSBObyBhdHRyaWJ1dGUgbmFtZSBtYXkgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN0YXJ0LXRhZyBvciBlbXB0eS1lbGVtZW50IHRhZy4gIFdpdGggbmFtZXNwYWNlOiAgW05TIDhdIFNUYWcgOjo9ICZhcG9zOyZsdDsmYXBvczsgUU5hbWUgKFMgQXR0cmlidXRlKSogUz8gJmFwb3M7Jmd0OyZhcG9zOyAgW05TIDEwXSBFbXB0eUVsZW1lbnQgOjo9ICZhcG9zOyZsdDsmYXBvczsgUU5hbWUgKFMgQXR0cmlidXRlKSogUz8gJmFwb3M7LyZndDsmYXBvczs8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIGVsZW1lbnQgbmFtZSBwYXJzZWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VTeXN0ZW1MaXRlcmFsJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBMaXRlcmFsICBbMTFdIFN5c3RlbUxpdGVyYWwgOjo9ICgmYXBvczsmcXVvdDsmYXBvczsgW14mcXVvdDtdKiAmYXBvczsmcXVvdDsmYXBvczspIHwgKCZxdW90OyZhcG9zOyZxdW90OyBbXiZhcG9zO10qICZxdW90OyZhcG9zOyZxdW90Oyk8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBYTUwgTGl0ZXJhbCAgWzExXSBTeXN0ZW1MaXRlcmFsIDo6PSAoJmFwb3M7JnF1b3Q7JmFwb3M7IFteJnF1b3Q7XSogJmFwb3M7JnF1b3Q7JmFwb3M7KSB8ICgmcXVvdDsmYXBvczsmcXVvdDsgW14mYXBvcztdKiAmcXVvdDsmYXBvczsmcXVvdDspPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxDaGFyIConIGluZm89J3RoZSBTeXN0ZW1MaXRlcmFsIHBhcnNlZCBvciBOVUxMJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlVGV4dERlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIGRlY2xhcmF0aW9uIGhlYWRlciBmb3IgZXh0ZXJuYWwgZW50aXRpZXMgIFs3N10gVGV4dERlY2wgOjo9ICZhcG9zOyZsdDs/eG1sJmFwb3M7IFZlcnNpb25JbmZvPyBFbmNvZGluZ0RlY2wgUz8gJmFwb3M7PyZndDsmYXBvczs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBYTUwgZGVjbGFyYXRpb24gaGVhZGVyIGZvciBleHRlcm5hbCBlbnRpdGllcyAgWzc3XSBUZXh0RGVjbCA6Oj0gJmFwb3M7Jmx0Oz94bWwmYXBvczsgVmVyc2lvbkluZm8/IEVuY29kaW5nRGVjbCBTPyAmYXBvczs/Jmd0OyZhcG9zOzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtMTIyNzAsMjIgKzEyMTgxLDIyIEBACiAgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgc3RyaW5nIHRvIGFuYWx5emUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZVZlcnNpb25JbmZvJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VyJz4KLSAgICAgIDxpbmZvPnBhcnNlIHRoZSBYTUwgdmVyc2lvbi4gIFsyNF0gVmVyc2lvbkluZm8gOjo9IFMgJmFwb3M7dmVyc2lvbiZhcG9zOyBFcSAoJmFwb3M7IFZlcnNpb25OdW0gJmFwb3M7IHwgJnF1b3Q7IFZlcnNpb25OdW0gJnF1b3Q7KSAgWzI1XSBFcSA6Oj0gUz8gJmFwb3M7PSZhcG9zOyBTPzwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24mYXBvczt0IHVzZS4gIHBhcnNlIHRoZSBYTUwgdmVyc2lvbi4gIFsyNF0gVmVyc2lvbkluZm8gOjo9IFMgJmFwb3M7dmVyc2lvbiZhcG9zOyBFcSAoJmFwb3M7IFZlcnNpb25OdW0gJmFwb3M7IHwgJnF1b3Q7IFZlcnNpb25OdW0gJnF1b3Q7KSAgWzI1XSBFcSA6Oj0gUz8gJmFwb3M7PSZhcG9zOyBTPzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSd0aGUgdmVyc2lvbiBzdHJpbmcsIGUuZy4gJnF1b3Q7MS4wJnF1b3Q7Jy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlVmVyc2lvbk51bScgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5wYXJzZSB0aGUgWE1MIHZlcnNpb24gdmFsdWUuICBbMjZdIFZlcnNpb25OdW0gOjo9ICZhcG9zOzEuJmFwb3M7IFswLTldKyAgSW4gcHJhY3RpY2UgYWxsb3cgWzAtOV0uWzAtOV0rIGF0IHRoYXQgbGV2ZWw8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSB0aGUgWE1MIHZlcnNpb24gdmFsdWUuICBbMjZdIFZlcnNpb25OdW0gOjo9ICZhcG9zOzEuJmFwb3M7IFswLTldKyAgSW4gcHJhY3RpY2UgYWxsb3cgWzAtOV0uWzAtOV0rIGF0IHRoYXQgbGV2ZWw8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbENoYXIgKicgaW5mbz0ndGhlIHN0cmluZyBnaXZpbmcgdGhlIFhNTCB2ZXJzaW9uIG51bWJlciwgb3IgTlVMTCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZVhNTERlY2wnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIGRlY2xhcmF0aW9uIGhlYWRlciAgWzIzXSBYTUxEZWNsIDo6PSAmYXBvczsmbHQ7P3htbCZhcG9zOyBWZXJzaW9uSW5mbyBFbmNvZGluZ0RlY2w/IFNERGVjbD8gUz8gJmFwb3M7PyZndDsmYXBvczs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBwYXJzZSBhbiBYTUwgZGVjbGFyYXRpb24gaGVhZGVyICBbMjNdIFhNTERlY2wgOjo9ICZhcG9zOyZsdDs/eG1sJmFwb3M7IFZlcnNpb25JbmZvIEVuY29kaW5nRGVjbD8gU0REZWNsPyBTPyAmYXBvczs/Jmd0OyZhcG9zOzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZXJBZGROb2RlSW5mbycgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5JbnNlcnQgbm9kZSBpbmZvIHJlY29yZCBpbnRvIHRoZSBzb3J0ZWQgc2VxdWVuY2U8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBEb24mYXBvczt0IHVzZS4gIEluc2VydCBub2RlIGluZm8gcmVjb3JkIGludG8gdGhlIHNvcnRlZCBzZXF1ZW5jZTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICAgIDxhcmcgbmFtZT0naW5mbycgdHlwZT0nY29uc3QgeG1sUGFyc2VyTm9kZUluZm9QdHInIGluZm89J2Egbm9kZSBpbmZvIHNlcXVlbmNlIHBvaW50ZXInLz4KQEAgLTEyMjk4LDEzICsxMjIwOSwxMyBAQAogICAgICAgPGFyZyBuYW1lPScuLi4nIHR5cGU9Jy4uLicgaW5mbz0nZXh0cmEgcGFyYW1ldGVycyBmb3IgdGhlIG1lc3NhZ2UgZGlzcGxheScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlckZpbmROb2RlSW5mbycgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5GaW5kIHRoZSBwYXJzZXIgbm9kZSBpbmZvIHN0cnVjdCBmb3IgYSBnaXZlbiBub2RlPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogRG9uJmFwb3M7dCB1c2UuICBGaW5kIHRoZSBwYXJzZXIgbm9kZSBpbmZvIHN0cnVjdCBmb3IgYSBnaXZlbiBub2RlPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdjb25zdCB4bWxQYXJzZXJOb2RlSW5mbyAqJyBpbmZvPSdhbiB4bWxQYXJzZXJOb2RlSW5mbyBibG9jayBwb2ludGVyIG9yIE5VTEwnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4JyB0eXBlPSdjb25zdCB4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGNvbnRleHQnLz4KICAgICAgIDxhcmcgbmFtZT0nbm9kZScgdHlwZT0nY29uc3QgeG1sTm9kZVB0cicgaW5mbz0nYW4gWE1MIG5vZGUgd2l0aGluIHRoZSB0cmVlJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VyRmluZE5vZGVJbmZvSW5kZXgnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+eG1sUGFyc2VyRmluZE5vZGVJbmZvSW5kZXggOiBGaW5kIHRoZSBpbmRleCB0aGF0IHRoZSBpbmZvIHJlY29yZCBmb3IgdGhlIGdpdmVuIG5vZGUgaXMgb3Igc2hvdWxkIGJlIGF0IGluIGEgc29ydGVkIHNlcXVlbmNlPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogRG9uJmFwb3M7dCB1c2UuICB4bWxQYXJzZXJGaW5kTm9kZUluZm9JbmRleCA6IEZpbmQgdGhlIGluZGV4IHRoYXQgdGhlIGluZm8gcmVjb3JkIGZvciB0aGUgZ2l2ZW4gbm9kZSBpcyBvciBzaG91bGQgYmUgYXQgaW4gYSBzb3J0ZWQgc2VxdWVuY2U8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3Vuc2lnbmVkIGxvbmcnIGluZm89J2EgbG9uZyBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgcmVjb3JkJy8+CiAgICAgICA8YXJnIG5hbWU9J3NlcScgdHlwZT0nY29uc3QgeG1sUGFyc2VyTm9kZUluZm9TZXFQdHInIGluZm89J2Egbm9kZSBpbmZvIHNlcXVlbmNlIHBvaW50ZXInLz4KICAgICAgIDxhcmcgbmFtZT0nbm9kZScgdHlwZT0nY29uc3QgeG1sTm9kZVB0cicgaW5mbz0nYW4gWE1MIG5vZGUgcG9pbnRlcicvPgpAQCAtMTIzMTUsNyArMTIyMjYsNyBAQAogICAgICAgPGFyZyBuYW1lPSdmaWxlbmFtZScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgcGF0aCB0byBhIGZpbGUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZXJIYW5kbGVQRVJlZmVyZW5jZScgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5bNjldIFBFUmVmZXJlbmNlIDo6PSAmYXBvczslJmFwb3M7IE5hbWUgJmFwb3M7OyZhcG9zOyAgWyBXRkM6IE5vIFJlY3Vyc2lvbiBdIEEgcGFyc2VkIGVudGl0eSBtdXN0IG5vdCBjb250YWluIGEgcmVjdXJzaXZlIHJlZmVyZW5jZSB0byBpdHNlbGYsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiAgWyBXRkM6IEVudGl0eSBEZWNsYXJlZCBdIEluIGEgZG9jdW1lbnQgd2l0aG91dCBhbnkgRFRELCBhIGRvY3VtZW50IHdpdGggb25seSBhbiBpbnRlcm5hbCBEVEQgc3Vic2V0IHdoaWNoIGNvbnRhaW5zIG5vIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlcywgb3IgYSBkb2N1bWVudCB3aXRoICZxdW90O3N0YW5kYWxvbmU9JmFwb3M7eWVzJmFwb3M7JnF1b3Q7LCAuLi4gIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgcmVmZXJlbmNlIHRvIGl0Li4uICBbIFZDOiBFbnRpdHkgRGVjbGFyZWQgXSBJbiBhIGRvY3VtZW50IHdpdGggYW4gZXh0ZXJuYWwgc3Vic2V0IG9yIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcyB3aXRoICZxdW90O3N0YW5kYWxvbmU9JmFwb3M7bm8mYXBvczsmcXVvdDssIC4uLiAgLi4uIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHBhcmFtZXRlciBlbnRpdHkgbXVzdCBwcmVjZWRlIGFueSByZWZlcmVuY2UgdG8gaXQuLi4gIFsgV0ZDOiBJbiBEVEQgXSBQYXJhbWV0ZXItZW50aXR5IHJlZmVyZW5jZXMgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSBEVEQuIE5PVEU6IG1pc2xlYWRpbmcgYnV0IHRoaXMgaXMgaGFuZGxlZC4gIEEgUEVSZWZlcmVuY2UgbWF5IGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0gdGhlIGhhbmRsaW5nIGlzIGRvbmUgYWNjb3JkaW5nbHkgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNlbnRwcm9jIGkuZS4gLSBJbmNsdWRlZCBpbiBsaXRlcmFsIGluIGVudGl0eSB2YWx1ZXMgLSBJbmNsdWRlZCBhcyBQYXJhbWV0ZXIgRW50aXR5IHJlZmVyZW5jZSB3aXRoaW4gRFREczwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLiAgWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJmFwb3M7JSZhcG9zOyBOYW1lICZhcG9zOzsmYXBvczsgIFsgV0ZDOiBObyBSZWN1cnNpb24gXSBBIHBhcnNlZCBlbnRpdHkgbXVzdCBub3QgY29udGFpbiBhIHJlY3Vyc2l2ZSByZWZlcmVuY2UgdG8gaXRzZWxmLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gIFsgV0ZDOiBFbnRpdHkgRGVjbGFyZWQgXSBJbiBhIGRvY3VtZW50IHdpdGhvdXQgYW55IERURCwgYSBkb2N1bWVudCB3aXRoIG9ubHkgYW4gaW50ZXJuYWwgRFREIHN1YnNldCB3aGljaCBjb250YWlucyBubyBwYXJhbWV0ZXIgZW50aXR5IHJlZmVyZW5jZXMsIG9yIGEgZG9jdW1lbnQgd2l0aCAmcXVvdDtzdGFuZGFsb25lPSZhcG9zO3llcyZhcG9zOyZxdW90OywgLi4uICAuLi4gVGhlIGRlY2xhcmF0aW9uIG9mIGEgcGFyYW1ldGVyIGVudGl0eSBtdXN0IHByZWNlZGUgYW55IHJlZmVyZW5jZSB0byBpdC4uLiAgWyBWQzogRW50aXR5IERlY2xhcmVkIF0gSW4gYSBkb2N1bWVudCB3aXRoIGFuIGV4dGVybmFsIHN1YnNldCBvciBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgd2l0aCAmcXVvdDtzdGFuZGFsb25lPSZhcG9zO25vJmFwb3M7JnF1b3Q7LCAuLi4gIC4uLiBUaGUgZGVjbGFyYXRpb24gb2YgYSBwYXJhbWV0ZXIgZW50aXR5IG11c3QgcHJlY2VkZSBhbnkgcmVmZXJlbmNlIHRvIGl0Li4uICBbIFdGQzogSW4gRFREIF0gUGFyYW1ldGVyLWVudGl0eSByZWZlcmVuY2VzIG1heSBvbmx5IGFwcGVhciBpbiB0aGUgRFRELiBOT1RFOiBtaXNsZWFkaW5nIGJ1dCB0aGlzIGlzIGhhbmRsZWQuICBBIFBFUmVmZXJlbmNlIG1heSBoYXZlIGJlZW4gZGV0ZWN0ZWQgaW4gdGhlIGN1cnJlbnQgaW5wdXQgc3RyZWFtIHRoZSBoYW5kbGluZyBpcyBkb25lIGFjY29yZGluZ2x5IHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwjZW50cHJvYyBpLmUuIC0gSW5jbHVkZWQgaW4gbGl0ZXJhbCBpbiBlbnRpdHkgdmFsdWVzIC0gSW5jbHVkZWQgYXMgUGFyYW1ldGVyIEVudGl0eSByZWZlcmVuY2Ugd2l0aGluIERURHM8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTEyMzQzLDEyICsxMjI1NCwxMiBAQAogICAgICAgPGFyZyBuYW1lPSdVUkknIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nYSBDIHN0cmluZyBjb250YWluaW5nIHRoZSBVUkkgb3IgZmlsZW5hbWUnLz4KICAgICAgIDxhcmcgbmFtZT0nZW5jJyB0eXBlPSd4bWxDaGFyRW5jb2RpbmcnIGluZm89J3RoZSBjaGFyc2V0IGVuY29kaW5nIGlmIGtub3duJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0neG1sSU8nPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCcgZmlsZT0neG1sSU8nIG1vZHVsZT0neG1sSU8nPgogICAgICAgPGluZm8+UmVnaXN0ZXJzIGEgY2FsbGJhY2sgZm9yIFVSSSBpbnB1dCBmaWxlIGhhbmRsaW5nPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYycgaW5mbz0ndGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uJy8+CiAgICAgICA8YXJnIG5hbWU9J2Z1bmMnIHR5cGU9J3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJyBpbmZvPSdmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYycgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3R5cGUgbmFtZT0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIGZpbGU9J3htbElPJyBtb2R1bGU9J3htbElPJz4KICAgICAgIDxpbmZvPlNpZ25hdHVyZSBmb3IgdGhlIGZ1bmN0aW9uIGRvaW5nIHRoZSBsb29rdXAgZm9yIGEgc3VpdGFibGUgaW5wdXQgbWV0aG9kIGNvcnJlc3BvbmRpbmcgdG8gYW4gVVJJLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sUGFyc2VySW5wdXRCdWZmZXJQdHInIGluZm89J3RoZSBuZXcgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIE5VTEwgaWYgbm8gbWV0aG9kIHdhcyBmb3VuZC4nLz4KICAgICAgIDxhcmcgbmFtZT0nVVJJJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBVUkkgdG8gcmVhZCBmcm9tJy8+CkBAIC0xMjM3MCw3ICsxMjI4MSw3IEBACiAgICAgICA8YXJnIG5hbWU9J2VuYycgdHlwZT0neG1sQ2hhckVuY29kaW5nJyBpbmZvPSd0aGUgY2hhcnNldCBlbmNvZGluZyBpZiBrbm93bicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljJyBmaWxlPSd4bWxJTycgbW9kdWxlPSd4bWxJTyc+Ci0gICAgICA8aW5mbz5DcmVhdGUgYSBidWZmZXJlZCBwYXJzZXIgaW5wdXQgZm9yIHRoZSBwcm9ncmVzc2l2ZSBwYXJzaW5nIGZvciB0aGUgaW5wdXQgZnJvbSBhbiBpbW11dGFibGUgbWVtb3J5IGFyZWEuIFRoaXMgd2lsbCBub3QgY29weSB0aGUgbWVtb3J5IGFyZWEgdG8gdGhlIGJ1ZmZlciwgYnV0IHRoZSBtZW1vcnkgaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHBhcnNpbmcsIHRoaXMgaXMgdXNlZnVsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgbW1hcCZhcG9zO2VkIGZpbGUuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sUGFyc2VySW5wdXRCdWZmZXJQdHInIGluZm89J3RoZSBuZXcgcGFyc2VyIGlucHV0IG9yIE5VTEwnLz4KICAgICAgIDxhcmcgbmFtZT0nbWVtJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBtZW1vcnkgaW5wdXQnLz4KICAgICAgIDxhcmcgbmFtZT0nc2l6ZScgdHlwZT0naW50JyBpbmZvPSd0aGUgbGVuZ3RoIG9mIHRoZSBtZW1vcnkgYmxvY2snLz4KQEAgLTEyNDAxLDE5ICsxMjMxMiwxOSBAQAogICAgICAgPGFyZyBuYW1lPSdzdHInIHR5cGU9J3htbENoYXIgKicgaW5mbz0ndGhlIHN0cmluZyB0byBkZWFsbG9jYXRlJy8+CiAgICAgPC9mdW5jdHlwZT4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUGFyc2VySW5wdXRHcm93JyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VySW50ZXJuYWxzJz4KLSAgICAgIDxpbmZvPlRoaXMgZnVuY3Rpb24gaW5jcmVhc2UgdGhlIGlucHV0IGZvciB0aGUgcGFyc2VyLiBJdCB0cmllcyB0byBwcmVzZXJ2ZSBwb2ludGVycyB0byB0aGUgaW5wdXQgYnVmZmVyLCBhbmQga2VlcCBhbHJlYWR5IHJlYWQgZGF0YTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IERvbiZhcG9zO3QgdXNlLiAgVGhpcyBmdW5jdGlvbiBpbmNyZWFzZSB0aGUgaW5wdXQgZm9yIHRoZSBwYXJzZXIuIEl0IHRyaWVzIHRvIHByZXNlcnZlIHBvaW50ZXJzIHRvIHRoZSBpbnB1dCBidWZmZXIsIGFuZCBrZWVwIGFscmVhZHkgcmVhZCBkYXRhPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBhbW91bnQgb2YgY2hhciByZWFkLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCAwIGluZGljYXRlIHRoZSBlbmQgb2YgdGhpcyBlbnRpdHknLz4KICAgICAgIDxhcmcgbmFtZT0naW4nIHR5cGU9J3htbFBhcnNlcklucHV0UHRyJyBpbmZvPSdhbiBYTUwgcGFyc2VyIGlucHV0Jy8+CiAgICAgICA8YXJnIG5hbWU9J2xlbicgdHlwZT0naW50JyBpbmZvPSdhbiBpbmRpY2F0aXZlIHNpemUgZm9yIHRoZSBsb29rYWhlYWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxQYXJzZXJJbnB1dFJlYWQnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+VGhpcyBmdW5jdGlvbiB3YXMgaW50ZXJuYWwgYW5kIGlzIGRlcHJlY2F0ZWQuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3YXMgaW50ZXJuYWwgYW5kIGlzIGRlcHJlY2F0ZWQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89Jy0xIGFzIHRoaXMgaXMgYW4gZXJyb3IgdG8gdXNlIGl0LicvPgogICAgICAgPGFyZyBuYW1lPSdpbicgdHlwZT0neG1sUGFyc2VySW5wdXRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgaW5wdXQnLz4KICAgICAgIDxhcmcgbmFtZT0nbGVuJyB0eXBlPSdpbnQnIGluZm89J2FuIGluZGljYXRpdmUgc2l6ZSBmb3IgdGhlIGxvb2thaGVhZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBhcnNlcklucHV0U2hyaW5rJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VySW50ZXJuYWxzJz4KLSAgICAgIDxpbmZvPlRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB1c2VkIGlucHV0IGZvciB0aGUgcGFyc2VyLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IERvbiZhcG9zO3QgdXNlLiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIHVzZWQgaW5wdXQgZm9yIHRoZSBwYXJzZXIuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2luJyB0eXBlPSd4bWxQYXJzZXJJbnB1dFB0cicgaW5mbz0nYW4gWE1MIHBhcnNlciBpbnB1dCcvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMjUwMCw3ICsxMjQxMSw3IEBACiAgICAgICA8YXJnIG5hbWU9J25hbWVzcGFjZXMnIHR5cGU9J2NvbnN0IHhtbENoYXIgKionIGluZm89J3RoZSBwcmVmaXggZGVmaW5pdGlvbnMsIGFycmF5IG9mIFtVUkksIHByZWZpeF0gb3IgTlVMTCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFBlZGFudGljUGFyc2VyRGVmYXVsdCcgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5TZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGVuYWJsaW5nIHBlZGFudGljIHdhcm5pbmdzLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB0aGUgbW9kZXJuIG9wdGlvbnMgQVBJIHdpdGggWE1MX1BBUlNFX1BFREFOVElDLiAgU2V0IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIGZvciBlbmFibGluZyBwZWRhbnRpYyB3YXJuaW5ncy48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0ndGhlIGxhc3QgdmFsdWUgZm9yIDAgZm9yIG5vIHN1YnN0aXR1dGlvbiwgMSBmb3Igc3Vic3RpdHV0aW9uLicvPgogICAgICAgPGFyZyBuYW1lPSd2YWwnIHR5cGU9J2ludCcgaW5mbz0naW50IDAgb3IgMScvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xMjcyMywxOSArMTI2MzQsMTkgQEAKICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxSZWNvdmVyRG9jJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50IGFuZCBidWlsZCBhIHRyZWUuIEluIHRoZSBjYXNlIHRoZSBkb2N1bWVudCBpcyBub3QgV2VsbCBGb3JtZWQsIGEgYXR0ZW1wdCB0byBidWlsZCBhIHRyZWUgaXMgdHJpZWQgYW55d2F5PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbFJlYWREb2Mgd2l0aCBYTUxfUEFSU0VfUkVDT1ZFUi4gIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQgYW5kIGJ1aWxkIGEgdHJlZS4gSW4gdGhlIGNhc2UgdGhlIGRvY3VtZW50IGlzIG5vdCBXZWxsIEZvcm1lZCwgYSBhdHRlbXB0IHRvIGJ1aWxkIGEgdHJlZSBpcyB0cmllZCBhbnl3YXk8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbERvY1B0cicgaW5mbz0ndGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlJy8+CiAgICAgICA8YXJnIG5hbWU9J2N1cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgeG1sQ2hhcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFJlY292ZXJGaWxlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLiBJbiB0aGUgY2FzZSB0aGUgZG9jdW1lbnQgaXMgbm90IFdlbGwgRm9ybWVkLCBpdCBhdHRlbXB0cyB0byBidWlsZCBhIHRyZWUgYW55d2F5PC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbFJlYWRGaWxlIHdpdGggWE1MX1BBUlNFX1JFQ09WRVIuICBwYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcyBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLiBJbiB0aGUgY2FzZSB0aGUgZG9jdW1lbnQgaXMgbm90IFdlbGwgRm9ybWVkLCBpdCBhdHRlbXB0cyB0byBidWlsZCBhIHRyZWUgYW55d2F5PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxEb2NQdHInIGluZm89J3RoZSByZXN1bHRpbmcgZG9jdW1lbnQgdHJlZSBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZScvPgogICAgICAgPGFyZyBuYW1lPSdmaWxlbmFtZScgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSd0aGUgZmlsZW5hbWUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxSZWNvdmVyTWVtb3J5JyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5wYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCBidWlsZCBhIHRyZWUuIEluIHRoZSBjYXNlIHRoZSBkb2N1bWVudCBpcyBub3QgV2VsbCBGb3JtZWQsIGFuIGF0dGVtcHQgdG8gYnVpbGQgYSB0cmVlIGlzIHRyaWVkIGFueXdheTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB4bWxSZWFkTWVtb3J5IHdpdGggWE1MX1BBUlNFX1JFQ09WRVIuICBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCBidWlsZCBhIHRyZWUuIEluIHRoZSBjYXNlIHRoZSBkb2N1bWVudCBpcyBub3QgV2VsbCBGb3JtZWQsIGFuIGF0dGVtcHQgdG8gYnVpbGQgYSB0cmVlIGlzIHRyaWVkIGFueXdheTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sRG9jUHRyJyBpbmZvPSd0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yJy8+CiAgICAgICA8YXJnIG5hbWU9J2J1ZmZlcicgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSdhbiBwb2ludGVyIHRvIGEgY2hhciBhcnJheScvPgogICAgICAgPGFyZyBuYW1lPSdzaXplJyB0eXBlPSdpbnQnIGluZm89J3RoZSBzaXplIG9mIHRoZSBhcnJheScvPgpAQCAtMTI4NjAsMTIgKzEyNzcxLDEyIEBACiAgICAgICA8YXJnIG5hbWU9J3JlYWRGdW5jJyB0eXBlPSd4bWxJbnB1dFJlYWRDYWxsYmFjaycgaW5mbz0ndGhlIHhtbElucHV0UmVhZENhbGxiYWNrJy8+CiAgICAgICA8YXJnIG5hbWU9J2Nsb3NlRnVuYycgdHlwZT0neG1sSW5wdXRDbG9zZUNhbGxiYWNrJyBpbmZvPSd0aGUgeG1sSW5wdXRDbG9zZUNhbGxiYWNrJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0ndHJlZScgbW9kdWxlPSd0cmVlJz4KICAgICAgIDxpbmZvPlJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGNyZWF0aW9uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxSZWdpc3Rlck5vZGVGdW5jJyBpbmZvPSd0aGUgb2xkIHZhbHVlIG9mIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24nLz4KICAgICAgIDxhcmcgbmFtZT0nZnVuYycgdHlwZT0neG1sUmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgbmV3IFJlZ2lzdGVyTm9kZUZ1bmMnLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxSZWdpc3Rlck5vZGVGdW5jJyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgIDxmdW5jdHlwZSBuYW1lPSd4bWxSZWdpc3Rlck5vZGVGdW5jJyBmaWxlPSd0cmVlJyBtb2R1bGU9J3RyZWUnPgogICAgICAgPGluZm8+U2lnbmF0dXJlIGZvciB0aGUgcmVnaXN0cmF0aW9uIGNhbGxiYWNrIG9mIGEgY3JlYXRlZCBub2RlPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J25vZGUnIHR5cGU9J3htbE5vZGVQdHInIGluZm89J3RoZSBjdXJyZW50IG5vZGUnLz4KQEAgLTEzMzIxLDEzICsxMzIzMiwxMyBAQAogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFNBWERlZmF1bHRWZXJzaW9uJyBmaWxlPSdTQVgyJyBtb2R1bGU9J1NBWDInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPlNldCB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mIFNBWCB1c2VkIGdsb2JhbGx5IGJ5IHRoZSBsaWJyYXJ5LiBCeSBkZWZhdWx0LCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdGhlIGRlZmF1bHQgaXMgc2V0IHRvIDIuIE5vdGUgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYSBiZXR0ZXIgY29kaW5nIHN0eWxlIHRvIHVzZSB4bWxTQVhWZXJzaW9uKCkgdG8gc2V0IHVwIHRoZSB2ZXJzaW9uIGV4cGxpY2l0bHkgZm9yIGEgZ2l2ZW4gcGFyc2luZyBjb250ZXh0LjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSBwYXJzZXIgb3B0aW9uIFhNTF9QQVJTRV9TQVgxLiAgU2V0IHRoZSBkZWZhdWx0IHZlcnNpb24gb2YgU0FYIHVzZWQgZ2xvYmFsbHkgYnkgdGhlIGxpYnJhcnkuIEJ5IGRlZmF1bHQsIGR1cmluZyBpbml0aWFsaXphdGlvbiB0aGUgZGVmYXVsdCBpcyBzZXQgdG8gMi4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhIGJldHRlciBjb2Rpbmcgc3R5bGUgdG8gdXNlIHhtbFNBWFZlcnNpb24oKSB0byBzZXQgdXAgdGhlIHZlcnNpb24gZXhwbGljaXRseSBmb3IgYSBnaXZlbiBwYXJzaW5nIGNvbnRleHQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBwcmV2aW91cyB2YWx1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuJy8+CiAgICAgICA8YXJnIG5hbWU9J3ZlcnNpb24nIHR5cGU9J2ludCcgaW5mbz0ndGhlIHZlcnNpb24sIDEgb3IgMicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFNBWFBhcnNlRFREJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1ZBTElEX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+TG9hZCBhbmQgcGFyc2UgYW4gZXh0ZXJuYWwgc3Vic2V0LjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IERvbiZhcG9zO3QgdXNlLiAgTG9hZCBhbmQgcGFyc2UgYW4gZXh0ZXJuYWwgc3Vic2V0LjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sRHRkUHRyJyBpbmZvPSd0aGUgcmVzdWx0aW5nIHhtbER0ZFB0ciBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuJy8+CiAgICAgICA8YXJnIG5hbWU9J3NheCcgdHlwZT0neG1sU0FYSGFuZGxlclB0cicgaW5mbz0ndGhlIFNBWCBoYW5kbGVyIGJsb2NrJy8+CiAgICAgICA8YXJnIG5hbWU9J0V4dGVybmFsSUQnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSBOQU1FKiBjb250YWluaW5nIHRoZSBFeHRlcm5hbCBJRCBvZiB0aGUgRFREJy8+CkBAIC0xMzMzNSw3ICsxMzI0Niw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU0FYUGFyc2VEb2MnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQgYW5kIGJ1aWxkIGEgdHJlZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbE5ld1NBWFBhcnNlckN0eHQgYW5kIHhtbEN0eHRSZWFkRG9jLiAgcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLiBJdCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jayB0byBoYW5kbGUgdGhlIHBhcnNpbmcgY2FsbGJhY2suIElmIHNheCBpcyBOVUxMLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbERvY1B0cicgaW5mbz0ndGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlJy8+CiAgICAgICA8YXJnIG5hbWU9J3NheCcgdHlwZT0neG1sU0FYSGFuZGxlclB0cicgaW5mbz0ndGhlIFNBWCBoYW5kbGVyIGJsb2NrJy8+CiAgICAgICA8YXJnIG5hbWU9J2N1cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgeG1sQ2hhcicvPgpAQCAtMTMzNDMsMTQgKzEzMjU0LDE0IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU0FYUGFyc2VFbnRpdHknIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBleHRlcm5hbCBlbnRpdHkgb3V0IG9mIGNvbnRleHQgYW5kIGJ1aWxkIGEgdHJlZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuICBbNzhdIGV4dFBhcnNlZEVudCA6Oj0gVGV4dERlY2w/IGNvbnRlbnQgIFRoaXMgY29ycmVzcG9uZCB0byBhICZxdW90O1dlbGwgQmFsYW5jZWQmcXVvdDsgY2h1bms8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBEb24mYXBvczt0IHVzZS4gIHBhcnNlIGFuIFhNTCBleHRlcm5hbCBlbnRpdHkgb3V0IG9mIGNvbnRleHQgYW5kIGJ1aWxkIGEgdHJlZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuICBbNzhdIGV4dFBhcnNlZEVudCA6Oj0gVGV4dERlY2w/IGNvbnRlbnQgIFRoaXMgY29ycmVzcG9uZCB0byBhICZxdW90O1dlbGwgQmFsYW5jZWQmcXVvdDsgY2h1bms8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbERvY1B0cicgaW5mbz0ndGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlJy8+CiAgICAgICA8YXJnIG5hbWU9J3NheCcgdHlwZT0neG1sU0FYSGFuZGxlclB0cicgaW5mbz0ndGhlIFNBWCBoYW5kbGVyIGJsb2NrJy8+CiAgICAgICA8YXJnIG5hbWU9J2ZpbGVuYW1lJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J3RoZSBmaWxlbmFtZScvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFNBWFBhcnNlRmlsZScgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIGZpbGUgYW5kIGJ1aWxkIGEgdHJlZS4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MgY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbE5ld1NBWFBhcnNlckN0eHQgYW5kIHhtbEN0eHRSZWFkRmlsZS4gIHBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sRG9jUHRyJyBpbmZvPSd0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUnLz4KICAgICAgIDxhcmcgbmFtZT0nc2F4JyB0eXBlPSd4bWxTQVhIYW5kbGVyUHRyJyBpbmZvPSd0aGUgU0FYIGhhbmRsZXIgYmxvY2snLz4KICAgICAgIDxhcmcgbmFtZT0nZmlsZW5hbWUnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0ndGhlIGZpbGVuYW1lJy8+CkBAIC0xMzM1OCw3ICsxMzI2OSw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU0FYUGFyc2VGaWxlV2l0aERhdGEnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLiAgVXNlciBkYXRhICh2b2lkICopIGlzIHN0b3JlZCB3aXRoaW4gdGhlIHBhcnNlciBjb250ZXh0IGluIHRoZSBjb250ZXh0JmFwb3M7cyBfcHJpdmF0ZSBtZW1iZXIsIHNvIGl0IGlzIGF2YWlsYWJsZSBuZWFybHkgZXZlcnl3aGVyZSBpbiBsaWJ4bWw8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBVc2UgeG1sTmV3U0FYUGFyc2VyQ3R4dCBhbmQgeG1sQ3R4dFJlYWRGaWxlLiAgcGFyc2UgYW4gWE1MIGZpbGUgYW5kIGJ1aWxkIGEgdHJlZS4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MgY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4gSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuICBVc2VyIGRhdGEgKHZvaWQgKikgaXMgc3RvcmVkIHdpdGhpbiB0aGUgcGFyc2VyIGNvbnRleHQgaW4gdGhlIGNvbnRleHQmYXBvcztzIF9wcml2YXRlIG1lbWJlciwgc28gaXQgaXMgYXZhaWxhYmxlIG5lYXJseSBldmVyeXdoZXJlIGluIGxpYnhtbDwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sRG9jUHRyJyBpbmZvPSd0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUnLz4KICAgICAgIDxhcmcgbmFtZT0nc2F4JyB0eXBlPSd4bWxTQVhIYW5kbGVyUHRyJyBpbmZvPSd0aGUgU0FYIGhhbmRsZXIgYmxvY2snLz4KICAgICAgIDxhcmcgbmFtZT0nZmlsZW5hbWUnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0ndGhlIGZpbGVuYW1lJy8+CkBAIC0xMzM2Nyw3ICsxMzI3OCw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU0FYUGFyc2VNZW1vcnknIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLjwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB4bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCB4bWxDdHh0UmVhZE1lbW9yeS4gIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sRG9jUHRyJyBpbmZvPSd0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUnLz4KICAgICAgIDxhcmcgbmFtZT0nc2F4JyB0eXBlPSd4bWxTQVhIYW5kbGVyUHRyJyBpbmZvPSd0aGUgU0FYIGhhbmRsZXIgYmxvY2snLz4KICAgICAgIDxhcmcgbmFtZT0nYnVmZmVyJyB0eXBlPSdjb25zdCBjaGFyIConIGluZm89J2FuIHBvaW50ZXIgdG8gYSBjaGFyIGFycmF5Jy8+CkBAIC0xMzM3Niw3ICsxMzI4Nyw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YScgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+cGFyc2UgYW4gWE1MIGluLW1lbW9yeSBibG9jayBhbmQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgRE9NIHRyZWUgYnVpbGRpbmcgcm91dGluZXMuICBVc2VyIGRhdGEgKHZvaWQgKikgaXMgc3RvcmVkIHdpdGhpbiB0aGUgcGFyc2VyIGNvbnRleHQgaW4gdGhlIGNvbnRleHQmYXBvcztzIF9wcml2YXRlIG1lbWJlciwgc28gaXQgaXMgYXZhaWxhYmxlIG5lYXJseSBldmVyeXdoZXJlIGluIGxpYnhtbDwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB4bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCB4bWxDdHh0UmVhZE1lbW9yeS4gIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLiAgVXNlciBkYXRhICh2b2lkICopIGlzIHN0b3JlZCB3aXRoaW4gdGhlIHBhcnNlciBjb250ZXh0IGluIHRoZSBjb250ZXh0JmFwb3M7cyBfcHJpdmF0ZSBtZW1iZXIsIHNvIGl0IGlzIGF2YWlsYWJsZSBuZWFybHkgZXZlcnl3aGVyZSBpbiBsaWJ4bWw8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3htbERvY1B0cicgaW5mbz0ndGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlJy8+CiAgICAgICA8YXJnIG5hbWU9J3NheCcgdHlwZT0neG1sU0FYSGFuZGxlclB0cicgaW5mbz0ndGhlIFNBWCBoYW5kbGVyIGJsb2NrJy8+CiAgICAgICA8YXJnIG5hbWU9J2J1ZmZlcicgdHlwZT0nY29uc3QgY2hhciAqJyBpbmZvPSdhbiBwb2ludGVyIHRvIGEgY2hhciBhcnJheScvPgpAQCAtMTMzODYsNyArMTMyOTcsNyBAQAogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFNBWFVzZXJQYXJzZUZpbGUnIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPnBhcnNlIGFuIFhNTCBmaWxlIGFuZCBjYWxsIHRoZSBnaXZlbiBTQVggaGFuZGxlciByb3V0aW5lcy4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MgY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZDwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB4bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCB4bWxDdHh0UmVhZEZpbGUuICBwYXJzZSBhbiBYTUwgZmlsZSBhbmQgY2FsbCB0aGUgZ2l2ZW4gU0FYIGhhbmRsZXIgcm91dGluZXMuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQ8L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nMCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlJy8+CiAgICAgICA8YXJnIG5hbWU9J3NheCcgdHlwZT0neG1sU0FYSGFuZGxlclB0cicgaW5mbz0nYSBTQVggaGFuZGxlcicvPgogICAgICAgPGFyZyBuYW1lPSd1c2VyX2RhdGEnIHR5cGU9J3ZvaWQgKicgaW5mbz0nVGhlIHVzZXIgZGF0YSByZXR1cm5lZCBvbiBTQVggY2FsbGJhY2tzJy8+CkBAIC0xMzM5NCw3ICsxMzMwNSw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU0FYVXNlclBhcnNlTWVtb3J5JyBmaWxlPSdwYXJzZXInIG1vZHVsZT0ncGFyc2VyJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCk8L2NvbmQ+Ci0gICAgICA8aW5mbz5BIGJldHRlciBTQVggcGFyc2luZyByb3V0aW5lLiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJ1ZmZlciBhbmQgY2FsbCB0aGUgZ2l2ZW4gU0FYIGhhbmRsZXIgcm91dGluZXMuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHhtbE5ld1NBWFBhcnNlckN0eHQgYW5kIHhtbEN0eHRSZWFkTWVtb3J5LiAgcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBidWZmZXIgYW5kIGNhbGwgdGhlIGdpdmVuIFNBWCBoYW5kbGVyIHJvdXRpbmVzLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScwIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBhIGVycm9yIG51bWJlciBvdGhlcndpc2UnLz4KICAgICAgIDxhcmcgbmFtZT0nc2F4JyB0eXBlPSd4bWxTQVhIYW5kbGVyUHRyJyBpbmZvPSdhIFNBWCBoYW5kbGVyJy8+CiAgICAgICA8YXJnIG5hbWU9J3VzZXJfZGF0YScgdHlwZT0ndm9pZCAqJyBpbmZvPSdUaGUgdXNlciBkYXRhIHJldHVybmVkIG9uIFNBWCBjYWxsYmFja3MnLz4KQEAgLTEzNTI4LDcgKzEzNDM5LDcgQEAKICAgICAgIDxpbmZvPlNhdmUgYSBzdWJ0cmVlIHN0YXJ0aW5nIGF0IHRoZSBub2RlIHBhcmFtZXRlciB0byBhIHNhdmluZyBjb250ZXh0IFRPRE86IFRoZSBmdW5jdGlvbiBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0IGFzIGl0IGRvZXMgbm90IHJldHVybiB0aGUgYnl0ZSBjb3VudCBidXQgMCBpbnN0ZWFkPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdsb25nJyBpbmZvPSd0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbiBvciAtMSBpbiBjYXNlIG9mIGVycm9yJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFNhdmVDdHh0UHRyJyBpbmZvPSdhIGRvY3VtZW50IHNhdmluZyBjb250ZXh0Jy8+Ci0gICAgICA8YXJnIG5hbWU9J2N1cicgdHlwZT0neG1sTm9kZVB0cicgaW5mbz0nJy8+CisgICAgICA8YXJnIG5hbWU9J2N1cicgdHlwZT0neG1sTm9kZVB0cicgaW5mbz0ndGhlIHRvcCBub2RlIG9mIHRoZSBzdWJ0cmVlIHRvIHNhdmUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxTYXZlVXJpJyBmaWxlPSd1cmknIG1vZHVsZT0ndXJpJz4KICAgICAgIDxpbmZvPlNhdmUgdGhlIFVSSSBhcyBhbiBlc2NhcGVkIHN0cmluZzwvaW5mbz4KQEAgLTEzNTUyLDcgKzEzNDYzLDcgQEAKICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxTY2hlbWFDbGVhbnVwVHlwZXMnIGZpbGU9J3htbHNjaGVtYXN0eXBlcycgbW9kdWxlPSd4bWxzY2hlbWFzdHlwZXMnPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sQ2xlYW51cFBhcnNlciB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlciBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24mYXBvczt0IGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuICBDbGVhbnVwIHRoZSBkZWZhdWx0IFhNTCBTY2hlbWFzIHR5cGUgbGlicmFyeTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sQ2xlYW51cFBhcnNlciB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlciBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24mYXBvczt0IGhhdmUgdG8gY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuICBDbGVhbnVwIHRoZSBkZWZhdWx0IFhNTCBTY2hlbWFzIHR5cGUgbGlicmFyeTwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFNjaGVtYUNvbGxhcHNlU3RyaW5nJyBmaWxlPSd4bWxzY2hlbWFzdHlwZXMnIG1vZHVsZT0neG1sc2NoZW1hc3R5cGVzJz4KQEAgLTEzNjk5LDcgKzEzNjEwLDcgQEAKICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU2NoZW1hSW5pdFR5cGVzJyBmaWxlPSd4bWxzY2hlbWFzdHlwZXMnIG1vZHVsZT0neG1sc2NoZW1hc3R5cGVzJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5Jbml0aWFsaXplIHRoZSBkZWZhdWx0IFhNTCBTY2hlbWFzIHR5cGUgbGlicmFyeTwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgorICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU2NoZW1hSXNCdWlsdEluVHlwZUZhY2V0JyBmaWxlPSd4bWxzY2hlbWFzdHlwZXMnIG1vZHVsZT0neG1sc2NoZW1hc3R5cGVzJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCk8L2NvbmQ+CkBAIC0xNDE5NSw3ICsxNDEwNiw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU2V0dXBQYXJzZXJGb3JCdWZmZXInIGZpbGU9J3BhcnNlcicgbW9kdWxlPSdwYXJzZXInPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKTwvY29uZD4KLSAgICAgIDxpbmZvPlNldHVwIHRoZSBwYXJzZXIgY29udGV4dCB0byBwYXJzZSBhIG5ldyBidWZmZXI7IENsZWFycyBhbnkgcHJpb3IgY29udGVudHMgZnJvbSB0aGUgcGFyc2VyIGNvbnRleHQuIFRoZSBidWZmZXIgcGFyYW1ldGVyIG11c3Qgbm90IGJlIE5VTEwsIGJ1dCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyIGNhbiBiZTwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IERvbiZhcG9zO3QgdXNlLiAgU2V0dXAgdGhlIHBhcnNlciBjb250ZXh0IHRvIHBhcnNlIGEgbmV3IGJ1ZmZlcjsgQ2xlYXJzIGFueSBwcmlvciBjb250ZW50cyBmcm9tIHRoZSBwYXJzZXIgY29udGV4dC4gVGhlIGJ1ZmZlciBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgTlVMTCwgYnV0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgY2FuIGJlPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFBhcnNlckN0eHRQdHInIGluZm89J2FuIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSdidWZmZXInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nYSB4bWxDaGFyICogYnVmZmVyJy8+CkBAIC0xNDMzNSw3ICsxNDI0Niw3IEBACiAgICAgICA8YXJnIG5hbWU9J25vZGUyJyB0eXBlPSd4bWxOb2RlUHRyJyBpbmZvPSd1bnVzZWQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxTa2lwQmxhbmtDaGFycycgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlcic+Ci0gICAgICA8aW5mbz5za2lwIGFsbCBibGFua3MgY2hhcmFjdGVyIGZvdW5kIGF0IHRoYXQgcG9pbnQgaW4gdGhlIGlucHV0IHN0cmVhbXMuIEl0IHBvcHMgdXAgZmluaXNoZWQgZW50aXRpZXMgaW4gdGhlIHByb2Nlc3MgaWYgYWxsb3dhYmxlIGF0IHRoYXQgcG9pbnQuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICBza2lwIGFsbCBibGFua3MgY2hhcmFjdGVyIGZvdW5kIGF0IHRoYXQgcG9pbnQgaW4gdGhlIGlucHV0IHN0cmVhbXMuIEl0IHBvcHMgdXAgZmluaXNoZWQgZW50aXRpZXMgaW4gdGhlIHByb2Nlc3MgaWYgYWxsb3dhYmxlIGF0IHRoYXQgcG9pbnQuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBudW1iZXIgb2Ygc3BhY2UgY2hhcnMgc2tpcHBlZCcvPgogICAgICAgPGFyZyBuYW1lPSdjdHh0JyB0eXBlPSd4bWxQYXJzZXJDdHh0UHRyJyBpbmZvPSd0aGUgWE1MIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgPC9mdW5jdGlvbj4KQEAgLTE0NDg2LDE0ICsxNDM5NywxNCBAQAogICAgICAgPGFyZyBuYW1lPSdzdHJlYW1DdHh0JyB0eXBlPSd4bWxTdHJlYW1DdHh0UHRyJyBpbmZvPSd0aGUgc3RyZWFtIGNvbnRleHQnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxTdHJpbmdDdXJyZW50Q2hhcicgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5UaGUgY3VycmVudCBjaGFyIHZhbHVlLCBpZiB1c2luZyBVVEYtOCB0aGlzIG1heSBhY3R1YWxseSBzcGFuIG11bHRpcGxlIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuICBUaGUgY3VycmVudCBjaGFyIHZhbHVlLCBpZiB1c2luZyBVVEYtOCB0aGlzIG1heSBhY3R1YWxseSBzcGFuIG11bHRpcGxlIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBjdXJyZW50IGNoYXIgdmFsdWUgYW5kIGl0cyBsZW5ndGgnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIFhNTCBwYXJzZXIgY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSdjdXInIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ncG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjaGFyJy8+CiAgICAgICA8YXJnIG5hbWU9J2xlbicgdHlwZT0naW50IConIGluZm89J3BvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY2hhciByZWFkJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU3RyaW5nRGVjb2RlRW50aXRpZXMnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+VGFrZXMgYSBlbnRpdHkgc3RyaW5nIGNvbnRlbnQgYW5kIHByb2Nlc3MgdG8gZG8gdGhlIGFkZXF1YXRlIHN1YnN0aXR1dGlvbnMuICBbNjddIFJlZmVyZW5jZSA6Oj0gRW50aXR5UmVmIHwgQ2hhclJlZiAgWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJmFwb3M7JSZhcG9zOyBOYW1lICZhcG9zOzsmYXBvczs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBUYWtlcyBhIGVudGl0eSBzdHJpbmcgY29udGVudCBhbmQgcHJvY2VzcyB0byBkbyB0aGUgYWRlcXVhdGUgc3Vic3RpdHV0aW9ucy4gIFs2N10gUmVmZXJlbmNlIDo6PSBFbnRpdHlSZWYgfCBDaGFyUmVmICBbNjldIFBFUmVmZXJlbmNlIDo6PSAmYXBvczslJmFwb3M7IE5hbWUgJmFwb3M7OyZhcG9zOzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSdBIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgd2l0aCB0aGUgc3Vic3RpdHV0aW9uIGRvbmUuIFRoZSBjYWxsZXIgbXVzdCBkZWFsbG9jYXRlIGl0ICEnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgaW5wdXQgc3RyaW5nJy8+CkBAIC0xNDUwOSw3ICsxNDQyMCw3IEBACiAgICAgICA8YXJnIG5hbWU9J3ZhbHVlJyB0eXBlPSdjb25zdCB4bWxDaGFyIConIGluZm89J3RoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU3RyaW5nTGVuRGVjb2RlRW50aXRpZXMnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXInPgotICAgICAgPGluZm8+VGFrZXMgYSBlbnRpdHkgc3RyaW5nIGNvbnRlbnQgYW5kIHByb2Nlc3MgdG8gZG8gdGhlIGFkZXF1YXRlIHN1YnN0aXR1dGlvbnMuICBbNjddIFJlZmVyZW5jZSA6Oj0gRW50aXR5UmVmIHwgQ2hhclJlZiAgWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJmFwb3M7JSZhcG9zOyBOYW1lICZhcG9zOzsmYXBvczs8L2luZm8+CisgICAgICA8aW5mbz5ERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJmFwb3M7dCB1c2UuICBUYWtlcyBhIGVudGl0eSBzdHJpbmcgY29udGVudCBhbmQgcHJvY2VzcyB0byBkbyB0aGUgYWRlcXVhdGUgc3Vic3RpdHV0aW9ucy4gIFs2N10gUmVmZXJlbmNlIDo6PSBFbnRpdHlSZWYgfCBDaGFyUmVmICBbNjldIFBFUmVmZXJlbmNlIDo6PSAmYXBvczslJmFwb3M7IE5hbWUgJmFwb3M7OyZhcG9zOzwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSdBIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgd2l0aCB0aGUgc3Vic3RpdHV0aW9uIGRvbmUuIFRoZSBjYWxsZXIgbXVzdCBkZWFsbG9jYXRlIGl0ICEnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgaW5wdXQgc3RyaW5nJy8+CkBAIC0xNDU4MiwyOCArMTQ0OTMsMjggQEAKICAgICAgIDxpbmZvPlNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IgYW5kIHRoZSBtb2R1bGUgaGFuZGxlcyB0aGUgbmV3IGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J3VzZXJEYXRhJyB0eXBlPSd2b2lkIConIGluZm89J3VzZXIgcHJvdmlkZWQgZGF0YSBmb3IgdGhlIGVycm9yIGNhbGxiYWNrJy8+Ci0gICAgICA8YXJnIG5hbWU9J2Vycm9yJyB0eXBlPSd4bWxFcnJvclB0cicgaW5mbz0ndGhlIGVycm9yIGJlaW5nIHJhaXNlZC4nLz4KKyAgICAgIDxhcmcgbmFtZT0nZXJyb3InIHR5cGU9J2NvbnN0IHhtbEVycm9yIConIGluZm89J3RoZSBlcnJvciBiZWluZyByYWlzZWQuJy8+CiAgICAgPC9mdW5jdHlwZT4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdCcgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5TZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGRlZmF1bHQgZW50aXR5IHN1cHBvcnQuIEluaXRpYWxseSB0aGUgcGFyc2VyIGFsd2F5cyBrZWVwIGVudGl0eSByZWZlcmVuY2VzIGluc3RlYWQgb2Ygc3Vic3RpdHV0aW5nIGVudGl0eSB2YWx1ZXMgaW4gdGhlIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcGFyc2VyIGJlaGF2aW9yIFNBWDo6c3Vic3RpdHV0ZUVudGl0aWVzKCkgaGFzIHRvIGJlIHVzZWQgZm9yIGNoYW5naW5nIHRoYXQgb24gYSBmaWxlIGJ5IGZpbGUgYmFzaXMuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogVXNlIHRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgd2l0aCBYTUxfUEFSU0VfTk9FTlQuICBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGRlZmF1bHQgZW50aXR5IHN1cHBvcnQuIEluaXRpYWxseSB0aGUgcGFyc2VyIGFsd2F5cyBrZWVwIGVudGl0eSByZWZlcmVuY2VzIGluc3RlYWQgb2Ygc3Vic3RpdHV0aW5nIGVudGl0eSB2YWx1ZXMgaW4gdGhlIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcGFyc2VyIGJlaGF2aW9yIFNBWDo6c3Vic3RpdHV0ZUVudGl0aWVzKCkgaGFzIHRvIGJlIHVzZWQgZm9yIGNoYW5naW5nIHRoYXQgb24gYSBmaWxlIGJ5IGZpbGUgYmFzaXMuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89J3RoZSBsYXN0IHZhbHVlIGZvciAwIGZvciBubyBzdWJzdGl0dXRpb24sIDEgZm9yIHN1YnN0aXR1dGlvbi4nLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsJyB0eXBlPSdpbnQnIGluZm89J2ludCAwIG9yIDEnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxTd2l0Y2hFbmNvZGluZycgZmlsZT0ncGFyc2VySW50ZXJuYWxzJyBtb2R1bGU9J3BhcnNlckludGVybmFscyc+Ci0gICAgICA8aW5mbz5jaGFuZ2UgdGhlIGlucHV0IGZ1bmN0aW9ucyB3aGVuIGRpc2NvdmVyaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgYSBnaXZlbiBlbnRpdHkuPC9pbmZvPgorICAgICAgPGluZm8+VXNlIGVuY29kaW5nIHNwZWNpZmllZCBieSBlbnVtIHRvIGRlY29kZSBpbnB1dCBkYXRhLiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBlbmZvcmNlIHRoZSBlbmNvZGluZyBvZiBjaHVua3MgcGFzc2VkIHRvIHhtbFBhcnNlQ2h1bmsuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBvdGhlcndpc2UnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J2VuYycgdHlwZT0neG1sQ2hhckVuY29kaW5nJyBpbmZvPSd0aGUgZW5jb2RpbmcgdmFsdWUgKG51bWJlciknLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxTd2l0Y2hJbnB1dEVuY29kaW5nJyBmaWxlPSdwYXJzZXJJbnRlcm5hbHMnIG1vZHVsZT0ncGFyc2VySW50ZXJuYWxzJz4KLSAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IFVzZSB4bWxTd2l0Y2hUb0VuY29kaW5nICBjaGFuZ2UgdGhlIGlucHV0IGZ1bmN0aW9ucyB3aGVuIGRpc2NvdmVyaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgYSBnaXZlbiBlbnRpdHkuPC9pbmZvPgorICAgICAgPGluZm8+REVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbiZhcG9zO3QgdXNlLiAgVXNlIGVuY29kaW5nIGhhbmRsZXIgdG8gZGVjb2RlIGlucHV0IGRhdGEuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBvdGhlcndpc2UnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J2lucHV0JyB0eXBlPSd4bWxQYXJzZXJJbnB1dFB0cicgaW5mbz0ndGhlIGlucHV0IHN0cmVhbScvPgogICAgICAgPGFyZyBuYW1lPSdoYW5kbGVyJyB0eXBlPSd4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyJyBpbmZvPSd0aGUgZW5jb2RpbmcgaGFuZGxlcicvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFN3aXRjaFRvRW5jb2RpbmcnIGZpbGU9J3BhcnNlckludGVybmFscycgbW9kdWxlPSdwYXJzZXJJbnRlcm5hbHMnPgotICAgICAgPGluZm8+Y2hhbmdlIHRoZSBpbnB1dCBmdW5jdGlvbnMgd2hlbiBkaXNjb3ZlcmluZyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIGEgZ2l2ZW4gZW50aXR5LjwvaW5mbz4KKyAgICAgIDxpbmZvPlVzZSBlbmNvZGluZyBoYW5kbGVyIHRvIGRlY29kZSBpbnB1dCBkYXRhLiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBlbmZvcmNlIHRoZSBlbmNvZGluZyBvZiBjaHVua3MgcGFzc2VkIHRvIHhtbFBhcnNlQ2h1bmsuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBvdGhlcndpc2UnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4dCcgdHlwZT0neG1sUGFyc2VyQ3R4dFB0cicgaW5mbz0ndGhlIHBhcnNlciBjb250ZXh0Jy8+CiAgICAgICA8YXJnIG5hbWU9J2hhbmRsZXInIHR5cGU9J3htbENoYXJFbmNvZGluZ0hhbmRsZXJQdHInIGluZm89J3RoZSBlbmNvZGluZyBoYW5kbGVyJy8+CkBAIC0xNTAzOCw2ICsxNDk0OSwxMyBAQAogICAgICAgPGFyZyBuYW1lPSdmJyB0eXBlPSd4bWxUZXh0UmVhZGVyRXJyb3JGdW5jJyBpbmZvPSd0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCBvbiBlcnJvciBhbmQgd2FybmluZ3MnLz4KICAgICAgIDxhcmcgbmFtZT0nYXJnJyB0eXBlPSd2b2lkIConIGluZm89J2EgdXNlciBhcmd1bWVudCB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbicvPgogICAgIDwvZnVuY3Rpb24+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uJyBmaWxlPSd4bWxyZWFkZXInIG1vZHVsZT0neG1scmVhZGVyJz4KKyAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1JFQURFUl9FTkFCTEVEKTwvY29uZD4KKyAgICAgIDxpbmZvPlNldCB0aGUgbWF4aW11bSBhbXBsaWZpY2F0aW9uIGZhY3Rvci4gU2VlIHhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uLjwvaW5mbz4KKyAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgorICAgICAgPGFyZyBuYW1lPSdyZWFkZXInIHR5cGU9J3htbFRleHRSZWFkZXJQdHInIGluZm89J2FuIFhNTCByZWFkZXInLz4KKyAgICAgIDxhcmcgbmFtZT0nbWF4QW1wbCcgdHlwZT0ndW5zaWduZWQnIGluZm89J21heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3InLz4KKyAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUZXh0UmVhZGVyU2V0UGFyc2VyUHJvcCcgZmlsZT0neG1scmVhZGVyJyBtb2R1bGU9J3htbHJlYWRlcic+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9SRUFERVJfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5DaGFuZ2UgdGhlIHBhcnNlciBwcm9jZXNzaW5nIGJlaGF2aW91ciBieSBjaGFuZ2luZyBzb21lIG9mIGl0cyBpbnRlcm5hbCBwcm9wZXJ0aWVzLiBOb3RlIHRoYXQgc29tZSBwcm9wZXJ0aWVzIGNhbiBvbmx5IGJlIGNoYW5nZWQgYmVmb3JlIGFueSByZWFkIGhhcyBiZWVuIGRvbmUuPC9pbmZvPgpAQCAtMTU2ODcsOTkgKzE1NjA1LDEwMiBAQAogICAgICAgPGFyZyBuYW1lPSdmb3JtYXQnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nZm9ybWF0IHN0cmluZyAoc2VlIHByaW50ZiknLz4KICAgICAgIDxhcmcgbmFtZT0nYXJncHRyJyB0eXBlPSd2YV9saXN0JyBpbmZvPSdwb2ludGVyIHRvIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lJyBmaWxlPSd0cmVlJyBtb2R1bGU9J2dsb2JhbHMnPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lJyBpbmZvPScnLz4KICAgICAgIDxhcmcgbmFtZT0ndicgdHlwZT0neG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZScgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkRlZmF1bHRCdWZmZXJTaXplJyBmaWxlPSd0cmVlJyBtb2R1bGU9J2dsb2JhbHMnPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0JyBmaWxlPSd0cmVlJyBtb2R1bGU9J2dsb2JhbHMnPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMnIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSdmdW5jJyB0eXBlPSd4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMnIGluZm89JycvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZScgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCcgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCcgZmlsZT0neG1sc2F2ZScgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKTwvY29uZD4KICAgICAgIDxpbmZvPjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScnLz4KICAgICAgIDxhcmcgbmFtZT0ndicgdHlwZT0naW50JyBpbmZvPScnLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlJyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZScgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZScgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J2dsb2JhbHMnPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCcgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0JyBmaWxlPSd4bWxJTycgbW9kdWxlPSdnbG9iYWxzJz4KICAgICAgIDxpbmZvPjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJyBpbmZvPScnLz4KICAgICAgIDxhcmcgbmFtZT0nZnVuYycgdHlwZT0neG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jJyBpbmZvPScnLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzJyBmaWxlPSdnbG9iYWxzJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0JyBmaWxlPSd4bWxJTycgbW9kdWxlPSdnbG9iYWxzJz4KICAgICAgIDxpbmZvPjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMnIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSdmdW5jJyB0eXBlPSd4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYycgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlJyBmaWxlPSdwYXJzZXInIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2ludCcgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmUmVnaXN0ZXJOb2RlRGVmYXVsdCcgZmlsZT0ndHJlZScgbW9kdWxlPSdnbG9iYWxzJz4KICAgICAgIDxpbmZvPjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sUmVnaXN0ZXJOb2RlRnVuYycgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J2Z1bmMnIHR5cGU9J3htbFJlZ2lzdGVyTm9kZUZ1bmMnIGluZm89JycvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlNhdmVOb0VtcHR5VGFncycgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzJyBmaWxlPSd4bWxzYXZlJyBtb2R1bGU9J2dsb2JhbHMnPgorICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpPC9jb25kPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMnIGZpbGU9J3htbGVycm9yJyBtb2R1bGU9J2dsb2JhbHMnPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSd2b2lkJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eCcgdHlwZT0ndm9pZCAqJyBpbmZvPScnLz4KICAgICAgIDxhcmcgbmFtZT0naGFuZGxlcicgdHlwZT0neG1sR2VuZXJpY0Vycm9yRnVuYycgaW5mbz0nJy8+CiAgICAgPC9mdW5jdGlvbj4KLSAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYycgZmlsZT0nZ2xvYmFscycgbW9kdWxlPSdnbG9iYWxzJz4KKyAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYycgZmlsZT0neG1sZXJyb3InIG1vZHVsZT0nZ2xvYmFscyc+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J3ZvaWQnLz4KICAgICAgIDxhcmcgbmFtZT0nY3R4JyB0eXBlPSd2b2lkIConIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSdoYW5kbGVyJyB0eXBlPSd4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jJyBpbmZvPScnLz4KICAgICA8L2Z1bmN0aW9uPgotICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxUaHJEZWZTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZScgZmlsZT0ncGFyc2VyJyBtb2R1bGU9J2dsb2JhbHMnPgogICAgICAgPGluZm8+PC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JycvPgogICAgICAgPGFyZyBuYW1lPSd2JyB0eXBlPSdpbnQnIGluZm89JycvPgogICAgIDwvZnVuY3Rpb24+Ci0gICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlRyZWVJbmRlbnRTdHJpbmcnIGZpbGU9J2dsb2JhbHMnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFRockRlZlRyZWVJbmRlbnRTdHJpbmcnIGZpbGU9J3htbHNhdmUnIG1vZHVsZT0nZ2xvYmFscyc+CisgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9PVVRQVVRfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz48L2luZm8+CiAgICAgICA8cmV0dXJuIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nJy8+CiAgICAgICA8YXJnIG5hbWU9J3YnIHR5cGU9J2NvbnN0IGNoYXIgKicgaW5mbz0nJy8+CkBAIC0xNjc4OCw3ICsxNjcwOSw3IEBACiAgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSd0aGUgc3RyaW5nIG9mIHRoZSBVUkkgdG8gZXNjYXBlJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVVJJRXNjYXBlU3RyJyBmaWxlPSd1cmknIG1vZHVsZT0ndXJpJz4KLSAgICAgIDxpbmZvPlRoaXMgcm91dGluZSBlc2NhcGVzIGEgc3RyaW5nIHRvIGhleCwgaWdub3JpbmcgcmVzZXJ2ZWQgY2hhcmFjdGVycyAoYS16KSBhbmQgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGV4Y2VwdGlvbiBsaXN0LjwvaW5mbz4KKyAgICAgIDxpbmZvPlRoaXMgcm91dGluZSBlc2NhcGVzIGEgc3RyaW5nIHRvIGhleCwgaWdub3JpbmcgcmVzZXJ2ZWQgY2hhcmFjdGVycyAoYS16LCBBLVosIDAtOSwgJnF1b3Q7QC1fLiF+KiZhcG9zOygpJnF1b3Q7KSBhbmQgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGV4Y2VwdGlvbiBsaXN0LjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0neG1sQ2hhciAqJyBpbmZvPSdhIG5ldyBlc2NhcGVkIHN0cmluZyBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuJy8+CiAgICAgICA8YXJnIG5hbWU9J3N0cicgdHlwZT0nY29uc3QgeG1sQ2hhciAqJyBpbmZvPSdzdHJpbmcgdG8gZXNjYXBlJy8+CiAgICAgICA8YXJnIG5hbWU9J2xpc3QnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0nZXhjZXB0aW9uIGxpc3Qgc3RyaW5nIG9mIGNoYXJzIG5vdCB0byBlc2NhcGUnLz4KQEAgLTE2OTY1LDcgKzE2ODg2LDcgQEAKICAgICAgIDxyZXR1cm4gdHlwZT0naW50JyBpbmZvPScxIGlmIHZhbGlkIG9yIDAgb3RoZXJ3aXNlJy8+CiAgICAgICA8YXJnIG5hbWU9J2N0eHQnIHR5cGU9J3htbFZhbGlkQ3R4dFB0cicgaW5mbz0ndGhlIHZhbGlkYXRpb24gY29udGV4dCcvPgogICAgICAgPGFyZyBuYW1lPSdkb2MnIHR5cGU9J3htbERvY1B0cicgaW5mbz0nYSBkb2N1bWVudCBpbnN0YW5jZScvPgotICAgICAgPGFyZyBuYW1lPSdlbGVtJyB0eXBlPSd4bWxOb2RlUHRyJyBpbmZvPSdhbiBlbGVtZW50IGluc3RhbmNlJy8+CisgICAgICA8YXJnIG5hbWU9J3Jvb3QnIHR5cGU9J3htbE5vZGVQdHInIGluZm89J2FuIGVsZW1lbnQgaW5zdGFuY2UnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxWYWxpZGF0ZUVsZW1lbnREZWNsJyBmaWxlPSd2YWxpZCcgbW9kdWxlPSd2YWxpZCc+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9WQUxJRF9FTkFCTEVEKTwvY29uZD4KQEAgLTE2OTc2LDcgKzE2ODk3LDYgQEAKICAgICAgIDxhcmcgbmFtZT0nZWxlbScgdHlwZT0neG1sRWxlbWVudFB0cicgaW5mbz0nYW4gZWxlbWVudCBkZWZpbml0aW9uJy8+CiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sVmFsaWRhdGVOQ05hbWUnIGZpbGU9J3RyZWUnIG1vZHVsZT0ndHJlZSc+Ci0gICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfREVCVUdfRU5BQkxFRCkgfHwgZGVmaW5lZCAoTElCWE1MX0hUTUxfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9MRUdBQ1lfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5DaGVjayB0aGF0IGEgdmFsdWUgY29uZm9ybXMgdG8gdGhlIGxleGljYWwgc3BhY2Ugb2YgTkNOYW1lPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzAgaWYgdGhpcyB2YWxpZGF0ZXMsIGEgcG9zaXRpdmUgZXJyb3IgY29kZSBudW1iZXIgb3RoZXJ3aXNlIGFuZCAtMSBpbiBjYXNlIG9mIGludGVybmFsIG9yIEFQSSBlcnJvci4nLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsdWUnIHR5cGU9J2NvbnN0IHhtbENoYXIgKicgaW5mbz0ndGhlIHZhbHVlIHRvIGNoZWNrJy8+CkBAIC0xNzU4Niw3ICsxNzUwNiw3IEBACiAgICAgPC9mdW5jdGlvbj4KICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sWFBhdGhJbml0JyBmaWxlPSd4cGF0aCcgbW9kdWxlPSd4cGF0aCc+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9YUEFUSF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+REVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvIGluaXRpYWxpemUgdGhlIGxpYnJhcnkuICBJbml0aWFsaXplIHRoZSBYUGF0aCBlbnZpcm9ubWVudDwvaW5mbz4KKyAgICAgIDxpbmZvPkRFUFJFQ0FURUQ6IEFsaWFzIGZvciB4bWxJbml0UGFyc2VyLjwvaW5mbz4KICAgICAgIDxyZXR1cm4gdHlwZT0ndm9pZCcvPgogICAgIDwvZnVuY3Rpb24+CiAgICAgPGZ1bmN0aW9uIG5hbWU9J3htbFhQYXRoSW50ZXJzZWN0aW9uJyBmaWxlPSd4cGF0aEludGVybmFscycgbW9kdWxlPSd4cGF0aCc+CkBAIC0xNzU5OCwxMyArMTc1MTgsMTMgQEAKICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxYUGF0aElzSW5mJyBmaWxlPSd4cGF0aCcgbW9kdWxlPSd4cGF0aCc+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9YUEFUSF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPGluZm8+Q2hlY2tzIHdoZXRoZXIgYSBkb3VibGUgaXMgYW4gaW5maW5pdHkuPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzEgaWYgdGhlIHZhbHVlIGlzICtJbmZpbml0ZSwgLTEgaWYgLUluZmluaXRlLCAwIG90aGVyd2lzZScvPgogICAgICAgPGFyZyBuYW1lPSd2YWwnIHR5cGU9J2RvdWJsZScgaW5mbz0nYSBkb3VibGUgdmFsdWUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxYUGF0aElzTmFOJyBmaWxlPSd4cGF0aCcgbW9kdWxlPSd4cGF0aCc+CiAgICAgICA8Y29uZD5kZWZpbmVkKExJQlhNTF9YUEFUSF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpPC9jb25kPgotICAgICAgPGluZm8+PC9pbmZvPgorICAgICAgPGluZm8+Q2hlY2tzIHdoZXRoZXIgYSBkb3VibGUgaXMgYSBOYU4uPC9pbmZvPgogICAgICAgPHJldHVybiB0eXBlPSdpbnQnIGluZm89JzEgaWYgdGhlIHZhbHVlIGlzIGEgTmFOLCAwIG90aGVyd2lzZScvPgogICAgICAgPGFyZyBuYW1lPSd2YWwnIHR5cGU9J2RvdWJsZScgaW5mbz0nYSBkb3VibGUgdmFsdWUnLz4KICAgICA8L2Z1bmN0aW9uPgpAQCAtMTc4ODcsNyArMTc4MDcsNyBAQAogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxYUGF0aE5vZGVTZXRNZXJnZScgZmlsZT0neHBhdGhJbnRlcm5hbHMnIG1vZHVsZT0neHBhdGgnPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfWFBBVEhfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5NZXJnZXMgdHdvIG5vZGVzZXRzLCBhbGwgbm9kZXMgZnJvbSBAdmFsMiBhcmUgYWRkZWQgdG8gQHZhbDEgaWYgQHZhbDEgaXMgTlVMTCwgYSBuZXcgc2V0IGlzIGNyZWF0ZWQgYW5kIGNvcGllZCBmcm9tIEB2YWwyPC9pbmZvPgotICAgICAgPHJldHVybiB0eXBlPSd4bWxOb2RlU2V0UHRyJyBpbmZvPSdAdmFsMSBvbmNlIGV4dGVuZGVkIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4nLz4KKyAgICAgIDxyZXR1cm4gdHlwZT0neG1sTm9kZVNldFB0cicgaW5mbz0nQHZhbDEgb25jZSBleHRlbmRlZCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuICBGcmVlcyBAdmFsMSBpbiBjYXNlIG9mIGVycm9yLicvPgogICAgICAgPGFyZyBuYW1lPSd2YWwxJyB0eXBlPSd4bWxOb2RlU2V0UHRyJyBpbmZvPSd0aGUgZmlyc3QgTm9kZVNldCBvciBOVUxMJy8+CiAgICAgICA8YXJnIG5hbWU9J3ZhbDInIHR5cGU9J3htbE5vZGVTZXRQdHInIGluZm89J3RoZSBzZWNvbmQgTm9kZVNldCcvPgogICAgIDwvZnVuY3Rpb24+CkBAIC0xODI0OCwxMyArMTgxNjgsMTMgQEAKICAgICA8ZnVuY3Rpb24gbmFtZT0neG1sWFBhdGhXcmFwTm9kZVNldCcgZmlsZT0neHBhdGhJbnRlcm5hbHMnIG1vZHVsZT0neHBhdGgnPgogICAgICAgPGNvbmQ+ZGVmaW5lZChMSUJYTUxfWFBBVEhfRU5BQkxFRCk8L2NvbmQ+CiAgICAgICA8aW5mbz5XcmFwIHRoZSBOb2Rlc2V0IEB2YWwgaW4gYSBuZXcgeG1sWFBhdGhPYmplY3RQdHI8L2luZm8+Ci0gICAgICA8cmV0dXJuIHR5cGU9J3htbFhQYXRoT2JqZWN0UHRyJyBpbmZvPSd0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuJy8+CisgICAgICA8cmV0dXJuIHR5cGU9J3htbFhQYXRoT2JqZWN0UHRyJyBpbmZvPSd0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuICBJbiBjYXNlIG9mIGVycm9yIHRoZSBub2RlIHNldCBpcyBkZXN0cm95ZWQgYW5kIE5VTEwgaXMgcmV0dXJuZWQuJy8+CiAgICAgICA8YXJnIG5hbWU9J3ZhbCcgdHlwZT0neG1sTm9kZVNldFB0cicgaW5mbz0ndGhlIE5vZGVQdHIgdmFsdWUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxYUGF0aFdyYXBTdHJpbmcnIGZpbGU9J3hwYXRoSW50ZXJuYWxzJyBtb2R1bGU9J3hwYXRoJz4KICAgICAgIDxjb25kPmRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpPC9jb25kPgogICAgICAgPGluZm8+V3JhcHMgdGhlIEB2YWwgc3RyaW5nIGludG8gYW4gWFBhdGggb2JqZWN0LjwvaW5mbz4KLSAgICAgIDxyZXR1cm4gdHlwZT0neG1sWFBhdGhPYmplY3RQdHInIGluZm89J3RoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4nLz4KKyAgICAgIDxyZXR1cm4gdHlwZT0neG1sWFBhdGhPYmplY3RQdHInIGluZm89J3RoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4gIEZyZWVzIEB2YWwgaW4gY2FzZSBvZiBlcnJvci4nLz4KICAgICAgIDxhcmcgbmFtZT0ndmFsJyB0eXBlPSd4bWxDaGFyIConIGluZm89J3RoZSB4bWxDaGFyICogdmFsdWUnLz4KICAgICA8L2Z1bmN0aW9uPgogICAgIDxmdW5jdGlvbiBuYW1lPSd4bWxYUGF0aGVycm9yJyBmaWxlPSd4cGF0aEludGVybmFscycgbW9kdWxlPSd4cGF0aCc+CmRpZmYgLS1naXQgYS9kb2Mvc3ltYm9scy54bWwgYi9kb2Mvc3ltYm9scy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNjY3ZTAuLjAwMDAwMDAKLS0tIGEvZG9jL3N5bWJvbHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3NCArMCwwIEBACi08IS0tIFRoaXMgZmlsZSBkZXNjcmliZXMgYWxsIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludHMgZnJvbSB0aGUKLSAgICAgbGlicmFyeSwgZ3JvdXBwZWQgYnkgcmVsZWFzZSB3aXRoIHRoZSBmaXJzdCByZWxlYXNlIGJlaW5nIDIuNC4zMAotICAgICBBZGQgbmV3IGV4cG9ydGVkIGVudHJ5IHBvaW50cyBhdCB0aGUgZW5kLCB0aGlzIHdpbGwgYmUgdXNlZCB0bwotICAgICBnZW5lcmF0ZSBsaWJ4bWwyLnN5bXMgdGhlIGRlZmluaXRpb24gb2YgZXhwb3J0ZWQgc3ltYm9scyBmcm9tCi0gICAgIHNoYXJlZCBsaWJyYXJpZXMKLSAgLS0+Ci08c3ltYm9scz4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi40LjMwIj4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxCb29sVG9UZXh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sRGVidWdEdW1wQXR0cjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbERlYnVnRHVtcEF0dHJMaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sRGVidWdEdW1wRFREPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sRGVidWdEdW1wRG9jdW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxEZWJ1Z0R1bXBEb2N1bWVudEhlYWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxEZWJ1Z0R1bXBFbnRpdGllczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbERlYnVnRHVtcE5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxEZWJ1Z0R1bXBOb2RlTGlzdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbERlYnVnRHVtcE9uZU5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxEZWJ1Z0R1bXBTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxMc0NvdW50Tm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbExzT25lTm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbFNoZWxsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sU2hlbGxCYXNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sU2hlbGxDYXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxTaGVsbERpcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbFNoZWxsRHU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxTaGVsbExpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxTaGVsbExvYWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxTaGVsbFByaW50Tm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGVidWdYTUwiPnhtbFNoZWxsUHJpbnRYUGF0aEVycm9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sU2hlbGxQcmludFhQYXRoUmVzdWx0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sU2hlbGxQd2Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxTaGVsbFNhdmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxTaGVsbFZhbGlkYXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkZWJ1Z1hNTCI+eG1sU2hlbGxXcml0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBvaW50ZXIiPnhtbFhQdHJCdWlsZE5vZGVMaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ckV2YWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyRXZhbFJhbmdlUHJlZGljYXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ckZyZWVMb2NhdGlvblNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBvaW50ZXIiPnhtbFhQdHJMb2NhdGlvblNldEFkZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBvaW50ZXIiPnhtbFhQdHJMb2NhdGlvblNldENyZWF0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBvaW50ZXIiPnhtbFhQdHJMb2NhdGlvblNldERlbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBvaW50ZXIiPnhtbFhQdHJMb2NhdGlvblNldE1lcmdlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ckxvY2F0aW9uU2V0UmVtb3ZlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ck5ld0NvbGxhcHNlZFJhbmdlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ck5ld0NvbnRleHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyTmV3TG9jYXRpb25TZXROb2RlU2V0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ck5ld0xvY2F0aW9uU2V0Tm9kZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyTmV3UmFuZ2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyTmV3UmFuZ2VOb2RlT2JqZWN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ck5ld1JhbmdlTm9kZVBvaW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0ck5ld1JhbmdlTm9kZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyTmV3UmFuZ2VQb2ludE5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyTmV3UmFuZ2VQb2ludHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Inhwb2ludGVyIj54bWxYUHRyUmFuZ2VUb0Z1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cG9pbnRlciI+eG1sWFB0cldyYXBMb2NhdGlvblNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5hdHRyaWJ1dGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+YXR0cmlidXRlRGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5jZGF0YUJsb2NrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPmNoYXJhY3RlcnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+Y2hlY2tOYW1lc3BhY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+Y29tbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiIgcmVtb3ZlZD0iMi4xMC4wIj5kb2NiRGVmYXVsdFNBWEhhbmRsZXJJbml0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPmVsZW1lbnREZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPmVuZERvY3VtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPmVuZEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+ZW50aXR5RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5leHRlcm5hbFN1YnNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5nZXRDb2x1bW5OdW1iZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+Z2V0RW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPmdldExpbmVOdW1iZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+Z2V0TmFtZXNwYWNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPmdldFBhcmFtZXRlckVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5nZXRQdWJsaWNJZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5nZXRTeXN0ZW1JZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5nbG9iYWxOYW1lc3BhY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+aGFzRXh0ZXJuYWxTdWJzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+aGFzSW50ZXJuYWxTdWJzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPmh0bWxEZWZhdWx0U0FYSGFuZGxlckluaXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+aWdub3JhYmxlV2hpdGVzcGFjZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIiByZW1vdmVkPSIyLjEwLjAiPmluaXRkb2NiRGVmYXVsdFNBWEhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+aW5pdGh0bWxEZWZhdWx0U0FYSGFuZGxlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5pbml0eG1sRGVmYXVsdFNBWEhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+aW50ZXJuYWxTdWJzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+aXNTdGFuZGFsb25lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPm5hbWVzcGFjZURlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+bm90YXRpb25EZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPnByb2Nlc3NpbmdJbnN0cnVjdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5yZWZlcmVuY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+cmVzb2x2ZUVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYIj5zZXREb2N1bWVudExvY2F0b3I8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+c2V0TmFtZXNwYWNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPnN0YXJ0RG9jdW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWCI+c3RhcnRFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgiPnVucGFyc2VkRW50aXR5RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPmh0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj5odG1sSW5pdEF1dG9DbG9zZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj5pbnB1dFBvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj5pbnB1dFB1c2g8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+bmFtZVBvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj5uYW1lUHVzaDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj5ub2RlUG9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPm5vZGVQdXNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbENoZWNrTGFuZ3VhZ2VJRDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxDb3B5Q2hhcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxDb3B5Q2hhck11bHRpQnl0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxDcmVhdGVFbnRpdHlQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbENyZWF0ZUZpbGVQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sQ3VycmVudENoYXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sRGVjb2RlRW50aXRpZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sRnJlZUlucHV0U3RyZWFtPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbEhhbmRsZUVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNCYXNlQ2hhcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNCbGFuazwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNDaGFyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjaHZhbGlkIj54bWxJc0NvbWJpbmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNEaWdpdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNFeHRlbmRlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNJZGVvZ3JhcGhpYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxJc0xldHRlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNQdWJpZENoYXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sTmFtZXNwYWNlUGFyc2VOQ05hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sTmFtZXNwYWNlUGFyc2VOU0RlZjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxOYW1lc3BhY2VQYXJzZVFOYW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbE5ld0VudGl0eUlucHV0U3RyZWFtPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbE5ld0lucHV0RnJvbUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sTmV3SW5wdXRTdHJlYW08L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sTmV3UGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxOZXdTdHJpbmdJbnB1dFN0cmVhbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxOZXh0Q2hhcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZUF0dFZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlQXR0cmlidXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlQXR0cmlidXRlTGlzdERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VBdHRyaWJ1dGVUeXBlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlQ0RTZWN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlQ2hhckRhdGE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VDaGFyUmVmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlQ29tbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZUNvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VEZWZhdWx0RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZURvY1R5cGVEZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZUVsZW1lbnRDaGlsZHJlbkNvbnRlbnREZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlRWxlbWVudENvbnRlbnREZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlRWxlbWVudERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VFbGVtZW50TWl4ZWRDb250ZW50RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZUVuY05hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VFbmNvZGluZ0RlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VFbmRUYWc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VFbnRpdHlEZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlRW50aXR5UmVmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlRW50aXR5VmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VFbnVtZXJhdGVkVHlwZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZUVudW1lcmF0aW9uVHlwZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZUV4dGVybmFsSUQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VFeHRlcm5hbFN1YnNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZU1hcmt1cERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VNaXNjPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlTmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZU5hbWVzcGFjZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZU5tdG9rZW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VOb3RhdGlvbkRlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VOb3RhdGlvblR5cGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VQRVJlZmVyZW5jZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZVBJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlUElUYXJnZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VQdWJpZExpdGVyYWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VRdW90ZWRTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VSZWZlcmVuY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VTRERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VTdGFydFRhZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZVN5c3RlbUxpdGVyYWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VUZXh0RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZVZlcnNpb25JbmZvPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlVmVyc2lvbk51bTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxQYXJzZVhNTERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VySGFuZGxlUEVSZWZlcmVuY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sUGFyc2VySGFuZGxlUmVmZXJlbmNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlcklucHV0U2hyaW5rPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBvcElucHV0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFB1c2hJbnB1dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTY2FuTmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTZXRFbnRpdHlSZWZlcmVuY2VGdW5jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFNraXBCbGFua0NoYXJzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFNwbGl0UU5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sU3RyaW5nQ29tbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTdHJpbmdDdXJyZW50Q2hhcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTdHJpbmdEZWNvZGVFbnRpdGllczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTdHJpbmdUZXh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFN0cmluZ1RleHROb2VuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTd2l0Y2hFbmNvZGluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VySW50ZXJuYWxzIj54bWxTd2l0Y2hUb0VuY29kaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjMTRuIj54bWxDMTRORG9jRHVtcE1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iYzE0biI+eG1sQzE0TkRvY1NhdmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImMxNG4iPnhtbEMxNE5Eb2NTYXZlVG88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImMxNG4iPnhtbEMxNE5FeGVjdXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxBQ2F0YWxvZ0FkZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQUNhdGFsb2dEdW1wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxBQ2F0YWxvZ1JlbW92ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQUNhdGFsb2dSZXNvbHZlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxBQ2F0YWxvZ1Jlc29sdmVQdWJsaWM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbEFDYXRhbG9nUmVzb2x2ZVN5c3RlbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQUNhdGFsb2dSZXNvbHZlVVJJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxDYXRhbG9nQWRkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxDYXRhbG9nQWRkTG9jYWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dDbGVhbnVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxDYXRhbG9nQ29udmVydDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQ2F0YWxvZ0R1bXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dGcmVlTG9jYWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dHZXREZWZhdWx0czwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQ2F0YWxvZ0dldFB1YmxpYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQ2F0YWxvZ0dldFN5c3RlbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQ2F0YWxvZ0lzRW1wdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dMb2NhbFJlc29sdmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dMb2NhbFJlc29sdmVVUkk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dSZW1vdmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dSZXNvbHZlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxDYXRhbG9nUmVzb2x2ZVB1YmxpYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sQ2F0YWxvZ1Jlc29sdmVTeXN0ZW08L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dSZXNvbHZlVVJJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxDYXRhbG9nU2V0RGVidWc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENhdGFsb2dTZXREZWZhdWx0UHJlZmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxDYXRhbG9nU2V0RGVmYXVsdHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbENvbnZlcnRTR01MQ2F0YWxvZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2F0YWxvZyI+eG1sRnJlZUNhdGFsb2c8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbEluaXRpYWxpemVDYXRhbG9nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxMb2FkQUNhdGFsb2c8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbExvYWRDYXRhbG9nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxMb2FkQ2F0YWxvZ3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNhdGFsb2ciPnhtbExvYWRTR01MU3VwZXJDYXRhbG9nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxOZXdDYXRhbG9nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjYXRhbG9nIj54bWxQYXJzZUNhdGFsb2dGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+dmFsdWVQb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj52YWx1ZVB1c2g8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aEFkZFZhbHVlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoQm9vbGVhbkZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhDZWlsaW5nRnVuY3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aENvbXBhcmVWYWx1ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aENvbmNhdEZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhDb250YWluc0Z1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhDb3VudEZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhEZWJ1Z0R1bXBDb21wRXhwcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRGVidWdEdW1wT2JqZWN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhEaWZmZXJlbmNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhEaXN0aW5jdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRGlzdGluY3RTb3J0ZWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aERpdlZhbHVlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRXF1YWxWYWx1ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aEV2YWxFeHByPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhFdmFsdWF0ZVByZWRpY2F0ZVJlc3VsdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRmFsc2VGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRmxvb3JGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRnJlZVBhcnNlckNvbnRleHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aEZ1bmN0aW9uTG9va3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhGdW5jdGlvbkxvb2t1cE5TPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhIYXNTYW1lTm9kZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aElkRnVuY3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aEludGVyc2VjdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoSXNOb2RlVHlwZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTGFuZ0Z1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhMYXN0RnVuY3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aExlYWRpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aExlYWRpbmdTb3J0ZWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aExvY2FsTmFtZUZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhNb2RWYWx1ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE11bHRWYWx1ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5hbWVzcGFjZVVSSUZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXdCb29sZWFuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXdDU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXdGbG9hdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV3Tm9kZVNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV3Tm9kZVNldExpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5ld1BhcnNlckNvbnRleHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5ld1N0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV3VmFsdWVUcmVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXh0QW5jZXN0b3I8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5leHRBbmNlc3Rvck9yU2VsZjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV4dEF0dHJpYnV0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV4dENoaWxkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXh0RGVzY2VuZGFudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV4dERlc2NlbmRhbnRPclNlbGY8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5leHRGb2xsb3dpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5leHRGb2xsb3dpbmdTaWJsaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXh0TmFtZXNwYWNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXh0UGFyZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXh0UHJlY2VkaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOZXh0UHJlY2VkaW5nU2libGluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTmV4dFNlbGY8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5vZGVMZWFkaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOb2RlTGVhZGluZ1NvcnRlZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTm9kZVNldEFkZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTm9kZVNldEFkZE5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOb2RlU2V0QWRkVW5pcXVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOb2RlU2V0Q29udGFpbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5vZGVTZXREZWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5vZGVTZXRGcmVlTnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5vZGVTZXRNZXJnZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTm9kZVNldFJlbW92ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTm9kZVNldFNvcnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5vZGVUcmFpbGluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTm9kZVRyYWlsaW5nU29ydGVkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOb3JtYWxpemVGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTm90RXF1YWxWYWx1ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aE5vdEZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhOc0xvb2t1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoTnVtYmVyRnVuY3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFBhcnNlTkNOYW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhQYXJzZU5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFBvcEJvb2xlYW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFBvcEV4dGVybmFsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhQb3BOb2RlU2V0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhQb3BOdW1iZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFBvcFN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUG9zaXRpb25GdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUmVnaXN0ZXJBbGxGdW5jdGlvbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFJlZ2lzdGVyRnVuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUmVnaXN0ZXJGdW5jTG9va3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhSZWdpc3RlckZ1bmNOUzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUmVnaXN0ZXJOczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUmVnaXN0ZXJWYXJpYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUmVnaXN0ZXJWYXJpYWJsZUxvb2t1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUmVnaXN0ZXJWYXJpYWJsZU5TPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhSZWdpc3RlcmVkRnVuY3NDbGVhbnVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhSZWdpc3RlcmVkTnNDbGVhbnVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhSZWdpc3RlcmVkVmFyaWFibGVzQ2xlYW51cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUm9vdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoUm91bmRGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoU3RhcnRzV2l0aEZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhTdHJpbmdFdmFsTnVtYmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhTdHJpbmdGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoU3RyaW5nTGVuZ3RoRnVuY3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFN1YlZhbHVlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoU3Vic3RyaW5nQWZ0ZXJGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoU3Vic3RyaW5nQmVmb3JlRnVuY3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFN1YnN0cmluZ0Z1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhTdW1GdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoVHJhaWxpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFRyYWlsaW5nU29ydGVkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhUcmFuc2xhdGVGdW5jdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoVHJ1ZUZ1bmN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhWYWx1ZUZsaXBTaWduPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aEludGVybmFscyI+eG1sWFBhdGhWYXJpYWJsZUxvb2t1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoVmFyaWFibGVMb29rdXBOUzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoV3JhcENTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFdyYXBFeHRlcm5hbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoV3JhcE5vZGVTZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aFdyYXBTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoSW50ZXJuYWxzIj54bWxYUGF0aGVycm9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxhdXRvbWF0YSI+eG1sQXV0b21hdGFDb21waWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxhdXRvbWF0YSI+eG1sQXV0b21hdGFHZXRJbml0U3RhdGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGF1dG9tYXRhIj54bWxBdXRvbWF0YUlzRGV0ZXJtaW5pc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGF1dG9tYXRhIj54bWxBdXRvbWF0YU5ld0FsbFRyYW5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxhdXRvbWF0YSI+eG1sQXV0b21hdGFOZXdDb3VudFRyYW5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxhdXRvbWF0YSI+eG1sQXV0b21hdGFOZXdDb3VudGVkVHJhbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGF1dG9tYXRhIj54bWxBdXRvbWF0YU5ld0NvdW50ZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGF1dG9tYXRhIj54bWxBdXRvbWF0YU5ld0NvdW50ZXJUcmFuczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEF1dG9tYXRhTmV3RXBzaWxvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEF1dG9tYXRhTmV3T25jZVRyYW5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxhdXRvbWF0YSI+eG1sQXV0b21hdGFOZXdTdGF0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEF1dG9tYXRhTmV3VHJhbnNpdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEF1dG9tYXRhU2V0RmluYWxTdGF0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEZyZWVBdXRvbWF0YTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbE5ld0F1dG9tYXRhPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1MdHJlZSI+aHRtbERvY0NvbnRlbnREdW1wRm9ybWF0T3V0cHV0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1MdHJlZSI+aHRtbERvY0NvbnRlbnREdW1wT3V0cHV0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1MdHJlZSI+aHRtbERvY0R1bXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUx0cmVlIj5odG1sRG9jRHVtcE1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxHZXRNZXRhRW5jb2Rpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUx0cmVlIj5odG1sSXNCb29sZWFuQXR0cjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxOZXdEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUx0cmVlIj5odG1sTmV3RG9jTm9EdEQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUx0cmVlIj5odG1sTm9kZUR1bXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUx0cmVlIj5odG1sTm9kZUR1bXBGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1MdHJlZSI+aHRtbE5vZGVEdW1wRmlsZUZvcm1hdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxOb2RlRHVtcEZvcm1hdE91dHB1dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxOb2RlRHVtcE91dHB1dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxTYXZlRmlsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxTYXZlRmlsZUVuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxTYXZlRmlsZUZvcm1hdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxTZXRNZXRhRW5jb2Rpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9mdHAiPnhtbE5hbm9GVFBDaGVja1Jlc3BvbnNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQQ2xlYW51cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUENsb3NlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQQ2xvc2VDb25uZWN0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQQ29ubmVjdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUENvbm5lY3RUbzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUEN3ZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUEZyZWVDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQR2V0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQR2V0Q29ubmVjdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUEdldFJlc3BvbnNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQR2V0U29ja2V0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQSW5pdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUExpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9mdHAiPnhtbE5hbm9GVFBOZXdDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQT3Blbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUFByb3h5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vZnRwIj54bWxOYW5vRlRQUXVpdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2Z0cCI+eG1sTmFub0ZUUFJlYWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9mdHAiPnhtbE5hbm9GVFBTY2FuUHJveHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9mdHAiPnhtbE5hbm9GVFBVcGRhdGVVUkw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkRPQ0JwYXJzZXIiIHJlbW92ZWQ9IjIuMTAuMCI+ZG9jYkNyZWF0ZUZpbGVQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJET0NCcGFyc2VyIiByZW1vdmVkPSIyLjEwLjAiPmRvY2JDcmVhdGVQdXNoUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iRE9DQnBhcnNlciIgcmVtb3ZlZD0iMi4xMC4wIj5kb2NiRW5jb2RlRW50aXRpZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkRPQ0JwYXJzZXIiIHJlbW92ZWQ9IjIuMTAuMCI+ZG9jYkZyZWVQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJET0NCcGFyc2VyIiByZW1vdmVkPSIyLjEwLjAiPmRvY2JQYXJzZUNodW5rPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJET0NCcGFyc2VyIiByZW1vdmVkPSIyLjEwLjAiPmRvY2JQYXJzZURvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iRE9DQnBhcnNlciIgcmVtb3ZlZD0iMi4xMC4wIj5kb2NiUGFyc2VEb2N1bWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iRE9DQnBhcnNlciIgcmVtb3ZlZD0iMi4xMC4wIj5kb2NiUGFyc2VGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJET0NCcGFyc2VyIiByZW1vdmVkPSIyLjEwLjAiPmRvY2JTQVhQYXJzZURvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iRE9DQnBhcnNlciIgcmVtb3ZlZD0iMi4xMC4wIj5kb2NiU0FYUGFyc2VGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDYXN0Qm9vbGVhblRvTnVtYmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDYXN0Qm9vbGVhblRvU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDYXN0Tm9kZVNldFRvQm9vbGVhbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdE5vZGVTZXRUb051bWJlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdE5vZGVTZXRUb1N0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdE5vZGVUb051bWJlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdE5vZGVUb1N0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdE51bWJlclRvQm9vbGVhbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdE51bWJlclRvU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDYXN0U3RyaW5nVG9Cb29sZWFuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDYXN0U3RyaW5nVG9OdW1iZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aENhc3RUb0Jvb2xlYW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aENhc3RUb051bWJlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ2FzdFRvU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDbXBOb2Rlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ29tcGlsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ29tcGlsZWRFdmFsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhDb252ZXJ0Qm9vbGVhbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ29udmVydE51bWJlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoQ29udmVydFN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoRXZhbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoRXZhbEV4cHJlc3Npb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aEV2YWxQcmVkaWNhdGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aEZyZWVDb21wRXhwcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoRnJlZUNvbnRleHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aEZyZWVOb2RlU2V0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhGcmVlTm9kZVNldExpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aEZyZWVPYmplY3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aEluaXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aElzSW5mPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhJc05hTjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoTkFOPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhOSU5GPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhOZXdDb250ZXh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhOb2RlU2V0Q3JlYXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhPYmplY3RDb3B5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4cGF0aCI+eG1sWFBhdGhQSU5GPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bGluayI+eGxpbmtHZXREZWZhdWx0RGV0ZWN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bGluayI+eGxpbmtHZXREZWZhdWx0SGFuZGxlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieGxpbmsiPnhsaW5rSXNMaW5rPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bGluayI+eGxpbmtTZXREZWZhdWx0RGV0ZWN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bGluayI+eGxpbmtTZXREZWZhdWx0SGFuZGxlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbEFkZERvY0VudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbEFkZER0ZEVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbENsZWFudXBQcmVkZWZpbmVkRW50aXRpZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVudGl0aWVzIj54bWxDb3B5RW50aXRpZXNUYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbENyZWF0ZUVudGl0aWVzVGFibGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVudGl0aWVzIj54bWxEdW1wRW50aXRpZXNUYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbER1bXBFbnRpdHlEZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbnRpdGllcyI+eG1sRW5jb2RlRW50aXRpZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVudGl0aWVzIj54bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbEVuY29kZVNwZWNpYWxDaGFyczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbEZyZWVFbnRpdGllc1RhYmxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbnRpdGllcyI+eG1sR2V0RG9jRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbnRpdGllcyI+eG1sR2V0RHRkRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbnRpdGllcyI+eG1sR2V0UGFyYW1ldGVyRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbnRpdGllcyI+eG1sR2V0UHJlZGVmaW5lZEVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW50aXRpZXMiPnhtbEluaXRpYWxpemVQcmVkZWZpbmVkRW50aXRpZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhpbmNsdWRlIj54bWxYSW5jbHVkZVByb2Nlc3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpbmtHZXREYXRhPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0QXBwZW5kPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0Q2xlYXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RDb3B5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0Q3JlYXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0RGVsZXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0RHVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0RW1wdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RFbmQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RGcm9udDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibGlzdCI+eG1sTGlzdEluc2VydDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibGlzdCI+eG1sTGlzdE1lcmdlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0UG9wQmFjazwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibGlzdCI+eG1sTGlzdFBvcEZyb250PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0UHVzaEJhY2s8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RQdXNoRnJvbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RSZW1vdmVBbGw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RSZW1vdmVGaXJzdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibGlzdCI+eG1sTGlzdFJlbW92ZUxhc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RSZXZlcnNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0UmV2ZXJzZVNlYXJjaDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibGlzdCI+eG1sTGlzdFJldmVyc2VXYWxrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0U2VhcmNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJsaXN0Ij54bWxMaXN0U2l6ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibGlzdCI+eG1sTGlzdFNvcnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imxpc3QiPnhtbExpc3RXYWxrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxtZW1vcnkiPnhtbEluaXRNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWFsbG9jTG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxtZW1vcnkiPnhtbE1lbURpc3BsYXk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWVtRnJlZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxNZW1HZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWVtTWFsbG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxtZW1vcnkiPnhtbE1lbVJlYWxsb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWVtU2V0dXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWVtU2hvdzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxNZW1TdHJkdXBMb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWVtVXNlZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxNZW1vcnlEdW1wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxtZW1vcnkiPnhtbE1lbW9yeVN0cmR1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxSZWFsbG9jTG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sQWxsb2NPdXRwdXRCdWZmZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxBbGxvY1BhcnNlcklucHV0QnVmZmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sQ2hlY2tGaWxlbmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbENsZWFudXBJbnB1dENhbGxiYWNrczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbENsZWFudXBPdXRwdXRDYWxsYmFja3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxGaWxlQ2xvc2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxGaWxlTWF0Y2g8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxGaWxlT3Blbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbEZpbGVSZWFkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sRnJlZVBhcnNlcklucHV0QnVmZmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sSU9GVFBDbG9zZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbElPRlRQTWF0Y2g8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxJT0ZUUE9wZW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxJT0ZUUFJlYWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxJT0hUVFBDbG9zZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbElPSFRUUE1hdGNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sSU9IVFRQT3Blbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbElPSFRUUE9wZW5XPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sSU9IVFRQUmVhZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbE5vTmV0RXh0ZXJuYWxFbnRpdHlMb2FkZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxOb3JtYWxpemVXaW5kb3dzUGF0aDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbE91dHB1dEJ1ZmZlckNsb3NlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVJTzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbE91dHB1dEJ1ZmZlckZsdXNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sT3V0cHV0QnVmZmVyV3JpdGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxPdXRwdXRCdWZmZXJXcml0ZVN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbFBhcnNlckdldERpcmVjdG9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVJTzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUGFyc2VySW5wdXRCdWZmZXJHcm93PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUGFyc2VySW5wdXRCdWZmZXJSZWFkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUmVnaXN0ZXJEZWZhdWx0SW5wdXRDYWxsYmFja3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxSZWdpc3RlckRlZmF1bHRPdXRwdXRDYWxsYmFja3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx2ZXJzaW9uIj54bWxDaGVja1ZlcnNpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxBZGRBdHRyaWJ1dGVEZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sQWRkRWxlbWVudERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxBZGRJRDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbEFkZE5vdGF0aW9uRGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbEFkZFJlZjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbENvcHlBdHRyaWJ1dGVUYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbENvcHlFbGVtZW50Q29udGVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbENvcHlFbGVtZW50VGFibGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxDb3B5RW51bWVyYXRpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxDb3B5Tm90YXRpb25UYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbENyZWF0ZUVudW1lcmF0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRHVtcEF0dHJpYnV0ZURlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxEdW1wQXR0cmlidXRlVGFibGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxEdW1wRWxlbWVudERlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxEdW1wRWxlbWVudFRhYmxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRHVtcE5vdGF0aW9uRGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbER1bXBOb3RhdGlvblRhYmxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRnJlZUF0dHJpYnV0ZVRhYmxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRnJlZUVsZW1lbnRDb250ZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRnJlZUVsZW1lbnRUYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbEZyZWVFbnVtZXJhdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbEZyZWVJRFRhYmxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRnJlZU5vdGF0aW9uVGFibGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxGcmVlUmVmVGFibGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxHZXREdGRBdHRyRGVzYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbEdldER0ZEVsZW1lbnREZXNjPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sR2V0RHRkTm90YXRpb25EZXNjPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sR2V0RHRkUUF0dHJEZXNjPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sR2V0RHRkUUVsZW1lbnREZXNjPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sR2V0SUQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxHZXRSZWZzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sSXNJRDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbElzTWl4ZWRFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sSXNSZWY8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxOZXdFbGVtZW50Q29udGVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFJlbW92ZUlEPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sUmVtb3ZlUmVmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sU25wcmludGZFbGVtZW50Q29udGVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sU3BsaXRRTmFtZTI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxTcHJpbnRmRWxlbWVudENvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZEJ1aWxkQ29udGVudE1vZGVsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRDdHh0Tm9ybWFsaXplQXR0cmlidXRlVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZEdldFBvdGVudGlhbENoaWxkcmVuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWROb3JtYWxpemVBdHRyaWJ1dGVWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFZhbGlkYXRlQXR0cmlidXRlRGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFZhbGlkYXRlQXR0cmlidXRlVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZGF0ZURvY3VtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVEb2N1bWVudEZpbmFsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVEdGQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZGF0ZUR0ZEZpbmFsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVFbGVtZW50RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFZhbGlkYXRlTmFtZVZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVOYW1lc1ZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVObXRva2VuVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZGF0ZU5tdG9rZW5zVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZGF0ZU5vdGF0aW9uRGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFZhbGlkYXRlTm90YXRpb25Vc2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZGF0ZU9uZUF0dHJpYnV0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFZhbGlkYXRlT25lRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbFZhbGlkYXRlT25lTmFtZXNwYWNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVSb290PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5VVEY4VG9IdG1sPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sQXV0b0Nsb3NlVGFnPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxFbmNvZGVFbnRpdGllczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEVudGl0eUxvb2t1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEVudGl0eVZhbHVlTG9va3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sRnJlZVBhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxIYW5kbGVPbWl0dGVkRWxlbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbElzQXV0b0Nsb3NlZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbElzU2NyaXB0QXR0cmlidXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUGFyc2VDaGFyUmVmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUGFyc2VDaHVuazwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbFBhcnNlRG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUGFyc2VEb2N1bWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbFBhcnNlRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbFBhcnNlRW50aXR5UmVmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUGFyc2VGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sU0FYUGFyc2VEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxTQVhQYXJzZUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxUYWdMb29rdXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sQ2hhclN0cmR1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxDaGFyU3RybmR1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxDbGVhbnVwUGFyc2VyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbENsZWFyTm9kZUluZm9TZXE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ2xlYXJQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbENyZWF0ZURvY1BhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ3JlYXRlSU9QYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEZyZWVQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEdldEV4dGVybmFsRW50aXR5TG9hZGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEdldEZlYXR1cmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sR2V0RmVhdHVyZXNMaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxJT1BhcnNlRFREPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEluaXROb2RlSW5mb1NlcTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxJbml0UGFyc2VyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEluaXRQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEtlZXBCbGFua3NEZWZhdWx0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbExpbmVOdW1iZXJzRGVmYXVsdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxMb2FkRXh0ZXJuYWxFbnRpdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sTmV3SU9JbnB1dFN0cmVhbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3Zlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxQYXJzZUNodW5rPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFBhcnNlQ3R4dEV4dGVybmFsRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFBhcnNlRFREPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFBhcnNlRG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFBhcnNlRG9jdW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VFbnRpdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VFeHRQYXJzZWRFbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VFeHRlcm5hbEVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxQYXJzZUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VyQWRkTm9kZUluZm88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VyRmluZE5vZGVJbmZvPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFBhcnNlckZpbmROb2RlSW5mb0luZGV4PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFBhcnNlcklucHV0R3Jvdzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxQYXJzZXJJbnB1dFJlYWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFJlY292ZXJEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUmVjb3ZlckZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUmVjb3Zlck1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTQVhQYXJzZURURDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTQVhQYXJzZURvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTQVhQYXJzZUVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTQVhQYXJzZUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sU0FYUGFyc2VGaWxlV2l0aERhdGE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sU0FYUGFyc2VNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTQVhVc2VyUGFyc2VGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFNBWFVzZXJQYXJzZU1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTZXRGZWF0dXJlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFNldHVwUGFyc2VyRm9yQnVmZmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFN0b3BQYXJzZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RyRXF1YWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RyY2FzZWNtcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxTdHJjYXNlc3RyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFN0cmNhdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxTdHJjaHI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RyY21wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFN0cmR1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxTdHJsZW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RybmNhc2VjbXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RybmNhdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxTdHJuY21wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFN0cm5kdXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3Ryc3RyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFN0cnN1Yjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbEZyZWVUZXh0UmVhZGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbE5ld1RleHRSZWFkZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sTmV3VGV4dFJlYWRlckZpbGVuYW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJBdHRyaWJ1dGVDb3VudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyQmFzZVVyaTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyRGVwdGg8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckhhc0F0dHJpYnV0ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckhhc1ZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJJc0RlZmF1bHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlcklzRW1wdHlFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJMb2NhbE5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlck5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlck5hbWVzcGFjZVVyaTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyTm9kZVR5cGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlclByZWZpeDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyUXVvdGVDaGFyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJSZWFkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyWG1sTGFuZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyIgcmVtb3ZlZD0iMi4xMC4wIj5kb2NiRGVmYXVsdFNBWEhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPmh0bWxEZWZhdWx0U0FYSGFuZGxlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sRGVmYXVsdFNBWEhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbERlZmF1bHRTQVhMb2NhdG9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbEZyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbEdlbmVyaWNFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sR2VuZXJpY0Vycm9yQ29udGV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sTWFsbG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxNZW1TdHJkdXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFBhcnNlckRlYnVnRW50aXRpZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFBhcnNlclZlcnNpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxSZWFsbG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxTYXZlTm9FbXB0eVRhZ3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVHJlZUluZGVudFN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sQ2xlYW51cFRocmVhZHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRocmVhZHMiPnhtbEZyZWVNdXRleDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sRnJlZVJNdXRleDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sR2V0R2xvYmFsU3RhdGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRocmVhZHMiPnhtbEdldFRocmVhZElkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0aHJlYWRzIj54bWxJbml0VGhyZWFkczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sSXNNYWluVGhyZWFkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0aHJlYWRzIj54bWxMb2NrTGlicmFyeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sTXV0ZXhMb2NrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0aHJlYWRzIj54bWxNdXRleFVubG9jazwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sTmV3TXV0ZXg8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRocmVhZHMiPnhtbE5ld1JNdXRleDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sUk11dGV4TG9jazwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idGhyZWFkcyI+eG1sUk11dGV4VW5sb2NrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0aHJlYWRzIj54bWxVbmxvY2tMaWJyYXJ5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJoYXNoIj54bWxIYXNoQWRkRW50cnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hBZGRFbnRyeTI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hBZGRFbnRyeTM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hDb3B5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJoYXNoIj54bWxIYXNoQ3JlYXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJoYXNoIj54bWxIYXNoRnJlZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaExvb2t1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaExvb2t1cDI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hMb29rdXAzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJoYXNoIj54bWxIYXNoUmVtb3ZlRW50cnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hSZW1vdmVFbnRyeTI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hSZW1vdmVFbnRyeTM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hTY2FuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJoYXNoIj54bWxIYXNoU2NhbjM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hTY2FuRnVsbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaFNjYW5GdWxsMzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaFNpemU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hVcGRhdGVFbnRyeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaFVwZGF0ZUVudHJ5Mjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaFVwZGF0ZUVudHJ5Mzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPmluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbFBhcnNlckVycm9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxlcnJvciI+eG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbFBhcnNlclByaW50RmlsZUluZm88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGVycm9yIj54bWxQYXJzZXJWYWxpZGl0eUVycm9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxlcnJvciI+eG1sUGFyc2VyVmFsaWRpdHlXYXJuaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxlcnJvciI+eG1sUGFyc2VyV2FybmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbFNldEdlbmVyaWNFcnJvckZ1bmM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPm9sZFhNTFdEY29tcGF0aWJpbGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQWRkQ2hpbGQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEFkZENoaWxkTGlzdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQWRkTmV4dFNpYmxpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEFkZFByZXZTaWJsaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxBZGRTaWJsaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZmZXJBZGQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckFkZEhlYWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbEJ1ZmZlckFsbG9jU2NoZW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZmZXJDQ2F0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZmZXJDYXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckNvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckNyZWF0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmZmVyQ3JlYXRlU2l6ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmZmVyRHVtcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmZmVyRW1wdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckZyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckdyb3c8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckxlbmd0aDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmZmVyUmVzaXplPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZmZXJTZXRBbGxvY2F0aW9uU2NoZW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZmZXJTaHJpbms8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlcldyaXRlQ0hBUjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmZmVyV3JpdGVDaGFyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZmZXJXcml0ZVF1b3RlZFN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQ29weURvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQ29weUR0ZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQ29weU5hbWVzcGFjZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQ29weU5hbWVzcGFjZUxpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbENvcHlOb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxDb3B5Tm9kZUxpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbENvcHlQcm9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxDb3B5UHJvcExpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbENyZWF0ZUludFN1YnNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sRGVmYXVsdEJ1ZmZlclNpemU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbERvY0NvcHlOb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NEdW1wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NEdW1wRm9ybWF0TWVtb3J5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NEdW1wRm9ybWF0TWVtb3J5RW5jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NEdW1wTWVtb3J5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NEdW1wTWVtb3J5RW5jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NGb3JtYXREdW1wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxEb2NHZXRSb290RWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sRG9jU2V0Um9vdEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEVsZW1EdW1wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxGcmVlRG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxGcmVlRHRkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxGcmVlTm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sRnJlZU5vZGVMaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxGcmVlTnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEZyZWVOc0xpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEZyZWVQcm9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxGcmVlUHJvcExpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEdldEJ1ZmZlckFsbG9jYXRpb25TY2hlbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEdldENvbXByZXNzTW9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sR2V0RG9jQ29tcHJlc3NNb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxHZXRJbnRTdWJzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEdldExhc3RDaGlsZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sR2V0TGluZU5vPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxHZXROb2RlUGF0aDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sR2V0TnNMaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxHZXROc1Byb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEdldFByb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEhhc05zUHJvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sSGFzUHJvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sSW5kZW50VHJlZU91dHB1dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sSXNCbGFua05vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbElzWEhUTUw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld0NEYXRhQmxvY2s8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld0NoYXJSZWY8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld0NoaWxkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdDb21tZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld0RvY0NvbW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld0RvY0ZyYWdtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdEb2NOb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdEb2NOb2RlRWF0TmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3RG9jUHJvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3RG9jUmF3Tm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3RG9jVGV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3RG9jVGV4dExlbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3RHRkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdHbG9iYWxOczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3Tm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3Tm9kZUVhdE5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld05zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdOc1Byb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld05zUHJvcEVhdE5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld1BJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdQcm9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXdSZWZlcmVuY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld1RleHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5ld1RleHRDaGlsZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3VGV4dExlbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZUFkZENvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5vZGVBZGRDb250ZW50TGVuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOb2RlRHVtcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZUR1bXBPdXRwdXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5vZGVHZXRCYXNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOb2RlR2V0Q29udGVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZUdldExhbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5vZGVHZXRTcGFjZVByZXNlcnZlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOb2RlSXNUZXh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOb2RlTGlzdEdldFJhd1N0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZUxpc3RHZXRTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5vZGVTZXRCYXNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOb2RlU2V0Q29udGVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZVNldENvbnRlbnRMZW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbE5vZGVTZXRMYW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOb2RlU2V0TmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZVNldFNwYWNlUHJlc2VydmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFJlY29uY2lsaWF0ZU5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxSZW1vdmVQcm9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxSZXBsYWNlTm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sU2F2ZUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNhdmVGaWxlRW5jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxTYXZlRmlsZVRvPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxTYXZlRm9ybWF0RmlsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sU2F2ZUZvcm1hdEZpbGVFbmM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNhdmVGb3JtYXRGaWxlVG88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNlYXJjaE5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxTZWFyY2hOc0J5SHJlZjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sU2V0QnVmZmVyQWxsb2NhdGlvblNjaGVtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sU2V0Q29tcHJlc3NNb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxTZXREb2NDb21wcmVzc01vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNldExpc3REb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNldE5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxTZXROc1Byb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNldFByb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFNldFRyZWVEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFN0cmluZ0dldE5vZGVMaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxTdHJpbmdMZW5HZXROb2RlTGlzdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sVGV4dENvbmNhdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sVGV4dE1lcmdlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxVbmxpbmtOb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxVbnNldE5zUHJvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sVW5zZXRQcm9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWdleHAiPnhtbFJlZ0V4ZWNQdXNoU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWdleHAiPnhtbFJlZ0ZyZWVFeGVjQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVnZXhwIj54bWxSZWdGcmVlUmVnZXhwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWdleHAiPnhtbFJlZ05ld0V4ZWNDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWdleHAiPnhtbFJlZ2V4cENvbXBpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlZ2V4cCI+eG1sUmVnZXhwRXhlYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVnZXhwIj54bWxSZWdleHBJc0RldGVybWluaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWdleHAiPnhtbFJlZ2V4cFByaW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vaHR0cCI+eG1sTmFub0hUVFBBdXRoSGVhZGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vaHR0cCI+eG1sTmFub0hUVFBDbGVhbnVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vaHR0cCI+eG1sTmFub0hUVFBDbG9zZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQRmV0Y2g8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9odHRwIj54bWxOYW5vSFRUUEluaXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9odHRwIj54bWxOYW5vSFRUUE1ldGhvZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQTWV0aG9kUmVkaXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9odHRwIj54bWxOYW5vSFRUUE9wZW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9odHRwIj54bWxOYW5vSFRUUE9wZW5SZWRpcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQUmVhZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQUmV0dXJuQ29kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQU2F2ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQU2NhblByb3h5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0FscGhhYmV0aWNQcmVzZW50YXRpb25Gb3Jtczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNBcmFiaWM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQXJhYmljUHJlc2VudGF0aW9uRm9ybXNBPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0FyYWJpY1ByZXNlbnRhdGlvbkZvcm1zQjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNBcm1lbmlhbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNBcnJvd3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQmFzaWNMYXRpbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNCZW5nYWxpPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0Jsb2NrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0Jsb2NrRWxlbWVudHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQm9wb21vZm88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQm9wb21vZm9FeHRlbmRlZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNCb3hEcmF3aW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0JyYWlsbGVQYXR0ZXJuczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNCeXphbnRpbmVNdXNpY2FsU3ltYm9sczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDSktDb21wYXRpYmlsaXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NKS0NvbXBhdGliaWxpdHlGb3Jtczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDSktDb21wYXRpYmlsaXR5SWRlb2dyYXBoczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDSktDb21wYXRpYmlsaXR5SWRlb2dyYXBoc1N1cHBsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ0pLUmFkaWNhbHNTdXBwbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NKS1N5bWJvbHNhbmRQdW5jdHVhdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoc0V4dGVuc2lvbkE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ0pLVW5pZmllZElkZW9ncmFwaHNFeHRlbnNpb25CPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRDPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdENjPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdENmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdENvPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdENzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdEw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0TGw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0TG08L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0TG88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0THQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0THU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0TTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRNYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRNZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRNbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXROPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdE5kPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdE5sPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdE5vPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdFA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UGM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UGQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UGY8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UGk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UG88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0UHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ2F0Uzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRTYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRTazwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRTbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRTbzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDYXRaPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdFpsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdFpwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NhdFpzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NoZXJva2VlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ29tYmluaW5nSGFsZk1hcmtzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NvbWJpbmluZ01hcmtzZm9yU3ltYm9sczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNDb250cm9sUGljdHVyZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ3VycmVuY3lTeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0N5cmlsbGljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0Rlc2VyZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzRGV2YW5hZ2FyaTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNEaW5nYmF0czwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNFbmNsb3NlZEFscGhhbnVtZXJpY3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzRW5jbG9zZWRDSktMZXR0ZXJzYW5kTW9udGhzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0V0aGlvcGljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0dlbmVyYWxQdW5jdHVhdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNHZW9tZXRyaWNTaGFwZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzR2VvcmdpYW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzR290aGljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0dyZWVrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0dyZWVrRXh0ZW5kZWQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzR3VqYXJhdGk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzR3VybXVraGk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzSGFsZndpZHRoYW5kRnVsbHdpZHRoRm9ybXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzSGFuZ3VsQ29tcGF0aWJpbGl0eUphbW88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzSGFuZ3VsSmFtbzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNIYW5ndWxTeWxsYWJsZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzSGVicmV3PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0hpZ2hQcml2YXRlVXNlU3Vycm9nYXRlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNIaWdoU3Vycm9nYXRlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNIaXJhZ2FuYTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNJUEFFeHRlbnNpb25zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0lkZW9ncmFwaGljRGVzY3JpcHRpb25DaGFyYWN0ZXJzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0thbmJ1bjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNLYW5neGlSYWRpY2Fsczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNLYW5uYWRhPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0thdGFrYW5hPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0tobWVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xhbzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNMYXRpbjFTdXBwbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xhdGluRXh0ZW5kZWRBPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xhdGluRXh0ZW5kZWRBZGRpdGlvbmFsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xhdGluRXh0ZW5kZWRCPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xldHRlcmxpa2VTeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xvd1N1cnJvZ2F0ZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzTWFsYXlhbGFtPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc01hdGhlbWF0aWNhbEFscGhhbnVtZXJpY1N5bWJvbHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzTWF0aGVtYXRpY2FsT3BlcmF0b3JzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc01pc2NlbGxhbmVvdXNTeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc01pc2NlbGxhbmVvdXNUZWNobmljYWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzTW9uZ29saWFuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc011c2ljYWxTeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc015YW5tYXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzTnVtYmVyRm9ybXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzT2doYW08L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzT2xkSXRhbGljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc09wdGljYWxDaGFyYWN0ZXJSZWNvZ25pdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNPcml5YTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNQcml2YXRlVXNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1J1bmljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1NpbmhhbGE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzU21hbGxGb3JtVmFyaWFudHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzU3BhY2luZ01vZGlmaWVyTGV0dGVyczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNTcGVjaWFsczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNTdXBlcnNjcmlwdHNhbmRTdWJzY3JpcHRzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1N5cmlhYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNUYWdzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1RhbWlsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1RlbHVndTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNUaGFhbmE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzVGhhaTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNUaWJldGFuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1VuaWZpZWRDYW5hZGlhbkFib3JpZ2luYWxTeWxsYWJpY3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzWWlSYWRpY2Fsczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNZaVN5bGxhYmxlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idXJpIj54bWxCdWlsZFVSSTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idXJpIj54bWxDcmVhdGVVUkk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InVyaSI+eG1sRnJlZVVSSTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idXJpIj54bWxOb3JtYWxpemVVUklQYXRoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ1cmkiPnhtbFBhcnNlVVJJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ1cmkiPnhtbFBhcnNlVVJJUmVmZXJlbmNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ1cmkiPnhtbFByaW50VVJJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ1cmkiPnhtbFNhdmVVcmk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InVyaSI+eG1sVVJJRXNjYXBlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ1cmkiPnhtbFVSSUVzY2FwZVN0cjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idXJpIj54bWxVUklVbmVzY2FwZVN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW5jb2RpbmciPlVURjhUb2lzb2xhdDE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj5pc29sYXQxVG9VVEY4PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbmNvZGluZyI+eG1sQWRkRW5jb2RpbmdBbGlhczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW5jb2RpbmciPnhtbENoYXJFbmNDbG9zZUZ1bmM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj54bWxDaGFyRW5jRmlyc3RMaW5lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbmNvZGluZyI+eG1sQ2hhckVuY0luRnVuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW5jb2RpbmciPnhtbENoYXJFbmNPdXRGdW5jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbENoZWNrVVRGODwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW5jb2RpbmciPnhtbENsZWFudXBDaGFyRW5jb2RpbmdIYW5kbGVyczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW5jb2RpbmciPnhtbENsZWFudXBFbmNvZGluZ0FsaWFzZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj54bWxEZWxFbmNvZGluZ0FsaWFzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbmNvZGluZyI+eG1sRGV0ZWN0Q2hhckVuY29kaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbmNvZGluZyI+eG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj54bWxHZXRDaGFyRW5jb2RpbmdIYW5kbGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbmNvZGluZyI+eG1sR2V0Q2hhckVuY29kaW5nTmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZW5jb2RpbmciPnhtbEdldEVuY29kaW5nQWxpYXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sR2V0VVRGOENoYXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj54bWxJbml0Q2hhckVuY29kaW5nSGFuZGxlcnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj54bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbmNvZGluZyI+eG1sUGFyc2VDaGFyRW5jb2Rpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImVuY29kaW5nIj54bWxSZWdpc3RlckNoYXJFbmNvZGluZ0hhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sVVRGOFN0cmxlbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxVVEY4U3RybG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFVURjhTdHJuZHVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFVURjhTdHJwb3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sVVRGOFN0cnNpemU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sVVRGOFN0cnN1Yjwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNS4wIj4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFJlZ2lzdGVyTm9kZURlZmF1bHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyQ2xvc2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckN1cnJlbnREb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckN1cnJlbnROb2RlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJHZXRBdHRyaWJ1dGVObzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyR2V0QXR0cmlidXRlTnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckdldEF0dHJpYnV0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyR2V0UGFyc2VyUHJvcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyR2V0UmVtYWluZGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJMb29rdXBOYW1lc3BhY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlck1vdmVUb0F0dHJpYnV0ZU5vPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJNb3ZlVG9BdHRyaWJ1dGVOczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyTW92ZVRvQXR0cmlidXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJNb3ZlVG9FbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJNb3ZlVG9GaXJzdEF0dHJpYnV0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyTW92ZVRvTmV4dEF0dHJpYnV0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyTm9ybWFsaXphdGlvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyUmVhZEF0dHJpYnV0ZVZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJSZWFkSW5uZXJYbWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlclJlYWRPdXRlclhtbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyUmVhZFN0YXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJSZWFkU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVQb3BFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sVmFsaWRhdGVQdXNoQ0RhdGE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxWYWxpZGF0ZVB1c2hFbGVtZW50PC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi41LjIiPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sR2V0Tm9Oc1Byb3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxBdHRyQWxsb3dlZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEVsZW1lbnRBbGxvd2VkSGVyZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEVsZW1lbnRTdGF0dXNIZXJlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sTm9kZVN0YXR1czwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR0NsZWFudXBUeXBlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR0R1bXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdGcmVlUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR0ZyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdGcmVlVmFsaWRDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJyZWxheG5nIj54bWxSZWxheE5HTmV3TWVtUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR05ld1BhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdOZXdWYWxpZEN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdQYXJzZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR1NldFBhcnNlckVycm9yczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR1NldFZhbGlkRXJyb3JzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJyZWxheG5nIj54bWxSZWxheE5HVmFsaWRhdGVEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckdldEVycm9ySGFuZGxlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyTG9jYXRvckJhc2VVUkk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckxvY2F0b3JMaW5lTnVtYmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJTZXRFcnJvckhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuNS41IiBmaWxlPSJyZWxheG5nIj54bWxSZWxheE5HVmFsaWRhdGVTdHJlYW08L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjUuNCI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ1cmkiPnhtbENhbm9uaWNQYXRoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJyZWxheG5nIj54bWxSZWxheE5HRHVtcFRyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFZhbGlkYXRlTmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sVmFsaWRhdGVOQ05hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFZhbGlkYXRlTk1Ub2tlbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sVmFsaWRhdGVRTmFtZTwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNS41Ij4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9mdHAiPnhtbE5hbm9GVFBEZWxlPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi41LjYiPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoT3JkZXJEb2NFbGVtczwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNS43Ij4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxhdXRvbWF0YSI+eG1sQXV0b21hdGFOZXdUcmFuc2l0aW9uMjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVpbGRRTmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxHY01lbUdldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxHY01lbVNldHVwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxNYWxsb2NBdG9taWM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlZ2V4cCI+eG1sUmVnRXhlY1B1c2hTdHJpbmcyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJyZWxheG5nIj54bWxSZWxheE5HTmV3RG9jUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR1ZhbGlkYXRlRnVsbEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdWYWxpZGF0ZVBvcEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdWYWxpZGF0ZVB1c2hDRGF0YTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR1ZhbGlkYXRlUHVzaEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckV4cGFuZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVySXNWYWxpZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyTmV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyUmVsYXhOR1NldFNjaGVtYTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyUmVsYXhOR1ZhbGlkYXRlPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi41LjgiPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sQ2xlYW51cEdsb2JhbHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbEluaXRHbG9iYWxzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ2YWxpZCI+eG1sRnJlZVZhbGlkQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idmFsaWQiPnhtbE5ld1ZhbGlkQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ic2NoZW1hc0ludGVybmFscyI+eG1sU2NoZW1hRnJlZVR5cGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXMiPnhtbFNjaGVtYUR1bXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXMiPnhtbFNjaGVtYUZyZWVQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFGcmVlVmFsaWRDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFGcmVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFOZXdNZW1QYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFOZXdQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFOZXdWYWxpZEN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXMiPnhtbFNjaGVtYVBhcnNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFTZXRQYXJzZXJFcnJvcnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXMiPnhtbFNjaGVtYVNldFZhbGlkRXJyb3JzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFWYWxpZGF0ZURvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hVmFsaWRhdGVTdHJlYW08L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hQ2hlY2tGYWNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFDbGVhbnVwVHlwZXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hQ29tcGFyZVZhbHVlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFGcmVlRmFjZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hRnJlZVZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYUdldFByZWRlZmluZWRUeXBlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYUluaXRUeXBlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFOZXdGYWNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFWYWxpZGF0ZUZhY2V0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYVZhbGlkYXRlUHJlZGVmaW5lZFR5cGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hVmFsUHJlZGVmVHlwZU5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxUaHJEZWZJbmRlbnRUcmVlT3V0cHV0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFRockRlZlNhdmVOb0VtcHR5VGFnczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi41LjkiPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxNYWxsb2NBdG9taWNMb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdHZXRQYXJzZXJFcnJvcnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdHZXRWYWxpZEVycm9yczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sU3BsaXRRTmFtZTM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sVVRGOENoYXJjbXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sVVRGOFNpemU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhpbmNsdWRlIj54bWxYSW5jbHVkZVByb2Nlc3NUcmVlPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjAiPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkF0dHJpYnV0ZURlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJDRGF0YUJsb2NrPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyQ2hhcmFjdGVyczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkNvbW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJFbGVtZW50RGVjbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkVuZERvY3VtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyRW5kRWxlbWVudE5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyRW5kRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkVudGl0eURlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJFeHRlcm5hbFN1YnNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkdldENvbHVtbk51bWJlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkdldEVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkdldExpbmVOdW1iZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJHZXRQYXJhbWV0ZXJFbnRpdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJHZXRQdWJsaWNJZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMkdldFN5c3RlbUlkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgySGFzRXh0ZXJuYWxTdWJzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJIYXNJbnRlcm5hbFN1YnNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMklnbm9yYWJsZVdoaXRlc3BhY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJJbml0RGVmYXVsdFNBWEhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiIHJlbW92ZWQ9IjIuMTAuMCI+eG1sU0FYMkluaXREb2NiRGVmYXVsdFNBWEhhbmRsZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJJbml0SHRtbERlZmF1bHRTQVhIYW5kbGVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgySW50ZXJuYWxTdWJzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJJc1N0YW5kYWxvbmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJOb3RhdGlvbkRlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb248L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJSZWZlcmVuY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IlNBWDIiPnhtbFNBWDJSZXNvbHZlRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyU2V0RG9jdW1lbnRMb2NhdG9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyU3RhcnREb2N1bWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYMlN0YXJ0RWxlbWVudE5zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyU3RhcnRFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVgyVW5wYXJzZWRFbnRpdHlEZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJTQVgyIj54bWxTQVhEZWZhdWx0VmVyc2lvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iU0FYMiI+eG1sU0FYVmVyc2lvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEN0eHRSZWFkRG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sQ3R4dFJlYWRGZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEN0eHRSZWFkRmlsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEN0eHRSZWFkSU88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9IkhUTUxwYXJzZXIiPmh0bWxDdHh0UmVhZE1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEN0eHRSZXNldDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbEN0eHRVc2VPcHRpb25zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUmVhZERvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbFJlYWRGZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHBhcnNlciI+aHRtbFJlYWRGaWxlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUmVhZElPPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sUmVhZE1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmZmVyQ3JlYXRlU3RhdGljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjaHZhbGlkIj54bWxDaGFySW5SYW5nZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sSU8iPnhtbENoZWNrSFRUUElucHV0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxlcnJvciI+eG1sQ29weUVycm9yPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxlcnJvciI+eG1sQ3R4dEdldExhc3RFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbEdldExhc3RFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbFJlc2V0RXJyb3I8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGVycm9yIj54bWxSZXNldExhc3RFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ3R4dFJlYWREb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ3R4dFJlYWRGZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxDdHh0UmVhZEZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ3R4dFJlYWRJTzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxDdHh0UmVhZE1lbW9yeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sZXJyb3IiPnhtbEN0eHRSZXNldExhc3RFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxDdHh0UmVzZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ3R4dFVzZU9wdGlvbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUmVhZERvYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGFyc2VyIj54bWxSZWFkRmQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUmVhZEZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUmVhZElPPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbFJlYWRNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RyUHJpbnRmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzdHJpbmciPnhtbFN0clFFcXVhbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sRGljdENyZWF0ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sRGljdEZyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRpY3QiPnhtbERpY3RMb29rdXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRpY3QiPnhtbERpY3RPd25zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkaWN0Ij54bWxEaWN0UUxvb2t1cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sRGljdFJlZmVyZW5jZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sRGljdFNpemU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sRXJyTWVtb3J5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFBhcnNlck1heERlcHRoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFN0cmluZ0xlbkRlY29kZUVudGl0aWVzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXJJbnRlcm5hbHMiPnhtbFN3aXRjaElucHV0RW5jb2Rpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sRnJlZVRleHRXcml0ZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sTmV3VGV4dFdyaXRlckZpbGVuYW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbE5ld1RleHRXcml0ZXJNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sTmV3VGV4dFdyaXRlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyRW5kQXR0cmlidXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJFbmRDREFUQTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyRW5kRG9jdW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlckVuZERURDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyRW5kRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyRW5kUEk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlckZsdXNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJGdWxsRW5kRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU3RhcnRBdHRyaWJ1dGVOUzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU3RhcnRBdHRyaWJ1dGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlclN0YXJ0Q0RBVEE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlclN0YXJ0RG9jdW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlclN0YXJ0RFREQXR0bGlzdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU3RhcnREVERFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJTdGFydERUREVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU3RhcnREVEQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudE5TPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlclN0YXJ0UEk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlTlM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZUJhc2U2NDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVCaW5IZXg8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlQ0RBVEE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlQ29tbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVEVERBdHRsaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZURUREVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRFRERW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZURUREV4dGVybmFsRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZURUREludGVybmFsRW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZURURE5vdGF0aW9uPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZURURDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVFbGVtZW50TlM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRWxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRBdHRyaWJ1dGVOUzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRBdHRyaWJ1dGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0Q0RBVEE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0Q29tbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXREVERBdHRsaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdERUREVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RFRESW50ZXJuYWxFbnRpdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RFREPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEVsZW1lbnROUzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdFBJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdFJhdzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlUEk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlUmF3TGVuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVJhdzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVTdHJpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdEF0dHJpYnV0ZU5TPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRBdHRyaWJ1dGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdENEQVRBPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRDb21tZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXREVERBdHRsaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXREVERFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXREVERJbnRlcm5hbEVudGl0eTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0RFREPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRFbGVtZW50TlM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdEVsZW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFBJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRSYXc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaFFMb29rdXAyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJoYXNoIj54bWxIYXNoUUxvb2t1cDM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hRTG9va3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjaHZhbGlkIj54bWxJc0Jhc2VDaGFyR3JvdXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNodmFsaWQiPnhtbElzQ2hhckdyb3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjaHZhbGlkIj54bWxJc0NvbWJpbmluZ0dyb3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjaHZhbGlkIj54bWxJc0RpZ2l0R3JvdXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImNodmFsaWQiPnhtbElzRXh0ZW5kZXJHcm91cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iY2h2YWxpZCI+eG1sSXNJZGVvZ3JhcGhpY0dyb3VwPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJjaHZhbGlkIj54bWxJc1B1YmlkQ2hhcl90YWI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbExhc3RFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ibmFub2h0dHAiPnhtbE5hbm9IVFRQRW5jb2Rpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9odHRwIj54bWxOYW5vSFRUUE1pbWVUeXBlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJuYW5vaHR0cCI+eG1sTmFub0hUVFBSZWRpcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTm9kZUJ1ZkdldENvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxSZWFkZXJGb3JEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sUmVhZGVyRm9yRmQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sUmVhZGVyRm9yRmlsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxSZWFkZXJGb3JJTzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxSZWFkZXJGb3JNZW1vcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sUmVhZGVyTmV3RG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFJlYWRlck5ld0ZkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFJlYWRlck5ld0ZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sUmVhZGVyTmV3SU88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sUmVhZGVyTmV3TWVtb3J5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFJlYWRlck5ld1dhbGtlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxSZWFkZXJXYWxrZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckNvbnN0QmFzZVVyaTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyQ29uc3RMb2NhbE5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckNvbnN0TmFtZXNwYWNlVXJpPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJDb25zdE5hbWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckNvbnN0UHJlZml4PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJDb25zdFN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyQ29uc3RYbWxMYW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJOZXh0U2libGluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyUHJlc2VydmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFN0cnVjdHVyZWRFcnJvcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGhJbnRlcm5hbHMiPnhtbFhQYXRoRXJyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCByZW1vdmVkPSIyLjYuMTAiIGZpbGU9IlNBWDIiPnhtbFNBWDJDaGVja05hbWVzcGFjZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi42LjEwIiBmaWxlPSJTQVgyIj54bWxTQVgyR2V0TmFtZXNwYWNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCByZW1vdmVkPSIyLjYuMTAiIGZpbGU9IlNBWDIiPnhtbFNBWDJHbG9iYWxOYW1lc3BhY2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuNi4xMCIgZmlsZT0iU0FYMiI+eG1sU0FYMk5hbWVzcGFjZURlY2w8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuNi4xMCIgZmlsZT0iU0FYMiI+eG1sU0FYMlNldE5hbWVzcGFjZTwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNi4xIj4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQ3R4dFJlc2V0UHVzaDwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNi4yIj4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlckludGVybmFscyI+eG1sQ3JlYXRlVVJMUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hTmV3RG9jUGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc3RyaW5nIj54bWxTdHJWUHJpbnRmPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4aW5jbHVkZSI+eG1sWEluY2x1ZGVGcmVlQ29udGV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieGluY2x1ZGUiPnhtbFhJbmNsdWRlTmV3Q29udGV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieGluY2x1ZGUiPnhtbFhJbmNsdWRlUHJvY2Vzc05vZGU8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMyI+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXR0ZXJuIj54bWxGcmVlUGF0dGVybkxpc3Q8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhdHRlcm4iPnhtbEZyZWVQYXR0ZXJuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXR0ZXJuIj54bWxQYXR0ZXJuY29tcGlsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGF0dGVybiI+eG1sUGF0dGVybk1hdGNoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbE5ld1RleHRXcml0ZXJEb2M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sTmV3VGV4dFdyaXRlclB1c2hQYXJzZXI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sTmV3VGV4dFdyaXRlclRyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlclByZXNlcnZlUGF0dGVybjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNBZWdlYW5OdW1iZXJzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0J1aGlkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0NvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3Nmb3JTeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0N5cHJpb3RTeWxsYWJhcnk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzQ3lyaWxsaWNTdXBwbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0dyZWVrYW5kQ29wdGljPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0hhbnVub288L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzS2F0YWthbmFQaG9uZXRpY0V4dGVuc2lvbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzS2htZXJTeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xpbWJ1PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc0xpbmVhckJJZGVvZ3JhbXM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzTGluZWFyQlN5bGxhYmFyeTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNNaXNjZWxsYW5lb3VzTWF0aGVtYXRpY2FsU3ltYm9sc0E8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzTWlzY2VsbGFuZW91c01hdGhlbWF0aWNhbFN5bWJvbHNCPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc01pc2NlbGxhbmVvdXNTeW1ib2xzYW5kQXJyb3dzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc09zbWFueWE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzUGhvbmV0aWNFeHRlbnNpb25zPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1ByaXZhdGVVc2VBcmVhPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1NoYXZpYW48L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzU3VwcGxlbWVudGFsQXJyb3dzQTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNTdXBwbGVtZW50YWxBcnJvd3NCPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1N1cHBsZW1lbnRhbE1hdGhlbWF0aWNhbE9wZXJhdG9yczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNTdXBwbGVtZW50YXJ5UHJpdmF0ZVVzZUFyZWFBPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx1bmljb2RlIj54bWxVQ1NJc1N1cHBsZW1lbnRhcnlQcml2YXRlVXNlQXJlYUI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzVGFnYWxvZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNUYWdiYW53YTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNUYWlMZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNUYWlYdWFuSmluZ1N5bWJvbHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzVWdhcml0aWM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzVmFyaWF0aW9uU2VsZWN0b3JzU3VwcGxlbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sdW5pY29kZSI+eG1sVUNTSXNWYXJpYXRpb25TZWxlY3RvcnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHVuaWNvZGUiPnhtbFVDU0lzWWlqaW5nSGV4YWdyYW1TeW1ib2xzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4aW5jbHVkZSI+eG1sWEluY2x1ZGVQcm9jZXNzRmxhZ3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhpbmNsdWRlIj54bWxYSW5jbHVkZVByb2Nlc3NUcmVlRmxhZ3M8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhpbmNsdWRlIj54bWxYSW5jbHVkZVNldEZsYWdzPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjUiPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbWVtb3J5Ij54bWxDbGVhbnVwTWVtb3J5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJkaWN0Ij54bWxEaWN0Q3JlYXRlU3ViPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJyZWxheG5nIj54bWxSZWxheFBhcnNlclNldEZsYWc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHN0cmluZyI+eG1sU3RybmNhdE5ldzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU2V0SW5kZW50U3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJTZXRJbmRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aEN0eHRDb21waWxlPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjYiPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQXR0clNlcmlhbGl6ZVR4dENvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sQnl0ZUNvbnN1bWVkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJTZXRTdHJ1Y3R1cmVkRXJyb3JIYW5kbGVyPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjciPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyRW5kQ29tbWVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU3RhcnRDb21tZW50PC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjgiPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2F2ZSI+eG1sU2F2ZUNsb3NlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzYXZlIj54bWxTYXZlRG9jPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzYXZlIj54bWxTYXZlRmx1c2g8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNhdmUiPnhtbFNhdmVUb0ZkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzYXZlIj54bWxTYXZlVG9GaWxlbmFtZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2F2ZSI+eG1sU2F2ZVRvSU88L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNhdmUiPnhtbFNhdmVUcmVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJFbmREVERBdHRsaXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJFbmREVERFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWx3cml0ZXIiPnhtbFRleHRXcml0ZXJFbmREVERFbnRpdHk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHdyaXRlciI+eG1sVGV4dFdyaXRlcldyaXRlRFRERXh0ZXJuYWxFbnRpdHlDb250ZW50czwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNi4xMCI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sT3V0cHV0QnVmZmVyV3JpdGVFc2NhcGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxQb3BJbnB1dENhbGxiYWNrczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2F2ZSI+eG1sU2F2ZVNldEF0dHJFc2NhcGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNhdmUiPnhtbFNhdmVTZXRFc2NhcGU8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMTEiPgotICAgIDxzeW1ib2wgZmlsZT0idXJpIj54bWxCdWlsZFJlbGF0aXZlVVJJPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imdsb2JhbHMiPnhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZ2xvYmFscyI+eG1sVGhyRGVmUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InNjaGVtYXNJbnRlcm5hbHMiPnhtbFNjaGVtYUZyZWVXaWxkY2FyZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFDb2xsYXBzZVN0cmluZzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFHZXRCdWlsdEluTGlzdFNpbXBsZVR5cGVJdGVtVHlwZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFHZXRCdWlsdEluVHlwZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFJc0J1aWx0SW5UeXBlRmFjZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hVmFsaWRhdGVMaXN0U2ltcGxlVHlwZUZhY2V0PC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjEyIj4KLSAgICA8c3ltYm9sIGZpbGU9InBhcnNlciI+eG1sUGFyc2VJbk5vZGVDb250ZXh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYUdldEZhY2V0VmFsdWVBc1VMb25nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYVZhbGlkYXRlTGVuZ3RoRmFjZXQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hVmFsUHJlZGVmVHlwZU5vZGVOb05vcm08L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXMiPnhtbFNjaGVtYUdldFBhcnNlckVycm9yczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hR2V0VmFsaWRFcnJvcnM8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMTQiPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEF1dG9tYXRhTmV3Q291bnRUcmFuczI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbGF1dG9tYXRhIj54bWxBdXRvbWF0YU5ld09uY2VUcmFuczI8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Im5hbm9odHRwIj54bWxOYW5vSFRUUENvbnRlbnRMZW5ndGg8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXMiPnhtbFNjaGVtYVNldFZhbGlkT3B0aW9uczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hVmFsaWRhdGVPbmVFbGVtZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFWYWxpZEN0eHRHZXRPcHRpb25zPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjE1Ij4KLSAgICA8c3ltYm9sIGZpbGU9ImRlYnVnWE1MIj54bWxEZWJ1Z0NoZWNrRG9jdW1lbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbERvY0NvcHlOb2RlTGlzdDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sTmV3RG9jUEk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckNvbnN0RW5jb2Rpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlckNvbnN0WG1sVmVyc2lvbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVySXNOYW1lc3BhY2VEZWNsPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJTdGFuZGFsb25lPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjE2Ij4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1lbW9yeSI+eG1sTWVtQmxvY2tzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJyZWxheG5nIj54bWxSZWxheE5HSW5pdFR5cGVzPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjE3Ij4KLSAgICA8c3ltYm9sIGZpbGU9ImRpY3QiPnhtbERpY3RFeGlzdHM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1vZHVsZSI+eG1sTW9kdWxlQ2xvc2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbG1vZHVsZSI+eG1sTW9kdWxlRnJlZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sbW9kdWxlIj54bWxNb2R1bGVPcGVuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxtb2R1bGUiPnhtbE1vZHVsZVN5bWJvbDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVnZXhwIj54bWxSZWdFeGVjRXJySW5mbzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVnZXhwIj54bWxSZWdFeGVjTmV4dFZhbHVlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFXaGl0ZVNwYWNlUmVwbGFjZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyR2V0UGFyc2VyQ29sdW1uTnVtYmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJHZXRQYXJzZXJMaW5lTnVtYmVyPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjE4Ij4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxDb3B5RG9jRWxlbWVudENvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxGcmVlRG9jRWxlbWVudENvbnRlbnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InZhbGlkIj54bWxOZXdEb2NFbGVtZW50Q29udGVudDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sRGljdENsZWFudXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9Imhhc2giPnhtbEhhc2hDcmVhdGVEaWN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXR0ZXJuIj54bWxGcmVlU3RyZWFtQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGF0dGVybiI+eG1sUGF0dGVybkZyb21Sb290PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXR0ZXJuIj54bWxQYXR0ZXJuR2V0U3RyZWFtQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGF0dGVybiI+eG1sUGF0dGVybk1heERlcHRoPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXR0ZXJuIj54bWxQYXR0ZXJuU3RyZWFtYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGF0dGVybiI+eG1sU3RyZWFtUG9wPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXR0ZXJuIj54bWxTdHJlYW1QdXNoQXR0cjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGF0dGVybiI+eG1sU3RyZWFtUHVzaDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFDb21wYXJlVmFsdWVzV2h0c3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hQ29weVZhbHVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYUdldENhbm9uVmFsdWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hTmV3Tk9UQVRJT05WYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFOZXdTdHJpbmdWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyQnl0ZUNvbnN1bWVkPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjE5Ij4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hR2V0VmFsVHlwZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFWYWxpZGF0ZUZhY2V0V2h0c3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hVmFsaWRhdGVMZW5ndGhGYWNldFdodHNwPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjIwIj4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbERPTVdyYXBBZG9wdE5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbERPTVdyYXBGcmVlQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sRE9NV3JhcE5ld0N0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbERPTVdyYXBSZWNvbmNpbGVOYW1lc3BhY2VzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxET01XcmFwUmVtb3ZlTm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFHZXRDYW5vblZhbHVlV2h0c3A8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHNjaGVtYXN0eXBlcyI+eG1sU2NoZW1hTmV3UU5hbWVWYWx1ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFWYWx1ZUFwcGVuZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFWYWx1ZUdldEFzQm9vbGVhbjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hc3R5cGVzIj54bWxTY2hlbWFWYWx1ZUdldEFzU3RyaW5nPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzdHlwZXMiPnhtbFNjaGVtYVZhbHVlR2V0TmV4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hSXNWYWxpZDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hU0FYUGx1Zzwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hU0FYVW5wbHVnPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFWYWxpZGF0ZUZpbGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlclNjaGVtYVZhbGlkYXRlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJTZXRTY2hlbWE8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMjEiPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sYXV0b21hdGEiPnhtbEF1dG9tYXRhTmV3TmVnVHJhbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj5lbXB0eUV4cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPmZvcmJpZGRlbkV4cDwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cEN0eHROYkNvbnM8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBDdHh0TmJOb2Rlczwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cER1bXA8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBFeHBEZXJpdmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBGcmVlQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cEZyZWU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBHZXRMYW5ndWFnZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cEdldFN0YXJ0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCByZW1vdmVkPSIyLjkuMTAiIGZpbGU9InhtbHJlZ2V4cCI+eG1sRXhwSXNOaWxsYWJsZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cE1heFRva2VuPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCByZW1vdmVkPSIyLjkuMTAiIGZpbGU9InhtbHJlZ2V4cCI+eG1sRXhwTmV3QXRvbTwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cE5ld0N0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBOZXdPcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgcmVtb3ZlZD0iMi45LjEwIiBmaWxlPSJ4bWxyZWdleHAiPnhtbEV4cE5ld1JhbmdlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCByZW1vdmVkPSIyLjkuMTAiIGZpbGU9InhtbHJlZ2V4cCI+eG1sRXhwTmV3U2VxPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCByZW1vdmVkPSIyLjkuMTAiIGZpbGU9InhtbHJlZ2V4cCI+eG1sRXhwUGFyc2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBSZWY8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBTdHJpbmdEZXJpdmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIHJlbW92ZWQ9IjIuOS4xMCIgZmlsZT0ieG1scmVnZXhwIj54bWxFeHBTdWJzdW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJwYXJzZXIiPnhtbEhhc0ZlYXR1cmU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InVyaSI+eG1sUGFyc2VVUklSYXc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhdHRlcm4iPnhtbFBhdHRlcm5NaW5EZXB0aDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icmVsYXhuZyI+eG1sUmVsYXhOR1NldFZhbGlkU3RydWN0dXJlZEVycm9yczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hU2V0VmFsaWRTdHJ1Y3R1cmVkRXJyb3JzPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJzY2hlbWF0cm9uIj54bWxTY2hlbWF0cm9uRnJlZVBhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InNjaGVtYXRyb24iPnhtbFNjaGVtYXRyb25GcmVlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJzY2hlbWF0cm9uIj54bWxTY2hlbWF0cm9uRnJlZVZhbGlkQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ic2NoZW1hdHJvbiI+eG1sU2NoZW1hdHJvbk5ld0RvY1BhcnNlckN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InNjaGVtYXRyb24iPnhtbFNjaGVtYXRyb25OZXdNZW1QYXJzZXJDdHh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJzY2hlbWF0cm9uIj54bWxTY2hlbWF0cm9uTmV3UGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ic2NoZW1hdHJvbiI+eG1sU2NoZW1hdHJvbk5ld1ZhbGlkQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ic2NoZW1hdHJvbiI+eG1sU2NoZW1hdHJvblBhcnNlPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJzY2hlbWF0cm9uIj54bWxTY2hlbWF0cm9uVmFsaWRhdGVEb2M8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjYuMjMiPgotICAgIDxzeW1ib2wgZmlsZT0iSFRNTHRyZWUiPmh0bWxEb2NEdW1wTWVtb3J5Rm9ybWF0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlQnVmZmVyPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzYXZlIiBjb21tZW50PSJzdXBwcmVzc2VkIGluIDIuNi4xMSwgcmVhZGRlZCBpbiAyLjYuMjMiPnhtbFNhdmVUb0J1ZmZlcjwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sc2NoZW1hcyI+eG1sU2NoZW1hU2V0UGFyc2VyU3RydWN0dXJlZEVycm9yczwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0icGF0dGVybiI+eG1sU3RyZWFtUHVzaE5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InBhdHRlcm4iPnhtbFN0cmVhbVdhbnRzQW55Tm9kZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1scmVhZGVyIj54bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGVDdHh0PC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjI0Ij4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbERPTVdyYXBDbG9uZU5vZGU8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InJlbGF4bmciPnhtbFJlbGF4TkdTZXRQYXJzZXJTdHJ1Y3R1cmVkRXJyb3JzPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjI1Ij4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aENvbnRleHRTZXRDYWNoZTwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNi4yNyI+Ci0gICAgPHN5bWJvbCBmaWxlPSJIVE1McGFyc2VyIj5odG1sTmV3UGFyc2VyQ3R4dDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idXJpIj54bWxQYXRoVG9VUkk8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhpbmNsdWRlIj54bWxYSW5jbHVkZVByb2Nlc3NGbGFnc0RhdGE8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aENvbXBpbGVkRXZhbFRvQm9vbGVhbjwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNi4yOCI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxyZWFkZXIiPnhtbFRleHRSZWFkZXJTZXR1cDwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuNi4yOSI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0aHJlYWRzIj54bWxEbGxNYWluPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjMyIj4KLSAgICA8c3ltYm9sIGZpbGU9InNjaGVtYXRyb24iPnhtbFNjaGVtYXRyb25TZXRWYWxpZFN0cnVjdHVyZWRFcnJvcnM8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjcuMCI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxtZW1vcnkiPnhtbE1lbURpc3BsYXlMYXN0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJlbnRpdGllcyI+eG1sTmV3RW50aXR5PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFWYWxpZEN0eHRHZXRQYXJzZXJDdHh0PC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi43LjMiPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQ2hpbGRFbGVtZW50Q291bnQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEZpcnN0RWxlbWVudENoaWxkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxMYXN0RWxlbWVudENoaWxkPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxOZXh0RWxlbWVudFNpYmxpbmc8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbFByZXZpb3VzRWxlbWVudFNpYmxpbmc8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjcuNCI+Ci0gICAgPHN5bWJvbCBmaWxlPSJnbG9iYWxzIj54bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4aW5jbHVkZSI+eG1sWEluY2x1ZGVQcm9jZXNzVHJlZUZsYWdzRGF0YTwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuOC4wIj4KLSAgICA8c3ltYm9sIGZpbGU9InhtbHJlYWRlciI+eG1sVGV4dFJlYWRlclJlbGF4TkdWYWxpZGF0ZUN0eHQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZmZlckRldGFjaDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sSW5pdGlhbGl6ZURpY3Q8L3N5bWJvbD4KLSAgPC9yZWxlYXNlPgotICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjkuMCI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZDb250ZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZFbmQ8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InRyZWUiPnhtbEJ1ZkdldE5vZGVDb250ZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZOb2RlRHVtcDwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0idHJlZSI+eG1sQnVmU2hyaW5rPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ0cmVlIj54bWxCdWZVc2U8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9ImRpY3QiPnhtbERpY3RHZXRVc2FnZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0iZGljdCI+eG1sRGljdFNldExpbWl0PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFWYWxpZGF0ZVNldEZpbGVuYW1lPC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxzY2hlbWFzIj54bWxTY2hlbWFWYWxpZGF0ZVNldExvY2F0b3I8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhtbElPIj54bWxPdXRwdXRCdWZmZXJHZXRDb250ZW50PC9zeW1ib2w+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sT3V0cHV0QnVmZmVyR2V0U2l6ZTwvc3ltYm9sPgotICAgIDxzeW1ib2wgZmlsZT0ieG1sd3JpdGVyIj54bWxUZXh0V3JpdGVyU2V0UXVvdGVDaGFyPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi45LjEiPgotICAgIDxzeW1ib2wgZmlsZT0ieHBhdGgiPnhtbFhQYXRoTm9kZUV2YWw8L3N5bWJvbD4KLSAgICA8c3ltYm9sIGZpbGU9InhwYXRoIj54bWxYUGF0aFNldENvbnRleHROb2RlPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLSAgPHJlbGVhc2UgdmVyc2lvbj0iMi45LjgiPgotICAgIDxzeW1ib2wgZmlsZT0iaGFzaCI+eG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcjwvc3ltYm9sPgotICA8L3JlbGVhc2U+Ci0gIDxyZWxlYXNlIHZlcnNpb249IjIuOS4xMSI+Ci0gICAgPHN5bWJvbCBmaWxlPSJ4bWxJTyI+eG1sUG9wT3V0cHV0Q2FsbGJhY2tzPC9zeW1ib2w+Ci0gIDwvcmVsZWFzZT4KLTwvc3ltYm9scz4KZGlmZiAtLWdpdCBhL2RvYy9zeW1zLnhzbCBiL2RvYy9zeW1zLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJjYTg4Zi4uMDAwMDAwMAotLS0gYS9kb2Mvc3ltcy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiPgotICA8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiIGVuY29kaW5nPSJVVEYtOCIvPgotCi0gIDx4c2w6dmFyaWFibGUgbmFtZT0iYXBpIiBzZWxlY3Q9ImRvY3VtZW50KCdsaWJ4bWwyLWFwaS54bWwnKSIvPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDx4c2w6dGV4dD4jCi0jIE9mZmljaWFsbHkgZXhwb3J0ZWQgc3ltYm9scywgZm9yIHdoaWNoIGhlYWRlcgotIyBmaWxlIGRlZmluaXRpb25zIGFyZSBpbnN0YWxsZWQgaW4gL3Vzci9pbmNsdWRlL2xpYnhtbDIKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzeW1ib2xzLnhtbCBhbmQgc3ltcy54c2wKLSMKLSMgVmVyc2lvbnMgaGVyZSBhcmUgKmZpeGVkKiB0byBtYXRjaCB0aGUgbGlieG1sMiB2ZXJzaW9uCi0jIGF0IHdoaWNoIHRoZSBzeW1ib2wgd2FzIGludHJvZHVjZWQuIFRoaXMgZW5zdXJlcyB0aGF0Ci0jIGEgbmV3IGNsaWVudCBhcHAgcmVxdWlyaW5nIHN5bWJvbCBmb28oKSBjYW4ndCBhY2NpZGVudGFsbHkKLSMgcnVuIHdpdGggb2xkIGxpYnhtbDIuc28gbm90IHByb3ZpZGluZyBmb28oKSAtIHRoZSBnbG9iYWwKLSMgc29uYW1lIHZlcnNpb24gaW5mbyBjYW4ndCBlbmZvcmNlIHRoaXMgc2luY2Ugd2UgbmV2ZXIKLSMgY2hhbmdlIHRoZSBzb25hbWUKLSMKLQotPC94c2w6dGV4dD4KLSAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii9zeW1ib2xzL3JlbGVhc2UiLz4KLSAgPC94c2w6dGVtcGxhdGU+Ci0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZSI+Ci0gICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJwcmV2IgotICAgICAgICAgICAgICAgICAgc2VsZWN0PSJwcmVjZWRpbmctc2libGluZzo6cmVsZWFzZVtwb3NpdGlvbigpPTFdIi8+Ci0gICAgPHhzbDp0ZXh0PkxJQlhNTDJfPC94c2w6dGV4dD4KLSAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3RyaW5nKEB2ZXJzaW9uKSIvPgotICAgIDx4c2w6dGV4dD4gewotICAgIGdsb2JhbDoKLTwveHNsOnRleHQ+Ci0gICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InN5bWJvbCI+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZyhwcmVjZWRpbmctc2libGluZzo6c3ltYm9sW3Bvc2l0aW9uKCk9MV0vQGZpbGUpICE9IHN0cmluZyhAZmlsZSkiPgotICAgICAgICA8eHNsOnRleHQ+Ci0jIDwveHNsOnRleHQ+Ci0gICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZmlsZSIvPgotICAgICAgICA8eHNsOnRleHQ+Ci08L3hzbDp0ZXh0PgotICAgICAgPC94c2w6aWY+Ci0KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIvPgotICAgIDwveHNsOmZvci1lYWNoPgotCi0gICAgPHhzbDp0ZXh0Pn0gPC94c2w6dGV4dD4KLSAgICA8eHNsOmlmIHRlc3Q9IiRwcmV2Ij4KLSAgICAgIDx4c2w6dGV4dD5MSUJYTUwyXzwveHNsOnRleHQ+Ci0gICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHByZXYvQHZlcnNpb24iLz4KLSAgICA8L3hzbDppZj4KLSAgICA8eHNsOnRleHQ+OwotCi08L3hzbDp0ZXh0PgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJzeW1ib2wiPgotICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibmFtZSIgc2VsZWN0PSJzdHJpbmcoLikiLz4KLSAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZpbGUiIHNlbGVjdD0ic3RyaW5nKEBmaWxlKSIvPgotICAgIDx4c2w6Y2hvb3NlPgotICAgICAgPHhzbDp3aGVuIHRlc3Q9IkByZW1vdmVkIj4KLSAgICAgICAgPHhzbDp0ZXh0PiMgPC94c2w6dGV4dD4KLSAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuYW1lIi8+Ci0gICAgICAgIDx4c2w6dGV4dD47IHJlbW92ZWQgaW4gPC94c2w6dGV4dD4KLSAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByZW1vdmVkIi8+Ci0gICAgICAgIDx4c2w6dGV4dD4KLTwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDp3aGVuPgotICAgICAgPHhzbDpvdGhlcndpc2U+Ci0gICAgICAgIDwhLS0gbWFrZSBzdXJlIHdlIGNhbiBmaW5kIHRoYXQgc3ltYm9sIGV4cG9ydGVkIGZyb20gdGhlIEFQSSBsaXN0IC0tPgotICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRlZiIKLSAgICAgICAgICAgIHNlbGVjdD0iJGFwaS9hcGkvZmlsZXMvZmlsZVtAbmFtZSA9ICRmaWxlXS9leHBvcnRzW0BzeW1ib2wgPSAkbmFtZV0iLz4KLSAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmcoJGRlZi9Ac3ltYm9sKSAhPSAkbmFtZSI+Ci0gICAgICAgICAgPHhzbDptZXNzYWdlIHRlcm1pbmF0ZT0ieWVzIj4KLSAgICAgICAgICAgIDx4c2w6dGV4dD5GYWlsZWQgdG8gZmluZCBkZWZpbml0aW9uIGluIGxpYnhtbDItYXBpLnhtbDo8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuYW1lIi8+Ci0gICAgICAgICAgPC94c2w6bWVzc2FnZT4KLSAgICAgICAgPC94c2w6aWY+Ci0KLSAgICAgICAgPHhzbDp0ZXh0PiAgPC94c2w6dGV4dD4KLSAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRuYW1lIi8+Ci0gICAgICAgIDx4c2w6dGV4dD47PC94c2w6dGV4dD4KLSAgICAgICAgPHhzbDppZiB0ZXN0PSIkZGVmL0B0eXBlID0gJ3ZhcmlhYmxlJyI+Ci0gICAgICAgICAgPHhzbDp0ZXh0PiAjIHZhcmlhYmxlPC94c2w6dGV4dD4KLSAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgIDx4c2w6aWYgdGVzdD0iQGNvbW1lbnQiPgotICAgICAgICAgIDx4c2w6dGV4dD4jIDwveHNsOnRleHQ+Ci0gICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBjb21tZW50Ii8+Ci0gICAgICAgICAgPHhzbDp0ZXh0PgotPC94c2w6dGV4dD4KLSAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgIDx4c2w6dGV4dD4KLTwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDpvdGhlcndpc2U+Ci0gICAgPC94c2w6Y2hvb3NlPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KLQpkaWZmIC0tZ2l0IGEvZG9jL3htbGNhdGFsb2cuMSBiL2RvYy94bWxjYXRhbG9nLjEKaW5kZXggNTYwNWJlYS4uMGUxYzFhZiAxMDA2NDQKLS0tIGEvZG9jL3htbGNhdGFsb2cuMQorKysgYi9kb2MveG1sY2F0YWxvZy4xCkBAIC0xLDEzICsxLDEzIEBACiAnXCIgdAogLlwiICAgICBUaXRsZTogeG1sY2F0YWxvZwogLlwiICAgIEF1dGhvcjogSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KLS5cIiBHZW5lcmF0b3I6IERvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIHYxLjc5LjEgPGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8+Ci0uXCIgICAgICBEYXRlOiAwOC8xNy8yMDIyCisuXCIgR2VuZXJhdG9yOiBEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyB2c25hcHNob3QgPGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8+CisuXCIgICAgICBEYXRlOiAxMS8wNC8yMDIzCiAuXCIgICAgTWFudWFsOiB4bWxjYXRhbG9nIE1hbnVhbAogLlwiICAgIFNvdXJjZTogbGlieG1sMgogLlwiICBMYW5ndWFnZTogRW5nbGlzaAogLlwiCi0uVEggIlhNTENBVEFMT0ciICIxIiAiMDgvMTcvMjAyMiIgImxpYnhtbDIiICJ4bWxjYXRhbG9nIE1hbnVhbCIKKy5USCAiWE1MQ0FUQUxPRyIgIjEiICIxMS8wNC8yMDIzIiAibGlieG1sMiIgInhtbGNhdGFsb2cgTWFudWFsIgogLlwiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAuXCIgKiBEZWZpbmUgc29tZSBwb3J0YWJpbGl0eSBzdHVmZgogLlwiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMSw3ICszMSw3IEBACiB4bWxjYXRhbG9nIFwtIENvbW1hbmQgbGluZSB0b29sIHRvIHBhcnNlIGFuZCBtYW5pcHVsYXRlIFhNTCBvciBTR01MIGNhdGFsb2cgZmlsZXNcJi4KIC5TSCAiU1lOT1BTSVMiCiAuSFAgXHcnXGZCeG1sY2F0YWxvZ1xmUlwgJ3UKLVxmQnhtbGNhdGFsb2dcZlIgW1xmQlwtXC1zZ21sXGZSIHwgXGZCXC1cLXNoZWxsXGZSIHwgXGZCXC1cLWNyZWF0ZVxmUiB8IFxmQlwtXC1kZWxcIFxmUlxmQlxmSVZBTFVFKFMpXGZSXGZSIHwgW1wgXGZCXC1cLWFkZFwgXGZSXGZCXGZJVFlQRVxmUlxmUlxmQlwgXGZSXGZCXGZJT1JJR1xmUlxmUlxmQlwgXGZSXGZCXGZJUkVQTEFDRVxmUlxmUlxmQlwgXGZSXCB8XCBcZkJcLVwtYWRkXCBcZlJcZkJcZklGSUxFTkFNRVxmUlxmUl0gfCBcZkJcLVwtbm9vdXRcZlIgfCBcZkJcLVwtbm9cLXN1cGVyXC11cGRhdGVcZlIgfCBbXGZCXC12XGZSXCB8XCBcZkJcLVwtdmVyYm9zZVxmUl1dIHtcZklDQVRBTE9HRklMRVxmUn0ge1xmSUVOVElUSUVTXGZSLi4ufQorXGZCeG1sY2F0YWxvZ1xmUiBbXGZCXC1cLXNnbWxcZlIgfCBcZkJcLVwtc2hlbGxcZlIgfCBcZkJcLVwtY29udmVydFxmUiB8IFxmQlwtXC1jcmVhdGVcZlIgfCBcZkJcLVwtZGVsXCBcZlJcZkJcZklWQUxVRShTKVxmUlxmUiB8IFtcIFxmQlwtXC1hZGRcIFxmUlxmQlxmSVRZUEVcZlJcZlJcZkJcIFxmUlxmQlxmSU9SSUdcZlJcZlJcZkJcIFxmUlxmQlxmSVJFUExBQ0VcZlJcZlJcZkJcIFxmUlwgfFwgXGZCXC1cLWFkZFwgXGZSXGZCXGZJRklMRU5BTUVcZlJcZlJdIHwgXGZCXC1cLW5vb3V0XGZSIHwgXGZCXC1cLW5vXC1zdXBlclwtdXBkYXRlXGZSIHwgW1xmQlwtdlxmUlwgfFwgXGZCXC1cLXZlcmJvc2VcZlJdXSB7XGZJQ0FUQUxPR0ZJTEVcZlJ9IHtcZklFTlRJVElFU1xmUi4uLn0KIC5TSCAiREVTQ1JJUFRJT04iCiAuUFAKIFxmQnhtbGNhdGFsb2dcZlIKQEAgLTkxLDYgKzkxLDExIEBACiBjYXRhbG9nIGZpbGVzXCYuCiAuUkUKIC5QUAorXGZCXC1cLWNvbnZlcnRcZlIKKy5SUyA0CitDb252ZXJ0IFNHTUwgY2F0YWxvZyB0byBYTUxcJi4KKy5SRQorLlBQCiBcZkJcLVwtY3JlYXRlXGZSCiAuUlMgNAogQ3JlYXRlIGEgbmV3CkBAIC0yNDUsOSArMjUwLDEwIEBACiBYTUwKIGNhdGFsb2cgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgcmVkaXJlY3RpbmcgcXVlcmllcyB0byB0aGUgdXNlclwqKEFxcyBvd24gc2V0IG9mIGNhdGFsb2dzXCYuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZyB0aGUKIFxmQlhNTF9DQVRBTE9HX0ZJTEVTXGZSCi1lbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHNwYWNlXC1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRhbG9nc1wmLiBVc2UgcGVyY2VudFwtZW5jb2RpbmcgdG8gZXNjYXBlIHNwYWNlcyBvciBvdGhlciBjaGFyYWN0ZXJzXCYuIEFuIGVtcHR5IHZhcmlhYmxlIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlIGRlZmF1bHQKK2Vudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc3BhY2VcLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGFsb2dzXCYuIFVzZSBwZXJjZW50XC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnNcJi4gQW4gZW1wdHkgdmFyaWFibGUgc2hvdWxkIGRlYWN0aXZhdGUgbG9hZGluZyB0aGUgZGVmYXVsdCBjYXRhbG9nIGZyb20KIC9ldGMveG1sL2NhdGFsb2cKLWNhdGFsb2dcJi4KK29yLCBtb3JlIHNwZWNpZmljYWxseSwKKyR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2dcJi4KIC5SRQogLlNIICJESUFHTk9TVElDUyIKIC5QUApkaWZmIC0tZ2l0IGEvZG9jL3htbGNhdGFsb2cuaHRtbCBiL2RvYy94bWxjYXRhbG9nLmh0bWwKaW5kZXggYWUyZWJhYi4uMDFmZjg2NCAxMDA2NDQKLS0tIGEvZG9jL3htbGNhdGFsb2cuaHRtbAorKysgYi9kb2MveG1sY2F0YWxvZy5odG1sCkBAIC0xLDE0MCArMSwxNDQgQEAKLTxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT54bWxjYXRhbG9nPC90aXRsZT48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0icmVmZW50cnkiPjxhIG5hbWU9ImlkbTEiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PjxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjxoMj5OYW1lPC9oMj48cD54bWxjYXRhbG9nICYjODIxMjsgCi0JCUNvbW1hbmQgbGluZSB0b29sIHRvIHBhcnNlIGFuZCBtYW5pcHVsYXRlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+Ci0JCW9yIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBjYXRhbG9nIGZpbGVzLgotCTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+PGgyPlN5bm9wc2lzPC9oMj48ZGl2IGNsYXNzPSJjbWRzeW5vcHNpcyI+PHA+PGNvZGUgY2xhc3M9ImNvbW1hbmQiPnhtbGNhdGFsb2c8L2NvZGU+ICBbIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2dtbDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY3JlYXRlPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVsIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlZBTFVFKFMpPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIAotCQkJWyAKLQkJCQkJPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQKLQkJCQkJIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlRZUEU8L2NvZGU+PC9lbT4KLQkJCQkJIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPk9SSUc8L2NvZGU+PC9lbT4KLQkJCQkJIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlJFUExBQ0U8L2NvZGU+PC9lbT4KLQkJCQkJPC9jb2RlPgotCQkJCSAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWRkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZJTEVOQU1FPC9jb2RlPjwvZW0+PC9jb2RlPiBdCQkKLQkJICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLXN1cGVyLXVwZGF0ZTwvY29kZT4gIHwgICAKLQkJCVsgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXY8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJib3NlPC9jb2RlPiBdCi0JCSBdIHs8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5DQVRBTE9HRklMRTwvY29kZT48L2VtPn0gezxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkVOVElUSUVTPC9jb2RlPjwvZW0+Li4ufTwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0iZGVzY3JpcHRpb24iPjwvYT48aDI+REVTQ1JJUFRJT048L2gyPjxwPgotCQk8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxjYXRhbG9nPC9zdHJvbmc+PC9zcGFuPiBpcyBhIGNvbW1hbmQgbGluZSBhcHBsaWNhdGlvbiBhbGxvd2luZyB1c2VycyB0byBtb25pdG9yIGFuZAotCQltYW5pcHVsYXRlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGFuZCA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+U0dNTDwvYWNyb255bT4gY2F0YWxvZ3MuIEl0Ci0JCWlzIGluY2x1ZGVkIGluIDxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5saWJ4bWw8L3NwYW4+KDMpPC9zcGFuPi4KLQk8L3A+PHA+Ci0JCUl0cyBmdW5jdGlvbnMgY2FuIGJlIGludm9rZWQgZnJvbSBhIHNpbmdsZSBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgbGluZSwKLQkJb3IgaXQgY2FuIHBlcmZvcm0gbXVsdGlwbGUgZnVuY3Rpb25zIGluIGludGVyYWN0aXZlIG1vZGUuIEl0IGNhbiBvcGVyYXRlCi0JCW9uIGJvdGggPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gYW5kIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBmaWxlcy4KLQk8L3A+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9Im9wdGlvbnMiPjwvYT48aDI+T1BUSU9OUzwvaDI+PHA+Ci0JCTxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGNhdGFsb2c8L3N0cm9uZz48L3NwYW4+IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zIChpbiBhbHBoYWJldGljYWwgb3JkZXIpOgotCTwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPgotCQk8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZAotCQkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VFlQRTwvY29kZT48L2VtPgotCQkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+T1JJRzwvY29kZT48L2VtPgotCQkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UkVQTEFDRTwvY29kZT48L2VtPgotCQk8L2NvZGU+Ci0JPC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJQWRkIGFuIGVudHJ5IHRvIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Q0FUQUxPR0ZJTEU8L2NvZGU+LiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5UWVBFPC9jb2RlPjwvZW0+Ci0JCQlpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgZW50cnkuIFBvc3NpYmxlIHR5cGVzIGFyZTogPHNwYW4gY2xhc3M9InNpbXBsZWxpc3QiPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdWJsaWM8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zeXN0ZW08L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXdyaXRlU3lzdGVtPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmV3cml0ZVVSSTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGVnYXRlUHVibGljPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVsZWdhdGVTeXN0ZW08L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxlZ2F0ZVVSSTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5leHRDYXRhbG9nPC9jb2RlPjwvZW0+PC9zcGFuPi4gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+T1JJRzwvY29kZT48L2VtPiBpcyB0aGUgb3JpZ2luYWwKLQkJCXJlZmVyZW5jZSB0byBiZSByZXBsYWNlZCwgYW5kIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlJFUExBQ0U8L2NvZGU+PC9lbT4KLQkJCWlzIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVJJPC9hY3JvbnltPiBvZiB0aGUgcmVwbGFjZW1lbnQgZW50aXR5IHRvIGJlCi0JCQl1c2VkLiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQ8L2NvZGU+IG9wdGlvbiB3aWxsIG5vdCBvdmVyd3JpdGUKLQkJCTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Q0FUQUxPR0ZJTEU8L2NvZGU+LCBvdXRwdXR0aW5nCi0JCQl0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4sIHVubGVzcwotCQkJPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4gaXMgdXNlZC4gVGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWRkPC9jb2RlPiB3aWxsCi0JCQlhbHdheXMgdGFrZSB0aHJlZSBwYXJhbWV0ZXJzIGV2ZW4gaWYgc29tZSBvZiB0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4KLQkJCWNhdGFsb2cgY29uc3RydWN0cyB3aWxsIGhhdmUgb25seSBhIHNpbmdsZSBhcmd1bWVudC4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlJZiB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQ8L2NvZGU+IG9wdGlvbiBpcyB1c2VkIGZvbGxvd2luZwotCQkJdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2dtbDwvY29kZT4gb3B0aW9uLCBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LAotCQkJYSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPiwgaXMgdXNlZC4gVGhpcyBpcyB1c2VkIHRvIGFkZAotCQkJdGhlIG5hbWUgb2YgYSBjYXRhbG9nIGZpbGUgdG8gYW4gPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IHN1cGVyY2F0YWxvZywKLQkJCWEgZmlsZSB0aGF0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgaW5jbHVkZWQgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+Ci0JCQljYXRhbG9nIGZpbGVzLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY3JlYXRlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCUNyZWF0ZSBhIG5ldyA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBjYXRhbG9nLiBPdXRwdXRzCi0JCQl0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4sCi0JCQlpZ25vcmluZyA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5maWxlbmFtZTwvY29kZT48L2VtPiB1bmxlc3MgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4gaXMKLQkJCXVzZWQsIGluIHdoaWNoIGNhc2UgaXQgY3JlYXRlcyBhIG5ldyBjYXRhbG9nCi0JCQlmaWxlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvZW0+LgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVsIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlZBTFVFKFMpPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVJlbW92ZSBlbnRyaWVzIGZyb20gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+Q0FUQUxPR0ZJTEU8L2NvZGU+PC9lbT4KLQkJCW1hdGNoaW5nIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlZBTFVFKFMpPC9jb2RlPjwvZW0+LiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZWw8L2NvZGU+Ci0JCQlvcHRpb24gd2lsbCBub3Qgb3ZlcndyaXRlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkNBVEFMT0dGSUxFPC9jb2RlPjwvZW0+LAotCQkJb3V0cHV0dGluZyB0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4sCi0JCQl1bmxlc3MgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4gaXMgdXNlZC4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVNhdmUgb3V0cHV0IHRvIHRoZSBuYW1lZCBmaWxlIHJhdGhlciB0aGFuIG91dHB1dHRpbmcKLQkJCXRvIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+c3Rkb3V0PC9jb2RlPi4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLXN1cGVyLXVwZGF0ZTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlEbyBub3QgdXBkYXRlIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+U0dNTDwvYWNyb255bT4gc3VwZXIgY2F0YWxvZy4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVJ1biBhIHNoZWxsIGFsbG93aW5nIGludGVyYWN0aXZlIHF1ZXJpZXMgb24gY2F0YWxvZwotCQkJZmlsZSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5DQVRBTE9HRklMRTwvY29kZT48L2VtPi4gRm9yIHRoZSBzZXQgb2YgYXZhaWxhYmxlCi0JCQljb21tYW5kcyBzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNzaGVsbCIgdGl0bGU9IlNIRUxMIENPTU1BTkRTIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1NIRUxMIENPTU1BTkRTJiM4MjIxOzwvYT4uCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZ21sPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVVzZXMgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IHN1cGVyIGNhdGFsb2dzIGZvciA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZDwvY29kZT4KLQkJCWFuZCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlbDwvY29kZT4gb3B0aW9ucy4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tdjwvY29kZT4sIDwvc3Bhbj48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJib3NlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5PdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLjwvcD48L2RkPjwvZGw+PC9kaXY+PHA+Ci0JCUludm9raW5nIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGNhdGFsb2c8L3N0cm9uZz48L3NwYW4+IG5vbi1pbnRlcmFjdGl2ZWx5IHdpdGhvdXQgYSBkZXNpZ25hdGVkIGFjdGlvbgotCQkoaW1wb3NlZCB3aXRoIG9wdGlvbnMgbGlrZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZDwvY29kZT4pIHdpbGwgcmVzdWx0IGluIGEgbG9va3VwCi0JCW9mIHRoZSBjYXRhbG9nIGVudHJ5IGZvciA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5FTlRJVElFUzwvY29kZT48L2VtPiBpbiB0aGUKLQkJY2F0YWxvZyBkZW5vdGVkIHdpdGggPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+Q0FUQUxPR0ZJTEU8L2NvZGU+PC9lbT4uIFRoZQotCQljb3JyZXNwb25kaW5nIGVudHJpZXMgd2lsbCBiZSBvdXRwdXQgdG8gdGhlIGNvbW1hbmQgbGluZS4gVGhpcyBtb2RlIG9mCi0JCW9wZXJhdGlvbiwgdG9nZXRoZXIgd2l0aCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPiBtb2RlIGFuZCBub24tbW9kaWZ5aW5nCi0JCShpLmUuIHdpdGhvdXQgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4pIGRpcmVjdCBhY3Rpb25zLCBhbGxvd3MgZm9yCi0JCWEgc3BlY2lhbCBzaG9ydGN1dCBvZiB0aGUgdm9pZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5DQVRBTE9HRklMRTwvY29kZT48L2VtPgotCQlzcGVjaWZpY2F0aW9uIChwb3NzaWJseSBleHByZXNzZWQgYXMgIiIgaW4gdGhlIHNoZWxsCi0JCWVudmlyb25tZW50KSBhcHBvaW50aW5nIHRoZSBkZWZhdWx0IHN5c3RlbSBjYXRhbG9nLiBUaGF0IHNpbXBsaWZpZXMgdGhlCi0JCWhhbmRsaW5nIHdoZW4gaXRzIGV4YWN0IGxvY2F0aW9uIGlzIGlycmVsZXZhbnQgYnV0IHRoZSByZXNwZWN0aXZlIGJ1aWx0LWluCi0JCXN0aWxsIG5lZWRzIHRvIGJlIGNvbnN1bHRlZC4KLQk8L3A+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9InNoZWxsIj48L2E+PGgyPlNIRUxMIENPTU1BTkRTPC9oMj48cD4KLQkJSW52b2tpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sY2F0YWxvZzwvc3Ryb25nPjwvc3Bhbj4gd2l0aAotCQl0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaGVsbCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5DQVRBTE9HRklMRTwvY29kZT48L2VtPjwvY29kZT4gb3B0aW9uIG9wZW5zCi0JCWEgY29tbWFuZCBsaW5lIHNoZWxsIGFsbG93aW5nIGludGVyYWN0aXZlIGFjY2VzcyB0byB0aGUgY2F0YWxvZyBmaWxlCi0JCWlkZW50aWZpZWQgYnkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+Q0FUQUxPR0ZJTEU8L2NvZGU+PC9lbT4uIEludm9raW5nIHRoZSBzaGVsbAotCQlwcm92aWRlcyBhIGNvbW1hbmQgbGluZSBwcm9tcHQgYWZ0ZXIgd2hpY2ggdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoZGVzY3JpYmVkIGluCi0JCWFscGhhYmV0aWNhbCBvcmRlcikgY2FuIGJlIGVudGVyZWQuCi0JPC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+Ci0JCTxjb2RlIGNsYXNzPSJvcHRpb24iPmFkZAotCQkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VFlQRTwvY29kZT48L2VtPgotCQkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+T1JJRzwvY29kZT48L2VtPgotCQkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UkVQTEFDRTwvY29kZT48L2VtPgotCQk8L2NvZGU+Ci0JPC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJQWRkIGFuIGVudHJ5IHRvIHRoZSBjYXRhbG9nIGZpbGUuIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlRZUEU8L2NvZGU+PC9lbT4KLQkJCWluZGljYXRlcyB0aGUgdHlwZSBvZiBlbnRyeS4gUG9zc2libGUgdHlwZXMgYXJlOiA8c3BhbiBjbGFzcz0ic2ltcGxlbGlzdCI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB1YmxpYzwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5c3RlbTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJld3JpdGVTeXN0ZW08L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXdyaXRlVVJJPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVsZWdhdGVQdWJsaWM8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxlZ2F0ZVN5c3RlbTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGVnYXRlVVJJPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV4dENhdGFsb2c8L2NvZGU+PC9lbT48L3NwYW4+LiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5PUklHPC9jb2RlPjwvZW0+IGlzIHRoZSBvcmlnaW5hbAotCQkJcmVmZXJlbmNlIHRvIGJlIHJlcGxhY2VkLCBhbmQgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UkVQTEFDRTwvY29kZT48L2VtPgotCQkJaXMgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VUkk8L2Fjcm9ueW0+IG9mIHRoZSByZXBsYWNlbWVudCBlbnRpdHkgdG8gYmUKLQkJCXVzZWQuIFRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZDwvY29kZT4gb3B0aW9uIHdpbGwgbm90IG92ZXJ3cml0ZQotCQkJPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5DQVRBTE9HRklMRTwvY29kZT4sIG91dHB1dHRpbmcKLQkJCXRvIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+c3Rkb3V0PC9jb2RlPiwgdW5sZXNzCi0JCQk8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPiBpcyB1c2VkLiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQ8L2NvZGU+IHdpbGwKLQkJCWFsd2F5cyB0YWtlIHRocmVlIHBhcmFtZXRlcnMgZXZlbiBpZiBzb21lIG9mIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPgotCQkJY2F0YWxvZyBjb25zdHJ1Y3RzIHdpbGwgaGF2ZSBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPmRlYnVnPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVByaW50IGRlYnVnZ2luZyBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHN0ZXBzIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGNhdGFsb2c8L3N0cm9uZz48L3NwYW4+IGlzIGV4ZWN1dGluZy4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj5kZWwgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VkFMVUUoUyk8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJUmVtb3ZlIHRoZSBjYXRhbG9nIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VkFMVUUoUyk8L2NvZGU+PC9lbT4uCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+ZHVtcDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UHJpbnQgdGhlIGN1cnJlbnQgY2F0YWxvZy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPmV4aXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlF1aXQgdGhlIHNoZWxsLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+cHVibGljIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBVQkxJQy1JRDwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlFeGVjdXRlIGEgRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyIGxvb2t1cCBvZiB0aGUgY2F0YWxvZyBlbnRyeQotCQkJZm9yIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBVQkxJQy1JRDwvY29kZT48L2VtPi4gVGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgd2lsbCBiZQotCQkJb3V0cHV0IHRvIHRoZSBjb21tYW5kIGxpbmUuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+cXVpZXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlN0b3AgcHJpbnRpbmcgZGVidWdnaW5nIHN0YXRlbWVudHMuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj5zeXN0ZW0gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+U1lTVEVNLUlEPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCUV4ZWN1dGUgYSBGb3JtYWwgUHVibGljIElkZW50aWZpZXIgbG9va3VwIG9mIHRoZSBjYXRhbG9nIGVudHJ5Ci0JCQlmb3IgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+U1lTVEVNLUlEPC9jb2RlPjwvZW0+LiBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSB3aWxsIGJlCi0JCQlvdXRwdXQgdG8gdGhlIGNvbW1hbmQgbGluZS4KLQkJPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0iZW52aXJvbm1lbnQiPjwvYT48aDI+RU5WSVJPTk1FTlQ8L2gyPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImVudmFyIj5YTUxfQ0FUQUxPR19GSUxFUzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+PGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZwotCQkJcXVlcmllcyB0byB0aGUgdXNlcidzIG93biBzZXQgb2YgY2F0YWxvZ3MuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZwotCQkJdGhlIDxjb2RlIGNsYXNzPSJlbnZhciI+WE1MX0NBVEFMT0dfRklMRVM8L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc3BhY2Utc2VwYXJhdGVkCi0JCQlsaXN0IG9mIGNhdGFsb2dzLiBVc2UgcGVyY2VudC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMuCi0JCQlBbiBlbXB0eSB2YXJpYWJsZSBzaG91bGQgZGVhY3RpdmF0ZSBsb2FkaW5nIHRoZSBkZWZhdWx0IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2V0Yy94bWwvY2F0YWxvZzwvY29kZT4gY2F0YWxvZy4KLQkJPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0iZGlhZ25vc3RpY3MiPjwvYT48aDI+RElBR05PU1RJQ1M8L2gyPjxwPgotCQk8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxjYXRhbG9nPC9zdHJvbmc+PC9zcGFuPiByZXR1cm4gY29kZXMgcHJvdmlkZSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdoZW4KLQkJY2FsbGluZyBpdCBmcm9tIHNjcmlwdHMuCi0JPC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVycm9yY29kZSI+MDwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+Tm8gZXJyb3I8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjE8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkZhaWxlZCB0byByZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgY2F0YWxvZzwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVycm9yY29kZSI+Mjwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+RmFpbGVkIHRvIHNhdmUgdG8gdGhlIGNhdGFsb2csIGNoZWNrIGZpbGUgcGVybWlzc2lvbnM8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjM8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkZhaWxlZCB0byBhZGQgYW4gZW50cnkgdG8gdGhlIGNhdGFsb2c8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjQ8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkZhaWxlZCB0byBsb29rIHVwIGFuIGVudHJ5IGluIHRoZSBjYXRhbG9nPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0ic2VlYWxzbyI+PC9hPjxoMj5TRUUgQUxTTzwvaDI+PHA+PHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+Ci0JPC9wPjxwPgotCQlNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBhdAotCQk8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48c3BhbiBjbGFzcz0iY2l0ZXJlZmVudHJ5Ij48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+bGlieG1sPC9zcGFuPigzKTwvc3Bhbj4gd2ViIHBhZ2UgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMiIgdGFyZ2V0PSJfdG9wIj5odHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMjwvYT4KLQkJCQk8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48c3BhbiBjbGFzcz0iY2l0ZXJlZmVudHJ5Ij48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+bGlieG1sPC9zcGFuPigzKTwvc3Bhbj4gY2F0YWxvZyBzdXBwb3J0IHdlYiBwYWdlCi0JCQkJCWF0IDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIvLS93aWtpcy9DYXRhbG9nLXN1cHBvcnQiIHRhcmdldD0iX3RvcCI+aHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIvLS93aWtpcy9DYXRhbG9nLXN1cHBvcnQ8L2E+Ci0JCQkJPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+SmFtZXMgQ2xhcmsncyA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+U0dNTDwvYWNyb255bT4gY2F0YWxvZwotCQkJCQlwYWdlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5qY2xhcmsuY29tL3NwL2NhdGFsb2cuaHRtIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuamNsYXJrLmNvbS9zcC9jYXRhbG9nLmh0bTwvYT4KLQkJCQk8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48YWNyb255bSBjbGFzcz0iYWNyb255bSI+T0FTSVM8L2Fjcm9ueW0+IDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGNhdGFsb2cgc3BlY2lmaWNhdGlvbgotCQkJCQk8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvc3BlYy5odG1sIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvc3BlYy5odG1sPC9hPgotCQkJCTwvcD48L2xpPjwvdWw+PC9kaXY+PHA+Ci0JPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+Cis8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj48dGl0bGU+eG1sY2F0YWxvZzwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWc25hcHNob3QiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0icmVmZW50cnkiPjxhIG5hbWU9ImlkbTEiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PjxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjxoMj5OYW1lPC9oMj48cD54bWxjYXRhbG9nICYjODIxMjsgCisgICAgICAgIENvbW1hbmQgbGluZSB0b29sIHRvIHBhcnNlIGFuZCBtYW5pcHVsYXRlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+CisgICAgICAgIG9yIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBjYXRhbG9nIGZpbGVzLgorICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+PGgyPlN5bm9wc2lzPC9oMj48ZGl2IGNsYXNzPSJjbWRzeW5vcHNpcyI+PHA+PGNvZGUgY2xhc3M9ImNvbW1hbmQiPnhtbGNhdGFsb2c8L2NvZGU+ICBbIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2dtbDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY29udmVydDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNyZWF0ZTwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlbCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5WQUxVRShTKTwvY29kZT48L2VtPjwvY29kZT4gIHwgICAKKyAgICAgICAgICAgIFsgCisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWRkCisgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5UWVBFPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5PUklHPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5SRVBMQUNFPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICAgIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPjwvY29kZT4gXQorICAgICAgICAgIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm8tc3VwZXItdXBkYXRlPC9jb2RlPiAgfCAgIAorICAgICAgICAgICAgWyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tdjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2U8L2NvZGU+IF0KKyAgICAgICAgIF0gezxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkNBVEFMT0dGSUxFPC9jb2RlPjwvZW0+fSB7PGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RU5USVRJRVM8L2NvZGU+PC9lbT4uLi59PC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJlZnNlY3QxIj48YSBuYW1lPSJkZXNjcmlwdGlvbiI+PC9hPjxoMj5ERVNDUklQVElPTjwvaDI+PHA+CisgICAgICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGNhdGFsb2c8L3N0cm9uZz48L3NwYW4+IGlzIGEgY29tbWFuZCBsaW5lIGFwcGxpY2F0aW9uIGFsbG93aW5nIHVzZXJzIHRvIG1vbml0b3IgYW5kCisgICAgICAgIG1hbmlwdWxhdGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gYW5kIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBjYXRhbG9ncy4gSXQKKyAgICAgICAgaXMgaW5jbHVkZWQgaW4gPHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+LgorICAgIDwvcD48cD4KKyAgICAgICAgSXRzIGZ1bmN0aW9ucyBjYW4gYmUgaW52b2tlZCBmcm9tIGEgc2luZ2xlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgICBvciBpdCBjYW4gcGVyZm9ybSBtdWx0aXBsZSBmdW5jdGlvbnMgaW4gaW50ZXJhY3RpdmUgbW9kZS4gSXQgY2FuIG9wZXJhdGUKKyAgICAgICAgb24gYm90aCA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBhbmQgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IGZpbGVzLgorICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0ib3B0aW9ucyI+PC9hPjxoMj5PUFRJT05TPC9oMj48cD4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sY2F0YWxvZzwvc3Ryb25nPjwvc3Bhbj4gYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6CisgICAgPC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQKKyAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VFlQRTwvY29kZT48L2VtPgorICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5PUklHPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlJFUExBQ0U8L2NvZGU+PC9lbT4KKyAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICA8L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIEFkZCBhbiBlbnRyeSB0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPkNBVEFMT0dGSUxFPC9jb2RlPi4gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VFlQRTwvY29kZT48L2VtPgorICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgZW50cnkuIFBvc3NpYmxlIHR5cGVzIGFyZTogPHNwYW4gY2xhc3M9InNpbXBsZWxpc3QiPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdWJsaWM8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zeXN0ZW08L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXdyaXRlU3lzdGVtPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmV3cml0ZVVSSTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGVnYXRlUHVibGljPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVsZWdhdGVTeXN0ZW08L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxlZ2F0ZVVSSTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5leHRDYXRhbG9nPC9jb2RlPjwvZW0+PC9zcGFuPi4gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+T1JJRzwvY29kZT48L2VtPiBpcyB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRvIGJlIHJlcGxhY2VkLCBhbmQgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UkVQTEFDRTwvY29kZT48L2VtPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlVSSTwvYWNyb255bT4gb2YgdGhlIHJlcGxhY2VtZW50IGVudGl0eSB0byBiZQorICAgICAgICAgICAgICAgICAgICB1c2VkLiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQ8L2NvZGU+IG9wdGlvbiB3aWxsIG5vdCBvdmVyd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5DQVRBTE9HRklMRTwvY29kZT4sIG91dHB1dHRpbmcKKyAgICAgICAgICAgICAgICAgICAgdG8gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5zdGRvdXQ8L2NvZGU+LCB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4gaXMgdXNlZC4gVGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWRkPC9jb2RlPiB3aWxsCisgICAgICAgICAgICAgICAgICAgIGFsd2F5cyB0YWtlIHRocmVlIHBhcmFtZXRlcnMgZXZlbiBpZiBzb21lIG9mIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPgorICAgICAgICAgICAgICAgICAgICBjYXRhbG9nIGNvbnN0cnVjdHMgd2lsbCBoYXZlIG9ubHkgYSBzaW5nbGUgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZDwvY29kZT4gb3B0aW9uIGlzIHVzZWQgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNnbWw8L2NvZGU+IG9wdGlvbiwgb25seSBhIHNpbmdsZSBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgYSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPiwgaXMgdXNlZC4gVGhpcyBpcyB1c2VkIHRvIGFkZAorICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiBhIGNhdGFsb2cgZmlsZSB0byBhbiA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+U0dNTDwvYWNyb255bT4gc3VwZXJjYXRhbG9nLAorICAgICAgICAgICAgICAgICAgICBhIGZpbGUgdGhhdCBjb250YWlucyByZWZlcmVuY2VzIHRvIG90aGVyIGluY2x1ZGVkIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPgorICAgICAgICAgICAgICAgICAgICBjYXRhbG9nIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jb252ZXJ0PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgQ29udmVydCBTR01MIGNhdGFsb2cgdG8gWE1MLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jcmVhdGU8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgYSBuZXcgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gY2F0YWxvZy4gT3V0cHV0cworICAgICAgICAgICAgICAgICAgICB0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIGlnbm9yaW5nIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvZW0+IHVubGVzcyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPiBpcworICAgICAgICAgICAgICAgICAgICB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IGNyZWF0ZXMgYSBuZXcgY2F0YWxvZworICAgICAgICAgICAgICAgICAgICBmaWxlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvZW0+LgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZWwgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VkFMVUUoUyk8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmUgZW50cmllcyBmcm9tIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkNBVEFMT0dGSUxFPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlZBTFVFKFMpPC9jb2RlPjwvZW0+LiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZWw8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiB3aWxsIG5vdCBvdmVyd3JpdGUgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+Q0FUQUxPR0ZJTEU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgIG91dHB1dHRpbmcgdG8gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5zdGRvdXQ8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICB1bmxlc3MgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub291dDwvY29kZT4gaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9vdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBTYXZlIG91dHB1dCB0byB0aGUgbmFtZWQgZmlsZSByYXRoZXIgdGhhbiBvdXRwdXR0aW5nCisgICAgICAgICAgICAgICAgICAgIHRvIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+c3Rkb3V0PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm8tc3VwZXItdXBkYXRlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IHVwZGF0ZSB0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IHN1cGVyIGNhdGFsb2cuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgUnVuIGEgc2hlbGwgYWxsb3dpbmcgaW50ZXJhY3RpdmUgcXVlcmllcyBvbiBjYXRhbG9nCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+Q0FUQUxPR0ZJTEU8L2NvZGU+PC9lbT4uIEZvciB0aGUgc2V0IG9mIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kcyBzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNzaGVsbCIgdGl0bGU9IlNIRUxMIENPTU1BTkRTIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1NIRUxMIENPTU1BTkRTJiM4MjIxOzwvYT4uCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNnbWw8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBVc2VzIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBzdXBlciBjYXRhbG9ncyBmb3IgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQ8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlbDwvY29kZT4gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi12PC9jb2RlPiwgPC9zcGFuPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2U8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPk91dHB1dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uPC9wPjwvZGQ+PC9kbD48L2Rpdj48cD4KKyAgICAgICAgSW52b2tpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sY2F0YWxvZzwvc3Ryb25nPjwvc3Bhbj4gbm9uLWludGVyYWN0aXZlbHkgd2l0aG91dCBhIGRlc2lnbmF0ZWQgYWN0aW9uCisgICAgICAgIChpbXBvc2VkIHdpdGggb3B0aW9ucyBsaWtlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWRkPC9jb2RlPikgd2lsbCByZXN1bHQgaW4gYSBsb29rdXAKKyAgICAgICAgb2YgdGhlIGNhdGFsb2cgZW50cnkgZm9yIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkVOVElUSUVTPC9jb2RlPjwvZW0+IGluIHRoZQorICAgICAgICBjYXRhbG9nIGRlbm90ZWQgd2l0aCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5DQVRBTE9HRklMRTwvY29kZT48L2VtPi4gVGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgZW50cmllcyB3aWxsIGJlIG91dHB1dCB0byB0aGUgY29tbWFuZCBsaW5lLiBUaGlzIG1vZGUgb2YKKyAgICAgICAgb3BlcmF0aW9uLCB0b2dldGhlciB3aXRoIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2hlbGw8L2NvZGU+IG1vZGUgYW5kIG5vbi1tb2RpZnlpbmcKKyAgICAgICAgKGkuZS4gd2l0aG91dCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPikgZGlyZWN0IGFjdGlvbnMsIGFsbG93cyBmb3IKKyAgICAgICAgYSBzcGVjaWFsIHNob3J0Y3V0IG9mIHRoZSB2b2lkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkNBVEFMT0dGSUxFPC9jb2RlPjwvZW0+CisgICAgICAgIHNwZWNpZmljYXRpb24gKHBvc3NpYmx5IGV4cHJlc3NlZCBhcyAiIiBpbiB0aGUgc2hlbGwKKyAgICAgICAgZW52aXJvbm1lbnQpIGFwcG9pbnRpbmcgdGhlIGRlZmF1bHQgc3lzdGVtIGNhdGFsb2cuIFRoYXQgc2ltcGxpZmllcyB0aGUKKyAgICAgICAgaGFuZGxpbmcgd2hlbiBpdHMgZXhhY3QgbG9jYXRpb24gaXMgaXJyZWxldmFudCBidXQgdGhlIHJlc3BlY3RpdmUgYnVpbHQtaW4KKyAgICAgICAgc3RpbGwgbmVlZHMgdG8gYmUgY29uc3VsdGVkLgorICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0ic2hlbGwiPjwvYT48aDI+U0hFTEwgQ09NTUFORFM8L2gyPjxwPgorICAgICAgICBJbnZva2luZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxjYXRhbG9nPC9zdHJvbmc+PC9zcGFuPiB3aXRoCisgICAgICAgIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkNBVEFMT0dGSUxFPC9jb2RlPjwvZW0+PC9jb2RlPiBvcHRpb24gb3BlbnMKKyAgICAgICAgYSBjb21tYW5kIGxpbmUgc2hlbGwgYWxsb3dpbmcgaW50ZXJhY3RpdmUgYWNjZXNzIHRvIHRoZSBjYXRhbG9nIGZpbGUKKyAgICAgICAgaWRlbnRpZmllZCBieSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5DQVRBTE9HRklMRTwvY29kZT48L2VtPi4gSW52b2tpbmcgdGhlIHNoZWxsCisgICAgICAgIHByb3ZpZGVzIGEgY29tbWFuZCBsaW5lIHByb21wdCBhZnRlciB3aGljaCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChkZXNjcmliZWQgaW4KKyAgICAgICAgYWxwaGFiZXRpY2FsIG9yZGVyKSBjYW4gYmUgZW50ZXJlZC4KKyAgICA8L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5hZGQKKyAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VFlQRTwvY29kZT48L2VtPgorICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5PUklHPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlJFUExBQ0U8L2NvZGU+PC9lbT4KKyAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICA8L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIEFkZCBhbiBlbnRyeSB0byB0aGUgY2F0YWxvZyBmaWxlLiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5UWVBFPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB0aGUgdHlwZSBvZiBlbnRyeS4gUG9zc2libGUgdHlwZXMgYXJlOiA8c3BhbiBjbGFzcz0ic2ltcGxlbGlzdCI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB1YmxpYzwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5c3RlbTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJld3JpdGVTeXN0ZW08L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXdyaXRlVVJJPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVsZWdhdGVQdWJsaWM8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxlZ2F0ZVN5c3RlbTwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGVnYXRlVVJJPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV4dENhdGFsb2c8L2NvZGU+PC9lbT48L3NwYW4+LiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5PUklHPC9jb2RlPjwvZW0+IGlzIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgdG8gYmUgcmVwbGFjZWQsIGFuZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5SRVBMQUNFPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVJJPC9hY3JvbnltPiBvZiB0aGUgcmVwbGFjZW1lbnQgZW50aXR5IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIHVzZWQuIFRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFkZDwvY29kZT4gb3B0aW9uIHdpbGwgbm90IG92ZXJ3cml0ZQorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPkNBVEFMT0dGSUxFPC9jb2RlPiwgb3V0cHV0dGluZworICAgICAgICAgICAgICAgICAgICB0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4sIHVubGVzcworICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPiBpcyB1c2VkLiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hZGQ8L2NvZGU+IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgYWx3YXlzIHRha2UgdGhyZWUgcGFyYW1ldGVycyBldmVuIGlmIHNvbWUgb2YgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+CisgICAgICAgICAgICAgICAgICAgIGNhdGFsb2cgY29uc3RydWN0cyB3aWxsIGhhdmUgb25seSBhIHNpbmdsZSBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPmRlYnVnPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgUHJpbnQgZGVidWdnaW5nIHN0YXRlbWVudHMgc2hvd2luZyB0aGUgc3RlcHMgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sY2F0YWxvZzwvc3Ryb25nPjwvc3Bhbj4gaXMgZXhlY3V0aW5nLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+ZGVsIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlZBTFVFKFMpPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIHRoZSBjYXRhbG9nIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+VkFMVUUoUyk8L2NvZGU+PC9lbT4uCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj5kdW1wPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5QcmludCB0aGUgY3VycmVudCBjYXRhbG9nLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXhpdDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UXVpdCB0aGUgc2hlbGwuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj5wdWJsaWMgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UFVCTElDLUlEPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSBhIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllciBsb29rdXAgb2YgdGhlIGNhdGFsb2cgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgZm9yIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBVQkxJQy1JRDwvY29kZT48L2VtPi4gVGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPnF1aWV0PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5TdG9wIHByaW50aW5nIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+c3lzdGVtIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlNZU1RFTS1JRDwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgYSBGb3JtYWwgUHVibGljIElkZW50aWZpZXIgbG9va3VwIG9mIHRoZSBjYXRhbG9nIGVudHJ5CisgICAgICAgICAgICAgICAgICAgIGZvciA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5TWVNURU0tSUQ8L2NvZGU+PC9lbT4uIFRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHRvIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0iZW52aXJvbm1lbnQiPjwvYT48aDI+RU5WSVJPTk1FTlQ8L2gyPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImVudmFyIj5YTUxfQ0FUQUxPR19GSUxFUzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+PGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZworICAgICAgICAgICAgICAgICAgICBxdWVyaWVzIHRvIHRoZSB1c2VyJ3Mgb3duIHNldCBvZiBjYXRhbG9ncy4gVGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8Y29kZSBjbGFzcz0iZW52YXIiPlhNTF9DQVRBTE9HX0ZJTEVTPC9jb2RlPiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHNwYWNlLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICBsaXN0IG9mIGNhdGFsb2dzLiBVc2UgcGVyY2VudC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAgIEFuIGVtcHR5IHZhcmlhYmxlIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlIGRlZmF1bHQgY2F0YWxvZyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2V0Yy94bWwvY2F0YWxvZzwvY29kZT4gb3IsIG1vcmUgc3BlY2lmaWNhbGx5LAorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2c8L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjwvZGw+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9ImRpYWdub3N0aWNzIj48L2E+PGgyPkRJQUdOT1NUSUNTPC9oMj48cD4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sY2F0YWxvZzwvc3Ryb25nPjwvc3Bhbj4gcmV0dXJuIGNvZGVzIHByb3ZpZGUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCB3aGVuCisgICAgICAgIGNhbGxpbmcgaXQgZnJvbSBzY3JpcHRzLgorICAgIDwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjA8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPk5vIGVycm9yPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj4xPC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5GYWlsZWQgdG8gcmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGNhdGFsb2c8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjI8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkZhaWxlZCB0byBzYXZlIHRvIHRoZSBjYXRhbG9nLCBjaGVjayBmaWxlIHBlcm1pc3Npb25zPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj4zPC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5GYWlsZWQgdG8gYWRkIGFuIGVudHJ5IHRvIHRoZSBjYXRhbG9nPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj40PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5GYWlsZWQgdG8gbG9vayB1cCBhbiBlbnRyeSBpbiB0aGUgY2F0YWxvZzwvcD48L2RkPjwvZGw+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9InNlZWFsc28iPjwvYT48aDI+U0VFIEFMU088L2gyPjxwPjxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5saWJ4bWw8L3NwYW4+KDMpPC9zcGFuPgorICAgIDwvcD48cD4KKyAgICAgICAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+IHdlYiBwYWdlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIiIHRhcmdldD0iX3RvcCI+aHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDI8L2E+CisgICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+IGNhdGFsb2cgc3VwcG9ydCB3ZWIgcGFnZQorICAgICAgICAgICAgICAgICAgICBhdCA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9saWJ4bWwyLy0vd2lraXMvQ2F0YWxvZy1zdXBwb3J0IiB0YXJnZXQ9Il90b3AiPmh0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9saWJ4bWwyLy0vd2lraXMvQ2F0YWxvZy1zdXBwb3J0PC9hPgorICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkphbWVzIENsYXJrJ3MgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cKKyAgICAgICAgICAgICAgICAgICAgcGFnZSA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuamNsYXJrLmNvbS9zcC9jYXRhbG9nLmh0bSIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmpjbGFyay5jb20vc3AvY2F0YWxvZy5odG08L2E+CisgICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPk9BU0lTPC9hY3JvbnltPiA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBjYXRhbG9nIHNwZWNpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3NwZWMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3NwZWMuaHRtbDwvYT4KKyAgICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgorICAgIDwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL3htbGNhdGFsb2cueG1sIGIvZG9jL3htbGNhdGFsb2cueG1sCmluZGV4IDVkOTRiM2IuLmJkM2Y2ODIgMTAwNjQ0Ci0tLSBhL2RvYy94bWxjYXRhbG9nLnhtbAorKysgYi9kb2MveG1sY2F0YWxvZy54bWwKQEAgLTEwLDQ1NCArMTAsNDY2IEBACiA8cmVmZW50cnk+CiAKIDxyZWZlbnRyeWluZm8+Ci0JPHRpdGxlPnhtbGNhdGFsb2cgTWFudWFsPC90aXRsZT4KLQk8cHJvZHVjdG5hbWU+bGlieG1sMjwvcHJvZHVjdG5hbWU+Ci0JPGNvcHlyaWdodD4KLQkJPHllYXI+MjAwMTwveWVhcj4KLQkJPHllYXI+MjAwNDwveWVhcj4KLQk8L2NvcHlyaWdodD4KLQk8YXV0aG9yPgotCQk8Zmlyc3RuYW1lPkpvaG48L2ZpcnN0bmFtZT4KLQkJPHN1cm5hbWU+RmxlY2s8L3N1cm5hbWU+Ci0JCTxhZmZpbGlhdGlvbj4KLQkJCTxhZGRyZXNzPgotCQkJCTxlbWFpbD5qZmxlY2tAaW5rc3RhaW4ubmV0PC9lbWFpbD4KLQkJCTwvYWRkcmVzcz4KLQkJPC9hZmZpbGlhdGlvbj4KLQk8L2F1dGhvcj4KLQk8IS0tIHN0aWxsIGEgYml0IGJ1Z2d5IG91dHB1dCwgd2lsbCB0YWxrIHRvIGRvY2Jvb2steHNsIHVwc3RyZWFtIHRvIGZpeCB0aGlzIC0tPgotCTwhLS0gPHJlbGVhc2VpbmZvPlRoaXMgaXMgcmVsZWFzZSAwLjMgb2YgdGhlIHhtbGNhdGFsb2cgTWFudWFsLjwvcmVsZWFzZWluZm8+IC0tPgotCTwhLS0gPGVkaXRpb24+MC4zPC9lZGl0aW9uPiAtLT4KKyAgICA8dGl0bGU+eG1sY2F0YWxvZyBNYW51YWw8L3RpdGxlPgorICAgIDxwcm9kdWN0bmFtZT5saWJ4bWwyPC9wcm9kdWN0bmFtZT4KKyAgICA8Y29weXJpZ2h0PgorICAgICAgICA8eWVhcj4yMDAxPC95ZWFyPgorICAgICAgICA8eWVhcj4yMDA0PC95ZWFyPgorICAgIDwvY29weXJpZ2h0PgorICAgIDxhdXRob3I+CisgICAgICAgIDxmaXJzdG5hbWU+Sm9objwvZmlyc3RuYW1lPgorICAgICAgICA8c3VybmFtZT5GbGVjazwvc3VybmFtZT4KKyAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgPGFkZHJlc3M+CisgICAgICAgICAgICAgICAgPGVtYWlsPmpmbGVja0BpbmtzdGFpbi5uZXQ8L2VtYWlsPgorICAgICAgICAgICAgPC9hZGRyZXNzPgorICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgIDwvYXV0aG9yPgorICAgIDwhLS0gc3RpbGwgYSBiaXQgYnVnZ3kgb3V0cHV0LCB3aWxsIHRhbGsgdG8gZG9jYm9vay14c2wgdXBzdHJlYW0gdG8gZml4IHRoaXMgLS0+CisgICAgPCEtLSA8cmVsZWFzZWluZm8+VGhpcyBpcyByZWxlYXNlIDAuMyBvZiB0aGUgeG1sY2F0YWxvZyBNYW51YWwuPC9yZWxlYXNlaW5mbz4gLS0+CisgICAgPCEtLSA8ZWRpdGlvbj4wLjM8L2VkaXRpb24+IC0tPgogPC9yZWZlbnRyeWluZm8+CiAKIDxyZWZtZXRhPgotCTxyZWZlbnRyeXRpdGxlPnhtbGNhdGFsb2c8L3JlZmVudHJ5dGl0bGU+Ci0JPG1hbnZvbG51bT4xPC9tYW52b2xudW0+CisgICAgPHJlZmVudHJ5dGl0bGU+eG1sY2F0YWxvZzwvcmVmZW50cnl0aXRsZT4KKyAgICA8bWFudm9sbnVtPjE8L21hbnZvbG51bT4KIDwvcmVmbWV0YT4KIAogPHJlZm5hbWVkaXY+Ci0JPHJlZm5hbWU+eG1sY2F0YWxvZzwvcmVmbmFtZT4KLQk8cmVmcHVycG9zZT4KLQkJQ29tbWFuZCBsaW5lIHRvb2wgdG8gcGFyc2UgYW5kIG1hbmlwdWxhdGUgPGFjcm9ueW0+WE1MPC9hY3JvbnltPgotCQlvciA8YWNyb255bT5TR01MPC9hY3JvbnltPiBjYXRhbG9nIGZpbGVzLgotCTwvcmVmcHVycG9zZT4KKyAgICA8cmVmbmFtZT54bWxjYXRhbG9nPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPgorICAgICAgICBDb21tYW5kIGxpbmUgdG9vbCB0byBwYXJzZSBhbmQgbWFuaXB1bGF0ZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+CisgICAgICAgIG9yIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cgZmlsZXMuCisgICAgPC9yZWZwdXJwb3NlPgogPC9yZWZuYW1lZGl2PgogCiA8cmVmc3lub3BzaXNkaXY+Ci0JPGNtZHN5bm9wc2lzPgotCTxjb21tYW5kPnhtbGNhdGFsb2c8L2NvbW1hbmQ+Ci0JPGdyb3VwIGNob2ljZT0ib3B0Ij4KLQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tc2dtbDwvb3B0aW9uPjwvYXJnPgotCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPjwvYXJnPgotCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj48L2FyZz4KLQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZGVsIDxyZXBsYWNlYWJsZT5WQUxVRShTKTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+Ci0JCTxhcmcgY2hvaWNlPSJwbGFpbiI+Ci0JCQk8Z3JvdXAgY2hvaWNlPSJvcHQiPgotCQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+Ci0JCQkJCTxvcHRpb24+LS1hZGQKLQkJCQkJIDxyZXBsYWNlYWJsZT5UWVBFPC9yZXBsYWNlYWJsZT4KLQkJCQkJIDxyZXBsYWNlYWJsZT5PUklHPC9yZXBsYWNlYWJsZT4KLQkJCQkJIDxyZXBsYWNlYWJsZT5SRVBMQUNFPC9yZXBsYWNlYWJsZT4KLQkJCQkJPC9vcHRpb24+Ci0JCQkJPC9hcmc+Ci0JCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tYWRkIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+Ci0JCQk8L2dyb3VwPgkJCi0JCTwvYXJnPgotCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1ub291dDwvb3B0aW9uPjwvYXJnPgotCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1uby1zdXBlci11cGRhdGU8L29wdGlvbj48L2FyZz4KLQkJPGFyZyBjaG9pY2U9InBsYWluIj4KLQkJCTxncm91cCBjaG9pY2U9Im9wdCI+Ci0JCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi12PC9vcHRpb24+PC9hcmc+Ci0JCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tdmVyYm9zZTwvb3B0aW9uPjwvYXJnPgotCQkJPC9ncm91cD4KLQkJPC9hcmc+Ci0JPC9ncm91cD4KLQk8YXJnIGNob2ljZT0icmVxIiByZXA9Im5vcmVwZWF0Ij48cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPjwvYXJnPgotCTxhcmcgY2hvaWNlPSJyZXEiIHJlcD0icmVwZWF0Ij48cmVwbGFjZWFibGU+RU5USVRJRVM8L3JlcGxhY2VhYmxlPjwvYXJnPgotCTwvY21kc3lub3BzaXM+CisgICAgPGNtZHN5bm9wc2lzPgorICAgIDxjb21tYW5kPnhtbGNhdGFsb2c8L2NvbW1hbmQ+CisgICAgPGdyb3VwIGNob2ljZT0ib3B0Ij4KKyAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tc2dtbDwvb3B0aW9uPjwvYXJnPgorICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPjwvYXJnPgorICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1jb252ZXJ0PC9vcHRpb24+PC9hcmc+CisgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPjwvYXJnPgorICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kZWwgPHJlcGxhY2VhYmxlPlZBTFVFKFMpPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L2FyZz4KKyAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj4KKyAgICAgICAgICAgIDxncm91cCBjaG9pY2U9Im9wdCI+CisgICAgICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj4KKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLWFkZAorICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlRZUEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPk9SSUc8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlJFUExBQ0U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICAgICAgICA8L2FyZz4KKyAgICAgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1hZGQgPHJlcGxhY2VhYmxlPkZJTEVOQU1FPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDwvZ3JvdXA+CisgICAgICAgIDwvYXJnPgorICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1ub291dDwvb3B0aW9uPjwvYXJnPgorICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1uby1zdXBlci11cGRhdGU8L29wdGlvbj48L2FyZz4KKyAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj4KKyAgICAgICAgICAgIDxncm91cCBjaG9pY2U9Im9wdCI+CisgICAgICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi12PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tdmVyYm9zZTwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPC9ncm91cD4KKyAgICAgICAgPC9hcmc+CisgICAgPC9ncm91cD4KKyAgICA8YXJnIGNob2ljZT0icmVxIiByZXA9Im5vcmVwZWF0Ij48cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPjwvYXJnPgorICAgIDxhcmcgY2hvaWNlPSJyZXEiIHJlcD0icmVwZWF0Ij48cmVwbGFjZWFibGU+RU5USVRJRVM8L3JlcGxhY2VhYmxlPjwvYXJnPgorICAgIDwvY21kc3lub3BzaXM+CiA8L3JlZnN5bm9wc2lzZGl2PgogCiA8cmVmc2VjdDEgaWQ9ImRlc2NyaXB0aW9uIj4KLQk8dGl0bGU+REVTQ1JJUFRJT048L3RpdGxlPgotCTxwYXJhPgotCQkmeG1sY2F0YWxvZzsgaXMgYSBjb21tYW5kIGxpbmUgYXBwbGljYXRpb24gYWxsb3dpbmcgdXNlcnMgdG8gbW9uaXRvciBhbmQKLQkJbWFuaXB1bGF0ZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGFuZCA8YWNyb255bT5TR01MPC9hY3JvbnltPiBjYXRhbG9ncy4gSXQKLQkJaXMgaW5jbHVkZWQgaW4gPGNpdGVyZWZlbnRyeT4KLQkJCTxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KLQkJCTxtYW52b2xudW0+MzwvbWFudm9sbnVtPgotCQk8L2NpdGVyZWZlbnRyeT4uCi0JPC9wYXJhPgotCTxwYXJhPgotCQlJdHMgZnVuY3Rpb25zIGNhbiBiZSBpbnZva2VkIGZyb20gYSBzaW5nbGUgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsCi0JCW9yIGl0IGNhbiBwZXJmb3JtIG11bHRpcGxlIGZ1bmN0aW9ucyBpbiBpbnRlcmFjdGl2ZSBtb2RlLiBJdCBjYW4gb3BlcmF0ZQotCQlvbiBib3RoIDxhY3JvbnltPlhNTDwvYWNyb255bT4gYW5kIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IGZpbGVzLgotCTwvcGFyYT4KKyAgICA8dGl0bGU+REVTQ1JJUFRJT048L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICAmeG1sY2F0YWxvZzsgaXMgYSBjb21tYW5kIGxpbmUgYXBwbGljYXRpb24gYWxsb3dpbmcgdXNlcnMgdG8gbW9uaXRvciBhbmQKKyAgICAgICAgbWFuaXB1bGF0ZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGFuZCA8YWNyb255bT5TR01MPC9hY3JvbnltPiBjYXRhbG9ncy4gSXQKKyAgICAgICAgaXMgaW5jbHVkZWQgaW4gPGNpdGVyZWZlbnRyeT4KKyAgICAgICAgICAgIDxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgICAgIDxtYW52b2xudW0+MzwvbWFudm9sbnVtPgorICAgICAgICA8L2NpdGVyZWZlbnRyeT4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgICBJdHMgZnVuY3Rpb25zIGNhbiBiZSBpbnZva2VkIGZyb20gYSBzaW5nbGUgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsCisgICAgICAgIG9yIGl0IGNhbiBwZXJmb3JtIG11bHRpcGxlIGZ1bmN0aW9ucyBpbiBpbnRlcmFjdGl2ZSBtb2RlLiBJdCBjYW4gb3BlcmF0ZQorICAgICAgICBvbiBib3RoIDxhY3JvbnltPlhNTDwvYWNyb255bT4gYW5kIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IGZpbGVzLgorICAgIDwvcGFyYT4KIDwvcmVmc2VjdDE+CiAKIDxyZWZzZWN0MSBpZD0ib3B0aW9ucyI+Ci0JPHRpdGxlPk9QVElPTlM8L3RpdGxlPgotCTxwYXJhPgotCQkmeG1sY2F0YWxvZzsgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6Ci0JPC9wYXJhPgotCQotCTx2YXJpYWJsZWxpc3Q+CisgICAgPHRpdGxlPk9QVElPTlM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICAmeG1sY2F0YWxvZzsgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6CisgICAgPC9wYXJhPgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+Ci0JCTxvcHRpb24+LS1hZGQKLQkJIDxyZXBsYWNlYWJsZT5UWVBFPC9yZXBsYWNlYWJsZT4KLQkJIDxyZXBsYWNlYWJsZT5PUklHPC9yZXBsYWNlYWJsZT4KLQkJIDxyZXBsYWNlYWJsZT5SRVBMQUNFPC9yZXBsYWNlYWJsZT4KLQkJPC9vcHRpb24+Ci0JPC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlBZGQgYW4gZW50cnkgdG8gPGZpbGVuYW1lPkNBVEFMT0dGSUxFPC9maWxlbmFtZT4uIDxyZXBsYWNlYWJsZT5UWVBFPC9yZXBsYWNlYWJsZT4KLQkJCWluZGljYXRlcyB0aGUgdHlwZSBvZiBlbnRyeS4gUG9zc2libGUgdHlwZXMgYXJlOiA8c2ltcGxlbGlzdCB0eXBlPSJpbmxpbmUiPgotCQkJCTxtZW1iZXI+PHBhcmFtZXRlcj5wdWJsaWM8L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+c3lzdGVtPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPnVyaTwvcGFyYW1ldGVyPjwvbWVtYmVyPgotCQkJCTxtZW1iZXI+PHBhcmFtZXRlcj5yZXdyaXRlU3lzdGVtPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPnJld3JpdGVVUkk8L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+ZGVsZWdhdGVQdWJsaWM8L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+ZGVsZWdhdGVTeXN0ZW08L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+ZGVsZWdhdGVVUkk8L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+bmV4dENhdGFsb2c8L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCTwvc2ltcGxlbGlzdD4uIDxyZXBsYWNlYWJsZT5PUklHPC9yZXBsYWNlYWJsZT4gaXMgdGhlIG9yaWdpbmFsCi0JCQlyZWZlcmVuY2UgdG8gYmUgcmVwbGFjZWQsIGFuZCA8cmVwbGFjZWFibGU+UkVQTEFDRTwvcmVwbGFjZWFibGU+Ci0JCQlpcyB0aGUgPGFjcm9ueW0+VVJJPC9hY3JvbnltPiBvZiB0aGUgcmVwbGFjZW1lbnQgZW50aXR5IHRvIGJlCi0JCQl1c2VkLiBUaGUgPG9wdGlvbj4tLWFkZDwvb3B0aW9uPiBvcHRpb24gd2lsbCBub3Qgb3ZlcndyaXRlCi0JCQk8ZmlsZW5hbWU+Q0FUQUxPR0ZJTEU8L2ZpbGVuYW1lPiwgb3V0cHV0dGluZwotCQkJdG8gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRvdXQ8L2ZpbGVuYW1lPiwgdW5sZXNzCi0JCQk8b3B0aW9uPi0tbm9vdXQ8L29wdGlvbj4gaXMgdXNlZC4gVGhlIDxvcHRpb24+LS1hZGQ8L29wdGlvbj4gd2lsbAotCQkJYWx3YXlzIHRha2UgdGhyZWUgcGFyYW1ldGVycyBldmVuIGlmIHNvbWUgb2YgdGhlIDxhY3JvbnltPlhNTDwvYWNyb255bT4KLQkJCWNhdGFsb2cgY29uc3RydWN0cyB3aWxsIGhhdmUgb25seSBhIHNpbmdsZSBhcmd1bWVudC4KLQkJPC9wYXJhPgotCQk8IS0tCi0JCQlGSVhNRSAtIElzIG15IGxpc3Qgb2YgcG9zc2libGUgdHlwZXMgY29ycmVjdD8gQXJlIFNHTUwgdHlwZXMgdGhlIHNhbWU/Ci0JCS0tPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgIDx2YXJpYWJsZWxpc3Q+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tYWRkIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlJZiB0aGUgPG9wdGlvbj4tLWFkZDwvb3B0aW9uPiBvcHRpb24gaXMgdXNlZCBmb2xsb3dpbmcKLQkJCXRoZSA8b3B0aW9uPi0tc2dtbDwvb3B0aW9uPiBvcHRpb24sIG9ubHkgYSBzaW5nbGUgYXJndW1lbnQsCi0JCQlhIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+LCBpcyB1c2VkLiBUaGlzIGlzIHVzZWQgdG8gYWRkCi0JCQl0aGUgbmFtZSBvZiBhIGNhdGFsb2cgZmlsZSB0byBhbiA8YWNyb255bT5TR01MPC9hY3JvbnltPiBzdXBlcmNhdGFsb2csCi0JCQlhIGZpbGUgdGhhdCBjb250YWlucyByZWZlcmVuY2VzIHRvIG90aGVyIGluY2x1ZGVkIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+Ci0JCQljYXRhbG9nIGZpbGVzLgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT4KKyAgICAgICAgICAgICAgICA8b3B0aW9uPi0tYWRkCisgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5UWVBFPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPk9SSUc8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+UkVQTEFDRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9vcHRpb24+CisgICAgICAgICAgICA8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZCBhbiBlbnRyeSB0byA8ZmlsZW5hbWU+Q0FUQUxPR0ZJTEU8L2ZpbGVuYW1lPi4gPHJlcGxhY2VhYmxlPlRZUEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgZW50cnkuIFBvc3NpYmxlIHR5cGVzIGFyZTogPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj5wdWJsaWM8L3BhcmFtZXRlcj48L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj5zeXN0ZW08L3BhcmFtZXRlcj48L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj51cmk8L3BhcmFtZXRlcj48L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj5yZXdyaXRlU3lzdGVtPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+cmV3cml0ZVVSSTwvcGFyYW1ldGVyPjwvbWVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1lbWJlcj48cGFyYW1ldGVyPmRlbGVnYXRlUHVibGljPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+ZGVsZWdhdGVTeXN0ZW08L3BhcmFtZXRlcj48L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj5kZWxlZ2F0ZVVSSTwvcGFyYW1ldGVyPjwvbWVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1lbWJlcj48cGFyYW1ldGVyPm5leHRDYXRhbG9nPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgIDwvc2ltcGxlbGlzdD4uIDxyZXBsYWNlYWJsZT5PUklHPC9yZXBsYWNlYWJsZT4gaXMgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byBiZSByZXBsYWNlZCwgYW5kIDxyZXBsYWNlYWJsZT5SRVBMQUNFPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlIDxhY3JvbnltPlVSSTwvYWNyb255bT4gb2YgdGhlIHJlcGxhY2VtZW50IGVudGl0eSB0byBiZQorICAgICAgICAgICAgICAgICAgICB1c2VkLiBUaGUgPG9wdGlvbj4tLWFkZDwvb3B0aW9uPiBvcHRpb24gd2lsbCBub3Qgb3ZlcndyaXRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQVRBTE9HRklMRTwvZmlsZW5hbWU+LCBvdXRwdXR0aW5nCisgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZSBjbGFzcz0iZGV2aWNlZmlsZSI+c3Rkb3V0PC9maWxlbmFtZT4sIHVubGVzcworICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi0tbm9vdXQ8L29wdGlvbj4gaXMgdXNlZC4gVGhlIDxvcHRpb24+LS1hZGQ8L29wdGlvbj4gd2lsbAorICAgICAgICAgICAgICAgICAgICBhbHdheXMgdGFrZSB0aHJlZSBwYXJhbWV0ZXJzIGV2ZW4gaWYgc29tZSBvZiB0aGUgPGFjcm9ueW0+WE1MPC9hY3JvbnltPgorICAgICAgICAgICAgICAgICAgICBjYXRhbG9nIGNvbnN0cnVjdHMgd2lsbCBoYXZlIG9ubHkgYSBzaW5nbGUgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwhLS0KKyAgICAgICAgICAgICAgICAgICAgRklYTUUgLSBJcyBteSBsaXN0IG9mIHBvc3NpYmxlIHR5cGVzIGNvcnJlY3Q/IEFyZSBTR01MIHR5cGVzIHRoZSBzYW1lPworICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlDcmVhdGUgYSBuZXcgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBjYXRhbG9nLiBPdXRwdXRzCi0JCQl0byA8ZmlsZW5hbWUgY2xhc3M9ImRldmljZWZpbGUiPnN0ZG91dDwvZmlsZW5hbWU+LAotCQkJaWdub3JpbmcgPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT4gdW5sZXNzIDxvcHRpb24+LS1ub291dDwvb3B0aW9uPiBpcwotCQkJdXNlZCwgaW4gd2hpY2ggY2FzZSBpdCBjcmVhdGVzIGEgbmV3IGNhdGFsb2cKLQkJCWZpbGUgPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT4uCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1hZGQgPHJlcGxhY2VhYmxlPkZJTEVOQU1FPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8b3B0aW9uPi0tYWRkPC9vcHRpb24+IG9wdGlvbiBpcyB1c2VkIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICB0aGUgPG9wdGlvbj4tLXNnbWw8L29wdGlvbj4gb3B0aW9uLCBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICBhIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+LCBpcyB1c2VkLiBUaGlzIGlzIHVzZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mIGEgY2F0YWxvZyBmaWxlIHRvIGFuIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IHN1cGVyY2F0YWxvZywKKyAgICAgICAgICAgICAgICAgICAgYSBmaWxlIHRoYXQgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBpbmNsdWRlZCA8YWNyb255bT5TR01MPC9hY3JvbnltPgorICAgICAgICAgICAgICAgICAgICBjYXRhbG9nIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLWRlbCA8cmVwbGFjZWFibGU+VkFMVUUoUyk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJUmVtb3ZlIGVudHJpZXMgZnJvbSA8cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPgotCQkJbWF0Y2hpbmcgPHJlcGxhY2VhYmxlPlZBTFVFKFMpPC9yZXBsYWNlYWJsZT4uIFRoZSA8b3B0aW9uPi0tZGVsPC9vcHRpb24+Ci0JCQlvcHRpb24gd2lsbCBub3Qgb3ZlcndyaXRlIDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+LAotCQkJb3V0cHV0dGluZyB0byA8ZmlsZW5hbWUgY2xhc3M9ImRldmljZWZpbGUiPnN0ZG91dDwvZmlsZW5hbWU+LAotCQkJdW5sZXNzIDxvcHRpb24+LS1ub291dDwvb3B0aW9uPiBpcyB1c2VkLgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+Ci0JCQotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1ub291dDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJU2F2ZSBvdXRwdXQgdG8gdGhlIG5hbWVkIGZpbGUgcmF0aGVyIHRoYW4gb3V0cHV0dGluZwotCQkJdG8gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRvdXQ8L2ZpbGVuYW1lPi4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgotCQkKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tbm8tc3VwZXItdXBkYXRlPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlEbyBub3QgdXBkYXRlIHRoZSA8YWNyb255bT5TR01MPC9hY3JvbnltPiBzdXBlciBjYXRhbG9nLgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+Ci0JCQotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJUnVuIGEgc2hlbGwgYWxsb3dpbmcgaW50ZXJhY3RpdmUgcXVlcmllcyBvbiBjYXRhbG9nCi0JCQlmaWxlIDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+LiBGb3IgdGhlIHNldCBvZiBhdmFpbGFibGUKLQkJCWNvbW1hbmRzIHNlZSA8eHJlZiBsaW5rZW5kPSJzaGVsbCIvPi4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgotCQkKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tc2dtbDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJVXNlcyA8YWNyb255bT5TR01MPC9hY3JvbnltPiBzdXBlciBjYXRhbG9ncyBmb3IgPG9wdGlvbj4tLWFkZDwvb3B0aW9uPgotCQkJYW5kIDxvcHRpb24+LS1kZWw8L29wdGlvbj4gb3B0aW9ucy4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgotCQkKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi12PC9vcHRpb24+PC90ZXJtPgotCTx0ZXJtPjxvcHRpb24+LS12ZXJib3NlPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+T3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+Ci0JCi0JPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tY29udmVydDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udmVydCBTR01MIGNhdGFsb2cgdG8gWE1MLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JPHBhcmE+Ci0JCUludm9raW5nICZ4bWxjYXRhbG9nOyBub24taW50ZXJhY3RpdmVseSB3aXRob3V0IGEgZGVzaWduYXRlZCBhY3Rpb24KLQkJKGltcG9zZWQgd2l0aCBvcHRpb25zIGxpa2UgPG9wdGlvbj4tLWFkZDwvb3B0aW9uPikgd2lsbCByZXN1bHQgaW4gYSBsb29rdXAKLQkJb2YgdGhlIGNhdGFsb2cgZW50cnkgZm9yIDxyZXBsYWNlYWJsZT5FTlRJVElFUzwvcmVwbGFjZWFibGU+IGluIHRoZQotCQljYXRhbG9nIGRlbm90ZWQgd2l0aCA8cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPi4gVGhlCi0JCWNvcnJlc3BvbmRpbmcgZW50cmllcyB3aWxsIGJlIG91dHB1dCB0byB0aGUgY29tbWFuZCBsaW5lLiBUaGlzIG1vZGUgb2YKLQkJb3BlcmF0aW9uLCB0b2dldGhlciB3aXRoIDxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPiBtb2RlIGFuZCBub24tbW9kaWZ5aW5nCi0JCShpLmUuIHdpdGhvdXQgPG9wdGlvbj4tLW5vb3V0PC9vcHRpb24+KSBkaXJlY3QgYWN0aW9ucywgYWxsb3dzIGZvcgotCQlhIHNwZWNpYWwgc2hvcnRjdXQgb2YgdGhlIHZvaWQgPHJlcGxhY2VhYmxlPkNBVEFMT0dGSUxFPC9yZXBsYWNlYWJsZT4KLQkJc3BlY2lmaWNhdGlvbiAocG9zc2libHkgZXhwcmVzc2VkIGFzICZxdW90OyZxdW90OyBpbiB0aGUgc2hlbGwKLQkJZW52aXJvbm1lbnQpIGFwcG9pbnRpbmcgdGhlIGRlZmF1bHQgc3lzdGVtIGNhdGFsb2cuIFRoYXQgc2ltcGxpZmllcyB0aGUKLQkJaGFuZGxpbmcgd2hlbiBpdHMgZXhhY3QgbG9jYXRpb24gaXMgaXJyZWxldmFudCBidXQgdGhlIHJlc3BlY3RpdmUgYnVpbHQtaW4KLQkJc3RpbGwgbmVlZHMgdG8gYmUgY29uc3VsdGVkLgotCTwvcGFyYT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGNhdGFsb2cuIE91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRvdXQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgaWdub3JpbmcgPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT4gdW5sZXNzIDxvcHRpb24+LS1ub291dDwvb3B0aW9uPiBpcworICAgICAgICAgICAgICAgICAgICB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IGNyZWF0ZXMgYSBuZXcgY2F0YWxvZworICAgICAgICAgICAgICAgICAgICBmaWxlIDxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tZGVsIDxyZXBsYWNlYWJsZT5WQUxVRShTKTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmUgZW50cmllcyBmcm9tIDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIDxyZXBsYWNlYWJsZT5WQUxVRShTKTwvcmVwbGFjZWFibGU+LiBUaGUgPG9wdGlvbj4tLWRlbDwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICBvcHRpb24gd2lsbCBub3Qgb3ZlcndyaXRlIDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+LAorICAgICAgICAgICAgICAgICAgICBvdXRwdXR0aW5nIHRvIDxmaWxlbmFtZSBjbGFzcz0iZGV2aWNlZmlsZSI+c3Rkb3V0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm9vdXQ8L29wdGlvbj4gaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLW5vb3V0PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTYXZlIG91dHB1dCB0byB0aGUgbmFtZWQgZmlsZSByYXRoZXIgdGhhbiBvdXRwdXR0aW5nCisgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZSBjbGFzcz0iZGV2aWNlZmlsZSI+c3Rkb3V0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1uby1zdXBlci11cGRhdGU8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1cGRhdGUgdGhlIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IHN1cGVyIGNhdGFsb2cuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUnVuIGEgc2hlbGwgYWxsb3dpbmcgaW50ZXJhY3RpdmUgcXVlcmllcyBvbiBjYXRhbG9nCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPHJlcGxhY2VhYmxlPkNBVEFMT0dGSUxFPC9yZXBsYWNlYWJsZT4uIEZvciB0aGUgc2V0IG9mIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kcyBzZWUgPHhyZWYgbGlua2VuZD0ic2hlbGwiLz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1zZ21sPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VzIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IHN1cGVyIGNhdGFsb2dzIGZvciA8b3B0aW9uPi0tYWRkPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8b3B0aW9uPi0tZGVsPC9vcHRpb24+IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LXY8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tdmVyYm9zZTwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5PdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW52b2tpbmcgJnhtbGNhdGFsb2c7IG5vbi1pbnRlcmFjdGl2ZWx5IHdpdGhvdXQgYSBkZXNpZ25hdGVkIGFjdGlvbgorICAgICAgICAoaW1wb3NlZCB3aXRoIG9wdGlvbnMgbGlrZSA8b3B0aW9uPi0tYWRkPC9vcHRpb24+KSB3aWxsIHJlc3VsdCBpbiBhIGxvb2t1cAorICAgICAgICBvZiB0aGUgY2F0YWxvZyBlbnRyeSBmb3IgPHJlcGxhY2VhYmxlPkVOVElUSUVTPC9yZXBsYWNlYWJsZT4gaW4gdGhlCisgICAgICAgIGNhdGFsb2cgZGVub3RlZCB3aXRoIDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+LiBUaGUKKyAgICAgICAgY29ycmVzcG9uZGluZyBlbnRyaWVzIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBjb21tYW5kIGxpbmUuIFRoaXMgbW9kZSBvZgorICAgICAgICBvcGVyYXRpb24sIHRvZ2V0aGVyIHdpdGggPG9wdGlvbj4tLXNoZWxsPC9vcHRpb24+IG1vZGUgYW5kIG5vbi1tb2RpZnlpbmcKKyAgICAgICAgKGkuZS4gd2l0aG91dCA8b3B0aW9uPi0tbm9vdXQ8L29wdGlvbj4pIGRpcmVjdCBhY3Rpb25zLCBhbGxvd3MgZm9yCisgICAgICAgIGEgc3BlY2lhbCBzaG9ydGN1dCBvZiB0aGUgdm9pZCA8cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPgorICAgICAgICBzcGVjaWZpY2F0aW9uIChwb3NzaWJseSBleHByZXNzZWQgYXMgJnF1b3Q7JnF1b3Q7IGluIHRoZSBzaGVsbAorICAgICAgICBlbnZpcm9ubWVudCkgYXBwb2ludGluZyB0aGUgZGVmYXVsdCBzeXN0ZW0gY2F0YWxvZy4gVGhhdCBzaW1wbGlmaWVzIHRoZQorICAgICAgICBoYW5kbGluZyB3aGVuIGl0cyBleGFjdCBsb2NhdGlvbiBpcyBpcnJlbGV2YW50IGJ1dCB0aGUgcmVzcGVjdGl2ZSBidWlsdC1pbgorICAgICAgICBzdGlsbCBuZWVkcyB0byBiZSBjb25zdWx0ZWQuCisgICAgPC9wYXJhPgogPC9yZWZzZWN0MT4KIAogPHJlZnNlY3QxIGlkPSJzaGVsbCI+Ci0JPHRpdGxlPlNIRUxMIENPTU1BTkRTPC90aXRsZT4KLQk8cGFyYT4KLQkJSW52b2tpbmcgJnhtbGNhdGFsb2c7IHdpdGgKLQkJdGhlIDxvcHRpb24+LS1zaGVsbCA8cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPiBvcHRpb24gb3BlbnMKLQkJYSBjb21tYW5kIGxpbmUgc2hlbGwgYWxsb3dpbmcgaW50ZXJhY3RpdmUgYWNjZXNzIHRvIHRoZSBjYXRhbG9nIGZpbGUKLQkJaWRlbnRpZmllZCBieSA8cmVwbGFjZWFibGU+Q0FUQUxPR0ZJTEU8L3JlcGxhY2VhYmxlPi4gSW52b2tpbmcgdGhlIHNoZWxsCi0JCXByb3ZpZGVzIGEgY29tbWFuZCBsaW5lIHByb21wdCBhZnRlciB3aGljaCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChkZXNjcmliZWQgaW4KLQkJYWxwaGFiZXRpY2FsIG9yZGVyKSBjYW4gYmUgZW50ZXJlZC4KLQk8L3BhcmE+Ci0JCi0JPHZhcmlhYmxlbGlzdD4KKyAgICA8dGl0bGU+U0hFTEwgQ09NTUFORFM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBJbnZva2luZyAmeG1sY2F0YWxvZzsgd2l0aAorICAgICAgICB0aGUgPG9wdGlvbj4tLXNoZWxsIDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+PC9vcHRpb24+IG9wdGlvbiBvcGVucworICAgICAgICBhIGNvbW1hbmQgbGluZSBzaGVsbCBhbGxvd2luZyBpbnRlcmFjdGl2ZSBhY2Nlc3MgdG8gdGhlIGNhdGFsb2cgZmlsZQorICAgICAgICBpZGVudGlmaWVkIGJ5IDxyZXBsYWNlYWJsZT5DQVRBTE9HRklMRTwvcmVwbGFjZWFibGU+LiBJbnZva2luZyB0aGUgc2hlbGwKKyAgICAgICAgcHJvdmlkZXMgYSBjb21tYW5kIGxpbmUgcHJvbXB0IGFmdGVyIHdoaWNoIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGRlc2NyaWJlZCBpbgorICAgICAgICBhbHBoYWJldGljYWwgb3JkZXIpIGNhbiBiZSBlbnRlcmVkLgorICAgIDwvcGFyYT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPgotCQk8b3B0aW9uPmFkZAotCQkgPHJlcGxhY2VhYmxlPlRZUEU8L3JlcGxhY2VhYmxlPgotCQkgPHJlcGxhY2VhYmxlPk9SSUc8L3JlcGxhY2VhYmxlPgotCQkgPHJlcGxhY2VhYmxlPlJFUExBQ0U8L3JlcGxhY2VhYmxlPgotCQk8L29wdGlvbj4KLQk8L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCUFkZCBhbiBlbnRyeSB0byB0aGUgY2F0YWxvZyBmaWxlLiA8cmVwbGFjZWFibGU+VFlQRTwvcmVwbGFjZWFibGU+Ci0JCQlpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgZW50cnkuIFBvc3NpYmxlIHR5cGVzIGFyZTogPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+cHVibGljPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPnN5c3RlbTwvcGFyYW1ldGVyPjwvbWVtYmVyPgotCQkJCTxtZW1iZXI+PHBhcmFtZXRlcj51cmk8L3BhcmFtZXRlcj48L21lbWJlcj4KLQkJCQk8bWVtYmVyPjxwYXJhbWV0ZXI+cmV3cml0ZVN5c3RlbTwvcGFyYW1ldGVyPjwvbWVtYmVyPgotCQkJCTxtZW1iZXI+PHBhcmFtZXRlcj5yZXdyaXRlVVJJPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPmRlbGVnYXRlUHVibGljPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPmRlbGVnYXRlU3lzdGVtPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPmRlbGVnYXRlVVJJPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQkJPG1lbWJlcj48cGFyYW1ldGVyPm5leHRDYXRhbG9nPC9wYXJhbWV0ZXI+PC9tZW1iZXI+Ci0JCQk8L3NpbXBsZWxpc3Q+LiA8cmVwbGFjZWFibGU+T1JJRzwvcmVwbGFjZWFibGU+IGlzIHRoZSBvcmlnaW5hbAotCQkJcmVmZXJlbmNlIHRvIGJlIHJlcGxhY2VkLCBhbmQgPHJlcGxhY2VhYmxlPlJFUExBQ0U8L3JlcGxhY2VhYmxlPgotCQkJaXMgdGhlIDxhY3JvbnltPlVSSTwvYWNyb255bT4gb2YgdGhlIHJlcGxhY2VtZW50IGVudGl0eSB0byBiZQotCQkJdXNlZC4gVGhlIDxvcHRpb24+LS1hZGQ8L29wdGlvbj4gb3B0aW9uIHdpbGwgbm90IG92ZXJ3cml0ZQotCQkJPGZpbGVuYW1lPkNBVEFMT0dGSUxFPC9maWxlbmFtZT4sIG91dHB1dHRpbmcKLQkJCXRvIDxmaWxlbmFtZSBjbGFzcz0iZGV2aWNlZmlsZSI+c3Rkb3V0PC9maWxlbmFtZT4sIHVubGVzcwotCQkJPG9wdGlvbj4tLW5vb3V0PC9vcHRpb24+IGlzIHVzZWQuIFRoZSA8b3B0aW9uPi0tYWRkPC9vcHRpb24+IHdpbGwKLQkJCWFsd2F5cyB0YWtlIHRocmVlIHBhcmFtZXRlcnMgZXZlbiBpZiBzb21lIG9mIHRoZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+Ci0JCQljYXRhbG9nIGNvbnN0cnVjdHMgd2lsbCBoYXZlIG9ubHkgYSBzaW5nbGUgYXJndW1lbnQuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICA8dmFyaWFibGVsaXN0PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj5kZWJ1Zzwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJUHJpbnQgZGVidWdnaW5nIHN0YXRlbWVudHMgc2hvd2luZyB0aGUgc3RlcHMgJnhtbGNhdGFsb2c7IGlzIGV4ZWN1dGluZy4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+CisgICAgICAgICAgICAgICAgPG9wdGlvbj5hZGQKKyAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlRZUEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+T1JJRzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5SRVBMQUNFPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L29wdGlvbj4KKyAgICAgICAgICAgIDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkIGFuIGVudHJ5IHRvIHRoZSBjYXRhbG9nIGZpbGUuIDxyZXBsYWNlYWJsZT5UWVBFPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGVudHJ5LiBQb3NzaWJsZSB0eXBlcyBhcmU6IDxzaW1wbGVsaXN0IHR5cGU9ImlubGluZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+cHVibGljPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+c3lzdGVtPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+dXJpPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+cmV3cml0ZVN5c3RlbTwvcGFyYW1ldGVyPjwvbWVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1lbWJlcj48cGFyYW1ldGVyPnJld3JpdGVVUkk8L3BhcmFtZXRlcj48L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj5kZWxlZ2F0ZVB1YmxpYzwvcGFyYW1ldGVyPjwvbWVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1lbWJlcj48cGFyYW1ldGVyPmRlbGVnYXRlU3lzdGVtPC9wYXJhbWV0ZXI+PC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPjxwYXJhbWV0ZXI+ZGVsZWdhdGVVUkk8L3BhcmFtZXRlcj48L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZW1iZXI+PHBhcmFtZXRlcj5uZXh0Q2F0YWxvZzwvcGFyYW1ldGVyPjwvbWVtYmVyPgorICAgICAgICAgICAgICAgICAgICA8L3NpbXBsZWxpc3Q+LiA8cmVwbGFjZWFibGU+T1JJRzwvcmVwbGFjZWFibGU+IGlzIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgdG8gYmUgcmVwbGFjZWQsIGFuZCA8cmVwbGFjZWFibGU+UkVQTEFDRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSA8YWNyb255bT5VUkk8L2Fjcm9ueW0+IG9mIHRoZSByZXBsYWNlbWVudCBlbnRpdHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZC4gVGhlIDxvcHRpb24+LS1hZGQ8L29wdGlvbj4gb3B0aW9uIHdpbGwgbm90IG92ZXJ3cml0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q0FUQUxPR0ZJTEU8L2ZpbGVuYW1lPiwgb3V0cHV0dGluZworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWUgY2xhc3M9ImRldmljZWZpbGUiPnN0ZG91dDwvZmlsZW5hbWU+LCB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLW5vb3V0PC9vcHRpb24+IGlzIHVzZWQuIFRoZSA8b3B0aW9uPi0tYWRkPC9vcHRpb24+IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgYWx3YXlzIHRha2UgdGhyZWUgcGFyYW1ldGVycyBldmVuIGlmIHNvbWUgb2YgdGhlIDxhY3JvbnltPlhNTDwvYWNyb255bT4KKyAgICAgICAgICAgICAgICAgICAgY2F0YWxvZyBjb25zdHJ1Y3RzIHdpbGwgaGF2ZSBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj5kZWwgPHJlcGxhY2VhYmxlPlZBTFVFKFMpPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVJlbW92ZSB0aGUgY2F0YWxvZyBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIDxyZXBsYWNlYWJsZT5WQUxVRShTKTwvcmVwbGFjZWFibGU+LgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPmRlYnVnPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcmludCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBzdGVwcyAmeG1sY2F0YWxvZzsgaXMgZXhlY3V0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj5kdW1wPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+UHJpbnQgdGhlIGN1cnJlbnQgY2F0YWxvZy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPmRlbCA8cmVwbGFjZWFibGU+VkFMVUUoUyk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIHRoZSBjYXRhbG9nIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gPHJlcGxhY2VhYmxlPlZBTFVFKFMpPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPmV4aXQ8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5RdWl0IHRoZSBzaGVsbC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+Ci0JCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj5wdWJsaWMgPHJlcGxhY2VhYmxlPlBVQkxJQy1JRDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlFeGVjdXRlIGEgRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyIGxvb2t1cCBvZiB0aGUgY2F0YWxvZyBlbnRyeQotCQkJZm9yIDxyZXBsYWNlYWJsZT5QVUJMSUMtSUQ8L3JlcGxhY2VhYmxlPi4gVGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgd2lsbCBiZQotCQkJb3V0cHV0IHRvIHRoZSBjb21tYW5kIGxpbmUuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+ZHVtcDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5QcmludCB0aGUgY3VycmVudCBjYXRhbG9nLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj5xdWlldDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPlN0b3AgcHJpbnRpbmcgZGVidWdnaW5nIHN0YXRlbWVudHMuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgotCQkKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPnN5c3RlbSA8cmVwbGFjZWFibGU+U1lTVEVNLUlEPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCUV4ZWN1dGUgYSBGb3JtYWwgUHVibGljIElkZW50aWZpZXIgbG9va3VwIG9mIHRoZSBjYXRhbG9nIGVudHJ5Ci0JCQlmb3IgPHJlcGxhY2VhYmxlPlNZU1RFTS1JRDwvcmVwbGFjZWFibGU+LiBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSB3aWxsIGJlCi0JCQlvdXRwdXQgdG8gdGhlIGNvbW1hbmQgbGluZS4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj5leGl0PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlF1aXQgdGhlIHNoZWxsLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPnB1YmxpYyA8cmVwbGFjZWFibGU+UFVCTElDLUlEPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgYSBGb3JtYWwgUHVibGljIElkZW50aWZpZXIgbG9va3VwIG9mIHRoZSBjYXRhbG9nIGVudHJ5CisgICAgICAgICAgICAgICAgICAgIGZvciA8cmVwbGFjZWFibGU+UFVCTElDLUlEPC9yZXBsYWNlYWJsZT4uIFRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHRvIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+cXVpZXQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+U3RvcCBwcmludGluZyBkZWJ1Z2dpbmcgc3RhdGVtZW50cy48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj5zeXN0ZW0gPHJlcGxhY2VhYmxlPlNZU1RFTS1JRDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBFeGVjdXRlIGEgRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyIGxvb2t1cCBvZiB0aGUgY2F0YWxvZyBlbnRyeQorICAgICAgICAgICAgICAgICAgICBmb3IgPHJlcGxhY2VhYmxlPlNZU1RFTS1JRDwvcmVwbGFjZWFibGU+LiBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCB0byB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPC92YXJpYWJsZWxpc3Q+CiA8L3JlZnNlY3QxPgogCiA8cmVmc2VjdDEgaWQ9ImVudmlyb25tZW50Ij4KLQk8dGl0bGU+RU5WSVJPTk1FTlQ8L3RpdGxlPgotCTx2YXJpYWJsZWxpc3Q+CisgICAgPHRpdGxlPkVOVklST05NRU5UPC90aXRsZT4KKyAgICA8dmFyaWFibGVsaXN0PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVudmFyPlhNTF9DQVRBTE9HX0ZJTEVTPC9lbnZhcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT48YWNyb255bT5YTUw8L2Fjcm9ueW0+IGNhdGFsb2cgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgcmVkaXJlY3RpbmcKLQkJCXF1ZXJpZXMgdG8gdGhlIHVzZXIncyBvd24gc2V0IG9mIGNhdGFsb2dzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcKLQkJCXRoZSA8ZW52YXI+WE1MX0NBVEFMT0dfRklMRVM8L2VudmFyPiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHNwYWNlLXNlcGFyYXRlZAotCQkJbGlzdCBvZiBjYXRhbG9ncy4gVXNlIHBlcmNlbnQtZW5jb2RpbmcgdG8gZXNjYXBlIHNwYWNlcyBvciBvdGhlciBjaGFyYWN0ZXJzLgotCQkJQW4gZW1wdHkgdmFyaWFibGUgc2hvdWxkIGRlYWN0aXZhdGUgbG9hZGluZyB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+L2V0Yy94bWwvY2F0YWxvZzwvZmlsZW5hbWU+IGNhdGFsb2cuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlbnZhcj5YTUxfQ0FUQUxPR19GSUxFUzwvZW52YXI+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPjxhY3JvbnltPlhNTDwvYWNyb255bT4gY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZworICAgICAgICAgICAgICAgICAgICBxdWVyaWVzIHRvIHRoZSB1c2VyJ3Mgb3duIHNldCBvZiBjYXRhbG9ncy4gVGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZW52YXI+WE1MX0NBVEFMT0dfRklMRVM8L2VudmFyPiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHNwYWNlLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICBsaXN0IG9mIGNhdGFsb2dzLiBVc2UgcGVyY2VudC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAgIEFuIGVtcHR5IHZhcmlhYmxlIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlIGRlZmF1bHQgY2F0YWxvZyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL3htbC9jYXRhbG9nPC9maWxlbmFtZT4gb3IsIG1vcmUgc3BlY2lmaWNhbGx5LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JPC92YXJpYWJsZWxpc3Q+CQorICAgIDwvdmFyaWFibGVsaXN0PgogPC9yZWZzZWN0MT4KIAogPHJlZnNlY3QxIGlkPSJkaWFnbm9zdGljcyI+Ci0JPHRpdGxlPkRJQUdOT1NUSUNTPC90aXRsZT4KLQk8cGFyYT4KLQkJJnhtbGNhdGFsb2c7IHJldHVybiBjb2RlcyBwcm92aWRlIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2hlbgotCQljYWxsaW5nIGl0IGZyb20gc2NyaXB0cy4KLQk8L3BhcmE+Ci0JPHZhcmlhYmxlbGlzdD4KKyAgICA8dGl0bGU+RElBR05PU1RJQ1M8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICAmeG1sY2F0YWxvZzsgcmV0dXJuIGNvZGVzIHByb3ZpZGUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCB3aGVuCisgICAgICAgIGNhbGxpbmcgaXQgZnJvbSBzY3JpcHRzLgorICAgIDwvcGFyYT4KKyAgICA8dmFyaWFibGVsaXN0PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT4wPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Tm8gZXJyb3I8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZXJyb3Jjb2RlPjA8L2Vycm9yY29kZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+Tm8gZXJyb3I8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+MTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkZhaWxlZCB0byByZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgY2F0YWxvZzwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+MTwvZXJyb3Jjb2RlPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5GYWlsZWQgdG8gcmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGNhdGFsb2c8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+MjwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkZhaWxlZCB0byBzYXZlIHRvIHRoZSBjYXRhbG9nLCBjaGVjayBmaWxlIHBlcm1pc3Npb25zPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9yY29kZT4yPC9lcnJvcmNvZGU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkZhaWxlZCB0byBzYXZlIHRvIHRoZSBjYXRhbG9nLCBjaGVjayBmaWxlIHBlcm1pc3Npb25zPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPjM8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5GYWlsZWQgdG8gYWRkIGFuIGVudHJ5IHRvIHRoZSBjYXRhbG9nPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9yY29kZT4zPC9lcnJvcmNvZGU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkZhaWxlZCB0byBhZGQgYW4gZW50cnkgdG8gdGhlIGNhdGFsb2c8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+NDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkZhaWxlZCB0byBsb29rIHVwIGFuIGVudHJ5IGluIHRoZSBjYXRhbG9nPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9yY29kZT40PC9lcnJvcmNvZGU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkZhaWxlZCB0byBsb29rIHVwIGFuIGVudHJ5IGluIHRoZSBjYXRhbG9nPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQk8L3ZhcmlhYmxlbGlzdD4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KIDwvcmVmc2VjdDE+CiAKIDxyZWZzZWN0MSBpZD0ic2VlYWxzbyI+Ci0JPHRpdGxlPlNFRSBBTFNPPC90aXRsZT4KLQk8cGFyYT48Y2l0ZXJlZmVudHJ5PgotCQkJPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgotCQkJPG1hbnZvbG51bT4zPC9tYW52b2xudW0+Ci0JCTwvY2l0ZXJlZmVudHJ5PgotCTwvcGFyYT4KLQk8cGFyYT4KLQkJTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKLQkJPGl0ZW1pemVkbGlzdD4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT48Y2l0ZXJlZmVudHJ5PgotCQkJCQkJPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgotCQkJCQkJPG1hbnZvbG51bT4zPC9tYW52b2xudW0+Ci0JCQkJCTwvY2l0ZXJlZmVudHJ5PiB3ZWIgcGFnZSA8dWxpbmsgdXJsPSJodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMiIvPgotCQkJCTwvcGFyYT4KLQkJCTwvbGlzdGl0ZW0+Ci0JCQk8bGlzdGl0ZW0+Ci0JCQkJPHBhcmE+PGNpdGVyZWZlbnRyeT4KLQkJCQkJCTxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KLQkJCQkJCTxtYW52b2xudW0+MzwvbWFudm9sbnVtPgotCQkJCQk8L2NpdGVyZWZlbnRyeT4gY2F0YWxvZyBzdXBwb3J0IHdlYiBwYWdlCi0JCQkJCWF0IDx1bGluayB1cmw9Imh0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9saWJ4bWwyLy0vd2lraXMvQ2F0YWxvZy1zdXBwb3J0Ii8+Ci0JCQkJPC9wYXJhPgotCQkJPC9saXN0aXRlbT4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT5KYW1lcyBDbGFyaydzIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cKLQkJCQkJcGFnZSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmpjbGFyay5jb20vc3AvY2F0YWxvZy5odG0iLz4KLQkJCQk8L3BhcmE+Ci0JCQk8L2xpc3RpdGVtPgotCQkJPGxpc3RpdGVtPgotCQkJCTxwYXJhPjxhY3JvbnltPk9BU0lTPC9hY3JvbnltPiA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGNhdGFsb2cgc3BlY2lmaWNhdGlvbgotCQkJCQk8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3NwZWMuaHRtbCIvPgotCQkJCTwvcGFyYT4KLQkJCTwvbGlzdGl0ZW0+Ci0JCTwvaXRlbWl6ZWRsaXN0PgotCTwvcGFyYT4KKyAgICA8dGl0bGU+U0VFIEFMU088L3RpdGxlPgorICAgIDxwYXJhPjxjaXRlcmVmZW50cnk+CisgICAgICAgICAgICA8cmVmZW50cnl0aXRsZT5saWJ4bWw8L3JlZmVudHJ5dGl0bGU+CisgICAgICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT4KKyAgICAgICAgPC9jaXRlcmVmZW50cnk+CisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPjxjaXRlcmVmZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cmVmZW50cnl0aXRsZT5saWJ4bWw8L3JlZmVudHJ5dGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT4KKyAgICAgICAgICAgICAgICAgICAgPC9jaXRlcmVmZW50cnk+IHdlYiBwYWdlIDx1bGluayB1cmw9Imh0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9saWJ4bWwyIi8+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT48Y2l0ZXJlZmVudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+CisgICAgICAgICAgICAgICAgICAgIDwvY2l0ZXJlZmVudHJ5PiBjYXRhbG9nIHN1cHBvcnQgd2ViIHBhZ2UKKyAgICAgICAgICAgICAgICAgICAgYXQgPHVsaW5rIHVybD0iaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIvLS93aWtpcy9DYXRhbG9nLXN1cHBvcnQiLz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkphbWVzIENsYXJrJ3MgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gY2F0YWxvZworICAgICAgICAgICAgICAgICAgICBwYWdlIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuamNsYXJrLmNvbS9zcC9jYXRhbG9nLmh0bSIvPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+PGFjcm9ueW0+T0FTSVM8L2Fjcm9ueW0+IDxhY3JvbnltPlhNTDwvYWNyb255bT4gY2F0YWxvZyBzcGVjaWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvc3BlYy5odG1sIi8+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgogPC9yZWZzZWN0MT4KIAogPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy94bWxsaW50LjEgYi9kb2MveG1sbGludC4xCmluZGV4IDUxMmRmZDYuLjUzOGJmNGIgMTAwNjQ0Ci0tLSBhL2RvYy94bWxsaW50LjEKKysrIGIvZG9jL3htbGxpbnQuMQpAQCAtMSwxMyArMSwxMyBAQAogJ1wiIHQKIC5cIiAgICAgVGl0bGU6IHhtbGxpbnQKIC5cIiAgICBBdXRob3I6IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+Ci0uXCIgR2VuZXJhdG9yOiBEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyB2MS43OS4xIDxodHRwOi8vZG9jYm9vay5zZi5uZXQvPgotLlwiICAgICAgRGF0ZTogMDgvMTcvMjAyMgorLlwiIEdlbmVyYXRvcjogRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgdnNuYXBzaG90IDxodHRwOi8vZG9jYm9vay5zZi5uZXQvPgorLlwiICAgICAgRGF0ZTogMTEvMDQvMjAyMwogLlwiICAgIE1hbnVhbDogeG1sbGludCBNYW51YWwKIC5cIiAgICBTb3VyY2U6IGxpYnhtbDIKIC5cIiAgTGFuZ3VhZ2U6IEVuZ2xpc2gKIC5cIgotLlRIICJYTUxMSU5UIiAiMSIgIjA4LzE3LzIwMjIiICJsaWJ4bWwyIiAieG1sbGludCBNYW51YWwiCisuVEggIlhNTExJTlQiICIxIiAiMTEvMDQvMjAyMyIgImxpYnhtbDIiICJ4bWxsaW50IE1hbnVhbCIKIC5cIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLlwiICogRGVmaW5lIHNvbWUgcG9ydGFiaWxpdHkgc3R1ZmYKIC5cIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzEsNyArMzEsNyBAQAogeG1sbGludCBcLSBjb21tYW5kIGxpbmUgWE1MIHRvb2wKIC5TSCAiU1lOT1BTSVMiCiAuSFAgXHcnXGZCeG1sbGludFxmUlwgJ3UKLVxmQnhtbGxpbnRcZlIgW1xmQlwtXC12ZXJzaW9uXGZSIHwgXGZCXC1cLWRlYnVnXGZSIHwgXGZCXC1cLXNoZWxsXGZSIHwgXGZCXC1cLXhwYXRoXCAiXGZSXGZCXGZJWFBhdGhfZXhwcmVzc2lvblxmUlxmUlxmQiJcZlIgfCBcZkJcLVwtZGVidWdlbnRcZlIgfCBcZkJcLVwtY29weVxmUiB8IFxmQlwtXC1yZWNvdmVyXGZSIHwgXGZCXC1cLW5vZW50XGZSIHwgXGZCXC1cLW5vb3V0XGZSIHwgXGZCXC1cLW5vbmV0XGZSIHwgXGZCXC1cLXBhdGhcICJcZlJcZkJcZklQQVRIKFMpXGZSXGZSXGZCIlxmUiB8IFxmQlwtXC1sb2FkXC10cmFjZVxmUiB8IFxmQlwtXC1odG1sb3V0XGZSIHwgXGZCXC1cLW5vd3JhcFxmUiB8IFxmQlwtXC12YWxpZFxmUiB8IFxmQlwtXC1wb3N0dmFsaWRcZlIgfCBcZkJcLVwtZHRkdmFsaWRcIFxmUlxmQlxmSVVSTFxmUlxmUiB8IFxmQlwtXC1kdGR2YWxpZGZwaVwgXGZSXGZCXGZJRlBJXGZSXGZSIHwgXGZCXC1cLXRpbWluZ1xmUiB8IFxmQlwtXC1vdXRwdXRcIFxmUlxmQlxmSUZJTEVcZlJcZlIgfCBcZkJcLVwtcmVwZWF0XGZSIHwgXGZCXC1cLWluc2VydFxmUiB8IFxmQlwtXC1jb21wcmVzc1xmUiB8IFxmQlwtXC1odG1sXGZSIHwgXGZCXC1cLXhtbG91dFxmUiB8IFxmQlwtXC1wdXNoXGZSIHwgXGZCXC1cLW1lbW9yeVxmUiB8IFxmQlwtXC1tYXhtZW1cIFxmUlxmQlxmSU5CQllURVNcZlJcZlIgfCBcZkJcLVwtbm93YXJuaW5nXGZSIHwgXGZCXC1cLW5vYmxhbmtzXGZSIHwgXGZCXC1cLW5vY2RhdGFcZlIgfCBcZkJcLVwtZm9ybWF0XGZSIHwgXGZCXC1cLWVuY29kZVwgXGZSXGZCXGZJRU5DT0RJTkdcZlJcZlIgfCBcZkJcLVwtZHJvcGR0ZFxmUiB8IFxmQlwtXC1uc2NsZWFuXGZSIHwgXGZCXC1cLXRlc3RJT1xmUiB8IFxmQlwtXC1jYXRhbG9nc1xmUiB8IFxmQlwtXC1ub2NhdGFsb2dzXGZSIHwgXGZCXC1cLWF1dG9cZlIgfCBcZkJcLVwteGluY2x1ZGVcZlIgfCBcZkJcLVwtbm94aW5jbHVkZW5vZGVcZlIgfCBcZkJcLVwtbG9hZGR0ZFxmUiB8IFxmQlwtXC1kdGRhdHRyXGZSIHwgXGZCXC1cLXN0cmVhbVxmUiB8IFxmQlwtXC13YWxrZXJcZlIgfCBcZkJcLVwtcGF0dGVyblwgXGZSXGZCXGZJUEFUVEVSTlZBTFVFXGZSXGZSIHwgXGZCXC1cLWNoa3JlZ2lzdGVyXGZSIHwgXGZCXC1cLXJlbGF4bmdcIFxmUlxmQlxmSVNDSEVNQVxmUlxmUiB8IFxmQlwtXC1zY2hlbWFcIFxmUlxmQlxmSVNDSEVNQVxmUlxmUiB8IFxmQlwtXC1jMTRuXGZSXSB7XGZJWE1MXC1GSUxFKFMpXGZSLi4uIHwgXC19CitcZkJ4bWxsaW50XGZSIFtcZkJcLVwtdmVyc2lvblxmUiB8IFxmQlwtXC1kZWJ1Z1xmUiB8IFxmQlwtXC1xdWlldFxmUiB8IFxmQlwtXC1zaGVsbFxmUiB8IFxmQlwtXC14cGF0aFwgIlxmUlxmQlxmSVhQYXRoX2V4cHJlc3Npb25cZlJcZlJcZkIiXGZSIHwgXGZCXC1cLWRlYnVnZW50XGZSIHwgXGZCXC1cLWNvcHlcZlIgfCBcZkJcLVwtcmVjb3ZlclxmUiB8IFxmQlwtXC1ub2RpY3RcZlIgfCBcZkJcLVwtbm9lbnRcZlIgfCBcZkJcLVwtbm9vdXRcZlIgfCBcZkJcLVwtbm9uZXRcZlIgfCBcZkJcLVwtcGF0aFwgIlxmUlxmQlxmSVBBVEgoUylcZlJcZlJcZkIiXGZSIHwgXGZCXC1cLWxvYWRcLXRyYWNlXGZSIHwgXGZCXC1cLWh0bWxvdXRcZlIgfCBcZkJcLVwtbm93cmFwXGZSIHwgXGZCXC1cLXZhbGlkXGZSIHwgXGZCXC1cLXBvc3R2YWxpZFxmUiB8IFxmQlwtXC1kdGR2YWxpZFwgXGZSXGZCXGZJVVJMXGZSXGZSIHwgXGZCXC1cLWR0ZHZhbGlkZnBpXCBcZlJcZkJcZklGUElcZlJcZlIgfCBcZkJcLVwtdGltaW5nXGZSIHwgXGZCXC1cLW91dHB1dFwgXGZSXGZCXGZJRklMRVxmUlxmUiB8IFxmQlwtXC1yZXBlYXRcZlIgfCBcZkJcLVwtaW5zZXJ0XGZSIHwgXGZCXC1cLWNvbXByZXNzXGZSIHwgXGZCXC1cLWh0bWxcZlIgfCBcZkJcLVwteG1sb3V0XGZSIHwgXGZCXC1cLXB1c2hcZlIgfCBcZkJcLVwtbWVtb3J5XGZSIHwgXGZCXC1cLW1heFwtYW1wbFwgXGZSXGZCXGZJSU5URUdFUlxmUlxmUiB8IFxmQlwtXC1tYXhtZW1cIFxmUlxmQlxmSU5CQllURVNcZlJcZlIgfCBcZkJcLVwtbm93YXJuaW5nXGZSIHwgXGZCXC1cLW5vYmxhbmtzXGZSIHwgXGZCXC1cLW5vY2RhdGFcZlIgfCBcZkJcLVwtZm9ybWF0XGZSIHwgXGZCXC1cLWVuY29kZVwgXGZSXGZCXGZJRU5DT0RJTkdcZlJcZlIgfCBcZkJcLVwtZHJvcGR0ZFxmUiB8IFxmQlwtXC1uc2NsZWFuXGZSIHwgXGZCXC1cLXRlc3RJT1xmUiB8IFxmQlwtXC1jYXRhbG9nc1xmUiB8IFxmQlwtXC1ub2NhdGFsb2dzXGZSIHwgXGZCXC1cLWF1dG9cZlIgfCBcZkJcLVwteGluY2x1ZGVcZlIgfCBcZkJcLVwtbm94aW5jbHVkZW5vZGVcZlIgfCBcZkJcLVwtbG9hZGR0ZFxmUiB8IFxmQlwtXC1kdGRhdHRyXGZSIHwgXGZCXC1cLXN0cmVhbVxmUiB8IFxmQlwtXC13YWxrZXJcZlIgfCBcZkJcLVwtcGF0dGVyblwgXGZSXGZCXGZJUEFUVEVSTlZBTFVFXGZSXGZSIHwgXGZCXC1cLWNoa3JlZ2lzdGVyXGZSIHwgXGZCXC1cLXJlbGF4bmdcIFxmUlxmQlxmSVNDSEVNQVxmUlxmUiB8IFxmQlwtXC1zY2hlbWFcIFxmUlxmQlxmSVNDSEVNQVxmUlxmUiB8IFxmQlwtXC1jMTRuXGZSIHwgXGZCXC1cLXBlZGFudGljXGZSXSB7XGZJWE1MXC1GSUxFKFMpXGZSLi4uIHwgXC19CiAuSFAgXHcnXGZCeG1sbGludFxmUlwgJ3UKIFxmQnhtbGxpbnRcZlIgXGZCXC1cLWhlbHBcZlIKIC5TSCAiREVTQ1JJUFRJT04iCkBAIC03Miw2ICs3Miw4IEBACiBYTUwKIGNhdGFsb2dzIHN0YXJ0aW5nIGZyb20KIC9ldGMveG1sL2NhdGFsb2cKK29yLCBtb3JlIHNwZWNpZmljYWxseSwKKyR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cKIGFyZSB1c2VkIGJ5IGRlZmF1bHRcJi4KIC5SRQogLlBQCkBAIC0xOTcsNiArMTk5LDExIEBACiBzdGRlcnJcJi4KIC5SRQogLlBQCitcZkJcLVwtbWF4XC1hbXBsIFxmUlxmQlxmSUlOVEVHRVJcZlJcZlIKKy5SUyA0CitTZXQgdGhlIG1heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3Igd2hpY2ggcHJvdGVjdHMgYWdhaW5zdCBleHBvbmVudGlhbCBlbnRpdHkgZXhwYW5zaW9uICgiYmlsbGlvbiBsYXVnaHMiKVwmLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1XCYuIERvY3VtZW50cyBtYWtpbmcgaGVhdnkgdXNlIG9mIGVudGl0eSBleHBhbnNpb24gbWF5IHJlcXVpcmUgYSBoaWdoZXIgdmFsdWVcJi4KKy5SRQorLlBQCiBcZkJcLVwtbWF4bWVtIFxmUlxmQlxmSU5OQllURVNcZlJcZlIKIC5SUyA0CiBUZXN0IHRoZSBwYXJzZXIgbWVtb3J5IHN1cHBvcnRcJi4KQEAgLTIyNiw2ICsyMzMsMTEgQEAKIFN1YnN0aXR1dGUgQ0RBVEEgc2VjdGlvbiBieSBlcXVpdmFsZW50IHRleHQgbm9kZXNcJi4KIC5SRQogLlBQCitcZkJcLVwtbm9kaWN0XGZSCisuUlMgNAorRG9uXCooQXF0IHVzZSBkaWN0aW9uYXJpZXMgKHBhcnNlciBvcHRpb24gWE1MX1BBUlNFX05PRElDVClcJi4gT25seSBmb3IgZGVidWdnaW5nXCYuCisuUkUKKy5QUAogXGZCXC1cLW5vZW50XGZSCiAuUlMgNAogU3Vic3RpdHV0ZSBlbnRpdHkgdmFsdWVzIGZvciBlbnRpdHkgcmVmZXJlbmNlc1wmLiBCeSBkZWZhdWx0LApAQCAtMjkxLDYgKzMwMywxMSBAQAogVXNlZCB0byBleGVyY2lzZSB0aGUgcGF0dGVybiByZWNvZ25pdGlvbiBlbmdpbmUsIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggdGhlIHJlYWRlciBpbnRlcmZhY2UgdG8gdGhlIHBhcnNlclwmLiBJdCBhbGxvd3MgdG8gc2VsZWN0IHNvbWUgbm9kZXMgaW4gdGhlIGRvY3VtZW50IGJhc2VkIG9uIGFuIFhQYXRoIChzdWJzZXQpIGV4cHJlc3Npb25cJi4gVXNlZCBmb3IgZGVidWdnaW5nXCYuCiAuUkUKIC5QUAorXGZCXC1cLXBlZGFudGljXGZSCisuUlMgNAorRW5hYmxlIGFkZGl0aW9uYWwgd2FybmluZ3NcJi4KKy5SRQorLlBQCiBcZkJcLVwtcG9zdHZhbGlkXGZSCiAuUlMgNAogVmFsaWRhdGUgYWZ0ZXIgcGFyc2luZyBoYXMgY29tcGxldGVkXCYuCkBAIC0zMDEsNiArMzE4LDExIEBACiBVc2UgdGhlIHB1c2ggbW9kZSBvZiB0aGUgcGFyc2VyXCYuCiAuUkUKIC5QUAorXGZCXC1cLXF1aWV0XGZSCisuUlMgNAorRG9uXCooQXF0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdG8gc3RkZXJyXCYuCisuUkUKKy5QUAogXGZCXC1cLXJlY292ZXJcZlIKIC5SUyA0CiBPdXRwdXQgYW55IHBhcnNhYmxlIHBvcnRpb25zIG9mIGFuIGludmFsaWQgZG9jdW1lbnRcJi4KQEAgLTUwMSw5ICs1MjMsNyBAQAogU0dNTAogY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZyBxdWVyaWVzIHRvIHRoZSB1c2VyXCooQXFzIG93biBzZXQgb2YgY2F0YWxvZ3NcJi4gVGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nIHRoZQogXGZCU0dNTF9DQVRBTE9HX0ZJTEVTXGZSCi1lbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIGxpc3Qgb2YgY2F0YWxvZ3NcJi4gQW4gZW1wdHkgb25lIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlIGRlZmF1bHQKLS9ldGMvc2dtbC9jYXRhbG9nCi1jYXRhbG9nXCYuCitlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIGxpc3Qgb2YgY2F0YWxvZ3NcJi4gQW4gZW1wdHkgb25lIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlIGRlZmF1bHQgY2F0YWxvZ1wmLgogLlJFCiAuUFAKIFxmQlhNTF9DQVRBTE9HX0ZJTEVTXGZSCkBAIC01MTEsOSArNTMxLDcgQEAKIFhNTAogY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZyBxdWVyaWVzIHRvIHRoZSB1c2VyXCooQXFzIG93biBzZXQgb2YgY2F0YWxvZ3NcJi4gVGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nIHRoZQogXGZCWE1MX0NBVEFMT0dfRklMRVNcZlIKLWVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc3BhY2VcLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGFsb2dzXCYuIFVzZSBwZXJjZW50XC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnNcJi4gQW4gZW1wdHkgdmFyaWFibGUgc2hvdWxkIGRlYWN0aXZhdGUgbG9hZGluZyB0aGUgZGVmYXVsdAotL2V0Yy94bWwvY2F0YWxvZwotY2F0YWxvZ1wmLgorZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBzcGFjZVwtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0YWxvZ3NcJi4gVXNlIHBlcmNlbnRcLWVuY29kaW5nIHRvIGVzY2FwZSBzcGFjZXMgb3Igb3RoZXIgY2hhcmFjdGVyc1wmLiBBbiBlbXB0eSB2YXJpYWJsZSBzaG91bGQgZGVhY3RpdmF0ZSBsb2FkaW5nIHRoZSBkZWZhdWx0IGNhdGFsb2dcJi4KIC5SRQogLlBQCiBcZkJYTUxfREVCVUdfQ0FUQUxPR1xmUgpkaWZmIC0tZ2l0IGEvZG9jL3htbGxpbnQuaHRtbCBiL2RvYy94bWxsaW50Lmh0bWwKaW5kZXggOGQ0NDAwZi4uZTEyOGMzOSAxMDA2NDQKLS0tIGEvZG9jL3htbGxpbnQuaHRtbAorKysgYi9kb2MveG1sbGludC5odG1sCkBAIC0xLDE2MSArMSwxNzAgQEAKLTxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT54bWxsaW50PC90aXRsZT48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0icmVmZW50cnkiPjxhIG5hbWU9ImlkbTEiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PjxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjxoMj5OYW1lPC9oMj48cD54bWxsaW50ICYjODIxMjsgY29tbWFuZCBsaW5lIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IHRvb2w8L3A+PC9kaXY+PGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPjxoMj5TeW5vcHNpczwvaDI+PGRpdiBjbGFzcz0iY21kc3lub3BzaXMiPjxwPjxjb2RlIGNsYXNzPSJjb21tYW5kIj54bWxsaW50PC9jb2RlPiAgWyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZWJ1ZzwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0teHBhdGggIjxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlhQYXRoX2V4cHJlc3Npb248L2NvZGU+PC9lbT4iPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVidWdlbnQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jb3B5PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVjb3ZlcjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vZW50PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9vdXQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub25ldDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBhdGggIjxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEgoUyk8L2NvZGU+PC9lbT4iPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbG9hZC10cmFjZTwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWh0bWxvdXQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub3dyYXA8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12YWxpZDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBvc3R2YWxpZDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWR0ZHZhbGlkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlVSTDwvY29kZT48L2VtPjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWR0ZHZhbGlkZnBpIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZQSTwvY29kZT48L2VtPjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRpbWluZzwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVwZWF0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taW5zZXJ0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY29tcHJlc3M8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1odG1sPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0teG1sb3V0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcHVzaDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1lbW9yeTwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1heG1lbSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5OQkJZVEVTPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm93YXJuaW5nPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9ibGFua3M8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2NkYXRhPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZm9ybWF0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZW5jb2RlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkVOQ09ESU5HPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZHJvcGR0ZDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5zY2xlYW48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS10ZXN0SU88L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jYXRhbG9nczwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vY2F0YWxvZ3M8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hdXRvPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0teGluY2x1ZGU8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub3hpbmNsdWRlbm9kZTwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWxvYWRkdGQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kdGRhdHRyPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RyZWFtPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0td2Fsa2VyPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcGF0dGVybiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5QQVRURVJOVkFMVUU8L2NvZGU+PC9lbT48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jaGtyZWdpc3RlcjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlbGF4bmcgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+U0NIRU1BPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2NoZW1hIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlNDSEVNQTwvY29kZT48L2VtPjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWMxNG48L2NvZGU+IF0geyA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5YTUwtRklMRShTKTwvY29kZT48L2VtPi4uLiAgfCAgIC0gfTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJjbWRzeW5vcHNpcyI+PHA+PGNvZGUgY2xhc3M9ImNvbW1hbmQiPnhtbGxpbnQ8L2NvZGU+ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9jb2RlPiA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9ImRlc2NyaXB0aW9uIj48L2E+PGgyPkRFU0NSSVBUSU9OPC9oMj48cD4KLQkJVGhlIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IHByb2dyYW0gcGFyc2VzIG9uZSBvciBtb3JlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGZpbGVzLAotCQlzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5YTUwtRklMRTwvY29kZT48L2VtPgotCQkob3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIHRoZSBmaWxlbmFtZSBwcm92aWRlZAotCQlpcyA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4tPC9zdHJvbmc+PC9zcGFuPiApLiBJdCBwcmludHMgdmFyaW91cyB0eXBlcyBvZgotCQlvdXRwdXQsIGRlcGVuZGluZyB1cG9uIHRoZSBvcHRpb25zIHNlbGVjdGVkLiBJdCBpcyB1c2VmdWwgZm9yIGRldGVjdGluZwotCQllcnJvcnMgYm90aCBpbiA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBjb2RlIGFuZCBpbgotCQl0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gcGFyc2VyIGl0c2VsZi4KLQk8L3A+PHA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gaXMgaW5jbHVkZWQgaW4gPHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+LjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0ib3B0aW9ucyI+PC9hPjxoMj5PUFRJT05TPC9oMj48cD4KLQkJPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6Ci0JPC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hdXRvPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5HZW5lcmF0ZSBhIHNtYWxsIGRvY3VtZW50IGZvciB0ZXN0aW5nIHB1cnBvc2VzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jYXRhbG9nczwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlVc2UgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBjYXRhbG9nKHMpIGZyb20gPGNvZGUgY2xhc3M9ImVudmFyIj5TR01MX0NBVEFMT0dfRklMRVM8L2NvZGU+LgotCQkJT3RoZXJ3aXNlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGNhdGFsb2dzIHN0YXJ0aW5nCi0JCQlmcm9tIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2V0Yy94bWwvY2F0YWxvZzwvY29kZT4gYXJlIHVzZWQgYnkgZGVmYXVsdC4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNoa3JlZ2lzdGVyPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVR1cm4gb24gbm9kZSByZWdpc3RyYXRpb24uIFVzZWZ1bCBmb3IgZGV2ZWxvcGVycyB0ZXN0aW5nIDxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5saWJ4bWw8L3NwYW4+KDMpPC9zcGFuPiBub2RlIHRyYWNraW5nIGNvZGUuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jb21wcmVzczwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlUdXJuIG9uIDxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5nemlwPC9zcGFuPigxKTwvc3Bhbj4gY29tcHJlc3Npb24gb2Ygb3V0cHV0LgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY29weTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGVzdCB0aGUgaW50ZXJuYWwgY29weSBpbXBsZW1lbnRhdGlvbi48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYzE0bjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlVc2UgdGhlIFczQyA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBDYW5vbmljYWxpc2F0aW9uICg8YWNyb255bSBjbGFzcz0iYWNyb255bSI+QzE0TjwvYWNyb255bT4pIHRvCi0JCQlzZXJpYWxpemUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRvIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+c3Rkb3V0PC9jb2RlPi4KLQkJCUl0IGtlZXBzIGNvbW1lbnRzIGluIHRoZSByZXN1bHQuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kdGR2YWxpZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5VUkw8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJVXNlIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+RFREPC9hY3JvbnltPiBzcGVjaWZpZWQgYnkKLQkJCWFuIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlVSTDwvY29kZT48L2VtPiBmb3IgdmFsaWRhdGlvbi4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWR0ZHZhbGlkZnBpIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZQSTwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlVc2UgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+IHNwZWNpZmllZCBieSBhIEZvcm1hbCBQdWJsaWMKLQkJCUlkZW50aWZpZXIgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RlBJPC9jb2RlPjwvZW0+IGZvciB2YWxpZGF0aW9uLCBub3RlIHRoYXQgdGhpcwotCQkJd2lsbCByZXF1aXJlIGEgY2F0YWxvZyBleHBvcnRpbmcgdGhhdCBGb3JtYWwgUHVibGljIElkZW50aWZpZXIgdG8gd29yay4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVBhcnNlIGEgZmlsZSBhbmQgb3V0cHV0IGFuIGFubm90YXRlZCB0cmVlIG9mIHRoZQotCQkJaW4tbWVtb3J5IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50LgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVidWdlbnQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRlYnVnIHRoZSBlbnRpdGllcyBkZWZpbmVkIGluIHRoZSBkb2N1bWVudC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZHJvcGR0ZDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UmVtb3ZlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+IGZyb20gb3V0cHV0LjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kdGRhdHRyPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCUZldGNoIGV4dGVybmFsIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+IGFuZCBwb3B1bGF0ZSB0aGUgdHJlZSB3aXRoCi0JCQlpbmhlcml0ZWQgYXR0cmlidXRlcy4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWVuY29kZSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5FTkNPRElORzwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+T3V0cHV0IGluIHRoZSBnaXZlbiBlbmNvZGluZy4gTm90ZSB0aGF0IHRoaXMgd29ya3MgZm9yIGZ1bGwgZG9jdW1lbnQgbm90IGZyYWdtZW50cyBvciByZXN1bHQgZnJvbSBYUGF0aCBxdWVyaWVzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1mb3JtYXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJUmVmb3JtYXQgYW5kIHJlaW5kZW50IHRoZSBvdXRwdXQuIFRoZSA8Y29kZSBjbGFzcz0iZW52YXIiPlhNTExJTlRfSU5ERU5UPC9jb2RlPgotCQkJZW52aXJvbm1lbnQgdmFyaWFibGUgY29udHJvbHMgdGhlIGluZGVudGF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0d28KLQkJCXNwYWNlcyAiICAiKS4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlByaW50IG91dCBhIHNob3J0IHVzYWdlIHN1bW1hcnkgZm9yIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+LjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1odG1sPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5Vc2UgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5IVE1MPC9hY3JvbnltPiBwYXJzZXIuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWh0bWxvdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJT3V0cHV0IHJlc3VsdHMgYXMgYW4gPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkhUTUw8L2Fjcm9ueW0+IGZpbGUuIFRoaXMKLQkJCWNhdXNlcyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPiB0byBvdXRwdXQgdGhlIG5lY2Vzc2FyeSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+SFRNTDwvYWNyb255bT4KLQkJCXRhZ3Mgc3Vycm91bmRpbmcgdGhlIHJlc3VsdCB0cmVlIG91dHB1dCBzbyB0aGUgcmVzdWx0cyBjYW4gYmUKLQkJCWRpc3BsYXllZC92aWV3ZWQgaW4gYSBicm93c2VyLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0taW5zZXJ0PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5UZXN0IGZvciB2YWxpZCBpbnNlcnRpb25zLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1sb2FkZHRkPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5GZXRjaCBhbiBleHRlcm5hbCA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+RFREPC9hY3JvbnltPi48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbG9hZC10cmFjZTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlEaXNwbGF5IGFsbCB0aGUgZG9jdW1lbnRzIGxvYWRlZCBkdXJpbmcgdGhlIHByb2Nlc3NpbmcKLQkJCXRvIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+c3RkZXJyPC9jb2RlPi4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1heG1lbSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5OTkJZVEVTPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVRlc3QgdGhlIHBhcnNlciBtZW1vcnkgc3VwcG9ydC4gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+Tk5CWVRFUzwvY29kZT48L2VtPgotCQkJaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoZSBsaWJyYXJ5IGlzIGFsbG93ZWQgdG8gYWxsb2NhdGUuCi0JCQlUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBzdXJlIGJhdGNoIHByb2Nlc3NpbmcKLQkJCW9mIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGZpbGVzIHdpbGwgbm90IGV4aGF1c3QgdGhlIHZpcnR1YWwgbWVtb3J5Ci0JCQlvZiB0aGUgc2VydmVyIHJ1bm5pbmcgdGhlbS4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1lbW9yeTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UGFyc2UgZnJvbSBtZW1vcnkuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vYmxhbmtzPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5Ecm9wIGlnbm9yYWJsZSBibGFuayBzcGFjZXMuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vY2F0YWxvZ3M8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRvIG5vdCB1c2UgYW55IGNhdGFsb2dzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2NkYXRhPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5TdWJzdGl0dXRlIENEQVRBIHNlY3Rpb24gYnkgZXF1aXZhbGVudCB0ZXh0IG5vZGVzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2VudDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlTdWJzdGl0dXRlIGVudGl0eSB2YWx1ZXMgZm9yIGVudGl0eSByZWZlcmVuY2VzLiBCeSBkZWZhdWx0LCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPgotCQkJbGVhdmVzIGVudGl0eSByZWZlcmVuY2VzIGluIHBsYWNlLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9uZXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJRG8gbm90IHVzZSB0aGUgSW50ZXJuZXQgdG8gZmV0Y2ggPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkRURDwvYWNyb255bT5zIG9yIGVudGl0aWVzLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9vdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJU3VwcHJlc3Mgb3V0cHV0LiBCeSBkZWZhdWx0LCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPiBvdXRwdXRzIHRoZSByZXN1bHQgdHJlZS4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vd2FybmluZzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+RG8gbm90IGVtaXQgd2FybmluZ3MgZnJvbSB0aGUgcGFyc2VyIGFuZC9vciB2YWxpZGF0b3IuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vd3JhcDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+RG8gbm90IG91dHB1dCA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+SFRNTDwvYWNyb255bT4gZG9jIHdyYXBwZXIuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5veGluY2x1ZGVub2RlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCURvIFhJbmNsdWRlIHByb2Nlc3NpbmcgYnV0IGRvIG5vdCBnZW5lcmF0ZSBYSW5jbHVkZSBzdGFydCBhbmQgZW5kIG5vZGVzLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbnNjbGVhbjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UmVtb3ZlIHJlZHVuZGFudCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RklMRTwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlEZWZpbmUgYSBmaWxlIHBhdGggd2hlcmUgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gd2lsbCBzYXZlIHRoZSByZXN1bHQgb2YgcGFyc2luZy4KLQkJCVVzdWFsbHkgdGhlIHByb2dyYW1zIGJ1aWxkIGEgdHJlZSBhbmQgc2F2ZSBpdAotCQkJb24gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5zdGRvdXQ8L2NvZGU+LCB3aXRoIHRoaXMgb3B0aW9uCi0JCQl0aGUgcmVzdWx0IDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGluc3RhbmNlIHdpbGwgYmUgc2F2ZWQgb250byBhIGZpbGUuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wYXRoICI8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5QQVRIKFMpPC9jb2RlPjwvZW0+IjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlVc2UgdGhlIChzcGFjZS0gb3IgY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mIGZpbGVzeXN0ZW0gcGF0aHMgc3BlY2lmaWVkCi0JCQlieSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5QQVRIUzwvY29kZT48L2VtPiB0byBsb2FkIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+cyBvcgotCQkJZW50aXRpZXMuIEVuY2xvc2Ugc3BhY2Utc2VwYXJhdGVkIGxpc3RzIGJ5IHF1b3RhdGlvbiBtYXJrcy4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBhdHRlcm4gPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UEFUVEVSTlZBTFVFPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVVzZWQgdG8gZXhlcmNpc2UgdGhlIHBhdHRlcm4gcmVjb2duaXRpb24gZW5naW5lLCB3aGljaCBjYW4gYmUgdXNlZAotCQkJd2l0aCB0aGUgcmVhZGVyIGludGVyZmFjZSB0byB0aGUgcGFyc2VyLiBJdCBhbGxvd3MgdG8gc2VsZWN0IHNvbWUKLQkJCW5vZGVzIGluIHRoZSBkb2N1bWVudCBiYXNlZCBvbiBhbiBYUGF0aCAoc3Vic2V0KSBleHByZXNzaW9uLiBVc2VkCi0JCQlmb3IgZGVidWdnaW5nLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcG9zdHZhbGlkPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5WYWxpZGF0ZSBhZnRlciBwYXJzaW5nIGhhcyBjb21wbGV0ZWQuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXB1c2g8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlVzZSB0aGUgcHVzaCBtb2RlIG9mIHRoZSBwYXJzZXIuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlY292ZXI8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPk91dHB1dCBhbnkgcGFyc2FibGUgcG9ydGlvbnMgb2YgYW4gaW52YWxpZCBkb2N1bWVudC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVsYXhuZyA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5TQ0hFTUE8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJVXNlIFJlbGF4TkcgZmlsZSBuYW1lZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5TQ0hFTUE8L2NvZGU+PC9lbT4KLQkJCWZvciB2YWxpZGF0aW9uLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVwZWF0PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5SZXBlYXQgMTAwIHRpbWVzLCBmb3IgdGltaW5nIG9yIHByb2ZpbGluZy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2NoZW1hIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlNDSEVNQTwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlVc2UgYSBXM0MgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gU2NoZW1hIGZpbGUKLQkJCW5hbWVkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlNDSEVNQTwvY29kZT48L2VtPiBmb3IgdmFsaWRhdGlvbi4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNoZWxsPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVJ1biBhIG5hdmlnYXRpbmcgc2hlbGwuIERldGFpbHMgb24gYXZhaWxhYmxlIGNvbW1hbmRzIGluIHNoZWxsIG1vZGUKLQkJCWFyZSBiZWxvdyAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjc2hlbGwiIHRpdGxlPSJTSEVMTCBDT01NQU5EUyI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtTSEVMTCBDT01NQU5EUyYjODIyMTs8L2E+KS4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXhwYXRoICI8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5YUGF0aF9leHByZXNzaW9uPC9jb2RlPjwvZW0+IjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlSdW4gYW4gWFBhdGggZXhwcmVzc2lvbiBnaXZlbiBhcyBhcmd1bWVudCBhbmQgcHJpbnQgdGhlCi0JCQlyZXN1bHQuIEluIGNhc2Ugb2YgYSBub2Rlc2V0IHJlc3VsdCwgZWFjaCBub2RlIGluIHRoZQotCQkJbm9kZSBzZXQgaXMgc2VyaWFsaXplZCBpbiBmdWxsIGluIHRoZSBvdXRwdXQuIEluIGNhc2UKLQkJCW9mIGFuIGVtcHR5IG5vZGUgc2V0IHRoZSAiWFBhdGggc2V0IGlzIGVtcHR5IiByZXN1bHQKLQkJCXdpbGwgYmUgc2hvd24gYW5kIGFuIGVycm9yIGV4aXQgY29kZSB3aWxsIGJlIHJldHVybmVkLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RyZWFtPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVVzZSBzdHJlYW1pbmcgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkFQSTwvYWNyb255bT4gLSB1c2VmdWwgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uCi0JCQl3aXRoIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVsYXhuZzwvY29kZT4gb3IgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12YWxpZDwvY29kZT4gb3B0aW9ucwotCQkJZm9yIHZhbGlkYXRpb24gb2YgZmlsZXMgdGhhdCBhcmUgdG9vIGxhcmdlIHRvIGJlIGhlbGQgaW4gbWVtb3J5LgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdGVzdElPPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5UZXN0IHVzZXIgaW5wdXQvb3V0cHV0IHN1cHBvcnQuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRpbWluZzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRpbWUgaXQgdGFrZXMgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gdG8gcGVyZm9ybSB0aGUKLQkJCXZhcmlvdXMgc3RlcHMuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12YWxpZDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlEZXRlcm1pbmUgaWYgdGhlIGRvY3VtZW50IGlzIGEgdmFsaWQgaW5zdGFuY2Ugb2YgdGhlIGluY2x1ZGVkCi0JCQlEb2N1bWVudCBUeXBlIERlZmluaXRpb24gKDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+KS4KLQkJCUEgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkRURDwvYWNyb255bT4gdG8gYmUgdmFsaWRhdGVkIGFnYWluc3QgYWxzbyBjYW4gYmUKLQkJCXNwZWNpZmllZCBhdCB0aGUgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWR0ZHZhbGlkPC9jb2RlPgotCQkJb3B0aW9uLiBCeSBkZWZhdWx0LCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPiBhbHNvIGNoZWNrcyB0byBkZXRlcm1pbmUgaWYgdGhlCi0JCQlkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZC4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJRGlzcGxheSB0aGUgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2l0ZXJlZmVudHJ5Ij48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+bGlieG1sPC9zcGFuPigzKTwvc3Bhbj4gdXNlZC4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXdhbGtlcjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlUZXN0IHRoZSB3YWxrZXIgbW9kdWxlLCB3aGljaCBpcyBhIHJlYWRlciBpbnRlcmZhY2UgYnV0IGZvciBhCi0JCQlkb2N1bWVudCB0cmVlLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWFkZXIgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkFQSTwvYWNyb255bT4gb24KLQkJCWFuIHVucGFyc2VkIGRvY3VtZW50IGl0IHdvcmtzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSB0cmVlLiBVc2VkIGZvcgotCQkJZGVidWdnaW5nLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0teGluY2x1ZGU8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRvIFhJbmNsdWRlIHByb2Nlc3NpbmcuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXhtbG91dDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1odG1sPC9jb2RlPi4gVXN1YWxseQotCQkJd2hlbiA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+SFRNTDwvYWNyb255bT4gaXMgcGFyc2VkIHRoZSBkb2N1bWVudCBpcyBzYXZlZCB3aXRoCi0JCQl0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkhUTUw8L2Fjcm9ueW0+IHNlcmlhbGl6ZXIuIEJ1dCB3aXRoIHRoaXMgb3B0aW9uIHRoZQotCQkJcmVzdWx0aW5nIGRvY3VtZW50IGlzIHNhdmVkIHdpdGggdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+Ci0JCQlzZXJpYWxpemVyLiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvCi0JCQlnZW5lcmF0ZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WEhUTUw8L2Fjcm9ueW0+IGZyb20gPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkhUTUw8L2Fjcm9ueW0+IGlucHV0LgotCQk8L3A+PC9kZD48L2RsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJlZnNlY3QxIj48YSBuYW1lPSJzaGVsbCI+PC9hPjxoMj5TSEVMTCBDT01NQU5EUzwvaDI+PHA+Ci0JCTxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IG9mZmVycyBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBtb2RlIGludm9rZWQgd2l0aAotCQl0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaGVsbDwvY29kZT4gY29tbWFuZC4gQXZhaWxhYmxlIGNvbW1hbmRzIGluIHNoZWxsIG1vZGUKLQkJaW5jbHVkZSAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKToKLQk8L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5iYXNlPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5EaXNwbGF5IDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGJhc2Ugb2YgdGhlIG5vZGUuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5ieWU8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkxlYXZlIHRoZSBzaGVsbC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmNhdCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5OT0RFPC9jb2RlPjwvZW0+PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5EaXNwbGF5IHRoZSBnaXZlbiBub2RlIG9yIHRoZSBjdXJyZW50IG9uZS48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmNkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEg8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJQ2hhbmdlIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhlIGdpdmVuIHBhdGggKGlmIHVuaXF1ZSkgb3Igcm9vdCBpZiBubwotCQkJYXJndW1lbnQgaXMgZ2l2ZW4uCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+ZGlyIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEg8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJRHVtcHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgKG5hbWVzcGFjZSwgYXR0cmlidXRlcywgY29udGVudCkuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+ZHUgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UEFUSDwvY29kZT48L2VtPjwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+Ci0JCQlTaG93IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHN1YnRyZWUgdW5kZXIgdGhlIGdpdmVuIHBhdGggb3IgdGhlIGN1cnJlbnQgbm9kZS4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5leGl0PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5MZWF2ZSB0aGUgc2hlbGwuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5oZWxwPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5TaG93IHRoaXMgaGVscC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmZyZWU8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkRpc3BsYXkgbWVtb3J5IHVzYWdlLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+bG9hZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPjwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+TG9hZCBhIG5ldyBkb2N1bWVudCB3aXRoIHRoZSBnaXZlbiBmaWxlbmFtZS48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmxzIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEg8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkxpc3QgY29udGVudHMgb2YgdGhlIGdpdmVuIHBhdGggb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+cHdkPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5EaXNwbGF5IHRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IG5vZGUuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5xdWl0PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5MZWF2ZSB0aGUgc2hlbGwuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5zYXZlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZJTEVOQU1FPC9jb2RlPjwvZW0+PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCVNhdmUgdGhlIGN1cnJlbnQgZG9jdW1lbnQgdG8gdGhlIGdpdmVuIGZpbGVuYW1lIG9yIHRvIHRoZSBvcmlnaW5hbCBuYW1lLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPnZhbGlkYXRlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5DaGVjayB0aGUgZG9jdW1lbnQgZm9yIGVycm9ycy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPndyaXRlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZJTEVOQU1FPC9jb2RlPjwvZW0+PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5Xcml0ZSB0aGUgY3VycmVudCBub2RlIHRvIHRoZSBnaXZlbiBmaWxlbmFtZS48L3A+PC9kZD48L2RsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJlZnNlY3QxIj48YSBuYW1lPSJlbnZpcm9ubWVudCI+PC9hPjxoMj5FTlZJUk9OTUVOVDwvaDI+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iZW52YXIiPlNHTUxfQ0FUQUxPR19GSUxFUzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+PGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgcmVkaXJlY3RpbmcKLQkJCXF1ZXJpZXMgdG8gdGhlIHVzZXIncyBvd24gc2V0IG9mIGNhdGFsb2dzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcKLQkJCXRoZSA8Y29kZSBjbGFzcz0iZW52YXIiPlNHTUxfQ0FUQUxPR19GSUxFUzwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBsaXN0Ci0JCQlvZiBjYXRhbG9ncy4gQW4gZW1wdHkgb25lIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlCi0JCQlkZWZhdWx0IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2V0Yy9zZ21sL2NhdGFsb2c8L2NvZGU+IGNhdGFsb2cuCi0JCTwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImVudmFyIj5YTUxfQ0FUQUxPR19GSUxFUzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+PGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZwotCQkJcXVlcmllcyB0byB0aGUgdXNlcidzIG93biBzZXQgb2YgY2F0YWxvZ3MuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZwotCQkJdGhlIDxjb2RlIGNsYXNzPSJlbnZhciI+WE1MX0NBVEFMT0dfRklMRVM8L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc3BhY2Utc2VwYXJhdGVkCi0JCQlsaXN0IG9mIGNhdGFsb2dzLiBVc2UgcGVyY2VudC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMuCi0JCQlBbiBlbXB0eSB2YXJpYWJsZSBzaG91bGQgZGVhY3RpdmF0ZSBsb2FkaW5nIHRoZSBkZWZhdWx0IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2V0Yy94bWwvY2F0YWxvZzwvY29kZT4gY2F0YWxvZy4KLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iZW52YXIiPlhNTF9ERUJVR19DQVRBTE9HPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5TZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZSBjbGFzcz0iZW52YXIiPlhNTF9ERUJVR19DQVRBTE9HPC9jb2RlPgotCQkJdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5vbi16ZXJvPC9jb2RlPjwvZW0+IHVzaW5nIHRoZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5leHBvcnQ8L3N0cm9uZz48L3NwYW4+Ci0JCQljb21tYW5kIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gY2F0YWxvZyBvcGVyYXRpb25zLgotCQk8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJlbnZhciI+WE1MTElOVF9JTkRFTlQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxjb2RlIGNsYXNzPSJlbnZhciI+WE1MTElOVF9JTkRFTlQ8L2NvZGU+Ci0JCQljb250cm9scyB0aGUgaW5kZW50YXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHR3byBzcGFjZXMgIiAgIi4KLQkJPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0iZGlhZ25vc3RpY3MiPjwvYT48aDI+RElBR05PU1RJQ1M8L2gyPjxwPgotCQk8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPiByZXR1cm4gY29kZXMgcHJvdmlkZSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdoZW4KLQkJY2FsbGluZyBpdCBmcm9tIHNjcmlwdHMuCi0JPC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVycm9yY29kZSI+MDwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+Tm8gZXJyb3I8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjE8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPlVuY2xhc3NpZmllZDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVycm9yY29kZSI+Mjwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+RXJyb3IgaW4gPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkRURDwvYWNyb255bT48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjM8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPlZhbGlkYXRpb24gZXJyb3I8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjQ8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPlZhbGlkYXRpb24gZXJyb3I8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjU8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkVycm9yIGluIHNjaGVtYSBjb21waWxhdGlvbjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVycm9yY29kZSI+Njwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+RXJyb3Igd3JpdGluZyBvdXRwdXQ8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjc8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgotCQkJRXJyb3IgaW4gcGF0dGVybiAoZ2VuZXJhdGVkIHdoZW4gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wYXR0ZXJuPC9jb2RlPiBvcHRpb24gaXMgdXNlZCkKLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj44PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD4KLQkJCUVycm9yIGluIFJlYWRlciByZWdpc3RyYXRpb24gKGdlbmVyYXRlZAotCQkJd2hlbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNoa3JlZ2lzdGVyPC9jb2RlPiBvcHRpb24gaXMgdXNlZCkKLQkJPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj45PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5PdXQgb2YgbWVtb3J5IGVycm9yPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj4xMDwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+WFBhdGggZXZhbHVhdGlvbiBlcnJvcjwvcD48L2RkPjwvZGw+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9InNlZWFsc28iPjwvYT48aDI+U0VFIEFMU088L2gyPjxwPjxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5saWJ4bWw8L3NwYW4+KDMpPC9zcGFuPgotCTwvcD48cD4KLQkJTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKLQkJPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+IHdlYiBwYWdlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIiIHRhcmdldD0iX3RvcCI+aHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDI8L2E+Ci0JCQkJPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KLQk8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KKzxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT54bWxsaW50PC90aXRsZT48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFZzbmFwc2hvdCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJyZWZlbnRyeSI+PGEgbmFtZT0iaWRtMSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+PGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PGgyPk5hbWU8L2gyPjxwPnhtbGxpbnQgJiM4MjEyOyBjb21tYW5kIGxpbmUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gdG9vbDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+PGgyPlN5bm9wc2lzPC9oMj48ZGl2IGNsYXNzPSJjbWRzeW5vcHNpcyI+PHA+PGNvZGUgY2xhc3M9ImNvbW1hbmQiPnhtbGxpbnQ8L2NvZGU+ICBbIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmVyc2lvbjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcXVpZXQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaGVsbDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXhwYXRoICI8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5YUGF0aF9leHByZXNzaW9uPC9jb2RlPjwvZW0+IjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnZW50PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY29weTwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlY292ZXI8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2RpY3Q8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2VudDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vb3V0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9uZXQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wYXRoICI8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5QQVRIKFMpPC9jb2RlPjwvZW0+IjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWxvYWQtdHJhY2U8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1odG1sb3V0PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm93cmFwPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmFsaWQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wb3N0dmFsaWQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kdGR2YWxpZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5VUkw8L2NvZGU+PC9lbT48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kdGR2YWxpZGZwaSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GUEk8L2NvZGU+PC9lbT48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS10aW1pbmc8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RklMRTwvY29kZT48L2VtPjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlcGVhdDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWluc2VydDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNvbXByZXNzPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taHRtbDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXhtbG91dDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXB1c2g8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1tZW1vcnk8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1tYXgtYW1wbCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWF4bWVtIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPk5CQllURVM8L2NvZGU+PC9lbT48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub3dhcm5pbmc8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2JsYW5rczwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vY2RhdGE8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1mb3JtYXQ8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1lbmNvZGUgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RU5DT0RJTkc8L2NvZGU+PC9lbT48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kcm9wZHRkPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbnNjbGVhbjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRlc3RJTzwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNhdGFsb2dzPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9jYXRhbG9nczwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWF1dG88L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS14aW5jbHVkZTwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5veGluY2x1ZGVub2RlPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbG9hZGR0ZDwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWR0ZGF0dHI8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zdHJlYW08L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS13YWxrZXI8L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wYXR0ZXJuIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVFRFUk5WQUxVRTwvY29kZT48L2VtPjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNoa3JlZ2lzdGVyPC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcmVsYXhuZyA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5TQ0hFTUE8L2NvZGU+PC9lbT48L2NvZGU+ICB8ICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zY2hlbWEgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+U0NIRU1BPC9jb2RlPjwvZW0+PC9jb2RlPiAgfCAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYzE0bjwvY29kZT4gIHwgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBlZGFudGljPC9jb2RlPiBdIHsgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+WE1MLUZJTEUoUyk8L2NvZGU+PC9lbT4uLi4gIHwgICAtIH08L3A+PC9kaXY+PGRpdiBjbGFzcz0iY21kc3lub3BzaXMiPjxwPjxjb2RlIGNsYXNzPSJjb21tYW5kIj54bWxsaW50PC9jb2RlPiAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taGVscDwvY29kZT4gPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJlZnNlY3QxIj48YSBuYW1lPSJkZXNjcmlwdGlvbiI+PC9hPjxoMj5ERVNDUklQVElPTjwvaDI+PHA+CisgICAgICAgIFRoZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPiBwcm9ncmFtIHBhcnNlcyBvbmUgb3IgbW9yZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBmaWxlcywKKyAgICAgICAgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+WE1MLUZJTEU8L2NvZGU+PC9lbT4KKyAgICAgICAgKG9yIHRoZSBzdGFuZGFyZCBpbnB1dCBpZiB0aGUgZmlsZW5hbWUgcHJvdmlkZWQKKyAgICAgICAgaXMgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+LTwvc3Ryb25nPjwvc3Bhbj4gKS4gSXQgcHJpbnRzIHZhcmlvdXMgdHlwZXMgb2YKKyAgICAgICAgb3V0cHV0LCBkZXBlbmRpbmcgdXBvbiB0aGUgb3B0aW9ucyBzZWxlY3RlZC4gSXQgaXMgdXNlZnVsIGZvciBkZXRlY3RpbmcKKyAgICAgICAgZXJyb3JzIGJvdGggaW4gPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gY29kZSBhbmQgaW4KKyAgICAgICAgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IHBhcnNlciBpdHNlbGYuCisgICAgPC9wPjxwPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IGlzIGluY2x1ZGVkIGluIDxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5saWJ4bWw8L3NwYW4+KDMpPC9zcGFuPi48L3A+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9Im9wdGlvbnMiPjwvYT48aDI+T1BUSU9OUzwvaDI+PHA+CisgICAgICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zIChpbiBhbHBoYWJldGljYWwgb3JkZXIpOgorICAgIDwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYXV0bzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+R2VuZXJhdGUgYSBzbWFsbCBkb2N1bWVudCBmb3IgdGVzdGluZyBwdXJwb3Nlcy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY2F0YWxvZ3M8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5TR01MPC9hY3JvbnltPiBjYXRhbG9nKHMpIGZyb20gPGNvZGUgY2xhc3M9ImVudmFyIj5TR01MX0NBVEFMT0dfRklMRVM8L2NvZGU+LgorICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gY2F0YWxvZ3Mgc3RhcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgZnJvbSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9ldGMveG1sL2NhdGFsb2c8L2NvZGU+IG9yLCBtb3JlIHNwZWNpZmljYWxseSwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nPC9jb2RlPiBhcmUgdXNlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jaGtyZWdpc3RlcjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFR1cm4gb24gbm9kZSByZWdpc3RyYXRpb24uIFVzZWZ1bCBmb3IgZGV2ZWxvcGVycyB0ZXN0aW5nIDxzcGFuIGNsYXNzPSJjaXRlcmVmZW50cnkiPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5saWJ4bWw8L3NwYW4+KDMpPC9zcGFuPiBub2RlIHRyYWNraW5nIGNvZGUuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNvbXByZXNzPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgVHVybiBvbiA8c3BhbiBjbGFzcz0iY2l0ZXJlZmVudHJ5Ij48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Z3ppcDwvc3Bhbj4oMSk8L3NwYW4+IGNvbXByZXNzaW9uIG9mIG91dHB1dC4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY29weTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGVzdCB0aGUgaW50ZXJuYWwgY29weSBpbXBsZW1lbnRhdGlvbi48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYzE0bjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgVzNDIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IENhbm9uaWNhbGlzYXRpb24gKDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5DMTROPC9hY3JvbnltPikgdG8KKyAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4uCisgICAgICAgICAgICAgICAgICAgIEl0IGtlZXBzIGNvbW1lbnRzIGluIHRoZSByZXN1bHQuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWR0ZHZhbGlkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlVSTDwvY29kZT48L2VtPjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkRURDwvYWNyb255bT4gc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIGFuIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlVSTDwvY29kZT48L2VtPiBmb3IgdmFsaWRhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZHRkdmFsaWRmcGkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RlBJPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+RFREPC9hY3JvbnltPiBzcGVjaWZpZWQgYnkgYSBGb3JtYWwgUHVibGljCisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RlBJPC9jb2RlPjwvZW0+IGZvciB2YWxpZGF0aW9uLCBub3RlIHRoYXQgdGhpcworICAgICAgICAgICAgICAgICAgICB3aWxsIHJlcXVpcmUgYSBjYXRhbG9nIGV4cG9ydGluZyB0aGF0IEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllciB0byB3b3JrLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZWJ1ZzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFBhcnNlIGEgZmlsZSBhbmQgb3V0cHV0IGFuIGFubm90YXRlZCB0cmVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBpbi1tZW1vcnkgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnZW50PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5EZWJ1ZyB0aGUgZW50aXRpZXMgZGVmaW5lZCBpbiB0aGUgZG9jdW1lbnQuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRyb3BkdGQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlJlbW92ZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+RFREPC9hY3JvbnltPiBmcm9tIG91dHB1dC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZHRkYXR0cjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIEZldGNoIGV4dGVybmFsIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+IGFuZCBwb3B1bGF0ZSB0aGUgdHJlZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZCBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1lbmNvZGUgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RU5DT0RJTkc8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPk91dHB1dCBpbiB0aGUgZ2l2ZW4gZW5jb2RpbmcuIE5vdGUgdGhhdCB0aGlzIHdvcmtzIGZvciBmdWxsIGRvY3VtZW50IG5vdCBmcmFnbWVudHMgb3IgcmVzdWx0IGZyb20gWFBhdGggcXVlcmllcy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZm9ybWF0PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgUmVmb3JtYXQgYW5kIHJlaW5kZW50IHRoZSBvdXRwdXQuIFRoZSA8Y29kZSBjbGFzcz0iZW52YXIiPlhNTExJTlRfSU5ERU5UPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250cm9scyB0aGUgaW5kZW50YXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHR3bworICAgICAgICAgICAgICAgICAgICBzcGFjZXMgIiAgIikuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlByaW50IG91dCBhIHNob3J0IHVzYWdlIHN1bW1hcnkgZm9yIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+LjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1odG1sPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5Vc2UgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5IVE1MPC9hY3JvbnltPiBwYXJzZXIuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWh0bWxvdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBPdXRwdXQgcmVzdWx0cyBhcyBhbiA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+SFRNTDwvYWNyb255bT4gZmlsZS4gVGhpcworICAgICAgICAgICAgICAgICAgICBjYXVzZXMgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gdG8gb3V0cHV0IHRoZSBuZWNlc3NhcnkgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkhUTUw8L2Fjcm9ueW0+CisgICAgICAgICAgICAgICAgICAgIHRhZ3Mgc3Vycm91bmRpbmcgdGhlIHJlc3VsdCB0cmVlIG91dHB1dCBzbyB0aGUgcmVzdWx0cyBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkL3ZpZXdlZCBpbiBhIGJyb3dzZXIuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWluc2VydDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGVzdCBmb3IgdmFsaWQgaW5zZXJ0aW9ucy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbG9hZGR0ZDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+RmV0Y2ggYW4gZXh0ZXJuYWwgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkRURDwvYWNyb255bT4uPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWxvYWQtdHJhY2U8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IGFsbCB0aGUgZG9jdW1lbnRzIGxvYWRlZCBkdXJpbmcgdGhlIHByb2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgdG8gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5zdGRlcnI8L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1tYXgtYW1wbCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIGFtcGxpZmljYXRpb24gZmFjdG9yIHdoaWNoIHByb3RlY3RzIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgZW50aXR5IGV4cGFuc2lvbiAoImJpbGxpb24gbGF1Z2hzIikuIFRoZSBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlzIDUuIERvY3VtZW50cyBtYWtpbmcgaGVhdnkgdXNlIG9mIGVudGl0eSBleHBhbnNpb24gbWF5IHJlcXVpcmUgYQorICAgICAgICAgICAgICAgICAgICBoaWdoZXIgdmFsdWUuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1heG1lbSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5OTkJZVEVTPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgVGVzdCB0aGUgcGFyc2VyIG1lbW9yeSBzdXBwb3J0LiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5OTkJZVEVTPC9jb2RlPjwvZW0+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgbGlicmFyeSBpcyBhbGxvd2VkIHRvIGFsbG9jYXRlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBzdXJlIGJhdGNoIHByb2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgb2YgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gZmlsZXMgd2lsbCBub3QgZXhoYXVzdCB0aGUgdmlydHVhbCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNlcnZlciBydW5uaW5nIHRoZW0uCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW1lbW9yeTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UGFyc2UgZnJvbSBtZW1vcnkuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vYmxhbmtzPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5Ecm9wIGlnbm9yYWJsZSBibGFuayBzcGFjZXMuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vY2F0YWxvZ3M8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRvIG5vdCB1c2UgYW55IGNhdGFsb2dzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2NkYXRhPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5TdWJzdGl0dXRlIENEQVRBIHNlY3Rpb24gYnkgZXF1aXZhbGVudCB0ZXh0IG5vZGVzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub2RpY3Q8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBEb24ndCB1c2UgZGljdGlvbmFyaWVzIChwYXJzZXIgb3B0aW9uIFhNTF9QQVJTRV9OT0RJQ1QpLgorICAgICAgICAgICAgICAgICAgICBPbmx5IGZvciBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vZW50PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgU3Vic3RpdHV0ZSBlbnRpdHkgdmFsdWVzIGZvciBlbnRpdHkgcmVmZXJlbmNlcy4gQnkgZGVmYXVsdCwgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgbGVhdmVzIGVudGl0eSByZWZlcmVuY2VzIGluIHBsYWNlLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub25ldDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgdGhlIEludGVybmV0IHRvIGZldGNoIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+cyBvciBlbnRpdGllcy4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbm9vdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBTdXBwcmVzcyBvdXRwdXQuIEJ5IGRlZmF1bHQsIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IG91dHB1dHMgdGhlIHJlc3VsdCB0cmVlLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub3dhcm5pbmc8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRvIG5vdCBlbWl0IHdhcm5pbmdzIGZyb20gdGhlIHBhcnNlciBhbmQvb3IgdmFsaWRhdG9yLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub3dyYXA8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRvIG5vdCBvdXRwdXQgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkhUTUw8L2Fjcm9ueW0+IGRvYyB3cmFwcGVyLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ub3hpbmNsdWRlbm9kZTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIERvIFhJbmNsdWRlIHByb2Nlc3NpbmcgYnV0IGRvIG5vdCBnZW5lcmF0ZSBYSW5jbHVkZSBzdGFydCBhbmQgZW5kIG5vZGVzLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1uc2NsZWFuPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5SZW1vdmUgcmVkdW5kYW50IG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lIGEgZmlsZSBwYXRoIHdoZXJlIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IHdpbGwgc2F2ZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIFVzdWFsbHkgdGhlIHByb2dyYW1zIGJ1aWxkIGEgdHJlZSBhbmQgc2F2ZSBpdAorICAgICAgICAgICAgICAgICAgICBvbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0ZG91dDwvY29kZT4sIHdpdGggdGhpcyBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+WE1MPC9hY3JvbnltPiBpbnN0YW5jZSB3aWxsIGJlIHNhdmVkIG9udG8gYSBmaWxlLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wYXRoICI8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5QQVRIKFMpPC9jb2RlPjwvZW0+IjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgKHNwYWNlLSBvciBjb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgZmlsZXN5c3RlbSBwYXRocyBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UEFUSFM8L2NvZGU+PC9lbT4gdG8gbG9hZCA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+RFREPC9hY3JvbnltPnMgb3IKKyAgICAgICAgICAgICAgICAgICAgZW50aXRpZXMuIEVuY2xvc2Ugc3BhY2Utc2VwYXJhdGVkIGxpc3RzIGJ5IHF1b3RhdGlvbiBtYXJrcy4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcGF0dGVybiA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5QQVRURVJOVkFMVUU8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGV4ZXJjaXNlIHRoZSBwYXR0ZXJuIHJlY29nbml0aW9uIGVuZ2luZSwgd2hpY2ggY2FuIGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgcmVhZGVyIGludGVyZmFjZSB0byB0aGUgcGFyc2VyLiBJdCBhbGxvd3MgdG8gc2VsZWN0IHNvbWUKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMgaW4gdGhlIGRvY3VtZW50IGJhc2VkIG9uIGFuIFhQYXRoIChzdWJzZXQpIGV4cHJlc3Npb24uIFVzZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcGVkYW50aWM8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkVuYWJsZSBhZGRpdGlvbmFsIHdhcm5pbmdzLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wb3N0dmFsaWQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlZhbGlkYXRlIGFmdGVyIHBhcnNpbmcgaGFzIGNvbXBsZXRlZC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcHVzaDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VXNlIHRoZSBwdXNoIG1vZGUgb2YgdGhlIHBhcnNlci48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcXVpZXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPkRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdG8gc3RkZXJyLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1yZWNvdmVyPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5PdXRwdXQgYW55IHBhcnNhYmxlIHBvcnRpb25zIG9mIGFuIGludmFsaWQgZG9jdW1lbnQuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlbGF4bmcgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+U0NIRU1BPC9jb2RlPjwvZW0+PC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIFJlbGF4TkcgZmlsZSBuYW1lZCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5TQ0hFTUE8L2NvZGU+PC9lbT4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlcGVhdDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+UmVwZWF0IDEwMCB0aW1lcywgZm9yIHRpbWluZyBvciBwcm9maWxpbmcuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNjaGVtYSA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5TQ0hFTUE8L2NvZGU+PC9lbT48L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBVc2UgYSBXM0MgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhNTDwvYWNyb255bT4gU2NoZW1hIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+U0NIRU1BPC9jb2RlPjwvZW0+IGZvciB2YWxpZGF0aW9uLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaGVsbDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFJ1biBhIG5hdmlnYXRpbmcgc2hlbGwuIERldGFpbHMgb24gYXZhaWxhYmxlIGNvbW1hbmRzIGluIHNoZWxsIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXJlIGJlbG93IChzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNzaGVsbCIgdGl0bGU9IlNIRUxMIENPTU1BTkRTIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1NIRUxMIENPTU1BTkRTJiM4MjIxOzwvYT4pLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS14cGF0aCAiPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+WFBhdGhfZXhwcmVzc2lvbjwvY29kZT48L2VtPiI8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBSdW4gYW4gWFBhdGggZXhwcmVzc2lvbiBnaXZlbiBhcyBhcmd1bWVudCBhbmQgcHJpbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC4gSW4gY2FzZSBvZiBhIG5vZGVzZXQgcmVzdWx0LCBlYWNoIG5vZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIG5vZGUgc2V0IGlzIHNlcmlhbGl6ZWQgaW4gZnVsbCBpbiB0aGUgb3V0cHV0LiBJbiBjYXNlCisgICAgICAgICAgICAgICAgICAgIG9mIGFuIGVtcHR5IG5vZGUgc2V0IHRoZSAiWFBhdGggc2V0IGlzIGVtcHR5IiByZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzaG93biBhbmQgYW4gZXJyb3IgZXhpdCBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXN0cmVhbTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFVzZSBzdHJlYW1pbmcgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkFQSTwvYWNyb255bT4gLSB1c2VmdWwgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uCisgICAgICAgICAgICAgICAgICAgIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1yZWxheG5nPC9jb2RlPiBvciA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZhbGlkPC9jb2RlPiBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgIGZvciB2YWxpZGF0aW9uIG9mIGZpbGVzIHRoYXQgYXJlIHRvbyBsYXJnZSB0byBiZSBoZWxkIGluIG1lbW9yeS4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdGVzdElPPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5UZXN0IHVzZXIgaW5wdXQvb3V0cHV0IHN1cHBvcnQuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRpbWluZzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIE91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGltZSBpdCB0YWtlcyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz54bWxsaW50PC9zdHJvbmc+PC9zcGFuPiB0byBwZXJmb3JtIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIHN0ZXBzLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12YWxpZDwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZSBpZiB0aGUgZG9jdW1lbnQgaXMgYSB2YWxpZCBpbnN0YW5jZSBvZiB0aGUgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uICg8YWNyb255bSBjbGFzcz0iYWNyb255bSI+RFREPC9hY3JvbnltPikuCisgICAgICAgICAgICAgICAgICAgIEEgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkRURDwvYWNyb255bT4gdG8gYmUgdmFsaWRhdGVkIGFnYWluc3QgYWxzbyBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGF0IHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZHRkdmFsaWQ8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4gQnkgZGVmYXVsdCwgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gYWxzbyBjaGVja3MgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZC4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmVyc2lvbjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhlIHZlcnNpb24gb2YgPHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+IHVzZWQuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXdhbGtlcjwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CisgICAgICAgICAgICAgICAgICAgIFRlc3QgdGhlIHdhbGtlciBtb2R1bGUsIHdoaWNoIGlzIGEgcmVhZGVyIGludGVyZmFjZSBidXQgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgdHJlZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVhZGVyIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5BUEk8L2Fjcm9ueW0+IG9uCisgICAgICAgICAgICAgICAgICAgIGFuIHVucGFyc2VkIGRvY3VtZW50IGl0IHdvcmtzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSB0cmVlLiBVc2VkIGZvcgorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXhpbmNsdWRlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5EbyBYSW5jbHVkZSBwcm9jZXNzaW5nLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS14bWxvdXQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1odG1sPC9jb2RlPi4gVXN1YWxseQorICAgICAgICAgICAgICAgICAgICB3aGVuIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5IVE1MPC9hY3JvbnltPiBpcyBwYXJzZWQgdGhlIGRvY3VtZW50IGlzIHNhdmVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5IVE1MPC9hY3JvbnltPiBzZXJpYWxpemVyLiBCdXQgd2l0aCB0aGlzIG9wdGlvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIGRvY3VtZW50IGlzIHNhdmVkIHdpdGggdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlhIVE1MPC9hY3JvbnltPiBmcm9tIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5IVE1MPC9hY3JvbnltPiBpbnB1dC4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48L2RsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJlZnNlY3QxIj48YSBuYW1lPSJzaGVsbCI+PC9hPjxoMj5TSEVMTCBDT01NQU5EUzwvaDI+PHA+CisgICAgICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz48L3NwYW4+IG9mZmVycyBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBtb2RlIGludm9rZWQgd2l0aAorICAgICAgICB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaGVsbDwvY29kZT4gY29tbWFuZC4gQXZhaWxhYmxlIGNvbW1hbmRzIGluIHNoZWxsIG1vZGUKKyAgICAgICAgaW5jbHVkZSAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKToKKyAgICA8L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5iYXNlPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5EaXNwbGF5IDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGJhc2Ugb2YgdGhlIG5vZGUuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5ieWU8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkxlYXZlIHRoZSBzaGVsbC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmNhdCA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5OT0RFPC9jb2RlPjwvZW0+PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5EaXNwbGF5IHRoZSBnaXZlbiBub2RlIG9yIHRoZSBjdXJyZW50IG9uZS48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmNkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEg8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdGhlIGN1cnJlbnQgbm9kZSB0byB0aGUgZ2l2ZW4gcGF0aCAoaWYgdW5pcXVlKSBvciByb290IGlmIG5vCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IGlzIGdpdmVuLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+ZGlyIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEg8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBEdW1wcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSAobmFtZXNwYWNlLCBhdHRyaWJ1dGVzLCBjb250ZW50KS4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmR1IDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPlBBVEg8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBTaG93IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHN1YnRyZWUgdW5kZXIgdGhlIGdpdmVuIHBhdGggb3IgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmV4aXQ8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkxlYXZlIHRoZSBzaGVsbC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmhlbHA8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPlNob3cgdGhpcyBoZWxwLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+ZnJlZTwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+RGlzcGxheSBtZW1vcnkgdXNhZ2UuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5sb2FkIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZJTEVOQU1FPC9jb2RlPjwvZW0+PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5Mb2FkIGEgbmV3IGRvY3VtZW50IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+bHMgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+UEFUSDwvY29kZT48L2VtPjwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kdD48ZGQ+PHA+TGlzdCBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gcGF0aCBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5wd2Q8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkRpc3BsYXkgdGhlIHBhdGggdG8gdGhlIGN1cnJlbnQgbm9kZS48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnF1aXQ8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkxlYXZlIHRoZSBzaGVsbC48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnNhdmUgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+RklMRU5BTUU8L2NvZGU+PC9lbT48L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBTYXZlIHRoZSBjdXJyZW50IGRvY3VtZW50IHRvIHRoZSBnaXZlbiBmaWxlbmFtZSBvciB0byB0aGUgb3JpZ2luYWwgbmFtZS4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPnZhbGlkYXRlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5DaGVjayB0aGUgZG9jdW1lbnQgZm9yIGVycm9ycy48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPndyaXRlIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZJTEVOQU1FPC9jb2RlPjwvZW0+PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5Xcml0ZSB0aGUgY3VycmVudCBub2RlIHRvIHRoZSBnaXZlbiBmaWxlbmFtZS48L3A+PC9kZD48L2RsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InJlZnNlY3QxIj48YSBuYW1lPSJlbnZpcm9ubWVudCI+PC9hPjxoMj5FTlZJUk9OTUVOVDwvaDI+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iZW52YXIiPlNHTUxfQ0FUQUxPR19GSUxFUzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+PGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgcmVkaXJlY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcXVlcmllcyB0byB0aGUgdXNlcidzIG93biBzZXQgb2YgY2F0YWxvZ3MuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZworICAgICAgICAgICAgICAgICAgICB0aGUgPGNvZGUgY2xhc3M9ImVudmFyIj5TR01MX0NBVEFMT0dfRklMRVM8L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgbGlzdAorICAgICAgICAgICAgICAgICAgICBvZiBjYXRhbG9ncy4gQW4gZW1wdHkgb25lIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgY2F0YWxvZy4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJlbnZhciI+WE1MX0NBVEFMT0dfRklMRVM8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPjxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5YTUw8L2Fjcm9ueW0+IGNhdGFsb2cgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgcmVkaXJlY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcXVlcmllcyB0byB0aGUgdXNlcidzIG93biBzZXQgb2YgY2F0YWxvZ3MuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZworICAgICAgICAgICAgICAgICAgICB0aGUgPGNvZGUgY2xhc3M9ImVudmFyIj5YTUxfQ0FUQUxPR19GSUxFUzwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBzcGFjZS1zZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBjYXRhbG9ncy4gVXNlIHBlcmNlbnQtZW5jb2RpbmcgdG8gZXNjYXBlIHNwYWNlcyBvciBvdGhlciBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgICAgICBBbiBlbXB0eSB2YXJpYWJsZSBzaG91bGQgZGVhY3RpdmF0ZSBsb2FkaW5nIHRoZSBkZWZhdWx0IGNhdGFsb2cuCisgICAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iZW52YXIiPlhNTF9ERUJVR19DQVRBTE9HPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5TZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZSBjbGFzcz0iZW52YXIiPlhNTF9ERUJVR19DQVRBTE9HPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm9uLXplcm88L2NvZGU+PC9lbT4gdXNpbmcgdGhlIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmV4cG9ydDwvc3Ryb25nPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvdXRwdXRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGNhdGFsb2cgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJlbnZhciI+WE1MTElOVF9JTkRFTlQ8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxjb2RlIGNsYXNzPSJlbnZhciI+WE1MTElOVF9JTkRFTlQ8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzIHRoZSBpbmRlbnRhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHdvIHNwYWNlcyAiICAiLgorICAgICAgICAgICAgICAgIDwvcD48L2RkPjwvZGw+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icmVmc2VjdDEiPjxhIG5hbWU9ImRpYWdub3N0aWNzIj48L2E+PGgyPkRJQUdOT1NUSUNTPC9oMj48cD4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eG1sbGludDwvc3Ryb25nPjwvc3Bhbj4gcmV0dXJuIGNvZGVzIHByb3ZpZGUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCB3aGVuCisgICAgICAgIGNhbGxpbmcgaXQgZnJvbSBzY3JpcHRzLgorICAgIDwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjA8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPk5vIGVycm9yPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj4xPC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5VbmNsYXNzaWZpZWQ8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjI8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkVycm9yIGluIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5EVEQ8L2Fjcm9ueW0+PC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj4zPC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5WYWxpZGF0aW9uIGVycm9yPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj40PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5WYWxpZGF0aW9uIGVycm9yPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj41PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5FcnJvciBpbiBzY2hlbWEgY29tcGlsYXRpb248L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjY8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPkVycm9yIHdyaXRpbmcgb3V0cHV0PC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZXJyb3Jjb2RlIj43PC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD4KKyAgICAgICAgICAgICAgICAgICAgRXJyb3IgaW4gcGF0dGVybiAoZ2VuZXJhdGVkIHdoZW4gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1wYXR0ZXJuPC9jb2RlPiBvcHRpb24gaXMgdXNlZCkKKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjg8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPgorICAgICAgICAgICAgICAgICAgICBFcnJvciBpbiBSZWFkZXIgcmVnaXN0cmF0aW9uIChnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgd2hlbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNoa3JlZ2lzdGVyPC9jb2RlPiBvcHRpb24gaXMgdXNlZCkKKyAgICAgICAgICAgICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjk8L3NwYW4+PC9zcGFuPjwvZHQ+PGRkPjxwPk91dCBvZiBtZW1vcnkgZXJyb3I8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlcnJvcmNvZGUiPjEwPC9zcGFuPjwvc3Bhbj48L2R0PjxkZD48cD5YUGF0aCBldmFsdWF0aW9uIGVycm9yPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+PGEgbmFtZT0ic2VlYWxzbyI+PC9hPjxoMj5TRUUgQUxTTzwvaDI+PHA+PHNwYW4gY2xhc3M9ImNpdGVyZWZlbnRyeSI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmxpYnhtbDwvc3Bhbj4oMyk8L3NwYW4+CisgICAgPC9wPjxwPgorICAgICAgICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48c3BhbiBjbGFzcz0iY2l0ZXJlZmVudHJ5Ij48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+bGlieG1sPC9zcGFuPigzKTwvc3Bhbj4gd2ViIHBhZ2UgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMiIgdGFyZ2V0PSJfdG9wIj5odHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMjwvYT4KKyAgICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgorICAgIDwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL3htbGxpbnQueG1sIGIvZG9jL3htbGxpbnQueG1sCmluZGV4IDczYjMyNWEuLmI4MWRhM2EgMTAwNjQ0Ci0tLSBhL2RvYy94bWxsaW50LnhtbAorKysgYi9kb2MveG1sbGludC54bWwKQEAgLTMsOTI5ICszLDk3MCBAQAogICAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvbWFucGFnZXMvZG9jYm9vay54c2wiPz4KIDwhRE9DVFlQRSByZWZlbnRyeSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFsKLSAgICAKKwogICAgIDwhRU5USVRZIHhtbGxpbnQgIjxjb21tYW5kPnhtbGxpbnQ8L2NvbW1hbmQ+Ij4KIF0+CiAKIDxyZWZlbnRyeT4KIAogPHJlZmVudHJ5aW5mbz4KLQk8dGl0bGU+eG1sbGludCBNYW51YWw8L3RpdGxlPgotCTxwcm9kdWN0bmFtZT5saWJ4bWwyPC9wcm9kdWN0bmFtZT4KLQk8Y29weXJpZ2h0PgotCQk8eWVhcj4yMDAxPC95ZWFyPgotCQk8eWVhcj4yMDA0PC95ZWFyPgotCTwvY29weXJpZ2h0PgotCTxhdXRob3Jncm91cD4KLQkJPGF1dGhvcj4KLQkJCTxmaXJzdG5hbWU+Sm9objwvZmlyc3RuYW1lPgotCQkJPHN1cm5hbWU+RmxlY2s8L3N1cm5hbWU+Ci0JCQk8YWZmaWxpYXRpb24+Ci0JCQkJPGFkZHJlc3M+Ci0JCQkJCTxlbWFpbD5qZmxlY2tAaW5rc3RhaW4ubmV0PC9lbWFpbD4KLQkJCQk8L2FkZHJlc3M+Ci0JCQk8L2FmZmlsaWF0aW9uPgotCQk8L2F1dGhvcj4KLQkJPGF1dGhvcj4KLQkJCTxmaXJzdG5hbWU+Wml5aW5nPC9maXJzdG5hbWU+Ci0JCQk8c3VybmFtZT5TaGVyd2luPC9zdXJuYW1lPgotCQkJPGFmZmlsaWF0aW9uPgotCQkJCTxhZGRyZXNzPgotCQkJCQk8ZW1haWw+c2hlcndpbkBubG0ubmloLmdvdjwvZW1haWw+Ci0JCQkJPC9hZGRyZXNzPgotCQkJPC9hZmZpbGlhdGlvbj4KLQkJPC9hdXRob3I+Ci0JCTxhdXRob3I+Ci0JCQk8Zmlyc3RuYW1lPkhlaWtvPC9maXJzdG5hbWU+Ci0JCQk8c3VybmFtZT5SdXBwPC9zdXJuYW1lPgotCQkJPGFmZmlsaWF0aW9uPgotCQkJCTxhZGRyZXNzPgotCQkJCQk8ZW1haWw+aHdyQHBpbGh1aG4uZGU8L2VtYWlsPgotCQkJCTwvYWRkcmVzcz4KLQkJCTwvYWZmaWxpYXRpb24+Ci0JCTwvYXV0aG9yPgotCTwvYXV0aG9yZ3JvdXA+Ci0JPCEtLSBzdGlsbCBhIGJpdCBidWdneSBvdXRwdXQsIHdpbGwgdGFsayB0byBkb2Nib29rLXhzbCB1cHN0cmVhbSB0byBmaXggdGhpcyAtLT4KLQk8IS0tIDxyZWxlYXNlaW5mbz5UaGlzIGlzIHJlbGVhc2UgMC41IG9mIHRoZSB4bWxsaW50IE1hbnVhbC48L3JlbGVhc2VpbmZvPiAtLT4KLQk8IS0tIDxlZGl0aW9uPjAuNTwvZWRpdGlvbj4gLS0+CisgICAgPHRpdGxlPnhtbGxpbnQgTWFudWFsPC90aXRsZT4KKyAgICA8cHJvZHVjdG5hbWU+bGlieG1sMjwvcHJvZHVjdG5hbWU+CisgICAgPGNvcHlyaWdodD4KKyAgICAgICAgPHllYXI+MjAwMTwveWVhcj4KKyAgICAgICAgPHllYXI+MjAwNDwveWVhcj4KKyAgICA8L2NvcHlyaWdodD4KKyAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICA8Zmlyc3RuYW1lPkpvaG48L2ZpcnN0bmFtZT4KKyAgICAgICAgICAgIDxzdXJuYW1lPkZsZWNrPC9zdXJuYW1lPgorICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxhZGRyZXNzPgorICAgICAgICAgICAgICAgICAgICA8ZW1haWw+amZsZWNrQGlua3N0YWluLm5ldDwvZW1haWw+CisgICAgICAgICAgICAgICAgPC9hZGRyZXNzPgorICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgPC9hdXRob3I+CisgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICA8Zmlyc3RuYW1lPlppeWluZzwvZmlyc3RuYW1lPgorICAgICAgICAgICAgPHN1cm5hbWU+U2hlcndpbjwvc3VybmFtZT4KKyAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWRkcmVzcz4KKyAgICAgICAgICAgICAgICAgICAgPGVtYWlsPnNoZXJ3aW5AbmxtLm5paC5nb3Y8L2VtYWlsPgorICAgICAgICAgICAgICAgIDwvYWRkcmVzcz4KKyAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgPGZpcnN0bmFtZT5IZWlrbzwvZmlyc3RuYW1lPgorICAgICAgICAgICAgPHN1cm5hbWU+UnVwcDwvc3VybmFtZT4KKyAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWRkcmVzcz4KKyAgICAgICAgICAgICAgICAgICAgPGVtYWlsPmh3ckBwaWxodWhuLmRlPC9lbWFpbD4KKyAgICAgICAgICAgICAgICA8L2FkZHJlc3M+CisgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICA8L2F1dGhvcj4KKyAgICA8L2F1dGhvcmdyb3VwPgorICAgIDwhLS0gc3RpbGwgYSBiaXQgYnVnZ3kgb3V0cHV0LCB3aWxsIHRhbGsgdG8gZG9jYm9vay14c2wgdXBzdHJlYW0gdG8gZml4IHRoaXMgLS0+CisgICAgPCEtLSA8cmVsZWFzZWluZm8+VGhpcyBpcyByZWxlYXNlIDAuNSBvZiB0aGUgeG1sbGludCBNYW51YWwuPC9yZWxlYXNlaW5mbz4gLS0+CisgICAgPCEtLSA8ZWRpdGlvbj4wLjU8L2VkaXRpb24+IC0tPgogPC9yZWZlbnRyeWluZm8+CiAKIDxyZWZtZXRhPgotCTxyZWZlbnRyeXRpdGxlPnhtbGxpbnQ8L3JlZmVudHJ5dGl0bGU+Ci0JPG1hbnZvbG51bT4xPC9tYW52b2xudW0+CisgICAgPHJlZmVudHJ5dGl0bGU+eG1sbGludDwvcmVmZW50cnl0aXRsZT4KKyAgICA8bWFudm9sbnVtPjE8L21hbnZvbG51bT4KIDwvcmVmbWV0YT4KIAogPHJlZm5hbWVkaXY+Ci0JPHJlZm5hbWU+eG1sbGludDwvcmVmbmFtZT4KLQk8cmVmcHVycG9zZT5jb21tYW5kIGxpbmUgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiB0b29sPC9yZWZwdXJwb3NlPgorICAgIDxyZWZuYW1lPnhtbGxpbnQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+Y29tbWFuZCBsaW5lIDxhY3JvbnltPlhNTDwvYWNyb255bT4gdG9vbDwvcmVmcHVycG9zZT4KIDwvcmVmbmFtZWRpdj4KIAogPHJlZnN5bm9wc2lzZGl2PgotCTxjbWRzeW5vcHNpcz4KLQk8Y29tbWFuZD54bWxsaW50PC9jb21tYW5kPgotCQk8Z3JvdXAgY2hvaWNlPSJvcHQiPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tdmVyc2lvbjwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZGVidWc8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXNoZWxsPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS14cGF0aCAiPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlhQYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiI8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWRlYnVnZW50PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1jb3B5PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1yZWNvdmVyPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1ub2VudDwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm9vdXQ8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW5vbmV0PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1wYXRoICI8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+UEFUSChTKTwvcmVwbGFjZWFibGU+Ijwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbG9hZC10cmFjZTwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0taHRtbG91dDwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm93cmFwPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS12YWxpZDwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tcG9zdHZhbGlkPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kdGR2YWxpZCA8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+VVJMPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWR0ZHZhbGlkZnBpIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5GUEk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tdGltaW5nPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1vdXRwdXQgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPkZJTEU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tcmVwZWF0PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1pbnNlcnQ8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWNvbXByZXNzPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1odG1sPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS14bWxvdXQ8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXB1c2g8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW1lbW9yeTwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbWF4bWVtIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5OQkJZVEVTPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW5vd2FybmluZzwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm9ibGFua3M8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW5vY2RhdGE8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZW5jb2RlIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5FTkNPRElORzwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kcm9wZHRkPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1uc2NsZWFuPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS10ZXN0SU88L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWNhdGFsb2dzPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1ub2NhdGFsb2dzPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1hdXRvPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS14aW5jbHVkZTwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm94aW5jbHVkZW5vZGU8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWxvYWRkdGQ8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWR0ZGF0dHI8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXN0cmVhbTwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0td2Fsa2VyPC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1wYXR0ZXJuIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5QQVRURVJOVkFMVUU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tY2hrcmVnaXN0ZXI8L29wdGlvbj48L2FyZz4KLQkJCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXJlbGF4bmcgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlNDSEVNQTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1zY2hlbWEgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlNDSEVNQTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1jMTRuPC9vcHRpb24+PC9hcmc+Ci0JCTwvZ3JvdXA+Ci0JCTxncm91cCBjaG9pY2U9InJlcSI+Ci0JCQk8YXJnIGNob2ljZT0icGxhaW4iIHJlcD0icmVwZWF0Ij48cmVwbGFjZWFibGU+WE1MLUZJTEUoUyk8L3JlcGxhY2VhYmxlPjwvYXJnPgotCQkJPGFyZyBjaG9pY2U9InBsYWluIiByZXA9Im5vcmVwZWF0Ij4tPC9hcmc+Ci0JCTwvZ3JvdXA+Ci0JPC9jbWRzeW5vcHNpcz4KLQk8Y21kc3lub3BzaXM+Ci0JCTxjb21tYW5kPnhtbGxpbnQ8L2NvbW1hbmQ+Ci0JCTxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWhlbHA8L29wdGlvbj48L2FyZz4KLQk8L2NtZHN5bm9wc2lzPgorICAgIDxjbWRzeW5vcHNpcz4KKyAgICA8Y29tbWFuZD54bWxsaW50PC9jb21tYW5kPgorICAgICAgICA8Z3JvdXAgY2hvaWNlPSJvcHQiPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tdmVyc2lvbjwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZGVidWc8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXF1aWV0PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0teHBhdGggIjxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5YUGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4iPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kZWJ1Z2VudDwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tY29weTwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tcmVjb3Zlcjwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm9kaWN0PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1ub2VudDwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm9vdXQ8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW5vbmV0PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1wYXRoICI8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+UEFUSChTKTwvcmVwbGFjZWFibGU+Ijwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbG9hZC10cmFjZTwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0taHRtbG91dDwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm93cmFwPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS12YWxpZDwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tcG9zdHZhbGlkPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kdGR2YWxpZCA8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+VVJMPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWR0ZHZhbGlkZnBpIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5GUEk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tdGltaW5nPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1vdXRwdXQgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPkZJTEU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tcmVwZWF0PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1pbnNlcnQ8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWNvbXByZXNzPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1odG1sPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS14bWxvdXQ8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXB1c2g8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW1lbW9yeTwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbWF4LWFtcGwgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPklOVEVHRVI8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbWF4bWVtIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5OQkJZVEVTPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW5vd2FybmluZzwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm9ibGFua3M8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLW5vY2RhdGE8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZW5jb2RlIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5FTkNPRElORzwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kcm9wZHRkPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1uc2NsZWFuPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS10ZXN0SU88L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWNhdGFsb2dzPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1ub2NhdGFsb2dzPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1hdXRvPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS14aW5jbHVkZTwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tbm94aW5jbHVkZW5vZGU8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWxvYWRkdGQ8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWR0ZGF0dHI8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXN0cmVhbTwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0td2Fsa2VyPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1wYXR0ZXJuIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5QQVRURVJOVkFMVUU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvYXJnPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tY2hrcmVnaXN0ZXI8L29wdGlvbj48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLXJlbGF4bmcgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlNDSEVNQTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1zY2hlbWEgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlNDSEVNQTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1jMTRuPC9vcHRpb24+PC9hcmc+CisgICAgICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1wZWRhbnRpYzwvb3B0aW9uPjwvYXJnPgorICAgICAgICA8L2dyb3VwPgorICAgICAgICA8Z3JvdXAgY2hvaWNlPSJyZXEiPgorICAgICAgICAgICAgPGFyZyBjaG9pY2U9InBsYWluIiByZXA9InJlcGVhdCI+PHJlcGxhY2VhYmxlPlhNTC1GSUxFKFMpPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgICAgICAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiIgcmVwPSJub3JlcGVhdCI+LTwvYXJnPgorICAgICAgICA8L2dyb3VwPgorICAgIDwvY21kc3lub3BzaXM+CisgICAgPGNtZHN5bm9wc2lzPgorICAgICAgICA8Y29tbWFuZD54bWxsaW50PC9jb21tYW5kPgorICAgICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1oZWxwPC9vcHRpb24+PC9hcmc+CisgICAgPC9jbWRzeW5vcHNpcz4KIDwvcmVmc3lub3BzaXNkaXY+CiAKIDxyZWZzZWN0MSBpZD0iZGVzY3JpcHRpb24iPgotCTx0aXRsZT5ERVNDUklQVElPTjwvdGl0bGU+Ci0JPHBhcmE+Ci0JCVRoZSAmeG1sbGludDsgcHJvZ3JhbSBwYXJzZXMgb25lIG9yIG1vcmUgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBmaWxlcywKLQkJc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgPHJlcGxhY2VhYmxlPlhNTC1GSUxFPC9yZXBsYWNlYWJsZT4KLQkJKG9yIHRoZSBzdGFuZGFyZCBpbnB1dCBpZiB0aGUgZmlsZW5hbWUgcHJvdmlkZWQKLQkJaXMgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPi08L2VtcGhhc2lzPiApLiBJdCBwcmludHMgdmFyaW91cyB0eXBlcyBvZgotCQlvdXRwdXQsIGRlcGVuZGluZyB1cG9uIHRoZSBvcHRpb25zIHNlbGVjdGVkLiBJdCBpcyB1c2VmdWwgZm9yIGRldGVjdGluZwotCQllcnJvcnMgYm90aCBpbiA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGNvZGUgYW5kIGluCi0JCXRoZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IHBhcnNlciBpdHNlbGYuCi0JPC9wYXJhPgotCTxwYXJhPiZ4bWxsaW50OyBpcyBpbmNsdWRlZCBpbiA8Y2l0ZXJlZmVudHJ5PgotCQk8cmVmZW50cnl0aXRsZT5saWJ4bWw8L3JlZmVudHJ5dGl0bGU+Ci0JCTxtYW52b2xudW0+MzwvbWFudm9sbnVtPgotCTwvY2l0ZXJlZmVudHJ5Pi48L3BhcmE+CisgICAgPHRpdGxlPkRFU0NSSVBUSU9OPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlICZ4bWxsaW50OyBwcm9ncmFtIHBhcnNlcyBvbmUgb3IgbW9yZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGZpbGVzLAorICAgICAgICBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyA8cmVwbGFjZWFibGU+WE1MLUZJTEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAob3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIHRoZSBmaWxlbmFtZSBwcm92aWRlZAorICAgICAgICBpcyA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+LTwvZW1waGFzaXM+ICkuIEl0IHByaW50cyB2YXJpb3VzIHR5cGVzIG9mCisgICAgICAgIG91dHB1dCwgZGVwZW5kaW5nIHVwb24gdGhlIG9wdGlvbnMgc2VsZWN0ZWQuIEl0IGlzIHVzZWZ1bCBmb3IgZGV0ZWN0aW5nCisgICAgICAgIGVycm9ycyBib3RoIGluIDxhY3JvbnltPlhNTDwvYWNyb255bT4gY29kZSBhbmQgaW4KKyAgICAgICAgdGhlIDxhY3JvbnltPlhNTDwvYWNyb255bT4gcGFyc2VyIGl0c2VsZi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+JnhtbGxpbnQ7IGlzIGluY2x1ZGVkIGluIDxjaXRlcmVmZW50cnk+CisgICAgICAgIDxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+CisgICAgPC9jaXRlcmVmZW50cnk+LjwvcGFyYT4KIDwvcmVmc2VjdDE+CiAKIDxyZWZzZWN0MSBpZD0ib3B0aW9ucyI+Ci0JPHRpdGxlPk9QVElPTlM8L3RpdGxlPgotCTxwYXJhPgotCQkmeG1sbGludDsgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6Ci0JPC9wYXJhPgorICAgIDx0aXRsZT5PUFRJT05TPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgJnhtbGxpbnQ7IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zIChpbiBhbHBoYWJldGljYWwgb3JkZXIpOgorICAgIDwvcGFyYT4KIAotCTx2YXJpYWJsZWxpc3Q+CisgICAgPHZhcmlhYmxlbGlzdD4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1hdXRvPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+R2VuZXJhdGUgYSBzbWFsbCBkb2N1bWVudCBmb3IgdGVzdGluZyBwdXJwb3Nlcy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tYXV0bzwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5HZW5lcmF0ZSBhIHNtYWxsIGRvY3VtZW50IGZvciB0ZXN0aW5nIHB1cnBvc2VzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLWNhdGFsb2dzPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlVc2UgdGhlIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cocykgZnJvbSA8ZW52YXI+U0dNTF9DQVRBTE9HX0ZJTEVTPC9lbnZhcj4uCi0JCQlPdGhlcndpc2UgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBjYXRhbG9ncyBzdGFydGluZwotCQkJZnJvbSA8ZmlsZW5hbWU+L2V0Yy94bWwvY2F0YWxvZzwvZmlsZW5hbWU+IGFyZSB1c2VkIGJ5IGRlZmF1bHQuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1jYXRhbG9nczwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8YWNyb255bT5TR01MPC9hY3JvbnltPiBjYXRhbG9nKHMpIGZyb20gPGVudmFyPlNHTUxfQ0FUQUxPR19GSUxFUzwvZW52YXI+LgorICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBjYXRhbG9ncyBzdGFydGluZworICAgICAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT4vZXRjL3htbC9jYXRhbG9nPC9maWxlbmFtZT4gb3IsIG1vcmUgc3BlY2lmaWNhbGx5LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZzwvZmlsZW5hbWU+IGFyZSB1c2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tY2hrcmVnaXN0ZXI8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVR1cm4gb24gbm9kZSByZWdpc3RyYXRpb24uIFVzZWZ1bCBmb3IgZGV2ZWxvcGVycyB0ZXN0aW5nIDxjaXRlcmVmZW50cnk+Ci0JCTxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KLQkJPG1hbnZvbG51bT4zPC9tYW52b2xudW0+Ci0JPC9jaXRlcmVmZW50cnk+IG5vZGUgdHJhY2tpbmcgY29kZS4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWNoa3JlZ2lzdGVyPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUdXJuIG9uIG5vZGUgcmVnaXN0cmF0aW9uLiBVc2VmdWwgZm9yIGRldmVsb3BlcnMgdGVzdGluZyA8Y2l0ZXJlZmVudHJ5PgorICAgICAgICAgICAgICAgIDxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT4KKyAgICAgICAgICAgIDwvY2l0ZXJlZmVudHJ5PiBub2RlIHRyYWNraW5nIGNvZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tY29tcHJlc3M8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVR1cm4gb24gPGNpdGVyZWZlbnRyeT4KLQkJPHJlZmVudHJ5dGl0bGU+Z3ppcDwvcmVmZW50cnl0aXRsZT4KLQkJPG1hbnZvbG51bT4xPC9tYW52b2xudW0+Ci0JPC9jaXRlcmVmZW50cnk+IGNvbXByZXNzaW9uIG9mIG91dHB1dC4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWNvbXByZXNzPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUdXJuIG9uIDxjaXRlcmVmZW50cnk+CisgICAgICAgICAgICAgICAgPHJlZmVudHJ5dGl0bGU+Z3ppcDwvcmVmZW50cnl0aXRsZT4KKyAgICAgICAgICAgICAgICA8bWFudm9sbnVtPjE8L21hbnZvbG51bT4KKyAgICAgICAgICAgIDwvY2l0ZXJlZmVudHJ5PiBjb21wcmVzc2lvbiBvZiBvdXRwdXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tY29weTwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPlRlc3QgdGhlIGludGVybmFsIGNvcHkgaW1wbGVtZW50YXRpb24uPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWNvcHk8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VGVzdCB0aGUgaW50ZXJuYWwgY29weSBpbXBsZW1lbnRhdGlvbi48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1jMTRuPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlVc2UgdGhlIFczQyA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IENhbm9uaWNhbGlzYXRpb24gKDxhY3JvbnltPkMxNE48L2Fjcm9ueW0+KSB0bwotCQkJc2VyaWFsaXplIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0byA8ZmlsZW5hbWUgY2xhc3M9ImRldmljZWZpbGUiPnN0ZG91dDwvZmlsZW5hbWU+LgotCQkJSXQga2VlcHMgY29tbWVudHMgaW4gdGhlIHJlc3VsdC4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWMxNG48L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgVzNDIDxhY3JvbnltPlhNTDwvYWNyb255bT4gQ2Fub25pY2FsaXNhdGlvbiAoPGFjcm9ueW0+QzE0TjwvYWNyb255bT4pIHRvCisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdG8gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRvdXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSXQga2VlcHMgY29tbWVudHMgaW4gdGhlIHJlc3VsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1kdGR2YWxpZCA8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+VVJMPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVVzZSB0aGUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBzcGVjaWZpZWQgYnkKLQkJCWFuIDxyZXBsYWNlYWJsZT5VUkw8L3JlcGxhY2VhYmxlPiBmb3IgdmFsaWRhdGlvbi4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWR0ZHZhbGlkIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5VUkw8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+IHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICBhbiA8cmVwbGFjZWFibGU+VVJMPC9yZXBsYWNlYWJsZT4gZm9yIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tZHRkdmFsaWRmcGkgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPkZQSTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlVc2UgdGhlIDxhY3JvbnltPkRURDwvYWNyb255bT4gc3BlY2lmaWVkIGJ5IGEgRm9ybWFsIFB1YmxpYwotCQkJSWRlbnRpZmllciA8cmVwbGFjZWFibGU+RlBJPC9yZXBsYWNlYWJsZT4gZm9yIHZhbGlkYXRpb24sIG5vdGUgdGhhdCB0aGlzCi0JCQl3aWxsIHJlcXVpcmUgYSBjYXRhbG9nIGV4cG9ydGluZyB0aGF0IEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllciB0byB3b3JrLgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tZHRkdmFsaWRmcGkgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPkZQSTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxhY3JvbnltPkRURDwvYWNyb255bT4gc3BlY2lmaWVkIGJ5IGEgRm9ybWFsIFB1YmxpYworICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIDxyZXBsYWNlYWJsZT5GUEk8L3JlcGxhY2VhYmxlPiBmb3IgdmFsaWRhdGlvbiwgbm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgd2lsbCByZXF1aXJlIGEgY2F0YWxvZyBleHBvcnRpbmcgdGhhdCBGb3JtYWwgUHVibGljIElkZW50aWZpZXIgdG8gd29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1kZWJ1Zzwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJUGFyc2UgYSBmaWxlIGFuZCBvdXRwdXQgYW4gYW5ub3RhdGVkIHRyZWUgb2YgdGhlCi0JCQlpbi1tZW1vcnkgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1kZWJ1Zzwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUGFyc2UgYSBmaWxlIGFuZCBvdXRwdXQgYW4gYW5ub3RhdGVkIHRyZWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGluLW1lbW9yeSB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1kZWJ1Z2VudDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkRlYnVnIHRoZSBlbnRpdGllcyBkZWZpbmVkIGluIHRoZSBkb2N1bWVudC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tZGVidWdlbnQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RGVidWcgdGhlIGVudGl0aWVzIGRlZmluZWQgaW4gdGhlIGRvY3VtZW50LjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLWRyb3BkdGQ8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5SZW1vdmUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBmcm9tIG91dHB1dC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tZHJvcGR0ZDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5SZW1vdmUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBmcm9tIG91dHB1dC48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1kdGRhdHRyPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlGZXRjaCBleHRlcm5hbCA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+IGFuZCBwb3B1bGF0ZSB0aGUgdHJlZSB3aXRoCi0JCQlpbmhlcml0ZWQgYXR0cmlidXRlcy4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWR0ZGF0dHI8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZldGNoIGV4dGVybmFsIDxhY3JvbnltPkRURDwvYWNyb255bT4gYW5kIHBvcHVsYXRlIHRoZSB0cmVlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tZW5jb2RlIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5FTkNPRElORzwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+T3V0cHV0IGluIHRoZSBnaXZlbiBlbmNvZGluZy4gTm90ZSB0aGF0IHRoaXMgd29ya3MgZm9yIGZ1bGwgZG9jdW1lbnQgbm90IGZyYWdtZW50cyBvciByZXN1bHQgZnJvbSBYUGF0aCBxdWVyaWVzLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1lbmNvZGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPkVOQ09ESU5HPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+T3V0cHV0IGluIHRoZSBnaXZlbiBlbmNvZGluZy4gTm90ZSB0aGF0IHRoaXMgd29ya3MgZm9yIGZ1bGwgZG9jdW1lbnQgbm90IGZyYWdtZW50cyBvciByZXN1bHQgZnJvbSBYUGF0aCBxdWVyaWVzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJUmVmb3JtYXQgYW5kIHJlaW5kZW50IHRoZSBvdXRwdXQuIFRoZSA8ZW52YXI+WE1MTElOVF9JTkRFTlQ8L2VudmFyPgotCQkJZW52aXJvbm1lbnQgdmFyaWFibGUgY29udHJvbHMgdGhlIGluZGVudGF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0d28KLQkJCXNwYWNlcyAmcXVvdDsgICZxdW90OykuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJlZm9ybWF0IGFuZCByZWluZGVudCB0aGUgb3V0cHV0LiBUaGUgPGVudmFyPlhNTExJTlRfSU5ERU5UPC9lbnZhcj4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udHJvbHMgdGhlIGluZGVudGF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0d28KKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzICZxdW90OyAgJnF1b3Q7KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1oZWxwPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+UHJpbnQgb3V0IGEgc2hvcnQgdXNhZ2Ugc3VtbWFyeSBmb3IgJnhtbGxpbnQ7LjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1oZWxwPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlByaW50IG91dCBhIHNob3J0IHVzYWdlIHN1bW1hcnkgZm9yICZ4bWxsaW50Oy48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1odG1sPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+VXNlIHRoZSA8YWNyb255bT5IVE1MPC9hY3JvbnltPiBwYXJzZXIuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWh0bWw8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VXNlIHRoZSA8YWNyb255bT5IVE1MPC9hY3JvbnltPiBwYXJzZXIuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0taHRtbG91dDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJT3V0cHV0IHJlc3VsdHMgYXMgYW4gPGFjcm9ueW0+SFRNTDwvYWNyb255bT4gZmlsZS4gVGhpcwotCQkJY2F1c2VzICZ4bWxsaW50OyB0byBvdXRwdXQgdGhlIG5lY2Vzc2FyeSA8YWNyb255bT5IVE1MPC9hY3JvbnltPgotCQkJdGFncyBzdXJyb3VuZGluZyB0aGUgcmVzdWx0IHRyZWUgb3V0cHV0IHNvIHRoZSByZXN1bHRzIGNhbiBiZQotCQkJZGlzcGxheWVkL3ZpZXdlZCBpbiBhIGJyb3dzZXIuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1odG1sb3V0PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPdXRwdXQgcmVzdWx0cyBhcyBhbiA8YWNyb255bT5IVE1MPC9hY3JvbnltPiBmaWxlLiBUaGlzCisgICAgICAgICAgICAgICAgICAgIGNhdXNlcyAmeG1sbGludDsgdG8gb3V0cHV0IHRoZSBuZWNlc3NhcnkgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4KKyAgICAgICAgICAgICAgICAgICAgdGFncyBzdXJyb3VuZGluZyB0aGUgcmVzdWx0IHRyZWUgb3V0cHV0IHNvIHRoZSByZXN1bHRzIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQvdmlld2VkIGluIGEgYnJvd3Nlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1pbnNlcnQ8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5UZXN0IGZvciB2YWxpZCBpbnNlcnRpb25zLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbnNlcnQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VGVzdCBmb3IgdmFsaWQgaW5zZXJ0aW9ucy48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1sb2FkZHRkPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+RmV0Y2ggYW4gZXh0ZXJuYWwgPGFjcm9ueW0+RFREPC9hY3JvbnltPi48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tbG9hZGR0ZDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5GZXRjaCBhbiBleHRlcm5hbCA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+LjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLWxvYWQtdHJhY2U8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCURpc3BsYXkgYWxsIHRoZSBkb2N1bWVudHMgbG9hZGVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZwotCQkJdG8gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRlcnI8L2ZpbGVuYW1lPi4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLWxvYWQtdHJhY2U8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHRoZSBkb2N1bWVudHMgbG9hZGVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWUgY2xhc3M9ImRldmljZWZpbGUiPnN0ZGVycjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLW1heG1lbSA8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+Tk5CWVRFUzwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlUZXN0IHRoZSBwYXJzZXIgbWVtb3J5IHN1cHBvcnQuIDxyZXBsYWNlYWJsZT5OTkJZVEVTPC9yZXBsYWNlYWJsZT4KLQkJCWlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgbGlicmFyeSBpcyBhbGxvd2VkIHRvIGFsbG9jYXRlLgotCQkJVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2Ugc3VyZSBiYXRjaCBwcm9jZXNzaW5nCi0JCQlvZiA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGZpbGVzIHdpbGwgbm90IGV4aGF1c3QgdGhlIHZpcnR1YWwgbWVtb3J5Ci0JCQlvZiB0aGUgc2VydmVyIHJ1bm5pbmcgdGhlbS4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLW1heC1hbXBsIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5JTlRFR0VSPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBhbXBsaWZpY2F0aW9uIGZhY3RvciB3aGljaCBwcm90ZWN0cyBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsIGVudGl0eSBleHBhbnNpb24gKCJiaWxsaW9uIGxhdWdocyIpLiBUaGUgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpcyA1LiBEb2N1bWVudHMgbWFraW5nIGhlYXZ5IHVzZSBvZiBlbnRpdHkgZXhwYW5zaW9uIG1heSByZXF1aXJlIGEKKyAgICAgICAgICAgICAgICAgICAgaGlnaGVyIHZhbHVlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLW1lbW9yeTwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPlBhcnNlIGZyb20gbWVtb3J5LjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1tYXhtZW0gPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPk5OQllURVM8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGVzdCB0aGUgcGFyc2VyIG1lbW9yeSBzdXBwb3J0LiA8cmVwbGFjZWFibGU+Tk5CWVRFUzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgbGlicmFyeSBpcyBhbGxvd2VkIHRvIGFsbG9jYXRlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBzdXJlIGJhdGNoIHByb2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgb2YgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBmaWxlcyB3aWxsIG5vdCBleGhhdXN0IHRoZSB2aXJ0dWFsIG1lbW9yeQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2VydmVyIHJ1bm5pbmcgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1ub2JsYW5rczwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkRyb3AgaWdub3JhYmxlIGJsYW5rIHNwYWNlcy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tbWVtb3J5PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlBhcnNlIGZyb20gbWVtb3J5LjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLW5vY2F0YWxvZ3M8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5EbyBub3QgdXNlIGFueSBjYXRhbG9ncy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tbm9ibGFua3M8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHJvcCBpZ25vcmFibGUgYmxhbmsgc3BhY2VzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLW5vY2RhdGE8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5TdWJzdGl0dXRlIENEQVRBIHNlY3Rpb24gYnkgZXF1aXZhbGVudCB0ZXh0IG5vZGVzLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1ub2NhdGFsb2dzPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkRvIG5vdCB1c2UgYW55IGNhdGFsb2dzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLW5vZW50PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlTdWJzdGl0dXRlIGVudGl0eSB2YWx1ZXMgZm9yIGVudGl0eSByZWZlcmVuY2VzLiBCeSBkZWZhdWx0LCAmeG1sbGludDsKLQkJCWxlYXZlcyBlbnRpdHkgcmVmZXJlbmNlcyBpbiBwbGFjZS4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLW5vY2RhdGE8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+U3Vic3RpdHV0ZSBDREFUQSBzZWN0aW9uIGJ5IGVxdWl2YWxlbnQgdGV4dCBub2Rlcy48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1ub25ldDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJRG8gbm90IHVzZSB0aGUgSW50ZXJuZXQgdG8gZmV0Y2ggPGFjcm9ueW0+RFREPC9hY3JvbnltPnMgb3IgZW50aXRpZXMuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1ub2RpY3Q8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvbid0IHVzZSBkaWN0aW9uYXJpZXMgKHBhcnNlciBvcHRpb24gWE1MX1BBUlNFX05PRElDVCkuCisgICAgICAgICAgICAgICAgICAgIE9ubHkgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1ub291dDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJU3VwcHJlc3Mgb3V0cHV0LiBCeSBkZWZhdWx0LCAmeG1sbGludDsgb3V0cHV0cyB0aGUgcmVzdWx0IHRyZWUuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1ub2VudDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3Vic3RpdHV0ZSBlbnRpdHkgdmFsdWVzIGZvciBlbnRpdHkgcmVmZXJlbmNlcy4gQnkgZGVmYXVsdCwgJnhtbGxpbnQ7CisgICAgICAgICAgICAgICAgICAgIGxlYXZlcyBlbnRpdHkgcmVmZXJlbmNlcyBpbiBwbGFjZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1ub3dhcm5pbmc8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5EbyBub3QgZW1pdCB3YXJuaW5ncyBmcm9tIHRoZSBwYXJzZXIgYW5kL29yIHZhbGlkYXRvci48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tbm9uZXQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgdGhlIEludGVybmV0IHRvIGZldGNoIDxhY3JvbnltPkRURDwvYWNyb255bT5zIG9yIGVudGl0aWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLW5vd3JhcDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkRvIG5vdCBvdXRwdXQgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4gZG9jIHdyYXBwZXIuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLW5vb3V0PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwcmVzcyBvdXRwdXQuIEJ5IGRlZmF1bHQsICZ4bWxsaW50OyBvdXRwdXRzIHRoZSByZXN1bHQgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1ub3hpbmNsdWRlbm9kZTwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJRG8gWEluY2x1ZGUgcHJvY2Vzc2luZyBidXQgZG8gbm90IGdlbmVyYXRlIFhJbmNsdWRlIHN0YXJ0IGFuZCBlbmQgbm9kZXMuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1ub3dhcm5pbmc8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RG8gbm90IGVtaXQgd2FybmluZ3MgZnJvbSB0aGUgcGFyc2VyIGFuZC9vciB2YWxpZGF0b3IuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tbnNjbGVhbjwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPlJlbW92ZSByZWR1bmRhbnQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tbm93cmFwPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkRvIG5vdCBvdXRwdXQgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4gZG9jIHdyYXBwZXIuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tb3V0cHV0IDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5GSUxFPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCURlZmluZSBhIGZpbGUgcGF0aCB3aGVyZSAmeG1sbGludDsgd2lsbCBzYXZlIHRoZSByZXN1bHQgb2YgcGFyc2luZy4KLQkJCVVzdWFsbHkgdGhlIHByb2dyYW1zIGJ1aWxkIGEgdHJlZSBhbmQgc2F2ZSBpdAotCQkJb24gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRvdXQ8L2ZpbGVuYW1lPiwgd2l0aCB0aGlzIG9wdGlvbgotCQkJdGhlIHJlc3VsdCA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGluc3RhbmNlIHdpbGwgYmUgc2F2ZWQgb250byBhIGZpbGUuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1ub3hpbmNsdWRlbm9kZTwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRG8gWEluY2x1ZGUgcHJvY2Vzc2luZyBidXQgZG8gbm90IGdlbmVyYXRlIFhJbmNsdWRlIHN0YXJ0IGFuZCBlbmQgbm9kZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tcGF0aCAiPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlBBVEgoUyk8L3JlcGxhY2VhYmxlPiI8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVVzZSB0aGUgKHNwYWNlLSBvciBjb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgZmlsZXN5c3RlbSBwYXRocyBzcGVjaWZpZWQKLQkJCWJ5IDxyZXBsYWNlYWJsZT5QQVRIUzwvcmVwbGFjZWFibGU+IHRvIGxvYWQgPGFjcm9ueW0+RFREPC9hY3JvbnltPnMgb3IKLQkJCWVudGl0aWVzLiBFbmNsb3NlIHNwYWNlLXNlcGFyYXRlZCBsaXN0cyBieSBxdW90YXRpb24gbWFya3MuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1uc2NsZWFuPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlJlbW92ZSByZWR1bmRhbnQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1wYXR0ZXJuIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5QQVRURVJOVkFMVUU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJVXNlZCB0byBleGVyY2lzZSB0aGUgcGF0dGVybiByZWNvZ25pdGlvbiBlbmdpbmUsIHdoaWNoIGNhbiBiZSB1c2VkCi0JCQl3aXRoIHRoZSByZWFkZXIgaW50ZXJmYWNlIHRvIHRoZSBwYXJzZXIuIEl0IGFsbG93cyB0byBzZWxlY3Qgc29tZQotCQkJbm9kZXMgaW4gdGhlIGRvY3VtZW50IGJhc2VkIG9uIGFuIFhQYXRoIChzdWJzZXQpIGV4cHJlc3Npb24uIFVzZWQKLQkJCWZvciBkZWJ1Z2dpbmcuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1vdXRwdXQgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPkZJTEU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lIGEgZmlsZSBwYXRoIHdoZXJlICZ4bWxsaW50OyB3aWxsIHNhdmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICBVc3VhbGx5IHRoZSBwcm9ncmFtcyBidWlsZCBhIHRyZWUgYW5kIHNhdmUgaXQKKyAgICAgICAgICAgICAgICAgICAgb24gPGZpbGVuYW1lIGNsYXNzPSJkZXZpY2VmaWxlIj5zdGRvdXQ8L2ZpbGVuYW1lPiwgd2l0aCB0aGlzIG9wdGlvbgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVzdWx0IDxhY3JvbnltPlhNTDwvYWNyb255bT4gaW5zdGFuY2Ugd2lsbCBiZSBzYXZlZCBvbnRvIGEgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1wb3N0dmFsaWQ8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5WYWxpZGF0ZSBhZnRlciBwYXJzaW5nIGhhcyBjb21wbGV0ZWQuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXBhdGggIjxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5QQVRIKFMpPC9yZXBsYWNlYWJsZT4iPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIChzcGFjZS0gb3IgY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mIGZpbGVzeXN0ZW0gcGF0aHMgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGJ5IDxyZXBsYWNlYWJsZT5QQVRIUzwvcmVwbGFjZWFibGU+IHRvIGxvYWQgPGFjcm9ueW0+RFREPC9hY3JvbnltPnMgb3IKKyAgICAgICAgICAgICAgICAgICAgZW50aXRpZXMuIEVuY2xvc2Ugc3BhY2Utc2VwYXJhdGVkIGxpc3RzIGJ5IHF1b3RhdGlvbiBtYXJrcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS1wdXNoPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+VXNlIHRoZSBwdXNoIG1vZGUgb2YgdGhlIHBhcnNlci48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tcGF0dGVybiA8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+UEFUVEVSTlZBTFVFPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gZXhlcmNpc2UgdGhlIHBhdHRlcm4gcmVjb2duaXRpb24gZW5naW5lLCB3aGljaCBjYW4gYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSByZWFkZXIgaW50ZXJmYWNlIHRvIHRoZSBwYXJzZXIuIEl0IGFsbG93cyB0byBzZWxlY3Qgc29tZQorICAgICAgICAgICAgICAgICAgICBub2RlcyBpbiB0aGUgZG9jdW1lbnQgYmFzZWQgb24gYW4gWFBhdGggKHN1YnNldCkgZXhwcmVzc2lvbi4gVXNlZAorICAgICAgICAgICAgICAgICAgICBmb3IgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLXJlY292ZXI8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5PdXRwdXQgYW55IHBhcnNhYmxlIHBvcnRpb25zIG9mIGFuIGludmFsaWQgZG9jdW1lbnQuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXBlZGFudGljPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkVuYWJsZSBhZGRpdGlvbmFsIHdhcm5pbmdzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLXJlbGF4bmcgPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlNDSEVNQTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlVc2UgUmVsYXhORyBmaWxlIG5hbWVkIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5TQ0hFTUE8L3JlcGxhY2VhYmxlPgotCQkJZm9yIHZhbGlkYXRpb24uCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1wb3N0dmFsaWQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VmFsaWRhdGUgYWZ0ZXIgcGFyc2luZyBoYXMgY29tcGxldGVkLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLXJlcGVhdDwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPlJlcGVhdCAxMDAgdGltZXMsIGZvciB0aW1pbmcgb3IgcHJvZmlsaW5nLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1wdXNoPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlVzZSB0aGUgcHVzaCBtb2RlIG9mIHRoZSBwYXJzZXIuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tc2NoZW1hIDxyZXBsYWNlYWJsZT5TQ0hFTUE8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJVXNlIGEgVzNDIDxhY3JvbnltPlhNTDwvYWNyb255bT4gU2NoZW1hIGZpbGUKLQkJCW5hbWVkIDxyZXBsYWNlYWJsZT5TQ0hFTUE8L3JlcGxhY2VhYmxlPiBmb3IgdmFsaWRhdGlvbi4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXF1aWV0PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdG8gc3RkZXJyLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLXNoZWxsPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlSdW4gYSBuYXZpZ2F0aW5nIHNoZWxsLiBEZXRhaWxzIG9uIGF2YWlsYWJsZSBjb21tYW5kcyBpbiBzaGVsbCBtb2RlCi0JCQlhcmUgYmVsb3cgKHNlZSA8eHJlZiBsaW5rZW5kPSJzaGVsbCIvPikuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZWNvdmVyPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPk91dHB1dCBhbnkgcGFyc2FibGUgcG9ydGlvbnMgb2YgYW4gaW52YWxpZCBkb2N1bWVudC48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS14cGF0aCAiPHJlcGxhY2VhYmxlIGNsYXNzPSJvcHRpb24iPlhQYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiI8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVJ1biBhbiBYUGF0aCBleHByZXNzaW9uIGdpdmVuIGFzIGFyZ3VtZW50IGFuZCBwcmludCB0aGUKLQkJCXJlc3VsdC4gSW4gY2FzZSBvZiBhIG5vZGVzZXQgcmVzdWx0LCBlYWNoIG5vZGUgaW4gdGhlCi0JCQlub2RlIHNldCBpcyBzZXJpYWxpemVkIGluIGZ1bGwgaW4gdGhlIG91dHB1dC4gSW4gY2FzZQotCQkJb2YgYW4gZW1wdHkgbm9kZSBzZXQgdGhlICJYUGF0aCBzZXQgaXMgZW1wdHkiIHJlc3VsdAotCQkJd2lsbCBiZSBzaG93biBhbmQgYW4gZXJyb3IgZXhpdCBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZWxheG5nIDxyZXBsYWNlYWJsZSBjbGFzcz0ib3B0aW9uIj5TQ0hFTUE8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIFJlbGF4TkcgZmlsZSBuYW1lZCA8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+U0NIRU1BPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tc3RyZWFtPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlVc2Ugc3RyZWFtaW5nIDxhY3JvbnltPkFQSTwvYWNyb255bT4gLSB1c2VmdWwgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uCi0JCQl3aXRoIDxvcHRpb24+LS1yZWxheG5nPC9vcHRpb24+IG9yIDxvcHRpb24+LS12YWxpZDwvb3B0aW9uPiBvcHRpb25zCi0JCQlmb3IgdmFsaWRhdGlvbiBvZiBmaWxlcyB0aGF0IGFyZSB0b28gbGFyZ2UgdG8gYmUgaGVsZCBpbiBtZW1vcnkuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBlYXQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+UmVwZWF0IDEwMCB0aW1lcywgZm9yIHRpbWluZyBvciBwcm9maWxpbmcuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tdGVzdElPPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+VGVzdCB1c2VyIGlucHV0L291dHB1dCBzdXBwb3J0LjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS1zY2hlbWEgPHJlcGxhY2VhYmxlPlNDSEVNQTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2UgYSBXM0MgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBTY2hlbWEgZmlsZQorICAgICAgICAgICAgICAgICAgICBuYW1lZCA8cmVwbGFjZWFibGU+U0NIRU1BPC9yZXBsYWNlYWJsZT4gZm9yIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0tdGltaW5nPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRpbWUgaXQgdGFrZXMgJnhtbGxpbnQ7IHRvIHBlcmZvcm0gdGhlCi0JCQl2YXJpb3VzIHN0ZXBzLgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48b3B0aW9uPi0tc2hlbGw8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJ1biBhIG5hdmlnYXRpbmcgc2hlbGwuIERldGFpbHMgb24gYXZhaWxhYmxlIGNvbW1hbmRzIGluIHNoZWxsIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXJlIGJlbG93IChzZWUgPHhyZWYgbGlua2VuZD0ic2hlbGwiLz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLXZhbGlkPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlEZXRlcm1pbmUgaWYgdGhlIGRvY3VtZW50IGlzIGEgdmFsaWQgaW5zdGFuY2Ugb2YgdGhlIGluY2x1ZGVkCi0JCQlEb2N1bWVudCBUeXBlIERlZmluaXRpb24gKDxhY3JvbnltPkRURDwvYWNyb255bT4pLgotCQkJQSA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+IHRvIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IGFsc28gY2FuIGJlCi0JCQlzcGVjaWZpZWQgYXQgdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUgPG9wdGlvbj4tLWR0ZHZhbGlkPC9vcHRpb24+Ci0JCQlvcHRpb24uIEJ5IGRlZmF1bHQsICZ4bWxsaW50OyBhbHNvIGNoZWNrcyB0byBkZXRlcm1pbmUgaWYgdGhlCi0JCQlkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZC4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXhwYXRoICI8cmVwbGFjZWFibGUgY2xhc3M9Im9wdGlvbiI+WFBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+Ijwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUnVuIGFuIFhQYXRoIGV4cHJlc3Npb24gZ2l2ZW4gYXMgYXJndW1lbnQgYW5kIHByaW50IHRoZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuIEluIGNhc2Ugb2YgYSBub2Rlc2V0IHJlc3VsdCwgZWFjaCBub2RlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBub2RlIHNldCBpcyBzZXJpYWxpemVkIGluIGZ1bGwgaW4gdGhlIG91dHB1dC4gSW4gY2FzZQorICAgICAgICAgICAgICAgICAgICBvZiBhbiBlbXB0eSBub2RlIHNldCB0aGUgIlhQYXRoIHNldCBpcyBlbXB0eSIgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc2hvd24gYW5kIGFuIGVycm9yIGV4aXQgY29kZSB3aWxsIGJlIHJldHVybmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PG9wdGlvbj4tLXZlcnNpb248L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCURpc3BsYXkgdGhlIHZlcnNpb24gb2YgPGNpdGVyZWZlbnRyeT4KLQkJPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgotCQk8bWFudm9sbnVtPjM8L21hbnZvbG51bT4KLQk8L2NpdGVyZWZlbnRyeT4gdXNlZC4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXN0cmVhbTwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHN0cmVhbWluZyA8YWNyb255bT5BUEk8L2Fjcm9ueW0+IC0gdXNlZnVsIHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbgorICAgICAgICAgICAgICAgICAgICB3aXRoIDxvcHRpb24+LS1yZWxheG5nPC9vcHRpb24+IG9yIDxvcHRpb24+LS12YWxpZDwvb3B0aW9uPiBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgIGZvciB2YWxpZGF0aW9uIG9mIGZpbGVzIHRoYXQgYXJlIHRvbyBsYXJnZSB0byBiZSBoZWxkIGluIG1lbW9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS13YWxrZXI8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVRlc3QgdGhlIHdhbGtlciBtb2R1bGUsIHdoaWNoIGlzIGEgcmVhZGVyIGludGVyZmFjZSBidXQgZm9yIGEKLQkJCWRvY3VtZW50IHRyZWUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIHJlYWRlciA8YWNyb255bT5BUEk8L2Fjcm9ueW0+IG9uCi0JCQlhbiB1bnBhcnNlZCBkb2N1bWVudCBpdCB3b3JrcyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgdHJlZS4gVXNlZCBmb3IKLQkJCWRlYnVnZ2luZy4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXRlc3RJTzwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UZXN0IHVzZXIgaW5wdXQvb3V0cHV0IHN1cHBvcnQuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPi0teGluY2x1ZGU8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5EbyBYSW5jbHVkZSBwcm9jZXNzaW5nLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS10aW1pbmc8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGltZSBpdCB0YWtlcyAmeG1sbGludDsgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaW91cyBzdGVwcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxvcHRpb24+LS14bWxvdXQ8L29wdGlvbj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8b3B0aW9uPi0taHRtbDwvb3B0aW9uPi4gVXN1YWxseQotCQkJd2hlbiA8YWNyb255bT5IVE1MPC9hY3JvbnltPiBpcyBwYXJzZWQgdGhlIGRvY3VtZW50IGlzIHNhdmVkIHdpdGgKLQkJCXRoZSA8YWNyb255bT5IVE1MPC9hY3JvbnltPiBzZXJpYWxpemVyLiBCdXQgd2l0aCB0aGlzIG9wdGlvbiB0aGUKLQkJCXJlc3VsdGluZyBkb2N1bWVudCBpcyBzYXZlZCB3aXRoIHRoZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+Ci0JCQlzZXJpYWxpemVyLiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvCi0JCQlnZW5lcmF0ZSA8YWNyb255bT5YSFRNTDwvYWNyb255bT4gZnJvbSA8YWNyb255bT5IVE1MPC9hY3JvbnltPiBpbnB1dC4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXZhbGlkPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmUgaWYgdGhlIGRvY3VtZW50IGlzIGEgdmFsaWQgaW5zdGFuY2Ugb2YgdGhlIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbiAoPGFjcm9ueW0+RFREPC9hY3JvbnltPikuCisgICAgICAgICAgICAgICAgICAgIEEgPGFjcm9ueW0+RFREPC9hY3JvbnltPiB0byBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBhbHNvIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYXQgdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUgPG9wdGlvbj4tLWR0ZHZhbGlkPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4gQnkgZGVmYXVsdCwgJnhtbGxpbnQ7IGFsc28gY2hlY2tzIHRvIGRldGVybWluZSBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQk8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS12ZXJzaW9uPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IHRoZSB2ZXJzaW9uIG9mIDxjaXRlcmVmZW50cnk+CisgICAgICAgICAgICAgICAgPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgorICAgICAgICAgICAgICAgIDxtYW52b2xudW0+MzwvbWFudm9sbnVtPgorICAgICAgICAgICAgPC9jaXRlcmVmZW50cnk+IHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS13YWxrZXI8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRlc3QgdGhlIHdhbGtlciBtb2R1bGUsIHdoaWNoIGlzIGEgcmVhZGVyIGludGVyZmFjZSBidXQgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgdHJlZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVhZGVyIDxhY3JvbnltPkFQSTwvYWNyb255bT4gb24KKyAgICAgICAgICAgICAgICAgICAgYW4gdW5wYXJzZWQgZG9jdW1lbnQgaXQgd29ya3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHRyZWUuIFVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj4tLXhpbmNsdWRlPC9vcHRpb24+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkRvIFhJbmNsdWRlIHByb2Nlc3NpbmcuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxvcHRpb24+LS14bWxvdXQ8L29wdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8b3B0aW9uPi0taHRtbDwvb3B0aW9uPi4gVXN1YWxseQorICAgICAgICAgICAgICAgICAgICB3aGVuIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+IGlzIHBhcnNlZCB0aGUgZG9jdW1lbnQgaXMgc2F2ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4gc2VyaWFsaXplci4gQnV0IHdpdGggdGhpcyBvcHRpb24gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyBkb2N1bWVudCBpcyBzYXZlZCB3aXRoIHRoZSA8YWNyb255bT5YTUw8L2Fjcm9ueW0+CisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgPGFjcm9ueW0+WEhUTUw8L2Fjcm9ueW0+IGZyb20gPGFjcm9ueW0+SFRNTDwvYWNyb255bT4gaW5wdXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICA8L3ZhcmlhYmxlbGlzdD4KIDwvcmVmc2VjdDE+CiAKIDxyZWZzZWN0MSBpZD0ic2hlbGwiPgotCTx0aXRsZT5TSEVMTCBDT01NQU5EUzwvdGl0bGU+Ci0JPHBhcmE+Ci0JCSZ4bWxsaW50OyBvZmZlcnMgYW4gaW50ZXJhY3RpdmUgc2hlbGwgbW9kZSBpbnZva2VkIHdpdGgKLQkJdGhlIDxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPiBjb21tYW5kLiBBdmFpbGFibGUgY29tbWFuZHMgaW4gc2hlbGwgbW9kZQotCQlpbmNsdWRlIChpbiBhbHBoYWJldGljYWwgb3JkZXIpOgotCTwvcGFyYT4KLQk8dmFyaWFibGVsaXN0PgorICAgIDx0aXRsZT5TSEVMTCBDT01NQU5EUzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgICZ4bWxsaW50OyBvZmZlcnMgYW4gaW50ZXJhY3RpdmUgc2hlbGwgbW9kZSBpbnZva2VkIHdpdGgKKyAgICAgICAgdGhlIDxvcHRpb24+LS1zaGVsbDwvb3B0aW9uPiBjb21tYW5kLiBBdmFpbGFibGUgY29tbWFuZHMgaW4gc2hlbGwgbW9kZQorICAgICAgICBpbmNsdWRlIChpbiBhbHBoYWJldGljYWwgb3JkZXIpOgorICAgIDwvcGFyYT4KKyAgICA8dmFyaWFibGVsaXN0PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGNvbW1hbmQ+YmFzZTwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5EaXNwbGF5IDxhY3JvbnltPlhNTDwvYWNyb255bT4gYmFzZSBvZiB0aGUgbm9kZS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48Y29tbWFuZD5iYXNlPC9jb21tYW5kPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EaXNwbGF5IDxhY3JvbnltPlhNTDwvYWNyb255bT4gYmFzZSBvZiB0aGUgbm9kZS48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxjb21tYW5kPmJ5ZTwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5MZWF2ZSB0aGUgc2hlbGwuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+YnllPC9jb21tYW5kPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5MZWF2ZSB0aGUgc2hlbGwuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48Y29tbWFuZD5jYXQgPHJlcGxhY2VhYmxlPk5PREU8L3JlcGxhY2VhYmxlPjwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5EaXNwbGF5IHRoZSBnaXZlbiBub2RlIG9yIHRoZSBjdXJyZW50IG9uZS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48Y29tbWFuZD5jYXQgPHJlcGxhY2VhYmxlPk5PREU8L3JlcGxhY2VhYmxlPjwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RGlzcGxheSB0aGUgZ2l2ZW4gbm9kZSBvciB0aGUgY3VycmVudCBvbmUuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48Y29tbWFuZD5jZCA8cmVwbGFjZWFibGU+UEFUSDwvcmVwbGFjZWFibGU+PC9jb21tYW5kPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJQ2hhbmdlIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhlIGdpdmVuIHBhdGggKGlmIHVuaXF1ZSkgb3Igcm9vdCBpZiBubwotCQkJYXJndW1lbnQgaXMgZ2l2ZW4uCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxjb21tYW5kPmNkIDxyZXBsYWNlYWJsZT5QQVRIPC9yZXBsYWNlYWJsZT48L2NvbW1hbmQ+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdGhlIGN1cnJlbnQgbm9kZSB0byB0aGUgZ2l2ZW4gcGF0aCAoaWYgdW5pcXVlKSBvciByb290IGlmIG5vCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IGlzIGdpdmVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGNvbW1hbmQ+ZGlyIDxyZXBsYWNlYWJsZT5QQVRIPC9yZXBsYWNlYWJsZT48L2NvbW1hbmQ+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlEdW1wcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSAobmFtZXNwYWNlLCBhdHRyaWJ1dGVzLCBjb250ZW50KS4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+ZGlyIDxyZXBsYWNlYWJsZT5QQVRIPC9yZXBsYWNlYWJsZT48L2NvbW1hbmQ+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEdW1wcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSAobmFtZXNwYWNlLCBhdHRyaWJ1dGVzLCBjb250ZW50KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxjb21tYW5kPmR1IDxyZXBsYWNlYWJsZT5QQVRIPC9yZXBsYWNlYWJsZT48L2NvbW1hbmQ+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Ci0JCQlTaG93IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHN1YnRyZWUgdW5kZXIgdGhlIGdpdmVuIHBhdGggb3IgdGhlIGN1cnJlbnQgbm9kZS4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+ZHUgPHJlcGxhY2VhYmxlPlBBVEg8L3JlcGxhY2VhYmxlPjwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNob3cgdGhlIHN0cnVjdHVyZSBvZiB0aGUgc3VidHJlZSB1bmRlciB0aGUgZ2l2ZW4gcGF0aCBvciB0aGUgY3VycmVudCBub2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGNvbW1hbmQ+ZXhpdDwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5MZWF2ZSB0aGUgc2hlbGwuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+ZXhpdDwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+TGVhdmUgdGhlIHNoZWxsLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGNvbW1hbmQ+aGVscDwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5TaG93IHRoaXMgaGVscC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48Y29tbWFuZD5oZWxwPC9jb21tYW5kPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5TaG93IHRoaXMgaGVscC48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxjb21tYW5kPmZyZWU8L2NvbW1hbmQ+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+RGlzcGxheSBtZW1vcnkgdXNhZ2UuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+ZnJlZTwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RGlzcGxheSBtZW1vcnkgdXNhZ2UuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48Y29tbWFuZD5sb2FkIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9jb21tYW5kPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPkxvYWQgYSBuZXcgZG9jdW1lbnQgd2l0aCB0aGUgZ2l2ZW4gZmlsZW5hbWUuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+bG9hZCA8cmVwbGFjZWFibGU+RklMRU5BTUU8L3JlcGxhY2VhYmxlPjwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+TG9hZCBhIG5ldyBkb2N1bWVudCB3aXRoIHRoZSBnaXZlbiBmaWxlbmFtZS48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxjb21tYW5kPmxzIDxyZXBsYWNlYWJsZT5QQVRIPC9yZXBsYWNlYWJsZT48L2NvbW1hbmQ+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+TGlzdCBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gcGF0aCBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+bHMgPHJlcGxhY2VhYmxlPlBBVEg8L3JlcGxhY2VhYmxlPjwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdCBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gcGF0aCBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48Y29tbWFuZD5wd2Q8L2NvbW1hbmQ+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+RGlzcGxheSB0aGUgcGF0aCB0byB0aGUgY3VycmVudCBub2RlLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxjb21tYW5kPnB3ZDwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RGlzcGxheSB0aGUgcGF0aCB0byB0aGUgY3VycmVudCBub2RlLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGNvbW1hbmQ+cXVpdDwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5MZWF2ZSB0aGUgc2hlbGwuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGNvbW1hbmQ+cXVpdDwvY29tbWFuZD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+TGVhdmUgdGhlIHNoZWxsLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGNvbW1hbmQ+c2F2ZSA8cmVwbGFjZWFibGU+RklMRU5BTUU8L3JlcGxhY2VhYmxlPjwvY29tbWFuZD48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCVNhdmUgdGhlIGN1cnJlbnQgZG9jdW1lbnQgdG8gdGhlIGdpdmVuIGZpbGVuYW1lIG9yIHRvIHRoZSBvcmlnaW5hbCBuYW1lLgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48Y29tbWFuZD5zYXZlIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9jb21tYW5kPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2F2ZSB0aGUgY3VycmVudCBkb2N1bWVudCB0byB0aGUgZ2l2ZW4gZmlsZW5hbWUgb3IgdG8gdGhlIG9yaWdpbmFsIG5hbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48b3B0aW9uPnZhbGlkYXRlPC9vcHRpb24+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+Q2hlY2sgdGhlIGRvY3VtZW50IGZvciBlcnJvcnMuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PG9wdGlvbj52YWxpZGF0ZTwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5DaGVjayB0aGUgZG9jdW1lbnQgZm9yIGVycm9ycy48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxjb21tYW5kPndyaXRlIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9jb21tYW5kPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPldyaXRlIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhlIGdpdmVuIGZpbGVuYW1lLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxjb21tYW5kPndyaXRlIDxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9jb21tYW5kPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Xcml0ZSB0aGUgY3VycmVudCBub2RlIHRvIHRoZSBnaXZlbiBmaWxlbmFtZS48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCTwvdmFyaWFibGVsaXN0PgorICAgIDwvdmFyaWFibGVsaXN0PgogPC9yZWZzZWN0MT4KIAogPHJlZnNlY3QxIGlkPSJlbnZpcm9ubWVudCI+Ci0JPHRpdGxlPkVOVklST05NRU5UPC90aXRsZT4KLQk8dmFyaWFibGVsaXN0PgorICAgIDx0aXRsZT5FTlZJUk9OTUVOVDwvdGl0bGU+CisgICAgPHZhcmlhYmxlbGlzdD4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlbnZhcj5TR01MX0NBVEFMT0dfRklMRVM8L2VudmFyPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPjxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IGNhdGFsb2cgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgcmVkaXJlY3RpbmcKLQkJCXF1ZXJpZXMgdG8gdGhlIHVzZXIncyBvd24gc2V0IG9mIGNhdGFsb2dzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcKLQkJCXRoZSA8ZW52YXI+U0dNTF9DQVRBTE9HX0ZJTEVTPC9lbnZhcj4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBsaXN0Ci0JCQlvZiBjYXRhbG9ncy4gQW4gZW1wdHkgb25lIHNob3VsZCBkZWFjdGl2YXRlIGxvYWRpbmcgdGhlCi0JCQlkZWZhdWx0IDxmaWxlbmFtZT4vZXRjL3NnbWwvY2F0YWxvZzwvZmlsZW5hbWU+IGNhdGFsb2cuCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlbnZhcj5TR01MX0NBVEFMT0dfRklMRVM8L2VudmFyPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT48YWNyb255bT5TR01MPC9hY3JvbnltPiBjYXRhbG9nIGJlaGF2aW9yIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHF1ZXJpZXMgdG8gdGhlIHVzZXIncyBvd24gc2V0IG9mIGNhdGFsb2dzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxlbnZhcj5TR01MX0NBVEFMT0dfRklMRVM8L2VudmFyPiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgb2YgY2F0YWxvZ3MuIEFuIGVtcHR5IG9uZSBzaG91bGQgZGVhY3RpdmF0ZSBsb2FkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGNhdGFsb2cuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZW52YXI+WE1MX0NBVEFMT0dfRklMRVM8L2VudmFyPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPjxhY3JvbnltPlhNTDwvYWNyb255bT4gY2F0YWxvZyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSByZWRpcmVjdGluZwotCQkJcXVlcmllcyB0byB0aGUgdXNlcidzIG93biBzZXQgb2YgY2F0YWxvZ3MuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZwotCQkJdGhlIDxlbnZhcj5YTUxfQ0FUQUxPR19GSUxFUzwvZW52YXI+IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc3BhY2Utc2VwYXJhdGVkCi0JCQlsaXN0IG9mIGNhdGFsb2dzLiBVc2UgcGVyY2VudC1lbmNvZGluZyB0byBlc2NhcGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMuCi0JCQlBbiBlbXB0eSB2YXJpYWJsZSBzaG91bGQgZGVhY3RpdmF0ZSBsb2FkaW5nIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT4vZXRjL3htbC9jYXRhbG9nPC9maWxlbmFtZT4gY2F0YWxvZy4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVudmFyPlhNTF9DQVRBTE9HX0ZJTEVTPC9lbnZhcj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+PGFjcm9ueW0+WE1MPC9hY3JvbnltPiBjYXRhbG9nIGJlaGF2aW9yIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlZGlyZWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHF1ZXJpZXMgdG8gdGhlIHVzZXIncyBvd24gc2V0IG9mIGNhdGFsb2dzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxlbnZhcj5YTUxfQ0FUQUxPR19GSUxFUzwvZW52YXI+IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc3BhY2Utc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgICAgIGxpc3Qgb2YgY2F0YWxvZ3MuIFVzZSBwZXJjZW50LWVuY29kaW5nIHRvIGVzY2FwZSBzcGFjZXMgb3Igb3RoZXIgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICAgICAgQW4gZW1wdHkgdmFyaWFibGUgc2hvdWxkIGRlYWN0aXZhdGUgbG9hZGluZyB0aGUgZGVmYXVsdCBjYXRhbG9nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVudmFyPlhNTF9ERUJVR19DQVRBTE9HPC9lbnZhcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5TZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZW52YXI+WE1MX0RFQlVHX0NBVEFMT0c8L2VudmFyPgotCQkJdG8gPHBhcmFtZXRlcj5ub24temVybzwvcGFyYW1ldGVyPiB1c2luZyB0aGUgPGNvbW1hbmQ+ZXhwb3J0PC9jb21tYW5kPgotCQkJY29tbWFuZCBvdXRwdXRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGNhdGFsb2cgb3BlcmF0aW9ucy4KLQkJPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVudmFyPlhNTF9ERUJVR19DQVRBTE9HPC9lbnZhcj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+U2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGVudmFyPlhNTF9ERUJVR19DQVRBTE9HPC9lbnZhcj4KKyAgICAgICAgICAgICAgICAgICAgdG8gPHBhcmFtZXRlcj5ub24temVybzwvcGFyYW1ldGVyPiB1c2luZyB0aGUgPGNvbW1hbmQ+ZXhwb3J0PC9jb21tYW5kPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gY2F0YWxvZyBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVudmFyPlhNTExJTlRfSU5ERU5UPC9lbnZhcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5TZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZW52YXI+WE1MTElOVF9JTkRFTlQ8L2VudmFyPgotCQkJY29udHJvbHMgdGhlIGluZGVudGF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0d28gc3BhY2VzICZxdW90OyAgJnF1b3Q7LgotCQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+Ci0JCQotCTwvdmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVudmFyPlhNTExJTlRfSU5ERU5UPC9lbnZhcj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+U2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGVudmFyPlhNTExJTlRfSU5ERU5UPC9lbnZhcj4KKyAgICAgICAgICAgICAgICAgICAgY29udHJvbHMgdGhlIGluZGVudGF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0d28gc3BhY2VzICZxdW90OyAgJnF1b3Q7LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPC92YXJpYWJsZWxpc3Q+CiA8L3JlZnNlY3QxPgogCiA8cmVmc2VjdDEgaWQ9ImRpYWdub3N0aWNzIj4KLQk8dGl0bGU+RElBR05PU1RJQ1M8L3RpdGxlPgotCTxwYXJhPgotCQkmeG1sbGludDsgcmV0dXJuIGNvZGVzIHByb3ZpZGUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCB3aGVuCi0JCWNhbGxpbmcgaXQgZnJvbSBzY3JpcHRzLgotCTwvcGFyYT4KLQk8IS0tIGJldHRlciB1c2Ugc2VnbWVudGVkbGlzdCBlbGVtZW50IGxhdGVyLAotCSAgICAgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGluIHNuYXBzaG90cyAtLT4KLQk8dmFyaWFibGVsaXN0PgorICAgIDx0aXRsZT5ESUFHTk9TVElDUzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgICZ4bWxsaW50OyByZXR1cm4gY29kZXMgcHJvdmlkZSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdoZW4KKyAgICAgICAgY2FsbGluZyBpdCBmcm9tIHNjcmlwdHMuCisgICAgPC9wYXJhPgorICAgIDwhLS0gYmV0dGVyIHVzZSBzZWdtZW50ZWRsaXN0IGVsZW1lbnQgbGF0ZXIsCisgICAgICAgICB3aGljaCBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgaW4gc25hcHNob3RzIC0tPgorICAgIDx2YXJpYWJsZWxpc3Q+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPjA8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5ObyBlcnJvcjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+MDwvZXJyb3Jjb2RlPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5ObyBlcnJvcjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT4xPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+VW5jbGFzc2lmaWVkPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9yY29kZT4xPC9lcnJvcmNvZGU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlVuY2xhc3NpZmllZDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT4yPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+RXJyb3IgaW4gPGFjcm9ueW0+RFREPC9hY3JvbnltPjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+MjwvZXJyb3Jjb2RlPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5FcnJvciBpbiA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+PC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPjM8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT5WYWxpZGF0aW9uIGVycm9yPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9yY29kZT4zPC9lcnJvcmNvZGU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlZhbGlkYXRpb24gZXJyb3I8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+NDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPlZhbGlkYXRpb24gZXJyb3I8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZXJyb3Jjb2RlPjQ8L2Vycm9yY29kZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VmFsaWRhdGlvbiBlcnJvcjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT41PC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+RXJyb3IgaW4gc2NoZW1hIGNvbXBpbGF0aW9uPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JCTwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGVycm9yY29kZT41PC9lcnJvcmNvZGU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkVycm9yIGluIHNjaGVtYSBjb21waWxhdGlvbjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT42PC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+RXJyb3Igd3JpdGluZyBvdXRwdXQ8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQkJPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZXJyb3Jjb2RlPjY8L2Vycm9yY29kZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RXJyb3Igd3JpdGluZyBvdXRwdXQ8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotCQk8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+NzwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JCTxwYXJhPgotCQkJRXJyb3IgaW4gcGF0dGVybiAoZ2VuZXJhdGVkIHdoZW4gPG9wdGlvbj4tLXBhdHRlcm48L29wdGlvbj4gb3B0aW9uIGlzIHVzZWQpCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+NzwvZXJyb3Jjb2RlPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXJyb3IgaW4gcGF0dGVybiAoZ2VuZXJhdGVkIHdoZW4gPG9wdGlvbj4tLXBhdHRlcm48L29wdGlvbj4gb3B0aW9uIGlzIHVzZWQpCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPjg8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCQk8cGFyYT4KLQkJCUVycm9yIGluIFJlYWRlciByZWdpc3RyYXRpb24gKGdlbmVyYXRlZAotCQkJd2hlbiA8b3B0aW9uPi0tY2hrcmVnaXN0ZXI8L29wdGlvbj4gb3B0aW9uIGlzIHVzZWQpCi0JCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+ODwvZXJyb3Jjb2RlPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXJyb3IgaW4gUmVhZGVyIHJlZ2lzdHJhdGlvbiAoZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgIHdoZW4gPG9wdGlvbj4tLWNoa3JlZ2lzdGVyPC9vcHRpb24+IG9wdGlvbiBpcyB1c2VkKQorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JCTx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT45PC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+T3V0IG9mIG1lbW9yeSBlcnJvcjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+OTwvZXJyb3Jjb2RlPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5PdXQgb2YgbWVtb3J5IGVycm9yPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLQkJPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPjEwPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkJPHBhcmE+WFBhdGggZXZhbHVhdGlvbiBlcnJvcjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCQk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxlcnJvcmNvZGU+MTA8L2Vycm9yY29kZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+WFBhdGggZXZhbHVhdGlvbiBlcnJvcjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0JPC92YXJpYWJsZWxpc3Q+CisgICAgPC92YXJpYWJsZWxpc3Q+CiA8L3JlZnNlY3QxPgogCiA8cmVmc2VjdDEgaWQ9InNlZWFsc28iPgotCTx0aXRsZT5TRUUgQUxTTzwvdGl0bGU+Ci0JPHBhcmE+PGNpdGVyZWZlbnRyeT4KLQkJCTxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KLQkJCTxtYW52b2xudW0+MzwvbWFudm9sbnVtPgotCQk8L2NpdGVyZWZlbnRyeT4KLQk8L3BhcmE+Ci0JPHBhcmE+Ci0JCU1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGF0Ci0JCTxpdGVtaXplZGxpc3Q+Ci0JCQk8bGlzdGl0ZW0+Ci0JCQkJPHBhcmE+PGNpdGVyZWZlbnRyeT4KLQkJCQkJCTxyZWZlbnRyeXRpdGxlPmxpYnhtbDwvcmVmZW50cnl0aXRsZT4KLQkJCQkJCTxtYW52b2xudW0+MzwvbWFudm9sbnVtPgotCQkJCQk8L2NpdGVyZWZlbnRyeT4gd2ViIHBhZ2UgPHVsaW5rIHVybD0iaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDIiLz4KLQkJCQk8L3BhcmE+Ci0JCQk8L2xpc3RpdGVtPgotCQk8L2l0ZW1pemVkbGlzdD4KLQk8L3BhcmE+CisgICAgPHRpdGxlPlNFRSBBTFNPPC90aXRsZT4KKyAgICA8cGFyYT48Y2l0ZXJlZmVudHJ5PgorICAgICAgICAgICAgPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgorICAgICAgICAgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+CisgICAgICAgIDwvY2l0ZXJlZmVudHJ5PgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgICAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT48Y2l0ZXJlZmVudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJlZmVudHJ5dGl0bGU+bGlieG1sPC9yZWZlbnRyeXRpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+CisgICAgICAgICAgICAgICAgICAgIDwvY2l0ZXJlZmVudHJ5PiB3ZWIgcGFnZSA8dWxpbmsgdXJsPSJodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMiIvPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KIDwvcmVmc2VjdDE+CiAKIDwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9lbmMuaCBiL2VuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjlhNWQwLi4wMDAwMDAwCi0tLSBhL2VuYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIFN1bW1hcnk6IEludGVybmFsIEludGVyZmFjZXMgZm9yIGVuY29kaW5nIGluIGxpYnhtbDIKLSAqIERlc2NyaXB0aW9uOiB0aGlzIG1vZHVsZSBkZXNjcmliZXMgYSBmZXcgaW50ZXJmYWNlcyB3aGljaCB3ZXJlCi0gKiAgICAgICAgICAgICAgYWRkZWQgYWxvbmcgd2l0aCB0aGUgQVBJIGNoYW5nZXMgaW4gMi45LjAKLSAqICAgICAgICAgICAgICB0aG9zZSBhcmUgcHJpdmF0ZSByb3V0aW5lcyBhdCB0aGlzIHBvaW50Ci0gKgotICogQ29weTogU2VlIENvcHlyaWdodCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIEF1dGhvcjogRGFuaWVsIFZlaWxsYXJkCi0gKi8KLQotI2lmbmRlZiBfX1hNTF9FTkNfSF9fCi0jZGVmaW5lIF9fWE1MX0VOQ19IX18KLQotI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotaW50IHhtbENoYXJFbmNGaXJzdExpbmVJbnQoeG1sQ2hhckVuY29kaW5nSGFuZGxlciAqaGFuZGxlciwgeG1sQnVmZmVyUHRyIG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEJ1ZmZlclB0ciBpbiwgaW50IGxlbik7Ci1pbnQgeG1sQ2hhckVuY0ZpcnN0TGluZUlucHV0KHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LCBpbnQgbGVuKTsKLWludCB4bWxDaGFyRW5jSW5wdXQoeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQsIGludCBmbHVzaCk7Ci1pbnQgeG1sQ2hhckVuY091dHB1dCh4bWxPdXRwdXRCdWZmZXJQdHIgb3V0cHV0LCBpbnQgaW5pdCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYgLyogX19YTUxfRU5DX0hfXyAqLwotCi0KZGlmZiAtLWdpdCBhL2VuY29kaW5nLmMgYi9lbmNvZGluZy5jCmluZGV4IDU0NjUzNTkuLmJjMjc3MmQgMTAwNjQ0Ci0tLSBhL2VuY29kaW5nLmMKKysrIGIvZW5jb2RpbmcuYwpAQCAtMzQsMTQgKzM0LDE1IEBACiAKICNpbmNsdWRlIDxsaWJ4bWwvZW5jb2RpbmcuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKICNpbmNsdWRlIDxsaWJ4bWwvSFRNTHBhcnNlci5oPgogI2VuZGlmCi0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KIAotI2luY2x1ZGUgImJ1Zi5oIgotI2luY2x1ZGUgImVuYy5oIgorI2luY2x1ZGUgInByaXZhdGUvYnVmLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9lbmMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCiAKICNpZmRlZiBMSUJYTUxfSUNVX0VOQUJMRUQKICNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KQEAgLTU3LDkgKzU4LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgeG1sVVRGMTZMRUhhbmRsZXIgPSBOVUxMOwotc3RhdGljIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgeG1sVVRGMTZCRUhhbmRsZXIgPSBOVUxMOwotCiB0eXBlZGVmIHN0cnVjdCBfeG1sQ2hhckVuY29kaW5nQWxpYXMgeG1sQ2hhckVuY29kaW5nQWxpYXM7CiB0eXBlZGVmIHhtbENoYXJFbmNvZGluZ0FsaWFzICp4bWxDaGFyRW5jb2RpbmdBbGlhc1B0cjsKIHN0cnVjdCBfeG1sQ2hhckVuY29kaW5nQWxpYXMgewpAQCAtNzEsNDUgKzY5LDggQEAKIHN0YXRpYyBpbnQgeG1sQ2hhckVuY29kaW5nQWxpYXNlc05iID0gMDsKIHN0YXRpYyBpbnQgeG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCA9IDA7CiAKLSNpZiBkZWZpbmVkKExJQlhNTF9JQ09OVl9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9JQ1VfRU5BQkxFRCkKLSNpZiAwCi0jZGVmaW5lIERFQlVHX0VOQ09ESU5HICAvKiBEZWZpbmUgdGhpcyB0byBnZXQgZW5jb2RpbmcgdHJhY2VzICovCi0jZW5kaWYKLSNlbHNlCi0jaWZkZWYgTElCWE1MX0lTTzg4NTlYX0VOQUJMRUQKLXN0YXRpYyB2b2lkIHhtbFJlZ2lzdGVyQ2hhckVuY29kaW5nSGFuZGxlcnNJU084ODU5eCAodm9pZCk7Ci0jZW5kaWYKLSNlbmRpZgotCiBzdGF0aWMgaW50IHhtbExpdHRsZUVuZGlhbiA9IDE7CiAKLS8qKgotICogeG1sRW5jb2RpbmdFcnJNZW1vcnk6Ci0gKiBAZXh0cmE6ICBleHRyYSBpbmZvcm1hdGlvbgotICoKLSAqIEhhbmRsZSBhbiBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbgotICovCi1zdGF0aWMgdm9pZAoteG1sRW5jb2RpbmdFcnJNZW1vcnkoY29uc3QgY2hhciAqZXh0cmEpCi17Ci0gICAgX194bWxTaW1wbGVFcnJvcihYTUxfRlJPTV9JMThOLCBYTUxfRVJSX05PX01FTU9SWSwgTlVMTCwgTlVMTCwgZXh0cmEpOwotfQotCi0vKioKLSAqIHhtbEVyckVuY29kaW5nOgotICogQGVycm9yOiAgdGhlIGVycm9yIG51bWJlcgotICogQG1zZzogIHRoZSBlcnJvciBtZXNzYWdlCi0gKgotICogbiBlbmNvZGluZyBlcnJvcgotICovCi1zdGF0aWMgdm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwwKQoteG1sRW5jb2RpbmdFcnIoeG1sUGFyc2VyRXJyb3JzIGVycm9yLCBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnZhbCkKLXsKLSAgICBfX3htbFJhaXNlRXJyb3IoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgWE1MX0ZST01fSTE4TiwgZXJyb3IsIFhNTF9FUlJfRkFUQUwsCi0gICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIHZhbCwgTlVMTCwgTlVMTCwgMCwgMCwgbXNnLCB2YWwpOwotfQotCiAjaWZkZWYgTElCWE1MX0lDVV9FTkFCTEVECiBzdGF0aWMgdWNvbnZfdCoKIG9wZW5JY3VDb252ZXJ0ZXIoY29uc3QgY2hhciogbmFtZSwgaW50IHRvVW5pY29kZSkKQEAgLTE3Niw3ICsxMzcsOSBAQAogICoKICAqIFRha2UgYSBibG9jayBvZiBBU0NJSSBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gVVRGLTgKICAqIGJsb2NrIG9mIGNoYXJzIG91dC4KLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvciAtMSBvdGhlcndpc2UKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLgorICoKICAqIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkCiAgKiAgICAgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLgogICogVGhlIHZhbHVlIG9mIEBvdXRsZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHByb2R1Y2VkLgpAQCAtMjAyLDcgKzE2NSw3IEBACiAJfSBlbHNlIHsKIAkgICAgKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogCSAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBiYXNlOwotCSAgICByZXR1cm4oLTEpOworCSAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOwogCX0KIAogCXByb2Nlc3NlZCA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikgaW47CkBAIC0yMjMsNyArMTg2LDggQEAKICAqIFRha2UgYSBibG9jayBvZiBVVEYtOCBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gQVNDSUkKICAqIGJsb2NrIG9mIGNoYXJzIG91dC4KICAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2VzcywgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzLCBvciAtMSBvdGhlcndpc2UKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuCisgKgogICogVGhlIHZhbHVlIG9mIEBpbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQKICAqICAgICBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLCBlbHNlIHVucHJlZGljdGFibGUuCiAgKiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuCkBAIC0yMzksNyArMjAzLDggQEAKICAgICB1bnNpZ25lZCBpbnQgYywgZDsKICAgICBpbnQgdHJhaWxpbmc7CiAKLSAgICBpZiAoKG91dCA9PSBOVUxMKSB8fCAob3V0bGVuID09IE5VTEwpIHx8IChpbmxlbiA9PSBOVUxMKSkgcmV0dXJuKC0xKTsKKyAgICBpZiAoKG91dCA9PSBOVUxMKSB8fCAob3V0bGVuID09IE5VTEwpIHx8IChpbmxlbiA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOVEVSTkFMKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewogICAgICAgICAvKgogCSAqIGluaXRpYWxpemF0aW9uIG5vdGhpbmcgdG8gZG8KQEAgLTI1Nyw3ICsyMjIsNyBAQAogCSAgICAvKiB0cmFpbGluZyBieXRlIGluIGxlYWRpbmcgcG9zaXRpb24gKi8KIAkgICAgKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogCSAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotCSAgICByZXR1cm4oLTIpOworCSAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOwogICAgICAgICB9IGVsc2UgaWYgKGQgPCAweEUwKSAgeyBjPSBkICYgMHgxRjsgdHJhaWxpbmc9IDE7IH0KICAgICAgICAgZWxzZSBpZiAoZCA8IDB4RjApICB7IGM9IGQgJiAweDBGOyB0cmFpbGluZz0gMjsgfQogICAgICAgICBlbHNlIGlmIChkIDwgMHhGOCkgIHsgYz0gZCAmIDB4MDc7IHRyYWlsaW5nPSAzOyB9CkBAIC0yNjUsNyArMjMwLDcgQEAKIAkgICAgLyogbm8gY2hhbmNlIGZvciB0aGlzIGluIEFzY2lpICovCiAJICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKIAkgICAgKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLQkgICAgcmV0dXJuKC0yKTsKKwkgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKIAl9CiAKIAlpZiAoaW5lbmQgLSBpbiA8IHRyYWlsaW5nKSB7CkBAIC0yODgsNyArMjUzLDcgQEAKIAkgICAgLyogbm8gY2hhbmNlIGZvciB0aGlzIGluIEFzY2lpICovCiAJICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKIAkgICAgKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLQkgICAgcmV0dXJuKC0yKTsKKwkgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKIAl9CiAJcHJvY2Vzc2VkID0gaW47CiAgICAgfQpAQCAtMzA3LDcgKzI3Miw5IEBACiAgKgogICogVGFrZSBhIGJsb2NrIG9mIElTTyBMYXRpbiAxIGNoYXJzIGluIGFuZCB0cnkgdG8gY29udmVydCBpdCB0byBhbiBVVEYtOAogICogYmxvY2sgb2YgY2hhcnMgb3V0LgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaWYgc3VjY2Vzcywgb3IgLTEgb3RoZXJ3aXNlCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4KKyAqCiAgKiBUaGUgdmFsdWUgb2YgQGlubGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZAogICogICAgIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4KICAqIFRoZSB2YWx1ZSBvZiBAb3V0bGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBwcm9kdWNlZC4KQEAgLTMyMiw3ICsyODksNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluc3RvcDsKIAogICAgIGlmICgob3V0ID09IE5VTEwpIHx8IChpbiA9PSBOVUxMKSB8fCAob3V0bGVuID09IE5VTEwpIHx8IChpbmxlbiA9PSBOVUxMKSkKLQlyZXR1cm4oLTEpOworCXJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAKICAgICBvdXRlbmQgPSBvdXQgKyAqb3V0bGVuOwogICAgIGluZW5kID0gaW4gKyAoKmlubGVuKTsKQEAgLTM1Niw3ICszMjMsOCBAQAogICoKICAqIE5vIG9wIGNvcHkgb3BlcmF0aW9uIGZvciBVVEY4IGhhbmRsaW5nLgogICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvciAtMSBpZiBsYWNrIG9mIHNwYWNlLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4KKyAqCiAgKiAgICAgVGhlIHZhbHVlIG9mICppbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQKICAqICAgICBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLCBlbHNlIHVucHJlZGljdGFibGUuCiAgKi8KQEAgLTM2Nyw3ICszMzUsNyBAQAogICAgIGludCBsZW47CiAKICAgICBpZiAoKG91dCA9PSBOVUxMKSB8fCAob3V0bGVuID09IE5VTEwpIHx8IChpbmxlbmIgPT0gTlVMTCkpCi0JcmV0dXJuKC0xKTsKKwlyZXR1cm4oWE1MX0VOQ19FUlJfSU5URVJOQUwpOwogICAgIGlmIChpbmIgPT0gTlVMTCkgewogICAgICAgICAvKiBpbmIgPT0gTlVMTCBtZWFucyBvdXRwdXQgaXMgaW5pdGlhbGl6ZWQuICovCiAgICAgICAgICpvdXRsZW4gPSAwOwpAQCAtMzgwLDcgKzM0OCw3IEBACiAJbGVuID0gKm91dGxlbjsKICAgICB9CiAgICAgaWYgKGxlbiA8IDApCi0JcmV0dXJuKC0xKTsKKwlyZXR1cm4oWE1MX0VOQ19FUlJfSU5URVJOQUwpOwogCiAgICAgLyoKICAgICAgKiBGSVhNRTogQ29udmVyc2lvbiBmdW5jdGlvbnMgbXVzdCBhc3N1cmUgdmFsaWQgVVRGLTgsIHNvIHdlIGhhdmUKQEAgLTQwNiw4ICszNzQsOCBAQAogICogVGFrZSBhIGJsb2NrIG9mIFVURi04IGNoYXJzIGluIGFuZCB0cnkgdG8gY29udmVydCBpdCB0byBhbiBJU08gTGF0aW4gMQogICogYmxvY2sgb2YgY2hhcnMgb3V0LgogICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGlmIHN1Y2Nlc3MsIC0yIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscywKLSAgICAgICAgICAgb3IgLTEgb3RoZXJ3aXNlCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLgorICoKICAqIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkCiAgKiAgICAgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLgogICogVGhlIHZhbHVlIG9mIEBvdXRsZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHByb2R1Y2VkLgpAQCAtNDIzLDcgKzM5MSw4IEBACiAgICAgdW5zaWduZWQgaW50IGMsIGQ7CiAgICAgaW50IHRyYWlsaW5nOwogCi0gICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKG91dGxlbiA9PSBOVUxMKSB8fCAoaW5sZW4gPT0gTlVMTCkpIHJldHVybigtMSk7CisgICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKG91dGxlbiA9PSBOVUxMKSB8fCAoaW5sZW4gPT0gTlVMTCkpCisgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAgICAgaWYgKGluID09IE5VTEwpIHsKICAgICAgICAgLyoKIAkgKiBpbml0aWFsaXphdGlvbiBub3RoaW5nIHRvIGRvCkBAIC00NDEsNyArNDEwLDcgQEAKIAkgICAgLyogdHJhaWxpbmcgYnl0ZSBpbiBsZWFkaW5nIHBvc2l0aW9uICovCiAJICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKIAkgICAgKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLQkgICAgcmV0dXJuKC0yKTsKKwkgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKICAgICAgICAgfSBlbHNlIGlmIChkIDwgMHhFMCkgIHsgYz0gZCAmIDB4MUY7IHRyYWlsaW5nPSAxOyB9CiAgICAgICAgIGVsc2UgaWYgKGQgPCAweEYwKSAgeyBjPSBkICYgMHgwRjsgdHJhaWxpbmc9IDI7IH0KICAgICAgICAgZWxzZSBpZiAoZCA8IDB4RjgpICB7IGM9IGQgJiAweDA3OyB0cmFpbGluZz0gMzsgfQpAQCAtNDQ5LDcgKzQxOCw3IEBACiAJICAgIC8qIG5vIGNoYW5jZSBmb3IgdGhpcyBpbiBJc29MYXQxICovCiAJICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKIAkgICAgKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLQkgICAgcmV0dXJuKC0yKTsKKwkgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKIAl9CiAKIAlpZiAoaW5lbmQgLSBpbiA8IHRyYWlsaW5nKSB7CkBAIC00NjIsNyArNDMxLDcgQEAKIAkgICAgaWYgKCgoZD0gKmluKyspICYgMHhDMCkgIT0gMHg4MCkgewogCQkqb3V0bGVuID0gb3V0IC0gb3V0c3RhcnQ7CiAJCSppbmxlbiA9IHByb2Nlc3NlZCAtIGluc3RhcnQ7Ci0JCXJldHVybigtMik7CisJCXJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAJICAgIH0KIAkgICAgYyA8PD0gNjsKIAkgICAgYyB8PSBkICYgMHgzRjsKQEAgLTQ3Nyw3ICs0NDYsNyBAQAogCSAgICAvKiBubyBjaGFuY2UgZm9yIHRoaXMgaW4gSXNvTGF0MSAqLwogCSAgICAqb3V0bGVuID0gb3V0IC0gb3V0c3RhcnQ7CiAJICAgICppbmxlbiA9IHByb2Nlc3NlZCAtIGluc3RhcnQ7Ci0JICAgIHJldHVybigtMik7CisJICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAJfQogCXByb2Nlc3NlZCA9IGluOwogICAgIH0KQEAgLTQ5OSwxMCArNDY4LDEwIEBACiAgKiBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSBuYXRpdmUgdHlwZSBvZiB0aGlzIG1hY2hpbmUgYW5kIHRoZQogICogaW5wdXRlZCBvbmUuCiAgKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIG9yIC0xIGlmIGxhY2sgb2Ygc3BhY2UsIG9yIC0yCi0gKiAgICAgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChpZiAqaW4gaXMgbm90IGEgdmFsaWQgdXRmMTYgc3RyaW5nKQotICogICAgIFRoZSB2YWx1ZSBvZiAqaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkCi0gKiAgICAgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4KKyAqCisgKiBUaGUgdmFsdWUgb2YgKmlubGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZAorICogaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSwgZWxzZSB1bnByZWRpY3RhYmxlLgogICovCiBzdGF0aWMgaW50CiBVVEYxNkxFVG9VVEY4KHVuc2lnbmVkIGNoYXIqIG91dCwgaW50ICpvdXRsZW4sCkBAIC01MTEsNyArNDgwLDcgQEAKICAgICB1bnNpZ25lZCBjaGFyKiBvdXRzdGFydCA9IG91dDsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwcm9jZXNzZWQgPSBpbmI7CiAgICAgdW5zaWduZWQgY2hhciogb3V0ZW5kOwotICAgIHVuc2lnbmVkIHNob3J0KiBpbiA9ICh1bnNpZ25lZCBzaG9ydCopIGluYjsKKyAgICB1bnNpZ25lZCBzaG9ydCogaW4gPSAodW5zaWduZWQgc2hvcnQgKikgKHZvaWQgKikgaW5iOwogICAgIHVuc2lnbmVkIHNob3J0KiBpbmVuZDsKICAgICB1bnNpZ25lZCBpbnQgYywgZCwgaW5sZW47CiAgICAgdW5zaWduZWQgY2hhciAqdG1wOwpAQCAtNTMyLDcgKzUwMSw3IEBACiAJfSBlbHNlIHsKIAkgICAgdG1wID0gKHVuc2lnbmVkIGNoYXIgKikgaW47CiAJICAgIGMgPSAqdG1wKys7Ci0JICAgIGMgPSBjIHwgKCgodW5zaWduZWQgaW50KSp0bXApIDw8IDgpOworCSAgICBjID0gYyB8ICgqdG1wIDw8IDgpOwogCSAgICBpbisrOwogCX0KICAgICAgICAgaWYgKChjICYgMHhGQzAwKSA9PSAweEQ4MDApIHsgICAgLyogc3Vycm9nYXRlcyAqLwpAQCAtNTQ0LDcgKzUxMyw3IEBACiAJICAgIH0gZWxzZSB7CiAJCXRtcCA9ICh1bnNpZ25lZCBjaGFyICopIGluOwogCQlkID0gKnRtcCsrOwotCQlkID0gZCB8ICgoKHVuc2lnbmVkIGludCkqdG1wKSA8PCA4KTsKKwkJZCA9IGQgfCAoKnRtcCA8PCA4KTsKIAkJaW4rKzsKIAkgICAgfQogICAgICAgICAgICAgaWYgKChkICYgMHhGQzAwKSA9PSAweERDMDApIHsKQEAgLTU1Niw3ICs1MjUsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAJCSpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKIAkJKmlubGVuYiA9IHByb2Nlc3NlZCAtIGluYjsKLQkgICAgICAgIHJldHVybigtMik7CisJICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOwogCSAgICB9CiAgICAgICAgIH0KIApAQCAtNTkxLDE0ICs1NjAsMTMgQEAKICAqIFRha2UgYSBibG9jayBvZiBVVEYtOCBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gVVRGLTE2TEUKICAqIGJsb2NrIG9mIGNoYXJzIG91dC4KICAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3IgLTEgaWYgbGFjayBvZiBzcGFjZSwgb3IgLTIKLSAqICAgICBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbGVkLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4KICAqLwogc3RhdGljIGludAogVVRGOFRvVVRGMTZMRSh1bnNpZ25lZCBjaGFyKiBvdXRiLCBpbnQgKm91dGxlbiwKICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCBpbnQgKmlubGVuKQogewotICAgIHVuc2lnbmVkIHNob3J0KiBvdXQgPSAodW5zaWduZWQgc2hvcnQqKSBvdXRiOworICAgIHVuc2lnbmVkIHNob3J0KiBvdXQgPSAodW5zaWduZWQgc2hvcnQgKikgKHZvaWQgKikgb3V0YjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwcm9jZXNzZWQgPSBpbjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBpbnN0YXJ0ID0gaW47CiAgICAgdW5zaWduZWQgc2hvcnQqIG91dHN0YXJ0PSBvdXQ7CkBAIC02MTAsNyArNTc4LDggQEAKICAgICB1bnNpZ25lZCBzaG9ydCB0bXAxLCB0bXAyOwogCiAgICAgLyogVVRGMTZMRSBlbmNvZGluZyBoYXMgbm8gQk9NICovCi0gICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKG91dGxlbiA9PSBOVUxMKSB8fCAoaW5sZW4gPT0gTlVMTCkpIHJldHVybigtMSk7CisgICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKG91dGxlbiA9PSBOVUxMKSB8fCAoaW5sZW4gPT0gTlVMTCkpCisgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAgICAgaWYgKGluID09IE5VTEwpIHsKIAkqb3V0bGVuID0gMDsKIAkqaW5sZW4gPSAwOwpAQCAtNjI1LDcgKzU5NCw3IEBACiAgICAgICAgICAgLyogdHJhaWxpbmcgYnl0ZSBpbiBsZWFkaW5nIHBvc2l0aW9uICovCiAJICAqb3V0bGVuID0gKG91dCAtIG91dHN0YXJ0KSAqIDI7CiAJICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotCSAgcmV0dXJuKC0yKTsKKwkgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAgICAgICB9IGVsc2UgaWYgKGQgPCAweEUwKSAgeyBjPSBkICYgMHgxRjsgdHJhaWxpbmc9IDE7IH0KICAgICAgIGVsc2UgaWYgKGQgPCAweEYwKSAgeyBjPSBkICYgMHgwRjsgdHJhaWxpbmc9IDI7IH0KICAgICAgIGVsc2UgaWYgKGQgPCAweEY4KSAgeyBjPSBkICYgMHgwNzsgdHJhaWxpbmc9IDM7IH0KQEAgLTYzMyw3ICs2MDIsNyBAQAogCS8qIG5vIGNoYW5jZSBmb3IgdGhpcyBpbiBVVEYtMTYgKi8KIAkqb3V0bGVuID0gKG91dCAtIG91dHN0YXJ0KSAqIDI7CiAJKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLQlyZXR1cm4oLTIpOworCXJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAgICAgICB9CiAKICAgICAgIGlmIChpbmVuZCAtIGluIDwgdHJhaWxpbmcpIHsKQEAgLTY1NSw3ICs2MjQsNyBAQAogCQkqb3V0KysgPSBjOwogCSAgICB9IGVsc2UgewogCQl0bXAgPSAodW5zaWduZWQgY2hhciAqKSBvdXQ7Ci0JCSp0bXAgPSBjIDsKKwkJKnRtcCA9ICh1bnNpZ25lZCBjaGFyKSBjOyAvKiBFeHBsaWNpdCB0cnVuY2F0aW9uICovCiAJCSoodG1wICsgMSkgPSBjID4+IDggOwogCQlvdXQrKzsKIAkgICAgfQpAQCAtNjcwLDEzICs2MzksMTMgQEAKIAkgICAgfSBlbHNlIHsKIAkJdG1wMSA9IDB4RDgwMCB8IChjID4+IDEwKTsKIAkJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikgb3V0OwotCQkqdG1wID0gKHVuc2lnbmVkIGNoYXIpIHRtcDE7CisJCSp0bXAgPSAodW5zaWduZWQgY2hhcikgdG1wMTsgLyogRXhwbGljaXQgdHJ1bmNhdGlvbiAqLwogCQkqKHRtcCArIDEpID0gdG1wMSA+PiA4OwogCQlvdXQrKzsKIAogCQl0bXAyID0gMHhEQzAwIHwgKGMgJiAweDAzRkYpOwogCQl0bXAgPSAodW5zaWduZWQgY2hhciAqKSBvdXQ7Ci0JCSp0bXAgID0gKHVuc2lnbmVkIGNoYXIpIHRtcDI7CisJCSp0bXAgID0gKHVuc2lnbmVkIGNoYXIpIHRtcDI7IC8qIEV4cGxpY2l0IHRydW5jYXRpb24gKi8KIAkJKih0bXAgKyAxKSA9IHRtcDIgPj4gODsKIAkJb3V0Kys7CiAJICAgIH0KQEAgLTcwMCw4ICs2NjksNyBAQAogICogVGFrZSBhIGJsb2NrIG9mIFVURi04IGNoYXJzIGluIGFuZCB0cnkgdG8gY29udmVydCBpdCB0byBhbiBVVEYtMTYKICAqIGJsb2NrIG9mIGNoYXJzIG91dC4KICAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3IgLTEgaWYgbGFjayBvZiBzcGFjZSwgb3IgLTIKLSAqICAgICBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbGVkLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4KICAqLwogc3RhdGljIGludAogVVRGOFRvVVRGMTYodW5zaWduZWQgY2hhciogb3V0YiwgaW50ICpvdXRsZW4sCkBAIC03MTYsMTAgKzY4NCw2IEBACiAJICAgIG91dGJbMV0gPSAweEZFOwogCSAgICAqb3V0bGVuID0gMjsKIAkgICAgKmlubGVuID0gMDsKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiQWRkZWQgRkZGRSBCeXRlIE9yZGVyIE1hcmtcbiIpOwotI2VuZGlmCiAJICAgIHJldHVybigyKTsKIAl9CiAJKm91dGxlbiA9IDA7CkBAIC03NDIsMTAgKzcwNiwxMCBAQAogICogaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgbmF0aXZlIHR5cGUgb2YgdGhpcyBtYWNoaW5lIGFuZCB0aGUKICAqIGlucHV0ZWQgb25lLgogICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvciAtMSBpZiBsYWNrIG9mIHNwYWNlLCBvciAtMgotICogICAgIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscyAoaWYgKmluIGlzIG5vdCBhIHZhbGlkIHV0ZjE2IHN0cmluZykKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuCisgKgogICogVGhlIHZhbHVlIG9mICppbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQKLSAqICAgICBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLCBlbHNlIHVucHJlZGljdGFibGUuCisgKiBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLCBlbHNlIHVucHJlZGljdGFibGUuCiAgKi8KIHN0YXRpYyBpbnQKIFVURjE2QkVUb1VURjgodW5zaWduZWQgY2hhciogb3V0LCBpbnQgKm91dGxlbiwKQEAgLTc1NCw3ICs3MTgsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIqIG91dHN0YXJ0ID0gb3V0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHByb2Nlc3NlZCA9IGluYjsKICAgICB1bnNpZ25lZCBjaGFyKiBvdXRlbmQ7Ci0gICAgdW5zaWduZWQgc2hvcnQqIGluID0gKHVuc2lnbmVkIHNob3J0KikgaW5iOworICAgIHVuc2lnbmVkIHNob3J0KiBpbiA9ICh1bnNpZ25lZCBzaG9ydCAqKSAodm9pZCAqKSBpbmI7CiAgICAgdW5zaWduZWQgc2hvcnQqIGluZW5kOwogICAgIHVuc2lnbmVkIGludCBjLCBkLCBpbmxlbjsKICAgICB1bnNpZ25lZCBjaGFyICp0bXA7CkBAIC03NzMsNyArNzM3LDcgQEAKIAlpZiAoeG1sTGl0dGxlRW5kaWFuKSB7CiAJICAgIHRtcCA9ICh1bnNpZ25lZCBjaGFyICopIGluOwogCSAgICBjID0gKnRtcCsrOwotCSAgICBjID0gKGMgPDwgOCkgfCAodW5zaWduZWQgaW50KSAqdG1wOworCSAgICBjID0gKGMgPDwgOCkgfCAqdG1wOwogCSAgICBpbisrOwogCX0gZWxzZSB7CiAJICAgIGM9ICppbisrOwpAQCAtNzg1LDcgKzc0OSw3IEBACiAJICAgIGlmICh4bWxMaXR0bGVFbmRpYW4pIHsKIAkJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikgaW47CiAJCWQgPSAqdG1wKys7Ci0JCWQgPSAoZCA8PCA4KSB8ICh1bnNpZ25lZCBpbnQpICp0bXA7CisJCWQgPSAoZCA8PCA4KSB8ICp0bXA7CiAJCWluKys7CiAJICAgIH0gZWxzZSB7CiAJCWQ9ICppbisrOwpAQCAtNzk5LDcgKzc2Myw3IEBACiAgICAgICAgICAgICBlbHNlIHsKIAkJKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogCQkqaW5sZW5iID0gcHJvY2Vzc2VkIC0gaW5iOwotCSAgICAgICAgcmV0dXJuKC0yKTsKKwkgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAJICAgIH0KICAgICAgICAgfQogCkBAIC04MzQsMTQgKzc5OCwxMyBAQAogICogVGFrZSBhIGJsb2NrIG9mIFVURi04IGNoYXJzIGluIGFuZCB0cnkgdG8gY29udmVydCBpdCB0byBhbiBVVEYtMTZCRQogICogYmxvY2sgb2YgY2hhcnMgb3V0LgogICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlIHdyaXR0ZW4sIG9yIC0xIGJ5IGxhY2sgb2Ygc3BhY2UsIG9yIC0yCi0gKiAgICAgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxlZC4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuCiAgKi8KIHN0YXRpYyBpbnQKIFVURjhUb1VURjE2QkUodW5zaWduZWQgY2hhciogb3V0YiwgaW50ICpvdXRsZW4sCiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbiwgaW50ICppbmxlbikKIHsKLSAgICB1bnNpZ25lZCBzaG9ydCogb3V0ID0gKHVuc2lnbmVkIHNob3J0Kikgb3V0YjsKKyAgICB1bnNpZ25lZCBzaG9ydCogb3V0ID0gKHVuc2lnbmVkIHNob3J0ICopICh2b2lkICopIG91dGI7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHJvY2Vzc2VkID0gaW47CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgaW5zdGFydCA9IGluOwogICAgIHVuc2lnbmVkIHNob3J0KiBvdXRzdGFydD0gb3V0OwpAQCAtODUzLDcgKzgxNiw4IEBACiAgICAgdW5zaWduZWQgc2hvcnQgdG1wMSwgdG1wMjsKIAogICAgIC8qIFVURi0xNkJFIGhhcyBubyBCT00gKi8KLSAgICBpZiAoKG91dGIgPT0gTlVMTCkgfHwgKG91dGxlbiA9PSBOVUxMKSB8fCAoaW5sZW4gPT0gTlVMTCkpIHJldHVybigtMSk7CisgICAgaWYgKChvdXRiID09IE5VTEwpIHx8IChvdXRsZW4gPT0gTlVMTCkgfHwgKGlubGVuID09IE5VTEwpKQorICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5URVJOQUwpOwogICAgIGlmIChpbiA9PSBOVUxMKSB7CiAJKm91dGxlbiA9IDA7CiAJKmlubGVuID0gMDsKQEAgLTg2OCw3ICs4MzIsNyBAQAogICAgICAgICAgIC8qIHRyYWlsaW5nIGJ5dGUgaW4gbGVhZGluZyBwb3NpdGlvbiAqLwogCSAgKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogCSAgKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLQkgIHJldHVybigtMik7CisJICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOwogICAgICAgfSBlbHNlIGlmIChkIDwgMHhFMCkgIHsgYz0gZCAmIDB4MUY7IHRyYWlsaW5nPSAxOyB9CiAgICAgICBlbHNlIGlmIChkIDwgMHhGMCkgIHsgYz0gZCAmIDB4MEY7IHRyYWlsaW5nPSAyOyB9CiAgICAgICBlbHNlIGlmIChkIDwgMHhGOCkgIHsgYz0gZCAmIDB4MDc7IHRyYWlsaW5nPSAzOyB9CkBAIC04NzYsNyArODQwLDcgQEAKICAgICAgICAgICAvKiBubyBjaGFuY2UgZm9yIHRoaXMgaW4gVVRGLTE2ICovCiAJICAqb3V0bGVuID0gb3V0IC0gb3V0c3RhcnQ7CiAJICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotCSAgcmV0dXJuKC0yKTsKKwkgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAgICAgICB9CiAKICAgICAgIGlmIChpbmVuZCAtIGluIDwgdHJhaWxpbmcpIHsKQEAgLTg5NSw3ICs4NTksNyBAQAogCSAgICBpZiAoeG1sTGl0dGxlRW5kaWFuKSB7CiAJCXRtcCA9ICh1bnNpZ25lZCBjaGFyICopIG91dDsKIAkJKnRtcCA9IGMgPj4gODsKLQkJKih0bXAgKyAxKSA9IGM7CisJCSoodG1wICsgMSkgPSAodW5zaWduZWQgY2hhcikgYzsgLyogRXhwbGljaXQgdHJ1bmNhdGlvbiAqLwogCQlvdXQrKzsKIAkgICAgfSBlbHNlIHsKIAkJKm91dCsrID0gYzsKQEAgLTkwOCwxMyArODcyLDEzIEBACiAJCXRtcDEgPSAweEQ4MDAgfCAoYyA+PiAxMCk7CiAJCXRtcCA9ICh1bnNpZ25lZCBjaGFyICopIG91dDsKIAkJKnRtcCA9IHRtcDEgPj4gODsKLQkJKih0bXAgKyAxKSA9ICh1bnNpZ25lZCBjaGFyKSB0bXAxOworCQkqKHRtcCArIDEpID0gKHVuc2lnbmVkIGNoYXIpIHRtcDE7IC8qIEV4cGxpY2l0IHRydW5jYXRpb24gKi8KIAkJb3V0Kys7CiAKIAkJdG1wMiA9IDB4REMwMCB8IChjICYgMHgwM0ZGKTsKIAkJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikgb3V0OwogCQkqdG1wID0gdG1wMiA+PiA4OwotCQkqKHRtcCArIDEpID0gKHVuc2lnbmVkIGNoYXIpIHRtcDI7CisJCSoodG1wICsgMSkgPSAodW5zaWduZWQgY2hhcikgdG1wMjsgLyogRXhwbGljaXQgdHJ1bmNhdGlvbiAqLwogCQlvdXQrKzsKIAkgICAgfSBlbHNlIHsKIAkJKm91dCsrID0gMHhEODAwIHwgKGMgPj4gMTApOwpAQCAtMTA0Nyw3ICsxMDExLDcgQEAKIAlyZXR1cm4oTlVMTCk7CiAKICAgICBmb3IgKGkgPSAwO2kgPCA5OTtpKyspIHsKLSAgICAgICAgdXBwZXJbaV0gPSB0b3VwcGVyKGFsaWFzW2ldKTsKKyAgICAgICAgdXBwZXJbaV0gPSAoY2hhcikgdG91cHBlcigodW5zaWduZWQgY2hhcikgYWxpYXNbaV0pOwogCWlmICh1cHBlcltpXSA9PSAwKSBicmVhazsKICAgICB9CiAgICAgdXBwZXJbaV0gPSAwOwpAQCAtMTA3NywyOSArMTA0MSwzMiBAQAogeG1sQWRkRW5jb2RpbmdBbGlhcyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphbGlhcykgewogICAgIGludCBpOwogICAgIGNoYXIgdXBwZXJbMTAwXTsKKyAgICBjaGFyICpuYW1lQ29weSwgKmFsaWFzQ29weTsKIAogICAgIGlmICgobmFtZSA9PSBOVUxMKSB8fCAoYWxpYXMgPT0gTlVMTCkpCiAJcmV0dXJuKC0xKTsKIAogICAgIGZvciAoaSA9IDA7aSA8IDk5O2krKykgewotICAgICAgICB1cHBlcltpXSA9IHRvdXBwZXIoYWxpYXNbaV0pOworICAgICAgICB1cHBlcltpXSA9IChjaGFyKSB0b3VwcGVyKCh1bnNpZ25lZCBjaGFyKSBhbGlhc1tpXSk7CiAJaWYgKHVwcGVyW2ldID09IDApIGJyZWFrOwogICAgIH0KICAgICB1cHBlcltpXSA9IDA7CiAKLSAgICBpZiAoeG1sQ2hhckVuY29kaW5nQWxpYXNlcyA9PSBOVUxMKSB7Ci0JeG1sQ2hhckVuY29kaW5nQWxpYXNlc05iID0gMDsKLQl4bWxDaGFyRW5jb2RpbmdBbGlhc2VzTWF4ID0gMjA7Ci0JeG1sQ2hhckVuY29kaW5nQWxpYXNlcyA9ICh4bWxDaGFyRW5jb2RpbmdBbGlhc1B0cikKLQkgICAgICB4bWxNYWxsb2MoeG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCAqIHNpemVvZih4bWxDaGFyRW5jb2RpbmdBbGlhcykpOwotCWlmICh4bWxDaGFyRW5jb2RpbmdBbGlhc2VzID09IE5VTEwpCi0JICAgIHJldHVybigtMSk7Ci0gICAgfSBlbHNlIGlmICh4bWxDaGFyRW5jb2RpbmdBbGlhc2VzTmIgPj0geG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCkgewotCXhtbENoYXJFbmNvZGluZ0FsaWFzZXNNYXggKj0gMjsKLQl4bWxDaGFyRW5jb2RpbmdBbGlhc2VzID0gKHhtbENoYXJFbmNvZGluZ0FsaWFzUHRyKQotCSAgICAgIHhtbFJlYWxsb2MoeG1sQ2hhckVuY29kaW5nQWxpYXNlcywKLQkJICAgICAgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCAqIHNpemVvZih4bWxDaGFyRW5jb2RpbmdBbGlhcykpOworICAgIGlmICh4bWxDaGFyRW5jb2RpbmdBbGlhc2VzTmIgPj0geG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCkgeworICAgICAgICB4bWxDaGFyRW5jb2RpbmdBbGlhc1B0ciB0bXA7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0geG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCAqIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgIDIwOworCisgICAgICAgIHRtcCA9ICh4bWxDaGFyRW5jb2RpbmdBbGlhc1B0cikKKyAgICAgICAgICAgICAgeG1sUmVhbGxvYyh4bWxDaGFyRW5jb2RpbmdBbGlhc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NpemUgKiBzaXplb2YoeG1sQ2hhckVuY29kaW5nQWxpYXMpKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlcyA9IHRtcDsKKyAgICAgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc01heCA9IG5ld1NpemU7CiAgICAgfQorCiAgICAgLyoKICAgICAgKiBXYWxrIGRvd24gdGhlIGxpc3QgbG9va2luZyBmb3IgYSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcwogICAgICAqLwpAQCAtMTEwOCwxNiArMTA3NSwyNyBAQAogCSAgICAvKgogCSAgICAgKiBSZXBsYWNlIHRoZSBkZWZpbml0aW9uLgogCSAgICAgKi8KKwkgICAgbmFtZUNvcHkgPSB4bWxNZW1TdHJkdXAobmFtZSk7CisgICAgICAgICAgICBpZiAobmFtZUNvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwogCSAgICB4bWxGcmVlKChjaGFyICopIHhtbENoYXJFbmNvZGluZ0FsaWFzZXNbaV0ubmFtZSk7Ci0JICAgIHhtbENoYXJFbmNvZGluZ0FsaWFzZXNbaV0ubmFtZSA9IHhtbE1lbVN0cmR1cChuYW1lKTsKKwkgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc1tpXS5uYW1lID0gbmFtZUNvcHk7CiAJICAgIHJldHVybigwKTsKIAl9CiAgICAgfQogICAgIC8qCiAgICAgICogQWRkIHRoZSBkZWZpbml0aW9uCiAgICAgICovCi0gICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc1t4bWxDaGFyRW5jb2RpbmdBbGlhc2VzTmJdLm5hbWUgPSB4bWxNZW1TdHJkdXAobmFtZSk7Ci0gICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc1t4bWxDaGFyRW5jb2RpbmdBbGlhc2VzTmJdLmFsaWFzID0geG1sTWVtU3RyZHVwKHVwcGVyKTsKKyAgICBuYW1lQ29weSA9IHhtbE1lbVN0cmR1cChuYW1lKTsKKyAgICBpZiAobmFtZUNvcHkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBhbGlhc0NvcHkgPSB4bWxNZW1TdHJkdXAodXBwZXIpOworICAgIGlmIChhbGlhc0NvcHkgPT0gTlVMTCkgeworICAgICAgICB4bWxGcmVlKG5hbWVDb3B5KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc1t4bWxDaGFyRW5jb2RpbmdBbGlhc2VzTmJdLm5hbWUgPSBuYW1lQ29weTsKKyAgICB4bWxDaGFyRW5jb2RpbmdBbGlhc2VzW3htbENoYXJFbmNvZGluZ0FsaWFzZXNOYl0uYWxpYXMgPSBhbGlhc0NvcHk7CiAgICAgeG1sQ2hhckVuY29kaW5nQWxpYXNlc05iKys7CiAgICAgcmV0dXJuKDApOwogfQpAQCAtMTE4NCw3ICsxMTYyLDcgQEAKIAluYW1lID0gYWxpYXM7CiAKICAgICBmb3IgKGkgPSAwO2kgPCA0OTk7aSsrKSB7Ci0gICAgICAgIHVwcGVyW2ldID0gdG91cHBlcihuYW1lW2ldKTsKKyAgICAgICAgdXBwZXJbaV0gPSAoY2hhcikgdG91cHBlcigodW5zaWduZWQgY2hhcikgbmFtZVtpXSk7CiAJaWYgKHVwcGVyW2ldID09IDApIGJyZWFrOwogICAgIH0KICAgICB1cHBlcltpXSA9IDA7CkBAIC0xMjMzLDkgKzEyMTEsNiBAQAogICAgIGlmICghc3RyY21wKHVwcGVyLCAiU0hJRlRfSklTIikpIHJldHVybihYTUxfQ0hBUl9FTkNPRElOR19TSElGVF9KSVMpOwogICAgIGlmICghc3RyY21wKHVwcGVyLCAiRVVDLUpQIikpIHJldHVybihYTUxfQ0hBUl9FTkNPRElOR19FVUNfSlApOwogCi0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlVua25vd24gZW5jb2RpbmcgJXNcbiIsIG5hbWUpOwotI2VuZGlmCiAgICAgcmV0dXJuKFhNTF9DSEFSX0VOQ09ESU5HX0VSUk9SKTsKIH0KIApAQCAtMTMxMSwxOSArMTI4NiwxMDAgQEAKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmICFkZWZpbmVkKExJQlhNTF9JQ09OVl9FTkFCTEVEKSAmJiAhZGVmaW5lZChMSUJYTUxfSUNVX0VOQUJMRUQpICYmIFwKKyAgICBkZWZpbmVkKExJQlhNTF9JU084ODU5WF9FTkFCTEVEKQorCisjZGVmaW5lIERFQ0xBUkVfSVNPX0ZVTkNTKG4pIFwKKyAgICBzdGF0aWMgaW50IElTTzg4NTlfIyNuIyNUb1VURjgodW5zaWduZWQgY2hhciogb3V0LCBpbnQgKm91dGxlbiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbiwgaW50ICppbmxlbik7IFwKKyAgICBzdGF0aWMgaW50IFVURjhUb0lTTzg4NTlfIyNuKHVuc2lnbmVkIGNoYXIqIG91dCwgaW50ICpvdXRsZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluLCBpbnQgKmlubGVuKTsKKworLyoqIERPQ19ESVNBQkxFICovCitERUNMQVJFX0lTT19GVU5DUygyKQorREVDTEFSRV9JU09fRlVOQ1MoMykKK0RFQ0xBUkVfSVNPX0ZVTkNTKDQpCitERUNMQVJFX0lTT19GVU5DUyg1KQorREVDTEFSRV9JU09fRlVOQ1MoNikKK0RFQ0xBUkVfSVNPX0ZVTkNTKDcpCitERUNMQVJFX0lTT19GVU5DUyg4KQorREVDTEFSRV9JU09fRlVOQ1MoOSkKK0RFQ0xBUkVfSVNPX0ZVTkNTKDEwKQorREVDTEFSRV9JU09fRlVOQ1MoMTEpCitERUNMQVJFX0lTT19GVU5DUygxMykKK0RFQ0xBUkVfSVNPX0ZVTkNTKDE0KQorREVDTEFSRV9JU09fRlVOQ1MoMTUpCitERUNMQVJFX0lTT19GVU5DUygxNikKKy8qKiBET0NfRU5BQkxFICovCisKKyNlbmRpZiAvKiBMSUJYTUxfSVNPODg1OVhfRU5BQkxFRCAqLworCisjaWZkZWYgTElCWE1MX0lDT05WX0VOQUJMRUQKKyAgI2RlZmluZSBFTVBUWV9JQ09OViAsIChpY29udl90KSAwLCAoaWNvbnZfdCkgMAorI2Vsc2UKKyAgI2RlZmluZSBFTVBUWV9JQ09OVgorI2VuZGlmCisKKyNpZmRlZiBMSUJYTUxfSUNVX0VOQUJMRUQKKyAgI2RlZmluZSBFTVBUWV9VQ09OViAsIE5VTEwsIE5VTEwKKyNlbHNlCisgICNkZWZpbmUgRU1QVFlfVUNPTlYKKyNlbmRpZgorCisjZGVmaW5lIE1BS0VfSEFORExFUihuYW1lLCBpbiwgb3V0KSBcCisgICAgeyAoY2hhciAqKSBuYW1lLCBpbiwgb3V0IEVNUFRZX0lDT05WIEVNUFRZX1VDT05WIH0KKworc3RhdGljIGNvbnN0IHhtbENoYXJFbmNvZGluZ0hhbmRsZXIgZGVmYXVsdEhhbmRsZXJzW10gPSB7CisgICAgTUFLRV9IQU5ETEVSKCJVVEYtOCIsIFVURjhUb1VURjgsIFVURjhUb1VURjgpCisjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECisgICAgLE1BS0VfSEFORExFUigiVVRGLTE2TEUiLCBVVEYxNkxFVG9VVEY4LCBVVEY4VG9VVEYxNkxFKQorICAgICxNQUtFX0hBTkRMRVIoIlVURi0xNkJFIiwgVVRGMTZCRVRvVVRGOCwgVVRGOFRvVVRGMTZCRSkKKyAgICAsTUFLRV9IQU5ETEVSKCJVVEYtMTYiLCBVVEYxNkxFVG9VVEY4LCBVVEY4VG9VVEYxNikKKyAgICAsTUFLRV9IQU5ETEVSKCJJU08tODg1OS0xIiwgaXNvbGF0MVRvVVRGOCwgVVRGOFRvaXNvbGF0MSkKKyAgICAsTUFLRV9IQU5ETEVSKCJBU0NJSSIsIGFzY2lpVG9VVEY4LCBVVEY4VG9hc2NpaSkKKyAgICAsTUFLRV9IQU5ETEVSKCJVUy1BU0NJSSIsIGFzY2lpVG9VVEY4LCBVVEY4VG9hc2NpaSkKKyNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECisgICAgLE1BS0VfSEFORExFUigiSFRNTCIsIE5VTEwsIFVURjhUb0h0bWwpCisjZW5kaWYKKyNlbHNlCisgICAgLE1BS0VfSEFORExFUigiVVRGLTE2TEUiLCBVVEYxNkxFVG9VVEY4LCBOVUxMKQorICAgICxNQUtFX0hBTkRMRVIoIlVURi0xNkJFIiwgVVRGMTZCRVRvVVRGOCwgTlVMTCkKKyAgICAsTUFLRV9IQU5ETEVSKCJVVEYtMTYiLCBVVEYxNkxFVG9VVEY4LCBOVUxMKQorICAgICxNQUtFX0hBTkRMRVIoIklTTy04ODU5LTEiLCBpc29sYXQxVG9VVEY4LCBOVUxMKQorICAgICxNQUtFX0hBTkRMRVIoIkFTQ0lJIiwgYXNjaWlUb1VURjgsIE5VTEwpCisgICAgLE1BS0VfSEFORExFUigiVVMtQVNDSUkiLCBhc2NpaVRvVVRGOCwgTlVMTCkKKyNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KKworI2lmICFkZWZpbmVkKExJQlhNTF9JQ09OVl9FTkFCTEVEKSAmJiAhZGVmaW5lZChMSUJYTUxfSUNVX0VOQUJMRUQpICYmIFwKKyAgICBkZWZpbmVkKExJQlhNTF9JU084ODU5WF9FTkFCTEVEKQorICAgICxNQUtFX0hBTkRMRVIoIklTTy04ODU5LTIiLCBJU084ODU5XzJUb1VURjgsIFVURjhUb0lTTzg4NTlfMikKKyAgICAsTUFLRV9IQU5ETEVSKCJJU08tODg1OS0zIiwgSVNPODg1OV8zVG9VVEY4LCBVVEY4VG9JU084ODU5XzMpCisgICAgLE1BS0VfSEFORExFUigiSVNPLTg4NTktNCIsIElTTzg4NTlfNFRvVVRGOCwgVVRGOFRvSVNPODg1OV80KQorICAgICxNQUtFX0hBTkRMRVIoIklTTy04ODU5LTUiLCBJU084ODU5XzVUb1VURjgsIFVURjhUb0lTTzg4NTlfNSkKKyAgICAsTUFLRV9IQU5ETEVSKCJJU08tODg1OS02IiwgSVNPODg1OV82VG9VVEY4LCBVVEY4VG9JU084ODU5XzYpCisgICAgLE1BS0VfSEFORExFUigiSVNPLTg4NTktNyIsIElTTzg4NTlfN1RvVVRGOCwgVVRGOFRvSVNPODg1OV83KQorICAgICxNQUtFX0hBTkRMRVIoIklTTy04ODU5LTgiLCBJU084ODU5XzhUb1VURjgsIFVURjhUb0lTTzg4NTlfOCkKKyAgICAsTUFLRV9IQU5ETEVSKCJJU08tODg1OS05IiwgSVNPODg1OV85VG9VVEY4LCBVVEY4VG9JU084ODU5XzkpCisgICAgLE1BS0VfSEFORExFUigiSVNPLTg4NTktMTAiLCBJU084ODU5XzEwVG9VVEY4LCBVVEY4VG9JU084ODU5XzEwKQorICAgICxNQUtFX0hBTkRMRVIoIklTTy04ODU5LTExIiwgSVNPODg1OV8xMVRvVVRGOCwgVVRGOFRvSVNPODg1OV8xMSkKKyAgICAsTUFLRV9IQU5ETEVSKCJJU08tODg1OS0xMyIsIElTTzg4NTlfMTNUb1VURjgsIFVURjhUb0lTTzg4NTlfMTMpCisgICAgLE1BS0VfSEFORExFUigiSVNPLTg4NTktMTQiLCBJU084ODU5XzE0VG9VVEY4LCBVVEY4VG9JU084ODU5XzE0KQorICAgICxNQUtFX0hBTkRMRVIoIklTTy04ODU5LTE1IiwgSVNPODg1OV8xNVRvVVRGOCwgVVRGOFRvSVNPODg1OV8xNSkKKyAgICAsTUFLRV9IQU5ETEVSKCJJU08tODg1OS0xNiIsIElTTzg4NTlfMTZUb1VURjgsIFVURjhUb0lTTzg4NTlfMTYpCisjZW5kaWYKK307CisKKyNkZWZpbmUgTlVNX0RFRkFVTFRfSEFORExFUlMgXAorICAgIChzaXplb2YoZGVmYXVsdEhhbmRsZXJzKSAvIHNpemVvZihkZWZhdWx0SGFuZGxlcnNbMF0pKQorCitzdGF0aWMgY29uc3QgeG1sQ2hhckVuY29kaW5nSGFuZGxlciAqeG1sVVRGMTZMRUhhbmRsZXIgPSAmZGVmYXVsdEhhbmRsZXJzWzFdOworc3RhdGljIGNvbnN0IHhtbENoYXJFbmNvZGluZ0hhbmRsZXIgKnhtbFVURjE2QkVIYW5kbGVyID0gJmRlZmF1bHRIYW5kbGVyc1syXTsKIAogLyogdGhlIHNpemUgc2hvdWxkIGJlIGdyb3dhYmxlLCBidXQgaXQncyBub3QgYSBiaWcgZGVhbCAuLi4gKi8KICNkZWZpbmUgTUFYX0VOQ09ESU5HX0hBTkRMRVJTIDUwCiBzdGF0aWMgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciAqaGFuZGxlcnMgPSBOVUxMOwogc3RhdGljIGludCBuYkNoYXJFbmNvZGluZ0hhbmRsZXIgPSAwOwogCi0vKgotICogVGhlIGRlZmF1bHQgaXMgVVRGLTggZm9yIFhNTCwgdGhhdCdzIGFsc28gdGhlIGRlZmF1bHQgdXNlZCBmb3IgdGhlCi0gKiBwYXJzZXIgaW50ZXJuYWxzLCBzbyB0aGUgZGVmYXVsdCBlbmNvZGluZyBoYW5kbGVyIGlzIE5VTEwKLSAqLwotCi1zdGF0aWMgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciB4bWxEZWZhdWx0Q2hhckVuY29kaW5nSGFuZGxlciA9IE5VTEw7Ci0KIC8qKgogICogeG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlcjoKICAqIEBuYW1lOiAgdGhlIGVuY29kaW5nIG5hbWUsIGluIFVURi04IGZvcm1hdCAoQVNDSUkgYWN0dWFsbHkpCkBAIC0xMzU0LDIxICsxNDEwLDE2IEBACiAgICAgLyoKICAgICAgKiBLZWVwIG9ubHkgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSBlbmNvZGluZy4KICAgICAgKi8KLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIHhtbEVuY29kaW5nRXJyKFhNTF9JMThOX05PX05BTUUsCi0JCSAgICAgICAieG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlciA6IG5vIG5hbWUgIVxuIiwgTlVMTCk7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7Ci0gICAgfQogICAgIGZvciAoaSA9IDA7aSA8IDQ5OTtpKyspIHsKLSAgICAgICAgdXBwZXJbaV0gPSB0b3VwcGVyKG5hbWVbaV0pOworICAgICAgICB1cHBlcltpXSA9IChjaGFyKSB0b3VwcGVyKCh1bnNpZ25lZCBjaGFyKSBuYW1lW2ldKTsKIAlpZiAodXBwZXJbaV0gPT0gMCkgYnJlYWs7CiAgICAgfQogICAgIHVwcGVyW2ldID0gMDsKICAgICB1cCA9IHhtbE1lbVN0cmR1cCh1cHBlcik7Ci0gICAgaWYgKHVwID09IE5VTEwpIHsKLSAgICAgICAgeG1sRW5jb2RpbmdFcnJNZW1vcnkoInhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgOiBvdXQgb2YgbWVtb3J5ICFcbiIpOworICAgIGlmICh1cCA9PSBOVUxMKQogCXJldHVybihOVUxMKTsKLSAgICB9CiAKICAgICAvKgogICAgICAqIGFsbG9jYXRlIGFuZCBmaWxsLXVwIGFuIGhhbmRsZXIgYmxvY2suCkBAIC0xMzc3LDcgKzE0MjgsNiBAQAogICAgICAgICAgICAgICB4bWxNYWxsb2Moc2l6ZW9mKHhtbENoYXJFbmNvZGluZ0hhbmRsZXIpKTsKICAgICBpZiAoaGFuZGxlciA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEZyZWUodXApOwotICAgICAgICB4bWxFbmNvZGluZ0Vyck1lbW9yeSgieG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlciA6IG91dCBvZiBtZW1vcnkgIVxuIik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICBtZW1zZXQoaGFuZGxlciwgMCwgc2l6ZW9mKHhtbENoYXJFbmNvZGluZ0hhbmRsZXIpKTsKQEAgLTEzOTgsNzQgKzE0NDgsMzEgQEAKICAgICAgKiByZWdpc3RlcnMgYW5kIHJldHVybnMgdGhlIGhhbmRsZXIuCiAgICAgICovCiAgICAgeG1sUmVnaXN0ZXJDaGFyRW5jb2RpbmdIYW5kbGVyKGhhbmRsZXIpOwotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJSZWdpc3RlcmVkIGVuY29kaW5nIGhhbmRsZXIgZm9yICVzXG4iLCBuYW1lKTsKLSNlbmRpZgogICAgIHJldHVybihoYW5kbGVyKTsKIH0KIAogLyoqCiAgKiB4bWxJbml0Q2hhckVuY29kaW5nSGFuZGxlcnM6CiAgKgotICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvCi0gKiBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LgotICoKLSAqIEluaXRpYWxpemUgdGhlIGNoYXIgZW5jb2Rpbmcgc3VwcG9ydCwgaXQgcmVnaXN0ZXJzIHRoZSBkZWZhdWx0Ci0gKiBlbmNvZGluZyBzdXBwb3J0ZWQuCi0gKiBOT1RFOiB3aGlsZSBwdWJsaWMsIHRoaXMgZnVuY3Rpb24gdXN1YWxseSBkb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkCi0gKiAgICAgICBpbiBub3JtYWwgcHJvY2Vzc2luZy4KKyAqIERFUFJFQ0FURUQ6IEFsaWFzIGZvciB4bWxJbml0UGFyc2VyLgogICovCiB2b2lkCiB4bWxJbml0Q2hhckVuY29kaW5nSGFuZGxlcnModm9pZCkgeworICAgIHhtbEluaXRQYXJzZXIoKTsKK30KKworLyoqCisgKiB4bWxJbml0RW5jb2RpbmdJbnRlcm5hbDoKKyAqCisgKiBJbml0aWFsaXplIHRoZSBjaGFyIGVuY29kaW5nIHN1cHBvcnQuCisgKi8KK3ZvaWQKK3htbEluaXRFbmNvZGluZ0ludGVybmFsKHZvaWQpIHsKICAgICB1bnNpZ25lZCBzaG9ydCBpbnQgdHN0ID0gMHgxMjM0OwogICAgIHVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZ0c3Q7CiAKLSAgICBpZiAoaGFuZGxlcnMgIT0gTlVMTCkgcmV0dXJuOwotCi0gICAgaGFuZGxlcnMgPSAoeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciAqKQotICAgICAgICB4bWxNYWxsb2MoTUFYX0VOQ09ESU5HX0hBTkRMRVJTICogc2l6ZW9mKHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIpKTsKLQogICAgIGlmICgqcHRyID09IDB4MTIpIHhtbExpdHRsZUVuZGlhbiA9IDA7Ci0gICAgZWxzZSBpZiAoKnB0ciA9PSAweDM0KSB4bWxMaXR0bGVFbmRpYW4gPSAxOwotICAgIGVsc2UgewotICAgICAgICB4bWxFbmNvZGluZ0VycihYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCSAgICAgICAgICAgICAgICJPZGQgcHJvYmxlbSBhdCBlbmRpYW5uZXNzIGRldGVjdGlvblxuIiwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKGhhbmRsZXJzID09IE5VTEwpIHsKLSAgICAgICAgeG1sRW5jb2RpbmdFcnJNZW1vcnkoInhtbEluaXRDaGFyRW5jb2RpbmdIYW5kbGVycyA6IG91dCBvZiBtZW1vcnkgIVxuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJVVEYtOCIsIFVURjhUb1VURjgsIFVURjhUb1VURjgpOwotI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAotICAgIHhtbFVURjE2TEVIYW5kbGVyID0KLSAgICAgICAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJVVEYtMTZMRSIsIFVURjE2TEVUb1VURjgsIFVURjhUb1VURjE2TEUpOwotICAgIHhtbFVURjE2QkVIYW5kbGVyID0KLSAgICAgICAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJVVEYtMTZCRSIsIFVURjE2QkVUb1VURjgsIFVURjhUb1VURjE2QkUpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIoIlVURi0xNiIsIFVURjE2TEVUb1VURjgsIFVURjhUb1VURjE2KTsKLSAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJJU08tODg1OS0xIiwgaXNvbGF0MVRvVVRGOCwgVVRGOFRvaXNvbGF0MSk7Ci0gICAgeG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlcigiQVNDSUkiLCBhc2NpaVRvVVRGOCwgVVRGOFRvYXNjaWkpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIoIlVTLUFTQ0lJIiwgYXNjaWlUb1VURjgsIFVURjhUb2FzY2lpKTsKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi0gICAgeG1sTmV3Q2hhckVuY29kaW5nSGFuZGxlcigiSFRNTCIsIE5VTEwsIFVURjhUb0h0bWwpOwotI2VuZGlmCi0jZWxzZQotICAgIHhtbFVURjE2TEVIYW5kbGVyID0KLSAgICAgICAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJVVEYtMTZMRSIsIFVURjE2TEVUb1VURjgsIE5VTEwpOwotICAgIHhtbFVURjE2QkVIYW5kbGVyID0KLSAgICAgICAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJVVEYtMTZCRSIsIFVURjE2QkVUb1VURjgsIE5VTEwpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIoIlVURi0xNiIsIFVURjE2TEVUb1VURjgsIE5VTEwpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIoIklTTy04ODU5LTEiLCBpc29sYXQxVG9VVEY4LCBOVUxMKTsKLSAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJBU0NJSSIsIGFzY2lpVG9VVEY4LCBOVUxMKTsKLSAgICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKCJVUy1BU0NJSSIsIGFzY2lpVG9VVEY4LCBOVUxMKTsKLSNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KLSNpZiAhZGVmaW5lZChMSUJYTUxfSUNPTlZfRU5BQkxFRCkgJiYgIWRlZmluZWQoTElCWE1MX0lDVV9FTkFCTEVEKQotI2lmZGVmIExJQlhNTF9JU084ODU5WF9FTkFCTEVECi0gICAgeG1sUmVnaXN0ZXJDaGFyRW5jb2RpbmdIYW5kbGVyc0lTTzg4NTl4ICgpOwotI2VuZGlmCi0jZW5kaWYKLQorICAgIGVsc2UgeG1sTGl0dGxlRW5kaWFuID0gMTsKIH0KIAogLyoqCkBAIC0xNDk2LDcgKzE1MDMsNiBAQAogICAgIHhtbEZyZWUoaGFuZGxlcnMpOwogICAgIGhhbmRsZXJzID0gTlVMTDsKICAgICBuYkNoYXJFbmNvZGluZ0hhbmRsZXIgPSAwOwotICAgIHhtbERlZmF1bHRDaGFyRW5jb2RpbmdIYW5kbGVyID0gTlVMTDsKIH0KIAogLyoqCkBAIC0xNTA3LDE5ICsxNTEzLDE2IEBACiAgKi8KIHZvaWQKIHhtbFJlZ2lzdGVyQ2hhckVuY29kaW5nSGFuZGxlcih4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXIpIHsKLSAgICBpZiAoaGFuZGxlcnMgPT0gTlVMTCkgeG1sSW5pdENoYXJFbmNvZGluZ0hhbmRsZXJzKCk7Ci0gICAgaWYgKChoYW5kbGVyID09IE5VTEwpIHx8IChoYW5kbGVycyA9PSBOVUxMKSkgewotICAgICAgICB4bWxFbmNvZGluZ0VycihYTUxfSTE4Tl9OT19IQU5ETEVSLAotCQkieG1sUmVnaXN0ZXJDaGFyRW5jb2RpbmdIYW5kbGVyOiBOVUxMIGhhbmRsZXIgIVxuIiwgTlVMTCk7Ci0gICAgICAgIGdvdG8gZnJlZV9oYW5kbGVyOworICAgIGlmIChoYW5kbGVyID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFuZGxlcnMgPT0gTlVMTCkgeworICAgICAgICBoYW5kbGVycyA9IHhtbE1hbGxvYyhNQVhfRU5DT0RJTkdfSEFORExFUlMgKiBzaXplb2YoaGFuZGxlcnNbMF0pKTsKKyAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZyZWVfaGFuZGxlcjsKICAgICB9CiAKLSAgICBpZiAobmJDaGFyRW5jb2RpbmdIYW5kbGVyID49IE1BWF9FTkNPRElOR19IQU5ETEVSUykgewotICAgICAgICB4bWxFbmNvZGluZ0VycihYTUxfSTE4Tl9FWENFU1NfSEFORExFUiwKLQkieG1sUmVnaXN0ZXJDaGFyRW5jb2RpbmdIYW5kbGVyOiBUb28gbWFueSBoYW5kbGVyIHJlZ2lzdGVyZWQsIHNlZSAlc1xuIiwKLQkgICAgICAgICAgICAgICAiTUFYX0VOQ09ESU5HX0hBTkRMRVJTIik7CisgICAgaWYgKG5iQ2hhckVuY29kaW5nSGFuZGxlciA+PSBNQVhfRU5DT0RJTkdfSEFORExFUlMpCiAgICAgICAgIGdvdG8gZnJlZV9oYW5kbGVyOwotICAgIH0KICAgICBoYW5kbGVyc1tuYkNoYXJFbmNvZGluZ0hhbmRsZXIrK10gPSBoYW5kbGVyOwogICAgIHJldHVybjsKIApAQCAtMTU0NCw3ICsxNTQ3LDYgQEAKIHhtbEdldENoYXJFbmNvZGluZ0hhbmRsZXIoeG1sQ2hhckVuY29kaW5nIGVuYykgewogICAgIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgaGFuZGxlcjsKIAotICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKSB4bWxJbml0Q2hhckVuY29kaW5nSGFuZGxlcnMoKTsKICAgICBzd2l0Y2ggKGVuYykgewogICAgICAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX0VSUk9SOgogCSAgICByZXR1cm4oTlVMTCk7CkBAIC0xNTUzLDkgKzE1NTUsOSBAQAogICAgICAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX1VURjg6CiAJICAgIHJldHVybihOVUxMKTsKICAgICAgICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFOgotCSAgICByZXR1cm4oeG1sVVRGMTZMRUhhbmRsZXIpOworCSAgICByZXR1cm4oKHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIpIHhtbFVURjE2TEVIYW5kbGVyKTsKICAgICAgICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkJFOgotCSAgICByZXR1cm4oeG1sVVRGMTZCRUhhbmRsZXIpOworCSAgICByZXR1cm4oKHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIpIHhtbFVURjE2QkVIYW5kbGVyKTsKICAgICAgICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19FQkNESUM6CiAgICAgICAgICAgICBoYW5kbGVyID0geG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIoIkVCQ0RJQyIpOwogICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT0gTlVMTCkgcmV0dXJuKGhhbmRsZXIpOwpAQCAtMTY1OSwxMCArMTY2MSw2IEBACiAJICAgIGJyZWFrOwogICAgIH0KIAotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJObyBoYW5kbGVyIGZvdW5kIGZvciBlbmNvZGluZyAlZFxuIiwgZW5jKTsKLSNlbmRpZgogICAgIHJldHVybihOVUxMKTsKIH0KIApAQCAtMTY3MCw3ICsxNjY4LDggQEAKICAqIHhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyOgogICogQG5hbWU6ICBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjaGFyIGVuY29kaW5nLgogICoKLSAqIFNlYXJjaCBpbiB0aGUgcmVnaXN0ZXJlZCBzZXQgdGhlIGhhbmRsZXIgYWJsZSB0byByZWFkL3dyaXRlIHRoYXQgZW5jb2RpbmcuCisgKiBTZWFyY2ggaW4gdGhlIHJlZ2lzdGVyZWQgc2V0IHRoZSBoYW5kbGVyIGFibGUgdG8gcmVhZC93cml0ZSB0aGF0IGVuY29kaW5nCisgKiBvciBjcmVhdGUgYSBuZXcgb25lLgogICoKICAqIFJldHVybnMgdGhlIGhhbmRsZXIgb3IgTlVMTCBpZiBub3QgZm91bmQKICAqLwpAQCAtMTY5MCw5ICsxNjg5LDggQEAKICAgICBjaGFyIHVwcGVyWzEwMF07CiAgICAgaW50IGk7CiAKLSAgICBpZiAoaGFuZGxlcnMgPT0gTlVMTCkgeG1sSW5pdENoYXJFbmNvZGluZ0hhbmRsZXJzKCk7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkgcmV0dXJuKHhtbERlZmF1bHRDaGFyRW5jb2RpbmdIYW5kbGVyKTsKLSAgICBpZiAobmFtZVswXSA9PSAwKSByZXR1cm4oeG1sRGVmYXVsdENoYXJFbmNvZGluZ0hhbmRsZXIpOworICAgIGlmIChuYW1lID09IE5VTEwpIHJldHVybihOVUxMKTsKKyAgICBpZiAobmFtZVswXSA9PSAwKSByZXR1cm4oTlVMTCk7CiAKICAgICAvKgogICAgICAqIERvIHRoZSBhbGlhcyByZXNvbHV0aW9uCkBAIC0xNzA2LDE4ICsxNzA0LDE5IEBACiAgICAgICogQ2hlY2sgZmlyc3QgZm9yIGRpcmVjdGx5IHJlZ2lzdGVyZWQgZW5jb2RpbmcgbmFtZXMKICAgICAgKi8KICAgICBmb3IgKGkgPSAwO2kgPCA5OTtpKyspIHsKLSAgICAgICAgdXBwZXJbaV0gPSB0b3VwcGVyKG5hbWVbaV0pOworICAgICAgICB1cHBlcltpXSA9IChjaGFyKSB0b3VwcGVyKCh1bnNpZ25lZCBjaGFyKSBuYW1lW2ldKTsKIAlpZiAodXBwZXJbaV0gPT0gMCkgYnJlYWs7CiAgICAgfQogICAgIHVwcGVyW2ldID0gMDsKIAorICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBOVU1fREVGQVVMVF9IQU5ETEVSUzsgaSsrKSB7CisgICAgICAgIGlmIChzdHJjbXAodXBwZXIsIGRlZmF1bHRIYW5kbGVyc1tpXS5uYW1lKSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuKCh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyKSAmZGVmYXVsdEhhbmRsZXJzW2ldKTsKKyAgICB9CisKICAgICBpZiAoaGFuZGxlcnMgIT0gTlVMTCkgewogICAgICAgICBmb3IgKGkgPSAwO2kgPCBuYkNoYXJFbmNvZGluZ0hhbmRsZXI7IGkrKykgewogICAgICAgICAgICAgaWYgKCFzdHJjbXAodXBwZXIsIGhhbmRsZXJzW2ldLT5uYW1lKSkgewotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0gICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgcmVnaXN0ZXJlZCBoYW5kbGVyIGZvciBlbmNvZGluZyAlc1xuIiwgbmFtZSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4oaGFuZGxlcnNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzQzLDE4ICsxNzQyLDE4IEBACiAJICAgIH0KICAgICAgICAgICAgIG1lbXNldChlbmMsIDAsIHNpemVvZih4bWxDaGFyRW5jb2RpbmdIYW5kbGVyKSk7CiAJICAgIGVuYy0+bmFtZSA9IHhtbE1lbVN0cmR1cChuYW1lKTsKKyAgICAgICAgICAgIGlmIChlbmMtPm5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHhtbEZyZWUoZW5jKTsKKyAgICAgICAgICAgICAgICBpY29udl9jbG9zZShpY3ZfaW4pOworICAgICAgICAgICAgICAgIGljb252X2Nsb3NlKGljdl9vdXQpOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KIAkgICAgZW5jLT5pbnB1dCA9IE5VTEw7CiAJICAgIGVuYy0+b3V0cHV0ID0gTlVMTDsKIAkgICAgZW5jLT5pY29udl9pbiA9IGljdl9pbjsKIAkgICAgZW5jLT5pY29udl9vdXQgPSBpY3Zfb3V0OwotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJGb3VuZCBpY29udiBoYW5kbGVyIGZvciBlbmNvZGluZyAlc1xuIiwgbmFtZSk7Ci0jZW5kaWYKIAkgICAgcmV0dXJuIGVuYzsKICAgICB9IGVsc2UgaWYgKChpY3ZfaW4gIT0gKGljb252X3QpIC0xKSB8fCBpY3Zfb3V0ICE9IChpY29udl90KSAtMSkgewotCSAgICB4bWxFbmNvZGluZ0VycihYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCQkgICAgImljb252IDogcHJvYmxlbXMgd2l0aCBmaWx0ZXJzIGZvciAnJXMnXG4iLCBuYW1lKTsKIAkgICAgaWYgKGljdl9pbiAhPSAoaWNvbnZfdCkgLTEpCiAJCWljb252X2Nsb3NlKGljdl9pbik7CiAJICAgIGVsc2UKQEAgLTE3NzUsMjggKzE3NzQsMjMgQEAKIAkgICAgfQogICAgICAgICAgICAgbWVtc2V0KGVuY3UsIDAsIHNpemVvZih4bWxDaGFyRW5jb2RpbmdIYW5kbGVyKSk7CiAJICAgIGVuY3UtPm5hbWUgPSB4bWxNZW1TdHJkdXAobmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jdS0+bmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgeG1sRnJlZShlbmN1KTsKKyAgICAgICAgICAgICAgICBjbG9zZUljdUNvbnZlcnRlcih1Y3ZfaW4pOworICAgICAgICAgICAgICAgIGNsb3NlSWN1Q29udmVydGVyKHVjdl9vdXQpOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KIAkgICAgZW5jdS0+aW5wdXQgPSBOVUxMOwogCSAgICBlbmN1LT5vdXRwdXQgPSBOVUxMOwogCSAgICBlbmN1LT51Y29udl9pbiA9IHVjdl9pbjsKIAkgICAgZW5jdS0+dWNvbnZfb3V0ID0gdWN2X291dDsKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiRm91bmQgSUNVIGNvbnZlcnRlciBoYW5kbGVyIGZvciBlbmNvZGluZyAlc1xuIiwgbmFtZSk7Ci0jZW5kaWYKIAkgICAgcmV0dXJuIGVuY3U7CiAgICAgfSBlbHNlIGlmICh1Y3ZfaW4gIT0gTlVMTCB8fCB1Y3Zfb3V0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGNsb3NlSWN1Q29udmVydGVyKHVjdl9pbik7CiAgICAgICAgICAgICBjbG9zZUljdUNvbnZlcnRlcih1Y3Zfb3V0KTsKLQkgICAgeG1sRW5jb2RpbmdFcnIoWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkJICAgICJJQ1UgY29udmVydGVyIDogcHJvYmxlbXMgd2l0aCBmaWx0ZXJzIGZvciAnJXMnXG4iLCBuYW1lKTsKICAgICB9CiAjZW5kaWYgLyogTElCWE1MX0lDVV9FTkFCTEVEICovCiAKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiTm8gaGFuZGxlciBmb3VuZCBmb3IgZW5jb2RpbmcgJXNcbiIsIG5hbWUpOwotI2VuZGlmCi0KICAgICAvKgogICAgICAqIEZhbGxiYWNrIHVzaW5nIHRoZSBjYW5vbmljYWwgbmFtZXMKICAgICAgKi8KQEAgLTE4MjgsMTEgKzE4MjIsNyBAQAogICogQGluOiAgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGlucHV0IGJ5dGVzCiAgKiBAaW5sZW46ICB0aGUgbGVuZ3RoIG9mIEBpbgogICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvcgotICogICAgIC0xIGJ5IGxhY2sgb2Ygc3BhY2UsIG9yCi0gKiAgICAgLTIgaWYgdGhlIHRyYW5zY29kaW5nIGZhaWxzIChmb3IgKmluIGlzIG5vdCB2YWxpZCB1dGY4IHN0cmluZyBvcgotICogICAgICAgIHRoZSByZXN1bHQgb2YgdHJhbnNmb3JtYXRpb24gY2FuJ3QgZml0IGludG8gdGhlIGVuY29kaW5nIHdlIHdhbnQpLCBvcgotICogICAgIC0zIGlmIHRoZXJlIHRoZSBsYXN0IGJ5dGUgY2FuJ3QgZm9ybSBhIHNpbmdsZSBvdXRwdXQgY2hhci4KKyAqIFJldHVybnMgYW4gWE1MX0VOQ19FUlIgY29kZS4KICAqCiAgKiBUaGUgdmFsdWUgb2YgQGlubGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZAogICogICAgIGFzIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4KQEAgLTE4NDgsNyArMTgzOCw3IEBACiAKICAgICBpZiAoKG91dCA9PSBOVUxMKSB8fCAob3V0bGVuID09IE5VTEwpIHx8IChpbmxlbiA9PSBOVUxMKSB8fCAoaW4gPT0gTlVMTCkpIHsKICAgICAgICAgaWYgKG91dGxlbiAhPSBOVUxMKSAqb3V0bGVuID0gMDsKLSAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOVEVSTkFMKTsKICAgICB9CiAgICAgaWN2X2lubGVuID0gKmlubGVuOwogICAgIGljdl9vdXRsZW4gPSAqb3V0bGVuOwpAQCAtMTg1OCwyNyArMTg0OCwxNiBAQAogICAgIHJldCA9IGljb252KGNkLCAodm9pZCAqKSAmaWN2X2luLCAmaWN2X2lubGVuLCAmaWN2X291dCwgJmljdl9vdXRsZW4pOwogICAgICppbmxlbiAtPSBpY3ZfaW5sZW47CiAgICAgKm91dGxlbiAtPSBpY3Zfb3V0bGVuOwotICAgIGlmICgoaWN2X2lubGVuICE9IDApIHx8IChyZXQgPT0gKHNpemVfdCkgLTEpKSB7Ci0jaWZkZWYgRUlMU0VRCi0gICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpIHsKLSAgICAgICAgICAgIHJldHVybiAtMjsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYKLSNpZmRlZiBFMkJJRwotICAgICAgICBpZiAoZXJybm8gPT0gRTJCSUcpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYKLSNpZmRlZiBFSU5WQUwKLSAgICAgICAgaWYgKGVycm5vID09IEVJTlZBTCkgewotICAgICAgICAgICAgcmV0dXJuIC0zOwotICAgICAgICB9IGVsc2UKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLTM7Ci0gICAgICAgIH0KKyAgICBpZiAocmV0ID09IChzaXplX3QpIC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpCisgICAgICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOworICAgICAgICBpZiAoZXJybm8gPT0gRTJCSUcpCisgICAgICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfU1BBQ0UpOworICAgICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX1BBUlRJQUwpOworICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5URVJOQUwpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4oWE1MX0VOQ19FUlJfU1VDQ0VTUyk7CiB9CiAjZW5kaWYgLyogTElCWE1MX0lDT05WX0VOQUJMRUQgKi8KIApAQCAtMTg5NywxMyArMTg3Niw4IEBACiAgKiBAb3V0bGVuOiAgdGhlIGxlbmd0aCBvZiBAb3V0CiAgKiBAaW46ICBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgaW5wdXQgYnl0ZXMKICAqIEBpbmxlbjogIHRoZSBsZW5ndGggb2YgQGluCi0gKiBAZmx1c2g6IGlmIHRydWUsIGluZGljYXRlcyBlbmQgb2YgaW5wdXQKICAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzcywgb3IKLSAqICAgICAtMSBieSBsYWNrIG9mIHNwYWNlLCBvcgotICogICAgIC0yIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscyAoZm9yICppbiBpcyBub3QgdmFsaWQgdXRmOCBzdHJpbmcgb3IKLSAqICAgICAgICB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3IKLSAqICAgICAtMyBpZiB0aGVyZSB0aGUgbGFzdCBieXRlIGNhbid0IGZvcm0gYSBzaW5nbGUgb3V0cHV0IGNoYXIuCisgKiBSZXR1cm5zIGFuIFhNTF9FTkNfRVJSIGNvZGUuCiAgKgogICogVGhlIHZhbHVlIG9mIEBpbmxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgY29uc3VtZWQKICAqICAgICBhcyB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLCBlbHNlIHVucHJlZGljdGFibGUuCkBAIC0xOTExLDQyICsxODg1LDUzIEBACiAgKi8KIHN0YXRpYyBpbnQKIHhtbFVjb252V3JhcHBlcih1Y29udl90ICpjZCwgaW50IHRvVW5pY29kZSwgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKm91dGxlbiwKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50ICppbmxlbiwgaW50IGZsdXNoKSB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCAqaW5sZW4pIHsKICAgICBjb25zdCBjaGFyICp1Y3ZfaW4gPSAoY29uc3QgY2hhciAqKSBpbjsKICAgICBjaGFyICp1Y3Zfb3V0ID0gKGNoYXIgKikgb3V0OwogICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogCiAgICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKG91dGxlbiA9PSBOVUxMKSB8fCAoaW5sZW4gPT0gTlVMTCkgfHwgKGluID09IE5VTEwpKSB7CiAgICAgICAgIGlmIChvdXRsZW4gIT0gTlVMTCkgKm91dGxlbiA9IDA7Ci0gICAgICAgIHJldHVybigtMSk7CisgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAgICAgfQogCisgICAgLyoKKyAgICAgKiBOb3RlIHRoYXQgdGhlIElDVSBBUEkgaXMgc3RhdGVmdWwuIEl0IGNhbiBhbHdheXMgY29uc3VtZSBhIGNlcnRhaW4KKyAgICAgKiBhbW91bnQgb2YgaW5wdXQgZXZlbiBpZiB0aGUgb3V0cHV0IGJ1ZmZlciB3b3VsZCBvdmVyZmxvdy4gVGhlCisgICAgICogcmVtYWluaW5nIGlucHV0IG11c3QgYmUgcHJvY2Vzc2VkIGJ5IGNhbGxpbmcgdWNudl9jb252ZXJ0RXggd2l0aCBhCisgICAgICogcG9zc2libHkgZW1wdHkgaW5wdXQgYnVmZmVyLgorICAgICAqCisgICAgICogdWNudl9jb252ZXJ0RXggaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHJlc2V0IGFuZCBmbHVzaCBzZXQgdG8gMCwKKyAgICAgKiBzbyB3ZSBkb24ndCBtZXNzIHVwIHRoZSBzdGF0ZS4gVGhpcyBzaG91bGQgbmV2ZXIgZ2VuZXJhdGUKKyAgICAgKiBVX1RSVU5DQVRFRF9DSEFSX0ZPVU5EIGVycm9ycy4KKyAgICAgKgorICAgICAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IElDVSB4bWxDaGFyRW5jb2RpbmdIYW5kbGVycyBzaG91bGQgbmV2ZXIgYmUKKyAgICAgKiByZXVzZWQuIEl0IHdvdWxkIGJlIGEgbG90IG5pY2VyIGlmIHRoZXJlIHdhcyBhIHdheSB0byBlbXVsYXRlIHRoZQorICAgICAqIHN0YXRlbGVzcyBpY29udiBBUEkuCisgICAgICovCiAgICAgaWYgKHRvVW5pY29kZSkgewogICAgICAgICAvKiBlbmNvZGluZyA9PiBVVEYtMTYgPT4gVVRGLTggKi8KICAgICAgICAgdWNudl9jb252ZXJ0RXgoY2QtPnV0ZjgsIGNkLT51Y29udiwgJnVjdl9vdXQsIHVjdl9vdXQgKyAqb3V0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAmdWN2X2luLCB1Y3ZfaW4gKyAqaW5sZW4sIGNkLT5waXZvdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICZjZC0+cGl2b3Rfc291cmNlLCAmY2QtPnBpdm90X3RhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgY2QtPnBpdm90X2J1ZiArIElDVV9QSVZPVF9CVUZfU0laRSwgMCwgZmx1c2gsICZlcnIpOworICAgICAgICAgICAgICAgICAgICAgICBjZC0+cGl2b3RfYnVmICsgSUNVX1BJVk9UX0JVRl9TSVpFLCAwLCAwLCAmZXJyKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBVVEYtOCA9PiBVVEYtMTYgPT4gZW5jb2RpbmcgKi8KICAgICAgICAgdWNudl9jb252ZXJ0RXgoY2QtPnVjb252LCBjZC0+dXRmOCwgJnVjdl9vdXQsIHVjdl9vdXQgKyAqb3V0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAmdWN2X2luLCB1Y3ZfaW4gKyAqaW5sZW4sIGNkLT5waXZvdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICZjZC0+cGl2b3Rfc291cmNlLCAmY2QtPnBpdm90X3RhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgY2QtPnBpdm90X2J1ZiArIElDVV9QSVZPVF9CVUZfU0laRSwgMCwgZmx1c2gsICZlcnIpOworICAgICAgICAgICAgICAgICAgICAgICBjZC0+cGl2b3RfYnVmICsgSUNVX1BJVk9UX0JVRl9TSVpFLCAwLCAwLCAmZXJyKTsKICAgICB9CiAgICAgKmlubGVuID0gdWN2X2luIC0gKGNvbnN0IGNoYXIqKSBpbjsKICAgICAqb3V0bGVuID0gdWN2X291dCAtIChjaGFyICopIG91dDsKICAgICBpZiAoVV9TVUNDRVNTKGVycikpIHsKLSAgICAgICAgLyogcmVzZXQgcGl2b3QgYnVmIGlmIHRoaXMgaXMgdGhlIGxhc3QgY2FsbCBmb3IgaW5wdXQgKGZsdXNoPT1UUlVFKSAqLwotICAgICAgICBpZiAoZmx1c2gpCi0gICAgICAgICAgICBjZC0+cGl2b3Rfc291cmNlID0gY2QtPnBpdm90X3RhcmdldCA9IGNkLT5waXZvdF9idWY7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfU1VDQ0VTUyk7CiAgICAgfQogICAgIGlmIChlcnIgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX1NQQUNFKTsKICAgICBpZiAoZXJyID09IFVfSU5WQUxJRF9DSEFSX0ZPVU5EIHx8IGVyciA9PSBVX0lMTEVHQUxfQ0hBUl9GT1VORCkKLSAgICAgICAgcmV0dXJuIC0yOwotICAgIHJldHVybiAtMzsKKyAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKKyAgICByZXR1cm4oWE1MX0VOQ19FUlJfUEFSVElBTCk7CiB9CiAjZW5kaWYgLyogTElCWE1MX0lDVV9FTkFCTEVEICovCiAKQEAgLTE5NTcsMzQgKzE5NDIsNjkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgorICogeG1sRW5jQ29udmVydEVycm9yOgorICogQGNvZGU6ICBYTUxfRU5DX0VSUiBjb2RlCisgKgorICogQ29udmVydCBYTUxfRU5DX0VSUiB0byBsaWJ4bWwyIGVycm9yIGNvZGVzLgorICovCitzdGF0aWMgaW50Cit4bWxFbmNDb252ZXJ0RXJyb3IoaW50IGNvZGUpIHsKKyAgICBpbnQgcmV0OworCisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgIGNhc2UgWE1MX0VOQ19FUlJfU1VDQ0VTUzoKKyAgICAgICAgICAgIHJldCA9IFhNTF9FUlJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRU5DX0VSUl9JTlBVVDoKKyAgICAgICAgICAgIHJldCA9IFhNTF9FUlJfSU5WQUxJRF9FTkNPRElORzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FTkNfRVJSX01FTU9SWToKKyAgICAgICAgICAgIHJldCA9IFhNTF9FUlJfTk9fTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuKHJldCk7Cit9CisKKy8qKgogICogeG1sRW5jSW5wdXRDaHVuazoKICAqIEBoYW5kbGVyOiAgZW5jb2RpbmcgaGFuZGxlcgogICogQG91dDogIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBieXRlcyB0byBzdG9yZSB0aGUgcmVzdWx0CiAgKiBAb3V0bGVuOiAgdGhlIGxlbmd0aCBvZiBAb3V0CiAgKiBAaW46ICBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgaW5wdXQgYnl0ZXMKICAqIEBpbmxlbjogIHRoZSBsZW5ndGggb2YgQGluCi0gKiBAZmx1c2g6ICBmbHVzaCAoSUNVLXJlbGF0ZWQpCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3MsIG9yCi0gKiAgICAgLTEgYnkgbGFjayBvZiBzcGFjZSwgb3IKLSAqICAgICAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yCi0gKiAgICAgICAgdGhlIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBjYW4ndCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yCi0gKiAgICAgLTMgaWYgdGhlcmUgdGhlIGxhc3QgYnl0ZSBjYW4ndCBmb3JtIGEgc2luZ2xlIG91dHB1dCBjaGFyLgogICoKICAqIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkCiAgKiAgICAgYXMgdGhlIHJldHVybiB2YWx1ZSBpcyAwLCBlbHNlIHVucHJlZGljdGFibGUuCiAgKiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuCisgKgorICogUmV0dXJucyBhbiBYTUxfRU5DX0VSUiBjb2RlLgogICovCi1zdGF0aWMgaW50CitpbnQKIHhtbEVuY0lucHV0Q2h1bmsoeG1sQ2hhckVuY29kaW5nSGFuZGxlciAqaGFuZGxlciwgdW5zaWduZWQgY2hhciAqb3V0LAotICAgICAgICAgICAgICAgICBpbnQgKm91dGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCAqaW5sZW4sIGludCBmbHVzaCkgeworICAgICAgICAgICAgICAgICBpbnQgKm91dGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCAqaW5sZW4pIHsKICAgICBpbnQgcmV0OwotICAgICh2b2lkKWZsdXNoOwogCiAgICAgaWYgKGhhbmRsZXItPmlucHV0ICE9IE5VTEwpIHsKKyAgICAgICAgaW50IG9sZGlubGVuID0gKmlubGVuOworCiAgICAgICAgIHJldCA9IGhhbmRsZXItPmlucHV0KG91dCwgb3V0bGVuLCBpbiwgaW5sZW4pOwotICAgICAgICBpZiAocmV0ID4gMCkKLSAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgaWYgKHJldCA+PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIGJ1aWx0LWluIGNvbnZlcnRlcnMgZG9uJ3Qgc2lnbmFsIFhNTF9FTkNfRVJSX1NQQUNFLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKmlubGVuIDwgb2xkaW5sZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAoKm91dGxlbiA+IDApCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFhNTF9FTkNfRVJSX1NQQUNFOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gWE1MX0VOQ19FUlJfUEFSVElBTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0ID0gWE1MX0VOQ19FUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICNpZmRlZiBMSUJYTUxfSUNPTlZfRU5BQkxFRAogICAgIGVsc2UgaWYgKGhhbmRsZXItPmljb252X2luICE9IE5VTEwpIHsKQEAgLTE5OTMsMTYgKzIwMTMsMTkgQEAKICNlbmRpZiAvKiBMSUJYTUxfSUNPTlZfRU5BQkxFRCAqLwogI2lmZGVmIExJQlhNTF9JQ1VfRU5BQkxFRAogICAgIGVsc2UgaWYgKGhhbmRsZXItPnVjb252X2luICE9IE5VTEwpIHsKLSAgICAgICAgcmV0ID0geG1sVWNvbnZXcmFwcGVyKGhhbmRsZXItPnVjb252X2luLCAxLCBvdXQsIG91dGxlbiwgaW4sIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2gpOworICAgICAgICByZXQgPSB4bWxVY29udldyYXBwZXIoaGFuZGxlci0+dWNvbnZfaW4sIDEsIG91dCwgb3V0bGVuLCBpbiwgaW5sZW4pOwogICAgIH0KICNlbmRpZiAvKiBMSUJYTUxfSUNVX0VOQUJMRUQgKi8KICAgICBlbHNlIHsKICAgICAgICAgKm91dGxlbiA9IDA7CiAgICAgICAgICppbmxlbiA9IDA7Ci0gICAgICAgIHJldCA9IC0yOworICAgICAgICByZXQgPSBYTUxfRU5DX0VSUl9JTlRFUk5BTDsKICAgICB9CiAKKyAgICAvKiBJZ25vcmUgcGFydGlhbCBlcnJvcnMgd2hlbiByZWFkaW5nLiAqLworICAgIGlmIChyZXQgPT0gWE1MX0VOQ19FUlJfUEFSVElBTCkKKyAgICAgICAgcmV0ID0gWE1MX0VOQ19FUlJfU1VDQ0VTUzsKKwogICAgIHJldHVybihyZXQpOwogfQogCkBAIC0yMDE0LDEyICsyMDM3LDcgQEAKICAqIEBpbjogIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBpbnB1dCBieXRlcwogICogQGlubGVuOiAgdGhlIGxlbmd0aCBvZiBAaW4KICAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzcywgb3IKLSAqICAgICAtMSBieSBsYWNrIG9mIHNwYWNlLCBvcgotICogICAgIC0yIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscyAoZm9yICppbiBpcyBub3QgdmFsaWQgdXRmOCBzdHJpbmcgb3IKLSAqICAgICAgICB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3IKLSAqICAgICAtMyBpZiB0aGVyZSB0aGUgbGFzdCBieXRlIGNhbid0IGZvcm0gYSBzaW5nbGUgb3V0cHV0IGNoYXIuCi0gKiAgICAgLTQgaWYgbm8gb3V0cHV0IGZ1bmN0aW9uIHdhcyBmb3VuZC4KKyAqIFJldHVybnMgYW4gWE1MX0VOQ19FUlIgY29kZS4KICAqCiAgKiBUaGUgdmFsdWUgb2YgQGlubGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZAogICogICAgIGFzIHRoZSByZXR1cm4gdmFsdWUgaXMgMCwgZWxzZSB1bnByZWRpY3RhYmxlLgpAQCAtMjAzMSw5ICsyMDQ5LDIyIEBACiAgICAgaW50IHJldDsKIAogICAgIGlmIChoYW5kbGVyLT5vdXRwdXQgIT0gTlVMTCkgeworICAgICAgICBpbnQgb2xkaW5sZW4gPSAqaW5sZW47CisKICAgICAgICAgcmV0ID0gaGFuZGxlci0+b3V0cHV0KG91dCwgb3V0bGVuLCBpbiwgaW5sZW4pOwotICAgICAgICBpZiAocmV0ID4gMCkKLSAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgaWYgKHJldCA+PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIGJ1aWx0LWluIGNvbnZlcnRlcnMgZG9uJ3Qgc2lnbmFsIFhNTF9FTkNfRVJSX1NQQUNFLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKmlubGVuIDwgb2xkaW5sZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAoKm91dGxlbiA+IDApCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFhNTF9FTkNfRVJSX1NQQUNFOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gWE1MX0VOQ19FUlJfUEFSVElBTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0ID0gWE1MX0VOQ19FUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICNpZmRlZiBMSUJYTUxfSUNPTlZfRU5BQkxFRAogICAgIGVsc2UgaWYgKGhhbmRsZXItPmljb252X291dCAhPSBOVUxMKSB7CkBAIC0yMDQyLDMyOCArMjA3MywxMDkgQEAKICNlbmRpZiAvKiBMSUJYTUxfSUNPTlZfRU5BQkxFRCAqLwogI2lmZGVmIExJQlhNTF9JQ1VfRU5BQkxFRAogICAgIGVsc2UgaWYgKGhhbmRsZXItPnVjb252X291dCAhPSBOVUxMKSB7Ci0gICAgICAgIHJldCA9IHhtbFVjb252V3JhcHBlcihoYW5kbGVyLT51Y29udl9vdXQsIDAsIG91dCwgb3V0bGVuLCBpbiwgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKyAgICAgICAgcmV0ID0geG1sVWNvbnZXcmFwcGVyKGhhbmRsZXItPnVjb252X291dCwgMCwgb3V0LCBvdXRsZW4sIGluLCBpbmxlbik7CiAgICAgfQogI2VuZGlmIC8qIExJQlhNTF9JQ1VfRU5BQkxFRCAqLwogICAgIGVsc2UgewogICAgICAgICAqb3V0bGVuID0gMDsKICAgICAgICAgKmlubGVuID0gMDsKLSAgICAgICAgcmV0ID0gLTQ7CisgICAgICAgIHJldCA9IFhNTF9FTkNfRVJSX0lOVEVSTkFMOwogICAgIH0KIAorICAgIC8qIFdlIHNob3VsZG4ndCBnZW5lcmF0ZSBwYXJ0aWFsIHNlcXVlbmNlcyB3aGVuIHdyaXRpbmcuICovCisgICAgaWYgKHJldCA9PSBYTUxfRU5DX0VSUl9QQVJUSUFMKQorICAgICAgICByZXQgPSBYTUxfRU5DX0VSUl9JTlRFUk5BTDsKKwogICAgIHJldHVybihyZXQpOwogfQogCiAvKioKLSAqIHhtbENoYXJFbmNGaXJzdExpbmVJbnQ6Ci0gKiBAaGFuZGxlcjoJY2hhciBlbmNvZGluZyB0cmFuc2Zvcm1hdGlvbiBkYXRhIHN0cnVjdHVyZQotICogQG91dDogIGFuIHhtbEJ1ZmZlciBmb3IgdGhlIG91dHB1dC4KLSAqIEBpbjogIGFuIHhtbEJ1ZmZlciBmb3IgdGhlIGlucHV0Ci0gKiBAbGVuOiAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnZlcnQgZm9yIHRoZSBmaXJzdCBsaW5lLCBvciAtMQotICoKLSAqIEZyb250LWVuZCBmb3IgdGhlIGVuY29kaW5nIGhhbmRsZXIgaW5wdXQgZnVuY3Rpb24sIGJ1dCBoYW5kbGUgb25seQotICogdGhlIHZlcnkgZmlyc3QgbGluZSwgaS5lLiBsaW1pdCBpdHNlbGYgdG8gNDUgY2hhcnMuCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbiBpZiBzdWNjZXNzLCBvcgotICogICAgIC0xIGdlbmVyYWwgZXJyb3IKLSAqICAgICAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yCi0gKiAgICAgICAgdGhlIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBjYW4ndCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yCi0gKi8KLWludAoteG1sQ2hhckVuY0ZpcnN0TGluZUludCh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyICpoYW5kbGVyLCB4bWxCdWZmZXJQdHIgb3V0LAotICAgICAgICAgICAgICAgICAgICAgICB4bWxCdWZmZXJQdHIgaW4sIGludCBsZW4pIHsKLSAgICBpbnQgcmV0OwotICAgIGludCB3cml0dGVuOwotICAgIGludCB0b2NvbnY7Ci0KLSAgICBpZiAoaGFuZGxlciA9PSBOVUxMKSByZXR1cm4oLTEpOwotICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoaW4gPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIC8qIGNhbGN1bGF0ZSBzcGFjZSBhdmFpbGFibGUgKi8KLSAgICB3cml0dGVuID0gb3V0LT5zaXplIC0gb3V0LT51c2UgLSAxOyAvKiBjb3VudCAnXDAnICovCi0gICAgdG9jb252ID0gaW4tPnVzZTsKLSAgICAvKgotICAgICAqIGVjaG8gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVDUzQiPz4nIHwgd2MgLWMgPT4gMzgKLSAgICAgKiA0NSBjaGFycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byByZWFjaCB0aGUgZW5kIG9mIHRoZSBlbmNvZGluZwotICAgICAqIGRlY2xhcmF0aW9uIHdpdGhvdXQgZ29pbmcgdG9vIGZhciBpbnNpZGUgdGhlIGRvY3VtZW50IGNvbnRlbnQuCi0gICAgICogb24gVVRGLTE2IHRoaXMgbWVhbnMgOTBieXRlcywgb24gVUNTNCB0aGlzIG1lYW5zIDE4MAotICAgICAqIFRoZSBhY3R1YWwgdmFsdWUgZGVwZW5kaW5nIG9uIGd1ZXNzZWQgZW5jb2RpbmcgaXMgcGFzc2VkIGFzIEBsZW4KLSAgICAgKiBpZiBwcm92aWRlZAotICAgICAqLwotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICBpZiAodG9jb252ID4gbGVuKQotICAgICAgICAgICAgdG9jb252ID0gbGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0b2NvbnYgPiAxODApCi0gICAgICAgICAgICB0b2NvbnYgPSAxODA7Ci0gICAgfQotICAgIGlmICh0b2NvbnYgKiAyID49IHdyaXR0ZW4pIHsKLSAgICAgICAgeG1sQnVmZmVyR3JvdyhvdXQsIHRvY29udiAqIDIpOwotCXdyaXR0ZW4gPSBvdXQtPnNpemUgLSBvdXQtPnVzZSAtIDE7Ci0gICAgfQotCi0gICAgcmV0ID0geG1sRW5jSW5wdXRDaHVuayhoYW5kbGVyLCAmb3V0LT5jb250ZW50W291dC0+dXNlXSwgJndyaXR0ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+Y29udGVudCwgJnRvY29udiwgMCk7Ci0gICAgeG1sQnVmZmVyU2hyaW5rKGluLCB0b2NvbnYpOwotICAgIG91dC0+dXNlICs9IHdyaXR0ZW47Ci0gICAgb3V0LT5jb250ZW50W291dC0+dXNlXSA9IDA7Ci0gICAgaWYgKHJldCA9PSAtMSkgcmV0ID0gLTM7Ci0KLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgIHN3aXRjaCAocmV0KSB7Ci0gICAgICAgIGNhc2UgMDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiY29udmVydGVkICVkIGJ5dGVzIHRvICVkIGJ5dGVzIG9mIGlucHV0XG4iLAotCSAgICAgICAgICAgIHRvY29udiwgd3JpdHRlbik7Ci0JICAgIGJyZWFrOwotICAgICAgICBjYXNlIC0xOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwiY29udmVydGVkICVkIGJ5dGVzIHRvICVkIGJ5dGVzIG9mIGlucHV0LCAlZCBsZWZ0XG4iLAotCSAgICAgICAgICAgIHRvY29udiwgd3JpdHRlbiwgaW4tPnVzZSk7Ci0JICAgIGJyZWFrOwotICAgICAgICBjYXNlIC0yOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJpbnB1dCBjb252ZXJzaW9uIGZhaWxlZCBkdWUgdG8gaW5wdXQgZXJyb3JcbiIpOwotCSAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMzoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBpbnB1dCwgJWQgbGVmdFxuIiwKLQkgICAgICAgICAgICB0b2NvbnYsIHdyaXR0ZW4sIGluLT51c2UpOwotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwiVW5rbm93biBpbnB1dCBjb252ZXJzaW9uIGZhaWxlZCAlZFxuIiwgcmV0KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUdfRU5DT0RJTkcgKi8KLSAgICAvKgotICAgICAqIElnbm9yZSB3aGVuIGlucHV0IGJ1ZmZlciBpcyBub3Qgb24gYSBib3VuZGFyeQotICAgICAqLwotICAgIGlmIChyZXQgPT0gLTMpIHJldCA9IDA7Ci0gICAgaWYgKHJldCA9PSAtMSkgcmV0ID0gMDsKLSAgICByZXR1cm4od3JpdHRlbiA/IHdyaXR0ZW4gOiByZXQpOwotfQotCi0vKioKICAqIHhtbENoYXJFbmNGaXJzdExpbmU6Ci0gKiBAaGFuZGxlcjoJY2hhciBlbmNvZGluZyB0cmFuc2Zvcm1hdGlvbiBkYXRhIHN0cnVjdHVyZQorICogQGhhbmRsZXI6ICAgY2hhciBlbmNvZGluZyB0cmFuc2Zvcm1hdGlvbiBkYXRhIHN0cnVjdHVyZQogICogQG91dDogIGFuIHhtbEJ1ZmZlciBmb3IgdGhlIG91dHB1dC4KICAqIEBpbjogIGFuIHhtbEJ1ZmZlciBmb3IgdGhlIGlucHV0CiAgKgotICogRnJvbnQtZW5kIGZvciB0aGUgZW5jb2RpbmcgaGFuZGxlciBpbnB1dCBmdW5jdGlvbiwgYnV0IGhhbmRsZSBvbmx5Ci0gKiB0aGUgdmVyeSBmaXJzdCBsaW5lLCBpLmUuIGxpbWl0IGl0c2VsZiB0byA0NSBjaGFycy4KKyAqIERFUEVSRUNBVEVEOiBEb24ndCB1c2UuCiAgKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbiBpZiBzdWNjZXNzLCBvcgotICogICAgIC0xIGdlbmVyYWwgZXJyb3IKLSAqICAgICAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yCi0gKiAgICAgICAgdGhlIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBjYW4ndCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLgogICovCiBpbnQKIHhtbENoYXJFbmNGaXJzdExpbmUoeG1sQ2hhckVuY29kaW5nSGFuZGxlciAqaGFuZGxlciwgeG1sQnVmZmVyUHRyIG91dCwKLSAgICAgICAgICAgICAgICAgeG1sQnVmZmVyUHRyIGluKSB7Ci0gICAgcmV0dXJuKHhtbENoYXJFbmNGaXJzdExpbmVJbnQoaGFuZGxlciwgb3V0LCBpbiwgLTEpKTsKLX0KLQotLyoqCi0gKiB4bWxDaGFyRW5jRmlyc3RMaW5lSW5wdXQ6Ci0gKiBAaW5wdXQ6IGEgcGFyc2VyIGlucHV0IGJ1ZmZlcgotICogQGxlbjogIG51bWJlciBvZiBieXRlcyB0byBjb252ZXJ0IGZvciB0aGUgZmlyc3QgbGluZSwgb3IgLTEKLSAqCi0gKiBGcm9udC1lbmQgZm9yIHRoZSBlbmNvZGluZyBoYW5kbGVyIGlucHV0IGZ1bmN0aW9uLCBidXQgaGFuZGxlIG9ubHkKLSAqIHRoZSB2ZXJ5IGZpcnN0IGxpbmUuIFBvaW50IGlzIHRoYXQgdGhpcyBpcyBiYXNlZCBvbiBhdXRvZGV0ZWN0aW9uCi0gKiBvZiB0aGUgZW5jb2RpbmcgYW5kIG9uY2UgdGhhdCBmaXJzdCBsaW5lIGlzIGNvbnZlcnRlZCB3ZSBtYXkgZmluZAotICogb3V0IHRoYXQgYSBkaWZmZXJlbnQgZGVjb2RlciBpcyBuZWVkZWQgdG8gcHJvY2VzcyB0aGUgaW5wdXQuCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbiBpZiBzdWNjZXNzLCBvcgotICogICAgIC0xIGdlbmVyYWwgZXJyb3IKLSAqICAgICAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yCi0gKiAgICAgICAgdGhlIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBjYW4ndCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yCi0gKi8KLWludAoteG1sQ2hhckVuY0ZpcnN0TGluZUlucHV0KHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LCBpbnQgbGVuKQotewotICAgIGludCByZXQ7Ci0gICAgc2l6ZV90IHdyaXR0ZW47Ci0gICAgc2l6ZV90IHRvY29udjsKLSAgICBpbnQgY19pbjsKLSAgICBpbnQgY19vdXQ7Ci0gICAgeG1sQnVmUHRyIGluOwotICAgIHhtbEJ1ZlB0ciBvdXQ7Ci0KLSAgICBpZiAoKGlucHV0ID09IE5VTEwpIHx8IChpbnB1dC0+ZW5jb2RlciA9PSBOVUxMKSB8fAotICAgICAgICAoaW5wdXQtPmJ1ZmZlciA9PSBOVUxMKSB8fCAoaW5wdXQtPnJhdyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgb3V0ID0gaW5wdXQtPmJ1ZmZlcjsKLSAgICBpbiA9IGlucHV0LT5yYXc7Ci0KLSAgICB0b2NvbnYgPSB4bWxCdWZVc2UoaW4pOwotICAgIGlmICh0b2NvbnYgPT0gMCkKLSAgICAgICAgcmV0dXJuICgwKTsKLSAgICB3cml0dGVuID0geG1sQnVmQXZhaWwob3V0KTsKLSAgICAvKgotICAgICAqIGVjaG8gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVDUzQiPz4nIHwgd2MgLWMgPT4gMzgKLSAgICAgKiA0NSBjaGFycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byByZWFjaCB0aGUgZW5kIG9mIHRoZSBlbmNvZGluZwotICAgICAqIGRlY2xhcmF0aW9uIHdpdGhvdXQgZ29pbmcgdG9vIGZhciBpbnNpZGUgdGhlIGRvY3VtZW50IGNvbnRlbnQuCi0gICAgICogb24gVVRGLTE2IHRoaXMgbWVhbnMgOTBieXRlcywgb24gVUNTNCB0aGlzIG1lYW5zIDE4MAotICAgICAqIFRoZSBhY3R1YWwgdmFsdWUgZGVwZW5kaW5nIG9uIGd1ZXNzZWQgZW5jb2RpbmcgaXMgcGFzc2VkIGFzIEBsZW4KLSAgICAgKiBpZiBwcm92aWRlZAotICAgICAqLwotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICBpZiAodG9jb252ID4gKHVuc2lnbmVkIGludCkgbGVuKQotICAgICAgICAgICAgdG9jb252ID0gbGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0b2NvbnYgPiAxODApCi0gICAgICAgICAgICB0b2NvbnYgPSAxODA7Ci0gICAgfQotICAgIGlmICh0b2NvbnYgKiAyID49IHdyaXR0ZW4pIHsKLSAgICAgICAgeG1sQnVmR3JvdyhvdXQsIHRvY29udiAqIDIpOwotICAgICAgICB3cml0dGVuID0geG1sQnVmQXZhaWwob3V0KTsKLSAgICB9Ci0gICAgaWYgKHdyaXR0ZW4gPiAzNjApCi0gICAgICAgIHdyaXR0ZW4gPSAzNjA7Ci0KLSAgICBjX2luID0gdG9jb252OwotICAgIGNfb3V0ID0gd3JpdHRlbjsKLSAgICByZXQgPSB4bWxFbmNJbnB1dENodW5rKGlucHV0LT5lbmNvZGVyLCB4bWxCdWZFbmQob3V0KSwgJmNfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQnVmQ29udGVudChpbiksICZjX2luLCAwKTsKLSAgICB4bWxCdWZTaHJpbmsoaW4sIGNfaW4pOwotICAgIHhtbEJ1ZkFkZExlbihvdXQsIGNfb3V0KTsKLSAgICBpZiAocmV0ID09IC0xKQotICAgICAgICByZXQgPSAtMzsKLQotICAgIHN3aXRjaCAocmV0KSB7Ci0gICAgICAgIGNhc2UgMDoKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBpbnB1dFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2luLCBjX291dCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIC0xOgotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVydGVkICVkIGJ5dGVzIHRvICVkIGJ5dGVzIG9mIGlucHV0LCAlZCBsZWZ0XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfaW4sIGNfb3V0LCAoaW50KXhtbEJ1ZlVzZShpbikpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMzoKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29udmVydGVkICVkIGJ5dGVzIHRvICVkIGJ5dGVzIG9mIGlucHV0LCAlZCBsZWZ0XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfaW4sIGNfb3V0LCAoaW50KXhtbEJ1ZlVzZShpbikpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMjogewotICAgICAgICAgICAgY2hhciBidWZbNTBdOwotICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqY29udGVudCA9IHhtbEJ1ZkNvbnRlbnQoaW4pOwotCi0JICAgIHNucHJpbnRmKCZidWZbMF0sIDQ5LCAiMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYIiwKLQkJICAgICBjb250ZW50WzBdLCBjb250ZW50WzFdLAotCQkgICAgIGNvbnRlbnRbMl0sIGNvbnRlbnRbM10pOwotCSAgICBidWZbNDldID0gMDsKLQkgICAgeG1sRW5jb2RpbmdFcnIoWE1MX0kxOE5fQ09OVl9GQUlMRUQsCi0JCSAgICAiaW5wdXQgY29udmVyc2lvbiBmYWlsZWQgZHVlIHRvIGlucHV0IGVycm9yLCBieXRlcyAlc1xuIiwKLQkJICAgICAgICAgICBidWYpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qCi0gICAgICogSWdub3JlIHdoZW4gaW5wdXQgYnVmZmVyIGlzIG5vdCBvbiBhIGJvdW5kYXJ5Ci0gICAgICovCi0gICAgaWYgKHJldCA9PSAtMykgcmV0ID0gMDsKLSAgICBpZiAocmV0ID09IC0xKSByZXQgPSAwOwotICAgIHJldHVybihjX291dCA/IGNfb3V0IDogcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgeG1sQnVmZmVyUHRyIGluKSB7CisgICAgcmV0dXJuKHhtbENoYXJFbmNJbkZ1bmMoaGFuZGxlciwgb3V0LCBpbikpOwogfQogCiAvKioKICAqIHhtbENoYXJFbmNJbnB1dDoKICAqIEBpbnB1dDogYSBwYXJzZXIgaW5wdXQgYnVmZmVyCi0gKiBAZmx1c2g6IHRyeSB0byBmbHVzaCBhbGwgdGhlIHJhdyBidWZmZXIKICAqCiAgKiBHZW5lcmljIGZyb250LWVuZCBmb3IgdGhlIGVuY29kaW5nIGhhbmRsZXIgb24gcGFyc2VyIGlucHV0CiAgKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbiBpZiBzdWNjZXNzLCBvcgotICogICAgIC0xIGdlbmVyYWwgZXJyb3IKLSAqICAgICAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yCi0gKiAgICAgICAgdGhlIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBjYW4ndCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLgogICovCiBpbnQKLXhtbENoYXJFbmNJbnB1dCh4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBpbnB1dCwgaW50IGZsdXNoKQoreG1sQ2hhckVuY0lucHV0KHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0KQogewogICAgIGludCByZXQ7Ci0gICAgc2l6ZV90IHdyaXR0ZW47CisgICAgc2l6ZV90IGF2YWlsOwogICAgIHNpemVfdCB0b2NvbnY7CiAgICAgaW50IGNfaW47CiAgICAgaW50IGNfb3V0OwogICAgIHhtbEJ1ZlB0ciBpbjsKICAgICB4bWxCdWZQdHIgb3V0OworICAgIGNvbnN0IHhtbENoYXIgKmluRGF0YTsKKyAgICBzaXplX3QgaW5Ub3RhbCA9IDA7CiAKICAgICBpZiAoKGlucHV0ID09IE5VTEwpIHx8IChpbnB1dC0+ZW5jb2RlciA9PSBOVUxMKSB8fAogICAgICAgICAoaW5wdXQtPmJ1ZmZlciA9PSBOVUxMKSB8fCAoaW5wdXQtPnJhdyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAgICAgb3V0ID0gaW5wdXQtPmJ1ZmZlcjsKICAgICBpbiA9IGlucHV0LT5yYXc7CiAKICAgICB0b2NvbnYgPSB4bWxCdWZVc2UoaW4pOwogICAgIGlmICh0b2NvbnYgPT0gMCkKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICBpZiAoKHRvY29udiA+IDY0ICogMTAyNCkgJiYgKGZsdXNoID09IDApKQotICAgICAgICB0b2NvbnYgPSA2NCAqIDEwMjQ7Ci0gICAgd3JpdHRlbiA9IHhtbEJ1ZkF2YWlsKG91dCk7Ci0gICAgaWYgKHRvY29udiAqIDIgPj0gd3JpdHRlbikgewotICAgICAgICB4bWxCdWZHcm93KG91dCwgdG9jb252ICogMik7Ci0gICAgICAgIHdyaXR0ZW4gPSB4bWxCdWZBdmFpbChvdXQpOwotICAgIH0KLSAgICBpZiAoKHdyaXR0ZW4gPiAxMjggKiAxMDI0KSAmJiAoZmx1c2ggPT0gMCkpCi0gICAgICAgIHdyaXR0ZW4gPSAxMjggKiAxMDI0OworICAgIGluRGF0YSA9IHhtbEJ1ZkNvbnRlbnQoaW4pOworICAgIGluVG90YWwgPSAwOwogCi0gICAgY19pbiA9IHRvY29udjsKLSAgICBjX291dCA9IHdyaXR0ZW47Ci0gICAgcmV0ID0geG1sRW5jSW5wdXRDaHVuayhpbnB1dC0+ZW5jb2RlciwgeG1sQnVmRW5kKG91dCksICZjX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEJ1ZkNvbnRlbnQoaW4pLCAmY19pbiwgZmx1c2gpOwotICAgIHhtbEJ1ZlNocmluayhpbiwgY19pbik7Ci0gICAgeG1sQnVmQWRkTGVuKG91dCwgY19vdXQpOwotICAgIGlmIChyZXQgPT0gLTEpCi0gICAgICAgIHJldCA9IC0zOworICAgIGRvIHsKKyAgICAgICAgY19pbiA9IHRvY29udiA+IElOVF9NQVggLyAyID8gSU5UX01BWCAvIDIgOiB0b2NvbnY7CiAKLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIDA6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb252ZXJ0ZWQgJWQgYnl0ZXMgdG8gJWQgYnl0ZXMgb2YgaW5wdXRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY19pbiwgY19vdXQpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMToKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBpbnB1dCwgJWQgbGVmdFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2luLCBjX291dCwgKGludCl4bWxCdWZVc2UoaW4pKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTM6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBpbnB1dCwgJWQgbGVmdFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2luLCBjX291dCwgKGludCl4bWxCdWZVc2UoaW4pKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTI6IHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzUwXTsKLSAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQgPSB4bWxCdWZDb250ZW50KGluKTsKLQotCSAgICBzbnByaW50ZigmYnVmWzBdLCA0OSwgIjB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWCIsCi0JCSAgICAgY29udGVudFswXSwgY29udGVudFsxXSwKLQkJICAgICBjb250ZW50WzJdLCBjb250ZW50WzNdKTsKLQkgICAgYnVmWzQ5XSA9IDA7Ci0JICAgIHhtbEVuY29kaW5nRXJyKFhNTF9JMThOX0NPTlZfRkFJTEVELAotCQkgICAgImlucHV0IGNvbnZlcnNpb24gZmFpbGVkIGR1ZSB0byBpbnB1dCBlcnJvciwgYnl0ZXMgJXNcbiIsCi0JCSAgICAgICAgICAgYnVmKTsKKyAgICAgICAgYXZhaWwgPSB4bWxCdWZBdmFpbChvdXQpOworICAgICAgICBpZiAoYXZhaWwgPiBJTlRfTUFYKQorICAgICAgICAgICAgYXZhaWwgPSBJTlRfTUFYOworICAgICAgICBpZiAoYXZhaWwgPCA0MDk2KSB7CisgICAgICAgICAgICBpZiAoeG1sQnVmR3JvdyhvdXQsIDQwOTYpIDwgMCkgeworICAgICAgICAgICAgICAgIGlucHV0LT5lcnJvciA9IFhNTF9FUlJfTk9fTUVNT1JZOworICAgICAgICAgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9NRU1PUlkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXZhaWwgPSB4bWxCdWZBdmFpbChvdXQpOwogICAgICAgICB9CisKKyAgICAgICAgY19pbiA9IHRvY29udjsKKyAgICAgICAgY19vdXQgPSBhdmFpbDsKKyAgICAgICAgcmV0ID0geG1sRW5jSW5wdXRDaHVuayhpbnB1dC0+ZW5jb2RlciwgeG1sQnVmRW5kKG91dCksICZjX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkRhdGEsICZjX2luKTsKKyAgICAgICAgaW5Ub3RhbCArPSBjX2luOworICAgICAgICBpbkRhdGEgKz0gY19pbjsKKyAgICAgICAgdG9jb252IC09IGNfaW47CisgICAgICAgIHhtbEJ1ZkFkZExlbihvdXQsIGNfb3V0KTsKKyAgICB9IHdoaWxlIChyZXQgPT0gWE1MX0VOQ19FUlJfU1BBQ0UpOworCisgICAgeG1sQnVmU2hyaW5rKGluLCBpblRvdGFsKTsKKworICAgIGlmIChpbnB1dC0+cmF3Y29uc3VtZWQgPiBVTE9OR19NQVggLSAodW5zaWduZWQgbG9uZyljX2luKQorICAgICAgICBpbnB1dC0+cmF3Y29uc3VtZWQgPSBVTE9OR19NQVg7CisgICAgZWxzZQorICAgICAgICBpbnB1dC0+cmF3Y29uc3VtZWQgKz0gY19pbjsKKworICAgIGlmICgoY19vdXQgPT0gMCkgJiYgKHJldCAhPSAwKSkgeworICAgICAgICBpZiAoaW5wdXQtPmVycm9yID09IDApCisgICAgICAgICAgICBpbnB1dC0+ZXJyb3IgPSB4bWxFbmNDb252ZXJ0RXJyb3IocmV0KTsKKyAgICAgICAgcmV0dXJuKHJldCk7CiAgICAgfQotICAgIC8qCi0gICAgICogSWdub3JlIHdoZW4gaW5wdXQgYnVmZmVyIGlzIG5vdCBvbiBhIGJvdW5kYXJ5Ci0gICAgICovCi0gICAgaWYgKHJldCA9PSAtMykKLSAgICAgICAgcmV0ID0gMDsKLSAgICByZXR1cm4gKGNfb3V0PyBjX291dCA6IHJldCk7CisKKyAgICByZXR1cm4gKGNfb3V0KTsKIH0KIAogLyoqCkBAIC0yMzc0LDEwICsyMTg2LDcgQEAKICAqCiAgKiBHZW5lcmljIGZyb250LWVuZCBmb3IgdGhlIGVuY29kaW5nIGhhbmRsZXIgaW5wdXQgZnVuY3Rpb24KICAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yCi0gKiAgICAgLTEgZ2VuZXJhbCBlcnJvcgotICogICAgIC0yIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscyAoZm9yICppbiBpcyBub3QgdmFsaWQgdXRmOCBzdHJpbmcgb3IKLSAqICAgICAgICB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3IKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuCiAgKi8KIGludAogeG1sQ2hhckVuY0luRnVuYyh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyICogaGFuZGxlciwgeG1sQnVmZmVyUHRyIG91dCwKQEAgLTIzODgsMTEgKzIxOTcsMTEgQEAKICAgICBpbnQgdG9jb252OwogCiAgICAgaWYgKGhhbmRsZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAgICAgaWYgKG91dCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOVEVSTkFMKTsKICAgICBpZiAoaW4gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAKICAgICB0b2NvbnYgPSBpbi0+dXNlOwogICAgIGlmICh0b2NvbnYgPT0gMCkKQEAgLTI0MDMsNTIgKzIyMTIsMTEgQEAKICAgICAgICAgd3JpdHRlbiA9IG91dC0+c2l6ZSAtIG91dC0+dXNlIC0gMTsKICAgICB9CiAgICAgcmV0ID0geG1sRW5jSW5wdXRDaHVuayhoYW5kbGVyLCAmb3V0LT5jb250ZW50W291dC0+dXNlXSwgJndyaXR0ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+Y29udGVudCwgJnRvY29udiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi0+Y29udGVudCwgJnRvY29udik7CiAgICAgeG1sQnVmZmVyU2hyaW5rKGluLCB0b2NvbnYpOwogICAgIG91dC0+dXNlICs9IHdyaXR0ZW47CiAgICAgb3V0LT5jb250ZW50W291dC0+dXNlXSA9IDA7Ci0gICAgaWYgKHJldCA9PSAtMSkKLSAgICAgICAgcmV0ID0gLTM7CiAKLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIDA6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb252ZXJ0ZWQgJWQgYnl0ZXMgdG8gJWQgYnl0ZXMgb2YgaW5wdXRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9jb252LCB3cml0dGVuKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTE6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJjb252ZXJ0ZWQgJWQgYnl0ZXMgdG8gJWQgYnl0ZXMgb2YgaW5wdXQsICVkIGxlZnRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9jb252LCB3cml0dGVuLCBpbi0+dXNlKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTM6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBpbnB1dCwgJWQgbGVmdFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2NvbnYsIHdyaXR0ZW4sIGluLT51c2UpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMjogewotICAgICAgICAgICAgY2hhciBidWZbNTBdOwotCi0JICAgIHNucHJpbnRmKCZidWZbMF0sIDQ5LCAiMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYIiwKLQkJICAgICBpbi0+Y29udGVudFswXSwgaW4tPmNvbnRlbnRbMV0sCi0JCSAgICAgaW4tPmNvbnRlbnRbMl0sIGluLT5jb250ZW50WzNdKTsKLQkgICAgYnVmWzQ5XSA9IDA7Ci0JICAgIHhtbEVuY29kaW5nRXJyKFhNTF9JMThOX0NPTlZfRkFJTEVELAotCQkgICAgImlucHV0IGNvbnZlcnNpb24gZmFpbGVkIGR1ZSB0byBpbnB1dCBlcnJvciwgYnl0ZXMgJXNcbiIsCi0JCSAgICAgICAgICAgYnVmKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKgotICAgICAqIElnbm9yZSB3aGVuIGlucHV0IGJ1ZmZlciBpcyBub3Qgb24gYSBib3VuZGFyeQotICAgICAqLwotICAgIGlmIChyZXQgPT0gLTMpCi0gICAgICAgIHJldCA9IDA7CiAgICAgcmV0dXJuICh3cml0dGVuPyB3cml0dGVuIDogcmV0KTsKIH0KIApAQCAtMjQ2NSwxMCArMjIzMyw3IEBACiAgKiBJbiBjYXNlIG9mIFVURjggc2VxdWVuY2UgY29udmVyc2lvbiBlcnJvcnMgZm9yIHRoZSBnaXZlbiBlbmNvZGVyLAogICogdGhlIGNvbnRlbnQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbWFwcGVkIHRvIGEgQ2hhclJlZiBzZXF1ZW5jZS4KICAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuIGlmIHN1Y2Nlc3MsIG9yCi0gKiAgICAgLTEgZ2VuZXJhbCBlcnJvcgotICogICAgIC0yIGlmIHRoZSB0cmFuc2NvZGluZyBmYWlscyAoZm9yICppbiBpcyBub3QgdmFsaWQgdXRmOCBzdHJpbmcgb3IKLSAqICAgICAgICB0aGUgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIGNhbid0IGZpdCBpbnRvIHRoZSBlbmNvZGluZyB3ZSB3YW50KSwgb3IKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGFuIFhNTF9FTkNfRVJSIGNvZGUuCiAgKi8KIGludAogeG1sQ2hhckVuY091dHB1dCh4bWxPdXRwdXRCdWZmZXJQdHIgb3V0cHV0LCBpbnQgaW5pdCkKQEAgLTI0ODQsNyArMjI0OSw3IEBACiAKICAgICBpZiAoKG91dHB1dCA9PSBOVUxMKSB8fCAob3V0cHV0LT5lbmNvZGVyID09IE5VTEwpIHx8CiAgICAgICAgIChvdXRwdXQtPmJ1ZmZlciA9PSBOVUxMKSB8fCAob3V0cHV0LT5jb252ID09IE5VTEwpKQotICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOVEVSTkFMKTsKICAgICBvdXQgPSBvdXRwdXQtPmNvbnY7CiAgICAgaW4gPSBvdXRwdXQtPmJ1ZmZlcjsKIApAQCAtMjUwMiwxMCArMjI2Nyw2IEBACiAgICAgICAgIHhtbEVuY091dHB1dENodW5rKG91dHB1dC0+ZW5jb2RlciwgeG1sQnVmRW5kKG91dCksICZjX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJmNfaW4pOwogICAgICAgICB4bWxCdWZBZGRMZW4ob3V0LCBjX291dCk7Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJImluaXRpYWxpemVkIGVuY29kZXJcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybihjX291dCk7CiAgICAgfQogCkBAIC0yNTEzLDggKzIyNzQsNiBAQAogICAgICAqIENvbnZlcnNpb24gaXRzZWxmLgogICAgICAqLwogICAgIHRvY29udiA9IHhtbEJ1ZlVzZShpbik7Ci0gICAgaWYgKHRvY29udiA9PSAwKQotICAgICAgICByZXR1cm4gKHdyaXR0ZW50b3QpOwogICAgIGlmICh0b2NvbnYgPiA2NCAqIDEwMjQpCiAgICAgICAgIHRvY29udiA9IDY0ICogMTAyNDsKICAgICBpZiAodG9jb252ICogNCA+PSB3cml0dGVuKSB7CkBAIC0yNTMxLDk1ICsyMjkwLDU0IEBACiAgICAgeG1sQnVmU2hyaW5rKGluLCBjX2luKTsKICAgICB4bWxCdWZBZGRMZW4ob3V0LCBjX291dCk7CiAgICAgd3JpdHRlbnRvdCArPSBjX291dDsKLSAgICBpZiAocmV0ID09IC0xKSB7Ci0gICAgICAgIGlmIChjX291dCA+IDApIHsKLSAgICAgICAgICAgIC8qIENhbiBiZSBhIGxpbWl0YXRpb24gb2YgaWNvbnYgb3IgdWNvbnYgKi8KLSAgICAgICAgICAgIGdvdG8gcmV0cnk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0ID0gLTM7Ci0gICAgfQorCisgICAgaWYgKHJldCA9PSBYTUxfRU5DX0VSUl9TUEFDRSkKKyAgICAgICAgZ290byByZXRyeTsKIAogICAgIC8qCiAgICAgICogQXR0ZW1wdCB0byBoYW5kbGUgZXJyb3IgY2FzZXMKICAgICAgKi8KLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIDA6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiY29udmVydGVkICVkIGJ5dGVzIHRvICVkIGJ5dGVzIG9mIG91dHB1dFxuIiwKLQkgICAgICAgICAgICBjX2luLCBjX291dCk7Ci0jZW5kaWYKLQkgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTE6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAib3V0cHV0IGNvbnZlcnNpb24gZmFpbGVkIGJ5IGxhY2sgb2Ygc3BhY2VcbiIpOwotI2VuZGlmCi0JICAgIGJyZWFrOwotICAgICAgICBjYXNlIC0zOgotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCJjb252ZXJ0ZWQgJWQgYnl0ZXMgdG8gJWQgYnl0ZXMgb2Ygb3V0cHV0ICVkIGxlZnRcbiIsCi0JICAgICAgICAgICAgY19pbiwgY19vdXQsIChpbnQpIHhtbEJ1ZlVzZShpbikpOwotI2VuZGlmCi0JICAgIGJyZWFrOwotICAgICAgICBjYXNlIC00OgotICAgICAgICAgICAgeG1sRW5jb2RpbmdFcnIoWE1MX0kxOE5fTk9fT1VUUFVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbENoYXJFbmNPdXRGdW5jOiBubyBvdXRwdXQgZnVuY3Rpb24gIVxuIiwgTlVMTCk7Ci0gICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIC0yOiB7Ci0JICAgIHhtbENoYXIgY2hhcnJlZlsyMF07Ci0JICAgIGludCBsZW4gPSAoaW50KSB4bWxCdWZVc2UoaW4pOwotICAgICAgICAgICAgeG1sQ2hhciAqY29udGVudCA9IHhtbEJ1ZkNvbnRlbnQoaW4pOwotCSAgICBpbnQgY3VyLCBjaGFycmVmTGVuOworICAgIGlmIChyZXQgPT0gWE1MX0VOQ19FUlJfSU5QVVQpIHsKKyAgICAgICAgeG1sQ2hhciBjaGFycmVmWzIwXTsKKyAgICAgICAgaW50IGxlbiA9IHhtbEJ1ZlVzZShpbik7CisgICAgICAgIHhtbENoYXIgKmNvbnRlbnQgPSB4bWxCdWZDb250ZW50KGluKTsKKyAgICAgICAgaW50IGN1ciwgY2hhcnJlZkxlbjsKIAotCSAgICBjdXIgPSB4bWxHZXRVVEY4Q2hhcihjb250ZW50LCAmbGVuKTsKLQkgICAgaWYgKGN1ciA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjdXIgPSB4bWxHZXRVVEY4Q2hhcihjb250ZW50LCAmbGVuKTsKKyAgICAgICAgaWYgKGN1ciA8PSAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKIAotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgImhhbmRsaW5nIG91dHB1dCBjb252ZXJzaW9uIGVycm9yXG4iKTsKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAiQnl0ZXM6IDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKLSAgICAgICAgICAgICAgICAgICAgY29udGVudFswXSwgY29udGVudFsxXSwKLSAgICAgICAgICAgICAgICAgICAgY29udGVudFsyXSwgY29udGVudFszXSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBSZW1vdmVzIHRoZSBVVEY4IHNlcXVlbmNlLCBhbmQgcmVwbGFjZSBpdCBieSBhIGNoYXJyZWYKLSAgICAgICAgICAgICAqIGFuZCBjb250aW51ZSB0aGUgdHJhbnNjb2RpbmcgcGhhc2UsIGhvcGluZyB0aGUgZXJyb3IKLSAgICAgICAgICAgICAqIGRpZCBub3QgbWFuZ2xlIHRoZSBlbmNvZGVyIHN0YXRlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjaGFycmVmTGVuID0gc25wcmludGYoKGNoYXIgKikgJmNoYXJyZWZbMF0sIHNpemVvZihjaGFycmVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiYjJWQ7IiwgY3VyKTsKLSAgICAgICAgICAgIHhtbEJ1ZlNocmluayhpbiwgbGVuKTsKLSAgICAgICAgICAgIHhtbEJ1Zkdyb3cob3V0LCBjaGFycmVmTGVuICogNCk7Ci0gICAgICAgICAgICBjX291dCA9IHhtbEJ1ZkF2YWlsKG91dCk7Ci0gICAgICAgICAgICBjX2luID0gY2hhcnJlZkxlbjsKLSAgICAgICAgICAgIHJldCA9IHhtbEVuY091dHB1dENodW5rKG91dHB1dC0+ZW5jb2RlciwgeG1sQnVmRW5kKG91dCksICZjX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJyZWYsICZjX2luKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVtb3ZlcyB0aGUgVVRGOCBzZXF1ZW5jZSwgYW5kIHJlcGxhY2UgaXQgYnkgYSBjaGFycmVmCisgICAgICAgICAqIGFuZCBjb250aW51ZSB0aGUgdHJhbnNjb2RpbmcgcGhhc2UsIGhvcGluZyB0aGUgZXJyb3IKKyAgICAgICAgICogZGlkIG5vdCBtYW5nbGUgdGhlIGVuY29kZXIgc3RhdGUuCisgICAgICAgICAqLworICAgICAgICBjaGFycmVmTGVuID0gc25wcmludGYoKGNoYXIgKikgJmNoYXJyZWZbMF0sIHNpemVvZihjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJiMlZDsiLCBjdXIpOworICAgICAgICB4bWxCdWZTaHJpbmsoaW4sIGxlbik7CisgICAgICAgIHhtbEJ1Zkdyb3cob3V0LCBjaGFycmVmTGVuICogNCk7CisgICAgICAgIGNfb3V0ID0geG1sQnVmQXZhaWwob3V0KTsKKyAgICAgICAgY19pbiA9IGNoYXJyZWZMZW47CisgICAgICAgIHJldCA9IHhtbEVuY091dHB1dENodW5rKG91dHB1dC0+ZW5jb2RlciwgeG1sQnVmRW5kKG91dCksICZjX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnJlZiwgJmNfaW4pOworICAgICAgICBpZiAoKHJldCA8IDApIHx8IChjX2luICE9IGNoYXJyZWZMZW4pKSB7CisgICAgICAgICAgICByZXQgPSBYTUxfRU5DX0VSUl9JTlRFUk5BTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotCSAgICBpZiAoKHJldCA8IDApIHx8IChjX2luICE9IGNoYXJyZWZMZW4pKSB7Ci0JCWNoYXIgYnVmWzUwXTsKLQotCQlzbnByaW50ZigmYnVmWzBdLCA0OSwgIjB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWCIsCi0JCQkgY29udGVudFswXSwgY29udGVudFsxXSwKLQkJCSBjb250ZW50WzJdLCBjb250ZW50WzNdKTsKLQkJYnVmWzQ5XSA9IDA7Ci0JCXhtbEVuY29kaW5nRXJyKFhNTF9JMThOX0NPTlZfRkFJTEVELAotCQkgICAgIm91dHB1dCBjb252ZXJzaW9uIGZhaWxlZCBkdWUgdG8gY29udiBlcnJvciwgYnl0ZXMgJXNcbiIsCi0JCQkgICAgICAgYnVmKTsKLQkJaWYgKHhtbEJ1ZkdldEFsbG9jYXRpb25TY2hlbWUoaW4pICE9IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKQotCQkgICAgY29udGVudFswXSA9ICcgJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgfQotCi0gICAgICAgICAgICB4bWxCdWZBZGRMZW4ob3V0LCBjX291dCk7Ci0gICAgICAgICAgICB3cml0dGVudG90ICs9IGNfb3V0OwotICAgICAgICAgICAgZ290byByZXRyeTsKLQl9CisgICAgICAgIHhtbEJ1ZkFkZExlbihvdXQsIGNfb3V0KTsKKyAgICAgICAgd3JpdHRlbnRvdCArPSBjX291dDsKKyAgICAgICAgZ290byByZXRyeTsKICAgICB9Ci0gICAgcmV0dXJuKHdyaXR0ZW50b3QgPyB3cml0dGVudG90IDogcmV0KTsKKworZXJyb3I6CisgICAgaWYgKCh3cml0dGVudG90IDw9IDApICYmIChyZXQgIT0gMCkpIHsKKyAgICAgICAgaWYgKG91dHB1dC0+ZXJyb3IgPT0gMCkKKyAgICAgICAgICAgIG91dHB1dC0+ZXJyb3IgPSB4bWxFbmNDb252ZXJ0RXJyb3IocmV0KTsKKyAgICAgICAgcmV0dXJuKHJldCk7CisgICAgfQorCisgICAgcmV0dXJuKHdyaXR0ZW50b3QpOwogfQogI2VuZGlmCiAKQEAgLTI2MzYsMTAgKzIzNTQsNyBAQAogICogSW4gY2FzZSBvZiBVVEY4IHNlcXVlbmNlIGNvbnZlcnNpb24gZXJyb3JzIGZvciB0aGUgZ2l2ZW4gZW5jb2RlciwKICAqIHRoZSBjb250ZW50IHdpbGwgYmUgYXV0b21hdGljYWxseSByZW1hcHBlZCB0byBhIENoYXJSZWYgc2VxdWVuY2UuCiAgKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbiBpZiBzdWNjZXNzLCBvcgotICogICAgIC0xIGdlbmVyYWwgZXJyb3IKLSAqICAgICAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMgKGZvciAqaW4gaXMgbm90IHZhbGlkIHV0Zjggc3RyaW5nIG9yCi0gKiAgICAgICAgdGhlIHJlc3VsdCBvZiB0cmFuc2Zvcm1hdGlvbiBjYW4ndCBmaXQgaW50byB0aGUgZW5jb2Rpbmcgd2Ugd2FudCksIG9yCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLgogICovCiBpbnQKIHhtbENoYXJFbmNPdXRGdW5jKHhtbENoYXJFbmNvZGluZ0hhbmRsZXIgKmhhbmRsZXIsIHhtbEJ1ZmZlclB0ciBvdXQsCkBAIC0yNjQ5LDggKzIzNjQsOCBAQAogICAgIGludCB3cml0dGVudG90ID0gMDsKICAgICBpbnQgdG9jb252OwogCi0gICAgaWYgKGhhbmRsZXIgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLSAgICBpZiAob3V0ID09IE5VTEwpIHJldHVybigtMSk7CisgICAgaWYgKGhhbmRsZXIgPT0gTlVMTCkgcmV0dXJuKFhNTF9FTkNfRVJSX0lOVEVSTkFMKTsKKyAgICBpZiAob3V0ID09IE5VTEwpIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAKIHJldHJ5OgogCkBAIC0yNjY5LDEwICsyMzg0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnRvY29udik7CiAgICAgICAgIG91dC0+dXNlICs9IHdyaXR0ZW47CiAgICAgICAgIG91dC0+Y29udGVudFtvdXQtPnVzZV0gPSAwOwotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJpbml0aWFsaXplZCBlbmNvZGVyXG4iKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4oMCk7CiAgICAgfQogCkBAIC0yNjgwLDggKzIzOTEsNiBAQAogICAgICAqIENvbnZlcnNpb24gaXRzZWxmLgogICAgICAqLwogICAgIHRvY29udiA9IGluLT51c2U7Ci0gICAgaWYgKHRvY29udiA9PSAwKQotCXJldHVybigwKTsKICAgICBpZiAodG9jb252ICogNCA+PSB3cml0dGVuKSB7CiAgICAgICAgIHhtbEJ1ZmZlckdyb3cob3V0LCB0b2NvbnYgKiA0KTsKIAl3cml0dGVuID0gb3V0LT5zaXplIC0gb3V0LT51c2UgLSAxOwpAQCAtMjY5Miw5NCArMjQwMSw0MyBAQAogICAgIG91dC0+dXNlICs9IHdyaXR0ZW47CiAgICAgd3JpdHRlbnRvdCArPSB3cml0dGVuOwogICAgIG91dC0+Y29udGVudFtvdXQtPnVzZV0gPSAwOwotICAgIGlmIChyZXQgPT0gLTEpIHsKLSAgICAgICAgaWYgKHdyaXR0ZW4gPiAwKSB7Ci0gICAgICAgICAgICAvKiBDYW4gYmUgYSBsaW1pdGF0aW9uIG9mIGljb252IG9yIHVjb252ICovCi0gICAgICAgICAgICBnb3RvIHJldHJ5OwotICAgICAgICB9Ci0gICAgICAgIHJldCA9IC0zOwotICAgIH0KKworICAgIGlmIChyZXQgPT0gWE1MX0VOQ19FUlJfU1BBQ0UpCisgICAgICAgIGdvdG8gcmV0cnk7CiAKICAgICAvKgogICAgICAqIEF0dGVtcHQgdG8gaGFuZGxlIGVycm9yIGNhc2VzCiAgICAgICovCi0gICAgc3dpdGNoIChyZXQpIHsKLSAgICAgICAgY2FzZSAwOgotI2lmZGVmIERFQlVHX0VOQ09ESU5HCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBvdXRwdXRcbiIsCi0JICAgICAgICAgICAgdG9jb252LCB3cml0dGVuKTsKLSNlbmRpZgotCSAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMToKLSNpZmRlZiBERUJVR19FTkNPRElORwotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJvdXRwdXQgY29udmVyc2lvbiBmYWlsZWQgYnkgbGFjayBvZiBzcGFjZVxuIik7Ci0jZW5kaWYKLQkgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTM6Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsImNvbnZlcnRlZCAlZCBieXRlcyB0byAlZCBieXRlcyBvZiBvdXRwdXQgJWQgbGVmdFxuIiwKLQkgICAgICAgICAgICB0b2NvbnYsIHdyaXR0ZW4sIGluLT51c2UpOwotI2VuZGlmCi0JICAgIGJyZWFrOwotICAgICAgICBjYXNlIC00OgotCSAgICB4bWxFbmNvZGluZ0VycihYTUxfSTE4Tl9OT19PVVRQVVQsCi0JCSAgICAgICAgICAgInhtbENoYXJFbmNPdXRGdW5jOiBubyBvdXRwdXQgZnVuY3Rpb24gIVxuIiwgTlVMTCk7Ci0JICAgIHJldCA9IC0xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgLTI6IHsKLQkgICAgeG1sQ2hhciBjaGFycmVmWzIwXTsKLQkgICAgaW50IGxlbiA9IGluLT51c2U7Ci0JICAgIGNvbnN0IHhtbENoYXIgKnV0ZiA9IChjb25zdCB4bWxDaGFyICopIGluLT5jb250ZW50OwotCSAgICBpbnQgY3VyLCBjaGFycmVmTGVuOworICAgIGlmIChyZXQgPT0gWE1MX0VOQ19FUlJfSU5QVVQpIHsKKyAgICAgICAgeG1sQ2hhciBjaGFycmVmWzIwXTsKKyAgICAgICAgaW50IGxlbiA9IGluLT51c2U7CisgICAgICAgIGNvbnN0IHhtbENoYXIgKnV0ZiA9IChjb25zdCB4bWxDaGFyICopIGluLT5jb250ZW50OworICAgICAgICBpbnQgY3VyLCBjaGFycmVmTGVuOwogCi0JICAgIGN1ciA9IHhtbEdldFVURjhDaGFyKHV0ZiwgJmxlbik7Ci0JICAgIGlmIChjdXIgPD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VyID0geG1sR2V0VVRGOENoYXIodXRmLCAmbGVuKTsKKyAgICAgICAgaWYgKGN1ciA8PSAwKQorICAgICAgICAgICAgcmV0dXJuKHJldCk7CiAKLSNpZmRlZiBERUJVR19FTkNPRElORwotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJoYW5kbGluZyBvdXRwdXQgY29udmVyc2lvbiBlcnJvclxuIik7Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIkJ5dGVzOiAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCi0gICAgICAgICAgICAgICAgICAgIGluLT5jb250ZW50WzBdLCBpbi0+Y29udGVudFsxXSwKLSAgICAgICAgICAgICAgICAgICAgaW4tPmNvbnRlbnRbMl0sIGluLT5jb250ZW50WzNdKTsKLSNlbmRpZgotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFJlbW92ZXMgdGhlIFVURjggc2VxdWVuY2UsIGFuZCByZXBsYWNlIGl0IGJ5IGEgY2hhcnJlZgotICAgICAgICAgICAgICogYW5kIGNvbnRpbnVlIHRoZSB0cmFuc2NvZGluZyBwaGFzZSwgaG9waW5nIHRoZSBlcnJvcgotICAgICAgICAgICAgICogZGlkIG5vdCBtYW5nbGUgdGhlIGVuY29kZXIgc3RhdGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNoYXJyZWZMZW4gPSBzbnByaW50ZigoY2hhciAqKSAmY2hhcnJlZlswXSwgc2l6ZW9mKGNoYXJyZWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJiMlZDsiLCBjdXIpOwotICAgICAgICAgICAgeG1sQnVmZmVyU2hyaW5rKGluLCBsZW4pOwotICAgICAgICAgICAgeG1sQnVmZmVyR3JvdyhvdXQsIGNoYXJyZWZMZW4gKiA0KTsKLQkgICAgd3JpdHRlbiA9IG91dC0+c2l6ZSAtIG91dC0+dXNlIC0gMTsKLSAgICAgICAgICAgIHRvY29udiA9IGNoYXJyZWZMZW47Ci0gICAgICAgICAgICByZXQgPSB4bWxFbmNPdXRwdXRDaHVuayhoYW5kbGVyLCAmb3V0LT5jb250ZW50W291dC0+dXNlXSwgJndyaXR0ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycmVmLCAmdG9jb252KTsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVtb3ZlcyB0aGUgVVRGOCBzZXF1ZW5jZSwgYW5kIHJlcGxhY2UgaXQgYnkgYSBjaGFycmVmCisgICAgICAgICAqIGFuZCBjb250aW51ZSB0aGUgdHJhbnNjb2RpbmcgcGhhc2UsIGhvcGluZyB0aGUgZXJyb3IKKyAgICAgICAgICogZGlkIG5vdCBtYW5nbGUgdGhlIGVuY29kZXIgc3RhdGUuCisgICAgICAgICAqLworICAgICAgICBjaGFycmVmTGVuID0gc25wcmludGYoKGNoYXIgKikgJmNoYXJyZWZbMF0sIHNpemVvZihjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJiMlZDsiLCBjdXIpOworICAgICAgICB4bWxCdWZmZXJTaHJpbmsoaW4sIGxlbik7CisgICAgICAgIHhtbEJ1ZmZlckdyb3cob3V0LCBjaGFycmVmTGVuICogNCk7CisgICAgICAgIHdyaXR0ZW4gPSBvdXQtPnNpemUgLSBvdXQtPnVzZSAtIDE7CisgICAgICAgIHRvY29udiA9IGNoYXJyZWZMZW47CisgICAgICAgIHJldCA9IHhtbEVuY091dHB1dENodW5rKGhhbmRsZXIsICZvdXQtPmNvbnRlbnRbb3V0LT51c2VdLCAmd3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnJlZiwgJnRvY29udik7CisgICAgICAgIGlmICgocmV0IDwgMCkgfHwgKHRvY29udiAhPSBjaGFycmVmTGVuKSkKKyAgICAgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAKLQkgICAgaWYgKChyZXQgPCAwKSB8fCAodG9jb252ICE9IGNoYXJyZWZMZW4pKSB7Ci0JCWNoYXIgYnVmWzUwXTsKLQotCQlzbnByaW50ZigmYnVmWzBdLCA0OSwgIjB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWCIsCi0JCQkgaW4tPmNvbnRlbnRbMF0sIGluLT5jb250ZW50WzFdLAotCQkJIGluLT5jb250ZW50WzJdLCBpbi0+Y29udGVudFszXSk7Ci0JCWJ1Zls0OV0gPSAwOwotCQl4bWxFbmNvZGluZ0VycihYTUxfSTE4Tl9DT05WX0ZBSUxFRCwKLQkJICAgICJvdXRwdXQgY29udmVyc2lvbiBmYWlsZWQgZHVlIHRvIGNvbnYgZXJyb3IsIGJ5dGVzICVzXG4iLAotCQkJICAgICAgIGJ1Zik7Ci0JCWlmIChpbi0+YWxsb2MgIT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpCi0JCSAgICBpbi0+Y29udGVudFswXSA9ICcgJzsKLQkgICAgICAgIGJyZWFrOwotCSAgICB9Ci0KLSAgICAgICAgICAgIG91dC0+dXNlICs9IHdyaXR0ZW47Ci0gICAgICAgICAgICB3cml0dGVudG90ICs9IHdyaXR0ZW47Ci0gICAgICAgICAgICBvdXQtPmNvbnRlbnRbb3V0LT51c2VdID0gMDsKLSAgICAgICAgICAgIGdvdG8gcmV0cnk7Ci0JfQorICAgICAgICBvdXQtPnVzZSArPSB3cml0dGVuOworICAgICAgICB3cml0dGVudG90ICs9IHdyaXR0ZW47CisgICAgICAgIG91dC0+Y29udGVudFtvdXQtPnVzZV0gPSAwOworICAgICAgICBnb3RvIHJldHJ5OwogICAgIH0KICAgICByZXR1cm4od3JpdHRlbnRvdCA/IHdyaXR0ZW50b3QgOiByZXQpOwogfQpAQCAtMjc5NiwxOSArMjQ1NCwxOSBAQAogeG1sQ2hhckVuY0Nsb3NlRnVuYyh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyICpoYW5kbGVyKSB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgaW50IHRvZnJlZSA9IDA7Ci0gICAgaW50IGksIGhhbmRsZXJfaW5fbGlzdCA9IDA7Ci0KLSAgICAvKiBBdm9pZCB1bnVzZWQgdmFyaWFibGUgd2FybmluZyBpZiBmZWF0dXJlcyBhcmUgZGlzYWJsZWQuICovCi0gICAgKHZvaWQpIGhhbmRsZXJfaW5fbGlzdDsKKyAgICBpbnQgaSA9IDA7CiAKICAgICBpZiAoaGFuZGxlciA9PSBOVUxMKSByZXR1cm4oLTEpOwotICAgIGlmIChoYW5kbGVyLT5uYW1lID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgTlVNX0RFRkFVTFRfSEFORExFUlM7IGkrKykgeworICAgICAgICBpZiAoaGFuZGxlciA9PSAmZGVmYXVsdEhhbmRsZXJzW2ldKQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgIH0KKwogICAgIGlmIChoYW5kbGVycyAhPSBOVUxMKSB7CiAgICAgICAgIGZvciAoaSA9IDA7aSA8IG5iQ2hhckVuY29kaW5nSGFuZGxlcjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlciA9PSBoYW5kbGVyc1tpXSkgewotCSAgICAgICAgaGFuZGxlcl9pbl9saXN0ID0gMTsKLQkJYnJlYWs7Ci0JICAgIH0KKyAgICAgICAgICAgIGlmIChoYW5kbGVyID09IGhhbmRsZXJzW2ldKQorICAgICAgICAgICAgICAgIHJldHVybigwKTsKIAl9CiAgICAgfQogI2lmZGVmIExJQlhNTF9JQ09OVl9FTkFCTEVECkBAIC0yODE2LDggKzI0NzQsNyBAQAogICAgICAqIEljb252IGhhbmRsZXJzIGNhbiBiZSB1c2VkIG9ubHkgb25jZSwgZnJlZSB0aGUgd2hvbGUgYmxvY2suCiAgICAgICogYW5kIHRoZSBhc3NvY2lhdGVkIGljb24gcmVzb3VyY2VzLgogICAgICAqLwotICAgIGlmICgoaGFuZGxlcl9pbl9saXN0ID09IDApICYmCi0gICAgICAgICgoaGFuZGxlci0+aWNvbnZfb3V0ICE9IE5VTEwpIHx8IChoYW5kbGVyLT5pY29udl9pbiAhPSBOVUxMKSkpIHsKKyAgICBpZiAoKGhhbmRsZXItPmljb252X291dCAhPSBOVUxMKSB8fCAoaGFuZGxlci0+aWNvbnZfaW4gIT0gTlVMTCkpIHsKICAgICAgICAgdG9mcmVlID0gMTsKIAlpZiAoaGFuZGxlci0+aWNvbnZfb3V0ICE9IE5VTEwpIHsKIAkgICAgaWYgKGljb252X2Nsb3NlKGhhbmRsZXItPmljb252X291dCkpCkBAIC0yODMyLDggKzI0ODksNyBAQAogICAgIH0KICNlbmRpZiAvKiBMSUJYTUxfSUNPTlZfRU5BQkxFRCAqLwogI2lmZGVmIExJQlhNTF9JQ1VfRU5BQkxFRAotICAgIGlmICgoaGFuZGxlcl9pbl9saXN0ID09IDApICYmCi0gICAgICAgICgoaGFuZGxlci0+dWNvbnZfb3V0ICE9IE5VTEwpIHx8IChoYW5kbGVyLT51Y29udl9pbiAhPSBOVUxMKSkpIHsKKyAgICBpZiAoKGhhbmRsZXItPnVjb252X291dCAhPSBOVUxMKSB8fCAoaGFuZGxlci0+dWNvbnZfaW4gIT0gTlVMTCkpIHsKICAgICAgICAgdG9mcmVlID0gMTsKIAlpZiAoaGFuZGxlci0+dWNvbnZfb3V0ICE9IE5VTEwpIHsKIAkgICAgY2xvc2VJY3VDb252ZXJ0ZXIoaGFuZGxlci0+dWNvbnZfb3V0KTsKQEAgLTI4NTIsMTQgKzI1MDgsNiBAQAogICAgICAgICBoYW5kbGVyLT5uYW1lID0gTlVMTDsKICAgICAgICAgeG1sRnJlZShoYW5kbGVyKTsKICAgICB9Ci0jaWZkZWYgREVCVUdfRU5DT0RJTkcKLSAgICBpZiAocmV0KQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJImZhaWxlZCB0byBjbG9zZSB0aGUgZW5jb2RpbmcgaGFuZGxlclxuIik7Ci0gICAgZWxzZQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJImNsb3NlZCB0aGUgZW5jb2RpbmcgaGFuZGxlclxuIik7Ci0jZW5kaWYKIAogICAgIHJldHVybihyZXQpOwogfQpAQCAtMjkwNSwxNSArMjU1MywxMSBAQAogICAgICAgICAgICAgICAgIHdyaXR0ZW4gPSAzMjAwMDsKICAgICAgICAgICAgICAgICByZXQgPSB4bWxFbmNPdXRwdXRDaHVuayhoYW5kbGVyLCAmY29udmJ1ZlswXSwgJndyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLCAmdG9jb252KTsKLSAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlbiA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtMjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChyZXQgIT0gWE1MX0VOQ19FUlJfU1VDQ0VTUykgJiYgKHJldCAhPSBYTUxfRU5DX0VSUl9TUEFDRSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CiAgICAgICAgICAgICAgICAgdW51c2VkICs9IHdyaXR0ZW47CiAgICAgICAgICAgICAgICAgY3VyICs9IHRvY29udjsKLSAgICAgICAgICAgIH0gd2hpbGUgKHJldCA9PSAtMik7CisgICAgICAgICAgICB9IHdoaWxlIChyZXQgPT0gWE1MX0VOQ19FUlJfU1BBQ0UpOwogCX0KIAlpZiAoaW4tPmJ1Zi0+cmF3Y29uc3VtZWQgPCB1bnVzZWQpCiAJICAgIHJldHVybigtMSk7CkBAIC0yOTM2LDkgKzI1ODAsMTAgQEAKICAqIFRha2UgYSBibG9jayBvZiBVVEYtOCBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gSVNPIDg4NTktKgogICogYmxvY2sgb2YgY2hhcnMgb3V0LgogICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCAtMiBpZiB0aGUgdHJhbnNjb2RpbmcgZmFpbHMsIG9yIC0xIG90aGVyd2lzZQorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgYW4gWE1MX0VOQ19FUlIgY29kZS4KKyAqCiAgKiBUaGUgdmFsdWUgb2YgQGlubGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZAotICogICAgIGFzIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4KKyAqIGFzIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUsIGVsc2UgdW5wcmVkaWN0YWJsZS4KICAqIFRoZSB2YWx1ZSBvZiBAb3V0bGVuIGFmdGVyIHJldHVybiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBjb25zdW1lZC4KICAqLwogc3RhdGljIGludApAQCAtMjk1Miw3ICsyNTk3LDcgQEAKIAogICAgIGlmICgob3V0ID09IE5VTEwpIHx8IChvdXRsZW4gPT0gTlVMTCkgfHwgKGlubGVuID09IE5VTEwpIHx8CiAgICAgICAgICh4bGF0dGFibGUgPT0gTlVMTCkpCi0JcmV0dXJuKC0xKTsKKwlyZXR1cm4oWE1MX0VOQ19FUlJfSU5URVJOQUwpOwogICAgIGlmIChpbiA9PSBOVUxMKSB7CiAgICAgICAgIC8qCiAgICAgICAgICogaW5pdGlhbGl6YXRpb24gbm90aGluZyB0byBkbwpAQCAtMjk3MCwyMSArMjYxNSwyMSBAQAogICAgICAgICAgICAgLyogdHJhaWxpbmcgYnl0ZSBpbiBsZWFkaW5nIHBvc2l0aW9uICovCiAgICAgICAgICAgICAqb3V0bGVuID0gb3V0IC0gb3V0c3RhcnQ7CiAgICAgICAgICAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZCA8IDB4RTApIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKICAgICAgICAgICAgIGlmICghKGluIDwgaW5lbmQpKSB7CiAgICAgICAgICAgICAgICAgLyogdHJhaWxpbmcgYnl0ZSBub3QgaW4gaW5wdXQgYnVmZmVyICovCiAgICAgICAgICAgICAgICAgKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogICAgICAgICAgICAgICAgICppbmxlbiA9IHByb2Nlc3NlZCAtIGluc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0zKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfUEFSVElBTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjID0gKmluKys7CiAgICAgICAgICAgICBpZiAoKGMgJiAweEMwKSAhPSAweDgwKSB7CiAgICAgICAgICAgICAgICAgLyogbm90IGEgdHJhaWxpbmcgYnl0ZSAqLwogICAgICAgICAgICAgICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKICAgICAgICAgICAgICAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGMgPSBjICYgMHgzRjsKICAgICAgICAgICAgIGQgPSBkICYgMHgxRjsKQEAgLTI5OTMsNyArMjYzOCw3IEBACiAgICAgICAgICAgICAgICAgLyogbm90IGluIGNoYXJhY3RlciBzZXQgKi8KICAgICAgICAgICAgICAgICAqb3V0bGVuID0gb3V0IC0gb3V0c3RhcnQ7CiAgICAgICAgICAgICAgICAgKmlubGVuID0gcHJvY2Vzc2VkIC0gaW5zdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqb3V0KysgPSBkOwogICAgICAgICB9IGVsc2UgaWYgKGQgPCAweEYwKSB7CkBAIC0zMDAzLDIxICsyNjQ4LDIxIEBACiAgICAgICAgICAgICAgICAgLyogdHJhaWxpbmcgYnl0ZXMgbm90IGluIGlucHV0IGJ1ZmZlciAqLwogICAgICAgICAgICAgICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKICAgICAgICAgICAgICAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotICAgICAgICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX1BBUlRJQUwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYzEgPSAqaW4rKzsKICAgICAgICAgICAgIGlmICgoYzEgJiAweEMwKSAhPSAweDgwKSB7CiAgICAgICAgICAgICAgICAgLyogbm90IGEgdHJhaWxpbmcgYnl0ZSAoYzEpICovCiAgICAgICAgICAgICAgICAgKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogICAgICAgICAgICAgICAgICppbmxlbiA9IHByb2Nlc3NlZCAtIGluc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYzIgPSAqaW4rKzsKICAgICAgICAgICAgIGlmICgoYzIgJiAweEMwKSAhPSAweDgwKSB7CiAgICAgICAgICAgICAgICAgLyogbm90IGEgdHJhaWxpbmcgYnl0ZSAoYzIpICovCiAgICAgICAgICAgICAgICAgKm91dGxlbiA9IG91dCAtIG91dHN0YXJ0OwogICAgICAgICAgICAgICAgICppbmxlbiA9IHByb2Nlc3NlZCAtIGluc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oWE1MX0VOQ19FUlJfSU5QVVQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYzEgPSBjMSAmIDB4M0Y7CiAgICAgICAgICAgICBjMiA9IGMyICYgMHgzRjsKQEAgLTMwMjgsMTQgKzI2NzMsMTQgQEAKICAgICAgICAgICAgICAgICAvKiBub3QgaW4gY2hhcmFjdGVyIHNldCAqLwogICAgICAgICAgICAgICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKICAgICAgICAgICAgICAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpvdXQrKyA9IGQ7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBjYW5ub3QgdHJhbnNjb2RlID49IFUrMDEwMDAwICovCiAgICAgICAgICAgICAqb3V0bGVuID0gb3V0IC0gb3V0c3RhcnQ7CiAgICAgICAgICAgICAqaW5sZW4gPSBwcm9jZXNzZWQgLSBpbnN0YXJ0OwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIHJldHVybihYTUxfRU5DX0VSUl9JTlBVVCk7CiAgICAgICAgIH0KICAgICAgICAgcHJvY2Vzc2VkID0gaW47CiAgICAgfQpAQCAtMzA1Myw3ICsyNjk4LDkgQEAKICAqCiAgKiBUYWtlIGEgYmxvY2sgb2YgSVNPIDg4NTktKiBjaGFycyBpbiBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gYW4gVVRGLTgKICAqIGJsb2NrIG9mIGNoYXJzIG91dC4KLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvciAtMSBvdGhlcndpc2UKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBhbiBYTUxfRU5DX0VSUiBjb2RlLgorICoKICAqIFRoZSB2YWx1ZSBvZiBAaW5sZW4gYWZ0ZXIgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGNvbnN1bWVkCiAgKiBUaGUgdmFsdWUgb2YgQG91dGxlbiBhZnRlciByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBvY3RldHMgcHJvZHVjZWQuCiAgKi8KQEAgLTMwNzAsNyArMjcxNyw3IEBACiAKICAgICBpZiAoKG91dCA9PSBOVUxMKSB8fCAob3V0bGVuID09IE5VTEwpIHx8IChpbmxlbiA9PSBOVUxMKSB8fAogICAgICAgICAoaW4gPT0gTlVMTCkgfHwgKHVuaWNvZGV0YWJsZSA9PSBOVUxMKSkKLQlyZXR1cm4oLTEpOworCXJldHVybihYTUxfRU5DX0VSUl9JTlRFUk5BTCk7CiAgICAgb3V0ZW5kID0gb3V0ICsgKm91dGxlbjsKICAgICBpbmVuZCA9IGluICsgKmlubGVuOwogICAgIGluc3RvcCA9IGluZW5kOwpAQCAtMzA4Miw3ICsyNzI5LDcgQEAKICAgICAgICAgICAgICAgICAvKiB1bmRlZmluZWQgY29kZSBwb2ludCAqLwogICAgICAgICAgICAgICAgICpvdXRsZW4gPSBvdXQgLSBvdXRzdGFydDsKICAgICAgICAgICAgICAgICAqaW5sZW4gPSBpbiAtIGluc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKFhNTF9FTkNfRVJSX0lOUFVUKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjIDwgMHg4MDApIHsKICAgICAgICAgICAgICAgICAqb3V0KysgPSAoKGMgPj4gIDYpICYgMHgxRikgfCAweEMwOwpAQCAtMzk3MiwyNCArMzYxOSw2IEBACiAgICAgcmV0dXJuIFVURjhUb0lTTzg4NTl4IChvdXQsIG91dGxlbiwgaW4sIGlubGVuLCB4bWx0cmFuc2NvZGV0YWJsZV9JU084ODU5XzE2KTsKIH0KIAotc3RhdGljIHZvaWQKLXhtbFJlZ2lzdGVyQ2hhckVuY29kaW5nSGFuZGxlcnNJU084ODU5eCAodm9pZCkgewotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0yIiwgSVNPODg1OV8yVG9VVEY4LCBVVEY4VG9JU084ODU5XzIpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0zIiwgSVNPODg1OV8zVG9VVEY4LCBVVEY4VG9JU084ODU5XzMpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS00IiwgSVNPODg1OV80VG9VVEY4LCBVVEY4VG9JU084ODU5XzQpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS01IiwgSVNPODg1OV81VG9VVEY4LCBVVEY4VG9JU084ODU5XzUpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS02IiwgSVNPODg1OV82VG9VVEY4LCBVVEY4VG9JU084ODU5XzYpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS03IiwgSVNPODg1OV83VG9VVEY4LCBVVEY4VG9JU084ODU5XzcpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS04IiwgSVNPODg1OV84VG9VVEY4LCBVVEY4VG9JU084ODU5XzgpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS05IiwgSVNPODg1OV85VG9VVEY4LCBVVEY4VG9JU084ODU5XzkpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0xMCIsIElTTzg4NTlfMTBUb1VURjgsIFVURjhUb0lTTzg4NTlfMTApOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0xMSIsIElTTzg4NTlfMTFUb1VURjgsIFVURjhUb0lTTzg4NTlfMTEpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0xMyIsIElTTzg4NTlfMTNUb1VURjgsIFVURjhUb0lTTzg4NTlfMTMpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0xNCIsIElTTzg4NTlfMTRUb1VURjgsIFVURjhUb0lTTzg4NTlfMTQpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0xNSIsIElTTzg4NTlfMTVUb1VURjgsIFVURjhUb0lTTzg4NTlfMTUpOwotICAgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgKCJJU08tODg1OS0xNiIsIElTTzg4NTlfMTZUb1VURjgsIFVURjhUb0lTTzg4NTlfMTYpOwotfQotCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9lbnRpdGllcy5jIGIvZW50aXRpZXMuYwppbmRleCBkNGU1NDEyLi5hZWM1MTQ0IDEwMDY0NAotLS0gYS9lbnRpdGllcy5jCisrKyBiL2VudGl0aWVzLmMKQEAgLTIzLDEwICsyMywxMCBAQAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZGljdC5oPgogCi0jaW5jbHVkZSAic2F2ZS5oIgorI2luY2x1ZGUgInByaXZhdGUvZW50aXRpZXMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCiAKIC8qCiAgKiBUaGUgWE1MIHByZWRlZmluZWQgZW50aXRpZXMuCkBAIC0zNywzNSArMzcsMzUgQEAKICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogICAgIEJBRF9DQVNUICI8IiwgQkFEX0NBU1QgIjwiLCAxLAogICAgIFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAxCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCwgMAogfTsKIHN0YXRpYyB4bWxFbnRpdHkgeG1sRW50aXR5R3QgPSB7CiAgICAgTlVMTCwgWE1MX0VOVElUWV9ERUNMLCBCQURfQ0FTVCAiZ3QiLAogICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAgICAgQkFEX0NBU1QgIj4iLCBCQURfQ0FTVCAiPiIsIDEsCiAgICAgWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZLAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIDEKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAwLCAwCiB9Owogc3RhdGljIHhtbEVudGl0eSB4bWxFbnRpdHlBbXAgPSB7CiAgICAgTlVMTCwgWE1MX0VOVElUWV9ERUNMLCBCQURfQ0FTVCAiYW1wIiwKICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogICAgIEJBRF9DQVNUICImIiwgQkFEX0NBU1QgIiYiLCAxLAogICAgIFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAxCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCwgMAogfTsKIHN0YXRpYyB4bWxFbnRpdHkgeG1sRW50aXR5UXVvdCA9IHsKICAgICBOVUxMLCBYTUxfRU5USVRZX0RFQ0wsIEJBRF9DQVNUICJxdW90IiwKICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogICAgIEJBRF9DQVNUICJcIiIsIEJBRF9DQVNUICJcIiIsIDEsCiAgICAgWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZLAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIDEKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAwLCAwCiB9Owogc3RhdGljIHhtbEVudGl0eSB4bWxFbnRpdHlBcG9zID0gewogICAgIE5VTEwsIFhNTF9FTlRJVFlfREVDTCwgQkFEX0NBU1QgImFwb3MiLAogICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAgICAgQkFEX0NBU1QgIiciLCBCQURfQ0FTVCAiJyIsIDEsCiAgICAgWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZLAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIDEKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAwLCAwCiB9OwogCiAvKioKQEAgLTExMyw3ICsxMTMsNyBAQAogLyoKICAqIHhtbEZyZWVFbnRpdHkgOiBjbGVhbi11cCBhbiBlbnRpdHkgcmVjb3JkLgogICovCi1zdGF0aWMgdm9pZAordm9pZAogeG1sRnJlZUVudGl0eSh4bWxFbnRpdHlQdHIgZW50aXR5KQogewogICAgIHhtbERpY3RQdHIgZGljdCA9IE5VTEw7CkBAIC0xNjIsNyArMTYyLDYgQEAKICAgICB9CiAgICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKHhtbEVudGl0eSkpOwogICAgIHJldC0+dHlwZSA9IFhNTF9FTlRJVFlfREVDTDsKLSAgICByZXQtPmNoZWNrZWQgPSAwOwogCiAgICAgLyoKICAgICAgKiBmaWxsIHRoZSBzdHJ1Y3R1cmUuCkBAIC02MDQsNyArNjAzLDcgQEAKICAgICAgKiBhbGxvY2F0ZSBhbiB0cmFuc2xhdGlvbiBidWZmZXIuCiAgICAgICovCiAgICAgYnVmZmVyX3NpemUgPSAxMDAwOwotICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvYyhidWZmZXJfc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgYnVmZmVyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jKGJ1ZmZlcl9zaXplKTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgeG1sRW50aXRpZXNFcnJNZW1vcnkoInhtbEVuY29kZUVudGl0aWVzOiBtYWxsb2MgZmFpbGVkIik7CiAJcmV0dXJuKE5VTEwpOwpAQCAtNzE4LDggKzcxNyw2IEBACiAJCSAgICAoKChjdXJbMF0gJiAweEY4KSA9PSAweEY4KSkpIHsKIAkJICAgIHhtbEVudGl0aWVzRXJyKFhNTF9DSEVDS19OT1RfVVRGOCwKIAkJCSAgICAieG1sRW5jb2RlRW50aXRpZXM6IGlucHV0IG5vdCBVVEYtOCIpOwotCQkgICAgaWYgKGRvYyAhPSBOVUxMKQotCQkJZG9jLT5lbmNvZGluZyA9IHhtbFN0cmR1cChCQURfQ0FTVCAiSVNPLTg4NTktMSIpOwogCQkgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiYjJWQ7IiwgKmN1cik7CiAJCSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CiAJCSAgICBwdHIgPSBidWY7CkBAIC03NTEsOCArNzQ4LDYgQEAKIAkJaWYgKChsID09IDEpIHx8ICghSVNfQ0hBUih2YWwpKSkgewogCQkgICAgeG1sRW50aXRpZXNFcnIoWE1MX0VSUl9JTlZBTElEX0NIQVIsCiAJCQkieG1sRW5jb2RlRW50aXRpZXM6IGNoYXIgb3V0IG9mIHJhbmdlXG4iKTsKLQkJICAgIGlmIChkb2MgIT0gTlVMTCkKLQkJCWRvYy0+ZW5jb2RpbmcgPSB4bWxTdHJkdXAoQkFEX0NBU1QgIklTTy04ODU5LTEiKTsKIAkJICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICImIyVkOyIsICpjdXIpOwogCQkgICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwogCQkgICAgcHRyID0gYnVmOwpAQCAtODQ0LDcgKzgzOSw3IEBACiAgICAgICogYWxsb2NhdGUgYW4gdHJhbnNsYXRpb24gYnVmZmVyLgogICAgICAqLwogICAgIGJ1ZmZlcl9zaXplID0gMTAwMDsKLSAgICBidWZmZXIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2MoYnVmZmVyX3NpemUgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvYyhidWZmZXJfc2l6ZSk7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEVudGl0aWVzRXJyTWVtb3J5KCJ4bWxFbmNvZGVTcGVjaWFsQ2hhcnM6IG1hbGxvYyBmYWlsZWQiKTsKIAlyZXR1cm4oTlVMTCk7CkBAIC0xMDEwLDcgKzEwMDUsNiBAQAogICovCiBzdGF0aWMgdm9pZAogeG1sRHVtcEVudGl0eUNvbnRlbnQoeG1sQnVmZmVyUHRyIGJ1ZiwgY29uc3QgeG1sQ2hhciAqY29udGVudCkgewotICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSByZXR1cm47CiAgICAgaWYgKHhtbFN0cmNocihjb250ZW50LCAnJScpKSB7CiAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBiYXNlLCAqY3VyOwogCmRpZmYgLS1naXQgYS9lcnJvci5jIGIvZXJyb3IuYwppbmRleCA1ZjQyZWFkLi5jODdjZjJhIDEwMDY0NAotLS0gYS9lcnJvci5jCisrKyBiL2Vycm9yLmMKQEAgLTE0LDExICsxNCwxMCBAQAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KIAotdm9pZCBYTUxDREVDTCB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYwkodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsCi0JCQkJIGNvbnN0IGNoYXIgKm1zZywKLQkJCQkgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisKKyNkZWZpbmUgWE1MX01BWF9FUlJPUlMgMTAwCiAKICNkZWZpbmUgWE1MX0dFVF9WQVJfU1RSKG1zZywgc3RyKSB7CQkJCVwKICAgICBpbnQgICAgICAgc2l6ZSwgcHJldl9zaXplID0gLTE7CQkJCVwKQEAgLTY3LDcgKzY2LDcgQEAKICAqCiAgKiBEZWZhdWx0IGhhbmRsZXIgZm9yIG91dCBvZiBjb250ZXh0IGVycm9yIG1lc3NhZ2VzLgogICovCi12b2lkIFhNTENERUNMCit2b2lkCiB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwgY29uc3QgY2hhciAqbXNnLCAuLi4pIHsKICAgICB2YV9saXN0IGFyZ3M7CiAKQEAgLTgzLDYgKzgyLDggQEAKICAqIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYzoKICAqIEBoYW5kbGVyOiAgdGhlIGhhbmRsZXIKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYy4KKyAqCiAgKiBTZXQgb3IgcmVzZXQgKGlmIE5VTEwpIHRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIGdlbmVyaWMgZXJyb3JzCiAgKiB0byB0aGUgYnVpbHRpbiBlcnJvciBmdW5jdGlvbi4KICAqLwpAQCAtMTYzLDcgKzE2NCw3IEBACiB9CiAKIC8qKgotICogeG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dDoKKyAqIHhtbFBhcnNlclByaW50RmlsZUNvbnRleHRJbnRlcm5hbDoKICAqIEBpbnB1dDogIGFuIHhtbFBhcnNlcklucHV0UHRyIGlucHV0CiAgKgogICogRGlzcGxheXMgY3VycmVudCBjb250ZXh0IHdpdGhpbiB0aGUgaW5wdXQgY29udGVudCBmb3IgZXJyb3IgdHJhY2tpbmcKQEAgLTE3Miw3ICsxNzMsNyBAQAogc3RhdGljIHZvaWQKIHhtbFBhcnNlclByaW50RmlsZUNvbnRleHRJbnRlcm5hbCh4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCAsCiAJCXhtbEdlbmVyaWNFcnJvckZ1bmMgY2hhbm5lbCwgdm9pZCAqZGF0YSApIHsKLSAgICBjb25zdCB4bWxDaGFyICpjdXIsICpiYXNlOworICAgIGNvbnN0IHhtbENoYXIgKmN1ciwgKmJhc2UsICpzdGFydDsKICAgICB1bnNpZ25lZCBpbnQgbiwgY29sOwkvKiBHQ0Mgd2FybnMgaWYgc2lnbmVkLCBiZWNhdXNlIGNvbXBhcmVkIHdpdGggc2l6ZW9mKCkgKi8KICAgICB4bWxDaGFyICBjb250ZW50WzgxXTsgLyogc3BhY2UgZm9yIDgwIGNoYXJzICsgbGluZSB0ZXJtaW5hdG9yICovCiAgICAgeG1sQ2hhciAqY3RudDsKQEAgLTE4OCwyMiArMTg5LDM1IEBACiAgICAgfQogICAgIG4gPSAwOwogICAgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGJlZ2lubmluZy1vZi1saW5lICh0byBtYXggYnVmZiBzaXplKSAqLwotICAgIHdoaWxlICgobisrIDwgKHNpemVvZihjb250ZW50KS0xKSkgJiYgKGN1ciA+IGJhc2UpICYmCi0JICAgKCooY3VyKSAhPSAnXG4nKSAmJiAoKihjdXIpICE9ICdccicpKQorICAgIHdoaWxlICgobiA8IHNpemVvZihjb250ZW50KSAtIDEpICYmIChjdXIgPiBiYXNlKSAmJgorCSAgICgqY3VyICE9ICdcbicpICYmICgqY3VyICE9ICdccicpKSB7CiAgICAgICAgIGN1ci0tOwotICAgIGlmICgoKihjdXIpID09ICdcbicpIHx8ICgqKGN1cikgPT0gJ1xyJykpIGN1cisrOworICAgICAgICBuKys7CisgICAgfQorICAgIGlmICgobiA+IDApICYmICgoKmN1ciA9PSAnXG4nKSB8fCAoKmN1ciA9PSAnXHInKSkpIHsKKyAgICAgICAgY3VyKys7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogc2tpcCBvdmVyIGNvbnRpbnVhdGlvbiBieXRlcyAqLworICAgICAgICB3aGlsZSAoKGN1ciA8IGlucHV0LT5jdXIpICYmICgoKmN1ciAmIDB4QzApID09IDB4ODApKQorICAgICAgICAgICAgY3VyKys7CisgICAgfQogICAgIC8qIGNhbGN1bGF0ZSB0aGUgZXJyb3IgcG9zaXRpb24gaW4gdGVybXMgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KICAgICBjb2wgPSBpbnB1dC0+Y3VyIC0gY3VyOwogICAgIC8qIHNlYXJjaCBmb3J3YXJkIGZvciBlbmQtb2YtbGluZSAodG8gbWF4IGJ1ZmYgc2l6ZSkgKi8KICAgICBuID0gMDsKLSAgICBjdG50ID0gY29udGVudDsKKyAgICBzdGFydCA9IGN1cjsKICAgICAvKiBjb3B5IHNlbGVjdGVkIHRleHQgdG8gb3VyIGJ1ZmZlciAqLwotICAgIHdoaWxlICgoKmN1ciAhPSAwKSAmJiAoKihjdXIpICE9ICdcbicpICYmCi0JICAgKCooY3VyKSAhPSAnXHInKSAmJiAobiA8IHNpemVvZihjb250ZW50KS0xKSkgewotCQkqY3RudCsrID0gKmN1cisrOwotCW4rKzsKKyAgICB3aGlsZSAoKCpjdXIgIT0gMCkgJiYgKCooY3VyKSAhPSAnXG4nKSAmJiAoKihjdXIpICE9ICdccicpKSB7CisgICAgICAgIGludCBsZW4gPSBpbnB1dC0+ZW5kIC0gY3VyOworICAgICAgICBpbnQgYyA9IHhtbEdldFVURjhDaGFyKGN1ciwgJmxlbik7CisKKyAgICAgICAgaWYgKChjIDwgMCkgfHwgKG4gKyBsZW4gPiBzaXplb2YoY29udGVudCktMSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VyICs9IGxlbjsKKwluICs9IGxlbjsKICAgICB9Ci0gICAgKmN0bnQgPSAwOworICAgIG1lbWNweShjb250ZW50LCBzdGFydCwgbik7CisgICAgY29udGVudFtuXSA9IDA7CiAgICAgLyogcHJpbnQgb3V0IHRoZSBzZWxlY3RlZCB0ZXh0ICovCiAgICAgY2hhbm5lbChkYXRhICwiJXNcbiIsIGNvbnRlbnQpOwogICAgIC8qIGNyZWF0ZSBibGFuayBsaW5lIHdpdGggcHJvYmxlbSBwb2ludGVyICovCkBAIC00NTEsNyArNDY1LDcgQEAKICAqIHRoZW4gZm9yd2FyZCB0aGUgZXJyb3IgbWVzc2FnZSBkb3duIHRoZSBwYXJzZXIgb3IgZ2VuZXJpYwogICogZXJyb3IgY2FsbGJhY2sgaGFuZGxlcgogICovCi12b2lkIFhNTENERUNMCit2b2lkCiBfX3htbFJhaXNlRXJyb3IoeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzY2hhbm5lbCwKICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBjaGFubmVsLCB2b2lkICpkYXRhLCB2b2lkICpjdHgsCiAgICAgICAgICAgICAgIHZvaWQgKm5vZCwgaW50IGRvbWFpbiwgaW50IGNvZGUsIHhtbEVycm9yTGV2ZWwgbGV2ZWwsCkBAIC00NzQsMTIgKzQ4OCwyNSBAQAogICAgICAgICAoZG9tYWluID09IFhNTF9GUk9NX0RURCkgfHwgKGRvbWFpbiA9PSBYTUxfRlJPTV9OQU1FU1BBQ0UpIHx8CiAJKGRvbWFpbiA9PSBYTUxfRlJPTV9JTykgfHwgKGRvbWFpbiA9PSBYTUxfRlJPTV9WQUxJRCkpIHsKIAljdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKLQlpZiAoKHNjaGFubmVsID09IE5VTEwpICYmIChjdHh0ICE9IE5VTEwpICYmIChjdHh0LT5zYXggIT0gTlVMTCkgJiYKLQkgICAgKGN0eHQtPnNheC0+aW5pdGlhbGl6ZWQgPT0gWE1MX1NBWDJfTUFHSUMpICYmCi0JICAgIChjdHh0LT5zYXgtPnNlcnJvciAhPSBOVUxMKSkgewotCSAgICBzY2hhbm5lbCA9IGN0eHQtPnNheC0+c2Vycm9yOwotCSAgICBkYXRhID0gY3R4dC0+dXNlckRhdGE7Ci0JfQorCisgICAgICAgIGlmIChjdHh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChsZXZlbCA9PSBYTUxfRVJSX1dBUk5JTkcpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3R4dC0+bmJXYXJuaW5ncyA+PSBYTUxfTUFYX0VSUk9SUykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGN0eHQtPm5iV2FybmluZ3MgKz0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGN0eHQtPm5iRXJyb3JzID49IFhNTF9NQVhfRVJST1JTKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY3R4dC0+bmJFcnJvcnMgKz0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChzY2hhbm5lbCA9PSBOVUxMKSAmJiAoY3R4dC0+c2F4ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgKGN0eHQtPnNheC0+aW5pdGlhbGl6ZWQgPT0gWE1MX1NBWDJfTUFHSUMpICYmCisgICAgICAgICAgICAgICAgKGN0eHQtPnNheC0+c2Vycm9yICE9IE5VTEwpKSB7CisgICAgICAgICAgICAgICAgc2NoYW5uZWwgPSBjdHh0LT5zYXgtPnNlcnJvcjsKKyAgICAgICAgICAgICAgICBkYXRhID0gY3R4dC0+dXNlckRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgLyoKICAgICAgKiBDaGVjayBpZiBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsZXIgc2V0CkBAIC02NzcsNyArNzA0LDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhbiBlcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwgcG9zaXRpb24gYW5kCiAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICovCi12b2lkIFhNTENERUNMCit2b2lkCiB4bWxQYXJzZXJFcnJvcih2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CkBAIC03MjAsNyArNzQ3LDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhIHdhcm5pbmcgbWVzc2FnZXMsIGdpdmVzIGZpbGUsIGxpbmUsIHBvc2l0aW9uIGFuZAogICogZXh0cmEgcGFyYW1ldGVycy4KICAqLwotdm9pZCBYTUxDREVDTAordm9pZAogeG1sUGFyc2VyV2FybmluZyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CkBAIC03NjksNyArNzk2LDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhbiB2YWxpZGl0eSBlcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwKICAqIGxpbmUsIHBvc2l0aW9uIGFuZCBleHRyYSBwYXJhbWV0ZXJzLgogICovCi12b2lkIFhNTENERUNMCit2b2lkCiB4bWxQYXJzZXJWYWxpZGl0eUVycm9yKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbXNnLCAuLi4pCiB7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKQEAgLTgxMyw3ICs4NDAsNyBAQAogICogRGlzcGxheSBhbmQgZm9ybWF0IGEgdmFsaWRpdHkgd2FybmluZyBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwKICAqIHBvc2l0aW9uIGFuZCBleHRyYSBwYXJhbWV0ZXJzLgogICovCi12b2lkIFhNTENERUNMCit2b2lkCiB4bWxQYXJzZXJWYWxpZGl0eVdhcm5pbmcodm9pZCAqY3R4LCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwpAQCAtODUzLDkgKzg4MCw5IEBACiAgKiBHZXQgdGhlIGxhc3QgZ2xvYmFsIGVycm9yIHJlZ2lzdGVyZWQuIFRoaXMgaXMgcGVyIHRocmVhZCBpZiBjb21waWxlZAogICogd2l0aCB0aHJlYWQgc3VwcG9ydC4KICAqCi0gKiBSZXR1cm5zIE5VTEwgaWYgbm8gZXJyb3Igb2NjdXJyZWQgb3IgYSBwb2ludGVyIHRvIHRoZSBlcnJvcgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVycm9yCiAgKi8KLXhtbEVycm9yUHRyCitjb25zdCB4bWxFcnJvciAqCiB4bWxHZXRMYXN0RXJyb3Iodm9pZCkKIHsKICAgICBpZiAoeG1sTGFzdEVycm9yLmNvZGUgPT0gWE1MX0VSUl9PSykKQEAgLTkxMiw3ICs5MzksNyBAQAogICoKICAqIFJldHVybnMgTlVMTCBpZiBubyBlcnJvciBvY2N1cnJlZCBvciBhIHBvaW50ZXIgdG8gdGhlIGVycm9yCiAgKi8KLXhtbEVycm9yUHRyCitjb25zdCB4bWxFcnJvciAqCiB4bWxDdHh0R2V0TGFzdEVycm9yKHZvaWQgKmN0eCkKIHsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwpAQCAtOTU0LDcgKzk4MSw3IEBACiAgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLgogICovCiBpbnQKLXhtbENvcHlFcnJvcih4bWxFcnJvclB0ciBmcm9tLCB4bWxFcnJvclB0ciB0bykgeworeG1sQ29weUVycm9yKGNvbnN0IHhtbEVycm9yICpmcm9tLCB4bWxFcnJvclB0ciB0bykgewogICAgIGNoYXIgKm1lc3NhZ2UsICpmaWxlLCAqc3RyMSwgKnN0cjIsICpzdHIzOwogCiAgICAgaWYgKChmcm9tID09IE5VTEwpIHx8ICh0byA9PSBOVUxMKSkKZGlmZiAtLWdpdCBhL2V4YW1wbGUvZ2pvYnJlYWQuYyBiL2V4YW1wbGUvZ2pvYnJlYWQuYwppbmRleCBkMDkyYzEyLi45MjZjYWIwIDEwMDY0NAotLS0gYS9leGFtcGxlL2dqb2JyZWFkLmMKKysrIGIvZXhhbXBsZS9nam9icmVhZC5jCkBAIC0xODQsMTggKzE4NCwxMSBAQAogICAgIHhtbE5zUHRyIG5zOwogICAgIHhtbE5vZGVQdHIgY3VyOwogCi0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogICAgIC8qCiAgICAgICogYnVpbGQgYW4gWE1MIHRyZWUgZnJvbSBhIHRoZSBmaWxlOwogICAgICAqLwotICAgIGRvYyA9IHhtbFBhcnNlRmlsZShmaWxlbmFtZSk7CisgICAgZG9jID0geG1sUmVhZEZpbGUoZmlsZW5hbWUsIE5VTEwsIFhNTF9QQVJTRV9OT0JMQU5LUyk7CiAgICAgaWYgKGRvYyA9PSBOVUxMKSByZXR1cm4oTlVMTCk7Ci0jZWxzZQotICAgIC8qCi0gICAgICogdGhlIGxpYnJhcnkgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBzb21lIG9mIHRoZSBvbGQgaW50ZXJmYWNlcwotICAgICAqLwotICAgIHJldHVybihOVUxMKTsKLSNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCiAKICAgICAvKgogICAgICAqIENoZWNrIHRoZSBkb2N1bWVudCBpcyBvZiB0aGUgcmlnaHQga2luZApAQCAtMjkxLDcgKzI4NCw2IEBACiAKICAgICAvKiBDT01QQVQ6IERvIG5vdCBnZW5lcmF0ZSBub2RlcyBmb3IgZm9ybWF0dGluZyBzcGFjZXMgKi8KICAgICBMSUJYTUxfVEVTVF9WRVJTSU9OCi0gICAgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCk7CiAKICAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYyA7IGkrKykgewogCWN1ciA9IHBhcnNlR2pvYkZpbGUoYXJndltpXSk7CmRpZmYgLS1naXQgYS9mdXp6Ly5naXRpZ25vcmUgYi9mdXp6Ly5naXRpZ25vcmUKaW5kZXggOWE1ZjcyYS4uMDQwNmZjNSAxMDA2NDQKLS0tIGEvZnV6ei8uZ2l0aWdub3JlCisrKyBiL2Z1enovLmdpdGlnbm9yZQpAQCAtNiw1ICs2LDcgQEAKIHNlZWQvCiB0ZXN0RnV6emVyCiB1cmkKK3ZhbGlkCit4aW5jbHVkZQogeG1sCiB4cGF0aApkaWZmIC0tZ2l0IGEvZnV6ei9NYWtlZmlsZS5hbSBiL2Z1enovTWFrZWZpbGUuYW0KaW5kZXggNmQ1OTgxNi4uZTQ5Y2EwNSAxMDA2NDQKLS0tIGEvZnV6ei9NYWtlZmlsZS5hbQorKysgYi9mdXp6L01ha2VmaWxlLmFtCkBAIC0xLDUgKzEsNSBAQAogQVVUT01BS0VfT1BUSU9OUyA9IC1Xbm8tc3ludGF4Ci1FWFRSQV9QUk9HUkFNUyA9IGdlblNlZWQgaHRtbCByZWdleHAgc2NoZW1hIHVyaSB4bWwgeHBhdGgKK0VYVFJBX1BST0dSQU1TID0gZ2VuU2VlZCBodG1sIHJlZ2V4cCBzY2hlbWEgdXJpIHZhbGlkIHhpbmNsdWRlIHhtbCB4cGF0aAogY2hlY2tfUFJPR1JBTVMgPSB0ZXN0RnV6emVyCiBFWFRSQV9ESVNUID0gaHRtbC5kaWN0IHJlZ2V4cC5kaWN0IHNjaGVtYS5kaWN0IHhtbC5kaWN0IHhwYXRoLmRpY3QgXAogCSAgICAgc3RhdGljX3NlZWQvdXJpIHN0YXRpY19zZWVkL3JlZ2V4cCBmdXp6LmgKQEAgLTE1LDExICsxNSwxMSBAQAogICAgICckKHRvcF9zcmNkaXIpL3Rlc3QvZXJyb3JzLyoueG1sJyBcCiAgICAgJyQodG9wX3NyY2RpcikvdGVzdC9lcnJvcnMxMC8qLnhtbCcgXAogICAgICckKHRvcF9zcmNkaXIpL3Rlc3QvbmFtZXNwYWNlcy8qJyBcCisgICAgJyQodG9wX3NyY2RpcikvdGVzdC9yZWN1cnNlLyoueG1sJyBcCiAgICAgJyQodG9wX3NyY2RpcikvdGVzdC9TVkcvKi54bWwnIFwKICAgICAnJCh0b3Bfc3JjZGlyKS90ZXN0L3ZhbGlkLyoueG1sJyBcCiAgICAgJyQodG9wX3NyY2RpcikvdGVzdC9WQy8qJyBcCiAgICAgJyQodG9wX3NyY2RpcikvdGVzdC9WQ00vKicgXAotICAgICckKHRvcF9zcmNkaXIpL3Rlc3QvWEluY2x1ZGUvZG9jcy8qJyBcCiAgICAgJyQodG9wX3NyY2RpcikvdGVzdC94bWxpZC8qJwogCiB0ZXN0RnV6emVyX1NPVVJDRVMgPSB0ZXN0RnV6emVyLmMgZnV6ei5jCkBAIC0yNyw3ICsyNyw3IEBACiAuUEhPTlk6IGNvcnB1cyBjbGVhbi1jb3JwdXMKIAogY29ycHVzOiBzZWVkL2h0bWwuc3RhbXAgc2VlZC9yZWdleHAuc3RhbXAgc2VlZC9zY2hlbWEuc3RhbXAgc2VlZC91cmkuc3RhbXAgXAotICAgIHNlZWQveG1sLnN0YW1wIHNlZWQveHBhdGguc3RhbXAKKyAgICBzZWVkL3ZhbGlkLnN0YW1wIHNlZWQveGluY2x1ZGUuc3RhbXAgc2VlZC94bWwuc3RhbXAgc2VlZC94cGF0aC5zdGFtcAogCiBjaGVjay1sb2NhbDogY29ycHVzCiAJLi90ZXN0RnV6emVyJChFWEVFWFQpCkBAIC00OSw3ICs0OSw3IEBACiAJQHRvdWNoIHNlZWQveG1sLnN0YW1wCiAKIHhtbF9TT1VSQ0VTID0geG1sLmMgZnV6ei5jCi14bWxfTERGTEFHUyA9IC1mc2FuaXRpemU9ZnV6emVyCit4bWxfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLWZzYW5pdGl6ZT1mdXp6ZXIKIAogZnV6ei14bWw6IHhtbCQoRVhFRVhUKSBzZWVkL3htbC5zdGFtcAogCUBta2RpciAtcCBjb3JwdXMveG1sCkBAIC01Nyw4ICs1Nyw0OSBAQAogCSAgICAtZGljdD14bWwuZGljdCBcCiAJICAgIC1tYXhfbGVuPSQoWE1MX01BWF9MRU4pIFwKIAkgICAgLXRpbWVvdXQ9MjAgXAorCSAgICAtcnNzX2xpbWl0X21iPTQwOTYgXAogCSAgICBjb3JwdXMveG1sIHNlZWQveG1sCiAKKyMgRFREIHZhbGlkYXRpb24gZnV6emVyCisKK3NlZWQvdmFsaWQuc3RhbXA6IGdlblNlZWQkKEVYRUVYVCkKKwlAbWtkaXIgLXAgc2VlZC92YWxpZAorCS4vZ2VuU2VlZCQoRVhFRVhUKSB2YWxpZCAkKFhNTF9TRUVEX0NPUlBVU19TUkMpCisJQHRvdWNoIHNlZWQvdmFsaWQuc3RhbXAKKwordmFsaWRfU09VUkNFUyA9IHZhbGlkLmMgZnV6ei5jCit2YWxpZF9MREZMQUdTID0gJChBTV9MREZMQUdTKSAtZnNhbml0aXplPWZ1enplcgorCitmdXp6LXZhbGlkOiB2YWxpZCQoRVhFRVhUKSBzZWVkL3ZhbGlkLnN0YW1wCisJQG1rZGlyIC1wIGNvcnB1cy92YWxpZAorCS4vdmFsaWQkKEVYRUVYVCkgXAorCSAgICAtZGljdD14bWwuZGljdCBcCisJICAgIC1tYXhfbGVuPSQoWE1MX01BWF9MRU4pIFwKKwkgICAgLXRpbWVvdXQ9MjAgXAorCSAgICAtcnNzX2xpbWl0X21iPTQwOTYgXAorCSAgICBjb3JwdXMvdmFsaWQgc2VlZC92YWxpZAorCisjIFhJbmNsdWRlIGZ1enplcgorCitzZWVkL3hpbmNsdWRlLnN0YW1wOiBnZW5TZWVkJChFWEVFWFQpCisJQG1rZGlyIC1wIHNlZWQveGluY2x1ZGUKKwkuL2dlblNlZWQkKEVYRUVYVCkgeGluY2x1ZGUgXAorCSAgICAnJCh0b3Bfc3JjZGlyKS90ZXN0L1hJbmNsdWRlL2RvY3MvKicgXAorCSAgICAnJCh0b3Bfc3JjZGlyKS90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyLyonCisJQHRvdWNoIHNlZWQveGluY2x1ZGUuc3RhbXAKKworeGluY2x1ZGVfU09VUkNFUyA9IHhpbmNsdWRlLmMgZnV6ei5jCit4aW5jbHVkZV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAtZnNhbml0aXplPWZ1enplcgorCitmdXp6LXhpbmNsdWRlOiB4aW5jbHVkZSQoRVhFRVhUKSBzZWVkL3hpbmNsdWRlLnN0YW1wCisJQG1rZGlyIC1wIGNvcnB1cy94aW5jbHVkZQorCS4veGluY2x1ZGUkKEVYRUVYVCkgXAorCSAgICAtZGljdD14bWwuZGljdCBcCisJICAgIC1tYXhfbGVuPSQoWE1MX01BWF9MRU4pIFwKKwkgICAgLXRpbWVvdXQ9MjAgXAorCSAgICAtcnNzX2xpbWl0X21iPTQwOTYgXAorCSAgICBjb3JwdXMveGluY2x1ZGUgc2VlZC94aW5jbHVkZQorCiAjIEhUTUwgZnV6emVyCiAKIHNlZWQvaHRtbC5zdGFtcDogZ2VuU2VlZCQoRVhFRVhUKQpAQCAtNjcsNyArMTA4LDcgQEAKIAlAdG91Y2ggc2VlZC9odG1sLnN0YW1wCiAKIGh0bWxfU09VUkNFUyA9IGh0bWwuYyBmdXp6LmMKLWh0bWxfTERGTEFHUyA9IC1mc2FuaXRpemU9ZnV6emVyCitodG1sX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpIC1mc2FuaXRpemU9ZnV6emVyCiAKIGZ1enotaHRtbDogaHRtbCQoRVhFRVhUKSBzZWVkL2h0bWwuc3RhbXAKIAlAbWtkaXIgLXAgY29ycHVzL2h0bWwKQEAgLTc1LDYgKzExNiw3IEBACiAJICAgIC1kaWN0PWh0bWwuZGljdCBcCiAJICAgIC1tYXhfbGVuPTEwMDAwMDAgXAogCSAgICAtdGltZW91dD0xMCBcCisJICAgIC1yc3NfbGltaXRfbWI9NDA5NiBcCiAJICAgIGNvcnB1cy9odG1sIHNlZWQvaHRtbAogCiAjIFJlZ2V4cCBmdXp6ZXIKQEAgLTg1LDkgKzEyNyw5IEBACiAJQHRvdWNoIHNlZWQvcmVnZXhwLnN0YW1wCiAKIHJlZ2V4cF9TT1VSQ0VTID0gcmVnZXhwLmMgZnV6ei5jCi1yZWdleHBfTERGTEFHUyA9IC1mc2FuaXRpemU9ZnV6emVyCityZWdleHBfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLWZzYW5pdGl6ZT1mdXp6ZXIKIAotZnV6ei1yZWdleHA6IHJlZ2V4cCQoRVhFRVhUKQorZnV6ei1yZWdleHA6IHJlZ2V4cCQoRVhFRVhUKSBzZWVkL3JlZ2V4cC5zdGFtcAogCUBta2RpciAtcCBjb3JwdXMvcmVnZXhwCiAJLi9yZWdleHAkKEVYRUVYVCkgXAogCSAgICAtZGljdD1yZWdleHAuZGljdCBcCkBAIC0xMDMsOSArMTQ1LDkgQEAKIAlAdG91Y2ggc2VlZC91cmkuc3RhbXAKIAogdXJpX1NPVVJDRVMgPSB1cmkuYyBmdXp6LmMKLXVyaV9MREZMQUdTID0gLWZzYW5pdGl6ZT1mdXp6ZXIKK3VyaV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAtZnNhbml0aXplPWZ1enplcgogCi1mdXp6LXVyaTogdXJpJChFWEVFWFQpCitmdXp6LXVyaTogdXJpJChFWEVFWFQpIHNlZWQvdXJpLnN0YW1wCiAJQG1rZGlyIC1wIGNvcnB1cy91cmkKIAkuL3VyaSQoRVhFRVhUKSBcCiAJICAgIC1tYXhfbGVuPTEwMDAwIFwKQEAgLTEyMCw3ICsxNjIsNyBAQAogCUB0b3VjaCBzZWVkL3NjaGVtYS5zdGFtcAogCiBzY2hlbWFfU09VUkNFUyA9IHNjaGVtYS5jIGZ1enouYwotc2NoZW1hX0xERkxBR1MgPSAtZnNhbml0aXplPWZ1enplcgorc2NoZW1hX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpIC1mc2FuaXRpemU9ZnV6emVyCiAKIGZ1enotc2NoZW1hOiBzY2hlbWEkKEVYRUVYVCkgc2VlZC9zY2hlbWEuc3RhbXAKIAlAbWtkaXIgLXAgY29ycHVzL3NjaGVtYQpAQCAtMTI4LDYgKzE3MCw3IEBACiAJICAgIC1kaWN0PXNjaGVtYS5kaWN0IFwKIAkgICAgLW1heF9sZW49JChYTUxfTUFYX0xFTikgXAogCSAgICAtdGltZW91dD0yMCBcCisJICAgIC1yc3NfbGltaXRfbWI9NDA5NiBcCiAJICAgIGNvcnB1cy9zY2hlbWEgc2VlZC9zY2hlbWEKIAogIyBYUGF0aCBmdXp6ZXIKQEAgLTEzOCw3ICsxODEsNyBAQAogCUB0b3VjaCBzZWVkL3hwYXRoLnN0YW1wCiAKIHhwYXRoX1NPVVJDRVMgPSB4cGF0aC5jIGZ1enouYwoteHBhdGhfTERGTEFHUyA9IC1mc2FuaXRpemU9ZnV6emVyCit4cGF0aF9MREZMQUdTID0gJChBTV9MREZMQUdTKSAtZnNhbml0aXplPWZ1enplcgogCiBmdXp6LXhwYXRoOiB4cGF0aCQoRVhFRVhUKSBzZWVkL3hwYXRoLnN0YW1wCiAJQG1rZGlyIC1wIGNvcnB1cy94cGF0aApAQCAtMTQ2LDUgKzE4OSw2IEBACiAJICAgIC1kaWN0PXhwYXRoLmRpY3QgXAogCSAgICAtbWF4X2xlbj0xMDAwMCBcCiAJICAgIC10aW1lb3V0PTIwIFwKKwkgICAgLXJzc19saW1pdF9tYj00MDk2IFwKIAkgICAgY29ycHVzL3hwYXRoIHNlZWQveHBhdGgKIApkaWZmIC0tZ2l0IGEvZnV6ei9mdXp6LmMgYi9mdXp6L2Z1enouYwppbmRleCBiZTJmMDY1Li41YWNlOTNkIDEwMDY0NAotLS0gYS9mdXp6L2Z1enouYworKysgYi9mdXp6L2Z1enouYwpAQCAtNDIsNiArNDIsMTAgQEAKICAgICB4bWxGdXp6RW50aXR5SW5mbyAqbWFpbkVudGl0eTsKIH0gZnV6ekRhdGE7CiAKK3NpemVfdCBmdXp6TnVtQWxsb2NzOworc2l6ZV90IGZ1enpNYXhBbGxvY3M7CitpbnQgZnV6ekFsbG9jRmFpbGVkOworCiAvKioKICAqIHhtbEZ1enpFcnJvckZ1bmM6CiAgKgpAQCAtNTIsNiArNTYsNjYgQEAKICAgICAgICAgICAgICAgICAgLi4uKSB7CiB9CiAKKy8qCisgKiBNYWxsb2MgZmFpbHVyZSBpbmplY3Rpb24uCisgKgorICogUXVpY2sgdGlwIHRvIGRlYnVnIGNvbXBsaWNhdGVkIGlzc3VlczogSW5jcmVhc2UgTUFMTE9DX09GRlNFVCB1bnRpbAorICogdGhlIGNyYXNoIGRpc2FwcGVhcnMgKG9yIGEgZGlmZmVyZW50IGlzc3VlIGlzIHRyaWdnZXJlZCkuIFRoZW4gc2V0CisgKiB0aGUgb2Zmc2V0IHRvIHRoZSBoaWdoZXN0IHZhbHVlIHRoYXQgcHJvZHVjZXMgYSBjcmFzaCBhbmQgc2V0CisgKiBNQUxMT0NfQUJPUlQgdG8gMSB0byBzZWUgd2hpY2ggZmFpbGVkIG1lbW9yeSBhbGxvY2F0aW9uIGNhdXNlcyB0aGUKKyAqIGlzc3VlLgorICovCisKKyNkZWZpbmUgWE1MX0ZVWlpfTUFMTE9DX09GRlNFVCAgMAorI2RlZmluZSBYTUxfRlVaWl9NQUxMT0NfQUJPUlQgICAwCisKK3N0YXRpYyB2b2lkICoKK3htbEZ1enpNYWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgICBpZiAoZnV6ek1heEFsbG9jcyA+IDApIHsKKyAgICAgICAgaWYgKGZ1enpOdW1BbGxvY3MgPj0gZnV6ek1heEFsbG9jcyAtIDEpIHsKKyNpZiBYTUxfRlVaWl9NQUxMT0NfQUJPUlQKKyAgICAgICAgICAgIGFib3J0KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGZ1enpBbGxvY0ZhaWxlZCA9IDE7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZnV6ek51bUFsbG9jcyArPSAxOworICAgIH0KKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgdm9pZCAqCit4bWxGdXp6UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7CisgICAgaWYgKGZ1enpNYXhBbGxvY3MgPiAwKSB7CisgICAgICAgIGlmIChmdXp6TnVtQWxsb2NzID49IGZ1enpNYXhBbGxvY3MgLSAxKSB7CisjaWYgWE1MX0ZVWlpfTUFMTE9DX0FCT1JUCisgICAgICAgICAgICBhYm9ydCgpOworI2VuZGlmCisgICAgICAgICAgICBmdXp6QWxsb2NGYWlsZWQgPSAxOworICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB9CisgICAgICAgIGZ1enpOdW1BbGxvY3MgKz0gMTsKKyAgICB9CisgICAgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKwordm9pZAoreG1sRnV6ek1lbVNldHVwKHZvaWQpIHsKKyAgICB4bWxNZW1TZXR1cChmcmVlLCB4bWxGdXp6TWFsbG9jLCB4bWxGdXp6UmVhbGxvYywgeG1sTWVtU3RyZHVwKTsKK30KKwordm9pZAoreG1sRnV6ek1lbVNldExpbWl0KHNpemVfdCBsaW1pdCkgeworICAgIGZ1enpOdW1BbGxvY3MgPSAwOworICAgIGZ1enpNYXhBbGxvY3MgPSBsaW1pdCA/IGxpbWl0ICsgWE1MX0ZVWlpfTUFMTE9DX09GRlNFVCA6IDA7CisgICAgZnV6ekFsbG9jRmFpbGVkID0gMDsKK30KKworaW50Cit4bWxGdXp6TWFsbG9jRmFpbGVkKHZvaWQpIHsKKyAgICByZXR1cm4gZnV6ekFsbG9jRmFpbGVkOworfQorCiAvKioKICAqIHhtbEZ1enpEYXRhSW5pdDoKICAqCkBAIC04NCwyMCArMTQ4LDQ1IEBACiB9CiAKIC8qKgorICogeG1sRnV6eldyaXRlSW50OgorICogQG91dDogIG91dHB1dCBmaWxlCisgKiBAdjogIGludGVnZXIgdG8gd3JpdGUKKyAqIEBzaXplOiAgc2l6ZSBvZiBpbnRlZ2VyIGluIGJ5dGVzCisgKgorICogV3JpdGUgYW4gaW50ZWdlciB0byB0aGUgZnV6eiBkYXRhLgorICovCit2b2lkCit4bWxGdXp6V3JpdGVJbnQoRklMRSAqb3V0LCBzaXplX3QgdiwgaW50IHNpemUpIHsKKyAgICBpbnQgc2hpZnQ7CisKKyAgICB3aGlsZSAoc2l6ZSA+IChpbnQpIHNpemVvZihzaXplX3QpKSB7CisgICAgICAgIHB1dGMoMCwgb3V0KTsKKyAgICAgICAgc2l6ZS0tOworICAgIH0KKworICAgIHNoaWZ0ID0gc2l6ZSAqIDg7CisgICAgd2hpbGUgKHNoaWZ0ID4gMCkgeworICAgICAgICBzaGlmdCAtPSA4OworICAgICAgICBwdXRjKCh2ID4+IHNoaWZ0KSAmIDI1NSwgb3V0KTsKKyAgICB9Cit9CisKKy8qKgogICogeG1sRnV6elJlYWRJbnQ6Ci0gKiBAc2l6ZTogIHNpemUgb2Ygc3RyaW5nIGluIGJ5dGVzCisgKiBAc2l6ZTogIHNpemUgb2YgaW50ZWdlciBpbiBieXRlcwogICoKICAqIFJlYWQgYW4gaW50ZWdlciBmcm9tIHRoZSBmdXp6IGRhdGEuCiAgKi8KLWludAoteG1sRnV6elJlYWRJbnQoKSB7Ci0gICAgaW50IHJldDsKK3NpemVfdAoreG1sRnV6elJlYWRJbnQoaW50IHNpemUpIHsKKyAgICBzaXplX3QgcmV0ID0gMDsKIAotICAgIGlmIChmdXp6RGF0YS5yZW1haW5pbmcgPCBzaXplb2YoaW50KSkKLSAgICAgICAgcmV0dXJuKDApOwotICAgIG1lbWNweSgmcmV0LCBmdXp6RGF0YS5wdHIsIHNpemVvZihpbnQpKTsKLSAgICBmdXp6RGF0YS5wdHIgKz0gc2l6ZW9mKGludCk7Ci0gICAgZnV6ekRhdGEucmVtYWluaW5nIC09IHNpemVvZihpbnQpOworICAgIHdoaWxlICgoc2l6ZSA+IDApICYmIChmdXp6RGF0YS5yZW1haW5pbmcgPiAwKSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgKmZ1enpEYXRhLnB0cisrOworICAgICAgICBmdXp6RGF0YS5yZW1haW5pbmctLTsKKyAgICAgICAgcmV0ID0gKHJldCA8PCA4KSB8IGM7CisgICAgICAgIHNpemUtLTsKKyAgICB9CiAKICAgICByZXR1cm4gcmV0OwogfQpAQCAtMTY2LDcgKzI1NSw4IEBACiAgICAgICAgICAgICBpZiAoYzIgPT0gJ1xuJykgewogICAgICAgICAgICAgICAgIGZ1enpEYXRhLnB0cisrOwogICAgICAgICAgICAgICAgIGZ1enpEYXRhLnJlbWFpbmluZy0tOwotICAgICAgICAgICAgICAgICpzaXplID0gZnV6ekRhdGEub3V0UHRyIC0gb3V0OworICAgICAgICAgICAgICAgIGlmIChzaXplICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICpzaXplID0gZnV6ekRhdGEub3V0UHRyIC0gb3V0OwogICAgICAgICAgICAgICAgICpmdXp6RGF0YS5vdXRQdHIrKyA9ICdcMCc7CiAgICAgICAgICAgICAgICAgcmV0dXJuKG91dCk7CiAgICAgICAgICAgICB9CkBAIC0xODAsMTIgKzI3MCwxNCBAQAogICAgIH0KIAogICAgIGlmIChmdXp6RGF0YS5vdXRQdHIgPiBvdXQpIHsKLSAgICAgICAgKnNpemUgPSBmdXp6RGF0YS5vdXRQdHIgLSBvdXQ7CisgICAgICAgIGlmIChzaXplICE9IE5VTEwpCisgICAgICAgICAgICAqc2l6ZSA9IGZ1enpEYXRhLm91dFB0ciAtIG91dDsKICAgICAgICAgKmZ1enpEYXRhLm91dFB0cisrID0gJ1wwJzsKICAgICAgICAgcmV0dXJuKG91dCk7CiAgICAgfQogCi0gICAgKnNpemUgPSAwOworICAgIGlmIChzaXplICE9IE5VTEwpCisgICAgICAgICpzaXplID0gMDsKICAgICByZXR1cm4oTlVMTCk7CiB9CiAKQEAgLTIwMSwxMCArMjkzLDEwIEBACiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICBjb25zdCBjaGFyICp1cmwsICplbnRpdHk7Ci0gICAgICAgIHNpemVfdCB1cmxTaXplLCBlbnRpdHlTaXplOworICAgICAgICBzaXplX3QgZW50aXR5U2l6ZTsKICAgICAgICAgeG1sRnV6ekVudGl0eUluZm8gKmVudGl0eUluZm87Ci0gICAgICAgIAotICAgICAgICB1cmwgPSB4bWxGdXp6UmVhZFN0cmluZygmdXJsU2l6ZSk7CisKKyAgICAgICAgdXJsID0geG1sRnV6elJlYWRTdHJpbmcoTlVMTCk7CiAgICAgICAgIGlmICh1cmwgPT0gTlVMTCkgYnJlYWs7CiAKICAgICAgICAgZW50aXR5ID0geG1sRnV6elJlYWRTdHJpbmcoJmVudGl0eVNpemUpOwpAQCAtMjcxLDcgKzM2Myw5IEBACiAgICAgICAgIHJldHVybihOVUxMKTsKIAogICAgIGlucHV0ID0geG1sTmV3SW5wdXRTdHJlYW0oY3R4dCk7Ci0gICAgaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKKyAgICBpZiAoaW5wdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIGlucHV0LT5maWxlbmFtZSA9IChjaGFyICopIHhtbENoYXJTdHJkdXAoVVJMKTsKICAgICBpbnB1dC0+YnVmID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0oZW50aXR5LT5kYXRhLCBlbnRpdHktPnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOwogICAgIGlmIChpbnB1dC0+YnVmID09IE5VTEwpIHsKQEAgLTI3OSw1MiArMzczLDExIEBACiAgICAgICAgIHJldHVybihOVUxMKTsKICAgICB9CiAgICAgaW5wdXQtPmJhc2UgPSBpbnB1dC0+Y3VyID0geG1sQnVmQ29udGVudChpbnB1dC0+YnVmLT5idWZmZXIpOwotICAgIGlucHV0LT5lbmQgPSBpbnB1dC0+YmFzZSArIGVudGl0eS0+c2l6ZTsKKyAgICBpbnB1dC0+ZW5kID0gaW5wdXQtPmJhc2UgKyB4bWxCdWZVc2UoaW5wdXQtPmJ1Zi0+YnVmZmVyKTsKIAogICAgIHJldHVybiBpbnB1dDsKIH0KIAotLyoqCi0gKiB4bWxGdXp6RXh0cmFjdFN0cmluZ3M6Ci0gKgotICogRXh0cmFjdCBDIHN0cmluZ3MgZnJvbSBpbnB1dCBkYXRhLiBVc2UgZXhhY3Qtc2l6ZSBhbGxvY2F0aW9ucyB0byBkZXRlY3QKLSAqIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLgotICovCi1zaXplX3QKLXhtbEZ1enpFeHRyYWN0U3RyaW5ncyhjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgY2hhciAqKnN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MpIHsKLSAgICBjb25zdCBjaGFyICpzdGFydCA9IGRhdGE7Ci0gICAgY29uc3QgY2hhciAqZW5kID0gZGF0YSArIHNpemU7Ci0gICAgc2l6ZV90IGkgPSAwLCByZXQ7Ci0KLSAgICB3aGlsZSAoaSA8IG51bVN0cmluZ3MpIHsKLSAgICAgICAgc2l6ZV90IHN0clNpemUgPSBlbmQgLSBzdGFydDsKLSAgICAgICAgY29uc3QgY2hhciAqemVybyA9IG1lbWNocihzdGFydCwgMCwgc3RyU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHplcm8gIT0gTlVMTCkKLSAgICAgICAgICAgIHN0clNpemUgPSB6ZXJvIC0gc3RhcnQ7Ci0KLSAgICAgICAgc3RyaW5nc1tpXSA9IHhtbE1hbGxvYyhzdHJTaXplICsgMSk7Ci0gICAgICAgIG1lbWNweShzdHJpbmdzW2ldLCBzdGFydCwgc3RyU2l6ZSk7Ci0gICAgICAgIHN0cmluZ3NbaV1bc3RyU2l6ZV0gPSAnXDAnOwotCi0gICAgICAgIGkrKzsKLSAgICAgICAgaWYgKHplcm8gIT0gTlVMTCkKLSAgICAgICAgICAgIHN0YXJ0ID0gemVybyArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldCA9IGk7Ci0KLSAgICB3aGlsZSAoaSA8IG51bVN0cmluZ3MpIHsKLSAgICAgICAgc3RyaW5nc1tpXSA9IE5VTEw7Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4ocmV0KTsKLX0KLQogY2hhciAqCiB4bWxTbHVycEZpbGUoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90ICpzaXplUmV0KSB7CiAgICAgRklMRSAqZmlsZTsKZGlmZiAtLWdpdCBhL2Z1enovZnV6ei5oIGIvZnV6ei9mdXp6LmgKaW5kZXggYTUxYjM5OC4uZmVhZmUxMSAxMDA2NDQKLS0tIGEvZnV6ei9mdXp6LmgKKysrIGIvZnV6ei9mdXp6LmgKQEAgLTE1LDcgKzE1LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKQorI2lmIGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkKICAgI2RlZmluZSBIQVZFX0hUTUxfRlVaWkVSCiAjZW5kaWYKICNpZiBkZWZpbmVkKExJQlhNTF9SRUdFWFBfRU5BQkxFRCkKQEAgLTI3LDEyICsyNywxNiBAQAogI2lmIDEKICAgI2RlZmluZSBIQVZFX1VSSV9GVVpaRVIKICNlbmRpZgotI2lmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKSAmJiBcCi0gICAgZGVmaW5lZChMSUJYTUxfUkVBREVSX0VOQUJMRUQpICYmIFwKLSAgICBkZWZpbmVkKExJQlhNTF9YSU5DTFVERV9FTkFCTEVEKQorI2lmIGRlZmluZWQoTElCWE1MX1ZBTElEX0VOQUJMRUQpCisgICNkZWZpbmUgSEFWRV9WQUxJRF9GVVpaRVIKKyNlbmRpZgorI2lmIGRlZmluZWQoTElCWE1MX1hJTkNMVURFX0VOQUJMRUQpCisgICNkZWZpbmUgSEFWRV9YSU5DTFVERV9GVVpaRVIKKyNlbmRpZgorI2lmIDEKICAgI2RlZmluZSBIQVZFX1hNTF9GVVpaRVIKICNlbmRpZgotI2lmIGRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpCisjaWYgZGVmaW5lZChMSUJYTUxfWFBUUl9FTkFCTEVEKQogICAjZGVmaW5lIEhBVkVfWFBBVEhfRlVaWkVSCiAjZW5kaWYKIApAQCAtNDcsMTMgKzUxLDI1IEBACiAgICAgICAgICAgICAgICAgIC4uLik7CiAKIHZvaWQKK3htbEZ1enpNZW1TZXR1cCh2b2lkKTsKKwordm9pZAoreG1sRnV6ek1lbVNldExpbWl0KHNpemVfdCBsaW1pdCk7CisKK2ludAoreG1sRnV6ek1hbGxvY0ZhaWxlZCh2b2lkKTsKKwordm9pZAogeG1sRnV6ekRhdGFJbml0KGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKIAogdm9pZAogeG1sRnV6ekRhdGFDbGVhbnVwKHZvaWQpOwogCi1pbnQKLXhtbEZ1enpSZWFkSW50KHZvaWQpOwordm9pZAoreG1sRnV6eldyaXRlSW50KEZJTEUgKm91dCwgc2l6ZV90IHYsIGludCBzaXplKTsKKworc2l6ZV90Cit4bWxGdXp6UmVhZEludChpbnQgc2l6ZSk7CiAKIGNvbnN0IGNoYXIgKgogeG1sRnV6elJlYWRSZW1haW5pbmcoc2l6ZV90ICpzaXplKTsKQEAgLTc2LDEwICs5Miw2IEBACiB4bWxQYXJzZXJJbnB1dFB0cgogeG1sRnV6ekVudGl0eUxvYWRlcihjb25zdCBjaGFyICpVUkwsIGNvbnN0IGNoYXIgKklELCB4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwogCi1zaXplX3QKLXhtbEZ1enpFeHRyYWN0U3RyaW5ncyhjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgY2hhciAqKnN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MpOwotCiBjaGFyICoKIHhtbFNsdXJwRmlsZShjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgKnNpemUpOwogCmRpZmYgLS1naXQgYS9mdXp6L2dlblNlZWQuYyBiL2Z1enovZ2VuU2VlZC5jCmluZGV4IDAxZjA2NTYuLmEzMTU0NzIgMTAwNjQ0Ci0tLSBhL2Z1enovZ2VuU2VlZC5jCisrKyBiL2Z1enovZ2VuU2VlZC5jCkBAIC00Myw2ICs0Myw4IEBACiAgICAgY2hhciBjd2RbUEFUSF9TSVpFXTsKIH0gZ2xvYmFsRGF0YTsKIAorI2lmIGRlZmluZWQoSEFWRV9TQ0hFTUFfRlVaWkVSKSB8fCBcCisgICAgZGVmaW5lZChIQVZFX1hNTF9GVVpaRVIpCiAvKgogICogQSBjdXN0b20gZW50aXR5IGxvYWRlciB0aGF0IHdyaXRlcyBhbGwgZXh0ZXJuYWwgRFREcyBvciBlbnRpdGllcyB0byBhCiAgKiBzaW5nbGUgZmlsZSBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHhtbEZ1enpFbnRpdHlMb2FkZXIuCkBAIC04MCw3ICs4Miw4IEBACiAKICAgICB4bWxGcmVlSW5wdXRTdHJlYW0oaW4pOwogCi0gICAgeG1sSGFzaEFkZEVudHJ5KGdsb2JhbERhdGEuZW50aXRpZXMsIChjb25zdCB4bWxDaGFyICopIFVSTCwgTlVMTCk7CisgICAgeG1sSGFzaEFkZEVudHJ5KGdsb2JhbERhdGEuZW50aXRpZXMsIChjb25zdCB4bWxDaGFyICopIFVSTCwKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YS5lbnRpdGllcyk7CiAKICAgICByZXR1cm4oeG1sTm9OZXRFeHRlcm5hbEVudGl0eUxvYWRlcihVUkwsIElELCBjdHh0KSk7CiB9CkBAIC05NCwxMyArOTcsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZ1enpSZWNvcmRlckNsZWFudXAoKSB7CitmdXp6UmVjb3JkZXJDbGVhbnVwKHZvaWQpIHsKICAgICB4bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcihnbG9iYWxEYXRhLm9sZExvYWRlcik7Ci0gICAgeG1sSGFzaEZyZWUoZ2xvYmFsRGF0YS5lbnRpdGllcywgeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcik7CisgICAgeG1sSGFzaEZyZWUoZ2xvYmFsRGF0YS5lbnRpdGllcywgTlVMTCk7CiAgICAgZ2xvYmFsRGF0YS5vdXQgPSBOVUxMOwogICAgIGdsb2JhbERhdGEuZW50aXRpZXMgPSBOVUxMOwogICAgIGdsb2JhbERhdGEub2xkTG9hZGVyID0gTlVMTDsKIH0KKyNlbmRpZgogCiAjaWZkZWYgSEFWRV9YTUxfRlVaWkVSCiBzdGF0aWMgaW50CkBAIC0xMDgsMTIgKzExMiwxNyBAQAogICAgIGludCBvcHRzID0gWE1MX1BBUlNFX05PRU5UIHwgWE1MX1BBUlNFX0RURExPQUQ7CiAgICAgeG1sRG9jUHRyIGRvYzsKIAotICAgIGZ3cml0ZSgmb3B0cywgc2l6ZW9mKG9wdHMpLCAxLCBvdXQpOworICAgIC8qIFBhcnNlciBvcHRpb25zLiAqLworICAgIHhtbEZ1enpXcml0ZUludChvdXQsIG9wdHMsIDQpOworICAgIC8qIE1heCBhbGxvY2F0aW9ucy4gKi8KKyAgICB4bWxGdXp6V3JpdGVJbnQob3V0LCAwLCA0KTsKIAogICAgIGZ1enpSZWNvcmRlckluaXQob3V0KTsKIAogICAgIGRvYyA9IHhtbFJlYWRGaWxlKGRvY0ZpbGUsIE5VTEwsIG9wdHMpOworI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECiAgICAgeG1sWEluY2x1ZGVQcm9jZXNzRmxhZ3MoZG9jLCBvcHRzKTsKKyNlbmRpZgogICAgIHhtbEZyZWVEb2MoZG9jKTsKIAogICAgIGZ1enpSZWNvcmRlckNsZWFudXAoKTsKQEAgLTEyOCw5ICsxMzcsMTEgQEAKICAgICBjaGFyIGJ1ZltTRUVEX0JVRl9TSVpFXTsKICAgICBGSUxFICpmaWxlOwogICAgIHNpemVfdCBzaXplOwotICAgIGludCBvcHRzID0gMDsKIAotICAgIGZ3cml0ZSgmb3B0cywgc2l6ZW9mKG9wdHMpLCAxLCBvdXQpOworICAgIC8qIFBhcnNlciBvcHRpb25zLiAqLworICAgIHhtbEZ1enpXcml0ZUludChvdXQsIDAsIDQpOworICAgIC8qIE1heCBhbGxvY2F0aW9ucy4gKi8KKyAgICB4bWxGdXp6V3JpdGVJbnQob3V0LCAwLCA0KTsKIAogICAgIC8qIENvcHkgZmlsZSAqLwogICAgIGZpbGUgPSBmb3Blbihkb2NGaWxlLCAicmIiKTsKQEAgLTE1NSw2ICsxNjYsOSBAQAogICAgIHhtbFNjaGVtYVB0ciBzY2hlbWE7CiAgICAgeG1sU2NoZW1hUGFyc2VyQ3R4dFB0ciBwY3R4dDsKIAorICAgIC8qIE1heCBhbGxvY2F0aW9ucy4gKi8KKyAgICB4bWxGdXp6V3JpdGVJbnQob3V0LCAwLCA0KTsKKwogICAgIGZ1enpSZWNvcmRlckluaXQob3V0KTsKIAogICAgIHBjdHh0ID0geG1sU2NoZW1hTmV3UGFyc2VyQ3R4dChkb2NGaWxlKTsKQEAgLTE2OSwxMSArMTgzLDE1IEBACiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoSEFWRV9IVE1MX0ZVWlpFUikgfHwgXAorICAgIGRlZmluZWQoSEFWRV9TQ0hFTUFfRlVaWkVSKSB8fCBcCisgICAgZGVmaW5lZChIQVZFX1hNTF9GVVpaRVIpCiBzdGF0aWMgaW50CiBwcm9jZXNzUGF0dGVybihjb25zdCBjaGFyICpwYXR0ZXJuKSB7CiAgICAgZ2xvYl90IGdsb2JidWY7CiAgICAgaW50IHJldCA9IDA7Ci0gICAgaW50IHJlcywgaTsKKyAgICBpbnQgcmVzOworICAgIHNpemVfdCBpOwogCiAgICAgcmVzID0gZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCAmZ2xvYmJ1Zik7CiAgICAgaWYgKHJlcyA9PSBHTE9CX05PTUFUQ0gpCkBAIC0yNDUsNiArMjYzLDcgQEAKICAgICBnbG9iZnJlZSgmZ2xvYmJ1Zik7CiAgICAgcmV0dXJuKHJldCk7CiB9CisjZW5kaWYKIAogI2lmZGVmIEhBVkVfWFBBVEhfRlVaWkVSCiBzdGF0aWMgaW50CkBAIC0yODIsNyArMzAxLDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgd2hpbGUgKGZnZXRzKGV4cHIsIEVYUFJfU0laRSwgaW4pID4gMCkgeworICAgICAgICB3aGlsZSAoZmdldHMoZXhwciwgRVhQUl9TSVpFLCBpbikgIT0gTlVMTCkgewogICAgICAgICAgICAgY2hhciBvdXRQYXRoW1BBVEhfU0laRV07CiAgICAgICAgICAgICBGSUxFICpvdXQ7CiAgICAgICAgICAgICBpbnQgajsKQEAgLTMwNCw2ICszMjMsOSBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvKiBNYXggYWxsb2NhdGlvbnMuICovCisgICAgICAgICAgICB4bWxGdXp6V3JpdGVJbnQob3V0LCAwLCA0KTsKKwogICAgICAgICAgICAgaWYgKHhwdHIpIHsKICAgICAgICAgICAgICAgICB4bWxGdXp6V3JpdGVTdHJpbmcob3V0LCBleHByKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjgsNyArMzUwLDcgQEAKICAgICByZXR1cm4ocmV0KTsKIH0KIAotaW50CitzdGF0aWMgaW50CiBwcm9jZXNzWFBhdGhEaXIoY29uc3QgY2hhciAqdGVzdERpcikgewogICAgIGNoYXIgcGF0dGVybltQQVRIX1NJWkVdOwogICAgIGdsb2JfdCBnbG9iYnVmOwpAQCAtMzc5LDcgKzQwMSw2IEBACiAgICAgbWFpbkZ1bmMgcHJvY2Vzc0FyZyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqZnV6emVyOwogICAgIGludCByZXQgPSAwOwotICAgIGludCB4cGF0aCA9IDA7CiAgICAgaW50IGk7CiAKICAgICBpZiAoYXJnYyA8IDMpIHsKQEAgLTQwMCw2ICs0MjEsMTYgQEAKICAgICAgICAgcHJvY2Vzc0FyZyA9IHByb2Nlc3NQYXR0ZXJuOwogICAgICAgICBnbG9iYWxEYXRhLnByb2Nlc3NGaWxlID0gcHJvY2Vzc1NjaGVtYTsKICNlbmRpZgorICAgIH0gZWxzZSBpZiAoc3RyY21wKGZ1enplciwgInZhbGlkIikgPT0gMCkgeworI2lmZGVmIEhBVkVfVkFMSURfRlVaWkVSCisgICAgICAgIHByb2Nlc3NBcmcgPSBwcm9jZXNzUGF0dGVybjsKKyAgICAgICAgZ2xvYmFsRGF0YS5wcm9jZXNzRmlsZSA9IHByb2Nlc3NYbWw7CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChmdXp6ZXIsICJ4aW5jbHVkZSIpID09IDApIHsKKyNpZmRlZiBIQVZFX1hJTkNMVURFX0ZVWlpFUgorICAgICAgICBwcm9jZXNzQXJnID0gcHJvY2Vzc1BhdHRlcm47CisgICAgICAgIGdsb2JhbERhdGEucHJvY2Vzc0ZpbGUgPSBwcm9jZXNzWG1sOworI2VuZGlmCiAgICAgfSBlbHNlIGlmIChzdHJjbXAoZnV6emVyLCAieG1sIikgPT0gMCkgewogI2lmZGVmIEhBVkVfWE1MX0ZVWlpFUgogICAgICAgICBwcm9jZXNzQXJnID0gcHJvY2Vzc1BhdHRlcm47CmRpZmYgLS1naXQgYS9mdXp6L2h0bWwuYyBiL2Z1enovaHRtbC5jCmluZGV4IDExNmIzZGYuLmFhOGQ5ZDkgMTAwNjQ0Ci0tLSBhL2Z1enovaHRtbC5jCisrKyBiL2Z1enovaHRtbC5jCkBAIC0xMiw2ICsxMiw3IEBACiBpbnQKIExMVk1GdXp6ZXJJbml0aWFsaXplKGludCAqYXJnYyBBVFRSSUJVVEVfVU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICB4bWxGdXp6TWVtU2V0dXAoKTsKICAgICB4bWxJbml0UGFyc2VyKCk7CiAjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAogICAgIHhtbEluaXRpYWxpemVDYXRhbG9nKCk7CkBAIC0yMywxNiArMjQsMTQgQEAKIAogaW50CiBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhDaHVua1NpemUgPSAxMjg7CiAgICAgaHRtbERvY1B0ciBkb2M7Ci0gICAgaHRtbFBhcnNlckN0eHRQdHIgY3R4dDsKLSAgICB4bWxPdXRwdXRCdWZmZXJQdHIgb3V0OwogICAgIGNvbnN0IGNoYXIgKmRvY0J1ZmZlcjsKLSAgICBzaXplX3QgZG9jU2l6ZSwgY29uc3VtZWQsIGNodW5rU2l6ZTsKLSAgICBpbnQgb3B0cywgb3V0U2l6ZTsKKyAgICBzaXplX3QgbWF4QWxsb2MsIGRvY1NpemU7CisgICAgaW50IG9wdHM7CiAKICAgICB4bWxGdXp6RGF0YUluaXQoZGF0YSwgc2l6ZSk7Ci0gICAgb3B0cyA9IHhtbEZ1enpSZWFkSW50KCk7CisgICAgb3B0cyA9IChpbnQpIHhtbEZ1enpSZWFkSW50KDQpOworICAgIG1heEFsbG9jID0geG1sRnV6elJlYWRJbnQoNCkgJSAoc2l6ZSArIDEpOwogCiAgICAgZG9jQnVmZmVyID0geG1sRnV6elJlYWRSZW1haW5pbmcoJmRvY1NpemUpOwogICAgIGlmIChkb2NCdWZmZXIgPT0gTlVMTCkgewpAQCAtNDIsMzggKzQxLDU4IEBACiAKICAgICAvKiBQdWxsIHBhcnNlciAqLwogCisgICAgeG1sRnV6ek1lbVNldExpbWl0KG1heEFsbG9jKTsKICAgICBkb2MgPSBodG1sUmVhZE1lbW9yeShkb2NCdWZmZXIsIGRvY1NpemUsIE5VTEwsIE5VTEwsIG9wdHMpOwogCi0gICAgLyoKLSAgICAgKiBBbHNvIHRlc3QgdGhlIHNlcmlhbGl6ZXIuIENhbGwgaHRtbERvY0NvbnRlbnREdW1wT3V0cHV0IHdpdGggb3VyCi0gICAgICogb3duIGJ1ZmZlciB0byBhdm9pZCBlbmNvZGluZyB0aGUgb3V0cHV0LiBUaGUgSFRNTCBlbmNvZGluZyBpcwotICAgICAqIGV4Y3J1Y2lhdGluZ2x5IHNsb3cgKHNlZSBodG1sRW50aXR5VmFsdWVMb29rdXApLgotICAgICAqLwotICAgIG91dCA9IHhtbEFsbG9jT3V0cHV0QnVmZmVyKE5VTEwpOwotICAgIGh0bWxEb2NDb250ZW50RHVtcE91dHB1dChvdXQsIGRvYywgTlVMTCk7Ci0gICAgeG1sT3V0cHV0QnVmZmVyQ2xvc2Uob3V0KTsKKyNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKKyAgICB7CisgICAgICAgIHhtbE91dHB1dEJ1ZmZlclB0ciBvdXQ7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQWxzbyB0ZXN0IHRoZSBzZXJpYWxpemVyLiBDYWxsIGh0bWxEb2NDb250ZW50RHVtcE91dHB1dCB3aXRoIG91cgorICAgICAgICAgKiBvd24gYnVmZmVyIHRvIGF2b2lkIGVuY29kaW5nIHRoZSBvdXRwdXQuIFRoZSBIVE1MIGVuY29kaW5nIGlzCisgICAgICAgICAqIGV4Y3J1Y2lhdGluZ2x5IHNsb3cgKHNlZSBodG1sRW50aXR5VmFsdWVMb29rdXApLgorICAgICAgICAgKi8KKyAgICAgICAgb3V0ID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoTlVMTCk7CisgICAgICAgIGh0bWxEb2NDb250ZW50RHVtcE91dHB1dChvdXQsIGRvYywgTlVMTCk7CisgICAgICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dCk7CisgICAgfQorI2VuZGlmCiAKICAgICB4bWxGcmVlRG9jKGRvYyk7CiAKICAgICAvKiBQdXNoIHBhcnNlciAqLwogCi0gICAgY3R4dCA9IGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dChOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7Ci0gICAgaHRtbEN0eHRVc2VPcHRpb25zKGN0eHQsIG9wdHMpOworI2lmZGVmIExJQlhNTF9QVVNIX0VOQUJMRUQKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4Q2h1bmtTaXplID0gMTI4OworICAgICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgICAgIHNpemVfdCBjb25zdW1lZCwgY2h1bmtTaXplOwogCi0gICAgZm9yIChjb25zdW1lZCA9IDA7IGNvbnN1bWVkIDwgZG9jU2l6ZTsgY29uc3VtZWQgKz0gY2h1bmtTaXplKSB7Ci0gICAgICAgIGNodW5rU2l6ZSA9IGRvY1NpemUgLSBjb25zdW1lZDsKLSAgICAgICAgaWYgKGNodW5rU2l6ZSA+IG1heENodW5rU2l6ZSkKLSAgICAgICAgICAgIGNodW5rU2l6ZSA9IG1heENodW5rU2l6ZTsKLSAgICAgICAgaHRtbFBhcnNlQ2h1bmsoY3R4dCwgZG9jQnVmZmVyICsgY29uc3VtZWQsIGNodW5rU2l6ZSwgMCk7CisgICAgICAgIHhtbEZ1enpNZW1TZXRMaW1pdChtYXhBbGxvYyk7CisgICAgICAgIGN0eHQgPSBodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKworICAgICAgICBpZiAoY3R4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICBodG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0cyk7CisKKyAgICAgICAgICAgIGZvciAoY29uc3VtZWQgPSAwOyBjb25zdW1lZCA8IGRvY1NpemU7IGNvbnN1bWVkICs9IGNodW5rU2l6ZSkgeworICAgICAgICAgICAgICAgIGNodW5rU2l6ZSA9IGRvY1NpemUgLSBjb25zdW1lZDsKKyAgICAgICAgICAgICAgICBpZiAoY2h1bmtTaXplID4gbWF4Q2h1bmtTaXplKQorICAgICAgICAgICAgICAgICAgICBjaHVua1NpemUgPSBtYXhDaHVua1NpemU7CisgICAgICAgICAgICAgICAgaHRtbFBhcnNlQ2h1bmsoY3R4dCwgZG9jQnVmZmVyICsgY29uc3VtZWQsIGNodW5rU2l6ZSwgMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGh0bWxQYXJzZUNodW5rKGN0eHQsIE5VTEwsIDAsIDEpOworICAgICAgICAgICAgeG1sRnJlZURvYyhjdHh0LT5teURvYyk7CisgICAgICAgICAgICBodG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBodG1sUGFyc2VDaHVuayhjdHh0LCBOVUxMLCAwLCAxKTsKLSAgICB4bWxGcmVlRG9jKGN0eHQtPm15RG9jKTsKLSAgICBodG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisjZW5kaWYKIAogICAgIC8qIENsZWFudXAgKi8KIAorICAgIHhtbEZ1enpNZW1TZXRMaW1pdCgwKTsKICAgICB4bWxGdXp6RGF0YUNsZWFudXAoKTsKICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogCmRpZmYgLS1naXQgYS9mdXp6L3JlZ2V4cC5jIGIvZnV6ei9yZWdleHAuYwppbmRleCBhZjEyMTBhLi4zNWYyZTU4IDEwMDY0NAotLS0gYS9mdXp6L3JlZ2V4cC5jCisrKyBiL2Z1enovcmVnZXhwLmMKQEAgLTQsMTIgKzQsMTUgQEAKICAqIFNlZSBDb3B5cmlnaHQgZm9yIHRoZSBzdGF0dXMgb2YgdGhpcyBzb2Z0d2FyZS4KICAqLwogCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1scmVnZXhwLmg+CiAjaW5jbHVkZSAiZnV6ei5oIgogCiBpbnQKIExMVk1GdXp6ZXJJbml0aWFsaXplKGludCAqYXJnYyBBVFRSSUJVVEVfVU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICB4bWxGdXp6TWVtU2V0dXAoKTsKICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKE5VTEwsIHhtbEZ1enpFcnJvckZ1bmMpOwogCiAgICAgcmV0dXJuIDA7CkBAIC0xOCwyOCArMjEsMzAgQEAKIGludAogTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgIHhtbFJlZ2V4cFB0ciByZWdleHA7Ci0gICAgY2hhciAqc3RyWzJdID0geyBOVUxMLCBOVUxMIH07Ci0gICAgc2l6ZV90IG51bVN0cmluZ3M7CisgICAgc2l6ZV90IG1heEFsbG9jOworICAgIGNvbnN0IGNoYXIgKnN0cjE7CiAKICAgICBpZiAoc2l6ZSA+IDIwMCkKICAgICAgICAgcmV0dXJuKDApOwogCi0gICAgbnVtU3RyaW5ncyA9IHhtbEZ1enpFeHRyYWN0U3RyaW5ncyhkYXRhLCBzaXplLCBzdHIsIDIpOworICAgIHhtbEZ1enpEYXRhSW5pdChkYXRhLCBzaXplKTsKKyAgICBtYXhBbGxvYyA9IHhtbEZ1enpSZWFkSW50KDQpICUgKHNpemUgKiA4ICsgMSk7CisgICAgc3RyMSA9IHhtbEZ1enpSZWFkU3RyaW5nKE5VTEwpOwogCi0gICAgLyogQ1VSX1NDSEFSIGRvZXNuJ3QgaGFuZGxlIGludmFsaWQgVVRGLTggYW5kIG1heSBjYXVzZSBpbmZpbml0ZSBsb29wcy4gKi8KLSAgICBpZiAoeG1sQ2hlY2tVVEY4KEJBRF9DQVNUIHN0clswXSkgIT0gMCkgewotICAgICAgICByZWdleHAgPSB4bWxSZWdleHBDb21waWxlKEJBRF9DQVNUIHN0clswXSk7Ci0gICAgICAgIC8qIHhtbFJlZ2V4cEV4ZWMgaGFzIHBhdGhvbG9naWNhbCBwZXJmb3JtYW5jZSBpbiB0b28gbWFueSBjYXNlcy4gKi8KLSNpZiAwCi0gICAgICAgIGlmICgocmVnZXhwICE9IE5VTEwpICYmIChudW1TdHJpbmdzID49IDIpKSB7Ci0gICAgICAgICAgICB4bWxSZWdleHBFeGVjKHJlZ2V4cCwgQkFEX0NBU1Qgc3RyWzFdKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHhtbFJlZ0ZyZWVSZWdleHAocmVnZXhwKTsKKyAgICB4bWxGdXp6TWVtU2V0TGltaXQobWF4QWxsb2MpOworICAgIHJlZ2V4cCA9IHhtbFJlZ2V4cENvbXBpbGUoQkFEX0NBU1Qgc3RyMSk7CisgICAgaWYgKHhtbEZ1enpNYWxsb2NGYWlsZWQoKSAmJiByZWdleHAgIT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIG5vdCByZXBvcnRlZFxuIik7CisgICAgICAgIGFib3J0KCk7CiAgICAgfQorICAgIC8qIHhtbFJlZ2V4cEV4ZWMgaGFzIHBhdGhvbG9naWNhbCBwZXJmb3JtYW5jZSBpbiB0b28gbWFueSBjYXNlcy4gKi8KKyNpZiAwCisgICAgeG1sUmVnZXhwRXhlYyhyZWdleHAsIEJBRF9DQVNUIHN0cjIpOworI2VuZGlmCisgICAgeG1sUmVnRnJlZVJlZ2V4cChyZWdleHApOwogCi0gICAgeG1sRnJlZShzdHJbMF0pOwotICAgIHhtbEZyZWUoc3RyWzFdKTsKKyAgICB4bWxGdXp6TWVtU2V0TGltaXQoMCk7CisgICAgeG1sRnV6ekRhdGFDbGVhbnVwKCk7CiAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnV6ei9zY2hlbWEuYyBiL2Z1enovc2NoZW1hLmMKaW5kZXggNjg5YmZmZS4uMDRlOTJmOSAxMDA2NDQKLS0tIGEvZnV6ei9zY2hlbWEuYworKysgYi9mdXp6L3NjaGVtYS5jCkBAIC0xMSw2ICsxMSw3IEBACiBpbnQKIExMVk1GdXp6ZXJJbml0aWFsaXplKGludCAqYXJnYyBBVFRSSUJVVEVfVU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICB4bWxGdXp6TWVtU2V0dXAoKTsKICAgICB4bWxJbml0UGFyc2VyKCk7CiAjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAogICAgIHhtbEluaXRpYWxpemVDYXRhbG9nKCk7CkBAIC0yNCwxOCArMjUsMjMgQEAKIGludAogTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgIHhtbFNjaGVtYVBhcnNlckN0eHRQdHIgcGN0eHQ7CisgICAgc2l6ZV90IG1heEFsbG9jOwogCiAgICAgaWYgKHNpemUgPiA1MDAwMCkKICAgICAgICAgcmV0dXJuKDApOwogCisgICAgbWF4QWxsb2MgPSB4bWxGdXp6UmVhZEludCg0KSAlIChzaXplICsgMSk7CisKICAgICB4bWxGdXp6RGF0YUluaXQoZGF0YSwgc2l6ZSk7CiAgICAgeG1sRnV6elJlYWRFbnRpdGllcygpOwogCisgICAgeG1sRnV6ek1lbVNldExpbWl0KG1heEFsbG9jKTsKICAgICBwY3R4dCA9IHhtbFNjaGVtYU5ld1BhcnNlckN0eHQoeG1sRnV6ek1haW5VcmwoKSk7CiAgICAgeG1sU2NoZW1hU2V0UGFyc2VyRXJyb3JzKHBjdHh0LCB4bWxGdXp6RXJyb3JGdW5jLCB4bWxGdXp6RXJyb3JGdW5jLCBOVUxMKTsKICAgICB4bWxTY2hlbWFGcmVlKHhtbFNjaGVtYVBhcnNlKHBjdHh0KSk7CiAgICAgeG1sU2NoZW1hRnJlZVBhcnNlckN0eHQocGN0eHQpOwogCisgICAgeG1sRnV6ek1lbVNldExpbWl0KDApOwogICAgIHhtbEZ1enpEYXRhQ2xlYW51cCgpOwogICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0xIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEKaW5kZXggZGVkNzc1ZS4uMmE2MWQwZCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEwIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEwCmluZGV4IDY3MDBkNzcuLmE4NjdhZmUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0xMAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTExIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTExCmluZGV4IGQ4M2Y5MTguLmNmMjIwMzQgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0xMQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEyIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEyCmluZGV4IGI0NGRiYTUuLjFkZDA2ZDUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0xMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEzIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTEzCmluZGV4IDY0ZTUwYTAuLmQzMDMzZDIgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0xMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTIgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMgppbmRleCA4MjkzZDgxLi5jZDI3OTExIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtMyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0zCmluZGV4IDY5NmFmOWIuLjY0NDM3YzggMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0zCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC00IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTQKaW5kZXggODMxNzk5OC4uNTU2YmJhMiAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTQKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTUgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtNQppbmRleCA2YjZkYjhiLi5jZGY5MDk4IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtNQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtNiBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC02CmluZGV4IDRmNDc3OTAuLmY2OGY1NTIgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC02CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC02CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC03IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTcKaW5kZXggNjMzNGY3Mi4uYTdlOGU5MSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTcKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnJhbmNoLTggYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtOAppbmRleCBmNzdhOGY0Li4wNjM3YTY5IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtOAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9icmFuY2gtOSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC05CmluZGV4IGFjZDBlZWMuLjZjYmQzNWUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC05CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2JyYW5jaC05CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEKaW5kZXggOWYwYTUwNC4uNzQyNzgyYyAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEwIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEwCmluZGV4IDYwNjg1YmIuLjA5ZWFjY2MgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xMAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTExIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTExCmluZGV4IDcyYTc5NTYuLjk5MWQxOWEgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xMQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEyIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEyCmluZGV4IDg1NDE2ZWUuLmRkNDNkYTggMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEzIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTEzCmluZGV4IGM5MWQ0ZmUuLjhiN2JjMGMgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTE0IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTE0CmluZGV4IGExNjRiNDIuLjRjZDgzMTggMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xNAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTE1IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTE1CmluZGV4IDc1MGM3NmQuLjQ1NmRkYTcgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xNQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTE2IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTE2CmluZGV4IDIzYzVkMjMuLjk0YTQ4MTAgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0xNgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTIgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMgppbmRleCA1NDY4ZDA2Li42ZGQwNGUzIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtMyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0zCmluZGV4IDc2ZTFlMGIuLjViZTBiMmQgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0zCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC00IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTQKaW5kZXggZTBmNjVhNC4uZTdkNzg2YyAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTQKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTUgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtNQppbmRleCBmY2ZhYTk3Li5lMDZjZjIzIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtNQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtNiBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC02CmluZGV4IGNlMDBhMTUuLmM2NWEyNmUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC02CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC02CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC03IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTcKaW5kZXggMTI3ZmUxZi4uOGQwZWMwZiAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTcKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnMzE2MzM4LTggYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtOAppbmRleCBmZThiYjhiLi5hMTdhYWM0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtOAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWczMTYzMzgtOSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC05CmluZGV4IDNkNTZlNWQuLjNjMzdmYjQgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC05CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzMxNjMzOC05CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni0xIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTEKaW5kZXggNDQyNjkzMy4uOWI2YTgzOCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTEKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTIgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtMgppbmRleCA0NzRkMmI2Li5mM2VlNTM5IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtMyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni0zCmluZGV4IDA5Yzc1Y2IuLjU5MGJhZDkgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni0zCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni00IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTQKaW5kZXggNjVkNTYxZS4uMjMzYTkyYiAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTQKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTUgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtNQppbmRleCBiNjc4NTgwLi5jYTM1ZWMyIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtNQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtNiBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni02CmluZGV4IDNhMDVkODIuLmQ0MzNkOTEgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni02CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni02CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2J1ZzQyMDU5Ni03IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTcKaW5kZXggODhlMTY2MC4uODBkODIxZSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTcKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvYnVnNDIwNTk2LTggYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtOAppbmRleCA0NTc1YTkyLi4xNzQ1NmM5IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtOAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9idWc0MjA1OTYtOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTEgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTEKaW5kZXggNWFjYmY4Ni4uZWRjYjk0MyAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC0xCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTEwIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC0xMAppbmRleCBmMTMxNDU0Li5mMGNkMzYzIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTEwCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC0yIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC0yCmluZGV4IDRlNmI2NjMuLmQ5ZjRhOTMgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC0zIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC0zCmluZGV4IGIxM2ZjOGQuLjMwOWM5MjAgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC00IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC00CmluZGV4IDQ3YzVkNmQuLjIwZmZiYjcgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtNAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC01IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC01CmluZGV4IGY5Mzg2MGUuLmZhYTdiNTMgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtNQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC02IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC02CmluZGV4IGU1YzZlMTQuLjk4ZWYzYWEgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtNgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC03IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC03CmluZGV4IDQ4NjhkZDIuLmIwZDE3YWYgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtNworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC04IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC04CmluZGV4IGEzYTg3ZDAuLjUxYWViN2IgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtOAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC05IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvY29udGVudC05CmluZGV4IDkxZjBkOWUuLjU4OWQ5MjggMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2NvbnRlbnQtOQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9jb250ZW50LTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC0xIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC0xCmluZGV4IGJhMDAzODIuLjk5NTlmYjQgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtMQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC0xMCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtMTAKaW5kZXggN2RiMjhmYS4uMzZkYjI4NyAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC0xMAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtMiBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtMgppbmRleCBlZDM4YjkxLi4xNzAxNmJkIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtMyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtMwppbmRleCA3YjE2ZGEwLi5mM2YxYzBiIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTMKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNAppbmRleCAyZWNlODg2Li4xM2JjZDc3IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTQKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC00CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNQppbmRleCA4NzBhM2VjLi40MWU1MzEwIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTUKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC01CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNiBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNgppbmRleCAwNmFhN2QwLi5kNTVkODA4IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTYKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC02CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtNwppbmRleCA1MGE5ZWMzLi4wZGZkNjg0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTcKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC03CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtOCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtOAppbmRleCAwOTkxMTI5Li44MTU5ODQzIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTgKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC04CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtOSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL2hhcmQtOQppbmRleCA1YmQxZDg5Li5hNGU5ZWNlIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9oYXJkLTkKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvaGFyZC05CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL25jbmFtZS0xIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTEKaW5kZXggNjA4ZWI5YS4uNmQ0M2Y4MSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTEKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTIgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtMgppbmRleCBjZmI5Yjk2Li5iYjlmZjU0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtMgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtMyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL25jbmFtZS0zCmluZGV4IDA3YTZhMDguLjYwNWNjYzUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL25jbmFtZS0zCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL25jbmFtZS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL25jbmFtZS00IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTQKaW5kZXggODdlOTM3Zi4uZmFjZjk3ZCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTQKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvbmNuYW1lLTUgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtNQppbmRleCBhZDI5NDU2Li5hZDIyMzM0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtNQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9uY25hbWUtNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xCmluZGV4IDcxNDQ4ZjIuLjJjNGJiM2QgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xMCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xMAppbmRleCA5MWFlZDNjLi42MWMzZDNkIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMTAKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xMSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xMQppbmRleCA3NmViNWRlLi42MTMzMjYyIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMTEKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xMiBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0xMgppbmRleCA5YzNiYzY2Li40YjZiZTM3IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMTIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy0yIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTIKaW5kZXggOTM2OWY3YS4uZjc2NmUyMiAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTMgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMwppbmRleCA1OGEzYTA4Li43YzAzZjg3IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtNCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy00CmluZGV4IGRhN2U5ZGEuLjA4YTBhOWEgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy00CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy00CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy01IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTUKaW5kZXggODNhZDRhOC4uY2UzZjI1YSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTUKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTYgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtNgppbmRleCAzYmM5NzU4Li41MjNiNjM3IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtNgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtNyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy03CmluZGV4IGZhODkwMzguLjA5MWZmMDUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy03CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy03CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3Jhbmdlcy04IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTgKaW5kZXggOTZmMGJiNi4uMjEwZjcwOSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTgKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzLTkgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtOQppbmRleCA4ZTNmYzQzLi43ZGE4YTJhIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtOQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMtOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTEgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTEKaW5kZXggMDQ0YThlYi4uMDAzYzJjNSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0xCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTEwIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0xMAppbmRleCAxOWUyYWEyLi4yNjFiZjU2IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTEwCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0xMSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMTEKaW5kZXggODliZTE4MS4uYzZjNWJkMCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0xMQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMTIgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTEyCmluZGV4IDQyZWJkZDMuLjBhNzI5ZjIgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMTIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0xMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTIgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTIKaW5kZXggMDI2ZjdiOC4uOWZjMmNlMSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0yCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTMgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTMKaW5kZXggODNlNzhhOS4uMDhhMzk2MyAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi0zCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTQgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTQKaW5kZXggODQ3YjRlOC4uYzk2NTU1NSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi00CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTUgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTUKaW5kZXggMzQ5MTY4ZC4uMmU2NWY1ZCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi01CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTYgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTYKaW5kZXggNWQyYTQwNy4uNDk5MDI2NCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi02CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTcgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTcKaW5kZXggNzRmYmFmYi4uNWYzZTJjMyAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi03CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTggYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTgKaW5kZXggMTI1YmZhOS4uOWIzODRlNSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi04CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTkgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC9yYW5nZXMyLTkKaW5kZXggZjJjZjEyOC4uZTA4YWQ5OSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAvcmFuZ2VzMi05CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3JhbmdlczItOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMQppbmRleCAzYmMxNzkyLi4yMGUzN2UwIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTAgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMAppbmRleCBlNGY0YjBjLi4xYmRiMGE4IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTExCmluZGV4IDMxOGUwY2MuLjVlMjZlYzIgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTExCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTEyIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTIKaW5kZXggZjIwNDI5NS4uZTA0NDQ4NiAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTMgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMwppbmRleCA3MGZjY2Q1Li45Y2IyODc0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xNCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE0CmluZGV4IDM1N2NlMmIuLjNiOTAwM2YgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE0CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE1IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTUKaW5kZXggMmExMGE4My4uNjRiMDcxZSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTUKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTYgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xNgppbmRleCAxZjMwODlmLi40NGI2MTJiIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xNgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xNyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE3CmluZGV4IGE5ZDU0MmYuLjAzNzA2NjggMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE3CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTE4IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTgKaW5kZXggNjUxZWI5ZC4uMDM1MTkxMSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTgKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMTkgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xOQppbmRleCBmZWZlYThmLi5mNGExNTNjIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xOQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0xOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMgppbmRleCA4MWU1ZmJhLi4wYThiYWU3IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjAgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMAppbmRleCAxZjMwODlmLi40NGI2MTJiIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTIxCmluZGV4IDcwNmE3MDIuLjJkNmM3ZGYgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTIxCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTIxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTIyIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjIKaW5kZXggYTI0NmY4NC4uMWU4ZGI4OCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjMgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMwppbmRleCAwMjc1M2JlLi4yMzNmMjdlIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yNCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI0CmluZGV4IDMzMTEwNWMuLmM5NzBhNWUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI0CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI1IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjUKaW5kZXggY2UzZGE0NC4uNjQ5ZThmNCAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjUKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjYgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yNgppbmRleCBiM2JmOGMyLi4xM2Y2ZjI0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yNgorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yNyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI3CmluZGV4IDc0YmJlNDYuLjNmZWE1YzkgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI3CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTI4IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjgKaW5kZXggYjM4YTcwOS4uOGQyODU4MSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjgKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMjkgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yOQppbmRleCAxMDRkNGU1Li5hNjJhYWZlIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yOQorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0yOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMwppbmRleCA2ZDdiZTg1Li40MGJiYTVhIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzAgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMAppbmRleCBiNjgxZmYxLi42MDEwNWFmIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMSBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTMxCmluZGV4IGNkODdiMGUuLmY3ZDMxOWQgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTMxCisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTMyIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzIKaW5kZXggYzVjYWMzMi4uYjM3MDhkYSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzIKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzMgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMwppbmRleCA4OWUzZmNkLi40YWQ3NDlmIDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC0zNCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTM0CmluZGV4IGI2NWEzZDYuLmMzZTE4NGMgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTM0CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTM1IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzUKaW5kZXggMjUyYTcwYy4uNDFlYzEwOSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzUKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtMzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtNCBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTQKaW5kZXggMzA3MThjNS4uZDhjODc1ZSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtNAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC00CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTUgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC01CmluZGV4IDA2YWQ4OGUuLjFlMjgyZDAgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTUKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC02IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtNgppbmRleCA2Njc4NzcyLi41MjQwNWU0IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC02CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtNyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTcKaW5kZXggZTY5YWQ4NS4uODFlYmI2MSAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtNworKysgYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC03CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTggYi9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC04CmluZGV4IGE4MTIwY2MuLjkxMzIwMzUgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTgKKysrIGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC05IGIvZnV6ei9zdGF0aWNfc2VlZC9yZWdleHAveHBhdGgtOQppbmRleCBjMDM3Y2U3Li5mYjg4MjY5IDEwMDY0NAotLS0gYS9mdXp6L3N0YXRpY19zZWVkL3JlZ2V4cC94cGF0aC05CisrKyBiL2Z1enovc3RhdGljX3NlZWQvcmVnZXhwL3hwYXRoLTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC91cmkvZG90IGIvZnV6ei9zdGF0aWNfc2VlZC91cmkvZG90CmluZGV4IDk0NWM5YjQuLjZjYWM2YjAgMTAwNjQ0Ci0tLSBhL2Z1enovc3RhdGljX3NlZWQvdXJpL2RvdAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3VyaS9kb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6ei9zdGF0aWNfc2VlZC91cmkvZnVsbCBiL2Z1enovc3RhdGljX3NlZWQvdXJpL2Z1bGwKaW5kZXggODA4ZTU4YS4uODMzMzI5ZiAxMDA2NDQKLS0tIGEvZnV6ei9zdGF0aWNfc2VlZC91cmkvZnVsbAorKysgYi9mdXp6L3N0YXRpY19zZWVkL3VyaS9mdWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enovdGVzdEZ1enplci5jIGIvZnV6ei90ZXN0RnV6emVyLmMKaW5kZXggYjBjN2ZmYi4uMTE5Mzc5ZCAxMDA2NDQKLS0tIGEvZnV6ei90ZXN0RnV6emVyLmMKKysrIGIvZnV6ei90ZXN0RnV6emVyLmMKQEAgLTEzLDUxICsxMyw4MyBAQAogI2luY2x1ZGUgImZ1enouaCIKIAogI2lmZGVmIEhBVkVfSFRNTF9GVVpaRVIKLSAgI2RlZmluZSBMTFZNRnV6emVySW5pdGlhbGl6ZSBmdXp6SHRtbEluaXQKLSAgI2RlZmluZSBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGZ1enpIdG1sCi0gICNpbmNsdWRlICJodG1sLmMiCi0gICN1bmRlZiBMTFZNRnV6emVySW5pdGlhbGl6ZQotICAjdW5kZWYgTExWTUZ1enplclRlc3RPbmVJbnB1dAoraW50IGZ1enpIdG1sSW5pdChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7CitpbnQgZnV6ekh0bWwoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworI2RlZmluZSBMTFZNRnV6emVySW5pdGlhbGl6ZSBmdXp6SHRtbEluaXQKKyNkZWZpbmUgTExWTUZ1enplclRlc3RPbmVJbnB1dCBmdXp6SHRtbAorI2luY2x1ZGUgImh0bWwuYyIKKyN1bmRlZiBMTFZNRnV6emVySW5pdGlhbGl6ZQorI3VuZGVmIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9SRUdFWFBfRlVaWkVSCi0gICNkZWZpbmUgTExWTUZ1enplckluaXRpYWxpemUgZnV6elJlZ2V4cEluaXQKLSAgI2RlZmluZSBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGZ1enpSZWdleHAKLSAgI2luY2x1ZGUgInJlZ2V4cC5jIgotICAjdW5kZWYgTExWTUZ1enplckluaXRpYWxpemUKLSAgI3VuZGVmIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQKK2ludCBmdXp6UmVnZXhwSW5pdChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7CitpbnQgZnV6elJlZ2V4cChjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisjZGVmaW5lIExMVk1GdXp6ZXJJbml0aWFsaXplIGZ1enpSZWdleHBJbml0CisjZGVmaW5lIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQgZnV6elJlZ2V4cAorI2luY2x1ZGUgInJlZ2V4cC5jIgorI3VuZGVmIExMVk1GdXp6ZXJJbml0aWFsaXplCisjdW5kZWYgTExWTUZ1enplclRlc3RPbmVJbnB1dAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NDSEVNQV9GVVpaRVIKLSAgI2RlZmluZSBMTFZNRnV6emVySW5pdGlhbGl6ZSBmdXp6U2NoZW1hSW5pdAotICAjZGVmaW5lIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQgZnV6elNjaGVtYQotICAjaW5jbHVkZSAic2NoZW1hLmMiCi0gICN1bmRlZiBMTFZNRnV6emVySW5pdGlhbGl6ZQotICAjdW5kZWYgTExWTUZ1enplclRlc3RPbmVJbnB1dAoraW50IGZ1enpTY2hlbWFJbml0KGludCAqYXJnYywgY2hhciAqKiphcmd2KTsKK2ludCBmdXp6U2NoZW1hKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKKyNkZWZpbmUgTExWTUZ1enplckluaXRpYWxpemUgZnV6elNjaGVtYUluaXQKKyNkZWZpbmUgTExWTUZ1enplclRlc3RPbmVJbnB1dCBmdXp6U2NoZW1hCisjaW5jbHVkZSAic2NoZW1hLmMiCisjdW5kZWYgTExWTUZ1enplckluaXRpYWxpemUKKyN1bmRlZiBMTFZNRnV6emVyVGVzdE9uZUlucHV0CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfVVJJX0ZVWlpFUgotICAjZGVmaW5lIExMVk1GdXp6ZXJJbml0aWFsaXplIGZ1enpVcmlJbml0Ci0gICNkZWZpbmUgTExWTUZ1enplclRlc3RPbmVJbnB1dCBmdXp6VXJpCi0gICNpbmNsdWRlICJ1cmkuYyIKLSAgI3VuZGVmIExMVk1GdXp6ZXJJbml0aWFsaXplCi0gICN1bmRlZiBMTFZNRnV6emVyVGVzdE9uZUlucHV0CitpbnQgZnV6elVyaUluaXQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpOworaW50IGZ1enpVcmkoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworI2RlZmluZSBMTFZNRnV6emVySW5pdGlhbGl6ZSBmdXp6VXJpSW5pdAorI2RlZmluZSBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGZ1enpVcmkKKyNpbmNsdWRlICJ1cmkuYyIKKyN1bmRlZiBMTFZNRnV6emVySW5pdGlhbGl6ZQorI3VuZGVmIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9WQUxJRF9GVVpaRVIKK2ludCBmdXp6VmFsaWRJbml0KGludCAqYXJnYywgY2hhciAqKiphcmd2KTsKK2ludCBmdXp6VmFsaWQoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworI2RlZmluZSBMTFZNRnV6emVySW5pdGlhbGl6ZSBmdXp6VmFsaWRJbml0CisjZGVmaW5lIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQgZnV6elZhbGlkCisjaW5jbHVkZSAidmFsaWQuYyIKKyN1bmRlZiBMTFZNRnV6emVySW5pdGlhbGl6ZQorI3VuZGVmIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9YSU5DTFVERV9GVVpaRVIKK2ludCBmdXp6WEluY2x1ZGVJbml0KGludCAqYXJnYywgY2hhciAqKiphcmd2KTsKK2ludCBmdXp6WEluY2x1ZGUoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworI2RlZmluZSBMTFZNRnV6emVySW5pdGlhbGl6ZSBmdXp6WEluY2x1ZGVJbml0CisjZGVmaW5lIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQgZnV6elhJbmNsdWRlCisjaW5jbHVkZSAieGluY2x1ZGUuYyIKKyN1bmRlZiBMTFZNRnV6emVySW5pdGlhbGl6ZQorI3VuZGVmIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9YTUxfRlVaWkVSCi0gICNkZWZpbmUgTExWTUZ1enplckluaXRpYWxpemUgZnV6elhtbEluaXQKLSAgI2RlZmluZSBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGZ1enpYbWwKLSAgI2luY2x1ZGUgInhtbC5jIgotICAjdW5kZWYgTExWTUZ1enplckluaXRpYWxpemUKLSAgI3VuZGVmIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQKK2ludCBmdXp6WG1sSW5pdChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7CitpbnQgZnV6elhtbChjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisjZGVmaW5lIExMVk1GdXp6ZXJJbml0aWFsaXplIGZ1enpYbWxJbml0CisjZGVmaW5lIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQgZnV6elhtbAorI2luY2x1ZGUgInhtbC5jIgorI3VuZGVmIExMVk1GdXp6ZXJJbml0aWFsaXplCisjdW5kZWYgTExWTUZ1enplclRlc3RPbmVJbnB1dAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1hQQVRIX0ZVWlpFUgotICAjZGVmaW5lIExMVk1GdXp6ZXJJbml0aWFsaXplIGZ1enpYUGF0aEluaXQKLSAgI2RlZmluZSBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGZ1enpYUGF0aAotICAjaW5jbHVkZSAieHBhdGguYyIKLSAgI3VuZGVmIExMVk1GdXp6ZXJJbml0aWFsaXplCi0gICN1bmRlZiBMTFZNRnV6emVyVGVzdE9uZUlucHV0CitpbnQgZnV6elhQYXRoSW5pdChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7CitpbnQgZnV6elhQYXRoKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKKyNkZWZpbmUgTExWTUZ1enplckluaXRpYWxpemUgZnV6elhQYXRoSW5pdAorI2RlZmluZSBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGZ1enpYUGF0aAorI2luY2x1ZGUgInhwYXRoLmMiCisjdW5kZWYgTExWTUZ1enplckluaXRpYWxpemUKKyN1bmRlZiBMTFZNRnV6emVyVGVzdE9uZUlucHV0CiAjZW5kaWYKIAogdHlwZWRlZiBpbnQKQEAgLTcxLDcgKzEwMyw3IEBACiB0ZXN0RnV6emVyKGluaXRGdW5jIGluaXQsIGZ1enpGdW5jIGZ1enosIGNvbnN0IGNoYXIgKnBhdHRlcm4pIHsKICAgICBnbG9iX3QgZ2xvYmJ1ZjsKICAgICBpbnQgcmV0ID0gLTE7Ci0gICAgaW50IGk7CisgICAgc2l6ZV90IGk7CiAKICAgICBpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCAmZ2xvYmJ1ZikgIT0gMCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBhdHRlcm4gJXMgbWF0Y2hlcyBubyBmaWxlc1xuIiwgcGF0dGVybik7CkBAIC0xMDUsNyArMTM3LDcgQEAKIAogI2lmZGVmIEhBVkVfWE1MX0ZVWlpFUgogc3RhdGljIGludAotdGVzdEVudGl0eUxvYWRlcigpIHsKK3Rlc3RFbnRpdHlMb2FkZXIodm9pZCkgewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGRhdGFbXSA9CiAgICAgICAgICJkb2MueG1sXFxcbiIKICAgICAgICAgIjwhRE9DVFlQRSBkb2MgU1lTVEVNIFwiZG9jLmR0ZFwiPlxuIgpAQCAtMTE1LDE0ICsxNDcsOSBAQAogICAgICAgICAiPCFFTlRJVFkgZW50IFNZU1RFTSBcImVudC50eHRcIj5cXFxuIgogICAgICAgICAiZW50LnR4dFxcXG4iCiAgICAgICAgICJIZWxsbywgd29ybGQhXFxcbiI7Ci0gICAgc3RhdGljIHhtbENoYXIgZXhwZWN0ZWRbXSA9Ci0gICAgICAgICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuIgotICAgICAgICAiPCFET0NUWVBFIGRvYyBTWVNURU0gXCJkb2MuZHRkXCI+XG4iCi0gICAgICAgICI8ZG9jPkhlbGxvLCB3b3JsZCE8L2RvYz5cbiI7CiAgICAgY29uc3QgY2hhciAqZG9jQnVmZmVyOwogICAgIHNpemVfdCBkb2NTaXplOwogICAgIHhtbERvY1B0ciBkb2M7Ci0gICAgeG1sQ2hhciAqb3V0OwogICAgIGludCByZXQgPSAwOwogCiAgICAgeG1sU2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoeG1sRnV6ekVudGl0eUxvYWRlcik7CkBAIC0xMzMsMTMgKzE2MCwyMyBAQAogICAgIGRvYyA9IHhtbFJlYWRNZW1vcnkoZG9jQnVmZmVyLCBkb2NTaXplLCBOVUxMLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1BBUlNFX05PRU5UIHwgWE1MX1BBUlNFX0RURExPQUQpOwogCi0gICAgeG1sRG9jRHVtcE1lbW9yeShkb2MsICZvdXQsIE5VTEwpOwotICAgIGlmICh4bWxTdHJjbXAob3V0LCBleHBlY3RlZCkgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkV4cGVjdGVkOlxuJXNHb3Q6XG4lcyIsIGV4cGVjdGVkLCBvdXQpOwotICAgICAgICByZXQgPSAxOwotICAgIH0KKyNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKKyAgICB7CisgICAgICAgIHN0YXRpYyB4bWxDaGFyIGV4cGVjdGVkW10gPQorICAgICAgICAgICAgIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG4iCisgICAgICAgICAgICAiPCFET0NUWVBFIGRvYyBTWVNURU0gXCJkb2MuZHRkXCI+XG4iCisgICAgICAgICAgICAiPGRvYz5IZWxsbywgd29ybGQhPC9kb2M+XG4iOworICAgICAgICB4bWxDaGFyICpvdXQ7CiAKLSAgICB4bWxGcmVlKG91dCk7CisgICAgICAgIHhtbERvY0R1bXBNZW1vcnkoZG9jLCAmb3V0LCBOVUxMKTsKKyAgICAgICAgaWYgKHhtbFN0cmNtcChvdXQsIGV4cGVjdGVkKSAhPSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkV4cGVjdGVkOlxuJXNHb3Q6XG4lcyIsIGV4cGVjdGVkLCBvdXQpOworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgfQorICAgICAgICB4bWxGcmVlKG91dCk7CisgICAgfQorI2VuZGlmCisKICAgICB4bWxGcmVlRG9jKGRvYyk7CiAgICAgeG1sRnV6ekRhdGFDbGVhbnVwKCk7CiAKQEAgLTE0OCw3ICsxODUsNyBAQAogI2VuZGlmCiAKIGludAotbWFpbigpIHsKK21haW4odm9pZCkgewogICAgIGludCByZXQgPSAwOwogCiAjaWZkZWYgSEFWRV9YTUxfRlVaWkVSCkBAIC0xNjgsNyArMjA1LDE1IEBACiAgICAgICAgIHJldCA9IDE7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1VSSV9GVVpaRVIKLSAgICBpZiAodGVzdEZ1enplcihOVUxMLCBmdXp6VXJpLCAic2VlZC91cmkvKiIpICE9IDApCisgICAgaWYgKHRlc3RGdXp6ZXIoZnV6elVyaUluaXQsIGZ1enpVcmksICJzZWVkL3VyaS8qIikgIT0gMCkKKyAgICAgICAgcmV0ID0gMTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVkFMSURfRlVaWkVSCisgICAgaWYgKHRlc3RGdXp6ZXIoZnV6elZhbGlkSW5pdCwgZnV6elZhbGlkLCAic2VlZC92YWxpZC8qIikgIT0gMCkKKyAgICAgICAgcmV0ID0gMTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfWElOQ0xVREVfRlVaWkVSCisgICAgaWYgKHRlc3RGdXp6ZXIoZnV6elhJbmNsdWRlSW5pdCwgZnV6elhJbmNsdWRlLCAic2VlZC94aW5jbHVkZS8qIikgIT0gMCkKICAgICAgICAgcmV0ID0gMTsKICNlbmRpZgogI2lmZGVmIEhBVkVfWE1MX0ZVWlpFUgpkaWZmIC0tZ2l0IGEvZnV6ei91cmkuYyBiL2Z1enovdXJpLmMKaW5kZXggNWU0YzA5OS4uNWJjMjc5ZiAxMDA2NDQKLS0tIGEvZnV6ei91cmkuYworKysgYi9mdXp6L3VyaS5jCkBAIC04LDQwICs4LDU0IEBACiAjaW5jbHVkZSAiZnV6ei5oIgogCiBpbnQKK0xMVk1GdXp6ZXJJbml0aWFsaXplKGludCAqYXJnYyBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICB4bWxGdXp6TWVtU2V0dXAoKTsKKyAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKE5VTEwsIHhtbEZ1enpFcnJvckZ1bmMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAogTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkgewogICAgIHhtbFVSSVB0ciB1cmk7Ci0gICAgY2hhciAqc3RyWzJdID0geyBOVUxMLCBOVUxMIH07Ci0gICAgc2l6ZV90IG51bVN0cmluZ3M7CisgICAgc2l6ZV90IG1heEFsbG9jOworICAgIGNvbnN0IGNoYXIgKnN0cjEsICpzdHIyOworICAgIGNoYXIgKmNvcHk7CiAKICAgICBpZiAoc2l6ZSA+IDEwMDAwKQogICAgICAgICByZXR1cm4oMCk7CiAKLSAgICBudW1TdHJpbmdzID0geG1sRnV6ekV4dHJhY3RTdHJpbmdzKGRhdGEsIHNpemUsIHN0ciwgMik7CisgICAgeG1sRnV6ekRhdGFJbml0KGRhdGEsIHNpemUpOworICAgIG1heEFsbG9jID0geG1sRnV6elJlYWRJbnQoNCkgJSAoc2l6ZSAqIDggKyAxKTsKKyAgICBzdHIxID0geG1sRnV6elJlYWRTdHJpbmcoTlVMTCk7CisgICAgc3RyMiA9IHhtbEZ1enpSZWFkU3RyaW5nKE5VTEwpOwogCi0gICAgdXJpID0geG1sUGFyc2VVUkkoc3RyWzBdKTsKKyAgICB4bWxGdXp6TWVtU2V0TGltaXQobWF4QWxsb2MpOworCisgICAgdXJpID0geG1sUGFyc2VVUkkoc3RyMSk7CiAgICAgeG1sRnJlZSh4bWxTYXZlVXJpKHVyaSkpOwogICAgIHhtbEZyZWVVUkkodXJpKTsKIAotICAgIHVyaSA9IHhtbFBhcnNlVVJJUmF3KHN0clswXSwgMSk7CisgICAgdXJpID0geG1sUGFyc2VVUklSYXcoc3RyMSwgMSk7CiAgICAgeG1sRnJlZSh4bWxTYXZlVXJpKHVyaSkpOwogICAgIHhtbEZyZWVVUkkodXJpKTsKIAotICAgIHhtbEZyZWUoeG1sVVJJVW5lc2NhcGVTdHJpbmcoc3RyWzBdLCAtMSwgTlVMTCkpOwotICAgIHhtbEZyZWUoeG1sVVJJRXNjYXBlKEJBRF9DQVNUIHN0clswXSkpOwotICAgIHhtbEZyZWUoeG1sQ2Fub25pY1BhdGgoQkFEX0NBU1Qgc3RyWzBdKSk7Ci0gICAgeG1sRnJlZSh4bWxQYXRoVG9VUkkoQkFEX0NBU1Qgc3RyWzBdKSk7CisgICAgeG1sRnJlZSh4bWxVUklVbmVzY2FwZVN0cmluZyhzdHIxLCAtMSwgTlVMTCkpOworICAgIHhtbEZyZWUoeG1sVVJJRXNjYXBlKEJBRF9DQVNUIHN0cjEpKTsKKyAgICB4bWxGcmVlKHhtbENhbm9uaWNQYXRoKEJBRF9DQVNUIHN0cjEpKTsKKyAgICB4bWxGcmVlKHhtbFBhdGhUb1VSSShCQURfQ0FTVCBzdHIxKSk7CiAKLSAgICBpZiAobnVtU3RyaW5ncyA+PSAyKSB7Ci0gICAgICAgIHhtbEZyZWUoeG1sQnVpbGRVUkkoQkFEX0NBU1Qgc3RyWzFdLCBCQURfQ0FTVCBzdHJbMF0pKTsKLSAgICAgICAgeG1sRnJlZSh4bWxCdWlsZFJlbGF0aXZlVVJJKEJBRF9DQVNUIHN0clsxXSwgQkFEX0NBU1Qgc3RyWzBdKSk7Ci0gICAgICAgIHhtbEZyZWUoeG1sVVJJRXNjYXBlU3RyKEJBRF9DQVNUIHN0clswXSwgQkFEX0NBU1Qgc3RyWzFdKSk7Ci0gICAgfQorICAgIHhtbEZyZWUoeG1sQnVpbGRVUkkoQkFEX0NBU1Qgc3RyMiwgQkFEX0NBU1Qgc3RyMSkpOworICAgIHhtbEZyZWUoeG1sQnVpbGRSZWxhdGl2ZVVSSShCQURfQ0FTVCBzdHIyLCBCQURfQ0FTVCBzdHIxKSk7CisgICAgeG1sRnJlZSh4bWxVUklFc2NhcGVTdHIoQkFEX0NBU1Qgc3RyMSwgQkFEX0NBU1Qgc3RyMikpOwogCi0gICAgLyogTW9kaWZpZXMgc3RyaW5nLCBzbyBtdXN0IGNvbWUgbGFzdC4gKi8KLSAgICB4bWxOb3JtYWxpemVVUklQYXRoKHN0clswXSk7CisgICAgY29weSA9IChjaGFyICopIHhtbENoYXJTdHJkdXAoc3RyMSk7CisgICAgeG1sTm9ybWFsaXplVVJJUGF0aChjb3B5KTsKKyAgICB4bWxGcmVlKGNvcHkpOwogCi0gICAgeG1sRnJlZShzdHJbMF0pOwotICAgIHhtbEZyZWUoc3RyWzFdKTsKKyAgICB4bWxGdXp6TWVtU2V0TGltaXQoMCk7CisgICAgeG1sRnV6ekRhdGFDbGVhbnVwKCk7CiAKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2Z1enovdmFsaWQuYyBiL2Z1enovdmFsaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRlOTAzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6ei92YWxpZC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogdmFsaWQuYzogYSBsaWJGdXp6ZXIgdGFyZ2V0IHRvIHRlc3QgRFREIHZhbGlkYXRpb24uCisgKgorICogU2VlIENvcHlyaWdodCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxsaWJ4bWwvY2F0YWxvZy5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxyZWFkZXIuaD4KKyNpbmNsdWRlICJmdXp6LmgiCisKK2ludAorTExWTUZ1enplckluaXRpYWxpemUoaW50ICphcmdjIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICoqKmFyZ3YgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHhtbEZ1enpNZW1TZXR1cCgpOworICAgIHhtbEluaXRQYXJzZXIoKTsKKyNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECisgICAgeG1sSW5pdGlhbGl6ZUNhdGFsb2coKTsKKyNlbmRpZgorICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoTlVMTCwgeG1sRnV6ekVycm9yRnVuYyk7CisgICAgeG1sU2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoeG1sRnV6ekVudGl0eUxvYWRlcik7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CitMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgeG1sRG9jUHRyIGRvYzsKKyAgICB4bWxWYWxpZEN0eHRQdHIgdmN0eHQ7CisgICAgY29uc3QgY2hhciAqZG9jQnVmZmVyLCAqZG9jVXJsOworICAgIHNpemVfdCBtYXhBbGxvYywgZG9jU2l6ZTsKKyAgICBpbnQgb3B0czsKKworICAgIHhtbEZ1enpEYXRhSW5pdChkYXRhLCBzaXplKTsKKyAgICBvcHRzID0gKGludCkgeG1sRnV6elJlYWRJbnQoNCk7CisgICAgb3B0cyAmPSB+WE1MX1BBUlNFX1hJTkNMVURFOworICAgIG9wdHMgfD0gWE1MX1BBUlNFX0RURFZBTElEOworICAgIG1heEFsbG9jID0geG1sRnV6elJlYWRJbnQoNCkgJSAoc2l6ZSArIDEpOworCisgICAgeG1sRnV6elJlYWRFbnRpdGllcygpOworICAgIGRvY0J1ZmZlciA9IHhtbEZ1enpNYWluRW50aXR5KCZkb2NTaXplKTsKKyAgICBkb2NVcmwgPSB4bWxGdXp6TWFpblVybCgpOworICAgIGlmIChkb2NCdWZmZXIgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworCisgICAgLyogUHVsbCBwYXJzZXIgKi8KKworICAgIHhtbEZ1enpNZW1TZXRMaW1pdChtYXhBbGxvYyk7CisgICAgZG9jID0geG1sUmVhZE1lbW9yeShkb2NCdWZmZXIsIGRvY1NpemUsIGRvY1VybCwgTlVMTCwgb3B0cyk7CisgICAgeG1sRnJlZURvYyhkb2MpOworCisgICAgLyogUG9zdCB2YWxpZGF0aW9uICovCisKKyAgICB4bWxGdXp6TWVtU2V0TGltaXQobWF4QWxsb2MpOworICAgIGRvYyA9IHhtbFJlYWRNZW1vcnkoZG9jQnVmZmVyLCBkb2NTaXplLCBkb2NVcmwsIE5VTEwsIG9wdHMgJiB+WE1MX1BBUlNFX0RURFZBTElEKTsKKyAgICB2Y3R4dCA9IHhtbE5ld1ZhbGlkQ3R4dCgpOworICAgIHhtbFZhbGlkYXRlRG9jdW1lbnQodmN0eHQsIGRvYyk7CisgICAgeG1sRnJlZVZhbGlkQ3R4dCh2Y3R4dCk7CisgICAgeG1sRnJlZURvYyhkb2MpOworCisgICAgLyogUHVzaCBwYXJzZXIgKi8KKworI2lmZGVmIExJQlhNTF9QVVNIX0VOQUJMRUQKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4Q2h1bmtTaXplID0gMTI4OworICAgICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgICAgIHNpemVfdCBjb25zdW1lZCwgY2h1bmtTaXplOworCisgICAgICAgIHhtbEZ1enpNZW1TZXRMaW1pdChtYXhBbGxvYyk7CisgICAgICAgIGN0eHQgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dChOVUxMLCBOVUxMLCBOVUxMLCAwLCBkb2NVcmwpOworICAgICAgICBpZiAoY3R4dCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB4bWxDdHh0VXNlT3B0aW9ucyhjdHh0LCBvcHRzKTsKKworICAgICAgICBmb3IgKGNvbnN1bWVkID0gMDsgY29uc3VtZWQgPCBkb2NTaXplOyBjb25zdW1lZCArPSBjaHVua1NpemUpIHsKKyAgICAgICAgICAgIGNodW5rU2l6ZSA9IGRvY1NpemUgLSBjb25zdW1lZDsKKyAgICAgICAgICAgIGlmIChjaHVua1NpemUgPiBtYXhDaHVua1NpemUpCisgICAgICAgICAgICAgICAgY2h1bmtTaXplID0gbWF4Q2h1bmtTaXplOworICAgICAgICAgICAgeG1sUGFyc2VDaHVuayhjdHh0LCBkb2NCdWZmZXIgKyBjb25zdW1lZCwgY2h1bmtTaXplLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbFBhcnNlQ2h1bmsoY3R4dCwgTlVMTCwgMCwgMSk7CisgICAgICAgIHhtbEZyZWVEb2MoY3R4dC0+bXlEb2MpOworICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFJlYWRlciAqLworCisjaWZkZWYgTElCWE1MX1JFQURFUl9FTkFCTEVECisgICAgeworICAgICAgICB4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcjsKKyAgICAgICAgaW50IGo7CisKKyAgICAgICAgeG1sRnV6ek1lbVNldExpbWl0KG1heEFsbG9jKTsKKyAgICAgICAgcmVhZGVyID0geG1sUmVhZGVyRm9yTWVtb3J5KGRvY0J1ZmZlciwgZG9jU2l6ZSwgTlVMTCwgTlVMTCwgb3B0cyk7CisgICAgICAgIGlmIChyZWFkZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgd2hpbGUgKHhtbFRleHRSZWFkZXJSZWFkKHJlYWRlcikgPT0gMSkgeworICAgICAgICAgICAgaWYgKHhtbFRleHRSZWFkZXJOb2RlVHlwZShyZWFkZXIpID09IFhNTF9FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgICAgICBpbnQgaSwgbiA9IHhtbFRleHRSZWFkZXJBdHRyaWJ1dGVDb3VudChyZWFkZXIpOworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworICAgICAgICAgICAgICAgICAgICB4bWxUZXh0UmVhZGVyTW92ZVRvQXR0cmlidXRlTm8ocmVhZGVyLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHhtbFRleHRSZWFkZXJSZWFkQXR0cmlidXRlVmFsdWUocmVhZGVyKSA9PSAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCisgICAgICAgICAgICB4bWxUZXh0UmVhZGVyUmVhZChyZWFkZXIpOworICAgICAgICB4bWxGcmVlVGV4dFJlYWRlcihyZWFkZXIpOworICAgIH0KKyNlbmRpZgorCitleGl0OgorICAgIHhtbEZ1enpNZW1TZXRMaW1pdCgwKTsKKyAgICB4bWxGdXp6RGF0YUNsZWFudXAoKTsKKyAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgIHJldHVybigwKTsKK30KKwpkaWZmIC0tZ2l0IGEvZnV6ei92YWxpZC5vcHRpb25zIGIvZnV6ei92YWxpZC5vcHRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTE0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6L3ZhbGlkLm9wdGlvbnMKQEAgLTAsMCArMSwzIEBACitbbGliZnV6emVyXQorZGljdCA9IHhtbC5kaWN0Cit0aW1lb3V0ID0gMjAKZGlmZiAtLWdpdCBhL2Z1enoveGluY2x1ZGUuYyBiL2Z1enoveGluY2x1ZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg5Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6ei94aW5jbHVkZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiB4aW5jbHVkZS5jOiBhIGxpYkZ1enplciB0YXJnZXQgdG8gdGVzdCB0aGUgWEluY2x1ZGUgZW5naW5lLgorICoKKyAqIFNlZSBDb3B5cmlnaHQgZm9yIHRoZSBzdGF0dXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8bGlieG1sL2NhdGFsb2cuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveGluY2x1ZGUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1scmVhZGVyLmg+CisjaW5jbHVkZSAiZnV6ei5oIgorCitpbnQKK0xMVk1GdXp6ZXJJbml0aWFsaXplKGludCAqYXJnYyBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICB4bWxGdXp6TWVtU2V0dXAoKTsKKyAgICB4bWxJbml0UGFyc2VyKCk7CisjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAorICAgIHhtbEluaXRpYWxpemVDYXRhbG9nKCk7CisjZW5kaWYKKyAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKE5VTEwsIHhtbEZ1enpFcnJvckZ1bmMpOworICAgIHhtbFNldEV4dGVybmFsRW50aXR5TG9hZGVyKHhtbEZ1enpFbnRpdHlMb2FkZXIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIHhtbERvY1B0ciBkb2M7CisgICAgY29uc3QgY2hhciAqZG9jQnVmZmVyLCAqZG9jVXJsOworICAgIHNpemVfdCBtYXhBbGxvYywgZG9jU2l6ZTsKKyAgICBpbnQgb3B0czsKKworICAgIHhtbEZ1enpEYXRhSW5pdChkYXRhLCBzaXplKTsKKyAgICBvcHRzID0gKGludCkgeG1sRnV6elJlYWRJbnQoNCk7CisgICAgb3B0cyB8PSBYTUxfUEFSU0VfWElOQ0xVREU7CisgICAgbWF4QWxsb2MgPSB4bWxGdXp6UmVhZEludCg0KSAlIChzaXplICsgMSk7CisKKyAgICB4bWxGdXp6UmVhZEVudGl0aWVzKCk7CisgICAgZG9jQnVmZmVyID0geG1sRnV6ek1haW5FbnRpdHkoJmRvY1NpemUpOworICAgIGRvY1VybCA9IHhtbEZ1enpNYWluVXJsKCk7CisgICAgaWYgKGRvY0J1ZmZlciA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAvKiBQdWxsIHBhcnNlciAqLworCisgICAgeG1sRnV6ek1lbVNldExpbWl0KG1heEFsbG9jKTsKKyAgICBkb2MgPSB4bWxSZWFkTWVtb3J5KGRvY0J1ZmZlciwgZG9jU2l6ZSwgZG9jVXJsLCBOVUxMLCBvcHRzKTsKKyAgICB4bWxYSW5jbHVkZVByb2Nlc3NGbGFncyhkb2MsIG9wdHMpOworICAgIHhtbEZyZWVEb2MoZG9jKTsKKworICAgIC8qIFJlYWRlciAqLworCisjaWZkZWYgTElCWE1MX1JFQURFUl9FTkFCTEVECisgICAgeworICAgICAgICB4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcjsKKyAgICAgICAgaW50IGo7CisKKyAgICAgICAgeG1sRnV6ek1lbVNldExpbWl0KG1heEFsbG9jKTsKKyAgICAgICAgcmVhZGVyID0geG1sUmVhZGVyRm9yTWVtb3J5KGRvY0J1ZmZlciwgZG9jU2l6ZSwgTlVMTCwgTlVMTCwgb3B0cyk7CisgICAgICAgIGlmIChyZWFkZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgd2hpbGUgKHhtbFRleHRSZWFkZXJSZWFkKHJlYWRlcikgPT0gMSkgeworICAgICAgICAgICAgaWYgKHhtbFRleHRSZWFkZXJOb2RlVHlwZShyZWFkZXIpID09IFhNTF9FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgICAgICBpbnQgaSwgbiA9IHhtbFRleHRSZWFkZXJBdHRyaWJ1dGVDb3VudChyZWFkZXIpOworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworICAgICAgICAgICAgICAgICAgICB4bWxUZXh0UmVhZGVyTW92ZVRvQXR0cmlidXRlTm8ocmVhZGVyLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHhtbFRleHRSZWFkZXJSZWFkQXR0cmlidXRlVmFsdWUocmVhZGVyKSA9PSAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCisgICAgICAgICAgICB4bWxUZXh0UmVhZGVyUmVhZChyZWFkZXIpOworICAgICAgICB4bWxGcmVlVGV4dFJlYWRlcihyZWFkZXIpOworICAgIH0KKyNlbmRpZgorCitleGl0OgorICAgIHhtbEZ1enpNZW1TZXRMaW1pdCgwKTsKKyAgICB4bWxGdXp6RGF0YUNsZWFudXAoKTsKKyAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgIHJldHVybigwKTsKK30KKwpkaWZmIC0tZ2l0IGEvZnV6ei94aW5jbHVkZS5vcHRpb25zIGIvZnV6ei94aW5jbHVkZS5vcHRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTE0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6L3hpbmNsdWRlLm9wdGlvbnMKQEAgLTAsMCArMSwzIEBACitbbGliZnV6emVyXQorZGljdCA9IHhtbC5kaWN0Cit0aW1lb3V0ID0gMjAKZGlmZiAtLWdpdCBhL2Z1enoveG1sLmMgYi9mdXp6L3htbC5jCmluZGV4IDhiNGM0ZWYuLmJiZTA1YzkgMTAwNjQ0Ci0tLSBhL2Z1enoveG1sLmMKKysrIGIvZnV6ei94bWwuYwpAQCAtOCwxMyArOCwxMyBAQAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgotI2luY2x1ZGUgPGxpYnhtbC94aW5jbHVkZS5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxyZWFkZXIuaD4KICNpbmNsdWRlICJmdXp6LmgiCiAKIGludAogTExWTUZ1enplckluaXRpYWxpemUoaW50ICphcmdjIEFUVFJJQlVURV9VTlVTRUQsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqKmFyZ3YgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHhtbEZ1enpNZW1TZXR1cCgpOwogICAgIHhtbEluaXRQYXJzZXIoKTsKICNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECiAgICAgeG1sSW5pdGlhbGl6ZUNhdGFsb2coKTsKQEAgLTI3LDIyICsyNywyMCBAQAogCiBpbnQKIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heENodW5rU2l6ZSA9IDEyODsKICAgICB4bWxEb2NQdHIgZG9jOwotICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKLSAgICB4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcjsKLSAgICB4bWxDaGFyICpvdXQ7CiAgICAgY29uc3QgY2hhciAqZG9jQnVmZmVyLCAqZG9jVXJsOwotICAgIHNpemVfdCBtYXhTaXplLCBkb2NTaXplLCBjb25zdW1lZCwgY2h1bmtTaXplOwotICAgIGludCBvcHRzLCBvdXRTaXplOworICAgIHNpemVfdCBtYXhBbGxvYywgZG9jU2l6ZTsKKyAgICBpbnQgb3B0czsKIAogICAgIHhtbEZ1enpEYXRhSW5pdChkYXRhLCBzaXplKTsKLSAgICBvcHRzID0geG1sRnV6elJlYWRJbnQoKTsKLQotICAgIC8qIExvd2VyIG1heGltdW0gc2l6ZSB3aGVuIHByb2Nlc3NpbmcgZW50aXRpZXMgZm9yIG5vdy4gKi8KLSAgICBtYXhTaXplID0gb3B0cyAmIFhNTF9QQVJTRV9OT0VOVCA/IDUwMDAwIDogNTAwMDAwOwotICAgIGlmIChzaXplID4gbWF4U2l6ZSkKLSAgICAgICAgZ290byBleGl0OworICAgIG9wdHMgPSAoaW50KSB4bWxGdXp6UmVhZEludCg0KTsKKyAgICAvKgorICAgICAqIERpc2FibGUgb3B0aW9ucyB0aGF0IGFyZSBrbm93biB0byBjYXVzZSB0aW1lb3V0cworICAgICAqLworICAgIG9wdHMgJj0gflhNTF9QQVJTRV9YSU5DTFVERSAmCisgICAgICAgICAgICB+WE1MX1BBUlNFX0RURFZBTElEICYKKyAgICAgICAgICAgIH5YTUxfUEFSU0VfU0FYMTsKKyAgICBtYXhBbGxvYyA9IHhtbEZ1enpSZWFkSW50KDQpICUgKHNpemUgKyAxKTsKIAogICAgIHhtbEZ1enpSZWFkRW50aXRpZXMoKTsKICAgICBkb2NCdWZmZXIgPSB4bWxGdXp6TWFpbkVudGl0eSgmZG9jU2l6ZSk7CkBAIC01Miw1MSArNTAsNzcgQEAKIAogICAgIC8qIFB1bGwgcGFyc2VyICovCiAKKyAgICB4bWxGdXp6TWVtU2V0TGltaXQobWF4QWxsb2MpOwogICAgIGRvYyA9IHhtbFJlYWRNZW1vcnkoZG9jQnVmZmVyLCBkb2NTaXplLCBkb2NVcmwsIE5VTEwsIG9wdHMpOwotICAgIGlmIChvcHRzICYgWE1MX1BBUlNFX1hJTkNMVURFKQotICAgICAgICB4bWxYSW5jbHVkZVByb2Nlc3NGbGFncyhkb2MsIG9wdHMpOwotICAgIC8qIEFsc28gdGVzdCB0aGUgc2VyaWFsaXplci4gKi8KLSAgICB4bWxEb2NEdW1wTWVtb3J5KGRvYywgJm91dCwgJm91dFNpemUpOwotICAgIHhtbEZyZWUob3V0KTsKKworI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAorICAgIHsKKyAgICAgICAgeG1sQ2hhciAqb3V0OworICAgICAgICBpbnQgb3V0U2l6ZTsKKworICAgICAgICAvKiBBbHNvIHRlc3QgdGhlIHNlcmlhbGl6ZXIuICovCisgICAgICAgIHhtbERvY0R1bXBNZW1vcnkoZG9jLCAmb3V0LCAmb3V0U2l6ZSk7CisgICAgICAgIHhtbEZyZWUob3V0KTsKKyAgICB9CisjZW5kaWYKKwogICAgIHhtbEZyZWVEb2MoZG9jKTsKIAogICAgIC8qIFB1c2ggcGFyc2VyICovCiAKLSAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwgTlVMTCwgMCwgZG9jVXJsKTsKLSAgICBpZiAoY3R4dCA9PSBOVUxMKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgeG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0cyk7CisjaWZkZWYgTElCWE1MX1BVU0hfRU5BQkxFRAorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhDaHVua1NpemUgPSAxMjg7CisgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKyAgICAgICAgc2l6ZV90IGNvbnN1bWVkLCBjaHVua1NpemU7CiAKLSAgICBmb3IgKGNvbnN1bWVkID0gMDsgY29uc3VtZWQgPCBkb2NTaXplOyBjb25zdW1lZCArPSBjaHVua1NpemUpIHsKLSAgICAgICAgY2h1bmtTaXplID0gZG9jU2l6ZSAtIGNvbnN1bWVkOwotICAgICAgICBpZiAoY2h1bmtTaXplID4gbWF4Q2h1bmtTaXplKQotICAgICAgICAgICAgY2h1bmtTaXplID0gbWF4Q2h1bmtTaXplOwotICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIGRvY0J1ZmZlciArIGNvbnN1bWVkLCBjaHVua1NpemUsIDApOworICAgICAgICB4bWxGdXp6TWVtU2V0TGltaXQobWF4QWxsb2MpOworICAgICAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwgTlVMTCwgMCwgZG9jVXJsKTsKKyAgICAgICAgaWYgKGN0eHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgeG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0cyk7CisKKyAgICAgICAgZm9yIChjb25zdW1lZCA9IDA7IGNvbnN1bWVkIDwgZG9jU2l6ZTsgY29uc3VtZWQgKz0gY2h1bmtTaXplKSB7CisgICAgICAgICAgICBjaHVua1NpemUgPSBkb2NTaXplIC0gY29uc3VtZWQ7CisgICAgICAgICAgICBpZiAoY2h1bmtTaXplID4gbWF4Q2h1bmtTaXplKQorICAgICAgICAgICAgICAgIGNodW5rU2l6ZSA9IG1heENodW5rU2l6ZTsKKyAgICAgICAgICAgIHhtbFBhcnNlQ2h1bmsoY3R4dCwgZG9jQnVmZmVyICsgY29uc3VtZWQsIGNodW5rU2l6ZSwgMCk7CisgICAgICAgIH0KKworICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIE5VTEwsIDAsIDEpOworICAgICAgICB4bWxGcmVlRG9jKGN0eHQtPm15RG9jKTsKKyAgICAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAgICAgfQotCi0gICAgeG1sUGFyc2VDaHVuayhjdHh0LCBOVUxMLCAwLCAxKTsKLSAgICBpZiAob3B0cyAmIFhNTF9QQVJTRV9YSU5DTFVERSkKLSAgICAgICAgeG1sWEluY2x1ZGVQcm9jZXNzRmxhZ3MoY3R4dC0+bXlEb2MsIG9wdHMpOwotICAgIHhtbEZyZWVEb2MoY3R4dC0+bXlEb2MpOwotICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworI2VuZGlmCiAKICAgICAvKiBSZWFkZXIgKi8KIAotICAgIHJlYWRlciA9IHhtbFJlYWRlckZvck1lbW9yeShkb2NCdWZmZXIsIGRvY1NpemUsIE5VTEwsIE5VTEwsIG9wdHMpOwotICAgIGlmIChyZWFkZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBleGl0OwotICAgIHdoaWxlICh4bWxUZXh0UmVhZGVyUmVhZChyZWFkZXIpID09IDEpIHsKLSAgICAgICAgaWYgKHhtbFRleHRSZWFkZXJOb2RlVHlwZShyZWFkZXIpID09IFhNTF9FTEVNRU5UX05PREUpIHsKLSAgICAgICAgICAgIGludCBpLCBuID0geG1sVGV4dFJlYWRlckF0dHJpYnV0ZUNvdW50KHJlYWRlcik7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTxuOyBpKyspIHsKLSAgICAgICAgICAgICAgICB4bWxUZXh0UmVhZGVyTW92ZVRvQXR0cmlidXRlTm8ocmVhZGVyLCBpKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoeG1sVGV4dFJlYWRlclJlYWRBdHRyaWJ1dGVWYWx1ZShyZWFkZXIpID09IDEpOworI2lmZGVmIExJQlhNTF9SRUFERVJfRU5BQkxFRAorICAgIHsKKyAgICAgICAgeG1sVGV4dFJlYWRlclB0ciByZWFkZXI7CisgICAgICAgIGludCBqOworCisgICAgICAgIHhtbEZ1enpNZW1TZXRMaW1pdChtYXhBbGxvYyk7CisgICAgICAgIHJlYWRlciA9IHhtbFJlYWRlckZvck1lbW9yeShkb2NCdWZmZXIsIGRvY1NpemUsIE5VTEwsIE5VTEwsIG9wdHMpOworICAgICAgICBpZiAocmVhZGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHdoaWxlICh4bWxUZXh0UmVhZGVyUmVhZChyZWFkZXIpID09IDEpIHsKKyAgICAgICAgICAgIGlmICh4bWxUZXh0UmVhZGVyTm9kZVR5cGUocmVhZGVyKSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7CisgICAgICAgICAgICAgICAgaW50IGksIG4gPSB4bWxUZXh0UmVhZGVyQXR0cmlidXRlQ291bnQocmVhZGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgeG1sVGV4dFJlYWRlck1vdmVUb0F0dHJpYnV0ZU5vKHJlYWRlciwgaSk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh4bWxUZXh0UmVhZGVyUmVhZEF0dHJpYnV0ZVZhbHVlKHJlYWRlcikgPT0gMSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGZvciAoaiA9IDA7IGogPCAxMDsgaisrKQorICAgICAgICAgICAgeG1sVGV4dFJlYWRlclJlYWQocmVhZGVyKTsKKyAgICAgICAgeG1sRnJlZVRleHRSZWFkZXIocmVhZGVyKTsKICAgICB9Ci0gICAgeG1sRnJlZVRleHRSZWFkZXIocmVhZGVyKTsKKyNlbmRpZgogCiBleGl0OgorICAgIHhtbEZ1enpNZW1TZXRMaW1pdCgwKTsKICAgICB4bWxGdXp6RGF0YUNsZWFudXAoKTsKICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogICAgIHJldHVybigwKTsKZGlmZiAtLWdpdCBhL2Z1enoveHBhdGguYyBiL2Z1enoveHBhdGguYwppbmRleCA0NzY1MmJkLi5hNWViNzBiIDEwMDY0NAotLS0gYS9mdXp6L3hwYXRoLmMKKysrIGIvZnV6ei94cGF0aC5jCkBAIC0xMSw2ICsxMSw3IEBACiBpbnQKIExMVk1GdXp6ZXJJbml0aWFsaXplKGludCAqYXJnYyBBVFRSSUJVVEVfVU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICB4bWxGdXp6TWVtU2V0dXAoKTsKICAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhOVUxMLCB4bWxGdXp6RXJyb3JGdW5jKTsKIApAQCAtMjEsMjggKzIyLDM2IEBACiBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKSB7CiAgICAgeG1sRG9jUHRyIGRvYzsKICAgICBjb25zdCBjaGFyICpleHByLCAqeG1sOwotICAgIHNpemVfdCBleHByU2l6ZSwgeG1sU2l6ZTsKKyAgICBzaXplX3QgbWF4QWxsb2MsIGV4cHJTaXplLCB4bWxTaXplOwogCiAgICAgaWYgKHNpemUgPiAxMDAwMCkKICAgICAgICAgcmV0dXJuKDApOwogCiAgICAgeG1sRnV6ekRhdGFJbml0KGRhdGEsIHNpemUpOwogCisgICAgbWF4QWxsb2MgPSB4bWxGdXp6UmVhZEludCg0KSAlIChzaXplICsgMSk7CiAgICAgZXhwciA9IHhtbEZ1enpSZWFkU3RyaW5nKCZleHByU2l6ZSk7CiAgICAgeG1sID0geG1sRnV6elJlYWRTdHJpbmcoJnhtbFNpemUpOwogCiAgICAgLyogUmVjb3ZlcnkgbW9kZSBhbGxvd3MgbW9yZSBpbnB1dCB0byBiZSBmdXp6ZWQuICovCiAgICAgZG9jID0geG1sUmVhZE1lbW9yeSh4bWwsIHhtbFNpemUsIE5VTEwsIE5VTEwsIFhNTF9QQVJTRV9SRUNPVkVSKTsKICAgICBpZiAoZG9jICE9IE5VTEwpIHsKLSAgICAgICAgeG1sWFBhdGhDb250ZXh0UHRyIHhwY3R4dCA9IHhtbFhQYXRoTmV3Q29udGV4dChkb2MpOworICAgICAgICB4bWxYUGF0aENvbnRleHRQdHIgeHBjdHh0OwogCi0gICAgICAgIC8qIE9wZXJhdGlvbiBsaW1pdCB0byBhdm9pZCB0aW1lb3V0ICovCi0gICAgICAgIHhwY3R4dC0+b3BMaW1pdCA9IDUwMDAwMDsKKyAgICAgICAgeG1sRnV6ek1lbVNldExpbWl0KG1heEFsbG9jKTsKIAotICAgICAgICB4bWxYUGF0aEZyZWVPYmplY3QoeG1sWFB0ckV2YWwoQkFEX0NBU1QgZXhwciwgeHBjdHh0KSk7Ci0gICAgICAgIHhtbFhQYXRoRnJlZUNvbnRleHQoeHBjdHh0KTsKKyAgICAgICAgeHBjdHh0ID0geG1sWFBhdGhOZXdDb250ZXh0KGRvYyk7CisgICAgICAgIGlmICh4cGN0eHQgIT0gTlVMTCkgeworICAgICAgICAgICAgLyogT3BlcmF0aW9uIGxpbWl0IHRvIGF2b2lkIHRpbWVvdXQgKi8KKyAgICAgICAgICAgIHhwY3R4dC0+b3BMaW1pdCA9IDUwMDAwMDsKKworICAgICAgICAgICAgeG1sWFBhdGhGcmVlT2JqZWN0KHhtbFhQdHJFdmFsKEJBRF9DQVNUIGV4cHIsIHhwY3R4dCkpOworICAgICAgICAgICAgeG1sWFBhdGhGcmVlQ29udGV4dCh4cGN0eHQpOworICAgICAgICB9CisKKyAgICAgICAgeG1sRnV6ek1lbVNldExpbWl0KDApOworICAgICAgICB4bWxGcmVlRG9jKGRvYyk7CiAgICAgfQotICAgIHhtbEZyZWVEb2MoZG9jKTsKIAogICAgIHhtbEZ1enpEYXRhQ2xlYW51cCgpOwogICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CmRpZmYgLS1naXQgYS9nZW5DaFJhbmdlcy5weSBiL2dlbkNoUmFuZ2VzLnB5CmluZGV4IGM2MjUyZmMuLjRlMjI5ZDEgMTAwNzU1Ci0tLSBhL2dlbkNoUmFuZ2VzLnB5CisrKyBiL2dlbkNoUmFuZ2VzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIFBvcnRpb25zIG9mIHRoaXMgc2NyaXB0IGhhdmUgYmVlbiAoc2hhbWVsZXNzbHkpIHN0b2xlbiBmcm9tIHRoZQogIyBwcmlvciB3b3JrIG9mIERhbmllbCBWZWlsbGFyZCAoZ2VuVW5pY29kZS5weSkKQEAgLTE2LDcgKzE2LDYgQEAKICMKIAogaW1wb3J0IHN5cwotaW1wb3J0IHN0cmluZwogaW1wb3J0IHRpbWUKIAogIwpAQCAtMjgsMjEgKzI3LDIxIEBACiAgICAgcmV0ID0gW10KICAgICBwb3MgPSAwCiAgICAgd2hpbGUgcG9zIDwgbGVuKGxzdCk6Ci0JdHJ5OgkJIyBpbmRleCBnZW5lcmF0ZXMgZXhjZXB0aW9uIGlmIG5vdCBwcmVzZW50Ci0JICAgIHMgPSBsc3RbcG9zOl0uaW5kZXgoMSkJIyBsb29rIGZvciBzdGFydCBvZiBuZXh0IHJhbmdlCi0JZXhjZXB0OgotCSAgICBicmVhawkJCSMgaWYgbm8gbW9yZSwgZmluaXNoZWQKLQlwb3MgKz0gcwkJCSMgcG9pbnRlciB0byBzdGFydCBvZiBwb3NzaWJsZSByYW5nZQotCXRyeToKLQkgICAgZSA9IGxzdFtwb3M6XS5pbmRleCgwKQkjIGxvb2sgZm9yIGVuZCBvZiByYW5nZQotCSAgICBlICs9IHBvcwotCWV4Y2VwdDoJCQkJIyBpZiBubyBlbmQsIHNldCB0byBlbmQgb2YgbGlzdAotCSAgICBlID0gbGVuKGxzdCkKLQlyZXQuYXBwZW5kKChwb3MsIGUtMSkpCQkjIGFwcGVuZCByYW5nZSB0dXBsZSB0byBsaXN0Ci0JcG9zID0gZSArIDEJCQkjIHJlYWR5IHRvIGNoZWNrIGZvciBuZXh0IHJhbmdlCisgICAgICAgIHRyeTogICAgICAgICAgICAjIGluZGV4IGdlbmVyYXRlcyBleGNlcHRpb24gaWYgbm90IHByZXNlbnQKKyAgICAgICAgICAgIHMgPSBsc3RbcG9zOl0uaW5kZXgoMSkgICAgICAjIGxvb2sgZm9yIHN0YXJ0IG9mIG5leHQgcmFuZ2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm8gbW9yZSwgZmluaXNoZWQKKyAgICAgICAgcG9zICs9IHMgICAgICAgICAgICAgICAgICAgICAgICAjIHBvaW50ZXIgdG8gc3RhcnQgb2YgcG9zc2libGUgcmFuZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZSA9IGxzdFtwb3M6XS5pbmRleCgwKSAgICAgICMgbG9vayBmb3IgZW5kIG9mIHJhbmdlCisgICAgICAgICAgICBlICs9IHBvcworICAgICAgICBleGNlcHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm8gZW5kLCBzZXQgdG8gZW5kIG9mIGxpc3QKKyAgICAgICAgICAgIGUgPSBsZW4obHN0KQorICAgICAgICByZXQuYXBwZW5kKChwb3MsIGUtMSkpICAgICAgICAgICMgYXBwZW5kIHJhbmdlIHR1cGxlIHRvIGxpc3QKKyAgICAgICAgcG9zID0gZSArIDEgICAgICAgICAgICAgICAgICAgICAjIHJlYWR5IHRvIGNoZWNrIGZvciBuZXh0IHJhbmdlCiAgICAgcmV0dXJuIHJldAogCi1zb3VyY2VzID0gImNodmFsaWQuZGVmIgkJCSMgaW5wdXQgZmlsZW5hbWUKK3NvdXJjZXMgPSAiY2h2YWxpZC5kZWYiICAgICAgICAgICAgICAgICAjIGlucHV0IGZpbGVuYW1lCiAKICMgbWluVGFibGVTaXplIGdpdmVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiByYW5nZXMgd2hpY2ggbXVzdCBiZSBwcmVzZW50CiAjIGJlZm9yZSBhIDI1Ni1ieXRlIGxvb2t1cCB0YWJsZSBpcyBwcm9kdWNlZC4gIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gdGhpcwpAQCAtNTcsMTMgKzU2LDEzIEBACiB0cnk6CiAgICAgZGVmaW5lcyA9IG9wZW4oImNodmFsaWQuZGVmIiwgInIiKQogZXhjZXB0OgotICAgIHByaW50ICJNaXNzaW5nIGNodmFsaWQuZGVmLCBhYm9ydGluZyAuLi4iCisgICAgcHJpbnQoIk1pc3NpbmcgY2h2YWxpZC5kZWYsIGFib3J0aW5nIC4uLiIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwogIyBUaGUgbGluZXMgaW4gdGhlIC5kZWYgZmlsZSBoYXZlIHRocmVlIHR5cGVzOi0KICMgICBuYW1lOiAgIERlZmluZXMgYSBuZXcgZnVuY3Rpb24gYmxvY2sKLSMgICB1cjoJICAgIERlZmluZXMgaW5kaXZpZHVhbCBvciByYW5nZXMgb2YgdW5pY29kZSB2YWx1ZXMKKyMgICB1cjogICAgIERlZmluZXMgaW5kaXZpZHVhbCBvciByYW5nZXMgb2YgdW5pY29kZSB2YWx1ZXMKICMgICBlbmQ6ICAgIEluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBibG9jawogIwogIyBUaGVzZSBsaW5lcyBhcmUgcHJvY2Vzc2VkIGJlbG93LgpAQCAtNzIsMTExICs3MSwxMTEgQEAKICAgICAjIGlnbm9yZSBibGFuayBsaW5lcywgb3IgbGluZXMgYmVnaW5uaW5nIHdpdGggJyMnCiAgICAgaWYgbGluZVswXSA9PSAnIyc6CiAgICAgICAgIGNvbnRpbnVlCi0gICAgbGluZSA9IHN0cmluZy5zdHJpcChsaW5lKQorICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICBpZiBsaW5lID09ICcnOgogICAgICAgICBjb250aW51ZQogICAgICMgc3BsaXQgbGluZSBpbnRvIHNwYWNlLXNlcGFyYXRlZCBmaWVsZHMsIHRoZW4gc3BsaXQgb24gdHlwZQogICAgIHRyeToKLSAgICAgICAgZmllbGRzID0gc3RyaW5nLnNwbGl0KGxpbmUsICcgJykKLQkjCi0JIyBuYW1lIGxpbmU6Ci0JIyAgIHZhbGlkYXRlIGFueSBwcmV2aW91cyBmdW5jdGlvbiBibG9jayBhbHJlYWR5IGVuZGVkCi0JIyAgIHZhbGlkYXRlIHRoaXMgZnVuY3Rpb24gbm90IGFscmVhZHkgZGVmaW5lZAotCSMgICBpbml0aWFsaXplIGFuIGVudHJ5IGluIHRoZSBmdW5jdGlvbiBkaWNpdG9uYXJ5Ci0JIwlpbmNsdWRpbmcgYSBtYXNrIHRhYmxlIHdpdGggbm8gdmFsdWVzIHlldCBkZWZpbmVkCi0JIwotCWlmIGZpZWxkc1swXSA9PSAnbmFtZSc6Ci0JICAgIG5hbWUgPSBmaWVsZHNbMV0KLQkgICAgaWYgc3RhdGUgIT0gMDoKLQkJcHJpbnQgIiduYW1lJyAlcyBmb3VuZCBiZWZvcmUgcHJldmlvdXMgbmFtZSIgXAotCQkgICAgICAiY29tcGxldGVkIiAlIChmaWVsZHNbMV0pCi0JCWNvbnRpbnVlCi0JICAgIHN0YXRlID0gMQotCSAgICBpZiBGdW5jdHMuaGFzX2tleShuYW1lKToKLQkJcHJpbnQgIm5hbWUgJyVzJyBhbHJlYWR5IHByZXNlbnQgLSBtYXkgZ2l2ZSIgXAotCQkgICAgICAiIHdyb25nIHJlc3VsdHMiICUgKG5hbWUpCi0JICAgIGVsc2U6Ci0JCSMgZGljdCBlbnRyeSB3aXRoIHR3byBsaXN0IGVsZW1lbnRzIChjaGRhdGEsIHJhbmdlZGF0YSkKLQkJRnVuY3RzW25hbWVdID0gWyBbXSwgW10gXQotCQlmb3IgdiBpbiByYW5nZSgyNTYpOgotCQkgICAgRnVuY3RzW25hbWVdWzBdLmFwcGVuZCgwKQotCSMKLQkjIGVuZCBsaW5lOgotCSMgICB2YWxpZGF0ZSB0aGVyZSB3YXMgYSBwcmVjZWRpbmcgZnVuY3Rpb24gbmFtZSBsaW5lCi0JIyAgIHNldCBzdGF0ZSB0byBzaG93IG5vIGN1cnJlbnQgZnVuY3Rpb24gYWN0aXZlCi0JIwotCWVsaWYgZmllbGRzWzBdID09ICdlbmQnOgotCSAgICBpZiBzdGF0ZSA9PSAwOgotCQlwcmludCAiJ2VuZCcgZm91bmQgb3V0c2lkZSBvZiBmdW5jdGlvbiBibG9jayIKLQkJY29udGludWUKLQkgICAgc3RhdGUgPSAwCisgICAgICAgIGZpZWxkcyA9IGxpbmUuc3BsaXQoJyAnKQorICAgICAgICAjCisgICAgICAgICMgbmFtZSBsaW5lOgorICAgICAgICAjICAgdmFsaWRhdGUgYW55IHByZXZpb3VzIGZ1bmN0aW9uIGJsb2NrIGFscmVhZHkgZW5kZWQKKyAgICAgICAgIyAgIHZhbGlkYXRlIHRoaXMgZnVuY3Rpb24gbm90IGFscmVhZHkgZGVmaW5lZAorICAgICAgICAjICAgaW5pdGlhbGl6ZSBhbiBlbnRyeSBpbiB0aGUgZnVuY3Rpb24gZGljaXRvbmFyeQorICAgICAgICAjICAgICAgIGluY2x1ZGluZyBhIG1hc2sgdGFibGUgd2l0aCBubyB2YWx1ZXMgeWV0IGRlZmluZWQKKyAgICAgICAgIworICAgICAgICBpZiBmaWVsZHNbMF0gPT0gJ25hbWUnOgorICAgICAgICAgICAgbmFtZSA9IGZpZWxkc1sxXQorICAgICAgICAgICAgaWYgc3RhdGUgIT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiJ25hbWUnICVzIGZvdW5kIGJlZm9yZSBwcmV2aW91cyBuYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXRlZCIgJSAoZmllbGRzWzFdKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RhdGUgPSAxCisgICAgICAgICAgICBpZiBuYW1lIGluIEZ1bmN0czoKKyAgICAgICAgICAgICAgICBwcmludCgibmFtZSAnJXMnIGFscmVhZHkgcHJlc2VudCAtIG1heSBnaXZlIiBcCisgICAgICAgICAgICAgICAgICAgICAgIiB3cm9uZyByZXN1bHRzIiAlIChuYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBkaWN0IGVudHJ5IHdpdGggdHdvIGxpc3QgZWxlbWVudHMgKGNoZGF0YSwgcmFuZ2VkYXRhKQorICAgICAgICAgICAgICAgIEZ1bmN0c1tuYW1lXSA9IFsgW10sIFtdIF0KKyAgICAgICAgICAgICAgICBmb3IgdiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgICAgICAgICBGdW5jdHNbbmFtZV1bMF0uYXBwZW5kKDApCisgICAgICAgICMKKyAgICAgICAgIyBlbmQgbGluZToKKyAgICAgICAgIyAgIHZhbGlkYXRlIHRoZXJlIHdhcyBhIHByZWNlZGluZyBmdW5jdGlvbiBuYW1lIGxpbmUKKyAgICAgICAgIyAgIHNldCBzdGF0ZSB0byBzaG93IG5vIGN1cnJlbnQgZnVuY3Rpb24gYWN0aXZlCisgICAgICAgICMKKyAgICAgICAgZWxpZiBmaWVsZHNbMF0gPT0gJ2VuZCc6CisgICAgICAgICAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50KCInZW5kJyBmb3VuZCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGJsb2NrIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RhdGUgPSAwCiAKLQkjCi0JIyB1ciBsaW5lOgotCSMgICB2YWxpZGF0ZSBmdW5jdGlvbiBoYXMgYmVlbiBkZWZpbmVkCi0JIyAgIHByb2Nlc3MgcmVtYWluaW5nIGZpZWxkcyBvbiB0aGUgbGluZSwgd2hpY2ggbWF5IGJlIGVpdGhlcgotCSMJaW5kaXZpZHVhbCB1bmljb2RlIHZhbHVlcyBvciByYW5nZXMgb2YgdmFsdWVzCi0JIwotCWVsaWYgZmllbGRzWzBdID09ICd1cic6Ci0JICAgIGlmIHN0YXRlICE9IDE6Ci0JCXJhaXNlIFZhbGlkYXRpb25FcnJvciwgIid1cicgZm91bmQgb3V0c2lkZSBvZiAnbmFtZScgYmxvY2siCi0JICAgIGZvciBlbCBpbiBmaWVsZHNbMTpdOgotCQlwb3MgPSBzdHJpbmcuZmluZChlbCwgJy4uJykKLQkJIyBwb3MgPD0wIG1lYW5zIG5vdCBhIHJhbmdlLCBzbyBtdXN0IGJlIGluZGl2aWR1YWwgdmFsdWUKLQkJaWYgcG9zIDw9IDA6Ci0JCSAgICAjIGNoZWFwIGhhbmRsaW5nIG9mIGhleCBvciBkZWNpbWFsIHZhbHVlcwotCQkgICAgaWYgZWxbMDoyXSA9PSAnMHgnOgotCQkgICAgICAgIHZhbHVlID0gaW50KGVsWzI6XSwxNikKLQkJICAgIGVsaWYgZWxbMF0gPT0gIiciOgotCQkJdmFsdWUgPSBvcmQoZWxbMV0pCi0JCSAgICBlbHNlOgotCQkJdmFsdWUgPSBpbnQoZWwpCi0JCSAgICBpZiAoKHZhbHVlIDwgMCkgfCAodmFsdWUgPiAweDFmZmZmZikpOgotCQkJcmFpc2UgVmFsaWRhdGlvbkVycm9yLCAnSWxsZWdhbCB2YWx1ZSAoJXMpIGluIGNoIGZvcidcCi0JCQkJJyBuYW1lICVzJyAlIChlbCxuYW1lKQotCQkgICAgIyBmb3IgdXIgd2UgaGF2ZSBvbmx5IHJhbmdlcyAobWFrZXMgdGhpbmdzIHNpbXBsZXIpLAotCQkgICAgIyBzbyBjb252ZXJ0IHZhbCB0byByYW5nZQotCQkgICAgY3VycmFuZ2UgPSAodmFsdWUsIHZhbHVlKQotCQkjIHBvcyA+IDAgbWVhbnMgdGhpcyBpcyBhIHJhbmdlLCBzbyBpc29sYXRlL3ZhbGlkYXRlCi0JCSMgdGhlIGludGVydmFsCi0JCWVsc2U6Ci0JCSAgICAjIHNwbGl0IHRoZSByYW5nZSBpbnRvIGl0J3MgZmlyc3QtdmFsLCBsYXN0LXZhbAotCQkgICAgKGZpcnN0LCBsYXN0KSA9IHN0cmluZy5zcGxpdChlbCwgIi4uIikKLQkJICAgICMgY29udmVydCB2YWx1ZXMgZnJvbSB0ZXh0IGludG8gYmluYXJ5Ci0JCSAgICBpZiBmaXJzdFswOjJdID09ICcweCc6CQotCQkJc3RhcnQgPSBpbnQoZmlyc3RbMjpdLDE2KQotCQkgICAgZWxpZiBmaXJzdFswXSA9PSAiJyI6Ci0JCQlzdGFydCA9IG9yZChmaXJzdFsxXSkKLQkJICAgIGVsc2U6Ci0JCQlzdGFydCA9IGludChmaXJzdCkKLQkJICAgIGlmIGxhc3RbMDoyXSA9PSAnMHgnOgotCQkJZW5kID0gaW50KGxhc3RbMjpdLDE2KQotCQkgICAgZWxpZiBsYXN0WzBdID09ICInIjoKLQkJCWVuZCA9IG9yZChsYXN0WzFdKQotCQkgICAgZWxzZToKLQkJCWVuZCA9IGludChsYXN0KQotCQkgICAgaWYgKHN0YXJ0IDwgMCkgfCAoZW5kID4gMHgxZmZmZmYpIHwgKHN0YXJ0ID4gZW5kKToKLQkJCXJhaXNlIFZhbGlkYXRpb25FcnJvciwgIkludmFsaWQgcmFuZ2UgJyVzJyIgJSBlbAotCQkgICAgY3VycmFuZ2UgPSAoc3RhcnQsIGVuZCkKLQkJIyBjb21tb24gcGF0aCAtICdjdXJyYW5nZScgaGFzIHRoZSByYW5nZSwgbm93IHRha2UgY2FyZSBvZiBpdAotCQkjIFdlIHNwbGl0IG9uIHNpbmdsZS1ieXRlIHZhbHVlcyB2cy4gbXVsdGlieXRlCi0JCWlmIGN1cnJhbmdlWzFdIDwgMHgxMDA6CSMgc2luZ2xlLWJ5dGUKLQkJICAgIGZvciBjaCBpbiByYW5nZShjdXJyYW5nZVswXSxjdXJyYW5nZVsxXSsxKToKLQkJCSMgdmFsaWRhdGUgdGhhdCB2YWx1ZSBub3QgcHJldmlvdXNseSBkZWZpbmVkCi0JCQlpZiBGdW5jdHNbbmFtZV1bMF1bY2hdOgotCQkJICAgIG1zZyA9ICJEdXBsaWNhdGUgY2ggdmFsdWUgJyVzJyBmb3IgbmFtZSAnJXMnIiAlIChlbCwgbmFtZSkKLQkJCSAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IsIG1zZwotCQkJRnVuY3RzW25hbWVdWzBdW2NoXSA9IDEKLQkJZWxzZToJCQkjIG11bHRpLWJ5dGUKLQkJICAgIGlmIGN1cnJhbmdlIGluIEZ1bmN0c1tuYW1lXVsxXToKLQkJCXJhaXNlIFZhbGlkYXRpb25FcnJvciwgInJhbmdlIGFscmVhZHkgZGVmaW5lZCBpbiIgXAotCQkJCSIgZnVuY3Rpb24iCi0JCSAgICBlbHNlOgotCQkJRnVuY3RzW25hbWVdWzFdLmFwcGVuZChjdXJyYW5nZSkKKyAgICAgICAgIworICAgICAgICAjIHVyIGxpbmU6CisgICAgICAgICMgICB2YWxpZGF0ZSBmdW5jdGlvbiBoYXMgYmVlbiBkZWZpbmVkCisgICAgICAgICMgICBwcm9jZXNzIHJlbWFpbmluZyBmaWVsZHMgb24gdGhlIGxpbmUsIHdoaWNoIG1heSBiZSBlaXRoZXIKKyAgICAgICAgIyAgICAgICBpbmRpdmlkdWFsIHVuaWNvZGUgdmFsdWVzIG9yIHJhbmdlcyBvZiB2YWx1ZXMKKyAgICAgICAgIworICAgICAgICBlbGlmIGZpZWxkc1swXSA9PSAndXInOgorICAgICAgICAgICAgaWYgc3RhdGUgIT0gMToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIid1cicgZm91bmQgb3V0c2lkZSBvZiAnbmFtZScgYmxvY2siKQorICAgICAgICAgICAgZm9yIGVsIGluIGZpZWxkc1sxOl06CisgICAgICAgICAgICAgICAgcG9zID0gZWwuZmluZCgnLi4nKQorICAgICAgICAgICAgICAgICMgcG9zIDw9MCBtZWFucyBub3QgYSByYW5nZSwgc28gbXVzdCBiZSBpbmRpdmlkdWFsIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgcG9zIDw9IDA6CisgICAgICAgICAgICAgICAgICAgICMgY2hlYXAgaGFuZGxpbmcgb2YgaGV4IG9yIGRlY2ltYWwgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGlmIGVsWzA6Ml0gPT0gJzB4JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW50KGVsWzI6XSwxNikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBlbFswXSA9PSAiJyI6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9yZChlbFsxXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW50KGVsKQorICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlIDwgMCkgfCAodmFsdWUgPiAweDFmZmZmZikpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbGxlZ2FsIHZhbHVlICglcykgaW4gY2ggZm9yJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBuYW1lICVzJyAlIChlbCxuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgIyBmb3IgdXIgd2UgaGF2ZSBvbmx5IHJhbmdlcyAobWFrZXMgdGhpbmdzIHNpbXBsZXIpLAorICAgICAgICAgICAgICAgICAgICAjIHNvIGNvbnZlcnQgdmFsIHRvIHJhbmdlCisgICAgICAgICAgICAgICAgICAgIGN1cnJhbmdlID0gKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHBvcyA+IDAgbWVhbnMgdGhpcyBpcyBhIHJhbmdlLCBzbyBpc29sYXRlL3ZhbGlkYXRlCisgICAgICAgICAgICAgICAgIyB0aGUgaW50ZXJ2YWwKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHNwbGl0IHRoZSByYW5nZSBpbnRvIGl0J3MgZmlyc3QtdmFsLCBsYXN0LXZhbAorICAgICAgICAgICAgICAgICAgICAoZmlyc3QsIGxhc3QpID0gZWwuc3BsaXQoIi4uIikKKyAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHZhbHVlcyBmcm9tIHRleHQgaW50byBiaW5hcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RbMDoyXSA9PSAnMHgnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpbnQoZmlyc3RbMjpdLDE2KQorICAgICAgICAgICAgICAgICAgICBlbGlmIGZpcnN0WzBdID09ICInIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gb3JkKGZpcnN0WzFdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpbnQoZmlyc3QpCisgICAgICAgICAgICAgICAgICAgIGlmIGxhc3RbMDoyXSA9PSAnMHgnOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gaW50KGxhc3RbMjpdLDE2KQorICAgICAgICAgICAgICAgICAgICBlbGlmIGxhc3RbMF0gPT0gIiciOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gb3JkKGxhc3RbMV0pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBpbnQobGFzdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgfCAoZW5kID4gMHgxZmZmZmYpIHwgKHN0YXJ0ID4gZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCByYW5nZSAnJXMnIiAlIGVsKQorICAgICAgICAgICAgICAgICAgICBjdXJyYW5nZSA9IChzdGFydCwgZW5kKQorICAgICAgICAgICAgICAgICMgY29tbW9uIHBhdGggLSAnY3VycmFuZ2UnIGhhcyB0aGUgcmFuZ2UsIG5vdyB0YWtlIGNhcmUgb2YgaXQKKyAgICAgICAgICAgICAgICAjIFdlIHNwbGl0IG9uIHNpbmdsZS1ieXRlIHZhbHVlcyB2cy4gbXVsdGlieXRlCisgICAgICAgICAgICAgICAgaWYgY3VycmFuZ2VbMV0gPCAweDEwMDogIyBzaW5nbGUtYnl0ZQorICAgICAgICAgICAgICAgICAgICBmb3IgY2ggaW4gcmFuZ2UoY3VycmFuZ2VbMF0sY3VycmFuZ2VbMV0rMSk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHZhbGlkYXRlIHRoYXQgdmFsdWUgbm90IHByZXZpb3VzbHkgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgRnVuY3RzW25hbWVdWzBdW2NoXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRHVwbGljYXRlIGNoIHZhbHVlICclcycgZm9yIG5hbWUgJyVzJyIgJSAoZWwsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0c1tuYW1lXVswXVtjaF0gPSAxCisgICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgIyBtdWx0aS1ieXRlCisgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJhbmdlIGluIEZ1bmN0c1tuYW1lXVsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigicmFuZ2UgYWxyZWFkeSBkZWZpbmVkIGluIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3RzW25hbWVdWzFdLmFwcGVuZChjdXJyYW5nZSkKIAogICAgIGV4Y2VwdDoKLQlwcmludCAiRmFpbGVkIHRvIHByb2Nlc3MgbGluZTogJXMiICUgKGxpbmUpCi0JcmFpc2UKKyAgICAgICAgcHJpbnQoIkZhaWxlZCB0byBwcm9jZXNzIGxpbmU6ICVzIiAlIChsaW5lKSkKKyAgICAgICAgcmFpc2UKICMKICMgQXQgdGhpcyBwb2ludCwgdGhlIGVudGlyZSBkZWZpbml0aW9uIGZpbGUgaGFzIGJlZW4gcHJvY2Vzc2VkLiAgTm93IHdlCiAjIGVudGVyIHRoZSBvdXRwdXQgcGhhc2UsIHdoZXJlIHdlIGdlbmVyYXRlIHRoZSB0d28gZmlsZXMgY2h2YWxpZC5jIGFuZCcKQEAgLTE5NCwxMyArMTkzLDEzIEBACiB0cnk6CiAgICAgaGVhZGVyID0gb3BlbigiaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oIiwgInciKQogZXhjZXB0OgotICAgIHByaW50ICJGYWlsZWQgdG8gb3BlbiBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgiCisgICAgcHJpbnQoIkZhaWxlZCB0byBvcGVuIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaCIpCiAgICAgc3lzLmV4aXQoMSkKIAogdHJ5OgogICAgIG91dHB1dCA9IG9wZW4oImNodmFsaWQuYyIsICJ3IikKIGV4Y2VwdDoKLSAgICBwcmludCAiRmFpbGVkIHRvIG9wZW4gY2h2YWxpZC5jIgorICAgIHByaW50KCJGYWlsZWQgdG8gb3BlbiBjaHZhbGlkLmMiKQogICAgIHN5cy5leGl0KDEpCiAKIGRhdGUgPSB0aW1lLmFzY3RpbWUodGltZS5sb2NhbHRpbWUodGltZS50aW1lKCkpKQpAQCAtMjM2LDM3ICsyMzUsMzcgQEAKIHR5cGVkZWYgc3RydWN0IF94bWxDaFNSYW5nZSB4bWxDaFNSYW5nZTsKIHR5cGVkZWYgeG1sQ2hTUmFuZ2UgKnhtbENoU1JhbmdlUHRyOwogc3RydWN0IF94bWxDaFNSYW5nZSB7Ci0gICAgdW5zaWduZWQgc2hvcnQJbG93OwotICAgIHVuc2lnbmVkIHNob3J0CWhpZ2g7CisgICAgdW5zaWduZWQgc2hvcnRcdGxvdzsKKyAgICB1bnNpZ25lZCBzaG9ydFx0aGlnaDsKIH07CiAKIHR5cGVkZWYgc3RydWN0IF94bWxDaExSYW5nZSB4bWxDaExSYW5nZTsKIHR5cGVkZWYgeG1sQ2hMUmFuZ2UgKnhtbENoTFJhbmdlUHRyOwogc3RydWN0IF94bWxDaExSYW5nZSB7Ci0gICAgdW5zaWduZWQgaW50CWxvdzsKLSAgICB1bnNpZ25lZCBpbnQJaGlnaDsKKyAgICB1bnNpZ25lZCBpbnRcdGxvdzsKKyAgICB1bnNpZ25lZCBpbnRcdGhpZ2g7CiB9OwogCiB0eXBlZGVmIHN0cnVjdCBfeG1sQ2hSYW5nZUdyb3VwIHhtbENoUmFuZ2VHcm91cDsKIHR5cGVkZWYgeG1sQ2hSYW5nZUdyb3VwICp4bWxDaFJhbmdlR3JvdXBQdHI7CiBzdHJ1Y3QgX3htbENoUmFuZ2VHcm91cCB7Ci0gICAgaW50CQkJbmJTaG9ydFJhbmdlOwotICAgIGludAkJCW5iTG9uZ1JhbmdlOwotICAgIGNvbnN0IHhtbENoU1JhbmdlCSpzaG9ydFJhbmdlOwkvKiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgcmFuZ2VzICovCi0gICAgY29uc3QgeG1sQ2hMUmFuZ2UJKmxvbmdSYW5nZTsKKyAgICBpbnRcdFx0XHRuYlNob3J0UmFuZ2U7CisgICAgaW50XHRcdFx0bmJMb25nUmFuZ2U7CisgICAgY29uc3QgeG1sQ2hTUmFuZ2VcdCpzaG9ydFJhbmdlO1x0LyogcG9pbnRzIHRvIGFuIGFycmF5IG9mIHJhbmdlcyAqLworICAgIGNvbnN0IHhtbENoTFJhbmdlXHQqbG9uZ1JhbmdlOwogfTsKIAogLyoqCiAgKiBSYW5nZSBjaGVja2luZyByb3V0aW5lCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAotCQl4bWxDaGFySW5SYW5nZSh1bnNpZ25lZCBpbnQgdmFsLCBjb25zdCB4bWxDaFJhbmdlR3JvdXAgKmdyb3VwKTsKK1hNTFBVQkZVTiBpbnQKK1x0XHR4bWxDaGFySW5SYW5nZSh1bnNpZ25lZCBpbnQgdmFsLCBjb25zdCB4bWxDaFJhbmdlR3JvdXAgKmdyb3VwKTsKIAogIiIiICUgKGRhdGUsIHNvdXJjZXMpKTsKIG91dHB1dC53cml0ZSgKICIiIi8qCi0gKiBjaHZhbGlkLmM6CXRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGNoYXJhY3RlciByYW5nZQotICoJCXZhbGlkYXRpb24gQVBJcworICogY2h2YWxpZC5jOlx0dGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgY2hhcmFjdGVyIHJhbmdlCisgKlx0XHR2YWxpZGF0aW9uIEFQSXMKICAqCiAgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgY3ZzIHNvdXJjZQogICogZGVmaW5pdGlvbiBmaWxlcyB1c2luZyB0aGUgZ2VuQ2hSYW5nZXMucHkgUHl0aG9uIHNjcmlwdApAQCAtMjgwLDYgKzI3OSw4IEBACiAjaW5jbHVkZSAibGlieG1sLmgiCiAjaW5jbHVkZSA8bGlieG1sL2NodmFsaWQuaD4KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAvKgogICogVGhlIGluaXRpYWwgdGFibGVzICh7ZnVuY19uYW1lfV90YWIpIGFyZSB1c2VkIHRvIHZhbGlkYXRlIHdoZXRoZXIgYQogICogc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGdyb3VwLiAgRWFjaCB0YWJsZQpAQCAtMjk5LDggKzMwMCw3IEBACiAjIGNvbXBhcmVzLCBvdGhlcndpc2Ugd2Ugb3V0cHV0IGEgMjU2LWJ5dGUgdGFibGUgYW5kIGEgbWFjcm8gdG8gdXNlIGl0LgogIwogCi1ma2V5cyA9IEZ1bmN0cy5rZXlzKCkJIyBEaWN0aW9uYXJ5IG9mIGFsbCBkZWZpbmVkIGZ1bmN0aW9ucwotZmtleXMuc29ydCgpCQkjIFB1dCBzb21lIG9yZGVyIHRvIG91ciBvdXRwdXQKK2ZrZXlzID0gc29ydGVkKEZ1bmN0cy5rZXlzKCkpCiAKIGZvciBmIGluIGZrZXlzOgogCkBAIC0zMDgsMTIgKzMwOCwxMiBAQAogIyBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIHN1Y2ggcmFuZ2VzIGlzIGxlc3MgdGhhbiBtaW5UYWJsZVNpemUsIHdlIGdlbmVyYXRlCiAjIGFuIGlubGluZSBtYWNybyBmb3IgZGlyZWN0IGNvbXBhcmlzb25zOyBpZiBncmVhdGVyLCB3ZSBnZW5lcmF0ZSBhIGxvb2t1cAogIyB0YWJsZS4KLSAgICBpZiBtYXgoRnVuY3RzW2ZdWzBdKSA+IDA6CSMgb25seSBjaGVjayBpZiBhdCBsZWFzdCBvbmUgZW50cnkKKyAgICBpZiBtYXgoRnVuY3RzW2ZdWzBdKSA+IDA6ICAgIyBvbmx5IGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBlbnRyeQogICAgICAgICByYW5nZVRhYmxlID0gbWFrZVJhbmdlKEZ1bmN0c1tmXVswXSkKLQludW1SYW5nZXMgPSBsZW4ocmFuZ2VUYWJsZSkKLQlpZiBudW1SYW5nZXMgPj0gbWluVGFibGVTaXplOgkjIHRhYmxlIGlzIHdvcnRod2hpbGUKLQkgICAgaGVhZGVyLndyaXRlKCJYTUxQVUJWQVIgY29uc3QgdW5zaWduZWQgY2hhciAlc190YWJbMjU2XTtcbiIgJSBmKQotCSAgICBoZWFkZXIud3JpdGUoIiIiCisgICAgICAgIG51bVJhbmdlcyA9IGxlbihyYW5nZVRhYmxlKQorICAgICAgICBpZiBudW1SYW5nZXMgPj0gbWluVGFibGVTaXplOiAgICMgdGFibGUgaXMgd29ydGh3aGlsZQorICAgICAgICAgICAgaGVhZGVyLndyaXRlKCJYTUxQVUJWQVIgY29uc3QgdW5zaWduZWQgY2hhciAlc190YWJbMjU2XTtcbiIgJSBmKQorICAgICAgICAgICAgaGVhZGVyLndyaXRlKCIiIgogLyoqCiAgKiAlc19jaDoKICAqIEBjOiBjaGFyIHRvIHZhbGlkYXRlCkBAIC0zMjEsMjkgKzMyMSwyOSBAQAogICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgZ2VuQ2hSYW5nZXMucHkKICAqLwogIiIiICUgZikKLQkgICAgaGVhZGVyLndyaXRlKCIjZGVmaW5lICVzX2NoKGMpXHQoJXNfdGFiWyhjKV0pXG4iICUgKGYsIGYpKQorICAgICAgICAgICAgaGVhZGVyLndyaXRlKCIjZGVmaW5lICVzX2NoKGMpXHQoJXNfdGFiWyhjKV0pXG4iICUgKGYsIGYpKQogCi0JICAgICMgd3JpdGUgdGhlIGNvbnN0YW50IGRhdGEgdG8gdGhlIGNvZGUgZmlsZQotCSAgICBvdXRwdXQud3JpdGUoImNvbnN0IHVuc2lnbmVkIGNoYXIgJXNfdGFiWzI1Nl0gPSB7XG4iICUgZikKLQkgICAgcGxpbmUgPSAiICAgIgotCSAgICBmb3IgbiBpbiByYW5nZSgyNTUpOgotCQlwbGluZSArPSAiIDB4JTAyeCwiICUgRnVuY3RzW2ZdWzBdW25dCi0JCWlmIGxlbihwbGluZSkgPiA3MjoKLQkJICAgIG91dHB1dC53cml0ZShwbGluZSArICJcbiIpCi0JCSAgICBwbGluZSA9ICIgICAiCi0JICAgIG91dHB1dC53cml0ZShwbGluZSArICIgMHglMDJ4IH07XG5cbiIgJSBGdW5jdHNbZl1bMF1bMjU1XSkKKyAgICAgICAgICAgICMgd3JpdGUgdGhlIGNvbnN0YW50IGRhdGEgdG8gdGhlIGNvZGUgZmlsZQorICAgICAgICAgICAgb3V0cHV0LndyaXRlKCJjb25zdCB1bnNpZ25lZCBjaGFyICVzX3RhYlsyNTZdID0ge1xuIiAlIGYpCisgICAgICAgICAgICBwbGluZSA9ICIgICAiCisgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgyNTUpOgorICAgICAgICAgICAgICAgIHBsaW5lICs9ICIgMHglMDJ4LCIgJSBGdW5jdHNbZl1bMF1bbl0KKyAgICAgICAgICAgICAgICBpZiBsZW4ocGxpbmUpID4gNzI6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShwbGluZSArICJcbiIpCisgICAgICAgICAgICAgICAgICAgIHBsaW5lID0gIiAgICIKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShwbGluZSArICIgMHglMDJ4IH07XG5cbiIgJSBGdW5jdHNbZl1bMF1bMjU1XSkKIAotCWVsc2U6CQkjIGlubGluZSBjaGVjayBpcyB1c2VkCi0JICAgICMgZmlyc3QgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIC0gaWYgc3BhY2UgaXMgcHJlc2VudCwKLQkgICAgIyBwdXQgaXQgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IHNvIGl0IGlzIGNoZWNrZWQgZmlyc3QKLQkgICAgdHJ5OgotCQlpeCA9IHJhbmdlVGFibGUucmVtb3ZlKCgweDIwLCAweDIwKSkKLQkJcmFuZ2VUYWJsZS5pbnNlcnQoMCwgKDB4MjAsIDB4MjApKQotCSAgICBleGNlcHQ6Ci0JCXBhc3MKLQkgICAgZmlyc3RGbGFnID0gMQotCSAgICAKLQkgICAgaGVhZGVyLndyaXRlKCIiIgorICAgICAgICBlbHNlOiAgICAgICAgICAgIyBpbmxpbmUgY2hlY2sgaXMgdXNlZAorICAgICAgICAgICAgIyBmaXJzdCBhbm90aGVyIGxpdHRsZSBvcHRpbWlzYXRpb24gLSBpZiBzcGFjZSBpcyBwcmVzZW50LAorICAgICAgICAgICAgIyBwdXQgaXQgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IHNvIGl0IGlzIGNoZWNrZWQgZmlyc3QKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpeCA9IHJhbmdlVGFibGUucmVtb3ZlKCgweDIwLCAweDIwKSkKKyAgICAgICAgICAgICAgICByYW5nZVRhYmxlLmluc2VydCgwLCAoMHgyMCwgMHgyMCkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZmlyc3RGbGFnID0gMQorCisgICAgICAgICAgICBoZWFkZXIud3JpdGUoIiIiCiAvKioKICAqICVzX2NoOgogICogQGM6IGNoYXIgdG8gdmFsaWRhdGUKQEAgLTM1MSwzMiArMzUxLDMyIEBACiAgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBnZW5DaFJhbmdlcy5weQogICovCiAiIiIgJSBmKQotCSAgICAjIG9rYXksIEknbSB0aXJlZCBvZiB0aGUgbWVzc3kgbGluZXVwIC0gbGV0J3MgYXV0b21hdGUgaXQhCi0JICAgIHBsaW5lID0gIiNkZWZpbmUgJXNfY2goYykiICUgZgotCSAgICAjICdudGFiJyBpcyBudW1iZXIgb2YgdGFicyBuZWVkZWQgdG8gcG9zaXRpb24gdG8gY29sLiAzMyBmcm9tIG5hbWUgZW5kCi0JICAgIG50YWIgPSA0IC0gKGxlbihwbGluZSkpIC8gOAotCSAgICBpZiBudGFiIDwgMDoKLQkJbnRhYiA9IDAKLQkgICAganVzdCA9ICIiCi0JICAgIGZvciBpIGluIHJhbmdlKG50YWIpOgotCQlqdXN0ICs9ICJcdCIKLQkgICAgcGxpbmUgPSBwbGluZSArIGp1c3QgKyAiKCIKLQkgICAgZm9yIHJnIGluIHJhbmdlVGFibGU6Ci0JCWlmIG5vdCBmaXJzdEZsYWc6Ci0JCSAgICBwbGluZSArPSAiIHx8IFxcXG5cdFx0XHRcdCAiCi0JCWVsc2U6Ci0JCSAgICBmaXJzdEZsYWcgPSAwCi0JCWlmIHJnWzBdID09IHJnWzFdOgkJIyBzaW5nbGUgdmFsdWUgLSBjaGVjayBlcXVhbAotCQkgICAgcGxpbmUgKz0gIigoYykgPT0gMHgleCkiICUgcmdbMF0KLQkJZWxzZToJCQkJIyB2YWx1ZSByYW5nZQotCQkjIHNpbmNlIHdlIGFyZSBkb2luZyBjaGFyLCBhbHNvIGNoYW5nZSByYW5nZSBlbmRpbmcgaW4gMHhmZgotCQkgICAgaWYgcmdbMV0gIT0gMHhmZjoKLQkJICAgICAgICBwbGluZSArPSAiKCgweCV4IDw9IChjKSkgJiYiICUgcmdbMF0KLQkJICAgICAgICBwbGluZSArPSAiICgoYykgPD0gMHgleCkpIiAlIHJnWzFdCi0JCSAgICBlbHNlOgotCQkgICAgICAgIHBsaW5lICs9ICIgKDB4JXggPD0gKGMpKSIgJSByZ1swXQotCSAgICBwbGluZSArPSAiKVxuIgotCSAgICBoZWFkZXIud3JpdGUocGxpbmUpCisgICAgICAgICAgICAjIG9rYXksIEknbSB0aXJlZCBvZiB0aGUgbWVzc3kgbGluZXVwIC0gbGV0J3MgYXV0b21hdGUgaXQhCisgICAgICAgICAgICBwbGluZSA9ICIjZGVmaW5lICVzX2NoKGMpIiAlIGYKKyAgICAgICAgICAgICMgJ250YWInIGlzIG51bWJlciBvZiB0YWJzIG5lZWRlZCB0byBwb3NpdGlvbiB0byBjb2wuIDMzIGZyb20gbmFtZSBlbmQKKyAgICAgICAgICAgIG50YWIgPSA0IC0gKGxlbihwbGluZSkpIC8vIDgKKyAgICAgICAgICAgIGlmIG50YWIgPCAwOgorICAgICAgICAgICAgICAgIG50YWIgPSAwCisgICAgICAgICAgICBqdXN0ID0gIiIKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG50YWIpOgorICAgICAgICAgICAgICAgIGp1c3QgKz0gIlx0IgorICAgICAgICAgICAgcGxpbmUgPSBwbGluZSArIGp1c3QgKyAiKCIKKyAgICAgICAgICAgIGZvciByZyBpbiByYW5nZVRhYmxlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdEZsYWc6CisgICAgICAgICAgICAgICAgICAgIHBsaW5lICs9ICIgfHwgXFxcblx0XHRcdFx0ICIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaXJzdEZsYWcgPSAwCisgICAgICAgICAgICAgICAgaWYgcmdbMF0gPT0gcmdbMV06ICAgICAgICAgICAgICAjIHNpbmdsZSB2YWx1ZSAtIGNoZWNrIGVxdWFsCisgICAgICAgICAgICAgICAgICAgIHBsaW5lICs9ICIoKGMpID09IDB4JXgpIiAlIHJnWzBdCisgICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIHJhbmdlCisgICAgICAgICAgICAgICAgIyBzaW5jZSB3ZSBhcmUgZG9pbmcgY2hhciwgYWxzbyBjaGFuZ2UgcmFuZ2UgZW5kaW5nIGluIDB4ZmYKKyAgICAgICAgICAgICAgICAgICAgaWYgcmdbMV0gIT0gMHhmZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsaW5lICs9ICIoKDB4JXggPD0gKGMpKSAmJiIgJSByZ1swXQorICAgICAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIiAoKGMpIDw9IDB4JXgpKSIgJSByZ1sxXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIiAoMHgleCA8PSAoYykpIiAlIHJnWzBdCisgICAgICAgICAgICBwbGluZSArPSAiKVxuIgorICAgICAgICAgICAgaGVhZGVyLndyaXRlKHBsaW5lKQogCiAgICAgaGVhZGVyLndyaXRlKCIiIgogLyoqCkBAIC0zODcsNDQgKzM4Nyw0NCBAQAogICovCiAiIiIgJSBmKQogICAgIHBsaW5lID0gIiNkZWZpbmUgJXNRKGMpIiAlIGYKLSAgICBudGFiID0gNCAtIChsZW4ocGxpbmUpKSAvIDgKKyAgICBudGFiID0gNCAtIChsZW4ocGxpbmUpKSAvLyA4CiAgICAgaWYgbnRhYiA8IDA6Ci0JbnRhYiA9IDAKKyAgICAgICAgbnRhYiA9IDAKICAgICBqdXN0ID0gIiIKICAgICBmb3IgaSBpbiByYW5nZShudGFiKToKLQlqdXN0ICs9ICJcdCIKKyAgICAgICAganVzdCArPSAiXHQiCiAgICAgaGVhZGVyLndyaXRlKHBsaW5lICsganVzdCArICIoKChjKSA8IDB4MTAwKSA/IFxcXG5cdFx0XHRcdCAiKQogICAgIGlmIG1heChGdW5jdHNbZl1bMF0pID4gMDoKLQloZWFkZXIud3JpdGUoIiVzX2NoKChjKSkgOiIgJSBmKQorICAgICAgICBoZWFkZXIud3JpdGUoIiVzX2NoKChjKSkgOiIgJSBmKQogICAgIGVsc2U6Ci0JaGVhZGVyLndyaXRlKCIwIDoiKQorICAgICAgICBoZWFkZXIud3JpdGUoIjAgOiIpCiAKICAgICAjIGlmIG5vIHJhbmdlcyBkZWZpbmVkLCB2YWx1ZSBpbnZhbGlkIGlmID49IDB4MTAwCiAgICAgbnVtUmFuZ2VzID0gbGVuKEZ1bmN0c1tmXVsxXSkKICAgICBpZiBudW1SYW5nZXMgPT0gMDoKLQloZWFkZXIud3JpdGUoIiAwKVxuXG4iKQorICAgICAgICBoZWFkZXIud3JpdGUoIiAwKVxuXG4iKQogICAgIGVsc2U6Ci0JaWYgbnVtUmFuZ2VzID49IG1pblRhYmxlU2l6ZToKLQkgICAgaGVhZGVyLndyaXRlKCIgXFxcblx0XHRcdFx0IHhtbENoYXJJblJhbmdlKChjKSwgJiVzR3JvdXApKVxuXG4iICAlIGYpCi0JZWxzZToJCSMgaWYgPCBtaW5UYWJsZVNpemUsIGdlbmVyYXRlIGlubGluZSBjb2RlCi0JICAgIGZpcnN0RmxhZyA9IDEKLQkgICAgZm9yIHJnIGluIEZ1bmN0c1tmXVsxXToKLQkJaWYgbm90IGZpcnN0RmxhZzoKLQkJICAgIHBsaW5lICs9ICIgfHwgXFxcblx0XHRcdFx0ICIKLQkJZWxzZToKLQkJICAgIGZpcnN0RmxhZyA9IDAKLQkJICAgIHBsaW5lID0gIlxcXG5cdFx0XHRcdCgiCi0JCWlmIHJnWzBdID09IHJnWzFdOgkJIyBzaW5nbGUgdmFsdWUgLSBjaGVjayBlcXVhbAotCQkgICAgcGxpbmUgKz0gIigoYykgPT0gMHgleCkiICUgcmdbMF0KLQkJZWxzZToJCQkJIyB2YWx1ZSByYW5nZQotCQkgICAgcGxpbmUgKz0gIigoMHgleCA8PSAoYykpICYmIiAlIHJnWzBdCi0JCSAgICBwbGluZSArPSAiICgoYykgPD0gMHgleCkpIiAlIHJnWzFdCi0JICAgIHBsaW5lICs9ICIpKVxuXG4iCi0JICAgIGhlYWRlci53cml0ZShwbGluZSkKKyAgICAgICAgaWYgbnVtUmFuZ2VzID49IG1pblRhYmxlU2l6ZToKKyAgICAgICAgICAgIGhlYWRlci53cml0ZSgiIFxcXG5cdFx0XHRcdCB4bWxDaGFySW5SYW5nZSgoYyksICYlc0dyb3VwKSlcblxuIiAgJSBmKQorICAgICAgICBlbHNlOiAgICAgICAgICAgIyBpZiA8IG1pblRhYmxlU2l6ZSwgZ2VuZXJhdGUgaW5saW5lIGNvZGUKKyAgICAgICAgICAgIGZpcnN0RmxhZyA9IDEKKyAgICAgICAgICAgIGZvciByZyBpbiBGdW5jdHNbZl1bMV06CisgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0RmxhZzoKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIiB8fCBcXFxuXHRcdFx0XHQgIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RmxhZyA9IDAKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgPSAiXFxcblx0XHRcdFx0KCIKKyAgICAgICAgICAgICAgICBpZiByZ1swXSA9PSByZ1sxXTogICAgICAgICAgICAgICMgc2luZ2xlIHZhbHVlIC0gY2hlY2sgZXF1YWwKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIigoYykgPT0gMHgleCkiICUgcmdbMF0KKyAgICAgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIigoMHgleCA8PSAoYykpICYmIiAlIHJnWzBdCisgICAgICAgICAgICAgICAgICAgIHBsaW5lICs9ICIgKChjKSA8PSAweCV4KSkiICUgcmdbMV0KKyAgICAgICAgICAgIHBsaW5lICs9ICIpKVxuXG4iCisgICAgICAgICAgICBoZWFkZXIud3JpdGUocGxpbmUpCiAKIAogICAgIGlmIGxlbihGdW5jdHNbZl1bMV0pID4gMDoKLQloZWFkZXIud3JpdGUoIlhNTFBVQlZBUiBjb25zdCB4bWxDaFJhbmdlR3JvdXAgJXNHcm91cDtcbiIgJSBmKQorICAgICAgICBoZWFkZXIud3JpdGUoIlhNTFBVQlZBUiBjb25zdCB4bWxDaFJhbmdlR3JvdXAgJXNHcm91cDtcbiIgJSBmKQogCiAKICMKQEAgLTQzMiw0OSArNDMyLDQ5IEBACiAjCiAKIGZvciBmIGluIGZrZXlzOgotICAgIGlmIGxlbihGdW5jdHNbZl1bMV0pID4gMDoJIyBvbmx5IGdlbmVyYXRlIGlmIHVuaWNvZGUgcmFuZ2VzIHByZXNlbnQKLQlyYW5nZVRhYmxlID0gRnVuY3RzW2ZdWzFdCi0JcmFuZ2VUYWJsZS5zb3J0KCkJIyBhc2NlbmRpbmcgdHVwbGUgc2VxdWVuY2UKLQludW1TaG9ydCA9IDAKLQludW1Mb25nICA9IDAKLQlmb3IgcmcgaW4gcmFuZ2VUYWJsZToKLQkgICAgaWYgcmdbMV0gPCAweDEwMDAwOgkjIGlmIHNob3J0IHZhbHVlCi0JCWlmIG51bVNob3J0ID09IDA6CSMgZmlyc3Qgb2NjdXJyZW5jZQotCQkgICAgcGxpbmUgPSAic3RhdGljIGNvbnN0IHhtbENoU1JhbmdlICVzX3NybmdbXSA9IHsiICUgZgotCQllbHNlOgotCQkgICAgcGxpbmUgKz0gIiwiCi0JCW51bVNob3J0ICs9IDEKLQkJaWYgbGVuKHBsaW5lKSA+IDYwOgotCQkgICAgb3V0cHV0LndyaXRlKHBsaW5lICsgIlxuIikKLQkJICAgIHBsaW5lID0gIiAgICAiCisgICAgaWYgbGVuKEZ1bmN0c1tmXVsxXSkgPiAwOiAgICMgb25seSBnZW5lcmF0ZSBpZiB1bmljb2RlIHJhbmdlcyBwcmVzZW50CisgICAgICAgIHJhbmdlVGFibGUgPSBGdW5jdHNbZl1bMV0KKyAgICAgICAgcmFuZ2VUYWJsZS5zb3J0KCkgICAgICAgIyBhc2NlbmRpbmcgdHVwbGUgc2VxdWVuY2UKKyAgICAgICAgbnVtU2hvcnQgPSAwCisgICAgICAgIG51bUxvbmcgID0gMAorICAgICAgICBmb3IgcmcgaW4gcmFuZ2VUYWJsZToKKyAgICAgICAgICAgIGlmIHJnWzFdIDwgMHgxMDAwMDogIyBpZiBzaG9ydCB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIG51bVNob3J0ID09IDA6ICAgICAgICMgZmlyc3Qgb2NjdXJyZW5jZQorICAgICAgICAgICAgICAgICAgICBwbGluZSA9ICJzdGF0aWMgY29uc3QgeG1sQ2hTUmFuZ2UgJXNfc3JuZ1tdID0geyIgJSBmCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIiwiCisgICAgICAgICAgICAgICAgbnVtU2hvcnQgKz0gMQorICAgICAgICAgICAgICAgIGlmIGxlbihwbGluZSkgPiA2MDoKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKHBsaW5lICsgIlxuIikKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgPSAiICAgICIKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBwbGluZSArPSAiICIKLQkJcGxpbmUgKz0gInsweCV4LCAweCV4fSIgJSAocmdbMF0sIHJnWzFdKQotCSAgICBlbHNlOgkJIyBpZiBsb25nIHZhbHVlCi0JCWlmIG51bUxvbmcgPT0gMDoJIyBmaXJzdCBvY2N1cnJlbmNlCi0JCSAgICBpZiBudW1TaG9ydCA+IDA6CSMgaWYgdGhlcmUgd2VyZSBzaG9ydHMsIGZpbmlzaCB0aGVtIG9mZgotCQkJb3V0cHV0LndyaXRlKHBsaW5lICsgIn07XG4iKQotCQkgICAgcGxpbmUgPSAic3RhdGljIGNvbnN0IHhtbENoTFJhbmdlICVzX2xybmdbXSA9IHsgIiAlIGYKLQkJZWxzZToKLQkJICAgIHBsaW5lICs9ICIsICIKLQkJbnVtTG9uZyArPSAxCi0JCWlmIGxlbihwbGluZSkgPiA2MDoKLQkJICAgIG91dHB1dC53cml0ZShwbGluZSArICJcbiIpCi0JCSAgICBwbGluZSA9ICIgICAgIgotCQlwbGluZSArPSAiezB4JXgsIDB4JXh9IiAlIChyZ1swXSwgcmdbMV0pCi0Jb3V0cHV0LndyaXRlKHBsaW5lICsgIn07XG4iKQkjIGZpbmlzaCBvZmYgbGFzdCBncm91cAorICAgICAgICAgICAgICAgIHBsaW5lICs9ICJ7MHgleCwgMHgleH0iICUgKHJnWzBdLCByZ1sxXSkKKyAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgIyBpZiBsb25nIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgbnVtTG9uZyA9PSAwOiAgICAgICAgIyBmaXJzdCBvY2N1cnJlbmNlCisgICAgICAgICAgICAgICAgICAgIGlmIG51bVNob3J0ID4gMDogICAgIyBpZiB0aGVyZSB3ZXJlIHNob3J0cywgZmluaXNoIHRoZW0gb2ZmCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUocGxpbmUgKyAifTtcbiIpCisgICAgICAgICAgICAgICAgICAgIHBsaW5lID0gInN0YXRpYyBjb25zdCB4bWxDaExSYW5nZSAlc19scm5nW10gPSB7ICIgJSBmCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgKz0gIiwgIgorICAgICAgICAgICAgICAgIG51bUxvbmcgKz0gMQorICAgICAgICAgICAgICAgIGlmIGxlbihwbGluZSkgPiA2MDoKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKHBsaW5lICsgIlxuIikKKyAgICAgICAgICAgICAgICAgICAgcGxpbmUgPSAiICAgICIKKyAgICAgICAgICAgICAgICBwbGluZSArPSAiezB4JXgsIDB4JXh9IiAlIChyZ1swXSwgcmdbMV0pCisgICAgICAgIG91dHB1dC53cml0ZShwbGluZSArICJ9O1xuIikgICAgIyBmaW5pc2ggb2ZmIGxhc3QgZ3JvdXAKIAotCXBsaW5lID0gImNvbnN0IHhtbENoUmFuZ2VHcm91cCAlc0dyb3VwID1cblx0eyVkLCAlZCwgIiAlIChmLCBudW1TaG9ydCwgbnVtTG9uZykKLQlpZiBudW1TaG9ydCA+IDA6Ci0JICAgIHBsaW5lICs9ICIlc19zcm5nIiAlIGYKLQllbHNlOgotCSAgICBwbGluZSArPSAiKHhtbENoU1JhbmdlUHRyKTAiCi0JaWYgbnVtTG9uZyA+IDA6Ci0JICAgIHBsaW5lICs9ICIsICVzX2xybmciICUgZgotCWVsc2U6Ci0JICAgIHBsaW5lICs9ICIsICh4bWxDaExSYW5nZVB0cikwIgotCQotCW91dHB1dC53cml0ZShwbGluZSArICJ9O1xuXG4iKQorICAgICAgICBwbGluZSA9ICJjb25zdCB4bWxDaFJhbmdlR3JvdXAgJXNHcm91cCA9XG5cdHslZCwgJWQsICIgJSAoZiwgbnVtU2hvcnQsIG51bUxvbmcpCisgICAgICAgIGlmIG51bVNob3J0ID4gMDoKKyAgICAgICAgICAgIHBsaW5lICs9ICIlc19zcm5nIiAlIGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBsaW5lICs9ICIoeG1sQ2hTUmFuZ2VQdHIpMCIKKyAgICAgICAgaWYgbnVtTG9uZyA+IDA6CisgICAgICAgICAgICBwbGluZSArPSAiLCAlc19scm5nIiAlIGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBsaW5lICs9ICIsICh4bWxDaExSYW5nZVB0cikwIgorCisgICAgICAgIG91dHB1dC53cml0ZShwbGluZSArICJ9O1xuXG4iKQogCiBvdXRwdXQud3JpdGUoCiAiIiIKQEAgLTQ5NSw0MyArNDk1LDQzIEBACiAgICAgY29uc3QgeG1sQ2hMUmFuZ2UgKmxwdHI7CiAKICAgICBpZiAocnB0ciA9PSBOVUxMKSByZXR1cm4oMCk7Ci0gICAgaWYgKHZhbCA8IDB4MTAwMDApIHsJLyogaXMgdmFsIGluICdzaG9ydCcgb3IgJ2xvbmcnICBhcnJheT8gKi8KLQlpZiAocnB0ci0+bmJTaG9ydFJhbmdlID09IDApCi0JICAgIHJldHVybiAwOwotCWxvdyA9IDA7Ci0JaGlnaCA9IHJwdHItPm5iU2hvcnRSYW5nZSAtIDE7Ci0Jc3B0ciA9IHJwdHItPnNob3J0UmFuZ2U7Ci0Jd2hpbGUgKGxvdyA8PSBoaWdoKSB7Ci0JICAgIG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7Ci0JICAgIGlmICgodW5zaWduZWQgc2hvcnQpIHZhbCA8IHNwdHJbbWlkXS5sb3cpIHsKLQkJaGlnaCA9IG1pZCAtIDE7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBpZiAoKHVuc2lnbmVkIHNob3J0KSB2YWwgPiBzcHRyW21pZF0uaGlnaCkgewotCQkgICAgbG93ID0gbWlkICsgMTsKLQkJfSBlbHNlIHsKLQkJICAgIHJldHVybiAxOwotCQl9Ci0JICAgIH0KLQl9CisgICAgaWYgKHZhbCA8IDB4MTAwMDApIHtcdC8qIGlzIHZhbCBpbiAnc2hvcnQnIG9yICdsb25nJyAgYXJyYXk/ICovCitcdGlmIChycHRyLT5uYlNob3J0UmFuZ2UgPT0gMCkKK1x0ICAgIHJldHVybiAwOworXHRsb3cgPSAwOworXHRoaWdoID0gcnB0ci0+bmJTaG9ydFJhbmdlIC0gMTsKK1x0c3B0ciA9IHJwdHItPnNob3J0UmFuZ2U7CitcdHdoaWxlIChsb3cgPD0gaGlnaCkgeworXHQgICAgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKK1x0ICAgIGlmICgodW5zaWduZWQgc2hvcnQpIHZhbCA8IHNwdHJbbWlkXS5sb3cpIHsKK1x0XHRoaWdoID0gbWlkIC0gMTsKK1x0ICAgIH0gZWxzZSB7CitcdFx0aWYgKCh1bnNpZ25lZCBzaG9ydCkgdmFsID4gc3B0clttaWRdLmhpZ2gpIHsKK1x0XHQgICAgbG93ID0gbWlkICsgMTsKK1x0XHR9IGVsc2UgeworXHRcdCAgICByZXR1cm4gMTsKK1x0XHR9CitcdCAgICB9CitcdH0KICAgICB9IGVsc2UgewotCWlmIChycHRyLT5uYkxvbmdSYW5nZSA9PSAwKSB7Ci0JICAgIHJldHVybiAwOwotCX0KLQlsb3cgPSAwOwotCWhpZ2ggPSBycHRyLT5uYkxvbmdSYW5nZSAtIDE7Ci0JbHB0ciA9IHJwdHItPmxvbmdSYW5nZTsKLQl3aGlsZSAobG93IDw9IGhpZ2gpIHsKLQkgICAgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKLQkgICAgaWYgKHZhbCA8IGxwdHJbbWlkXS5sb3cpIHsKLQkJaGlnaCA9IG1pZCAtIDE7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBpZiAodmFsID4gbHB0clttaWRdLmhpZ2gpIHsKLQkJICAgIGxvdyA9IG1pZCArIDE7Ci0JCX0gZWxzZSB7Ci0JCSAgICByZXR1cm4gMTsKLQkJfQotCSAgICB9Ci0JfQorXHRpZiAocnB0ci0+bmJMb25nUmFuZ2UgPT0gMCkgeworXHQgICAgcmV0dXJuIDA7CitcdH0KK1x0bG93ID0gMDsKK1x0aGlnaCA9IHJwdHItPm5iTG9uZ1JhbmdlIC0gMTsKK1x0bHB0ciA9IHJwdHItPmxvbmdSYW5nZTsKK1x0d2hpbGUgKGxvdyA8PSBoaWdoKSB7CitcdCAgICBtaWQgPSAobG93ICsgaGlnaCkgLyAyOworXHQgICAgaWYgKHZhbCA8IGxwdHJbbWlkXS5sb3cpIHsKK1x0XHRoaWdoID0gbWlkIC0gMTsKK1x0ICAgIH0gZWxzZSB7CitcdFx0aWYgKHZhbCA+IGxwdHJbbWlkXS5oaWdoKSB7CitcdFx0ICAgIGxvdyA9IG1pZCArIDE7CitcdFx0fSBlbHNlIHsKK1x0XHQgICAgcmV0dXJuIDE7CitcdFx0fQorXHQgICAgfQorXHR9CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNTU5LDcgKzU1OSw3IEBACiAgKi8KICIiIikKICAgICBvdXRwdXQud3JpdGUoImludFxuJXModW5zaWduZWQgaW50IGNoKSB7XG4gICAgcmV0dXJuKCVzUShjaCkpO1xufVxuXG4iICUgKGYsZikpCi0gICAgaGVhZGVyLndyaXRlKCJYTUxQVUJGVU4gaW50IFhNTENBTExcblx0XHQlcyh1bnNpZ25lZCBpbnQgY2gpO1xuIiAlIGYpOworICAgIGhlYWRlci53cml0ZSgiWE1MUFVCRlVOIGludFxuXHRcdCVzKHVuc2lnbmVkIGludCBjaCk7XG4iICUgZik7CiAjCiAjIFJ1biBjb21wbGV0ZSAtIHdyaXRlIHRyYWlsZXJzIGFuZCBjbG9zZSB0aGUgb3V0cHV0IGZpbGVzCiAjCmRpZmYgLS1naXQgYS9nZW5Vbmljb2RlLnB5IGIvZ2VuVW5pY29kZS5weQppbmRleCBlYmY0OGU2Li5jNmUxM2E4IDEwMDc1NQotLS0gYS9nZW5Vbmljb2RlLnB5CisrKyBiL2dlblVuaWNvZGUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgT3JpZ2luYWwgc2NyaXB0IG1vZGlmaWVkIGluIE5vdmVtYmVyIDIwMDMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKICMgdGhlIGNoYXJhY3Rlci12YWxpZGF0aW9uIHJhbmdlIHJvdXRpbmVzLCBhbmQgdXBkYXRlZCB0byB0aGUKQEAgLTM3Myw3ICszNzMsNyBAQAogCiBmb3IgYmxvY2sgaW4gYmtleXM6CiAgICAgbmFtZSA9IGJsb2NrLnJlcGxhY2UoJy0nLCAnJykKLSAgICBoZWFkZXIud3JpdGUoIlhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJcyVzXHQoaW50IGNvZGUpO1xuIiAlIG5hbWUpCisgICAgaGVhZGVyLndyaXRlKCJYTUxQVUJGVU4gaW50IHhtbFVDU0lzJXNcdChpbnQgY29kZSk7XG4iICUgbmFtZSkKICAgICBvdXRwdXQud3JpdGUoIi8qKlxuICogeG1sVUNTSXMlczpcbiAqIEBjb2RlOiBVQ1MgY29kZSBwb2ludFxuIiAlIChuYW1lKSkKICAgICBvdXRwdXQud3JpdGUoIiAqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgcGFydCBvZiAlcyBVQ1MgQmxvY2tcbiIlCiAgICAgICAgICAgICAgICAgIChibG9jaykpCkBAIC0zODgsNyArMzg4LDcgQEAKICAgICAgICAgb3V0cHV0LndyaXRlKCIoKGNvZGUgPj0gJXMpICYmIChjb2RlIDw9ICVzKSkiICUgKHN0YXJ0LCBlbmQpKQogICAgIG91dHB1dC53cml0ZSgiKTtcbn1cblxuIikKIAotaGVhZGVyLndyaXRlKCJcblhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0Jsb2NrXHQoaW50IGNvZGUsIGNvbnN0IGNoYXIgKmJsb2NrKTtcblxuIikKK2hlYWRlci53cml0ZSgiXG5YTUxQVUJGVU4gaW50IHhtbFVDU0lzQmxvY2tcdChpbnQgY29kZSwgY29uc3QgY2hhciAqYmxvY2spO1xuXG4iKQogb3V0cHV0LndyaXRlKAogIiIiLyoqCiAgKiB4bWxVQ1NJc0Jsb2NrOgpAQCAtNDEzLDcgKzQxMyw3IEBACiAKIGZvciBuYW1lIGluIGNrZXlzOgogICAgIHJhbmdlcyA9IENhdGVnb3JpZXNbbmFtZV0KLSAgICBoZWFkZXIud3JpdGUoIlhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdCVzXHQoaW50IGNvZGUpO1xuIiAlIG5hbWUpCisgICAgaGVhZGVyLndyaXRlKCJYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0JXNcdChpbnQgY29kZSk7XG4iICUgbmFtZSkKICAgICBvdXRwdXQud3JpdGUoIi8qKlxuICogeG1sVUNTSXNDYXQlczpcbiAqIEBjb2RlOiBVQ1MgY29kZSBwb2ludFxuIiAlIChuYW1lKSkKICAgICBvdXRwdXQud3JpdGUoIiAqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgcGFydCBvZiAlcyBVQ1MgQ2F0ZWdvcnlcbiIlCiAgICAgICAgICAgICAgICAgIChuYW1lKSkKQEAgLTQzOCw3ICs0MzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGhleChiZWdpbiksIGhleChlbmQpKSkKICAgICBvdXRwdXQud3JpdGUoIik7XG59XG5cbiIpCiAKLWhlYWRlci53cml0ZSgiXG5YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRcdChpbnQgY29kZSwgY29uc3QgY2hhciAqY2F0KTtcbiIpCitoZWFkZXIud3JpdGUoIlxuWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdFx0KGludCBjb2RlLCBjb25zdCBjaGFyICpjYXQpO1xuIikKIG91dHB1dC53cml0ZSgKICIiIi8qKgogICogeG1sVUNTSXNDYXQ6CmRpZmYgLS1naXQgYS9nZW50ZXN0LnB5IGIvZ2VudGVzdC5weQppbmRleCAxNzJlZDdlLi4xNmMwZTM3IDEwMDc1NQotLS0gYS9nZW50ZXN0LnB5CisrKyBiL2dlbnRlc3QucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgZ2VuZXJhdGUgYSB0ZXN0ZXIgcHJvZ3JhbSBmb3IgdGhlIEFQSQogIwpAQCAtMjA1LDYgKzIwNSwxMCBAQAogIiIiLAogICAgInhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmQiOgogICAgICAgICJpZiAoZmQgPj0gMCkgZmQgPSAtMTsiLAorICAgInhtbFNBWERlZmF1bHRWZXJzaW9uIjogIiIiCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBvcmlnaW5hbF92ZXJzaW9uID0geG1sU0FYRGVmYXVsdFZlcnNpb24oMik7CisiIiIsCiB9CiBleHRyYV9wb3N0X2NhbGwgPSB7CiAgICAieG1sQWRkQ2hpbGQiOiAKQEAgLTI2MSw3ICsyNjUsMTAgQEAKICAgICJ4bWxQYXJzZUNodW5rIjogImlmIChjdHh0ICE9IE5VTEwpIHt4bWxGcmVlRG9jKGN0eHQtPm15RG9jKTsgY3R4dC0+bXlEb2MgPSBOVUxMO30iLAogICAgInhtbFBhcnNlRXh0UGFyc2VkRW50IjogImlmIChjdHh0ICE9IE5VTEwpIHt4bWxGcmVlRG9jKGN0eHQtPm15RG9jKTsgY3R4dC0+bXlEb2MgPSBOVUxMO30iLAogICAgInhtbERPTVdyYXBBZG9wdE5vZGUiOiAiaWYgKChub2RlICE9IE5VTEwpICYmIChub2RlLT5wYXJlbnQgPT0gTlVMTCkpIHt4bWxVbmxpbmtOb2RlKG5vZGUpO3htbEZyZWVOb2RlKG5vZGUpO25vZGUgPSBOVUxMO30iLAotICAgInhtbEJ1ZmZlclNldEFsbG9jYXRpb25TY2hlbWUiOiAiaWYgKChidWYgIT0gTlVMTCkgJiYgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgJiYgKGJ1Zi0+Y29udGVudCAhPSBOVUxMKSAmJiAoYnVmLT5jb250ZW50ICE9IHN0YXRpY19idWZfY29udGVudCkpIHsgeG1sRnJlZShidWYtPmNvbnRlbnQpOyBidWYtPmNvbnRlbnQgPSBOVUxMO30iCisgICAieG1sU0FYRGVmYXVsdFZlcnNpb24iOiAiIiIKKyAgICAgICAgICAgICh2b2lkKXhtbFNBWERlZmF1bHRWZXJzaW9uKG9yaWdpbmFsX3ZlcnNpb24pOworICAgICAgICB9CisiIiIsCiB9CiAKIG1vZHVsZXMgPSBbXQpAQCAtODAwLDkgKzgwNyw5IEBACiAgICAgICAgICAgICAgICAgaWYgYnR5cGUgPT0gImNvbnN0X2NoYXJfcHRyIiBvciBidHlwZSA9PSAiY29uc3RfeG1sQ2hhcl9wdHIiOgogICAgICAgICAgICAgICAgICAgICB0ZXN0LndyaXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKCglcyAhPSBOVUxMKSAmJlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICglcyA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSAlcykgKyAxKSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBjb250aW51ZTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICUgKGJuYW0sIG5hbSwgYm5hbSkpCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgKCVzID4geG1sU3RybGVuKEJBRF9DQVNUICVzKSkpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJXMgPSAwO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoYm5hbSwgbmFtLCBibmFtLCBuYW0pKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBpID0gaSArIDE7CiAKZGlmZiAtLWdpdCBhL2dsb2JhbC5kYXRhIGIvZ2xvYmFsLmRhdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOTUxOWEuLjAwMDAwMDAKLS0tIGEvZ2xvYmFsLmRhdGEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jdHlwZSxuYW1lLGFycmF5Pyx0aHJlYWRHbG9iYWxEZWZhdWx0IGFjY2Vzc29yPwotaW50LG9sZFhNTFdEY29tcGF0aWJpbGl0eSwsCi14bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lLHhtbEJ1ZmZlckFsbG9jU2NoZW1lLCwxCi1pbnQseG1sRGVmYXVsdEJ1ZmZlclNpemUsLDEKLXhtbFNBWEhhbmRsZXJWMSx4bWxEZWZhdWx0U0FYSGFuZGxlciwsCi14bWxTQVhMb2NhdG9yLHhtbERlZmF1bHRTQVhMb2NhdG9yLCwKLWludCx4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUsLDEKLXhtbEdlbmVyaWNFcnJvckZ1bmMseG1sR2VuZXJpY0Vycm9yLCwKLXhtbFN0cnVjdHVyZWRFcnJvckZ1bmMseG1sU3RydWN0dXJlZEVycm9yLCwKLXZvaWQgKix4bWxHZW5lcmljRXJyb3JDb250ZXh0LCwKLXZvaWQgKix4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0LCwKLWludCx4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSwsMQotaW50LHhtbEluZGVudFRyZWVPdXRwdXQsLDEKLWNvbnN0IGNoYXIgKix4bWxUcmVlSW5kZW50U3RyaW5nLCwxCi1pbnQseG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSwsMQotaW50LHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlLCwxCi1pbnQseG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSwsMQotaW50LHhtbFBhcnNlckRlYnVnRW50aXRpZXMsLDEKLWNvbnN0IGNoYXIgKix4bWxQYXJzZXJWZXJzaW9uLCwKLWludCx4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSwsMQotaW50LHhtbFNhdmVOb0VtcHR5VGFncywsMQotI2NvbnN0IHhtbENoYXIseG1sU3RyaW5nQ29tbWVudCxbXSwxCi0jY29uc3QgeG1sQ2hhcix4bWxTdHJpbmdUZXh0LFtdLDEKLSNjb25zdCB4bWxDaGFyLHhtbFN0cmluZ1RleHROb2VuYyxbXSwxCi1pbnQseG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlLCwxCi14bWxSZWdpc3Rlck5vZGVGdW5jLHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSwsCi14bWxEZXJlZ2lzdGVyTm9kZUZ1bmMseG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUsLAoteG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMseG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlLCwKLXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyx4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlLCwKZGlmZiAtLWdpdCBhL2dsb2JhbHMuYyBiL2dsb2JhbHMuYwppbmRleCBhMTVhYzMwLi43ZWQ2N2Q3IDEwMDY0NAotLS0gYS9nbG9iYWxzLmMKKysrIGIvZ2xvYmFscy5jCkBAIC0yLDkgKzIsNiBAQAogICogZ2xvYmFscy5jOiBkZWZpbml0aW9uIGFuZCBoYW5kbGluZyBvZiB0aGUgc2V0IG9mIGdsb2JhbCB2YXJpYWJsZXMKICAqICAgICAgICAgICAgb2YgdGhlIGxpYnJhcnkKICAqCi0gKiBUaGUgYm90dG9tIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBidWlsZF9nbG9iLnB5Ci0gKiBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gZmlsZSBnbG9iYWwuZGF0YQotICoKICAqIFNlZSBDb3B5cmlnaHQgZm9yIHRoZSBzdGF0dXMgb2YgdGhpcyBzb2Z0d2FyZS4KICAqCiAgKiBHYXJ5IFBlbm5pbmd0b24gPEdhcnkuUGVubmluZ3RvbkB1ay5zdW4uY29tPgpAQCAtMTQsNDIgKzExLDE1MiBAQAogI2RlZmluZSBJTl9MSUJYTUwKICNpbmNsdWRlICJsaWJ4bWwuaCIKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNkZWZpbmUgWE1MX0dMT0JBTFNfTk9fUkVERUZJTklUSU9OCiAjaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGlieG1sL3htbElPLmg+CisjaW5jbHVkZSA8bGlieG1sL0hUTUxwYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC9TQVguaD4KKyNpbmNsdWRlIDxsaWJ4bWwvU0FYMi5oPgogCi0vKiAjZGVmaW5lIERFQlVHX0dMT0JBTFMgKi8KKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9nbG9iYWxzLmgiCisjaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRzLmgiCisjaW5jbHVkZSAicHJpdmF0ZS90cmVlLmgiCisKKy8qCisgKiBUaHJlYWQtbG9jYWwgc3RvcmFnZSBlbXVsYXRpb24uCisgKgorICogVGhpcyB3b3JrcyBieSByZXBsYWNpbmcgYSBnbG9iYWwgdmFyaWFibGUKKyAqCisgKiAgICAgZXh0ZXJuIHhtbEVycm9yIHhtbExhc3RFcnJvcjsKKyAqCisgKiB3aXRoIGEgbWFjcm8gdGhhdCBjYWxscyBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHBvaW50ZXIgdG8gdGhlIGdsb2JhbCBpbgorICogdGhyZWFkLWxvY2FsIHN0b3JhZ2U6CisgKgorICogICAgIHhtbEVycm9yICpfX3htbExhc3RFcnJvcih2b2lkKTsKKyAqICAgICAjZGVmaW5lIHhtbEVycm9yICgqX194bWxMYXN0RXJyb3IoKSk7CisgKgorICogVGhlIGNvZGUgY2FuIG9wZXJhdGUgaW4gYSBtdWx0aXR1ZGUgb2Ygd2F5cyBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LgorICogRmlyc3Qgd2Ugc3VwcG9ydCBQT1NJWCBhbmQgV2luZG93cyB0aHJlYWRzLiBUaGVuIHdlIHN1cHBvcnQgYm90aCB0aHJlYWQtbG9jYWwKKyAqIHN0b3JhZ2UgcHJvdmlkZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBvbGRlciBtZXRob2RzIGxpa2UgdGhyZWFkLXNwZWNpZmljIGRhdGEKKyAqIChwdGhyZWFkcykgb3IgVGxzQWxsb2MgKFdpbmRvd3MpLgorICoKKyAqIFRvIGNsZWFuIHVwIHRocmVhZC1sb2NhbCBzdG9yYWdlLCB3ZSB1c2UgdGhyZWFkLXNwZWNpZmljIGRhdGEgb24gUE9TSVguCisgKiBPbiBXaW5kb3dzLCB3ZSBlaXRoZXIgdXNlIERsbE1haW4gd2hlbiBjb21waWxpbmcgYSBETEwgb3IgYSByZWdpc3RlcmVkIHdhaXQKKyAqIGZ1bmN0aW9uIGZvciBzdGF0aWMgYnVpbGRzLgorICovCiAKIC8qCiAgKiBIZWxwZnVsIE1hY3JvCiAgKi8KICNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgSVNfTUFJTl9USFJFQUQgKHhtbElzTWFpblRocmVhZCgpKQorI2RlZmluZSBJU19NQUlOX1RIUkVBRCAoeG1sSXNNYWluVGhyZWFkSW50ZXJuYWwoKSkKICNlbHNlCiAjZGVmaW5lIElTX01BSU5fVEhSRUFEIDEKICNlbmRpZgogCisjZGVmaW5lIFhNTF9ERUNMQVJFX01FTUJFUihuYW1lLCB0eXBlLCBhdHRycykgXAorICB0eXBlIGdzXyMjbmFtZTsKKworc3RydWN0IF94bWxHbG9iYWxTdGF0ZSB7CisgICAgaW50IGluaXRpYWxpemVkOworCisjaWYgZGVmaW5lZChIQVZFX1dJTjMyX1RIUkVBRFMpICYmIFwKKyAgICBkZWZpbmVkKExJQlhNTF9TVEFUSUMpICYmICFkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkKKyAgICB2b2lkICp0aHJlYWRIYW5kbGU7CisgICAgdm9pZCAqd2FpdEhhbmRsZTsKKyNlbmRpZgorCisjZGVmaW5lIFhNTF9PUCBYTUxfREVDTEFSRV9NRU1CRVIKK1hNTF9HTE9CQUxTX0FMTE9DCitYTUxfR0xPQkFMU19FUlJPUgorWE1MX0dMT0JBTFNfSFRNTAorWE1MX0dMT0JBTFNfSU8KK1hNTF9HTE9CQUxTX1BBUlNFUgorWE1MX0dMT0JBTFNfVFJFRQorI3VuZGVmIFhNTF9PUAorfTsKKworc3RhdGljIGludCBwYXJzZXJJbml0aWFsaXplZDsKKwogLyoKICAqIE11dGV4IHRvIHByb3RlY3QgIkZvck5ld1RocmVhZHMiIHZhcmlhYmxlcwogICovCi1zdGF0aWMgeG1sTXV0ZXhQdHIgeG1sVGhyRGVmTXV0ZXggPSBOVUxMOworc3RhdGljIHhtbE11dGV4IHhtbFRockRlZk11dGV4OwogCi0vKioKLSAqIHhtbEluaXRHbG9iYWxzOgorI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAorCisvKgorICogT24gRGFyd2luLCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBkZXN0cnVjdG9ycyBzZWVtIHRvIGJlIHJ1biBiZWZvcmUKKyAqIHB0aHJlYWQgdGhyZWFkLXNwZWNpZmljIGRhdGEgZGVzdHJ1Y3RvcnMuIFRoaXMgY2F1c2VzIEFTYW4gdG8KKyAqIHJlcG9ydCBhIHVzZS1hZnRlci1mcmVlLgogICoKLSAqIERFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sSW5pdFBhcnNlciB0bwotICogaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4KLSAqCi0gKiBBZGRpdGlvbmFsIGluaXRpYWxpc2F0aW9uIGZvciBtdWx0aS10aHJlYWRpbmcKKyAqIE9uIFdpbmRvd3MsIHdlIGNhbid0IHVzZSBUTFMgaW4gc3RhdGljIGJ1aWxkcy4gVGhlIFJlZ2lzdGVyV2FpdAorICogY2FsbGJhY2sgd291bGQgcnVuIGFmdGVyIFRMUyB3YXMgZGVhbGxvY2F0ZWQuCiAgKi8KLXZvaWQgeG1sSW5pdEdsb2JhbHModm9pZCkKLXsKLSAgICBpZiAoeG1sVGhyRGVmTXV0ZXggPT0gTlVMTCkKLSAgICAgICAgeG1sVGhyRGVmTXV0ZXggPSB4bWxOZXdNdXRleCgpOwotfQorI2lmIGRlZmluZWQoWE1MX1RIUkVBRF9MT0NBTCkgJiYgXAorICAgICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgXAorICAgICghZGVmaW5lZChIQVZFX1dJTjMyX1RIUkVBRFMpIHx8IFwKKyAgICAgIWRlZmluZWQoTElCWE1MX1NUQVRJQykgfHwgZGVmaW5lZChMSUJYTUxfU1RBVElDX0ZPUl9ETEwpKQorI2RlZmluZSBVU0VfVExTCisjZW5kaWYKKworI2lmZGVmIFVTRV9UTFMKK3N0YXRpYyBYTUxfVEhSRUFEX0xPQ0FMIHhtbEdsb2JhbFN0YXRlIGdsb2JhbFN0YXRlOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKworLyoKKyAqIFdlYWsgc3ltYm9sIGhhY2ssIHNlZSB0aHJlYWRzLmMKKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIFwKKyAgICBkZWZpbmVkKF9fR0xJQkNfXykgJiYgXAorICAgIF9fR0xJQkNfXyAqIDEwMCArIF9fR0xJQkNfTUlOT1JfXyA8IDIzNAorCisjcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYworI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKKyNwcmFnbWEgd2VhayBwdGhyZWFkX2VxdWFsCisjcHJhZ21hIHdlYWsgcHRocmVhZF9zZWxmCisKKyNkZWZpbmUgWE1MX1BUSFJFQURfV0VBSworCitzdGF0aWMgaW50IGxpYnhtbF9pc190aHJlYWRlZCA9IC0xOworCisjZW5kaWYKKworLyoKKyAqIE9uIFBPU0lYLCB3ZSBuZWVkIHRocmVhZC1zcGVjaWZpYyBkYXRhIGV2ZW4gd2l0aCB0aHJlYWQtbG9jYWwgc3RvcmFnZQorICogdG8gZGVzdHJveSBpbmRpcmVjdCByZWZlcmVuY2VzIGZyb20gZ2xvYmFsIHN0YXRlICh4bWxMYXN0RXJyb3IpIGF0CisgKiB0aHJlYWQgZXhpdC4KKyAqLworc3RhdGljIHB0aHJlYWRfa2V5X3QgZ2xvYmFsa2V5Oworc3RhdGljIHB0aHJlYWRfdCBtYWludGhyZWFkOworCisjZWxpZiBkZWZpbmVkIEhBVkVfV0lOMzJfVEhSRUFEUworCisjaWZuZGVmIFVTRV9UTFMKK3N0YXRpYyBEV09SRCBnbG9iYWxrZXkgPSBUTFNfT1VUX09GX0lOREVYRVM7CisjZW5kaWYKK3N0YXRpYyBEV09SRCBtYWludGhyZWFkOworCisjZW5kaWYgLyogSEFWRV9XSU4zMl9USFJFQURTICovCisKK3N0YXRpYyB2b2lkCit4bWxGcmVlR2xvYmFsU3RhdGUodm9pZCAqc3RhdGUpOworCisjZW5kaWYgLyogTElCWE1MX1RIUkVBRF9FTkFCTEVEICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgpAQCAtNjAsMTMgKzE2Nyw4IEBACiAvKgogICogTWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKICAqLwotI3VuZGVmCXhtbEZyZWUKLSN1bmRlZgl4bWxNYWxsb2MKLSN1bmRlZgl4bWxNYWxsb2NBdG9taWMKLSN1bmRlZgl4bWxNZW1TdHJkdXAKLSN1bmRlZgl4bWxSZWFsbG9jCiAKLSNpZiBkZWZpbmVkKERFQlVHX01FTU9SWV9MT0NBVElPTikgfHwgZGVmaW5lZChERUJVR19NRU1PUlkpCisjaWYgZGVmaW5lZChERUJVR19NRU1PUllfTE9DQVRJT04pCiB4bWxGcmVlRnVuYyB4bWxGcmVlID0gKHhtbEZyZWVGdW5jKSB4bWxNZW1GcmVlOwogeG1sTWFsbG9jRnVuYyB4bWxNYWxsb2MgPSAoeG1sTWFsbG9jRnVuYykgeG1sTWVtTWFsbG9jOwogeG1sTWFsbG9jRnVuYyB4bWxNYWxsb2NBdG9taWMgPSAoeG1sTWFsbG9jRnVuYykgeG1sTWVtTWFsbG9jOwpAQCAtMTMxLDUwICsyMzMsMTMgQEAKICAqIFJldHVybnMgdGhlIGNvcHkgb2YgdGhlIHN0cmluZyBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKICAqLwogeG1sU3RyZHVwRnVuYyB4bWxNZW1TdHJkdXAgPSB4bWxQb3NpeFN0cmR1cDsKLSNlbmRpZiAvKiBERUJVR19NRU1PUllfTE9DQVRJT04gfHwgREVCVUdfTUVNT1JZICovCi0KLSNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL1NBWC5oPgotCi0jdW5kZWYJaHRtbERlZmF1bHRTQVhIYW5kbGVyCi0jdW5kZWYJb2xkWE1MV0Rjb21wYXRpYmlsaXR5Ci0jdW5kZWYJeG1sQnVmZmVyQWxsb2NTY2hlbWUKLSN1bmRlZgl4bWxEZWZhdWx0QnVmZmVyU2l6ZQotI3VuZGVmCXhtbERlZmF1bHRTQVhIYW5kbGVyCi0jdW5kZWYJeG1sRGVmYXVsdFNBWExvY2F0b3IKLSN1bmRlZgl4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUKLSN1bmRlZgl4bWxHZW5lcmljRXJyb3IKLSN1bmRlZgl4bWxTdHJ1Y3R1cmVkRXJyb3IKLSN1bmRlZgl4bWxHZW5lcmljRXJyb3JDb250ZXh0Ci0jdW5kZWYJeG1sU3RydWN0dXJlZEVycm9yQ29udGV4dAotI3VuZGVmCXhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlCi0jdW5kZWYJeG1sSW5kZW50VHJlZU91dHB1dAotI3VuZGVmICB4bWxUcmVlSW5kZW50U3RyaW5nCi0jdW5kZWYJeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZQotI3VuZGVmCXhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlCi0jdW5kZWYJeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZQotI3VuZGVmCXhtbFBhcnNlckRlYnVnRW50aXRpZXMKLSN1bmRlZgl4bWxQYXJzZXJWZXJzaW9uCi0jdW5kZWYJeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUKLSN1bmRlZgl4bWxTYXZlTm9FbXB0eVRhZ3MKLSN1bmRlZgl4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUKLSN1bmRlZgl4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUKLSN1bmRlZgl4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZQotI3VuZGVmCXhtbExhc3RFcnJvcgotCi0jdW5kZWYgIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZQotI3VuZGVmICB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlCi0vKioKLSAqIHhtbFBhcnNlclZlcnNpb246Ci0gKgotICogQ29uc3RhbnQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGludGVybmFsIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkKLSAqLwotY29uc3QgY2hhciAqeG1sUGFyc2VyVmVyc2lvbiA9IExJQlhNTF9WRVJTSU9OX1NUUklORyBMSUJYTUxfVkVSU0lPTl9FWFRSQTsKKyNlbmRpZiAvKiBERUJVR19NRU1PUllfTE9DQVRJT04gKi8KIAogLyoqCiAgKiB4bWxCdWZmZXJBbGxvY1NjaGVtZToKICAqCisgKiBERVBSRUNBVEVEOiBEb24ndCB1c2UuCisgKgogICogR2xvYmFsIHNldHRpbmcsIGRlZmF1bHQgYWxsb2NhdGlvbiBwb2xpY3kgZm9yIGJ1ZmZlcnMsIGRlZmF1bHQgaXMKICAqIFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QKICAqLwpAQCAtMTgzLDYgKzI0OCw4IEBACiAvKioKICAqIHhtbERlZmF1bHRCdWZmZXJTaXplOgogICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZS4KKyAqCiAgKiBHbG9iYWwgc2V0dGluZywgZGVmYXVsdCBidWZmZXIgc2l6ZS4gRGVmYXVsdCB2YWx1ZSBpcyBCQVNFX0JVRkZFUl9TSVpFCiAgKi8KIGludCB4bWxEZWZhdWx0QnVmZmVyU2l6ZSA9IEJBU0VfQlVGRkVSX1NJWkU7CkBAIC0yMDEsNiArMjY4LDggQEAKIC8qKgogICogeG1sUGFyc2VyRGVidWdFbnRpdGllczoKICAqCisgKiBERVBSRUNBVEVEOiBEb24ndCB1c2UKKyAqCiAgKiBHbG9iYWwgc2V0dGluZywgYXNraW5nIHRoZSBwYXJzZXIgdG8gcHJpbnQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KICAqIHdoaWxlIGhhbmRsaW5nIGVudGl0aWVzLgogICogRGlzYWJsZWQgYnkgZGVmYXVsdApAQCAtMjEwLDYgKzI3OSw4IEBACiAvKioKICAqIHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZToKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgdGhlIG1vZGVybiBvcHRpb25zIEFQSSB3aXRoIFhNTF9QQVJTRV9EVERWQUxJRC4KKyAqCiAgKiBHbG9iYWwgc2V0dGluZywgaW5kaWNhdGUgdGhhdCB0aGUgcGFyc2VyIHNob3VsZCB3b3JrIGluIHZhbGlkYXRpbmcgbW9kZS4KICAqIERpc2FibGVkIGJ5IGRlZmF1bHQuCiAgKi8KQEAgLTIxOCw3ICsyODksOSBAQAogLyoqCiAgKiB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZToKICAqCi0gKiBHbG9iYWwgc2V0dGluZywgaW5kaWNhdGUgdGhhdCB0aGUgcGFyc2VyIHNob3VsZCBwcm92aWRlIHdhcm5pbmdzLgorICogREVQUkVDQVRFRDogRG9uJ3QgdXNlCisgKgorICogR2xvYmFsIHNldHRpbmcsIGluZGljYXRlIHRoYXQgdGhlIERURCB2YWxpZGF0aW9uIHNob3VsZCBwcm92aWRlIHdhcm5pbmdzLgogICogQWN0aXZhdGVkIGJ5IGRlZmF1bHQuCiAgKi8KIGludCB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSA9IDE7CkBAIC0yMjYsNiArMjk5LDggQEAKIC8qKgogICogeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZToKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgdGhlIG1vZGVybiBvcHRpb25zIEFQSSB3aXRoIFhNTF9QQVJTRV9EVERMT0FELgorICoKICAqIEdsb2JhbCBzZXR0aW5nLCBpbmRpY2F0ZSB0aGF0IHRoZSBwYXJzZXIgc2hvdWxkIGxvYWQgRFREIHdoaWxlIG5vdAogICogdmFsaWRhdGluZy4KICAqIERpc2FibGVkIGJ5IGRlZmF1bHQuCkBAIC0yMzUsNiArMzEwLDggQEAKIC8qKgogICogeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU6CiAgKgorICogREVQUkVDQVRFRDogVXNlIHRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgd2l0aCBYTUxfUEFSU0VfUEVEQU5USUMuCisgKgogICogR2xvYmFsIHNldHRpbmcsIGluZGljYXRlIHRoYXQgdGhlIHBhcnNlciBiZSBwZWRhbnRpYwogICogRGlzYWJsZWQgYnkgZGVmYXVsdC4KICAqLwpAQCAtMjQzLDYgKzMyMCw4IEBACiAvKioKICAqIHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlOgogICoKKyAqIERFUFJFQ0FURUQ6IFRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgYWx3YXlzIGVuYWJsZXMgbGluZSBudW1iZXJzLgorICoKICAqIEdsb2JhbCBzZXR0aW5nLCBpbmRpY2F0ZSB0aGF0IHRoZSBwYXJzZXIgc2hvdWxkIHN0b3JlIHRoZSBsaW5lIG51bWJlcgogICogaW4gdGhlIGNvbnRlbnQgZmllbGQgb2YgZWxlbWVudHMgaW4gdGhlIERPTSB0cmVlLgogICogRGlzYWJsZWQgYnkgZGVmYXVsdCBzaW5jZSB0aGlzIG1heSBub3QgYmUgc2FmZSBmb3Igb2xkIGNsYXNzZXMgb2YKQEAgLTI1Myw2ICszMzIsOCBAQAogLyoqCiAgKiB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlOgogICoKKyAqIERFUFJFQ0FURUQ6IFVzZSB0aGUgbW9kZXJuIG9wdGlvbnMgQVBJIHdpdGggWE1MX1BBUlNFX05PQkxBTktTLgorICoKICAqIEdsb2JhbCBzZXR0aW5nLCBpbmRpY2F0ZSB0aGF0IHRoZSBwYXJzZXIgc2hvdWxkIGtlZXAgYWxsIGJsYW5rcwogICogbm9kZXMgZm91bmQgaW4gdGhlIGNvbnRlbnQKICAqIEFjdGl2YXRlZCBieSBkZWZhdWx0LCB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCB0byBoYXZlIHRoZSBwYXJzZXIKQEAgLTI2NCw2ICszNDUsOCBAQAogLyoqCiAgKiB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWU6CiAgKgorICogREVQUkVDQVRFRDogVXNlIHRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgd2l0aCBYTUxfUEFSU0VfTk9FTlQuCisgKgogICogR2xvYmFsIHNldHRpbmcsIGluZGljYXRlIHRoYXQgdGhlIHBhcnNlciBzaG91bGQgbm90IGdlbmVyYXRlIGVudGl0eQogICogcmVmZXJlbmNlcyBidXQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBlbnRpdHkKICAqIERpc2FibGVkIGJ5IGRlZmF1bHQsIHRoaXMgc2hvdWxkIGJlIGFjdGl2YXRlZCB3aGVuIHVzaW5nIFhQYXRoIHNpbmNlCkBAIC0yNzMsMjYgKzM1NiwzOCBAQAogaW50IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSA9IDA7CiBzdGF0aWMgaW50IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZVRockRlZiA9IDA7CiAKKy8qKgorICogeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlOgorICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZQorICovCiB4bWxSZWdpc3Rlck5vZGVGdW5jIHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSA9IE5VTEw7CiBzdGF0aWMgeG1sUmVnaXN0ZXJOb2RlRnVuYyB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWVUaHJEZWYgPSBOVUxMOworCisvKioKKyAqIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlOgorICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZQorICovCiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBOVUxMOwogc3RhdGljIHhtbERlcmVnaXN0ZXJOb2RlRnVuYyB4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZVRockRlZiA9IE5VTEw7CiAKKy8qKgorICogeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlOgorICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZQorICovCiB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUgPSBOVUxMOwogc3RhdGljIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZVRockRlZiA9IE5VTEw7CiAKKy8qKgorICogeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZToKKyAqCisgKiBERVBSRUNBVEVEOiBEb24ndCB1c2UKKyAqLwogeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUgPSBOVUxMOwogc3RhdGljIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlVGhyRGVmID0gTlVMTDsKIAotLyoKLSAqIEVycm9yIGhhbmRsaW5nCi0gKi8KLQotLyogeG1sR2VuZXJpY0Vycm9yRnVuYyB4bWxHZW5lcmljRXJyb3IgPSB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYzsgKi8KLS8qIE11c3QgaW5pdGlhbGl6ZSB4bWxHZW5lcmljRXJyb3IgaW4geG1sSW5pdFBhcnNlciAqLwotdm9pZCBYTUxDREVDTCB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYwkodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsCi0JCQkJIGNvbnN0IGNoYXIgKm1zZywKLQkJCQkgLi4uKTsKIC8qKgogICogeG1sR2VuZXJpY0Vycm9yOgogICoKQEAgLTMyMyw2ICs0MTgsNyBAQAogc3RhdGljIHZvaWQgKnhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHRUaHJEZWYgPSBOVUxMOwogeG1sRXJyb3IgeG1sTGFzdEVycm9yOwogCisjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECiAvKgogICogb3V0cHV0IGRlZmF1bHRzCiAgKi8KQEAgLTM1MywxMSArNDQ5LDE1IEBACiAgKi8KIGludCB4bWxTYXZlTm9FbXB0eVRhZ3MgPSAwOwogc3RhdGljIGludCB4bWxTYXZlTm9FbXB0eVRhZ3NUaHJEZWYgPSAwOworI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogLyoqCiAgKiB4bWxEZWZhdWx0U0FYSGFuZGxlcjoKICAqCisgKiBERVBSRUNBVEVEOiBUaGlzIGhhbmRsZXIgaXMgdW51c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUKKyAqIHZlcnNpb25zLgorICoKICAqIERlZmF1bHQgU0FYIHZlcnNpb24xIGhhbmRsZXIgZm9yIFhNTCwgYnVpbGRzIHRoZSBET00gdHJlZQogICovCiB4bWxTQVhIYW5kbGVyVjEgeG1sRGVmYXVsdFNBWEhhbmRsZXIgPSB7CkBAIC0zODgsMTMgKzQ4OCwxNSBAQAogICAgIHhtbFNBWDJHZXRQYXJhbWV0ZXJFbnRpdHksCiAgICAgeG1sU0FYMkNEYXRhQmxvY2ssCiAgICAgeG1sU0FYMkV4dGVybmFsU3Vic2V0LAotICAgIDAsCisgICAgMSwKIH07CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwogCiAvKioKICAqIHhtbERlZmF1bHRTQVhMb2NhdG9yOgogICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZQorICoKICAqIFRoZSBkZWZhdWx0IFNBWCBMb2NhdG9yCiAgKiB7IGdldFB1YmxpY0lkLCBnZXRTeXN0ZW1JZCwgZ2V0TGluZU51bWJlciwgZ2V0Q29sdW1uTnVtYmVyfQogICovCkBAIC00MDUsMTAgKzUwNywxMyBAQAogICAgIHhtbFNBWDJHZXRDb2x1bW5OdW1iZXIKIH07CiAKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECisjaWYgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpCiAvKioKICAqIGh0bWxEZWZhdWx0U0FYSGFuZGxlcjoKICAqCisgKiBERVBSRUNBVEVEOiBUaGlzIGhhbmRsZXIgaXMgdW51c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUKKyAqIHZlcnNpb25zLgorICoKICAqIERlZmF1bHQgb2xkIFNBWCB2MSBoYW5kbGVyIGZvciBIVE1MLCBidWlsZHMgdGhlIERPTSB0cmVlCiAgKi8KIHhtbFNBWEhhbmRsZXJWMSBodG1sRGVmYXVsdFNBWEhhbmRsZXIgPSB7CkBAIC00MzYsMTUyICs1NDEsNjA1IEBACiAgICAgeG1sUGFyc2VyV2FybmluZywKICAgICB4bWxQYXJzZXJFcnJvciwKICAgICB4bWxQYXJzZXJFcnJvciwKLSAgICB4bWxTQVgyR2V0UGFyYW1ldGVyRW50aXR5LAorICAgIE5VTEwsCiAgICAgeG1sU0FYMkNEYXRhQmxvY2ssCiAgICAgTlVMTCwKLSAgICAwLAorICAgIDEsCiB9OwogI2VuZGlmIC8qIExJQlhNTF9IVE1MX0VOQUJMRUQgKi8KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJCQkqCisgKgkJCVBlciB0aHJlYWQgZ2xvYmFsIHN0YXRlIGhhbmRsaW5nCQkqCisgKgkJCQkJCQkJCSoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIC8qKgotICogeG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlOgotICogQGdzOiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgZ2xvYmFsIHN0YXRlCisgKiB4bWxJbml0R2xvYmFsczoKICAqCi0gKiB4bWxJbml0aWFsaXplR2xvYmFsU3RhdGUoKSBpbml0aWFsaXplIGEgZ2xvYmFsIHN0YXRlIHdpdGggYWxsIHRoZQotICogZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIGxpYnJhcnkuCisgKiBERVBSRUNBVEVEOiBBbGlhcyBmb3IgeG1sSW5pdFBhcnNlci4KICAqLwotdm9pZAoteG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlKHhtbEdsb2JhbFN0YXRlUHRyIGdzKQotewotI2lmZGVmIERFQlVHX0dMT0JBTFMKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkluaXRpYWxpemluZyBnbG9iYWxzIGF0ICVsdSBmb3IgdGhyZWFkICVkXG4iLAotCSAgICAodW5zaWduZWQgbG9uZykgZ3MsIHhtbEdldFRocmVhZElkKCkpOwordm9pZCB4bWxJbml0R2xvYmFscyh2b2lkKSB7CisgICAgeG1sSW5pdFBhcnNlcigpOworfQorCisvKioKKyAqIHhtbEluaXRHbG9iYWxzSW50ZXJuYWw6CisgKgorICogQWRkaXRpb25hbCBpbml0aWFsaXNhdGlvbiBmb3IgbXVsdGktdGhyZWFkaW5nCisgKi8KK3ZvaWQgeG1sSW5pdEdsb2JhbHNJbnRlcm5hbCh2b2lkKSB7CisgICAgeG1sSW5pdE11dGV4KCZ4bWxUaHJEZWZNdXRleCk7CisKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKyNpZmRlZiBYTUxfUFRIUkVBRF9XRUFLCisgICAgaWYgKGxpYnhtbF9pc190aHJlYWRlZCA9PSAtMSkKKyAgICAgICAgbGlieG1sX2lzX3RocmVhZGVkID0KKyAgICAgICAgICAgIChwdGhyZWFkX2dldHNwZWNpZmljICE9IE5VTEwpICYmCisgICAgICAgICAgICAocHRocmVhZF9zZXRzcGVjaWZpYyAhPSBOVUxMKSAmJgorICAgICAgICAgICAgKHB0aHJlYWRfa2V5X2NyZWF0ZSAhPSBOVUxMKSAmJgorICAgICAgICAgICAgKHB0aHJlYWRfa2V5X2RlbGV0ZSAhPSBOVUxMKSAmJgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHB0aHJlYWRfZXF1YWwgY2FuIGJlIGlubGluZSwgcmVzdXRpbmcgaW4gLVdhZGRyZXNzIHdhcm5pbmdzLgorICAgICAgICAgICAgICogTGV0J3MgYXNzdW1lIGl0J3MgYXZhaWxhYmxlIGlmIGFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogKHB0aHJlYWRfZXF1YWwgIT0gTlVMTCkgJiYgKi8KKyAgICAgICAgICAgIChwdGhyZWFkX3NlbGYgIT0gTlVMTCk7CisgICAgaWYgKGxpYnhtbF9pc190aHJlYWRlZCA9PSAwKQorICAgICAgICByZXR1cm47CisjZW5kaWYgLyogWE1MX1BUSFJFQURfV0VBSyAqLworICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSgmZ2xvYmFsa2V5LCB4bWxGcmVlR2xvYmFsU3RhdGUpOworICAgIG1haW50aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9XSU4zMl9USFJFQURTKQorI2lmbmRlZiBVU0VfVExTCisgICAgZ2xvYmFsa2V5ID0gVGxzQWxsb2MoKTsKICNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBQZXJmb3JtIGluaXRpYWxpemF0aW9uIGFzIHJlcXVpcmVkIGJ5IGxpYnhtbAotICAgICAqLwotICAgIGlmICh4bWxUaHJEZWZNdXRleCA9PSBOVUxMKQotICAgICAgICB4bWxJbml0R2xvYmFscygpOwotCi0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKLQotI2lmIGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkgJiYgZGVmaW5lZChMSUJYTUxfTEVHQUNZX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCkKLSAgICBpbml0aHRtbERlZmF1bHRTQVhIYW5kbGVyKCZncy0+aHRtbERlZmF1bHRTQVhIYW5kbGVyKTsKKyAgICBtYWludGhyZWFkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAjZW5kaWYKLQotICAgIGdzLT5vbGRYTUxXRGNvbXBhdGliaWxpdHkgPSAwOwotICAgIGdzLT54bWxCdWZmZXJBbGxvY1NjaGVtZSA9IHhtbEJ1ZmZlckFsbG9jU2NoZW1lVGhyRGVmOwotICAgIGdzLT54bWxEZWZhdWx0QnVmZmVyU2l6ZSA9IHhtbERlZmF1bHRCdWZmZXJTaXplVGhyRGVmOwotI2lmIGRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCkgJiYgZGVmaW5lZChMSUJYTUxfTEVHQUNZX0VOQUJMRUQpCi0gICAgaW5pdHhtbERlZmF1bHRTQVhIYW5kbGVyKCZncy0+eG1sRGVmYXVsdFNBWEhhbmRsZXIsIDEpOwotI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLSAgICBncy0+eG1sRGVmYXVsdFNBWExvY2F0b3IuZ2V0UHVibGljSWQgPSB4bWxTQVgyR2V0UHVibGljSWQ7Ci0gICAgZ3MtPnhtbERlZmF1bHRTQVhMb2NhdG9yLmdldFN5c3RlbUlkID0geG1sU0FYMkdldFN5c3RlbUlkOwotICAgIGdzLT54bWxEZWZhdWx0U0FYTG9jYXRvci5nZXRMaW5lTnVtYmVyID0geG1sU0FYMkdldExpbmVOdW1iZXI7Ci0gICAgZ3MtPnhtbERlZmF1bHRTQVhMb2NhdG9yLmdldENvbHVtbk51bWJlciA9IHhtbFNBWDJHZXRDb2x1bW5OdW1iZXI7Ci0gICAgZ3MtPnhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSA9Ci0gICAgICAgICB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWVUaHJEZWY7Ci0jaWYgZGVmaW5lZChERUJVR19NRU1PUllfTE9DQVRJT04pIHwgZGVmaW5lZChERUJVR19NRU1PUlkpCi0gICAgZ3MtPnhtbEZyZWUgPSAoeG1sRnJlZUZ1bmMpIHhtbE1lbUZyZWU7Ci0gICAgZ3MtPnhtbE1hbGxvYyA9ICh4bWxNYWxsb2NGdW5jKSB4bWxNZW1NYWxsb2M7Ci0gICAgZ3MtPnhtbE1hbGxvY0F0b21pYyA9ICh4bWxNYWxsb2NGdW5jKSB4bWxNZW1NYWxsb2M7Ci0gICAgZ3MtPnhtbFJlYWxsb2MgPSAoeG1sUmVhbGxvY0Z1bmMpIHhtbE1lbVJlYWxsb2M7Ci0gICAgZ3MtPnhtbE1lbVN0cmR1cCA9ICh4bWxTdHJkdXBGdW5jKSB4bWxNZW1vcnlTdHJkdXA7Ci0jZWxzZQotICAgIGdzLT54bWxGcmVlID0gKHhtbEZyZWVGdW5jKSBmcmVlOwotICAgIGdzLT54bWxNYWxsb2MgPSAoeG1sTWFsbG9jRnVuYykgbWFsbG9jOwotICAgIGdzLT54bWxNYWxsb2NBdG9taWMgPSAoeG1sTWFsbG9jRnVuYykgbWFsbG9jOwotICAgIGdzLT54bWxSZWFsbG9jID0gKHhtbFJlYWxsb2NGdW5jKSByZWFsbG9jOwotICAgIGdzLT54bWxNZW1TdHJkdXAgPSAoeG1sU3RyZHVwRnVuYykgeG1sU3RyZHVwOwotI2VuZGlmCi0gICAgZ3MtPnhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlID0geG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWVUaHJEZWY7Ci0gICAgZ3MtPnhtbEluZGVudFRyZWVPdXRwdXQgPSB4bWxJbmRlbnRUcmVlT3V0cHV0VGhyRGVmOwotICAgIGdzLT54bWxUcmVlSW5kZW50U3RyaW5nID0geG1sVHJlZUluZGVudFN0cmluZ1RockRlZjsKLSAgICBncy0+eG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSA9IHhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWVUaHJEZWY7Ci0gICAgZ3MtPnhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlID0geG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWY7Ci0gICAgZ3MtPnhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUgPSB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlVGhyRGVmOwotICAgIGdzLT54bWxQYXJzZXJEZWJ1Z0VudGl0aWVzID0geG1sUGFyc2VyRGVidWdFbnRpdGllc1RockRlZjsKLSAgICBncy0+eG1sUGFyc2VyVmVyc2lvbiA9IExJQlhNTF9WRVJTSU9OX1NUUklORzsKLSAgICBncy0+eG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgPSB4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZVRockRlZjsKLSAgICBncy0+eG1sU2F2ZU5vRW1wdHlUYWdzID0geG1sU2F2ZU5vRW1wdHlUYWdzVGhyRGVmOwotICAgIGdzLT54bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUgPQotICAgICAgICB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWVUaHJEZWY7Ci0KLSAgICBncy0+eG1sR2VuZXJpY0Vycm9yID0geG1sR2VuZXJpY0Vycm9yVGhyRGVmOwotICAgIGdzLT54bWxTdHJ1Y3R1cmVkRXJyb3IgPSB4bWxTdHJ1Y3R1cmVkRXJyb3JUaHJEZWY7Ci0gICAgZ3MtPnhtbEdlbmVyaWNFcnJvckNvbnRleHQgPSB4bWxHZW5lcmljRXJyb3JDb250ZXh0VGhyRGVmOwotICAgIGdzLT54bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0ID0geG1sU3RydWN0dXJlZEVycm9yQ29udGV4dFRockRlZjsKLSAgICBncy0+eG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlID0geG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmOwotICAgIGdzLT54bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSA9IHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmOwotCi0JZ3MtPnhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZVRockRlZjsKLQlncy0+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSA9IHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWVUaHJEZWY7Ci0gICAgbWVtc2V0KCZncy0+eG1sTGFzdEVycm9yLCAwLCBzaXplb2YoeG1sRXJyb3IpKTsKLQotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKIH0KIAogLyoqCiAgKiB4bWxDbGVhbnVwR2xvYmFsczoKICAqCi0gKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIHhtbENsZWFudXBQYXJzZXIKKyAqIERFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4gQ2FsbCB4bWxDbGVhbnVwUGFyc2VyCiAgKiB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlcgogICogc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJ3QKICAqIGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuCi0gKgotICogQWRkaXRpb25hbCBjbGVhbnVwIGZvciBtdWx0aS10aHJlYWRpbmcKICAqLwotdm9pZCB4bWxDbGVhbnVwR2xvYmFscyh2b2lkKQotewotICAgIHhtbFJlc2V0RXJyb3IoJnhtbExhc3RFcnJvcik7Ci0KLSAgICBpZiAoeG1sVGhyRGVmTXV0ZXggIT0gTlVMTCkgewotCXhtbEZyZWVNdXRleCh4bWxUaHJEZWZNdXRleCk7Ci0JeG1sVGhyRGVmTXV0ZXggPSBOVUxMOwotICAgIH0KLSAgICBfX3htbEdsb2JhbEluaXRNdXRleERlc3Ryb3koKTsKK3ZvaWQgeG1sQ2xlYW51cEdsb2JhbHModm9pZCkgewogfQogCiAvKioKLSAqIERPQ19ESVNBQkxFIDogd2UgaWdub3JlIG1pc3NpbmcgZG9jIGZvciB0aGUgeG1sVGhyRGVmIGZ1bmN0aW9ucywKLSAqICAgICAgICAgICAgICAgdGhvc2UgYXJlIHJlYWxseSBpbnRlcm5hbCB3b3JrCisgKiB4bWxDbGVhbnVwR2xvYmFsc0ludGVybmFsOgorICoKKyAqIEFkZGl0aW9uYWwgY2xlYW51cCBmb3IgbXVsdGktdGhyZWFkaW5nCisgKi8KK3ZvaWQgeG1sQ2xlYW51cEdsb2JhbHNJbnRlcm5hbCh2b2lkKSB7CisgICAgeG1sUmVzZXRFcnJvcigmeG1sTGFzdEVycm9yKTsKKworICAgIHhtbENsZWFudXBNdXRleCgmeG1sVGhyRGVmTXV0ZXgpOworCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisjaWZkZWYgWE1MX1BUSFJFQURfV0VBSworICAgIGlmIChsaWJ4bWxfaXNfdGhyZWFkZWQgPT0gMCkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmIC8qIFhNTF9QVEhSRUFEX1dFQUsgKi8KKyAgICBwdGhyZWFkX2tleV9kZWxldGUoZ2xvYmFsa2V5KTsKKyNlbGlmIGRlZmluZWQoSEFWRV9XSU4zMl9USFJFQURTKQorI2lmbmRlZiBVU0VfVExTCisgICAgaWYgKGdsb2JhbGtleSAhPSBUTFNfT1VUX09GX0lOREVYRVMpIHsKKyAgICAgICAgVGxzRnJlZShnbG9iYWxrZXkpOworICAgICAgICBnbG9iYWxrZXkgPSBUTFNfT1VUX09GX0lOREVYRVM7CisgICAgfQorI2VuZGlmCisjZW5kaWYKKworICAgIHBhcnNlckluaXRpYWxpemVkID0gMDsKK30KKworLyoqCisgKiB4bWxJbml0aWFsaXplR2xvYmFsU3RhdGU6CisgKiBAZ3M6IGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBnbG9iYWwgc3RhdGUKKyAqCisgKiBERVBSRUNBVEVEOiBOby1vcC4KICAqLwogdm9pZAoreG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlKHhtbEdsb2JhbFN0YXRlUHRyIGdzIEFUVFJJQlVURV9VTlVTRUQpCit7Cit9CisKKy8qKgorICogeG1sR2V0R2xvYmFsU3RhdGU6CisgKgorICogREVQUkVDQVRFRAorICoKKyAqIFJldHVybnMgTlVMTC4KKyAqLworeG1sR2xvYmFsU3RhdGVQdHIKK3htbEdldEdsb2JhbFN0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitzdGF0aWMgaW50Cit4bWxJc01haW5UaHJlYWRJbnRlcm5hbCh2b2lkKSB7CisgICAgaWYgKHBhcnNlckluaXRpYWxpemVkID09IDApIHsKKyAgICAgICAgeG1sSW5pdFBhcnNlcigpOworICAgICAgICBwYXJzZXJJbml0aWFsaXplZCA9IDE7CisgICAgfQorCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisjaWZkZWYgWE1MX1BUSFJFQURfV0VBSworICAgIGlmIChsaWJ4bWxfaXNfdGhyZWFkZWQgPT0gMCkKKyAgICAgICAgcmV0dXJuICgxKTsKKyNlbmRpZgorICAgIHJldHVybiAocHRocmVhZF9lcXVhbChtYWludGhyZWFkLCBwdGhyZWFkX3NlbGYoKSkpOworI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKKyAgICByZXR1cm4gKG1haW50aHJlYWQgPT0gR2V0Q3VycmVudFRocmVhZElkKCkpOworI2Vsc2UKKyAgICByZXR1cm4gKDEpOworI2VuZGlmCit9CisKKy8qKgorICogeG1sSXNNYWluVGhyZWFkOgorICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSBtYWluIHRocmVhZC4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSBtYWluIHRocmVhZCwgMCBvdGhlcndpc2UKKyAqLworaW50Cit4bWxJc01haW5UaHJlYWQodm9pZCkgeworICAgIHJldHVybih4bWxJc01haW5UaHJlYWRJbnRlcm5hbCgpKTsKK30KKworI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAorCitzdGF0aWMgdm9pZAoreG1sRnJlZUdsb2JhbFN0YXRlKHZvaWQgKnN0YXRlKQoreworICAgIHhtbEdsb2JhbFN0YXRlICpncyA9ICh4bWxHbG9iYWxTdGF0ZSAqKSBzdGF0ZTsKKworICAgIC8qCisgICAgICogRnJlZSBhbnkgbWVtb3J5IGFsbG9jYXRlZCBpbiB0aGUgdGhyZWFkJ3MgeG1sTGFzdEVycm9yLiBJZiBpdAorICAgICAqIHdlcmVuJ3QgZm9yIHRoaXMgaW5kaXJlY3QgYWxsb2NhdGlvbiwgd2Ugd291bGRuJ3QgbmVlZAorICAgICAqIGEgZGVzdHJ1Y3RvciB3aXRoIHRocmVhZC1sb2NhbCBzdG9yYWdlIGF0IGFsbCEKKyAgICAgKgorICAgICAqIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgbWFrZSB4bWxMYXN0RXJyb3IgYSBzcGVjaWFsIGVycm9yCisgICAgICogdHlwZSB3aGljaCB1c2VzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLCBmaXhlZC1zaXplIGJ1ZmZlcnMuCisgICAgICogQnV0IHRoZSB4bWxFcnJvciBzdHJ1Y3QgaXMgZnVsbHkgcHVibGljIGFuZCB3aWRlbHkgdXNlZCwKKyAgICAgKiBzbyBjaGFuZ2VzIGFyZSBkYW5nZXJvdXMuCisgICAgICovCisgICAgeG1sUmVzZXRFcnJvcigmKGdzLT5nc194bWxMYXN0RXJyb3IpKTsKKyNpZm5kZWYgVVNFX1RMUworICAgIGZyZWUoc3RhdGUpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKEhBVkVfV0lOMzJfVEhSRUFEUykgJiYgXAorICAgIGRlZmluZWQoTElCWE1MX1NUQVRJQykgJiYgIWRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKQorc3RhdGljIHZvaWQgV0lOQVBJCit4bWxHbG9iYWxTdGF0ZUR0b3Iodm9pZCAqY3R4dCwgdW5zaWduZWQgY2hhciB0aW1lZE91dCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgeG1sR2xvYmFsU3RhdGVQdHIgZ3MgPSBjdHh0OworCisgICAgVW5yZWdpc3RlcldhaXQoZ3MtPndhaXRIYW5kbGUpOworICAgIENsb3NlSGFuZGxlKGdzLT50aHJlYWRIYW5kbGUpOworICAgIHhtbEZyZWVHbG9iYWxTdGF0ZShncyk7Cit9CisKK3N0YXRpYyBpbnQKK3htbFJlZ2lzdGVyR2xvYmFsU3RhdGVEdG9yKHhtbEdsb2JhbFN0YXRlICpncykgeworICAgIHZvaWQgKnByb2Nlc3NIYW5kbGUgPSBHZXRDdXJyZW50UHJvY2VzcygpOworICAgIHZvaWQgKnRocmVhZEhhbmRsZTsKKyAgICB2b2lkICp3YWl0SGFuZGxlOworCisgICAgaWYgKER1cGxpY2F0ZUhhbmRsZShwcm9jZXNzSGFuZGxlLCBHZXRDdXJyZW50VGhyZWFkKCksIHByb2Nlc3NIYW5kbGUsCisgICAgICAgICAgICAgICAgJnRocmVhZEhhbmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykgPT0gMCkgeworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmIChSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJndhaXRIYW5kbGUsIHRocmVhZEhhbmRsZSwKKyAgICAgICAgICAgICAgICB4bWxHbG9iYWxTdGF0ZUR0b3IsIGdzLCBJTkZJTklURSwgV1RfRVhFQ1VURU9OTFlPTkNFKSA9PSAwKSB7CisgICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgZ3MtPnRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZTsKKyAgICBncy0+d2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIExJQlhNTF9TVEFUSUMgKi8KKworc3RhdGljIHZvaWQKK3htbEluaXRHbG9iYWxTdGF0ZSh4bWxHbG9iYWxTdGF0ZVB0ciBncykgeworICAgIHhtbE11dGV4TG9jaygmeG1sVGhyRGVmTXV0ZXgpOworCisjaWYgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9MRUdBQ1lfRU5BQkxFRCkgJiYgZGVmaW5lZChMSUJYTUxfU0FYMV9FTkFCTEVEKQorICAgIGluaXRodG1sRGVmYXVsdFNBWEhhbmRsZXIoJmdzLT5nc19odG1sRGVmYXVsdFNBWEhhbmRsZXIpOworI2VuZGlmCisKKyAgICBncy0+Z3Nfb2xkWE1MV0Rjb21wYXRpYmlsaXR5ID0gMDsKKyAgICBncy0+Z3NfeG1sQnVmZmVyQWxsb2NTY2hlbWUgPSB4bWxCdWZmZXJBbGxvY1NjaGVtZVRockRlZjsKKyAgICBncy0+Z3NfeG1sRGVmYXVsdEJ1ZmZlclNpemUgPSB4bWxEZWZhdWx0QnVmZmVyU2l6ZVRockRlZjsKKyNpZiBkZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX0xFR0FDWV9FTkFCTEVEKQorICAgIGluaXR4bWxEZWZhdWx0U0FYSGFuZGxlcigmZ3MtPmdzX3htbERlZmF1bHRTQVhIYW5kbGVyLCAxKTsKKyNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCisgICAgZ3MtPmdzX3htbERlZmF1bHRTQVhMb2NhdG9yLmdldFB1YmxpY0lkID0geG1sU0FYMkdldFB1YmxpY0lkOworICAgIGdzLT5nc194bWxEZWZhdWx0U0FYTG9jYXRvci5nZXRTeXN0ZW1JZCA9IHhtbFNBWDJHZXRTeXN0ZW1JZDsKKyAgICBncy0+Z3NfeG1sRGVmYXVsdFNBWExvY2F0b3IuZ2V0TGluZU51bWJlciA9IHhtbFNBWDJHZXRMaW5lTnVtYmVyOworICAgIGdzLT5nc194bWxEZWZhdWx0U0FYTG9jYXRvci5nZXRDb2x1bW5OdW1iZXIgPSB4bWxTQVgyR2V0Q29sdW1uTnVtYmVyOworICAgIGdzLT5nc194bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgPQorICAgICAgICAgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlVGhyRGVmOworI2lmZGVmIExJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRAorI2lmZGVmIERFQlVHX01FTU9SWV9MT0NBVElPTgorICAgIGdzLT5nc194bWxGcmVlID0geG1sTWVtRnJlZTsKKyAgICBncy0+Z3NfeG1sTWFsbG9jID0geG1sTWVtTWFsbG9jOworICAgIGdzLT5nc194bWxNYWxsb2NBdG9taWMgPSB4bWxNZW1NYWxsb2M7CisgICAgZ3MtPmdzX3htbFJlYWxsb2MgPSB4bWxNZW1SZWFsbG9jOworICAgIGdzLT5nc194bWxNZW1TdHJkdXAgPSB4bWxNZW1vcnlTdHJkdXA7CisjZWxzZQorICAgIGdzLT5nc194bWxGcmVlID0gZnJlZTsKKyAgICBncy0+Z3NfeG1sTWFsbG9jID0gbWFsbG9jOworICAgIGdzLT5nc194bWxNYWxsb2NBdG9taWMgPSBtYWxsb2M7CisgICAgZ3MtPmdzX3htbFJlYWxsb2MgPSByZWFsbG9jOworICAgIGdzLT5nc194bWxNZW1TdHJkdXAgPSB4bWxQb3NpeFN0cmR1cDsKKyNlbmRpZgorI2VuZGlmCisgICAgZ3MtPmdzX3htbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlID0geG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWVUaHJEZWY7CisjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECisgICAgZ3MtPmdzX3htbEluZGVudFRyZWVPdXRwdXQgPSB4bWxJbmRlbnRUcmVlT3V0cHV0VGhyRGVmOworICAgIGdzLT5nc194bWxUcmVlSW5kZW50U3RyaW5nID0geG1sVHJlZUluZGVudFN0cmluZ1RockRlZjsKKyAgICBncy0+Z3NfeG1sU2F2ZU5vRW1wdHlUYWdzID0geG1sU2F2ZU5vRW1wdHlUYWdzVGhyRGVmOworI2VuZGlmCisgICAgZ3MtPmdzX3htbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUgPSB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIGdzLT5nc194bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSA9IHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIGdzLT5nc194bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlID0geG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZVRockRlZjsKKyAgICBncy0+Z3NfeG1sUGFyc2VyRGVidWdFbnRpdGllcyA9IHhtbFBhcnNlckRlYnVnRW50aXRpZXNUaHJEZWY7CisgICAgZ3MtPmdzX3htbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlID0geG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgZ3MtPmdzX3htbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSA9CisgICAgICAgIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZVRockRlZjsKKworICAgIGdzLT5nc194bWxHZW5lcmljRXJyb3IgPSB4bWxHZW5lcmljRXJyb3JUaHJEZWY7CisgICAgZ3MtPmdzX3htbFN0cnVjdHVyZWRFcnJvciA9IHhtbFN0cnVjdHVyZWRFcnJvclRockRlZjsKKyAgICBncy0+Z3NfeG1sR2VuZXJpY0Vycm9yQ29udGV4dCA9IHhtbEdlbmVyaWNFcnJvckNvbnRleHRUaHJEZWY7CisgICAgZ3MtPmdzX3htbFN0cnVjdHVyZWRFcnJvckNvbnRleHQgPSB4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0VGhyRGVmOworICAgIGdzLT5nc194bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgZ3MtPmdzX3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlID0geG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWVUaHJEZWY7CisKKyAgICBncy0+Z3NfeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlID0KKyAgICAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlVGhyRGVmOworICAgIGdzLT5nc194bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlID0KKyAgICAgICAgeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZVRockRlZjsKKyAgICBtZW1zZXQoJmdzLT5nc194bWxMYXN0RXJyb3IsIDAsIHNpemVvZih4bWxFcnJvcikpOworCisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKKworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ2xvYmFsa2V5LCBncyk7CisjZWxpZiBkZWZpbmVkIEhBVkVfV0lOMzJfVEhSRUFEUworI2lmbmRlZiBVU0VfVExTCisgICAgVGxzU2V0VmFsdWUoZ2xvYmFsa2V5LCBncyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKExJQlhNTF9TVEFUSUMpICYmICFkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkKKyAgICB4bWxSZWdpc3Rlckdsb2JhbFN0YXRlRHRvcihncyk7CisjZW5kaWYKKyNlbmRpZgorCisgICAgZ3MtPmluaXRpYWxpemVkID0gMTsKK30KKworI2lmbmRlZiBVU0VfVExTCisvKioKKyAqIHhtbE5ld0dsb2JhbFN0YXRlOgorICoKKyAqIHhtbE5ld0dsb2JhbFN0YXRlKCkgYWxsb2NhdGVzIGEgZ2xvYmFsIHN0YXRlLiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvCisgKiBob2xkIGFsbCBkYXRhIGZvciB1c2UgYnkgYSB0aHJlYWQgd2hlbiBzdXBwb3J0aW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgKiBvZiBsaWJ4bWwyIHRvIHByZS10aHJlYWQtc2FmZSBiZWhhdmlvdXIuCisgKgorICogUmV0dXJucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHhtbEdsb2JhbFN0YXRlUHRyIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvcgorICovCitzdGF0aWMgeG1sR2xvYmFsU3RhdGVQdHIKK3htbE5ld0dsb2JhbFN0YXRlKGludCBhbGxvd0ZhaWx1cmUpCit7CisgICAgeG1sR2xvYmFsU3RhdGUgKmdzOworCisgICAgZ3MgPSBtYWxsb2Moc2l6ZW9mKHhtbEdsb2JhbFN0YXRlKSk7CisgICAgaWYgKGdzID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGFsbG93RmFpbHVyZSkKKyAgICAgICAgICAgIHJldHVybihOVUxMKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZiBhbiBhcHBsaWNhdGlvbiBkaWRuJ3QgY2FsbCB4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSB0byBtYWtlCisgICAgICAgICAqIHN1cmUgdGhhdCBnbG9iYWwgc3RhdGUgY291bGQgYmUgYWxsb2NhdGVkLCBpdCdzIHRvbyBsYXRlIHRvCisgICAgICAgICAqIGhhbmRsZSB0aGUgZXJyb3IuCisgICAgICAgICAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhtbDI6IEZhaWxlZCB0byBhbGxvY2F0ZSBnbG9iYWxzIGZvciB0aHJlYWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaWJ4bWwyOiBTZWUgeG1sQ2hlY2tUaHJlYWRMb2NhbFN0b3JhZ2VcbiIpOworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIG1lbXNldChncywgMCwgc2l6ZW9mKHhtbEdsb2JhbFN0YXRlKSk7CisgICAgeG1sSW5pdEdsb2JhbFN0YXRlKGdzKTsKKyAgICByZXR1cm4gKGdzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgeG1sR2xvYmFsU3RhdGVQdHIKK3htbEdldFRocmVhZExvY2FsU3RvcmFnZShpbnQgYWxsb3dGYWlsdXJlKSB7CisgICAgeG1sR2xvYmFsU3RhdGUgKmdzOworCisgICAgKHZvaWQpIGFsbG93RmFpbHVyZTsKKworI2lmZGVmIFVTRV9UTFMKKyAgICBncyA9ICZnbG9iYWxTdGF0ZTsKKyAgICBpZiAoZ3MtPmluaXRpYWxpemVkID09IDApCisgICAgICAgIHhtbEluaXRHbG9iYWxTdGF0ZShncyk7CisjZWxpZiBkZWZpbmVkKEhBVkVfUE9TSVhfVEhSRUFEUykKKyAgICBncyA9ICh4bWxHbG9iYWxTdGF0ZSAqKSBwdGhyZWFkX2dldHNwZWNpZmljKGdsb2JhbGtleSk7CisgICAgaWYgKGdzID09IE5VTEwpCisgICAgICAgIGdzID0geG1sTmV3R2xvYmFsU3RhdGUoYWxsb3dGYWlsdXJlKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9XSU4zMl9USFJFQURTKQorICAgIGdzID0gKHhtbEdsb2JhbFN0YXRlICopIFRsc0dldFZhbHVlKGdsb2JhbGtleSk7CisgICAgaWYgKGdzID09IE5VTEwpCisgICAgICAgIGdzID0geG1sTmV3R2xvYmFsU3RhdGUoYWxsb3dGYWlsdXJlKTsKKyNlbHNlCisgICAgZ3MgPSBOVUxMOworI2VuZGlmCisKKyAgICByZXR1cm4oZ3MpOworfQorCisvKiBEZWZpbmUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgYWNjZXNzb3JzIHdpdGggbWFjcm8gbWFnaWMgKi8KKworI2RlZmluZSBYTUxfREVGSU5FX0dMT0JBTF9XUkFQUEVSKG5hbWUsIHR5cGUsIGF0dHJzKSBcCisgICAgdHlwZSAqX18jI25hbWUodm9pZCkgeyBcCisgICAgICAgIGlmIChJU19NQUlOX1RIUkVBRCkgXAorICAgICAgICAgICAgcmV0dXJuICgmbmFtZSk7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgICByZXR1cm4gKCZ4bWxHZXRUaHJlYWRMb2NhbFN0b3JhZ2UoMCktPmdzXyMjbmFtZSk7IFwKKyAgICB9CisKKyNkZWZpbmUgWE1MX09QIFhNTF9ERUZJTkVfR0xPQkFMX1dSQVBQRVIKK1hNTF9HTE9CQUxTX0FMTE9DCitYTUxfR0xPQkFMU19FUlJPUgorWE1MX0dMT0JBTFNfSFRNTAorWE1MX0dMT0JBTFNfSU8KK1hNTF9HTE9CQUxTX1BBUlNFUgorWE1MX0dMT0JBTFNfVFJFRQorI3VuZGVmIFhNTF9PUAorCisvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworCitjb25zdCBjaGFyICpjb25zdCAqCitfX3htbFBhcnNlclZlcnNpb24odm9pZCkgeworICAgIHJldHVybiAmeG1sUGFyc2VyVmVyc2lvbjsKK30KKworI2VuZGlmIC8qIExJQlhNTF9USFJFQURfRU5BQkxFRCAqLworCisvKioKKyAqIHhtbENoZWNrVGhyZWFkTG9jYWxTdG9yYWdlOgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgY291bGQgYmUgYWxsb2NhdGVkLgorICoKKyAqIEluIGNyb3NzLXBsYXRmb3JtIGNvZGUgcnVubmluZyBpbiBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50cywgdGhpcworICogZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGluIGVhY2ggdGhyZWFkIGJlZm9yZSBjYWxsaW5nIG90aGVyCisgKiBsaWJyYXJ5IGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhhdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSB3YXMKKyAqIGFsbG9jYXRlZCBwcm9wZXJseS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtMSBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gQSBmYWlsZWQKKyAqIGFsbG9jYXRpb24gc2lnbmFscyBhIHR5cGljYWxseSBmYXRhbCBhbmQgaXJyZWNvdmVyYWJsZSBvdXQtb2YtbWVtb3J5CisgKiBzaXR1YXRpb24uIERvbid0IGNhbGwgYW55IGxpYnJhcnkgZnVuY3Rpb25zIGluIHRoaXMgY2FzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG5ldmVyIGZhaWxzIGlmIHRoZSBsaWJyYXJ5IGlzIGNvbXBpbGVkIHdpdGggc3VwcG9ydAorICogZm9yIHRocmVhZC1sb2NhbCBzdG9yYWdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgZm9yIHRoZSAibWFpbiIgdGhyZWFkIHdoaWNoIGlzIHRoZSBmaXJzdAorICogdGhyZWFkIGNhbGxpbmcgeG1sSW5pdFBhcnNlci4KKyAqCisgKiBBdmFpbGFibGUgc2luY2UgdjIuMTIuMC4KKyAqLworaW50Cit4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSh2b2lkKSB7CisjaWYgZGVmaW5lZChMSUJYTUxfVEhSRUFEX0VOQUJMRUQpICYmICFkZWZpbmVkKFVTRV9UTFMpCisgICAgaWYgKCgheG1sSXNNYWluVGhyZWFkSW50ZXJuYWwoKSkgJiYgKHhtbEdldFRocmVhZExvY2FsU3RvcmFnZSgxKSA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZgorICAgIHJldHVybigwKTsKK30KKworLyoqCisgKiBEbGxNYWluOgorICogQGhpbnN0RExMOiBoYW5kbGUgdG8gRExMIGluc3RhbmNlCisgKiBAZmR3UmVhc29uOiBSZWFzb24gY29kZSBmb3IgZW50cnkKKyAqIEBscHZSZXNlcnZlZDogZ2VuZXJpYyBwb2ludGVyIChkZXBlbmRzIHVwb24gcmVhc29uIGNvZGUpCisgKgorICogRW50cnkgcG9pbnQgZm9yIFdpbmRvd3MgbGlicmFyeS4gSXQgaXMgYmVpbmcgdXNlZCB0byBmcmVlIHRocmVhZC1zcGVjaWZpYworICogc3RvcmFnZS4KKyAqCisgKiBSZXR1cm5zIFRSVUUgYWx3YXlzCisgKi8KKyNpZiBkZWZpbmVkKEhBVkVfV0lOMzJfVEhSRUFEUykgJiYgXAorICAgICghZGVmaW5lZChMSUJYTUxfU1RBVElDKSB8fCBkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkpCisjaWYgZGVmaW5lZChMSUJYTUxfU1RBVElDX0ZPUl9ETEwpCitpbnQKK3htbERsbE1haW4oQVRUUklCVVRFX1VOVVNFRCB2b2lkICpoaW5zdERMTCwgdW5zaWduZWQgbG9uZyBmZHdSZWFzb24sCisgICAgICAgICAgIEFUVFJJQlVURV9VTlVTRUQgdm9pZCAqbHB2UmVzZXJ2ZWQpCisjZWxzZQorLyogZGVjbGFyZSB0byBhdm9pZCAibm8gcHJldmlvdXMgcHJvdG90eXBlIGZvciAnRGxsTWFpbiciIHdhcm5pbmcgKi8KKy8qIE5vdGUgdGhhdCB3ZSBkbyBOT1Qgd2FudCB0byBpbmNsdWRlIHRoaXMgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4KKyAgIGEgcHVibGljIGhlYWRlciBiZWNhdXNlIGl0J3MgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IFdpbmRvd3MgaXRzZWxmLAorICAgbm90IGEgcHJvZ3JhbSB0aGF0IHVzZXMgdGhpcyBsaWJyYXJ5LiAgVGhpcyBhbHNvIGhhcyB0byBiZSBleHBvcnRlZC4gKi8KKworWE1MUFVCRlVOIEJPT0wgV0lOQVBJCitEbGxNYWluIChISU5TVEFOQ0UgaGluc3RETEwsCisgICAgICAgICBEV09SRCAgICAgZmR3UmVhc29uLAorICAgICAgICAgTFBWT0lEICAgIGxwdlJlc2VydmVkKTsKKworQk9PTCBXSU5BUEkKK0RsbE1haW4oQVRUUklCVVRFX1VOVVNFRCBISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwKKyAgICAgICAgQVRUUklCVVRFX1VOVVNFRCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCisjZW5kaWYKK3sKKyAgICBzd2l0Y2ggKGZkd1JlYXNvbikgeworICAgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorI2lmZGVmIFVTRV9UTFMKKyAgICAgICAgICAgIHhtbEZyZWVHbG9iYWxTdGF0ZSgmZ2xvYmFsU3RhdGUpOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChnbG9iYWxrZXkgIT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisgICAgICAgICAgICAgICAgeG1sR2xvYmFsU3RhdGUgKmdsb2JhbHZhbDsKKworICAgICAgICAgICAgICAgIGdsb2JhbHZhbCA9ICh4bWxHbG9iYWxTdGF0ZSAqKSBUbHNHZXRWYWx1ZShnbG9iYWxrZXkpOworICAgICAgICAgICAgICAgIGlmIChnbG9iYWx2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgeG1sRnJlZUdsb2JhbFN0YXRlKGdsb2JhbHZhbCk7CisgICAgICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGdsb2JhbGtleSwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKKwordm9pZAogeG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYyh2b2lkICpjdHgsIHhtbEdlbmVyaWNFcnJvckZ1bmMgaGFuZGxlcikgewotICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CiAgICAgeG1sR2VuZXJpY0Vycm9yQ29udGV4dFRockRlZiA9IGN0eDsKICAgICBpZiAoaGFuZGxlciAhPSBOVUxMKQogCXhtbEdlbmVyaWNFcnJvclRockRlZiA9IGhhbmRsZXI7CiAgICAgZWxzZQogCXhtbEdlbmVyaWNFcnJvclRockRlZiA9IHhtbEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jOwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOwogfQogCiB2b2lkCiB4bWxUaHJEZWZTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKHZvaWQgKmN0eCwgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBoYW5kbGVyKSB7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbFRockRlZk11dGV4KTsKICAgICB4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0VGhyRGVmID0gY3R4OwogICAgIHhtbFN0cnVjdHVyZWRFcnJvclRockRlZiA9IGhhbmRsZXI7Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxUaHJEZWZNdXRleCk7CiB9CiAKLS8qKgotICogeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdDoKLSAqIEBmdW5jOiBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgUmVnaXN0ZXJOb2RlRnVuYwotICoKLSAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGNyZWF0aW9uCi0gKgotICogUmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KLSAqLwoteG1sUmVnaXN0ZXJOb2RlRnVuYwoteG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCh4bWxSZWdpc3Rlck5vZGVGdW5jIGZ1bmMpCi17Ci0gICAgeG1sUmVnaXN0ZXJOb2RlRnVuYyBvbGQgPSB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU7Cit4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lKHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgdikgeworICAgIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgcmV0OworICAgIHhtbE11dGV4TG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbEJ1ZmZlckFsbG9jU2NoZW1lVGhyRGVmOworICAgIHhtbEJ1ZmZlckFsbG9jU2NoZW1lVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CiAKLSAgICBfX3htbFJlZ2lzdGVyQ2FsbGJhY2tzID0gMTsKLSAgICB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBmdW5jOwotICAgIHJldHVybihvbGQpOworaW50IHhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplKGludCB2KSB7CisgICAgaW50IHJldDsKKyAgICB4bWxNdXRleExvY2soJnhtbFRockRlZk11dGV4KTsKKyAgICByZXQgPSB4bWxEZWZhdWx0QnVmZmVyU2l6ZVRockRlZjsKKyAgICB4bWxEZWZhdWx0QnVmZmVyU2l6ZVRockRlZiA9IHY7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgeG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlKGludCB2KSB7CisgICAgaW50IHJldDsKKyAgICB4bWxNdXRleExvY2soJnhtbFRockRlZk11dGV4KTsKKyAgICByZXQgPSB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCB4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KKworI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAoraW50IHhtbFRockRlZkluZGVudFRyZWVPdXRwdXQoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbEluZGVudFRyZWVPdXRwdXRUaHJEZWY7CisgICAgeG1sSW5kZW50VHJlZU91dHB1dFRockRlZiA9IHY7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyICogeG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyhjb25zdCBjaGFyICogdikgeworICAgIGNvbnN0IGNoYXIgKiByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sVHJlZUluZGVudFN0cmluZ1RockRlZjsKKyAgICB4bWxUcmVlSW5kZW50U3RyaW5nVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCB4bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbFNhdmVOb0VtcHR5VGFnc1RockRlZjsKKyAgICB4bWxTYXZlTm9FbXB0eVRhZ3NUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitpbnQgeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZVRockRlZjsKKyAgICB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCB4bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgeG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IHhtbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUoaW50IHYpIHsKKyAgICBpbnQgcmV0OworICAgIHhtbE11dGV4TG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldCA9IHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZVRockRlZiA9IHY7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgeG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyhpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sUGFyc2VyRGVidWdFbnRpdGllc1RockRlZjsKKyAgICB4bWxQYXJzZXJEZWJ1Z0VudGl0aWVzVGhyRGVmID0gdjsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCB4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWVUaHJEZWY7CisgICAgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IHhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZShpbnQgdikgeworICAgIGludCByZXQ7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CisgICAgcmV0ID0geG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlVGhyRGVmOworICAgIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZVRockRlZiA9IHY7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKKyAgICByZXR1cm4gcmV0OwogfQogCiB4bWxSZWdpc3Rlck5vZGVGdW5jCkBAIC01ODksNDUgKzExNDcsMjcgQEAKIHsKICAgICB4bWxSZWdpc3Rlck5vZGVGdW5jIG9sZDsKIAotICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CiAgICAgb2xkID0geG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmOwogCiAgICAgX194bWxSZWdpc3RlckNhbGxiYWNrcyA9IDE7CiAgICAgeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmID0gZnVuYzsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKIAogICAgIHJldHVybihvbGQpOwogfQogCi0vKioKLSAqIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdDoKLSAqIEBmdW5jOiBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgRGVyZWdpc3Rlck5vZGVGdW5jCi0gKgotICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZm9yIG5vZGUgZGVzdHJ1Y3Rpb24KLSAqCi0gKiBSZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24KLSAqLwoteG1sRGVyZWdpc3Rlck5vZGVGdW5jCi14bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQoeG1sRGVyZWdpc3Rlck5vZGVGdW5jIGZ1bmMpCi17Ci0gICAgeG1sRGVyZWdpc3Rlck5vZGVGdW5jIG9sZCA9IHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlOwotCi0gICAgX194bWxSZWdpc3RlckNhbGxiYWNrcyA9IDE7Ci0gICAgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBmdW5jOwotICAgIHJldHVybihvbGQpOwotfQotCiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMKIHhtbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdCh4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgZnVuYykKIHsKICAgICB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgb2xkOwogCi0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbFRockRlZk11dGV4KTsKICAgICBvbGQgPSB4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZVRockRlZjsKIAogICAgIF9feG1sUmVnaXN0ZXJDYWxsYmFja3MgPSAxOwogICAgIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlVGhyRGVmID0gZnVuYzsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbFRockRlZk11dGV4KTsKIAogICAgIHJldHVybihvbGQpOwogfQpAQCAtNjM3LDE0ICsxMTc3LDE0IEBACiB7CiAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMgb2xkOwogCi0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbFRockRlZk11dGV4KTsKICAgICBvbGQgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWVUaHJEZWY7CiAgICAgaWYgKG9sZCA9PSBOVUxMKSB7CiAJCW9sZCA9IF9feG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZTsKIAl9CiAKICAgICB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWVUaHJEZWYgPSBmdW5jOwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOwogCiAgICAgcmV0dXJuKG9sZCk7CiB9CkBAIC02NTQsNyArMTE5NCw3IEBACiB7CiAgICAgeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIG9sZDsKIAotICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxUaHJEZWZNdXRleCk7CiAgICAgb2xkID0geG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZVRockRlZjsKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKICAgICBpZiAob2xkID09IE5VTEwpIHsKQEAgLTY2Miw0MTggKzEyMDIsOCBAQAogCX0KICNlbmRpZgogICAgIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWVUaHJEZWYgPSBmdW5jOwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sVGhyRGVmTXV0ZXgpOwogCiAgICAgcmV0dXJuKG9sZCk7CiB9CiAKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi0jdW5kZWYJaHRtbERlZmF1bHRTQVhIYW5kbGVyCi14bWxTQVhIYW5kbGVyVjEgKgotX19odG1sRGVmYXVsdFNBWEhhbmRsZXIodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZodG1sRGVmYXVsdFNBWEhhbmRsZXIpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT5odG1sRGVmYXVsdFNBWEhhbmRsZXIpOwotfQotI2VuZGlmCi0KLSN1bmRlZiB4bWxMYXN0RXJyb3IKLXhtbEVycm9yICoKLV9feG1sTGFzdEVycm9yKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sTGFzdEVycm9yKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sTGFzdEVycm9yKTsKLX0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgbWVtb3J5IHJvdXRpbmVzIHdlcmUgYXBwYXJlbnRseSBsb3N0IGF0IHNvbWUgcG9pbnQsCi0gKiBhbmQgd2VyZSByZS1pbnNlcnRlZCBhdCB0aGlzIHBvaW50IG9uIEp1bmUgMTAsIDIwMDQuICBIb3BlIGl0J3MKLSAqIHRoZSByaWdodCBwbGFjZSBmb3IgdGhlbSA6LSkKLSAqLwotI2lmIGRlZmluZWQoTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9USFJFQURfRU5BQkxFRCkKLSN1bmRlZiB4bWxNYWxsb2MKLXhtbE1hbGxvY0Z1bmMgKgotX194bWxNYWxsb2Modm9pZCl7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotICAgICAgICByZXR1cm4gKCZ4bWxNYWxsb2MpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxNYWxsb2MpOwotfQotCi0jdW5kZWYgeG1sTWFsbG9jQXRvbWljCi14bWxNYWxsb2NGdW5jICoKLV9feG1sTWFsbG9jQXRvbWljKHZvaWQpewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLSAgICAgICAgcmV0dXJuICgmeG1sTWFsbG9jQXRvbWljKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbE1hbGxvY0F0b21pYyk7Ci19Ci0KLSN1bmRlZiB4bWxSZWFsbG9jCi14bWxSZWFsbG9jRnVuYyAqCi1fX3htbFJlYWxsb2Modm9pZCl7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotICAgICAgICByZXR1cm4gKCZ4bWxSZWFsbG9jKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbFJlYWxsb2MpOwotfQotCi0jdW5kZWYgeG1sRnJlZQoteG1sRnJlZUZ1bmMgKgotX194bWxGcmVlKHZvaWQpewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLSAgICAgICAgcmV0dXJuICgmeG1sRnJlZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxGcmVlKTsKLX0KLQoteG1sU3RyZHVwRnVuYyAqCi1fX3htbE1lbVN0cmR1cCh2b2lkKXsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0gICAgICAgIHJldHVybiAoJnhtbE1lbVN0cmR1cCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxNZW1TdHJkdXApOwotfQotCi0jZW5kaWYKLQotLyoKLSAqIEV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgbGluZSBiZWxvdyBpcwotICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYnVpbGRfZ2xvYi5weS4KLSAqIERvIG5vdCBtb2RpZnkgdGhlIHByZXZpb3VzIGxpbmUuCi0gKi8KLQotCi0jdW5kZWYJb2xkWE1MV0Rjb21wYXRpYmlsaXR5Ci1pbnQgKgotX19vbGRYTUxXRGNvbXBhdGliaWxpdHkodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZvbGRYTUxXRGNvbXBhdGliaWxpdHkpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT5vbGRYTUxXRGNvbXBhdGliaWxpdHkpOwotfQotCi0jdW5kZWYJeG1sQnVmZmVyQWxsb2NTY2hlbWUKLXhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgKgotX194bWxCdWZmZXJBbGxvY1NjaGVtZSh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbEJ1ZmZlckFsbG9jU2NoZW1lKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sQnVmZmVyQWxsb2NTY2hlbWUpOwotfQoteG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSB4bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZSh4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHYpIHsKLSAgICB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbEJ1ZmZlckFsbG9jU2NoZW1lVGhyRGVmOwotICAgIHhtbEJ1ZmZlckFsbG9jU2NoZW1lVGhyRGVmID0gdjsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI3VuZGVmCXhtbERlZmF1bHRCdWZmZXJTaXplCi1pbnQgKgotX194bWxEZWZhdWx0QnVmZmVyU2l6ZSh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbERlZmF1bHRCdWZmZXJTaXplKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sRGVmYXVsdEJ1ZmZlclNpemUpOwotfQotaW50IHhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplKGludCB2KSB7Ci0gICAgaW50IHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbERlZmF1bHRCdWZmZXJTaXplVGhyRGVmOwotICAgIHhtbERlZmF1bHRCdWZmZXJTaXplVGhyRGVmID0gdjsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKLSN1bmRlZgl4bWxEZWZhdWx0U0FYSGFuZGxlcgoteG1sU0FYSGFuZGxlclYxICoKLV9feG1sRGVmYXVsdFNBWEhhbmRsZXIodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZ4bWxEZWZhdWx0U0FYSGFuZGxlcik7Ci0gICAgZWxzZQotCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbERlZmF1bHRTQVhIYW5kbGVyKTsKLX0KLSNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCi0KLSN1bmRlZgl4bWxEZWZhdWx0U0FYTG9jYXRvcgoteG1sU0FYTG9jYXRvciAqCi1fX3htbERlZmF1bHRTQVhMb2NhdG9yKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sRGVmYXVsdFNBWExvY2F0b3IpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxEZWZhdWx0U0FYTG9jYXRvcik7Ci19Ci0KLSN1bmRlZgl4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUKLWludCAqCi1fX3htbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSk7Ci0gICAgZWxzZQotCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSk7Ci19Ci1pbnQgeG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlKGludCB2KSB7Ci0gICAgaW50IHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZVRockRlZjsKLSAgICB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi0jdW5kZWYJeG1sR2VuZXJpY0Vycm9yCi14bWxHZW5lcmljRXJyb3JGdW5jICoKLV9feG1sR2VuZXJpY0Vycm9yKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sR2VuZXJpY0Vycm9yKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sR2VuZXJpY0Vycm9yKTsKLX0KLQotI3VuZGVmCXhtbFN0cnVjdHVyZWRFcnJvcgoteG1sU3RydWN0dXJlZEVycm9yRnVuYyAqCi1fX3htbFN0cnVjdHVyZWRFcnJvcih2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbFN0cnVjdHVyZWRFcnJvcik7Ci0gICAgZWxzZQotCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbFN0cnVjdHVyZWRFcnJvcik7Ci19Ci0KLSN1bmRlZgl4bWxHZW5lcmljRXJyb3JDb250ZXh0Ci12b2lkICogKgotX194bWxHZW5lcmljRXJyb3JDb250ZXh0KHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sR2VuZXJpY0Vycm9yQ29udGV4dCk7Ci0gICAgZWxzZQotCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbEdlbmVyaWNFcnJvckNvbnRleHQpOwotfQotCi0jdW5kZWYJeG1sU3RydWN0dXJlZEVycm9yQ29udGV4dAotdm9pZCAqICoKLV9feG1sU3RydWN0dXJlZEVycm9yQ29udGV4dCh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0KTsKLX0KLQotI3VuZGVmCXhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlCi1pbnQgKgotX194bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUpOwotfQotaW50IHhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKGludCB2KSB7Ci0gICAgaW50IHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlVGhyRGVmOwotICAgIHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI3VuZGVmCXhtbEluZGVudFRyZWVPdXRwdXQKLWludCAqCi1fX3htbEluZGVudFRyZWVPdXRwdXQodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZ4bWxJbmRlbnRUcmVlT3V0cHV0KTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sSW5kZW50VHJlZU91dHB1dCk7Ci19Ci1pbnQgeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dChpbnQgdikgewotICAgIGludCByZXQ7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXQgPSB4bWxJbmRlbnRUcmVlT3V0cHV0VGhyRGVmOwotICAgIHhtbEluZGVudFRyZWVPdXRwdXRUaHJEZWYgPSB2OwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi0jdW5kZWYJeG1sVHJlZUluZGVudFN0cmluZwotY29uc3QgY2hhciAqICoKLV9feG1sVHJlZUluZGVudFN0cmluZyh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbFRyZWVJbmRlbnRTdHJpbmcpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxUcmVlSW5kZW50U3RyaW5nKTsKLX0KLWNvbnN0IGNoYXIgKiB4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nKGNvbnN0IGNoYXIgKiB2KSB7Ci0gICAgY29uc3QgY2hhciAqIHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbFRyZWVJbmRlbnRTdHJpbmdUaHJEZWY7Ci0gICAgeG1sVHJlZUluZGVudFN0cmluZ1RockRlZiA9IHY7Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLSN1bmRlZgl4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlCi1pbnQgKgotX194bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSk7Ci0gICAgZWxzZQotCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUpOwotfQotaW50IHhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUoaW50IHYpIHsKLSAgICBpbnQgcmV0OwotICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0ID0geG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZVRockRlZjsKLSAgICB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI3VuZGVmCXhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlCi1pbnQgKgotX194bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUpOwotfQotaW50IHhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKGludCB2KSB7Ci0gICAgaW50IHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlVGhyRGVmOwotICAgIHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlVGhyRGVmID0gdjsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI3VuZGVmCXhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUKLWludCAqCi1fX3htbExvYWRFeHREdGREZWZhdWx0VmFsdWUodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZ4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSk7Ci19Ci1pbnQgeG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZShpbnQgdikgewotICAgIGludCByZXQ7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXQgPSB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlVGhyRGVmOwotICAgIHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWVUaHJEZWYgPSB2OwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi0jdW5kZWYJeG1sUGFyc2VyRGVidWdFbnRpdGllcwotaW50ICoKLV9feG1sUGFyc2VyRGVidWdFbnRpdGllcyh2b2lkKSB7Ci0gICAgaWYgKElTX01BSU5fVEhSRUFEKQotCXJldHVybiAoJnhtbFBhcnNlckRlYnVnRW50aXRpZXMpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxQYXJzZXJEZWJ1Z0VudGl0aWVzKTsKLX0KLWludCB4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzKGludCB2KSB7Ci0gICAgaW50IHJldDsKLSAgICB4bWxNdXRleExvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldCA9IHhtbFBhcnNlckRlYnVnRW50aXRpZXNUaHJEZWY7Ci0gICAgeG1sUGFyc2VyRGVidWdFbnRpdGllc1RockRlZiA9IHY7Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLSN1bmRlZgl4bWxQYXJzZXJWZXJzaW9uCi1jb25zdCBjaGFyICogKgotX194bWxQYXJzZXJWZXJzaW9uKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sUGFyc2VyVmVyc2lvbik7Ci0gICAgZWxzZQotCXJldHVybiAoJnhtbEdldEdsb2JhbFN0YXRlKCktPnhtbFBhcnNlclZlcnNpb24pOwotfQotCi0jdW5kZWYJeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUKLWludCAqCi1fX3htbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSk7Ci19Ci1pbnQgeG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUoaW50IHYpIHsKLSAgICBpbnQgcmV0OwotICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0ID0geG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWVUaHJEZWY7Ci0gICAgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWVUaHJEZWYgPSB2OwotICAgIHhtbE11dGV4VW5sb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXR1cm4gcmV0OwotfQotCi0jdW5kZWYJeG1sU2F2ZU5vRW1wdHlUYWdzCi1pbnQgKgotX194bWxTYXZlTm9FbXB0eVRhZ3Modm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZ4bWxTYXZlTm9FbXB0eVRhZ3MpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxTYXZlTm9FbXB0eVRhZ3MpOwotfQotaW50IHhtbFRockRlZlNhdmVOb0VtcHR5VGFncyhpbnQgdikgewotICAgIGludCByZXQ7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbFRockRlZk11dGV4KTsKLSAgICByZXQgPSB4bWxTYXZlTm9FbXB0eVRhZ3NUaHJEZWY7Ci0gICAgeG1sU2F2ZU5vRW1wdHlUYWdzVGhyRGVmID0gdjsKLSAgICB4bWxNdXRleFVubG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI3VuZGVmCXhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZQotaW50ICoKLV9feG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlKTsKLX0KLWludCB4bWxUaHJEZWZTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUoaW50IHYpIHsKLSAgICBpbnQgcmV0OwotICAgIHhtbE11dGV4TG9jayh4bWxUaHJEZWZNdXRleCk7Ci0gICAgcmV0ID0geG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlVGhyRGVmOwotICAgIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZVRockRlZiA9IHY7Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sVGhyRGVmTXV0ZXgpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLSN1bmRlZgl4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUKLXhtbFJlZ2lzdGVyTm9kZUZ1bmMgKgotX194bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZ4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUpOwotfQotCi0jdW5kZWYJeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUKLXhtbERlcmVnaXN0ZXJOb2RlRnVuYyAqCi1fX3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUpOwotICAgIGVsc2UKLQlyZXR1cm4gKCZ4bWxHZXRHbG9iYWxTdGF0ZSgpLT54bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSk7Ci19Ci0KLSN1bmRlZgl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUKLXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jICoKLV9feG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlKHZvaWQpIHsKLSAgICBpZiAoSVNfTUFJTl9USFJFQUQpCi0JcmV0dXJuICgmeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlKTsKLX0KLQotI3VuZGVmCXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUKLXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyAqCi1fX3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUodm9pZCkgewotICAgIGlmIChJU19NQUlOX1RIUkVBRCkKLQlyZXR1cm4gKCZ4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlKTsKLSAgICBlbHNlCi0JcmV0dXJuICgmeG1sR2V0R2xvYmFsU3RhdGUoKS0+eG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2hhc2guYyBiL2hhc2guYwppbmRleCA4OTQxNzRmLi4zODM0MWQ3IDEwMDY0NAotLS0gYS9oYXNoLmMKKysrIGIvaGFzaC5jCkBAIC0xLDIwMCArMSwxOTcgQEAKIC8qCi0gKiBoYXNoLmM6IGNoYWluZWQgaGFzaCB0YWJsZXMKKyAqIGhhc2guYzogaGFzaCB0YWJsZXMKICAqCi0gKiBSZWZlcmVuY2U6IFlvdXIgZmF2b3JpdGUgaW50cm9kdWN0b3J5IGJvb2sgb24gYWxnb3JpdGhtcworICogSGFzaCB0YWJsZSB3aXRoIG9wZW4gYWRkcmVzc2luZywgbGluZWFyIHByb2JpbmcgYW5kCisgKiBSb2JpbiBIb29kIHJlb3JkZXJpbmcuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMTIgQmpvcm4gUmVlc2UgYW5kIERhbmllbCBWZWlsbGFyZC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBBVVRIT1JTIEFORAotICogQ09OVFJJQlVUT1JTIEFDQ0VQVCBOTyBSRVNQT05TSUJJTElUWSBJTiBBTlkgQ09OQ0VJVkFCTEUgTUFOTkVSLgotICoKLSAqIEF1dGhvcjogYnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorICogU2VlIENvcHlyaWdodCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIHNvZnR3YXJlLgogICovCiAKICNkZWZpbmUgSU5fTElCWE1MCiAjaW5jbHVkZSAibGlieG1sLmgiCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLS8qCi0gKiBGb2xsb3dpbmcgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sCi0gKiBpdCBzZWVtcyB0aGF0IGhhdmluZyBoYXNoIHJhbmRvbWl6YXRpb24gbWlnaHQgYmUgYSBnb29kIGlkZWEKLSAqIHdoZW4gdXNpbmcgWE1MIHdpdGggdW50cnVzdGVkIGRhdGEKLSAqLwotI2lmICFkZWZpbmVkKEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04pCi0jZGVmaW5lIEhBU0hfUkFORE9NSVpBVElPTgotI2VuZGlmCisjaW5jbHVkZSA8bGltaXRzLmg+CiAKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL2hhc2guaD4KKyNpbmNsdWRlIDxsaWJ4bWwvZGljdC5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KIAotI2RlZmluZSBNQVhfSEFTSF9MRU4gOAorI2luY2x1ZGUgInByaXZhdGUvZGljdC5oIgogCi0vKiAjZGVmaW5lIERFQlVHX0dST1cgKi8KKyNpZm5kZWYgU0laRV9NQVgKKyAgI2RlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjZW5kaWYKKworI2RlZmluZSBNQVhfRklMTF9OVU0gNworI2RlZmluZSBNQVhfRklMTF9ERU5PTSA4CisjZGVmaW5lIE1JTl9IQVNIX1NJWkUgOAorI2RlZmluZSBNQVhfSEFTSF9TSVpFICgxdSA8PCAzMSkKIAogLyoKICAqIEEgc2luZ2xlIGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlCiAgKi8KLXR5cGVkZWYgc3RydWN0IF94bWxIYXNoRW50cnkgeG1sSGFzaEVudHJ5OwotdHlwZWRlZiB4bWxIYXNoRW50cnkgKnhtbEhhc2hFbnRyeVB0cjsKLXN0cnVjdCBfeG1sSGFzaEVudHJ5IHsKLSAgICBzdHJ1Y3QgX3htbEhhc2hFbnRyeSAqbmV4dDsKLSAgICB4bWxDaGFyICpuYW1lOwotICAgIHhtbENoYXIgKm5hbWUyOwotICAgIHhtbENoYXIgKm5hbWUzOwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZTsgLyogMCBtZWFucyB1bm9jY3VwaWVkLCBvY2N1cGllZCBlbnRyaWVzIGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBNQVhfSEFTSF9TSVpFIGJpdCBzZXQgdG8gMSAqLworICAgIHhtbENoYXIgKmtleTsKKyAgICB4bWxDaGFyICprZXkyOyAvKiBUT0RPOiBEb24ndCBhbGxvY2F0ZSBwb3NzaWJseSBlbXB0eSBrZXlzICovCisgICAgeG1sQ2hhciAqa2V5MzsKICAgICB2b2lkICpwYXlsb2FkOwotICAgIGludCB2YWxpZDsKLX07Cit9IHhtbEhhc2hFbnRyeTsKIAogLyoKICAqIFRoZSBlbnRpcmUgaGFzaCB0YWJsZQogICovCiBzdHJ1Y3QgX3htbEhhc2hUYWJsZSB7Ci0gICAgc3RydWN0IF94bWxIYXNoRW50cnkgKnRhYmxlOwotICAgIGludCBzaXplOwotICAgIGludCBuYkVsZW1zOworICAgIHhtbEhhc2hFbnRyeSAqdGFibGU7CisgICAgdW5zaWduZWQgc2l6ZTsgLyogcG93ZXIgb2YgdHdvICovCisgICAgdW5zaWduZWQgbmJFbGVtczsKICAgICB4bWxEaWN0UHRyIGRpY3Q7Ci0jaWZkZWYgSEFTSF9SQU5ET01JWkFUSU9OCi0gICAgaW50IHJhbmRvbV9zZWVkOwotI2VuZGlmCisgICAgdW5zaWduZWQgcmFuZG9tU2VlZDsKIH07CiAKLS8qCi0gKiB4bWxIYXNoQ29tcHV0ZUtleToKLSAqIENhbGN1bGF0ZSB0aGUgaGFzaCBrZXkKLSAqLwotI2lmZGVmIF9fY2xhbmdfXwotQVRUUklCVVRFX05PX1NBTklUSVpFKCJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikKLSNlbmRpZgotc3RhdGljIHVuc2lnbmVkIGxvbmcKLXhtbEhhc2hDb21wdXRlS2V5KHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZTIsIGNvbnN0IHhtbENoYXIgKm5hbWUzKSB7Ci0gICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDBMOwotICAgIHVuc2lnbmVkIGxvbmcgY2g7CitzdGF0aWMgaW50Cit4bWxIYXNoR3Jvdyh4bWxIYXNoVGFibGVQdHIgaGFzaCwgdW5zaWduZWQgc2l6ZSk7CiAKLSNpZmRlZiBIQVNIX1JBTkRPTUlaQVRJT04KLSAgICB2YWx1ZSA9IHRhYmxlLT5yYW5kb21fc2VlZDsKLSNlbmRpZgotICAgIGlmIChuYW1lICE9IE5VTEwpIHsKLQl2YWx1ZSArPSAzMCAqICgqbmFtZSk7Ci0Jd2hpbGUgKChjaCA9ICpuYW1lKyspICE9IDApIHsKLQkgICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykgKyBjaCk7Ci0JfQorQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKK3N0YXRpYyB1bnNpZ25lZAoreG1sSGFzaFZhbHVlKHVuc2lnbmVkIHNlZWQsIGNvbnN0IHhtbENoYXIgKmtleSwgY29uc3QgeG1sQ2hhciAqa2V5MiwKKyAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkzLCBzaXplX3QgKmxlbmd0aHMpIHsKKyAgICB1bnNpZ25lZCBoMSwgaDI7CisgICAgc2l6ZV90IGk7CisKKyAgICBIQVNIX0lOSVQoaDEsIGgyLCBzZWVkKTsKKworICAgIGZvciAoaSA9IDA7IGtleVtpXSAhPSAwOyBpKyspIHsKKyAgICAgICAgSEFTSF9VUERBVEUoaDEsIGgyLCBrZXlbaV0pOwogICAgIH0KLSAgICB2YWx1ZSA9IHZhbHVlIF4gKCh2YWx1ZSA8PCA1KSArICh2YWx1ZSA+PiAzKSk7Ci0gICAgaWYgKG5hbWUyICE9IE5VTEwpIHsKLQl3aGlsZSAoKGNoID0gKm5hbWUyKyspICE9IDApIHsKLQkgICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykgKyBjaCk7Ci0JfQorICAgIGlmIChsZW5ndGhzKQorICAgICAgICBsZW5ndGhzWzBdID0gaTsKKworICAgIEhBU0hfVVBEQVRFKGgxLCBoMiwgMCk7CisKKyAgICBpZiAoa2V5MiAhPSBOVUxMKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGtleTJbaV0gIT0gMDsgaSsrKSB7CisgICAgICAgICAgICBIQVNIX1VQREFURShoMSwgaDIsIGtleTJbaV0pOworICAgICAgICB9CisgICAgICAgIGlmIChsZW5ndGhzKQorICAgICAgICAgICAgbGVuZ3Roc1sxXSA9IGk7CiAgICAgfQotICAgIHZhbHVlID0gdmFsdWUgXiAoKHZhbHVlIDw8IDUpICsgKHZhbHVlID4+IDMpKTsKLSAgICBpZiAobmFtZTMgIT0gTlVMTCkgewotCXdoaWxlICgoY2ggPSAqbmFtZTMrKykgIT0gMCkgewotCSAgICB2YWx1ZSA9IHZhbHVlIF4gKCh2YWx1ZSA8PCA1KSArICh2YWx1ZSA+PiAzKSArIGNoKTsKLQl9CisKKyAgICBIQVNIX1VQREFURShoMSwgaDIsIDApOworCisgICAgaWYgKGtleTMgIT0gTlVMTCkgeworICAgICAgICBmb3IgKGkgPSAwOyBrZXkzW2ldICE9IDA7IGkrKykgeworICAgICAgICAgICAgSEFTSF9VUERBVEUoaDEsIGgyLCBrZXkzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuZ3RocykKKyAgICAgICAgICAgIGxlbmd0aHNbMl0gPSBpOwogICAgIH0KLSAgICByZXR1cm4gKHZhbHVlICUgdGFibGUtPnNpemUpOworCisgICAgSEFTSF9GSU5JU0goaDEsIGgyKTsKKworICAgIHJldHVybihoMik7CiB9CiAKLSNpZmRlZiBfX2NsYW5nX18KLUFUVFJJQlVURV9OT19TQU5JVElaRSgidW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpCi0jZW5kaWYKLXN0YXRpYyB1bnNpZ25lZCBsb25nCi14bWxIYXNoQ29tcHV0ZVFLZXkoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAotCQkgICBjb25zdCB4bWxDaGFyICpwcmVmaXgsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0JCSAgIGNvbnN0IHhtbENoYXIgKnByZWZpeDIsIGNvbnN0IHhtbENoYXIgKm5hbWUyLAotCQkgICBjb25zdCB4bWxDaGFyICpwcmVmaXgzLCBjb25zdCB4bWxDaGFyICpuYW1lMykgewotICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwTDsKLSAgICB1bnNpZ25lZCBsb25nIGNoOworQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKK3N0YXRpYyB1bnNpZ25lZAoreG1sSGFzaFFOYW1lVmFsdWUodW5zaWduZWQgc2VlZCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeCwgY29uc3QgeG1sQ2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeDIsIGNvbnN0IHhtbENoYXIgKm5hbWUyLAorICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqcHJlZml4MywgY29uc3QgeG1sQ2hhciAqbmFtZTMpIHsKKyAgICB1bnNpZ25lZCBoMSwgaDIsIGNoOwogCi0jaWZkZWYgSEFTSF9SQU5ET01JWkFUSU9OCi0gICAgdmFsdWUgPSB0YWJsZS0+cmFuZG9tX3NlZWQ7Ci0jZW5kaWYKLSAgICBpZiAocHJlZml4ICE9IE5VTEwpCi0JdmFsdWUgKz0gMzAgKiAoKnByZWZpeCk7Ci0gICAgZWxzZQotCXZhbHVlICs9IDMwICogKCpuYW1lKTsKKyAgICBIQVNIX0lOSVQoaDEsIGgyLCBzZWVkKTsKIAogICAgIGlmIChwcmVmaXggIT0gTlVMTCkgewotCXdoaWxlICgoY2ggPSAqcHJlZml4KyspICE9IDApIHsKLQkgICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykgKyBjaCk7Ci0JfQotCXZhbHVlID0gdmFsdWUgXiAoKHZhbHVlIDw8IDUpICsgKHZhbHVlID4+IDMpICsgKHVuc2lnbmVkIGxvbmcpJzonKTsKKyAgICAgICAgd2hpbGUgKChjaCA9ICpwcmVmaXgrKykgIT0gMCkgeworICAgICAgICAgICAgSEFTSF9VUERBVEUoaDEsIGgyLCBjaCk7CisgICAgICAgIH0KKyAgICAgICAgSEFTSF9VUERBVEUoaDEsIGgyLCAnOicpOwogICAgIH0KICAgICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0Jd2hpbGUgKChjaCA9ICpuYW1lKyspICE9IDApIHsKLQkgICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykgKyBjaCk7Ci0JfQorICAgICAgICB3aGlsZSAoKGNoID0gKm5hbWUrKykgIT0gMCkgeworICAgICAgICAgICAgSEFTSF9VUERBVEUoaDEsIGgyLCBjaCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykpOworICAgIEhBU0hfVVBEQVRFKGgxLCBoMiwgMCk7CiAgICAgaWYgKHByZWZpeDIgIT0gTlVMTCkgewotCXdoaWxlICgoY2ggPSAqcHJlZml4MisrKSAhPSAwKSB7Ci0JICAgIHZhbHVlID0gdmFsdWUgXiAoKHZhbHVlIDw8IDUpICsgKHZhbHVlID4+IDMpICsgY2gpOwotCX0KLQl2YWx1ZSA9IHZhbHVlIF4gKCh2YWx1ZSA8PCA1KSArICh2YWx1ZSA+PiAzKSArICh1bnNpZ25lZCBsb25nKSc6Jyk7CisgICAgICAgIHdoaWxlICgoY2ggPSAqcHJlZml4MisrKSAhPSAwKSB7CisgICAgICAgICAgICBIQVNIX1VQREFURShoMSwgaDIsIGNoKTsKKyAgICAgICAgfQorICAgICAgICBIQVNIX1VQREFURShoMSwgaDIsICc6Jyk7CiAgICAgfQogICAgIGlmIChuYW1lMiAhPSBOVUxMKSB7Ci0Jd2hpbGUgKChjaCA9ICpuYW1lMisrKSAhPSAwKSB7Ci0JICAgIHZhbHVlID0gdmFsdWUgXiAoKHZhbHVlIDw8IDUpICsgKHZhbHVlID4+IDMpICsgY2gpOwotCX0KKyAgICAgICAgd2hpbGUgKChjaCA9ICpuYW1lMisrKSAhPSAwKSB7CisgICAgICAgICAgICBIQVNIX1VQREFURShoMSwgaDIsIGNoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICB2YWx1ZSA9IHZhbHVlIF4gKCh2YWx1ZSA8PCA1KSArICh2YWx1ZSA+PiAzKSk7CisgICAgSEFTSF9VUERBVEUoaDEsIGgyLCAwKTsKICAgICBpZiAocHJlZml4MyAhPSBOVUxMKSB7Ci0Jd2hpbGUgKChjaCA9ICpwcmVmaXgzKyspICE9IDApIHsKLQkgICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykgKyBjaCk7Ci0JfQotCXZhbHVlID0gdmFsdWUgXiAoKHZhbHVlIDw8IDUpICsgKHZhbHVlID4+IDMpICsgKHVuc2lnbmVkIGxvbmcpJzonKTsKKyAgICAgICAgd2hpbGUgKChjaCA9ICpwcmVmaXgzKyspICE9IDApIHsKKyAgICAgICAgICAgIEhBU0hfVVBEQVRFKGgxLCBoMiwgY2gpOworICAgICAgICB9CisgICAgICAgIEhBU0hfVVBEQVRFKGgxLCBoMiwgJzonKTsKICAgICB9CiAgICAgaWYgKG5hbWUzICE9IE5VTEwpIHsKLQl3aGlsZSAoKGNoID0gKm5hbWUzKyspICE9IDApIHsKLQkgICAgdmFsdWUgPSB2YWx1ZSBeICgodmFsdWUgPDwgNSkgKyAodmFsdWUgPj4gMykgKyBjaCk7Ci0JfQorICAgICAgICB3aGlsZSAoKGNoID0gKm5hbWUzKyspICE9IDApIHsKKyAgICAgICAgICAgIEhBU0hfVVBEQVRFKGgxLCBoMiwgY2gpOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAodmFsdWUgJSB0YWJsZS0+c2l6ZSk7CisKKyAgICBIQVNIX0ZJTklTSChoMSwgaDIpOworCisgICAgcmV0dXJuKGgyKTsKIH0KIAogLyoqCiAgKiB4bWxIYXNoQ3JlYXRlOgotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlCisgKiBAc2l6ZTogaW5pdGlhbCBzaXplIG9mIHRoZSBoYXNoIHRhYmxlCiAgKgotICogQ3JlYXRlIGEgbmV3IHhtbEhhc2hUYWJsZVB0ci4KKyAqIENyZWF0ZSBhIG5ldyBoYXNoIHRhYmxlLiBTZXQgc2l6ZSB0byB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZW50cmllcworICogY2FuJ3QgYmUgZXN0aW1hdGVkLgogICoKLSAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QsIG9yIE5VTEwgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCiAgKi8KIHhtbEhhc2hUYWJsZVB0cgogeG1sSGFzaENyZWF0ZShpbnQgc2l6ZSkgewotICAgIHhtbEhhc2hUYWJsZVB0ciB0YWJsZTsKKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsKIAotICAgIGlmIChzaXplIDw9IDApCi0gICAgICAgIHNpemUgPSAyNTY7CisgICAgeG1sSW5pdFBhcnNlcigpOwogCi0gICAgdGFibGUgPSB4bWxNYWxsb2Moc2l6ZW9mKHhtbEhhc2hUYWJsZSkpOwotICAgIGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZS0+ZGljdCA9IE5VTEw7Ci0gICAgICAgIHRhYmxlLT5zaXplID0gc2l6ZTsKLQl0YWJsZS0+bmJFbGVtcyA9IDA7Ci0gICAgICAgIHRhYmxlLT50YWJsZSA9IHhtbE1hbGxvYyhzaXplICogc2l6ZW9mKHhtbEhhc2hFbnRyeSkpOwotICAgICAgICBpZiAodGFibGUtPnRhYmxlKSB7Ci0JICAgIG1lbXNldCh0YWJsZS0+dGFibGUsIDAsIHNpemUgKiBzaXplb2YoeG1sSGFzaEVudHJ5KSk7Ci0jaWZkZWYgSEFTSF9SQU5ET01JWkFUSU9OCi0gICAgICAgICAgICB0YWJsZS0+cmFuZG9tX3NlZWQgPSBfX3htbFJhbmRvbSgpOworICAgIGhhc2ggPSB4bWxNYWxsb2Moc2l6ZW9mKCpoYXNoKSk7CisgICAgaWYgKGhhc2ggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIGhhc2gtPmRpY3QgPSBOVUxMOworICAgIGhhc2gtPnNpemUgPSAwOworICAgIGhhc2gtPnRhYmxlID0gTlVMTDsKKyAgICBoYXNoLT5uYkVsZW1zID0gMDsKKyAgICBoYXNoLT5yYW5kb21TZWVkID0geG1sUmFuZG9tKCk7CisjaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgorICAgIGhhc2gtPnJhbmRvbVNlZWQgPSAwOwogI2VuZGlmCi0JICAgIHJldHVybih0YWJsZSk7CisKKyAgICAvKgorICAgICAqIFVubGVzcyBhIGxhcmdlciBzaXplIGlzIHBhc3NlZCwgdGhlIGJhY2tpbmcgdGFibGUgaXMgY3JlYXRlZAorICAgICAqIGxhemlseSB3aXRoIE1JTl9IQVNIX1NJWkUgY2FwYWNpdHkuIEluIHByYWN0aWNlLCB0aGVyZSBhcmUgbWFueQorICAgICAqIGhhc2ggdGFibGVzIHdoaWNoIGFyZSBuZXZlciBmaWxsZWQuCisgICAgICovCisgICAgaWYgKHNpemUgPiBNSU5fSEFTSF9TSVpFKSB7CisgICAgICAgIHVuc2lnbmVkIG5ld1NpemUgPSBNSU5fSEFTSF9TSVpFICogMjsKKworICAgICAgICB3aGlsZSAoKG5ld1NpemUgPCAodW5zaWduZWQpIHNpemUpICYmIChuZXdTaXplIDwgTUFYX0hBU0hfU0laRSkpCisgICAgICAgICAgICBuZXdTaXplICo9IDI7CisKKyAgICAgICAgaWYgKHhtbEhhc2hHcm93KGhhc2gsIG5ld1NpemUpICE9IDApIHsKKyAgICAgICAgICAgIHhtbEZyZWUoaGFzaCk7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgICAgIH0KLSAgICAgICAgeG1sRnJlZSh0YWJsZSk7CiAgICAgfQotICAgIHJldHVybihOVUxMKTsKKworICAgIHJldHVybihoYXNoKTsKIH0KIAogLyoqCkBAIC0yMDIsOTM4ICsxOTksMTAxNyBAQAogICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlCiAgKiBAZGljdDogYSBkaWN0aW9uYXJ5IHRvIHVzZSBmb3IgdGhlIGhhc2gKICAqCi0gKiBDcmVhdGUgYSBuZXcgeG1sSGFzaFRhYmxlUHRyIHdoaWNoIHdpbGwgdXNlIEBkaWN0IGFzIHRoZSBpbnRlcm5hbCBkaWN0aW9uYXJ5CisgKiBDcmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBiYWNrZWQgYnkgYSBkaWN0aW9uYXJ5LiBUaGlzIGNhbiByZWR1Y2UKKyAqIHJlc291cmNlIHVzYWdlIGNvbnNpZGVyYWJseSBpZiBtb3N0IGtleXMgcGFzc2VkIHRvIEFQSSBmdW5jdGlvbnMKKyAqIG9yaWdpbmF0ZSBmcm9tIHRoaXMgZGljdGlvbmFyeS4KICAqCi0gKiBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdCwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LCBvciBOVUxMIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgogICovCiB4bWxIYXNoVGFibGVQdHIKIHhtbEhhc2hDcmVhdGVEaWN0KGludCBzaXplLCB4bWxEaWN0UHRyIGRpY3QpIHsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7CisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7CiAKLSAgICB0YWJsZSA9IHhtbEhhc2hDcmVhdGUoc2l6ZSk7Ci0gICAgaWYgKHRhYmxlICE9IE5VTEwpIHsKLSAgICAgICAgdGFibGUtPmRpY3QgPSBkaWN0OwotCXhtbERpY3RSZWZlcmVuY2UoZGljdCk7CisgICAgaGFzaCA9IHhtbEhhc2hDcmVhdGUoc2l6ZSk7CisgICAgaWYgKGhhc2ggIT0gTlVMTCkgeworICAgICAgICBoYXNoLT5kaWN0ID0gZGljdDsKKyAgICAgICAgeG1sRGljdFJlZmVyZW5jZShkaWN0KTsKICAgICB9Ci0gICAgcmV0dXJuKHRhYmxlKTsKKyAgICByZXR1cm4oaGFzaCk7Cit9CisKKy8qKgorICogeG1sSGFzaEZyZWU6CisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGRlYWxsb2M6IGRlYWxsb2NhdG9yIGZ1bmN0aW9uIG9yIE5VTEwKKyAqCisgKiBGcmVlIHRoZSBoYXNoIGFuZCBpdHMgY29udGVudHMuIFRoZSBwYXlsb2FkIGlzIGRlYWxsb2NhdGVkIHdpdGgKKyAqIEBkZWFsbG9jIGlmIHByb3ZpZGVkLgorICovCit2b2lkCit4bWxIYXNoRnJlZSh4bWxIYXNoVGFibGVQdHIgaGFzaCwgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpIHsKKyAgICBpZiAoaGFzaCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzaC0+dGFibGUpIHsKKyAgICAgICAgY29uc3QgeG1sSGFzaEVudHJ5ICplbmQgPSAmaGFzaC0+dGFibGVbaGFzaC0+c2l6ZV07CisgICAgICAgIGNvbnN0IHhtbEhhc2hFbnRyeSAqZW50cnk7CisKKyAgICAgICAgZm9yIChlbnRyeSA9IGhhc2gtPnRhYmxlOyBlbnRyeSA8IGVuZDsgZW50cnkrKykgeworICAgICAgICAgICAgaWYgKGVudHJ5LT5oYXNoVmFsdWUgPT0gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgoZGVhbGxvYyAhPSBOVUxMKSAmJiAoZW50cnktPnBheWxvYWQgIT0gTlVMTCkpCisgICAgICAgICAgICAgICAgZGVhbGxvYyhlbnRyeS0+cGF5bG9hZCwgZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoaGFzaC0+ZGljdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkpCisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoZW50cnktPmtleSk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkyKQorICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGVudHJ5LT5rZXkyKTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnktPmtleTMpCisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoZW50cnktPmtleTMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgeG1sRnJlZShoYXNoLT50YWJsZSk7CisgICAgfQorCisgICAgaWYgKGhhc2gtPmRpY3QpCisgICAgICAgIHhtbERpY3RGcmVlKGhhc2gtPmRpY3QpOworCisgICAgeG1sRnJlZShoYXNoKTsKK30KKworLyoqCisgKiB4bWxGYXN0U3RyRXF1YWw6CisgKiBAczE6IHN0cmluZworICogQHMyOiBzdHJpbmcKKyAqCisgKiBDb21wYXJlIHR3byBzdHJpbmdzIGZvciBlcXVhbGl0eSwgYWxsb3dpbmcgTlVMTCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbnQKK3htbEZhc3RTdHJFcXVhbChjb25zdCB4bWxDaGFyICpzMSwgY29uc3QgeG1sQ2hhciAqczIpIHsKKyAgICBpZiAoczEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKHMyID09IE5VTEwpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKChzMiAhPSBOVUxMKSAmJgorICAgICAgICAgICAgICAgKHN0cmNtcCgoY29uc3QgY2hhciAqKSBzMSwgKGNvbnN0IGNoYXIgKikgczIpID09IDApKTsKK30KKworLyoqCisgKiB4bWxIYXNoRmluZEVudHJ5OgorICogQGhhc2g6IGhhc2ggdGFibGUsIG5vbi1OVUxMLCBzaXplID4gMAorICogQGtleTogZmlyc3Qgc3RyaW5nIGtleSwgbm9uLU5VTEwKKyAqIEBrZXkyOiBzZWNvbmQgc3RyaW5nIGtleQorICogQGtleTM6IHRoaXJkIHN0cmluZyBrZXkKKyAqIEBoYXNoVmFsdWU6IHZhbGlkIGhhc2ggdmFsdWUgb2Yga2V5cworICogQHBmb3VuZDogcmVzdWx0IG9mIHNlYXJjaAorICoKKyAqIFRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgaGFzaCB0YWJsZSBlbnRyeS4gSWYgYW4gZW50cnkgd2FzIGZvdW5kLCBzZXQKKyAqIEBmb3VuZCB0byAxIGFuZCByZXR1cm4gdGhlIGVudHJ5LiBPdGhlcndpc2UsIHNldCBAZm91bmQgdG8gMCBhbmQgcmV0dXJuCisgKiB0aGUgbG9jYXRpb24gd2hlcmUgYSBuZXcgZW50cnkgc2hvdWxkIGJlIGluc2VydGVkLgorICovCitBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUgorc3RhdGljIHhtbEhhc2hFbnRyeSAqCit4bWxIYXNoRmluZEVudHJ5KGNvbnN0IHhtbEhhc2hUYWJsZSAqaGFzaCwgY29uc3QgeG1sQ2hhciAqa2V5LAorICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyLCBjb25zdCB4bWxDaGFyICprZXkzLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoYXNoVmFsdWUsIGludCAqcGZvdW5kKSB7CisgICAgeG1sSGFzaEVudHJ5ICplbnRyeTsKKyAgICB1bnNpZ25lZCBtYXNrLCBwb3MsIGRpc3BsOworICAgIGludCBmb3VuZCA9IDA7CisKKyAgICBtYXNrID0gaGFzaC0+c2l6ZSAtIDE7CisgICAgcG9zID0gaGFzaFZhbHVlICYgbWFzazsKKyAgICBlbnRyeSA9ICZoYXNoLT50YWJsZVtwb3NdOworCisgICAgaWYgKGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBSb2JpbiBob29kIGhhc2hpbmc6IGFib3J0IGlmIHRoZSBkaXNwbGFjZW1lbnQgb2YgdGhlIGVudHJ5CisgICAgICAgICAqIGlzIHNtYWxsZXIgdGhhbiB0aGUgZGlzcGxhY2VtZW50IG9mIHRoZSBrZXkgd2UgbG9vayBmb3IuCisgICAgICAgICAqIFRoaXMgYWxzbyBzdG9wcyBhdCB0aGUgY29ycmVjdCBwb3NpdGlvbiB3aGVuIGluc2VydGluZy4KKyAgICAgICAgICovCisgICAgICAgIGRpc3BsID0gMDsKKyAgICAgICAgaGFzaFZhbHVlIHw9IE1BWF9IQVNIX1NJWkU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGVudHJ5LT5oYXNoVmFsdWUgPT0gaGFzaFZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc2gtPmRpY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChlbnRyeS0+a2V5ID09IGtleSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeS0+a2V5MiA9PSBrZXkyKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5rZXkzID09IGtleTMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKHN0cmNtcCgoY29uc3QgY2hhciAqKSBlbnRyeS0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIGtleSkgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKHhtbEZhc3RTdHJFcXVhbChlbnRyeS0+a2V5Miwga2V5MikpICYmCisgICAgICAgICAgICAgICAgICAgICh4bWxGYXN0U3RyRXF1YWwoZW50cnktPmtleTMsIGtleTMpKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGlzcGwrKzsKKyAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgZW50cnkrKzsKKyAgICAgICAgICAgIGlmICgocG9zICYgbWFzaykgPT0gMCkKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGhhc2gtPnRhYmxlOworICAgICAgICB9IHdoaWxlICgoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSAmJgorICAgICAgICAgICAgICAgICAoKChwb3MgLSBlbnRyeS0+aGFzaFZhbHVlKSAmIG1hc2spID49IGRpc3BsKSk7CisgICAgfQorCisgICAgKnBmb3VuZCA9IGZvdW5kOworICAgIHJldHVybihlbnRyeSk7CiB9CiAKIC8qKgogICogeG1sSGFzaEdyb3c6Ci0gKiBAdGFibGU6IHRoZSBoYXNoIHRhYmxlCi0gKiBAc2l6ZTogdGhlIG5ldyBzaXplIG9mIHRoZSBoYXNoIHRhYmxlCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQHNpemU6IG5ldyBzaXplIG9mIHRoZSBoYXNoIHRhYmxlCiAgKgotICogcmVzaXplIHRoZSBoYXNoIHRhYmxlCisgKiBSZXNpemUgdGhlIGhhc2ggdGFibGUuCiAgKgotICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgaW4gY2FzZSBvZiBmYWlsdXJlCisgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KICAqLwogc3RhdGljIGludAoteG1sSGFzaEdyb3coeG1sSGFzaFRhYmxlUHRyIHRhYmxlLCBpbnQgc2l6ZSkgewotICAgIHVuc2lnbmVkIGxvbmcga2V5OwotICAgIGludCBvbGRzaXplLCBpOwotICAgIHhtbEhhc2hFbnRyeVB0ciBpdGVyLCBuZXh0OwotICAgIHN0cnVjdCBfeG1sSGFzaEVudHJ5ICpvbGR0YWJsZTsKLSNpZmRlZiBERUJVR19HUk9XCi0gICAgdW5zaWduZWQgbG9uZyBuYkVsZW0gPSAwOwotI2VuZGlmCit4bWxIYXNoR3Jvdyh4bWxIYXNoVGFibGVQdHIgaGFzaCwgdW5zaWduZWQgc2l6ZSkgeworICAgIGNvbnN0IHhtbEhhc2hFbnRyeSAqb2xkZW50cnksICpvbGRlbmQsICplbmQ7CisgICAgeG1sSGFzaEVudHJ5ICp0YWJsZTsKKyAgICB1bnNpZ25lZCBvbGRzaXplLCBpOwogCisgICAgLyogQWRkIDAgdG8gYXZvaWQgc3B1cmlvdXMgLVd0eXBlLWxpbWl0cyB3YXJuaW5nIG9uIDY0LWJpdCBHQ0MgKi8KKyAgICBpZiAoKHNpemVfdCkgc2l6ZSArIDAgPiBTSVpFX01BWCAvIHNpemVvZih0YWJsZVswXSkpCisgICAgICAgIHJldHVybigtMSk7CisgICAgdGFibGUgPSB4bWxNYWxsb2Moc2l6ZSAqIHNpemVvZih0YWJsZVswXSkpOwogICAgIGlmICh0YWJsZSA9PSBOVUxMKQotCXJldHVybigtMSk7Ci0gICAgaWYgKHNpemUgPCA4KQogICAgICAgICByZXR1cm4oLTEpOwotICAgIGlmIChzaXplID4gOCAqIDIwNDgpCi0JcmV0dXJuKC0xKTsKKyAgICBtZW1zZXQodGFibGUsIDAsIHNpemUgKiBzaXplb2YodGFibGVbMF0pKTsKIAotICAgIG9sZHNpemUgPSB0YWJsZS0+c2l6ZTsKLSAgICBvbGR0YWJsZSA9IHRhYmxlLT50YWJsZTsKLSAgICBpZiAob2xkdGFibGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBvbGRzaXplID0gaGFzaC0+c2l6ZTsKKyAgICBpZiAob2xkc2l6ZSA9PSAwKQorICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICB0YWJsZS0+dGFibGUgPSB4bWxNYWxsb2Moc2l6ZSAqIHNpemVvZih4bWxIYXNoRW50cnkpKTsKLSAgICBpZiAodGFibGUtPnRhYmxlID09IE5VTEwpIHsKLQl0YWJsZS0+dGFibGUgPSBvbGR0YWJsZTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBtZW1zZXQodGFibGUtPnRhYmxlLCAwLCBzaXplICogc2l6ZW9mKHhtbEhhc2hFbnRyeSkpOwotICAgIHRhYmxlLT5zaXplID0gc2l6ZTsKKyAgICBvbGRlbmQgPSAmaGFzaC0+dGFibGVbb2xkc2l6ZV07CisgICAgZW5kID0gJnRhYmxlW3NpemVdOwogCi0gICAgLyoJSWYgdGhlIHR3byBsb29wcyBhcmUgbWVyZ2VkLCB0aGVyZSB3b3VsZCBiZSBzaXR1YXRpb25zIHdoZXJlCi0JYSBuZXcgZW50cnkgbmVlZHMgdG8gYWxsb2NhdGVkIGFuZCBkYXRhIGNvcGllZCBpbnRvIGl0IGZyb20KLQl0aGUgbWFpbiB0YWJsZS4gU28gaW5zdGVhZCwgd2UgcnVuIHRocm91Z2ggdGhlIGFycmF5IHR3aWNlLCBmaXJzdAotCWNvcHlpbmcgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgbWFpbiBhcnJheSAod2hlcmUgd2UgY2FuJ3QgZ2V0Ci0JY29uZmxpY3RzKSBhbmQgdGhlbiB0aGUgcmVzdCwgc28gd2Ugb25seSBmcmVlIChhbmQgZG9uJ3QgYWxsb2NhdGUpCi0gICAgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgb2xkc2l6ZTsgaSsrKSB7Ci0JaWYgKG9sZHRhYmxlW2ldLnZhbGlkID09IDApCi0JICAgIGNvbnRpbnVlOwotCWtleSA9IHhtbEhhc2hDb21wdXRlS2V5KHRhYmxlLCBvbGR0YWJsZVtpXS5uYW1lLCBvbGR0YWJsZVtpXS5uYW1lMiwKLQkJCQlvbGR0YWJsZVtpXS5uYW1lMyk7Ci0JbWVtY3B5KCYodGFibGUtPnRhYmxlW2tleV0pLCAmKG9sZHRhYmxlW2ldKSwgc2l6ZW9mKHhtbEhhc2hFbnRyeSkpOwotCXRhYmxlLT50YWJsZVtrZXldLm5leHQgPSBOVUxMOworICAgIC8qCisgICAgICogUm9iaW4gSG9vZCBzb3J0aW5nIG9yZGVyIGlzIG1haW50YWluZWQgaWYgd2UKKyAgICAgKgorICAgICAqIC0gY29tcHV0ZSBoYXNoIGluZGljZXMgd2l0aCBtb2R1bG8KKyAgICAgKiAtIHJlc2l6ZSBieSBhbiBpbnRlZ2VyIGZhY3RvcgorICAgICAqIC0gc3RhcnQgdG8gY29weSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9iZSBzZXF1ZW5jZQorICAgICAqLworICAgIG9sZGVudHJ5ID0gaGFzaC0+dGFibGU7CisgICAgd2hpbGUgKG9sZGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICBpZiAoKytvbGRlbnRyeSA+PSBvbGRlbmQpCisgICAgICAgICAgICBvbGRlbnRyeSA9IGhhc2gtPnRhYmxlOwogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBvbGRzaXplOyBpKyspIHsKLQlpdGVyID0gb2xkdGFibGVbaV0ubmV4dDsKLQl3aGlsZSAoaXRlcikgewotCSAgICBuZXh0ID0gaXRlci0+bmV4dDsKKyAgICAgICAgaWYgKG9sZGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICAgICAgeG1sSGFzaEVudHJ5ICplbnRyeSA9ICZ0YWJsZVtvbGRlbnRyeS0+aGFzaFZhbHVlICYgKHNpemUgLSAxKV07CiAKLQkgICAgLyoKLQkgICAgICogcHV0IGJhY2sgdGhlIGVudHJ5IGluIHRoZSBuZXcgdGFibGUKLQkgICAgICovCisgICAgICAgICAgICB3aGlsZSAoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrZW50cnkgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmVudHJ5ID0gKm9sZGVudHJ5OworICAgICAgICB9CiAKLQkgICAga2V5ID0geG1sSGFzaENvbXB1dGVLZXkodGFibGUsIGl0ZXItPm5hbWUsIGl0ZXItPm5hbWUyLAotCQkgICAgICAgICAgICAgICAgICAgIGl0ZXItPm5hbWUzKTsKLQkgICAgaWYgKHRhYmxlLT50YWJsZVtrZXldLnZhbGlkID09IDApIHsKLQkJbWVtY3B5KCYodGFibGUtPnRhYmxlW2tleV0pLCBpdGVyLCBzaXplb2YoeG1sSGFzaEVudHJ5KSk7Ci0JCXRhYmxlLT50YWJsZVtrZXldLm5leHQgPSBOVUxMOwotCQl4bWxGcmVlKGl0ZXIpOwotCSAgICB9IGVsc2UgewotCQlpdGVyLT5uZXh0ID0gdGFibGUtPnRhYmxlW2tleV0ubmV4dDsKLQkJdGFibGUtPnRhYmxlW2tleV0ubmV4dCA9IGl0ZXI7Ci0JICAgIH0KLQotI2lmZGVmIERFQlVHX0dST1cKLQkgICAgbmJFbGVtKys7Ci0jZW5kaWYKLQotCSAgICBpdGVyID0gbmV4dDsKLQl9CisgICAgICAgIGlmICgrK29sZGVudHJ5ID49IG9sZGVuZCkKKyAgICAgICAgICAgIG9sZGVudHJ5ID0gaGFzaC0+dGFibGU7CiAgICAgfQogCi0gICAgeG1sRnJlZShvbGR0YWJsZSk7CisgICAgeG1sRnJlZShoYXNoLT50YWJsZSk7CiAKLSNpZmRlZiBERUJVR19HUk9XCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJ4bWxIYXNoR3JvdyA6IGZyb20gJWQgdG8gJWQsICVkIGVsZW1zXG4iLCBvbGRzaXplLCBzaXplLCBuYkVsZW0pOwotI2VuZGlmCitkb25lOgorICAgIGhhc2gtPnRhYmxlID0gdGFibGU7CisgICAgaGFzaC0+c2l6ZSA9IHNpemU7CiAKICAgICByZXR1cm4oMCk7CiB9CiAKIC8qKgotICogeG1sSGFzaEZyZWU6Ci0gKiBAdGFibGU6IHRoZSBoYXNoIHRhYmxlCi0gKiBAZjogIHRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2gKKyAqIHhtbEhhc2hVcGRhdGVJbnRlcm5hbDoKKyAqIEBoYXNoOiBoYXNoIHRhYmxlCisgKiBAa2V5OiBmaXJzdCBzdHJpbmcga2V5CisgKiBAa2V5Mjogc2Vjb25kIHN0cmluZyBrZXkKKyAqIEBrZXkzOiB0aGlyZCBzdHJpbmcga2V5CisgKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGF5bG9hZAorICogQGRlYWxsb2M6IGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZXBsYWNlZCBpdGVtIG9yIE5VTEwKKyAqIEB1cGRhdGU6IHdoZXRoZXIgZXhpc3RpbmcgZW50cmllcyBzaG91bGQgYmUgdXBkYXRlZAogICoKLSAqIEZyZWUgdGhlIGhhc2ggQHRhYmxlIGFuZCBpdHMgY29udGVudHMuIFRoZSB1c2VyZGF0YSBpcwotICogZGVhbGxvY2F0ZWQgd2l0aCBAZiBpZiBwcm92aWRlZC4KKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGFkZCBvciB1cGRhdGUgaGFzaCBlbnRyaWVzLgogICovCi12b2lkCi14bWxIYXNoRnJlZSh4bWxIYXNoVGFibGVQdHIgdGFibGUsIHhtbEhhc2hEZWFsbG9jYXRvciBmKSB7Ci0gICAgaW50IGk7Ci0gICAgeG1sSGFzaEVudHJ5UHRyIGl0ZXI7Ci0gICAgeG1sSGFzaEVudHJ5UHRyIG5leHQ7Ci0gICAgaW50IGluc2lkZV90YWJsZSA9IDA7Ci0gICAgaW50IG5iRWxlbXM7CitBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUgorc3RhdGljIGludAoreG1sSGFzaFVwZGF0ZUludGVybmFsKHhtbEhhc2hUYWJsZVB0ciBoYXNoLCBjb25zdCB4bWxDaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqa2V5MiwgY29uc3QgeG1sQ2hhciAqa2V5MywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXlsb2FkLCB4bWxIYXNoRGVhbGxvY2F0b3IgZGVhbGxvYywgaW50IHVwZGF0ZSkgeworICAgIHhtbENoYXIgKmNvcHksICpjb3B5MiwgKmNvcHkzOworICAgIHhtbEhhc2hFbnRyeSAqZW50cnkgPSBOVUxMOworICAgIHNpemVfdCBsZW5ndGhzWzNdOworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZTsKKyAgICBpbnQgZm91bmQgPSAwOwogCi0gICAgaWYgKHRhYmxlID09IE5VTEwpCi0JcmV0dXJuOwotICAgIGlmICh0YWJsZS0+dGFibGUpIHsKLQluYkVsZW1zID0gdGFibGUtPm5iRWxlbXM7Ci0JZm9yKGkgPSAwOyAoaSA8IHRhYmxlLT5zaXplKSAmJiAobmJFbGVtcyA+IDApOyBpKyspIHsKLQkgICAgaXRlciA9ICYodGFibGUtPnRhYmxlW2ldKTsKLQkgICAgaWYgKGl0ZXItPnZhbGlkID09IDApCi0JCWNvbnRpbnVlOwotCSAgICBpbnNpZGVfdGFibGUgPSAxOwotCSAgICB3aGlsZSAoaXRlcikgewotCQluZXh0ID0gaXRlci0+bmV4dDsKLQkJaWYgKChmICE9IE5VTEwpICYmIChpdGVyLT5wYXlsb2FkICE9IE5VTEwpKQotCQkgICAgZihpdGVyLT5wYXlsb2FkLCBpdGVyLT5uYW1lKTsKLQkJaWYgKHRhYmxlLT5kaWN0ID09IE5VTEwpIHsKLQkJICAgIGlmIChpdGVyLT5uYW1lKQotCQkJeG1sRnJlZShpdGVyLT5uYW1lKTsKLQkJICAgIGlmIChpdGVyLT5uYW1lMikKLQkJCXhtbEZyZWUoaXRlci0+bmFtZTIpOwotCQkgICAgaWYgKGl0ZXItPm5hbWUzKQotCQkJeG1sRnJlZShpdGVyLT5uYW1lMyk7Ci0JCX0KLQkJaXRlci0+cGF5bG9hZCA9IE5VTEw7Ci0JCWlmICghaW5zaWRlX3RhYmxlKQotCQkgICAgeG1sRnJlZShpdGVyKTsKLQkJbmJFbGVtcy0tOwotCQlpbnNpZGVfdGFibGUgPSAwOwotCQlpdGVyID0gbmV4dDsKLQkgICAgfQotCX0KLQl4bWxGcmVlKHRhYmxlLT50YWJsZSk7CisgICAgaWYgKChoYXNoID09IE5VTEwpIHx8IChrZXkgPT0gTlVMTCkpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBhbiBleGlzdGluZyBlbnRyeQorICAgICAqLworICAgIGhhc2hWYWx1ZSA9IHhtbEhhc2hWYWx1ZShoYXNoLT5yYW5kb21TZWVkLCBrZXksIGtleTIsIGtleTMsIGxlbmd0aHMpOworICAgIGlmIChoYXNoLT5zaXplID4gMCkKKyAgICAgICAgZW50cnkgPSB4bWxIYXNoRmluZEVudHJ5KGhhc2gsIGtleSwga2V5Miwga2V5MywgaGFzaFZhbHVlLCAmZm91bmQpOworICAgIGlmIChmb3VuZCkgeworICAgICAgICBpZiAodXBkYXRlKSB7CisgICAgICAgICAgICBpZiAoZGVhbGxvYykKKyAgICAgICAgICAgICAgICBkZWFsbG9jKGVudHJ5LT5wYXlsb2FkLCBlbnRyeS0+a2V5KTsKKyAgICAgICAgICAgIGVudHJ5LT5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB4bWxIYXNoQWRkRW50cnkgZm91bmQgYW4gZXhpc3RpbmcgZW50cnkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVE9ETzogV2Ugc2hvdWxkIHJldHVybiBhIGRpZmZlcmVudCBlcnJvciBjb2RlIGhlcmUgdG8KKyAgICAgICAgICAgICAqIGRpc3Rpbmd1aXNoIGZyb20gbWFsbG9jIGZhaWx1cmVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CiAgICAgfQotICAgIGlmICh0YWJsZS0+ZGljdCkKLSAgICAgICAgeG1sRGljdEZyZWUodGFibGUtPmRpY3QpOwotICAgIHhtbEZyZWUodGFibGUpOworCisgICAgLyoKKyAgICAgKiBHcm93IHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZAorICAgICAqLworICAgIGlmIChoYXNoLT5uYkVsZW1zICsgMSA+IGhhc2gtPnNpemUgLyBNQVhfRklMTF9ERU5PTSAqIE1BWF9GSUxMX05VTSkgeworICAgICAgICB1bnNpZ25lZCBuZXdTaXplLCBtYXNrLCBkaXNwbCwgcG9zOworCisgICAgICAgIGlmIChoYXNoLT5zaXplID09IDApIHsKKyAgICAgICAgICAgIG5ld1NpemUgPSBNSU5fSEFTSF9TSVpFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogVGhpcyBndWFyYW50ZWVzIHRoYXQgbmJFbGVtcyA8IElOVF9NQVggKi8KKyAgICAgICAgICAgIGlmIChoYXNoLT5zaXplID49IE1BWF9IQVNIX1NJWkUpCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIG5ld1NpemUgPSBoYXNoLT5zaXplICogMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoeG1sSGFzaEdyb3coaGFzaCwgbmV3U2l6ZSkgIT0gMCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRmluZCBuZXcgZW50cnkKKyAgICAgICAgICovCisgICAgICAgIG1hc2sgPSBoYXNoLT5zaXplIC0gMTsKKyAgICAgICAgZGlzcGwgPSAwOworICAgICAgICBwb3MgPSBoYXNoVmFsdWUgJiBtYXNrOworICAgICAgICBlbnRyeSA9ICZoYXNoLT50YWJsZVtwb3NdOworCisgICAgICAgIGlmIChlbnRyeS0+aGFzaFZhbHVlICE9IDApIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBkaXNwbCsrOworICAgICAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgICAgIGVudHJ5Kys7CisgICAgICAgICAgICAgICAgaWYgKChwb3MgJiBtYXNrKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGhhc2gtPnRhYmxlOworICAgICAgICAgICAgfSB3aGlsZSAoKGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICgocG9zIC0gZW50cnktPmhhc2hWYWx1ZSkgJiBtYXNrKSA+PSBkaXNwbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENvcHkga2V5cworICAgICAqLworICAgIGlmIChoYXNoLT5kaWN0ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHhtbERpY3RPd25zKGhhc2gtPmRpY3QsIGtleSkpIHsKKyAgICAgICAgICAgIGNvcHkgPSAoeG1sQ2hhciAqKSBrZXk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb3B5ID0gKHhtbENoYXIgKikgeG1sRGljdExvb2t1cChoYXNoLT5kaWN0LCBrZXksIC0xKTsKKyAgICAgICAgICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoa2V5MiA9PSBOVUxMKSB8fCAoeG1sRGljdE93bnMoaGFzaC0+ZGljdCwga2V5MikpKSB7CisgICAgICAgICAgICBjb3B5MiA9ICh4bWxDaGFyICopIGtleTI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb3B5MiA9ICh4bWxDaGFyICopIHhtbERpY3RMb29rdXAoaGFzaC0+ZGljdCwga2V5MiwgLTEpOworICAgICAgICAgICAgaWYgKGNvcHkyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGtleTMgPT0gTlVMTCkgfHwgKHhtbERpY3RPd25zKGhhc2gtPmRpY3QsIGtleTMpKSkgeworICAgICAgICAgICAgY29weTMgPSAoeG1sQ2hhciAqKSBrZXkzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29weTMgPSAoeG1sQ2hhciAqKSB4bWxEaWN0TG9va3VwKGhhc2gtPmRpY3QsIGtleTMsIC0xKTsKKyAgICAgICAgICAgIGlmIChjb3B5MyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb3B5ID0geG1sTWFsbG9jKGxlbmd0aHNbMF0gKyAxKTsKKyAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIG1lbWNweShjb3B5LCBrZXksIGxlbmd0aHNbMF0gKyAxKTsKKworICAgICAgICBpZiAoa2V5MiAhPSBOVUxMKSB7CisgICAgICAgICAgICBjb3B5MiA9IHhtbE1hbGxvYyhsZW5ndGhzWzFdICsgMSk7CisgICAgICAgICAgICBpZiAoY29weTIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHhtbEZyZWUoY29weSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShjb3B5Miwga2V5MiwgbGVuZ3Roc1sxXSArIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29weTIgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleTMgIT0gTlVMTCkgeworICAgICAgICAgICAgY29weTMgPSB4bWxNYWxsb2MobGVuZ3Roc1syXSArIDEpOworICAgICAgICAgICAgaWYgKGNvcHkzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB4bWxGcmVlKGNvcHkpOworICAgICAgICAgICAgICAgIHhtbEZyZWUoY29weTIpOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkoY29weTMsIGtleTMsIGxlbmd0aHNbMl0gKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvcHkzID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogU2hpZnQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJvYmUgc2VxdWVuY2UgdG8gdGhlIHJpZ2h0CisgICAgICovCisgICAgaWYgKGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICBjb25zdCB4bWxIYXNoRW50cnkgKmVuZCA9ICZoYXNoLT50YWJsZVtoYXNoLT5zaXplXTsKKyAgICAgICAgY29uc3QgeG1sSGFzaEVudHJ5ICpjdXIgPSBlbnRyeTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBjdXIrKzsKKyAgICAgICAgICAgIGlmIChjdXIgPj0gZW5kKQorICAgICAgICAgICAgICAgIGN1ciA9IGhhc2gtPnRhYmxlOworICAgICAgICB9IHdoaWxlIChjdXItPmhhc2hWYWx1ZSAhPSAwKTsKKworICAgICAgICBpZiAoY3VyIDwgZW50cnkpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB3ZSB0cmF2ZXJzZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBoYW5kbGUgdGhlIHBhcnQKKyAgICAgICAgICAgICAqIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW1tb3ZlKCZoYXNoLT50YWJsZVsxXSwgaGFzaC0+dGFibGUsCisgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGN1ciAtIChjaGFyICopIGhhc2gtPnRhYmxlKTsKKyAgICAgICAgICAgIGN1ciA9IGVuZCAtIDE7CisgICAgICAgICAgICBoYXNoLT50YWJsZVswXSA9ICpjdXI7CisgICAgICAgIH0KKworICAgICAgICBtZW1tb3ZlKCZlbnRyeVsxXSwgZW50cnksIChjaGFyICopIGN1ciAtIChjaGFyICopIGVudHJ5KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFBvcHVsYXRlIGVudHJ5CisgICAgICovCisgICAgZW50cnktPmtleSA9IGNvcHk7CisgICAgZW50cnktPmtleTIgPSBjb3B5MjsKKyAgICBlbnRyeS0+a2V5MyA9IGNvcHkzOworICAgIGVudHJ5LT5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICAvKiBPUiB3aXRoIE1BWF9IQVNIX1NJWkUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIGlzIG5vbi16ZXJvICovCisgICAgZW50cnktPmhhc2hWYWx1ZSA9IGhhc2hWYWx1ZSB8IE1BWF9IQVNIX1NJWkU7CisKKyAgICBoYXNoLT5uYkVsZW1zKys7CisKKyAgICByZXR1cm4oMCk7CiB9CiAKIC8qKgogICogeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcjoKLSAqIEBlbnRyeTogdGhlIGhhc2ggdGFibGUgZW50cnkKLSAqIEBuYW1lOiB0aGUgZW50cnkncyBuYW1lCisgKiBAZW50cnk6IGhhc2ggdGFibGUgZW50cnkKKyAqIEBrZXk6IHRoZSBlbnRyeSdzIHN0cmluZyBrZXkKICAqCiAgKiBGcmVlIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHhtbEZyZWUuCiAgKi8KIHZvaWQKLXhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3Iodm9pZCAqZW50cnksIGNvbnN0IHhtbENoYXIgKm5hbWUgQVRUUklCVVRFX1VOVVNFRCkgeworeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcih2b2lkICplbnRyeSwgY29uc3QgeG1sQ2hhciAqa2V5IEFUVFJJQlVURV9VTlVTRUQpIHsKICAgICB4bWxGcmVlKGVudHJ5KTsKIH0KIAogLyoqCiAgKiB4bWxIYXNoQWRkRW50cnk6Ci0gKiBAdGFibGU6IHRoZSBoYXNoIHRhYmxlCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAdXNlcmRhdGE6IGEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEKKyAqIEBoYXNoOiBoYXNoIHRhYmxlCisgKiBAa2V5OiBzdHJpbmcga2V5CisgKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGF5bG9hZAogICoKLSAqIEFkZCB0aGUgQHVzZXJkYXRhIHRvIHRoZSBoYXNoIEB0YWJsZS4gVGhpcyBjYW4gbGF0ZXIgYmUgcmV0cmlldmVkCi0gKiBieSB1c2luZyB0aGUgQG5hbWUuIER1cGxpY2F0ZSBuYW1lcyBnZW5lcmF0ZSBlcnJvcnMuCisgKiBBZGQgYSBoYXNoIHRhYmxlIGVudHJ5LiBJZiBhbiBlbnRyeSB3aXRoIHRoaXMga2V5IGFscmVhZHkgZXhpc3RzLAorICogcGF5bG9hZCB3aWxsIG5vdCBiZSB1cGRhdGVkIGFuZCAtMSBpcyByZXR1cm5lZC4gVGhpcyByZXR1cm4gdmFsdWUKKyAqIGNhbid0IGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBvdXQtb2YtbWVtb3J5IGVycm9ycywgc28gdGhpcyBmdW5jdGlvbgorICogc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlLgogICoKLSAqIFJldHVybnMgMCB0aGUgYWRkaXRpb24gc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KIGludAoteG1sSGFzaEFkZEVudHJ5KHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwgdm9pZCAqdXNlcmRhdGEpIHsKLSAgICByZXR1cm4oeG1sSGFzaEFkZEVudHJ5Myh0YWJsZSwgbmFtZSwgTlVMTCwgTlVMTCwgdXNlcmRhdGEpKTsKK3htbEhhc2hBZGRFbnRyeSh4bWxIYXNoVGFibGVQdHIgaGFzaCwgY29uc3QgeG1sQ2hhciAqa2V5LCB2b2lkICpwYXlsb2FkKSB7CisgICAgcmV0dXJuKHhtbEhhc2hVcGRhdGVJbnRlcm5hbChoYXNoLCBrZXksIE5VTEwsIE5VTEwsIHBheWxvYWQsIE5VTEwsIDApKTsKIH0KIAogLyoqCiAgKiB4bWxIYXNoQWRkRW50cnkyOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YQotICogQG5hbWUyOiBhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YQotICogQHVzZXJkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGtleTogZmlyc3Qgc3RyaW5nIGtleQorICogQGtleTI6IHNlY29uZCBzdHJpbmcga2V5CisgKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGF5bG9hZAogICoKLSAqIEFkZCB0aGUgQHVzZXJkYXRhIHRvIHRoZSBoYXNoIEB0YWJsZS4gVGhpcyBjYW4gbGF0ZXIgYmUgcmV0cmlldmVkCi0gKiBieSB1c2luZyB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlLiBEdXBsaWNhdGUgdHVwbGVzIGdlbmVyYXRlIGVycm9ycy4KKyAqIEFkZCBhIGhhc2ggdGFibGUgZW50cnkgd2l0aCB0d28gc3RyaW5ncyBhcyBrZXkuCiAgKgotICogUmV0dXJucyAwIHRoZSBhZGRpdGlvbiBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisgKiBTZWUgeG1sSGFzaEFkZEVudHJ5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLgogICovCiBpbnQKLXhtbEhhc2hBZGRFbnRyeTIoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLCBjb25zdCB4bWxDaGFyICpuYW1lLAotCSAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZTIsIHZvaWQgKnVzZXJkYXRhKSB7Ci0gICAgcmV0dXJuKHhtbEhhc2hBZGRFbnRyeTModGFibGUsIG5hbWUsIG5hbWUyLCBOVUxMLCB1c2VyZGF0YSkpOwotfQotCi0vKioKLSAqIHhtbEhhc2hVcGRhdGVFbnRyeToKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEB1c2VyZGF0YTogYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YQotICogQGY6IHRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSAoaWYgYW55KQotICoKLSAqIEFkZCB0aGUgQHVzZXJkYXRhIHRvIHRoZSBoYXNoIEB0YWJsZS4gVGhpcyBjYW4gbGF0ZXIgYmUgcmV0cmlldmVkCi0gKiBieSB1c2luZyB0aGUgQG5hbWUuIEV4aXN0aW5nIGVudHJ5IGZvciB0aGlzIEBuYW1lIHdpbGwgYmUgcmVtb3ZlZAotICogYW5kIGZyZWVkIHdpdGggQGYgaWYgZm91bmQuCi0gKgotICogUmV0dXJucyAwIHRoZSBhZGRpdGlvbiBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0gKi8KLWludAoteG1sSGFzaFVwZGF0ZUVudHJ5KHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhLCB4bWxIYXNoRGVhbGxvY2F0b3IgZikgewotICAgIHJldHVybih4bWxIYXNoVXBkYXRlRW50cnkzKHRhYmxlLCBuYW1lLCBOVUxMLCBOVUxMLCB1c2VyZGF0YSwgZikpOwotfQotCi0vKioKLSAqIHhtbEhhc2hVcGRhdGVFbnRyeTI6Ci0gKiBAdGFibGU6IHRoZSBoYXNoIHRhYmxlCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAbmFtZTI6IGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAdXNlcmRhdGE6IGEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEKLSAqIEBmOiB0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gKGlmIGFueSkKLSAqCi0gKiBBZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZAotICogYnkgdXNpbmcgdGhlIChAbmFtZSwgQG5hbWUyKSB0dXBsZS4gRXhpc3RpbmcgZW50cnkgZm9yIHRoaXMgdHVwbGUgd2lsbAotICogYmUgcmVtb3ZlZCBhbmQgZnJlZWQgd2l0aCBAZiBpZiBmb3VuZC4KLSAqCi0gKiBSZXR1cm5zIDAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSAqLwotaW50Ci14bWxIYXNoVXBkYXRlRW50cnkyKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUyLCB2b2lkICp1c2VyZGF0YSwKLQkJICAgeG1sSGFzaERlYWxsb2NhdG9yIGYpIHsKLSAgICByZXR1cm4oeG1sSGFzaFVwZGF0ZUVudHJ5Myh0YWJsZSwgbmFtZSwgbmFtZTIsIE5VTEwsIHVzZXJkYXRhLCBmKSk7Ci19Ci0KLS8qKgotICogeG1sSGFzaExvb2t1cDoKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqCi0gKiBGaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIEBuYW1lLgotICoKLSAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCi0gKi8KLXZvaWQgKgoteG1sSGFzaExvb2t1cCh4bWxIYXNoVGFibGVQdHIgdGFibGUsIGNvbnN0IHhtbENoYXIgKm5hbWUpIHsKLSAgICByZXR1cm4oeG1sSGFzaExvb2t1cDModGFibGUsIG5hbWUsIE5VTEwsIE5VTEwpKTsKLX0KLQotLyoqCi0gKiB4bWxIYXNoTG9va3VwMjoKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMjogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqCi0gKiBGaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIChAbmFtZSwgQG5hbWUyKSB0dXBsZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YQotICovCi12b2lkICoKLXhtbEhhc2hMb29rdXAyKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMikgewotICAgIHJldHVybih4bWxIYXNoTG9va3VwMyh0YWJsZSwgbmFtZSwgbmFtZTIsIE5VTEwpKTsKLX0KLQotLyoqCi0gKiB4bWxIYXNoUUxvb2t1cDoKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBwcmVmaXg6IHRoZSBwcmVmaXggb2YgdGhlIHVzZXJkYXRhCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKgotICogRmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBRTmFtZSBAcHJlZml4OkBuYW1lL0BuYW1lLgotICoKLSAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCi0gKi8KLXZvaWQgKgoteG1sSGFzaFFMb29rdXAoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLCBjb25zdCB4bWxDaGFyICpwcmVmaXgsCi0gICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lKSB7Ci0gICAgcmV0dXJuKHhtbEhhc2hRTG9va3VwMyh0YWJsZSwgcHJlZml4LCBuYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci19Ci0KLS8qKgotICogeG1sSGFzaFFMb29rdXAyOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQHByZWZpeDogdGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBwcmVmaXgyOiB0aGUgc2Vjb25kIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMjogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqCi0gKiBGaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIFFOYW1lcyB0dXBsZQotICoKLSAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCi0gKi8KLXZvaWQgKgoteG1sSGFzaFFMb29rdXAyKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqcHJlZml4LAotICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKnByZWZpeDIsCi0JICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMikgewotICAgIHJldHVybih4bWxIYXNoUUxvb2t1cDModGFibGUsIHByZWZpeCwgbmFtZSwgcHJlZml4MiwgbmFtZTIsIE5VTEwsIE5VTEwpKTsKK3htbEhhc2hBZGRFbnRyeTIoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqa2V5Miwgdm9pZCAqcGF5bG9hZCkgeworICAgIHJldHVybih4bWxIYXNoVXBkYXRlSW50ZXJuYWwoaGFzaCwga2V5LCBrZXkyLCBOVUxMLCBwYXlsb2FkLCBOVUxMLCAwKSk7CiB9CiAKIC8qKgogICogeG1sSGFzaEFkZEVudHJ5MzoKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMjogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMzogYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YQotICogQHVzZXJkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGtleTogZmlyc3Qgc3RyaW5nIGtleQorICogQGtleTI6IHNlY29uZCBzdHJpbmcga2V5CisgKiBAa2V5MzogdGhpcmQgc3RyaW5nIGtleQorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBheWxvYWQKICAqCi0gKiBBZGQgdGhlIEB1c2VyZGF0YSB0byB0aGUgaGFzaCBAdGFibGUuIFRoaXMgY2FuIGxhdGVyIGJlIHJldHJpZXZlZAotICogYnkgdXNpbmcgdGhlIHR1cGxlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpLiBEdXBsaWNhdGUgZW50cmllcyBnZW5lcmF0ZQotICogZXJyb3JzLgorICogQWRkIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHRocmVlIHN0cmluZ3MgYXMga2V5LgogICoKLSAqIFJldHVybnMgMCB0aGUgYWRkaXRpb24gc3VjY2VlZGVkIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLgorICogU2VlIHhtbEhhc2hBZGRFbnRyeS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4KICAqLwogaW50Ci14bWxIYXNoQWRkRW50cnkzKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMiwgY29uc3QgeG1sQ2hhciAqbmFtZTMsCi0JCSB2b2lkICp1c2VyZGF0YSkgewotICAgIHVuc2lnbmVkIGxvbmcga2V5LCBsZW4gPSAwOwotICAgIHhtbEhhc2hFbnRyeVB0ciBlbnRyeTsKLSAgICB4bWxIYXNoRW50cnlQdHIgaW5zZXJ0OworeG1sSGFzaEFkZEVudHJ5Myh4bWxIYXNoVGFibGVQdHIgaGFzaCwgY29uc3QgeG1sQ2hhciAqa2V5LAorICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyLCBjb25zdCB4bWxDaGFyICprZXkzLAorICAgICAgICAgICAgICAgICB2b2lkICpwYXlsb2FkKSB7CisgICAgcmV0dXJuKHhtbEhhc2hVcGRhdGVJbnRlcm5hbChoYXNoLCBrZXksIGtleTIsIGtleTMsIHBheWxvYWQsIE5VTEwsIDApKTsKK30KIAotICAgIGlmICgodGFibGUgPT0gTlVMTCkgfHwgKG5hbWUgPT0gTlVMTCkpCi0JcmV0dXJuKC0xKTsKKy8qKgorICogeG1sSGFzaFVwZGF0ZUVudHJ5OgorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBrZXk6IHN0cmluZyBrZXkKKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYXlsb2FkCisgKiBAZGVhbGxvYzogZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gb3IgTlVMTAorICoKKyAqIEFkZCBhIGhhc2ggdGFibGUgZW50cnkuIElmIGFuIGVudHJ5IHdpdGggdGhpcyBrZXkgYWxyZWFkeSBleGlzdHMsCisgKiB0aGUgb2xkIHBheWxvYWQgd2lsbCBiZSBmcmVlZCBhbmQgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWUuCisgKgorICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCisgKi8KK2ludAoreG1sSGFzaFVwZGF0ZUVudHJ5KHhtbEhhc2hUYWJsZVB0ciBoYXNoLCBjb25zdCB4bWxDaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgdm9pZCAqcGF5bG9hZCwgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpIHsKKyAgICByZXR1cm4oeG1sSGFzaFVwZGF0ZUludGVybmFsKGhhc2gsIGtleSwgTlVMTCwgTlVMTCwgcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWxsb2MsIDEpKTsKK30KIAotICAgIC8qCi0gICAgICogSWYgdXNpbmcgYSBkaWN0IGludGVybmFsaXplIGlmIG5lZWRlZAotICAgICAqLwotICAgIGlmICh0YWJsZS0+ZGljdCkgewotICAgICAgICBpZiAoIXhtbERpY3RPd25zKHRhYmxlLT5kaWN0LCBuYW1lKSkgewotCSAgICBuYW1lID0geG1sRGljdExvb2t1cCh0YWJsZS0+ZGljdCwgbmFtZSwgLTEpOwotCSAgICBpZiAobmFtZSA9PSBOVUxMKQotCSAgICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgICAgIGlmICgobmFtZTIgIT0gTlVMTCkgJiYgKCF4bWxEaWN0T3ducyh0YWJsZS0+ZGljdCwgbmFtZTIpKSkgewotCSAgICBuYW1lMiA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUyLCAtMSk7Ci0JICAgIGlmIChuYW1lMiA9PSBOVUxMKQotCSAgICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgICAgIGlmICgobmFtZTMgIT0gTlVMTCkgJiYgKCF4bWxEaWN0T3ducyh0YWJsZS0+ZGljdCwgbmFtZTMpKSkgewotCSAgICBuYW1lMyA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUzLCAtMSk7Ci0JICAgIGlmIChuYW1lMyA9PSBOVUxMKQotCSAgICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBDaGVjayBmb3IgZHVwbGljYXRlIGFuZCBpbnNlcnRpb24gbG9jYXRpb24uCi0gICAgICovCi0gICAga2V5ID0geG1sSGFzaENvbXB1dGVLZXkodGFibGUsIG5hbWUsIG5hbWUyLCBuYW1lMyk7Ci0gICAgaWYgKHRhYmxlLT50YWJsZVtrZXldLnZhbGlkID09IDApIHsKLQlpbnNlcnQgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0YWJsZS0+ZGljdCkgewotCSAgICBmb3IgKGluc2VydCA9ICYodGFibGUtPnRhYmxlW2tleV0pOyBpbnNlcnQtPm5leHQgIT0gTlVMTDsKLQkJIGluc2VydCA9IGluc2VydC0+bmV4dCkgewotCQlpZiAoKGluc2VydC0+bmFtZSA9PSBuYW1lKSAmJgotCQkgICAgKGluc2VydC0+bmFtZTIgPT0gbmFtZTIpICYmCi0JCSAgICAoaW5zZXJ0LT5uYW1lMyA9PSBuYW1lMykpCi0JCSAgICByZXR1cm4oLTEpOwotCQlsZW4rKzsKLQkgICAgfQotCSAgICBpZiAoKGluc2VydC0+bmFtZSA9PSBuYW1lKSAmJgotCQkoaW5zZXJ0LT5uYW1lMiA9PSBuYW1lMikgJiYKLQkJKGluc2VydC0+bmFtZTMgPT0gbmFtZTMpKQotCQlyZXR1cm4oLTEpOwotCX0gZWxzZSB7Ci0JICAgIGZvciAoaW5zZXJ0ID0gJih0YWJsZS0+dGFibGVba2V5XSk7IGluc2VydC0+bmV4dCAhPSBOVUxMOwotCQkgaW5zZXJ0ID0gaW5zZXJ0LT5uZXh0KSB7Ci0JCWlmICgoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lLCBuYW1lKSkgJiYKLQkJICAgICh4bWxTdHJFcXVhbChpbnNlcnQtPm5hbWUyLCBuYW1lMikpICYmCi0JCSAgICAoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lMywgbmFtZTMpKSkKLQkJICAgIHJldHVybigtMSk7Ci0JCWxlbisrOwotCSAgICB9Ci0JICAgIGlmICgoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lLCBuYW1lKSkgJiYKLQkJKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTIsIG5hbWUyKSkgJiYKLQkJKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTMsIG5hbWUzKSkpCi0JCXJldHVybigtMSk7Ci0JfQotICAgIH0KLQotICAgIGlmIChpbnNlcnQgPT0gTlVMTCkgewotCWVudHJ5ID0gJih0YWJsZS0+dGFibGVba2V5XSk7Ci0gICAgfSBlbHNlIHsKLQllbnRyeSA9IHhtbE1hbGxvYyhzaXplb2YoeG1sSGFzaEVudHJ5KSk7Ci0JaWYgKGVudHJ5ID09IE5VTEwpCi0JICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmICh0YWJsZS0+ZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIGVudHJ5LT5uYW1lID0gKHhtbENoYXIgKikgbmFtZTsKLSAgICAgICAgZW50cnktPm5hbWUyID0gKHhtbENoYXIgKikgbmFtZTI7Ci0gICAgICAgIGVudHJ5LT5uYW1lMyA9ICh4bWxDaGFyICopIG5hbWUzOwotICAgIH0gZWxzZSB7Ci0JZW50cnktPm5hbWUgPSB4bWxTdHJkdXAobmFtZSk7Ci0JZW50cnktPm5hbWUyID0geG1sU3RyZHVwKG5hbWUyKTsKLQllbnRyeS0+bmFtZTMgPSB4bWxTdHJkdXAobmFtZTMpOwotICAgIH0KLSAgICBlbnRyeS0+cGF5bG9hZCA9IHVzZXJkYXRhOwotICAgIGVudHJ5LT5uZXh0ID0gTlVMTDsKLSAgICBlbnRyeS0+dmFsaWQgPSAxOwotCi0KLSAgICBpZiAoaW5zZXJ0ICE9IE5VTEwpCi0JaW5zZXJ0LT5uZXh0ID0gZW50cnk7Ci0KLSAgICB0YWJsZS0+bmJFbGVtcysrOwotCi0gICAgaWYgKGxlbiA+IE1BWF9IQVNIX0xFTikKLQl4bWxIYXNoR3Jvdyh0YWJsZSwgTUFYX0hBU0hfTEVOICogdGFibGUtPnNpemUpOwotCi0gICAgcmV0dXJuKDApOworLyoqCisgKiB4bWxIYXNoVXBkYXRlRW50cnkyOgorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBrZXk6IGZpcnN0IHN0cmluZyBrZXkKKyAqIEBrZXkyOiBzZWNvbmQgc3RyaW5nIGtleQorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBheWxvYWQKKyAqIEBkZWFsbG9jOiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSBvciBOVUxMCisgKgorICogQWRkIGEgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHR3byBzdHJpbmdzIGFzIGtleS4KKyAqCisgKiBTZWUgeG1sSGFzaFVwZGF0ZUVudHJ5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLgorICovCitpbnQKK3htbEhhc2hVcGRhdGVFbnRyeTIoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyLCB2b2lkICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgIHhtbEhhc2hEZWFsbG9jYXRvciBkZWFsbG9jKSB7CisgICAgcmV0dXJuKHhtbEhhc2hVcGRhdGVJbnRlcm5hbChoYXNoLCBrZXksIGtleTIsIE5VTEwsIHBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFsbG9jLCAxKSk7CiB9CiAKIC8qKgogICogeG1sSGFzaFVwZGF0ZUVudHJ5MzoKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMjogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMzogYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YQotICogQHVzZXJkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCi0gKiBAZjogdGhlIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZXBsYWNlZCBpdGVtIChpZiBhbnkpCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGtleTogZmlyc3Qgc3RyaW5nIGtleQorICogQGtleTI6IHNlY29uZCBzdHJpbmcga2V5CisgKiBAa2V5MzogdGhpcmQgc3RyaW5nIGtleQorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBheWxvYWQKKyAqIEBkZWFsbG9jOiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSBvciBOVUxMCiAgKgotICogQWRkIHRoZSBAdXNlcmRhdGEgdG8gdGhlIGhhc2ggQHRhYmxlLiBUaGlzIGNhbiBsYXRlciBiZSByZXRyaWV2ZWQKLSAqIGJ5IHVzaW5nIHRoZSB0dXBsZSAoQG5hbWUsIEBuYW1lMiwgQG5hbWUzKS4gRXhpc3RpbmcgZW50cnkgZm9yIHRoaXMgdHVwbGUKLSAqIHdpbGwgYmUgcmVtb3ZlZCBhbmQgZnJlZWQgd2l0aCBAZiBpZiBmb3VuZC4KKyAqIEFkZCBhIGhhc2ggdGFibGUgZW50cnkgd2l0aCB0aHJlZSBzdHJpbmdzIGFzIGtleS4KICAqCi0gKiBSZXR1cm5zIDAgdGhlIGFkZGl0aW9uIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4KKyAqIFNlZSB4bWxIYXNoVXBkYXRlRW50cnkuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KIGludAoteG1sSGFzaFVwZGF0ZUVudHJ5Myh4bWxIYXNoVGFibGVQdHIgdGFibGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0JICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMiwgY29uc3QgeG1sQ2hhciAqbmFtZTMsCi0JCSAgIHZvaWQgKnVzZXJkYXRhLCB4bWxIYXNoRGVhbGxvY2F0b3IgZikgewotICAgIHVuc2lnbmVkIGxvbmcga2V5OwotICAgIHhtbEhhc2hFbnRyeVB0ciBlbnRyeTsKLSAgICB4bWxIYXNoRW50cnlQdHIgaW5zZXJ0OworeG1sSGFzaFVwZGF0ZUVudHJ5Myh4bWxIYXNoVGFibGVQdHIgaGFzaCwgY29uc3QgeG1sQ2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmtleTIsIGNvbnN0IHhtbENoYXIgKmtleTMsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqcGF5bG9hZCwgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpIHsKKyAgICByZXR1cm4oeG1sSGFzaFVwZGF0ZUludGVybmFsKGhhc2gsIGtleSwga2V5Miwga2V5MywgcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWxsb2MsIDEpKTsKK30KIAotICAgIGlmICgodGFibGUgPT0gTlVMTCkgfHwgbmFtZSA9PSBOVUxMKQotCXJldHVybigtMSk7CisvKioKKyAqIHhtbEhhc2hMb29rdXA6CisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGtleTogc3RyaW5nIGtleQorICoKKyAqIEZpbmQgdGhlIGVudHJ5IHNwZWNpZmllZCBieSBAa2V5LgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIG9yIE5VTEwgaWYgbm8gZW50cnkgd2FzIGZvdW5kLgorICovCit2b2lkICoKK3htbEhhc2hMb29rdXAoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKmtleSkgeworICAgIHJldHVybih4bWxIYXNoTG9va3VwMyhoYXNoLCBrZXksIE5VTEwsIE5VTEwpKTsKK30KIAotICAgIC8qCi0gICAgICogSWYgdXNpbmcgYSBkaWN0IGludGVybmFsaXplIGlmIG5lZWRlZAotICAgICAqLwotICAgIGlmICh0YWJsZS0+ZGljdCkgewotICAgICAgICBpZiAoIXhtbERpY3RPd25zKHRhYmxlLT5kaWN0LCBuYW1lKSkgewotCSAgICBuYW1lID0geG1sRGljdExvb2t1cCh0YWJsZS0+ZGljdCwgbmFtZSwgLTEpOwotCSAgICBpZiAobmFtZSA9PSBOVUxMKQotCSAgICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgICAgIGlmICgobmFtZTIgIT0gTlVMTCkgJiYgKCF4bWxEaWN0T3ducyh0YWJsZS0+ZGljdCwgbmFtZTIpKSkgewotCSAgICBuYW1lMiA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUyLCAtMSk7Ci0JICAgIGlmIChuYW1lMiA9PSBOVUxMKQotCSAgICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgICAgIGlmICgobmFtZTMgIT0gTlVMTCkgJiYgKCF4bWxEaWN0T3ducyh0YWJsZS0+ZGljdCwgbmFtZTMpKSkgewotCSAgICBuYW1lMyA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUzLCAtMSk7Ci0JICAgIGlmIChuYW1lMyA9PSBOVUxMKQotCSAgICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQorLyoqCisgKiB4bWxIYXNoTG9va3VwMjoKKyAqIEBoYXNoOiBoYXNoIHRhYmxlCisgKiBAa2V5OiBmaXJzdCBzdHJpbmcga2V5CisgKiBAa2V5Mjogc2Vjb25kIHN0cmluZyBrZXkKKyAqCisgKiBGaW5kIHRoZSBwYXlsb2FkIHNwZWNpZmllZCBieSB0aGUgKEBrZXksIEBrZXkyKSB0dXBsZS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4KKyAqLwordm9pZCAqCit4bWxIYXNoTG9va3VwMih4bWxIYXNoVGFibGVQdHIgaGFzaCwgY29uc3QgeG1sQ2hhciAqa2V5LAorICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyKSB7CisgICAgcmV0dXJuKHhtbEhhc2hMb29rdXAzKGhhc2gsIGtleSwga2V5MiwgTlVMTCkpOworfQogCi0gICAgLyoKLSAgICAgKiBDaGVjayBmb3IgZHVwbGljYXRlIGFuZCBpbnNlcnRpb24gbG9jYXRpb24uCi0gICAgICovCi0gICAga2V5ID0geG1sSGFzaENvbXB1dGVLZXkodGFibGUsIG5hbWUsIG5hbWUyLCBuYW1lMyk7Ci0gICAgaWYgKHRhYmxlLT50YWJsZVtrZXldLnZhbGlkID09IDApIHsKLQlpbnNlcnQgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0YWJsZSAtPmRpY3QpIHsKLQkgICAgZm9yIChpbnNlcnQgPSAmKHRhYmxlLT50YWJsZVtrZXldKTsgaW5zZXJ0LT5uZXh0ICE9IE5VTEw7Ci0JCSBpbnNlcnQgPSBpbnNlcnQtPm5leHQpIHsKLQkJaWYgKChpbnNlcnQtPm5hbWUgPT0gbmFtZSkgJiYKLQkJICAgIChpbnNlcnQtPm5hbWUyID09IG5hbWUyKSAmJgotCQkgICAgKGluc2VydC0+bmFtZTMgPT0gbmFtZTMpKSB7Ci0JCSAgICBpZiAoZikKLQkJCWYoaW5zZXJ0LT5wYXlsb2FkLCBpbnNlcnQtPm5hbWUpOwotCQkgICAgaW5zZXJ0LT5wYXlsb2FkID0gdXNlcmRhdGE7Ci0JCSAgICByZXR1cm4oMCk7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoKGluc2VydC0+bmFtZSA9PSBuYW1lKSAmJgotCQkoaW5zZXJ0LT5uYW1lMiA9PSBuYW1lMikgJiYKLQkJKGluc2VydC0+bmFtZTMgPT0gbmFtZTMpKSB7Ci0JCWlmIChmKQotCQkgICAgZihpbnNlcnQtPnBheWxvYWQsIGluc2VydC0+bmFtZSk7Ci0JCWluc2VydC0+cGF5bG9hZCA9IHVzZXJkYXRhOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICBmb3IgKGluc2VydCA9ICYodGFibGUtPnRhYmxlW2tleV0pOyBpbnNlcnQtPm5leHQgIT0gTlVMTDsKLQkJIGluc2VydCA9IGluc2VydC0+bmV4dCkgewotCQlpZiAoKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZSwgbmFtZSkpICYmCi0JCSAgICAoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lMiwgbmFtZTIpKSAmJgotCQkgICAgKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTMsIG5hbWUzKSkpIHsKLQkJICAgIGlmIChmKQotCQkJZihpbnNlcnQtPnBheWxvYWQsIGluc2VydC0+bmFtZSk7Ci0JCSAgICBpbnNlcnQtPnBheWxvYWQgPSB1c2VyZGF0YTsKLQkJICAgIHJldHVybigwKTsKLQkJfQotCSAgICB9Ci0JICAgIGlmICgoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lLCBuYW1lKSkgJiYKLQkJKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTIsIG5hbWUyKSkgJiYKLQkJKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTMsIG5hbWUzKSkpIHsKLQkJaWYgKGYpCi0JCSAgICBmKGluc2VydC0+cGF5bG9hZCwgaW5zZXJ0LT5uYW1lKTsKLQkJaW5zZXJ0LT5wYXlsb2FkID0gdXNlcmRhdGE7Ci0JCXJldHVybigwKTsKLQkgICAgfQotCX0KLSAgICB9CisvKioKKyAqIHhtbEhhc2hRTG9va3VwOgorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBwcmVmaXg6IHByZWZpeCBvZiB0aGUgc3RyaW5nIGtleQorICogQG5hbWU6IGxvY2FsIG5hbWUgb2YgdGhlIHN0cmluZyBrZXkKKyAqCisgKiBGaW5kIHRoZSBwYXlsb2FkIHNwZWNpZmllZCBieSB0aGUgUU5hbWUgQHByZWZpeDpAbmFtZSBvciBAbmFtZS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4KKyAqLwordm9pZCAqCit4bWxIYXNoUUxvb2t1cCh4bWxIYXNoVGFibGVQdHIgaGFzaCwgY29uc3QgeG1sQ2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSkgeworICAgIHJldHVybih4bWxIYXNoUUxvb2t1cDMoaGFzaCwgcHJlZml4LCBuYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Cit9CiAKLSAgICBpZiAoaW5zZXJ0ID09IE5VTEwpIHsKLQllbnRyeSA9ICAmKHRhYmxlLT50YWJsZVtrZXldKTsKLSAgICB9IGVsc2UgewotCWVudHJ5ID0geG1sTWFsbG9jKHNpemVvZih4bWxIYXNoRW50cnkpKTsKLQlpZiAoZW50cnkgPT0gTlVMTCkKLQkgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgaWYgKHRhYmxlLT5kaWN0ICE9IE5VTEwpIHsKLSAgICAgICAgZW50cnktPm5hbWUgPSAoeG1sQ2hhciAqKSBuYW1lOwotICAgICAgICBlbnRyeS0+bmFtZTIgPSAoeG1sQ2hhciAqKSBuYW1lMjsKLSAgICAgICAgZW50cnktPm5hbWUzID0gKHhtbENoYXIgKikgbmFtZTM7Ci0gICAgfSBlbHNlIHsKLQllbnRyeS0+bmFtZSA9IHhtbFN0cmR1cChuYW1lKTsKLQllbnRyeS0+bmFtZTIgPSB4bWxTdHJkdXAobmFtZTIpOwotCWVudHJ5LT5uYW1lMyA9IHhtbFN0cmR1cChuYW1lMyk7Ci0gICAgfQotICAgIGVudHJ5LT5wYXlsb2FkID0gdXNlcmRhdGE7Ci0gICAgZW50cnktPm5leHQgPSBOVUxMOwotICAgIGVudHJ5LT52YWxpZCA9IDE7Ci0gICAgdGFibGUtPm5iRWxlbXMrKzsKLQotCi0gICAgaWYgKGluc2VydCAhPSBOVUxMKSB7Ci0JaW5zZXJ0LT5uZXh0ID0gZW50cnk7Ci0gICAgfQotICAgIHJldHVybigwKTsKKy8qKgorICogeG1sSGFzaFFMb29rdXAyOgorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBwcmVmaXg6IGZpcnN0IHByZWZpeAorICogQG5hbWU6IGZpcnN0IGxvY2FsIG5hbWUKKyAqIEBwcmVmaXgyOiBzZWNvbmQgcHJlZml4CisgKiBAbmFtZTI6IHNlY29uZCBsb2NhbCBuYW1lCisgKgorICogRmluZCB0aGUgcGF5bG9hZCBzcGVjaWZpZWQgYnkgdGhlIFFOYW1lcyB0dXBsZS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4KKyAqLwordm9pZCAqCit4bWxIYXNoUUxvb2t1cDIoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lLCBjb25zdCB4bWxDaGFyICpwcmVmaXgyLAorICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUyKSB7CisgICAgcmV0dXJuKHhtbEhhc2hRTG9va3VwMyhoYXNoLCBwcmVmaXgsIG5hbWUsIHByZWZpeDIsIG5hbWUyLCBOVUxMLCBOVUxMKSk7CiB9CiAKIC8qKgogICogeG1sSGFzaExvb2t1cDM6Ci0gKiBAdGFibGU6IHRoZSBoYXNoIHRhYmxlCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAbmFtZTI6IGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAbmFtZTM6IGEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKKyAqIEBoYXNoOiBoYXNoIHRhYmxlCisgKiBAa2V5OiBmaXJzdCBzdHJpbmcga2V5CisgKiBAa2V5Mjogc2Vjb25kIHN0cmluZyBrZXkKKyAqIEBrZXkzOiB0aGlyZCBzdHJpbmcga2V5CiAgKgotICogRmluZCB0aGUgdXNlcmRhdGEgc3BlY2lmaWVkIGJ5IHRoZSAoQG5hbWUsIEBuYW1lMiwgQG5hbWUzKSB0dXBsZS4KKyAqIEZpbmQgdGhlIHBheWxvYWQgc3BlY2lmaWVkIGJ5IHRoZSAoQGtleSwgQGtleTIsIEBrZXkzKSB0dXBsZS4KICAqCi0gKiBSZXR1cm5zIHRoZSBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBvciBOVUxMIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4KICAqLwogdm9pZCAqCi14bWxIYXNoTG9va3VwMyh4bWxIYXNoVGFibGVQdHIgdGFibGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0JICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUyLCBjb25zdCB4bWxDaGFyICpuYW1lMykgewotICAgIHVuc2lnbmVkIGxvbmcga2V5OwotICAgIHhtbEhhc2hFbnRyeVB0ciBlbnRyeTsKK3htbEhhc2hMb29rdXAzKHhtbEhhc2hUYWJsZVB0ciBoYXNoLCBjb25zdCB4bWxDaGFyICprZXksCisgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyLCBjb25zdCB4bWxDaGFyICprZXkzKSB7CisgICAgY29uc3QgeG1sSGFzaEVudHJ5ICplbnRyeTsKKyAgICB1bnNpZ25lZCBoYXNoVmFsdWU7CisgICAgaW50IGZvdW5kOwogCi0gICAgaWYgKHRhYmxlID09IE5VTEwpCi0JcmV0dXJuKE5VTEwpOwotICAgIGlmIChuYW1lID09IE5VTEwpCi0JcmV0dXJuKE5VTEwpOwotICAgIGtleSA9IHhtbEhhc2hDb21wdXRlS2V5KHRhYmxlLCBuYW1lLCBuYW1lMiwgbmFtZTMpOwotICAgIGlmICh0YWJsZS0+dGFibGVba2V5XS52YWxpZCA9PSAwKQotCXJldHVybihOVUxMKTsKLSAgICBpZiAodGFibGUtPmRpY3QpIHsKLQlmb3IgKGVudHJ5ID0gJih0YWJsZS0+dGFibGVba2V5XSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKLQkgICAgaWYgKChlbnRyeS0+bmFtZSA9PSBuYW1lKSAmJgotCQkoZW50cnktPm5hbWUyID09IG5hbWUyKSAmJgotCQkoZW50cnktPm5hbWUzID09IG5hbWUzKSkKLQkJcmV0dXJuKGVudHJ5LT5wYXlsb2FkKTsKLQl9Ci0gICAgfQotICAgIGZvciAoZW50cnkgPSAmKHRhYmxlLT50YWJsZVtrZXldKTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgewotCWlmICgoeG1sU3RyRXF1YWwoZW50cnktPm5hbWUsIG5hbWUpKSAmJgotCSAgICAoeG1sU3RyRXF1YWwoZW50cnktPm5hbWUyLCBuYW1lMikpICYmCi0JICAgICh4bWxTdHJFcXVhbChlbnRyeS0+bmFtZTMsIG5hbWUzKSkpCi0JICAgIHJldHVybihlbnRyeS0+cGF5bG9hZCk7Ci0gICAgfQorICAgIGlmICgoaGFzaCA9PSBOVUxMKSB8fCAoaGFzaC0+c2l6ZSA9PSAwKSB8fCAoa2V5ID09IE5VTEwpKQorICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgaGFzaFZhbHVlID0geG1sSGFzaFZhbHVlKGhhc2gtPnJhbmRvbVNlZWQsIGtleSwga2V5Miwga2V5MywgTlVMTCk7CisgICAgZW50cnkgPSB4bWxIYXNoRmluZEVudHJ5KGhhc2gsIGtleSwga2V5Miwga2V5MywgaGFzaFZhbHVlLCAmZm91bmQpOworICAgIGlmIChmb3VuZCkKKyAgICAgICAgcmV0dXJuKGVudHJ5LT5wYXlsb2FkKTsKICAgICByZXR1cm4oTlVMTCk7CiB9CiAKIC8qKgogICogeG1sSGFzaFFMb29rdXAzOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQHByZWZpeDogdGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBwcmVmaXgyOiB0aGUgc2Vjb25kIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMjogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBwcmVmaXgzOiB0aGUgdGhpcmQgcHJlZml4IG9mIHRoZSB1c2VyZGF0YQotICogQG5hbWUzOiBhIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQHByZWZpeDogZmlyc3QgcHJlZml4CisgKiBAbmFtZTogZmlyc3QgbG9jYWwgbmFtZQorICogQHByZWZpeDI6IHNlY29uZCBwcmVmaXgKKyAqIEBuYW1lMjogc2Vjb25kIGxvY2FsIG5hbWUKKyAqIEBwcmVmaXgzOiB0aGlyZCBwcmVmaXgKKyAqIEBuYW1lMzogdGhpcmQgbG9jYWwgbmFtZQogICoKLSAqIEZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgKEBuYW1lLCBAbmFtZTIsIEBuYW1lMykgdHVwbGUuCisgKiBGaW5kIHRoZSBwYXlsb2FkIHNwZWNpZmllZCBieSB0aGUgUU5hbWVzIHR1cGxlLgogICoKLSAqIFJldHVybnMgdGhlIGEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIG9yIE5VTEwgaWYgbm8gZW50cnkgd2FzIGZvdW5kLgogICovCitBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUgogdm9pZCAqCi14bWxIYXNoUUxvb2t1cDMoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAoreG1sSGFzaFFMb29rdXAzKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAogICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeCwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkJY29uc3QgeG1sQ2hhciAqcHJlZml4MiwgY29uc3QgeG1sQ2hhciAqbmFtZTIsCi0JCWNvbnN0IHhtbENoYXIgKnByZWZpeDMsIGNvbnN0IHhtbENoYXIgKm5hbWUzKSB7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXk7Ci0gICAgeG1sSGFzaEVudHJ5UHRyIGVudHJ5OworICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeDIsIGNvbnN0IHhtbENoYXIgKm5hbWUyLAorICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeDMsIGNvbnN0IHhtbENoYXIgKm5hbWUzKSB7CisgICAgY29uc3QgeG1sSGFzaEVudHJ5ICplbnRyeTsKKyAgICB1bnNpZ25lZCBoYXNoVmFsdWUsIG1hc2ssIHBvcywgZGlzcGw7CiAKLSAgICBpZiAodGFibGUgPT0gTlVMTCkKLQlyZXR1cm4oTlVMTCk7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkKLQlyZXR1cm4oTlVMTCk7Ci0gICAga2V5ID0geG1sSGFzaENvbXB1dGVRS2V5KHRhYmxlLCBwcmVmaXgsIG5hbWUsIHByZWZpeDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUyLCBwcmVmaXgzLCBuYW1lMyk7Ci0gICAgaWYgKHRhYmxlLT50YWJsZVtrZXldLnZhbGlkID09IDApCi0JcmV0dXJuKE5VTEwpOwotICAgIGZvciAoZW50cnkgPSAmKHRhYmxlLT50YWJsZVtrZXldKTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgewotCWlmICgoeG1sU3RyUUVxdWFsKHByZWZpeCwgbmFtZSwgZW50cnktPm5hbWUpKSAmJgotCSAgICAoeG1sU3RyUUVxdWFsKHByZWZpeDIsIG5hbWUyLCBlbnRyeS0+bmFtZTIpKSAmJgotCSAgICAoeG1sU3RyUUVxdWFsKHByZWZpeDMsIG5hbWUzLCBlbnRyeS0+bmFtZTMpKSkKLQkgICAgcmV0dXJuKGVudHJ5LT5wYXlsb2FkKTsKKyAgICBpZiAoKGhhc2ggPT0gTlVMTCkgfHwgKGhhc2gtPnNpemUgPT0gMCkgfHwgKG5hbWUgPT0gTlVMTCkpCisgICAgICAgIHJldHVybihOVUxMKTsKKworICAgIGhhc2hWYWx1ZSA9IHhtbEhhc2hRTmFtZVZhbHVlKGhhc2gtPnJhbmRvbVNlZWQsIHByZWZpeCwgbmFtZSwgcHJlZml4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lMiwgcHJlZml4MywgbmFtZTMpOworICAgIG1hc2sgPSBoYXNoLT5zaXplIC0gMTsKKyAgICBwb3MgPSBoYXNoVmFsdWUgJiBtYXNrOworICAgIGVudHJ5ID0gJmhhc2gtPnRhYmxlW3Bvc107CisKKyAgICBpZiAoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSB7CisgICAgICAgIGRpc3BsID0gMDsKKyAgICAgICAgaGFzaFZhbHVlIHw9IE1BWF9IQVNIX1NJWkU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKChoYXNoVmFsdWUgPT0gZW50cnktPmhhc2hWYWx1ZSkgJiYKKyAgICAgICAgICAgICAgICAoeG1sU3RyUUVxdWFsKHByZWZpeCwgbmFtZSwgZW50cnktPmtleSkpICYmCisgICAgICAgICAgICAgICAgKHhtbFN0clFFcXVhbChwcmVmaXgyLCBuYW1lMiwgZW50cnktPmtleTIpKSAmJgorICAgICAgICAgICAgICAgICh4bWxTdHJRRXF1YWwocHJlZml4MywgbmFtZTMsIGVudHJ5LT5rZXkzKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuKGVudHJ5LT5wYXlsb2FkKTsKKworICAgICAgICAgICAgZGlzcGwrKzsKKyAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgZW50cnkrKzsKKyAgICAgICAgICAgIGlmICgocG9zICYgbWFzaykgPT0gMCkKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGhhc2gtPnRhYmxlOworICAgICAgICB9IHdoaWxlICgoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSAmJgorICAgICAgICAgICAgICAgICAoKChwb3MgLSBlbnRyeS0+aGFzaFZhbHVlKSAmIG1hc2spID49IGRpc3BsKSk7CiAgICAgfQorCiAgICAgcmV0dXJuKE5VTEwpOwogfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgeG1sSGFzaFNjYW5uZXIgaGFzaHNjYW5uZXI7CisgICAgeG1sSGFzaFNjYW5uZXIgc2NhbjsKICAgICB2b2lkICpkYXRhOwogfSBzdHViRGF0YTsKIAogc3RhdGljIHZvaWQKLXN0dWJIYXNoU2Nhbm5lckZ1bGwgKHZvaWQgKnBheWxvYWQsIHZvaWQgKmRhdGEsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMiBBVFRSSUJVVEVfVU5VU0VELAotCQkgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUzIEFUVFJJQlVURV9VTlVTRUQpIHsKLSAgICBzdHViRGF0YSAqc3R1YmRhdGEgPSAoc3R1YkRhdGEgKikgZGF0YTsKLSAgICBzdHViZGF0YS0+aGFzaHNjYW5uZXIgKHBheWxvYWQsIHN0dWJkYXRhLT5kYXRhLCAoeG1sQ2hhciAqKSBuYW1lKTsKK3N0dWJIYXNoU2Nhbm5lckZ1bGwodm9pZCAqcGF5bG9hZCwgdm9pZCAqZGF0YSwgY29uc3QgeG1sQ2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmtleTMgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHN0dWJEYXRhICpzZGF0YSA9IChzdHViRGF0YSAqKSBkYXRhOworICAgIHNkYXRhLT5zY2FuKHBheWxvYWQsIHNkYXRhLT5kYXRhLCBrZXkpOwogfQogCiAvKioKICAqIHhtbEhhc2hTY2FuOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQGY6ICB0aGUgc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2gKLSAqIEBkYXRhOiAgZXh0cmEgZGF0YSBwYXNzZWQgdG8gZgorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBzY2FuOiBzY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaAorICogQGRhdGE6IGV4dHJhIGRhdGEgcGFzc2VkIHRvIEBzY2FuCiAgKgotICogU2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGxpZWQgQGYgdG8gZWFjaCB2YWx1ZS4KKyAqIFNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBseSBAc2NhbiB0byBlYWNoIHZhbHVlLgogICovCiB2b2lkCi14bWxIYXNoU2Nhbih4bWxIYXNoVGFibGVQdHIgdGFibGUsIHhtbEhhc2hTY2FubmVyIGYsIHZvaWQgKmRhdGEpIHsKLSAgICBzdHViRGF0YSBzdHViZGF0YTsKLSAgICBzdHViZGF0YS5kYXRhID0gZGF0YTsKLSAgICBzdHViZGF0YS5oYXNoc2Nhbm5lciA9IGY7Ci0gICAgeG1sSGFzaFNjYW5GdWxsICh0YWJsZSwgc3R1Ykhhc2hTY2FubmVyRnVsbCwgJnN0dWJkYXRhKTsKK3htbEhhc2hTY2FuKHhtbEhhc2hUYWJsZVB0ciBoYXNoLCB4bWxIYXNoU2Nhbm5lciBzY2FuLCB2b2lkICpkYXRhKSB7CisgICAgc3R1YkRhdGEgc2RhdGE7CisgICAgc2RhdGEuZGF0YSA9IGRhdGE7CisgICAgc2RhdGEuc2NhbiA9IHNjYW47CisgICAgeG1sSGFzaFNjYW5GdWxsKGhhc2gsIHN0dWJIYXNoU2Nhbm5lckZ1bGwsICZzZGF0YSk7CiB9CiAKIC8qKgogICogeG1sSGFzaFNjYW5GdWxsOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQGY6ICB0aGUgc2Nhbm5lciBmdW5jdGlvbiBmb3IgaXRlbXMgaW4gdGhlIGhhc2gKLSAqIEBkYXRhOiAgZXh0cmEgZGF0YSBwYXNzZWQgdG8gZgorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBzY2FuOiBzY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaAorICogQGRhdGE6IGV4dHJhIGRhdGEgcGFzc2VkIHRvIEBzY2FuCiAgKgotICogU2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGxpZWQgQGYgdG8gZWFjaCB2YWx1ZS4KKyAqIFNjYW4gdGhlIGhhc2ggQHRhYmxlIGFuZCBhcHBseSBAc2NhbiB0byBlYWNoIHZhbHVlLgogICovCiB2b2lkCi14bWxIYXNoU2NhbkZ1bGwoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLCB4bWxIYXNoU2Nhbm5lckZ1bGwgZiwgdm9pZCAqZGF0YSkgewotICAgIGludCBpLCBuYjsKLSAgICB4bWxIYXNoRW50cnlQdHIgaXRlcjsKLSAgICB4bWxIYXNoRW50cnlQdHIgbmV4dDsKK3htbEhhc2hTY2FuRnVsbCh4bWxIYXNoVGFibGVQdHIgaGFzaCwgeG1sSGFzaFNjYW5uZXJGdWxsIHNjYW4sIHZvaWQgKmRhdGEpIHsKKyAgICBjb25zdCB4bWxIYXNoRW50cnkgKmVudHJ5LCAqZW5kOworICAgIHhtbEhhc2hFbnRyeSBvbGQ7CisgICAgdW5zaWduZWQgaTsKIAotICAgIGlmICh0YWJsZSA9PSBOVUxMKQotCXJldHVybjsKLSAgICBpZiAoZiA9PSBOVUxMKQotCXJldHVybjsKKyAgICBpZiAoKGhhc2ggPT0gTlVMTCkgfHwgKGhhc2gtPnNpemUgPT0gMCkgfHwgKHNjYW4gPT0gTlVMTCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0YWJsZS0+dGFibGUpIHsKLQlmb3IoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKSB7Ci0JICAgIGlmICh0YWJsZS0+dGFibGVbaV0udmFsaWQgPT0gMCkKLQkJY29udGludWU7Ci0JICAgIGl0ZXIgPSAmKHRhYmxlLT50YWJsZVtpXSk7Ci0JICAgIHdoaWxlIChpdGVyKSB7Ci0JCW5leHQgPSBpdGVyLT5uZXh0OwotICAgICAgICAgICAgICAgIG5iID0gdGFibGUtPm5iRWxlbXM7Ci0JCWlmICgoZiAhPSBOVUxMKSAmJiAoaXRlci0+cGF5bG9hZCAhPSBOVUxMKSkKLQkJICAgIGYoaXRlci0+cGF5bG9hZCwgZGF0YSwgaXRlci0+bmFtZSwKLQkJICAgICAgaXRlci0+bmFtZTIsIGl0ZXItPm5hbWUzKTsKLSAgICAgICAgICAgICAgICBpZiAobmIgIT0gdGFibGUtPm5iRWxlbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogdGFibGUgd2FzIG1vZGlmaWVkIGJ5IHRoZSBjYWxsYmFjaywgYmUgY2FyZWZ1bCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSAmKHRhYmxlLT50YWJsZVtpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZS0+dGFibGVbaV0udmFsaWQgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZS0+dGFibGVbaV0ubmV4dCAhPSBuZXh0KQotCQkJICAgIGl0ZXIgPSAmKHRhYmxlLT50YWJsZVtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotCQkgICAgICAgIGl0ZXIgPSBuZXh0OwotICAgICAgICAgICAgICAgIH0gZWxzZQotCQkgICAgaXRlciA9IG5leHQ7Ci0JICAgIH0KLQl9CisgICAgLyoKKyAgICAgKiBXZSBtdXN0IGhhbmRsZSB0aGUgY2FzZSB0aGF0IGEgc2Nhbm5lZCBlbnRyeSBpcyByZW1vdmVkIHdoZW4gZXhlY3V0aW5nCisgICAgICogdGhlIGNhbGxiYWNrICh4bWxDbGVhblNwZWNpYWxBdHRyIGFuZCBwb3NzaWJseSBvdGhlciBwbGFjZXMpLgorICAgICAqCisgICAgICogRmluZCB0aGUgc3RhcnQgb2YgYSBwcm9iZSBzZXF1ZW5jZSB0byBhdm9pZCBzY2FubmluZyBlbnRyaWVzIHR3aWNlIGlmCisgICAgICogYSBkZWxldGlvbiBoYXBwZW5zLgorICAgICAqLworICAgIGVudHJ5ID0gaGFzaC0+dGFibGU7CisgICAgZW5kID0gJmhhc2gtPnRhYmxlW2hhc2gtPnNpemVdOworICAgIHdoaWxlIChlbnRyeS0+aGFzaFZhbHVlICE9IDApIHsKKyAgICAgICAgaWYgKCsrZW50cnkgPj0gZW5kKQorICAgICAgICAgICAgZW50cnkgPSBoYXNoLT50YWJsZTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICgoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSAmJiAoZW50cnktPnBheWxvYWQgIT0gTlVMTCkpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBNYWtlIHN1cmUgdG8gcmVzY2FuIGFmdGVyIGEgcG9zc2libGUgZGVsZXRpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBvbGQgPSAqZW50cnk7CisgICAgICAgICAgICAgICAgc2NhbihlbnRyeS0+cGF5bG9hZCwgZGF0YSwgZW50cnktPmtleSwgZW50cnktPmtleTIsIGVudHJ5LT5rZXkzKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChlbnRyeS0+aGFzaFZhbHVlICE9IDApICYmCisgICAgICAgICAgICAgICAgICAgICAoZW50cnktPnBheWxvYWQgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICgoZW50cnktPmtleSAhPSBvbGQua2V5KSB8fAorICAgICAgICAgICAgICAgICAgICAgIChlbnRyeS0+a2V5MiAhPSBvbGQua2V5MikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoZW50cnktPmtleTMgIT0gb2xkLmtleTMpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCsrZW50cnkgPj0gZW5kKQorICAgICAgICAgICAgZW50cnkgPSBoYXNoLT50YWJsZTsKICAgICB9CiB9CiAKIC8qKgogICogeG1sSGFzaFNjYW4zOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMCi0gKiBAbmFtZTI6IGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEwKLSAqIEBuYW1lMzogYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMCi0gKiBAZjogIHRoZSBzY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaAotICogQGRhdGE6ICBleHRyYSBkYXRhIHBhc3NlZCB0byBmCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGtleTogZmlyc3Qgc3RyaW5nIGtleSBvciBOVUxMCisgKiBAa2V5Mjogc2Vjb25kIHN0cmluZyBrZXkgb3IgTlVMTAorICogQGtleTM6IHRoaXJkIHN0cmluZyBrZXkgb3IgTlVMTAorICogQHNjYW46IHNjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoCisgKiBAZGF0YTogZXh0cmEgZGF0YSBwYXNzZWQgdG8gQHNjYW4KICAqCi0gKiBTY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbGllZCBAZiB0byBlYWNoIHZhbHVlIG1hdGNoaW5nCi0gKiAoQG5hbWUsIEBuYW1lMiwgQG5hbWUzKSB0dXBsZS4gSWYgb25lIG9mIHRoZSBuYW1lcyBpcyBudWxsLAorICogU2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGx5IEBzY2FuIHRvIGVhY2ggdmFsdWUgbWF0Y2hpbmcKKyAqIChAa2V5LCBAa2V5MiwgQGtleTMpIHR1cGxlLiBJZiBvbmUgb2YgdGhlIGtleXMgaXMgbnVsbCwKICAqIHRoZSBjb21wYXJpc29uIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2guCiAgKi8KIHZvaWQKLXhtbEhhc2hTY2FuMyh4bWxIYXNoVGFibGVQdHIgdGFibGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0JICAgICBjb25zdCB4bWxDaGFyICpuYW1lMiwgY29uc3QgeG1sQ2hhciAqbmFtZTMsCi0JICAgICB4bWxIYXNoU2Nhbm5lciBmLCB2b2lkICpkYXRhKSB7Ci0gICAgc3R1YkRhdGEgc3R1YmRhdGE7Ci0gICAgc3R1YmRhdGEuZGF0YSA9IGRhdGE7Ci0gICAgc3R1YmRhdGEuaGFzaHNjYW5uZXIgPSBmOwotICAgIHhtbEhhc2hTY2FuRnVsbDModGFibGUsIG5hbWUsIG5hbWUyLCBuYW1lMywgc3R1Ykhhc2hTY2FubmVyRnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICZzdHViZGF0YSk7Cit4bWxIYXNoU2NhbjMoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKmtleSwKKyAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyLCBjb25zdCB4bWxDaGFyICprZXkzLAorICAgICAgICAgICAgIHhtbEhhc2hTY2FubmVyIHNjYW4sIHZvaWQgKmRhdGEpIHsKKyAgICBzdHViRGF0YSBzZGF0YTsKKyAgICBzZGF0YS5kYXRhID0gZGF0YTsKKyAgICBzZGF0YS5zY2FuID0gc2NhbjsKKyAgICB4bWxIYXNoU2NhbkZ1bGwzKGhhc2gsIGtleSwga2V5Miwga2V5Mywgc3R1Ykhhc2hTY2FubmVyRnVsbCwgJnNkYXRhKTsKIH0KIAogLyoqCiAgKiB4bWxIYXNoU2NhbkZ1bGwzOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMCi0gKiBAbmFtZTI6IGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhIG9yIE5VTEwKLSAqIEBuYW1lMzogYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSBvciBOVUxMCi0gKiBAZjogIHRoZSBzY2FubmVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaAotICogQGRhdGE6ICBleHRyYSBkYXRhIHBhc3NlZCB0byBmCisgKiBAaGFzaDogaGFzaCB0YWJsZQorICogQGtleTogZmlyc3Qgc3RyaW5nIGtleSBvciBOVUxMCisgKiBAa2V5Mjogc2Vjb25kIHN0cmluZyBrZXkgb3IgTlVMTAorICogQGtleTM6IHRoaXJkIHN0cmluZyBrZXkgb3IgTlVMTAorICogQHNjYW46IHNjYW5uZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoCisgKiBAZGF0YTogZXh0cmEgZGF0YSBwYXNzZWQgdG8gQHNjYW4KICAqCi0gKiBTY2FuIHRoZSBoYXNoIEB0YWJsZSBhbmQgYXBwbGllZCBAZiB0byBlYWNoIHZhbHVlIG1hdGNoaW5nCi0gKiAoQG5hbWUsIEBuYW1lMiwgQG5hbWUzKSB0dXBsZS4gSWYgb25lIG9mIHRoZSBuYW1lcyBpcyBudWxsLAorICogU2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGx5IEBzY2FuIHRvIGVhY2ggdmFsdWUgbWF0Y2hpbmcKKyAqIChAa2V5LCBAa2V5MiwgQGtleTMpIHR1cGxlLiBJZiBvbmUgb2YgdGhlIGtleXMgaXMgbnVsbCwKICAqIHRoZSBjb21wYXJpc29uIGlzIGNvbnNpZGVyZWQgdG8gbWF0Y2guCiAgKi8KIHZvaWQKLXhtbEhhc2hTY2FuRnVsbDMoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLCBjb25zdCB4bWxDaGFyICpuYW1lLAotCQkgY29uc3QgeG1sQ2hhciAqbmFtZTIsIGNvbnN0IHhtbENoYXIgKm5hbWUzLAotCQkgeG1sSGFzaFNjYW5uZXJGdWxsIGYsIHZvaWQgKmRhdGEpIHsKLSAgICBpbnQgaTsKLSAgICB4bWxIYXNoRW50cnlQdHIgaXRlcjsKLSAgICB4bWxIYXNoRW50cnlQdHIgbmV4dDsKK3htbEhhc2hTY2FuRnVsbDMoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqa2V5MiwgY29uc3QgeG1sQ2hhciAqa2V5MywKKyAgICAgICAgICAgICAgICAgeG1sSGFzaFNjYW5uZXJGdWxsIHNjYW4sIHZvaWQgKmRhdGEpIHsKKyAgICBjb25zdCB4bWxIYXNoRW50cnkgKmVudHJ5LCAqZW5kOworICAgIHhtbEhhc2hFbnRyeSBvbGQ7CisgICAgdW5zaWduZWQgaTsKIAotICAgIGlmICh0YWJsZSA9PSBOVUxMKQotCXJldHVybjsKLSAgICBpZiAoZiA9PSBOVUxMKQotCXJldHVybjsKKyAgICBpZiAoKGhhc2ggPT0gTlVMTCkgfHwgKGhhc2gtPnNpemUgPT0gMCkgfHwgKHNjYW4gPT0gTlVMTCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0YWJsZS0+dGFibGUpIHsKLQlmb3IoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKSB7Ci0JICAgIGlmICh0YWJsZS0+dGFibGVbaV0udmFsaWQgPT0gMCkKLQkJY29udGludWU7Ci0JICAgIGl0ZXIgPSAmKHRhYmxlLT50YWJsZVtpXSk7Ci0JICAgIHdoaWxlIChpdGVyKSB7Ci0JCW5leHQgPSBpdGVyLT5uZXh0OwotCQlpZiAoKChuYW1lID09IE5VTEwpIHx8ICh4bWxTdHJFcXVhbChuYW1lLCBpdGVyLT5uYW1lKSkpICYmCi0JCSAgICAoKG5hbWUyID09IE5VTEwpIHx8ICh4bWxTdHJFcXVhbChuYW1lMiwgaXRlci0+bmFtZTIpKSkgJiYKLQkJICAgICgobmFtZTMgPT0gTlVMTCkgfHwgKHhtbFN0ckVxdWFsKG5hbWUzLCBpdGVyLT5uYW1lMykpKSAmJgotCQkgICAgKGl0ZXItPnBheWxvYWQgIT0gTlVMTCkpIHsKLQkJICAgIGYoaXRlci0+cGF5bG9hZCwgZGF0YSwgaXRlci0+bmFtZSwKLQkJICAgICAgaXRlci0+bmFtZTIsIGl0ZXItPm5hbWUzKTsKLQkJfQotCQlpdGVyID0gbmV4dDsKLQkgICAgfQotCX0KKyAgICAvKgorICAgICAqIFdlIG11c3QgaGFuZGxlIHRoZSBjYXNlIHRoYXQgYSBzY2FubmVkIGVudHJ5IGlzIHJlbW92ZWQgd2hlbiBleGVjdXRpbmcKKyAgICAgKiB0aGUgY2FsbGJhY2sgKHhtbENsZWFuU3BlY2lhbEF0dHIgYW5kIHBvc3NpYmx5IG90aGVyIHBsYWNlcykuCisgICAgICoKKyAgICAgKiBGaW5kIHRoZSBzdGFydCBvZiBhIHByb2JlIHNlcXVlbmNlIHRvIGF2b2lkIHNjYW5uaW5nIGVudHJpZXMgdHdpY2UgaWYKKyAgICAgKiBhIGRlbGV0aW9uIGhhcHBlbnMuCisgICAgICovCisgICAgZW50cnkgPSBoYXNoLT50YWJsZTsKKyAgICBlbmQgPSAmaGFzaC0+dGFibGVbaGFzaC0+c2l6ZV07CisgICAgd2hpbGUgKGVudHJ5LT5oYXNoVmFsdWUgIT0gMCkgeworICAgICAgICBpZiAoKytlbnRyeSA+PSBlbmQpCisgICAgICAgICAgICBlbnRyeSA9IGhhc2gtPnRhYmxlOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKyAgICAgICAgaWYgKChlbnRyeS0+aGFzaFZhbHVlICE9IDApICYmIChlbnRyeS0+cGF5bG9hZCAhPSBOVUxMKSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE1ha2Ugc3VyZSB0byByZXNjYW4gYWZ0ZXIgYSBwb3NzaWJsZSBkZWxldGlvbi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmICgoKGtleSAhPSBOVUxMKSAmJiAoc3RyY21wKChjb25zdCBjaGFyICopIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBlbnRyeS0+a2V5KSAhPSAwKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKChrZXkyICE9IE5VTEwpICYmICgheG1sRmFzdFN0ckVxdWFsKGtleTIsIGVudHJ5LT5rZXkyKSkpIHx8CisgICAgICAgICAgICAgICAgICAgICgoa2V5MyAhPSBOVUxMKSAmJiAoIXhtbEZhc3RTdHJFcXVhbChrZXkzLCBlbnRyeS0+a2V5MykpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgb2xkID0gKmVudHJ5OworICAgICAgICAgICAgICAgIHNjYW4oZW50cnktPnBheWxvYWQsIGRhdGEsIGVudHJ5LT5rZXksIGVudHJ5LT5rZXkyLCBlbnRyeS0+a2V5Myk7CisgICAgICAgICAgICB9IHdoaWxlICgoZW50cnktPmhhc2hWYWx1ZSAhPSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5wYXlsb2FkICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgICAoKGVudHJ5LT5rZXkgIT0gb2xkLmtleSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoZW50cnktPmtleTIgIT0gb2xkLmtleTIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5rZXkzICE9IG9sZC5rZXkzKSkpOworICAgICAgICB9CisgICAgICAgIGlmICgrK2VudHJ5ID49IGVuZCkKKyAgICAgICAgICAgIGVudHJ5ID0gaGFzaC0+dGFibGU7CiAgICAgfQogfQogCiAvKioKICAqIHhtbEhhc2hDb3B5OgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQotICogQGY6ICB0aGUgY29waWVyIGZ1bmN0aW9uIGZvciBpdGVtcyBpbiB0aGUgaGFzaAorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBjb3B5OiBjb3BpZXIgZnVuY3Rpb24gZm9yIGl0ZW1zIGluIHRoZSBoYXNoCiAgKgotICogU2NhbiB0aGUgaGFzaCBAdGFibGUgYW5kIGFwcGxpZWQgQGYgdG8gZWFjaCB2YWx1ZS4KKyAqIENvcHkgdGhlIGhhc2ggQHRhYmxlIHVzaW5nIEBjb3B5IHRvIGNvcHkgcGF5bG9hZHMuCiAgKgotICogUmV0dXJucyB0aGUgbmV3IHRhYmxlIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqIFJldHVybnMgdGhlIG5ldyB0YWJsZSBvciBOVUxMIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgogICovCiB4bWxIYXNoVGFibGVQdHIKLXhtbEhhc2hDb3B5KHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgeG1sSGFzaENvcGllciBmKSB7Ci0gICAgaW50IGk7Ci0gICAgeG1sSGFzaEVudHJ5UHRyIGl0ZXI7Ci0gICAgeG1sSGFzaEVudHJ5UHRyIG5leHQ7Cit4bWxIYXNoQ29weSh4bWxIYXNoVGFibGVQdHIgaGFzaCwgeG1sSGFzaENvcGllciBjb3B5KSB7CisgICAgY29uc3QgeG1sSGFzaEVudHJ5ICplbnRyeSwgKmVuZDsKICAgICB4bWxIYXNoVGFibGVQdHIgcmV0OwogCi0gICAgaWYgKHRhYmxlID09IE5VTEwpCi0JcmV0dXJuKE5VTEwpOwotICAgIGlmIChmID09IE5VTEwpCi0JcmV0dXJuKE5VTEwpOworICAgIGlmICgoaGFzaCA9PSBOVUxMKSB8fCAoY29weSA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKE5VTEwpOwogCi0gICAgcmV0ID0geG1sSGFzaENyZWF0ZSh0YWJsZS0+c2l6ZSk7CisgICAgcmV0ID0geG1sSGFzaENyZWF0ZShoYXNoLT5zaXplKTsKICAgICBpZiAocmV0ID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKIAotICAgIGlmICh0YWJsZS0+dGFibGUpIHsKLQlmb3IoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKSB7Ci0JICAgIGlmICh0YWJsZS0+dGFibGVbaV0udmFsaWQgPT0gMCkKLQkJY29udGludWU7Ci0JICAgIGl0ZXIgPSAmKHRhYmxlLT50YWJsZVtpXSk7Ci0JICAgIHdoaWxlIChpdGVyKSB7Ci0JCW5leHQgPSBpdGVyLT5uZXh0OwotCQl4bWxIYXNoQWRkRW50cnkzKHJldCwgaXRlci0+bmFtZSwgaXRlci0+bmFtZTIsCi0JCQkgICAgICAgICBpdGVyLT5uYW1lMywgZihpdGVyLT5wYXlsb2FkLCBpdGVyLT5uYW1lKSk7Ci0JCWl0ZXIgPSBuZXh0OwotCSAgICB9Ci0JfQorICAgIGlmIChoYXNoLT5zaXplID09IDApCisgICAgICAgIHJldHVybihyZXQpOworCisgICAgZW5kID0gJmhhc2gtPnRhYmxlW2hhc2gtPnNpemVdOworCisgICAgZm9yIChlbnRyeSA9IGhhc2gtPnRhYmxlOyBlbnRyeSA8IGVuZDsgZW50cnkrKykgeworICAgICAgICBpZiAoZW50cnktPmhhc2hWYWx1ZSAhPSAwKQorICAgICAgICAgICAgeG1sSGFzaEFkZEVudHJ5MyhyZXQsIGVudHJ5LT5rZXksIGVudHJ5LT5rZXkyLCBlbnRyeS0+a2V5MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weShlbnRyeS0+cGF5bG9hZCwgZW50cnktPmtleSkpOwogICAgIH0KLSAgICByZXQtPm5iRWxlbXMgPSB0YWJsZS0+bmJFbGVtczsKKwogICAgIHJldHVybihyZXQpOwogfQogCiAvKioKICAqIHhtbEhhc2hTaXplOgotICogQHRhYmxlOiB0aGUgaGFzaCB0YWJsZQorICogQGhhc2g6IGhhc2ggdGFibGUKICAqCi0gKiBRdWVyeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc3RhbGxlZCBpbiB0aGUgaGFzaCBAdGFibGUuCisgKiBRdWVyeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlLgogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZSBvcgotICogLTEgaW4gY2FzZSBvZiBlcnJvcgorICogLTEgaW4gY2FzZSBvZiBlcnJvci4KICAqLwogaW50Ci14bWxIYXNoU2l6ZSh4bWxIYXNoVGFibGVQdHIgdGFibGUpIHsKLSAgICBpZiAodGFibGUgPT0gTlVMTCkKLQlyZXR1cm4oLTEpOwotICAgIHJldHVybih0YWJsZS0+bmJFbGVtcyk7Cit4bWxIYXNoU2l6ZSh4bWxIYXNoVGFibGVQdHIgaGFzaCkgeworICAgIGlmIChoYXNoID09IE5VTEwpCisgICAgICAgIHJldHVybigtMSk7CisgICAgcmV0dXJuKGhhc2gtPm5iRWxlbXMpOwogfQogCiAvKioKICAqIHhtbEhhc2hSZW1vdmVFbnRyeToKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBmOiB0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSAoaWYgYW55KQorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBrZXk6IHN0cmluZyBrZXkKKyAqIEBkZWFsbG9jOiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIG9yIE5VTEwKICAqCi0gKiBGaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIEBuYW1lIGFuZCByZW1vdmUKLSAqIGl0IGZyb20gdGhlIGhhc2ggQHRhYmxlLiBFeGlzdGluZyB1c2VyZGF0YSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQKLSAqIGFuZCBmcmVlZCB3aXRoIEBmLgorICogRmluZCB0aGUgZW50cnkgc3BlY2lmaWVkIGJ5IHRoZSBAa2V5IGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKyAqIFBheWxvYWQgd2lsbCBiZSBmcmVlZCB3aXRoIEBkZWFsbG9jLgogICoKLSAqIFJldHVybnMgMCBpZiB0aGUgcmVtb3ZhbCBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3Igb3Igbm90IGZvdW5kLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGlmIG5vIGVudHJ5IHdhcyBmb3VuZC4KICAqLwotaW50IHhtbEhhc2hSZW1vdmVFbnRyeSh4bWxIYXNoVGFibGVQdHIgdGFibGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0JCSAgICAgICB4bWxIYXNoRGVhbGxvY2F0b3IgZikgewotICAgIHJldHVybih4bWxIYXNoUmVtb3ZlRW50cnkzKHRhYmxlLCBuYW1lLCBOVUxMLCBOVUxMLCBmKSk7CitpbnQgeG1sSGFzaFJlbW92ZUVudHJ5KHhtbEhhc2hUYWJsZVB0ciBoYXNoLCBjb25zdCB4bWxDaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgIHhtbEhhc2hEZWFsbG9jYXRvciBkZWFsbG9jKSB7CisgICAgcmV0dXJuKHhtbEhhc2hSZW1vdmVFbnRyeTMoaGFzaCwga2V5LCBOVUxMLCBOVUxMLCBkZWFsbG9jKSk7CiB9CiAKIC8qKgogICogeG1sSGFzaFJlbW92ZUVudHJ5MjoKLSAqIEB0YWJsZTogdGhlIGhhc2ggdGFibGUKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBuYW1lMjogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBmOiB0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSAoaWYgYW55KQorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBrZXk6IGZpcnN0IHN0cmluZyBrZXkKKyAqIEBrZXkyOiBzZWNvbmQgc3RyaW5nIGtleQorICogQGRlYWxsb2M6IGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZW1vdmVkIGl0ZW0gb3IgTlVMTAogICoKLSAqIEZpbmQgdGhlIHVzZXJkYXRhIHNwZWNpZmllZCBieSB0aGUgKEBuYW1lLCBAbmFtZTIpIHR1cGxlIGFuZCByZW1vdmUKLSAqIGl0IGZyb20gdGhlIGhhc2ggQHRhYmxlLiBFeGlzdGluZyB1c2VyZGF0YSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQKLSAqIGFuZCBmcmVlZCB3aXRoIEBmLgorICogUmVtb3ZlIGFuIGVudHJ5IHdpdGggdHdvIHN0cmluZ3MgYXMga2V5LgogICoKLSAqIFJldHVybnMgMCBpZiB0aGUgcmVtb3ZhbCBzdWNjZWVkZWQgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3Igb3Igbm90IGZvdW5kLgorICogU2VlIHhtbEhhc2hSZW1vdmVFbnRyeS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvci4KICAqLwogaW50Ci14bWxIYXNoUmVtb3ZlRW50cnkyKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLQkJCWNvbnN0IHhtbENoYXIgKm5hbWUyLCB4bWxIYXNoRGVhbGxvY2F0b3IgZikgewotICAgIHJldHVybih4bWxIYXNoUmVtb3ZlRW50cnkzKHRhYmxlLCBuYW1lLCBuYW1lMiwgTlVMTCwgZikpOworeG1sSGFzaFJlbW92ZUVudHJ5Mih4bWxIYXNoVGFibGVQdHIgaGFzaCwgY29uc3QgeG1sQ2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICprZXkyLCB4bWxIYXNoRGVhbGxvY2F0b3IgZGVhbGxvYykgeworICAgIHJldHVybih4bWxIYXNoUmVtb3ZlRW50cnkzKGhhc2gsIGtleSwga2V5MiwgTlVMTCwgZGVhbGxvYykpOwogfQogCiAvKioKICAqIHhtbEhhc2hSZW1vdmVFbnRyeTM6Ci0gKiBAdGFibGU6IHRoZSBoYXNoIHRhYmxlCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAbmFtZTI6IGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhCi0gKiBAbmFtZTM6IGEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEKLSAqIEBmOiB0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSAoaWYgYW55KQorICogQGhhc2g6IGhhc2ggdGFibGUKKyAqIEBrZXk6IGZpcnN0IHN0cmluZyBrZXkKKyAqIEBrZXkyOiBzZWNvbmQgc3RyaW5nIGtleQorICogQGtleTM6IHRoaXJkIHN0cmluZyBrZXkKKyAqIEBkZWFsbG9jOiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIG9yIE5VTEwKICAqCi0gKiBGaW5kIHRoZSB1c2VyZGF0YSBzcGVjaWZpZWQgYnkgdGhlIChAbmFtZSwgQG5hbWUyLCBAbmFtZTMpIHR1cGxlIGFuZCByZW1vdmUKLSAqIGl0IGZyb20gdGhlIGhhc2ggQHRhYmxlLiBFeGlzdGluZyB1c2VyZGF0YSBmb3IgdGhpcyB0dXBsZSB3aWxsIGJlIHJlbW92ZWQKLSAqIGFuZCBmcmVlZCB3aXRoIEBmLgorICogUmVtb3ZlIGFuIGVudHJ5IHdpdGggdGhyZWUgc3RyaW5ncyBhcyBrZXkuCiAgKgotICogUmV0dXJucyAwIGlmIHRoZSByZW1vdmFsIHN1Y2NlZWRlZCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvciBvciBub3QgZm91bmQuCisgKiBTZWUgeG1sSGFzaFJlbW92ZUVudHJ5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yLgogICovCitBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUgogaW50Ci14bWxIYXNoUmVtb3ZlRW50cnkzKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLSAgICBjb25zdCB4bWxDaGFyICpuYW1lMiwgY29uc3QgeG1sQ2hhciAqbmFtZTMsIHhtbEhhc2hEZWFsbG9jYXRvciBmKSB7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXk7Ci0gICAgeG1sSGFzaEVudHJ5UHRyIGVudHJ5OwotICAgIHhtbEhhc2hFbnRyeVB0ciBwcmV2ID0gTlVMTDsKK3htbEhhc2hSZW1vdmVFbnRyeTMoeG1sSGFzaFRhYmxlUHRyIGhhc2gsIGNvbnN0IHhtbENoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqa2V5MiwgY29uc3QgeG1sQ2hhciAqa2V5MywKKyAgICAgICAgICAgICAgICAgICAgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpIHsKKyAgICB4bWxIYXNoRW50cnkgKmVudHJ5LCAqY3VyLCAqbmV4dDsKKyAgICB1bnNpZ25lZCBoYXNoVmFsdWUsIG1hc2ssIHBvcywgbmV4dHBvczsKKyAgICBpbnQgZm91bmQ7CiAKLSAgICBpZiAodGFibGUgPT0gTlVMTCB8fCBuYW1lID09IE5VTEwpCisgICAgaWYgKChoYXNoID09IE5VTEwpIHx8IChoYXNoLT5zaXplID09IDApIHx8IChrZXkgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybigtMSk7CiAKLSAgICBrZXkgPSB4bWxIYXNoQ29tcHV0ZUtleSh0YWJsZSwgbmFtZSwgbmFtZTIsIG5hbWUzKTsKLSAgICBpZiAodGFibGUtPnRhYmxlW2tleV0udmFsaWQgPT0gMCkgeworICAgIGhhc2hWYWx1ZSA9IHhtbEhhc2hWYWx1ZShoYXNoLT5yYW5kb21TZWVkLCBrZXksIGtleTIsIGtleTMsIE5VTEwpOworICAgIGVudHJ5ID0geG1sSGFzaEZpbmRFbnRyeShoYXNoLCBrZXksIGtleTIsIGtleTMsIGhhc2hWYWx1ZSwgJmZvdW5kKTsKKyAgICBpZiAoIWZvdW5kKQogICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoZW50cnkgPSAmKHRhYmxlLT50YWJsZVtrZXldKTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgewotICAgICAgICAgICAgaWYgKHhtbFN0ckVxdWFsKGVudHJ5LT5uYW1lLCBuYW1lKSAmJgotICAgICAgICAgICAgICAgICAgICB4bWxTdHJFcXVhbChlbnRyeS0+bmFtZTIsIG5hbWUyKSAmJgotICAgICAgICAgICAgICAgICAgICB4bWxTdHJFcXVhbChlbnRyeS0+bmFtZTMsIG5hbWUzKSkgewotICAgICAgICAgICAgICAgIGlmICgoZiAhPSBOVUxMKSAmJiAoZW50cnktPnBheWxvYWQgIT0gTlVMTCkpCi0gICAgICAgICAgICAgICAgICAgIGYoZW50cnktPnBheWxvYWQsIGVudHJ5LT5uYW1lKTsKLSAgICAgICAgICAgICAgICBlbnRyeS0+cGF5bG9hZCA9IE5VTEw7Ci0JCWlmICh0YWJsZS0+ZGljdCA9PSBOVUxMKSB7Ci0JCSAgICBpZihlbnRyeS0+bmFtZSkKLQkJCXhtbEZyZWUoZW50cnktPm5hbWUpOwotCQkgICAgaWYoZW50cnktPm5hbWUyKQotCQkJeG1sRnJlZShlbnRyeS0+bmFtZTIpOwotCQkgICAgaWYoZW50cnktPm5hbWUzKQotCQkJeG1sRnJlZShlbnRyeS0+bmFtZTMpOwotCQl9Ci0gICAgICAgICAgICAgICAgaWYocHJldikgewotICAgICAgICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gZW50cnktPm5leHQ7Ci0JCSAgICB4bWxGcmVlKGVudHJ5KTsKLQkJfSBlbHNlIHsKLQkJICAgIGlmIChlbnRyeS0+bmV4dCA9PSBOVUxMKSB7Ci0JCQllbnRyeS0+dmFsaWQgPSAwOwotCQkgICAgfSBlbHNlIHsKLQkJCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JCQltZW1jcHkoJih0YWJsZS0+dGFibGVba2V5XSksIGVudHJ5LCBzaXplb2YoeG1sSGFzaEVudHJ5KSk7Ci0JCQl4bWxGcmVlKGVudHJ5KTsKLQkJICAgIH0KLQkJfQotICAgICAgICAgICAgICAgIHRhYmxlLT5uYkVsZW1zLS07Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJldiA9IGVudHJ5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoKGRlYWxsb2MgIT0gTlVMTCkgJiYgKGVudHJ5LT5wYXlsb2FkICE9IE5VTEwpKQorICAgICAgICBkZWFsbG9jKGVudHJ5LT5wYXlsb2FkLCBlbnRyeS0+a2V5KTsKKyAgICBpZiAoaGFzaC0+ZGljdCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5KQorICAgICAgICAgICAgeG1sRnJlZShlbnRyeS0+a2V5KTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkyKQorICAgICAgICAgICAgeG1sRnJlZShlbnRyeS0+a2V5Mik7CisgICAgICAgIGlmIChlbnRyeS0+a2V5MykKKyAgICAgICAgICAgIHhtbEZyZWUoZW50cnktPmtleTMpOwogICAgIH0KKworICAgIC8qCisgICAgICogRmluZCBlbmQgb2YgcHJvYmUgc2VxdWVuY2UuIEVudHJpZXMgYXQgdGhlaXIgaW5pdGlhbCBwcm9iZQorICAgICAqIHBvc2l0aW9uIHN0YXJ0IGEgbmV3IHNlcXVlbmNlLgorICAgICAqLworICAgIG1hc2sgPSBoYXNoLT5zaXplIC0gMTsKKyAgICBwb3MgPSBlbnRyeSAtIGhhc2gtPnRhYmxlOworICAgIGN1ciA9IGVudHJ5OworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgbmV4dHBvcyA9IHBvcyArIDE7CisgICAgICAgIG5leHQgPSBjdXIgKyAxOworICAgICAgICBpZiAoKG5leHRwb3MgJiBtYXNrKSA9PSAwKQorICAgICAgICAgICAgbmV4dCA9IGhhc2gtPnRhYmxlOworCisgICAgICAgIGlmICgobmV4dC0+aGFzaFZhbHVlID09IDApIHx8CisgICAgICAgICAgICAoKChuZXh0LT5oYXNoVmFsdWUgLSBuZXh0cG9zKSAmIG1hc2spID09IDApKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VyID0gbmV4dDsKKyAgICAgICAgcG9zID0gbmV4dHBvczsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEJhY2t3YXJkIHNoaWZ0CisgICAgICovCisgICAgbmV4dCA9IGVudHJ5ICsgMTsKKworICAgIGlmIChjdXIgPCBlbnRyeSkgeworICAgICAgICB4bWxIYXNoRW50cnkgKmVuZCA9ICZoYXNoLT50YWJsZVtoYXNoLT5zaXplXTsKKworICAgICAgICBtZW1tb3ZlKGVudHJ5LCBuZXh0LCAoY2hhciAqKSBlbmQgLSAoY2hhciAqKSBuZXh0KTsKKyAgICAgICAgZW50cnkgPSBoYXNoLT50YWJsZTsKKyAgICAgICAgZW5kWy0xXSA9ICplbnRyeTsKKyAgICAgICAgbmV4dCA9IGVudHJ5ICsgMTsKKyAgICB9CisKKyAgICBtZW1tb3ZlKGVudHJ5LCBuZXh0LCAoY2hhciAqKSBjdXIgLSAoY2hhciAqKSBlbnRyeSk7CisKKyAgICAvKgorICAgICAqIFVwZGF0ZSBlbnRyeQorICAgICAqLworICAgIGN1ci0+aGFzaFZhbHVlID0gMDsKKworICAgIGhhc2gtPm5iRWxlbXMtLTsKKworICAgIHJldHVybigwKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9NYWtlZmlsZS5hbSBiL2luY2x1ZGUvTWFrZWZpbGUuYW0KaW5kZXggN2RiZmFhNS4uMjYwM2FjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9NYWtlZmlsZS5hbQorKysgYi9pbmNsdWRlL01ha2VmaWxlLmFtCkBAIC0xLDUgKzEsNSBAQAogIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi1TVUJESVJTPWxpYnhtbAorU1VCRElSUz1saWJ4bWwgcHJpdmF0ZQogCiBFWFRSQV9ESVNUID0gd2luMzJjb25maWcuaCB3c29ja2NvbXBhdC5oCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaCBiL2luY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaAppbmRleCAxZDRmZWMyLi5lMTZkNzc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oCkBAIC04MCw5MCArODAsMTIxIEBACiAgICAgY29uc3QgY2hhciAqZGVzYzsgICAvKiB0aGUgZGVzY3JpcHRpb24gKi8KIH07CiAKKy8qKiBET0NfRElTQUJMRSAqLworI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKKyAgI2RlZmluZSBYTUxfR0xPQkFMU19IVE1MIFwKKyAgICBYTUxfT1AoaHRtbERlZmF1bHRTQVhIYW5kbGVyLCB4bWxTQVhIYW5kbGVyVjEsIFhNTF9ERVBSRUNBVEVEKQorI2Vsc2UKKyAgI2RlZmluZSBYTUxfR0xPQkFMU19IVE1MCisjZW5kaWYKKworI2RlZmluZSBYTUxfT1AgWE1MX0RFQ0xBUkVfR0xPQkFMCitYTUxfR0xPQkFMU19IVE1MCisjdW5kZWYgWE1MX09QCisKKyNpZiBkZWZpbmVkKExJQlhNTF9USFJFQURfRU5BQkxFRCkgJiYgIWRlZmluZWQoWE1MX0dMT0JBTFNfTk9fUkVERUZJTklUSU9OKQorICAjZGVmaW5lIGh0bWxEZWZhdWx0U0FYSGFuZGxlciBYTUxfR0xPQkFMX01BQ1JPKGh0bWxEZWZhdWx0U0FYSGFuZGxlcikKKyNlbmRpZgorLyoqIERPQ19FTkFCTEUgKi8KKwogLyoKICAqIFRoZXJlIGlzIG9ubHkgZmV3IHB1YmxpYyBmdW5jdGlvbnMuCiAgKi8KLVhNTFBVQkZVTiBjb25zdCBodG1sRWxlbURlc2MgKiBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKKwkJCWh0bWxJbml0QXV0b0Nsb3NlCSh2b2lkKTsKK1hNTFBVQkZVTiBjb25zdCBodG1sRWxlbURlc2MgKgogCQkJaHRtbFRhZ0xvb2t1cAkoY29uc3QgeG1sQ2hhciAqdGFnKTsKLVhNTFBVQkZVTiBjb25zdCBodG1sRW50aXR5RGVzYyAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCBodG1sRW50aXR5RGVzYyAqCiAJCQlodG1sRW50aXR5TG9va3VwKGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIGNvbnN0IGh0bWxFbnRpdHlEZXNjICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IGh0bWxFbnRpdHlEZXNjICoKIAkJCWh0bWxFbnRpdHlWYWx1ZUxvb2t1cCh1bnNpZ25lZCBpbnQgdmFsdWUpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCWh0bWxJc0F1dG9DbG9zZWQoaHRtbERvY1B0ciBkb2MsCiAJCQkJCSBodG1sTm9kZVB0ciBlbGVtKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJaHRtbEF1dG9DbG9zZVRhZyhodG1sRG9jUHRyIGRvYywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBodG1sTm9kZVB0ciBlbGVtKTsKLVhNTFBVQkZVTiBjb25zdCBodG1sRW50aXR5RGVzYyAqIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gY29uc3QgaHRtbEVudGl0eURlc2MgKgogCQkJaHRtbFBhcnNlRW50aXR5UmVmKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICoqc3RyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBpbnQKIAkJCWh0bWxQYXJzZUNoYXJSZWYoaHRtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKIAkJCWh0bWxQYXJzZUVsZW1lbnQoaHRtbFBhcnNlckN0eHRQdHIgY3R4dCk7CiAKLVhNTFBVQkZVTiBodG1sUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4gaHRtbFBhcnNlckN0eHRQdHIKIAkJCWh0bWxOZXdQYXJzZXJDdHh0KHZvaWQpOworWE1MUFVCRlVOIGh0bWxQYXJzZXJDdHh0UHRyCisJCQlodG1sTmV3U0FYUGFyc2VyQ3R4dChjb25zdCBodG1sU0FYSGFuZGxlciAqc2F4LAorCQkJCQkgICAgIHZvaWQgKnVzZXJEYXRhKTsKIAotWE1MUFVCRlVOIGh0bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sUGFyc2VyQ3R4dFB0cgogCQkJaHRtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoY29uc3QgY2hhciAqYnVmZmVyLAogCQkJCQkJICAgaW50IHNpemUpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCWh0bWxQYXJzZURvY3VtZW50KGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGh0bWxEb2NQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCQlodG1sU0FYUGFyc2VEb2MJKGNvbnN0IHhtbENoYXIgKmN1ciwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaHRtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgdm9pZCAqdXNlckRhdGEpOwotWE1MUFVCRlVOIGh0bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIGh0bWxEb2NQdHIKIAkJCWh0bWxQYXJzZURvYwkoY29uc3QgeG1sQ2hhciAqY3VyLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcpOwotWE1MUFVCRlVOIGh0bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIGh0bWxQYXJzZXJDdHh0UHRyCisJCQlodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZyk7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGh0bWxEb2NQdHIKIAkJCWh0bWxTQVhQYXJzZUZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGh0bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJIHZvaWQgKnVzZXJEYXRhKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCQlodG1sUGFyc2VGaWxlCShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJVVRGOFRvSHRtbAkodW5zaWduZWQgY2hhciAqb3V0LAogCQkJCQkgaW50ICpvdXRsZW4sCiAJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKIAkJCQkJIGludCAqaW5sZW4pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQlodG1sRW5jb2RlRW50aXRpZXModW5zaWduZWQgY2hhciAqb3V0LAogCQkJCQkgaW50ICpvdXRsZW4sCiAJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKIAkJCQkJIGludCAqaW5sZW4sIGludCBxdW90ZUNoYXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQlodG1sSXNTY3JpcHRBdHRyaWJ1dGUoY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCWh0bWxIYW5kbGVPbWl0dGVkRWxlbShpbnQgdmFsKTsKIAogI2lmZGVmIExJQlhNTF9QVVNIX0VOQUJMRUQKIC8qKgogICogSW50ZXJmYWNlcyBmb3IgdGhlIFB1c2ggbW9kZS4KICAqLwotWE1MUFVCRlVOIGh0bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sUGFyc2VyQ3R4dFB0cgogCQkJaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KGh0bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJCSB2b2lkICp1c2VyX2RhdGEsCiAJCQkJCQkgY29uc3QgY2hhciAqY2h1bmssCiAJCQkJCQkgaW50IHNpemUsCiAJCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCQkgeG1sQ2hhckVuY29kaW5nIGVuYyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCWh0bWxQYXJzZUNodW5rCQkoaHRtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCBjaGFyICpjaHVuaywKIAkJCQkJCSBpbnQgc2l6ZSwKIAkJCQkJCSBpbnQgdGVybWluYXRlKTsKICNlbmRpZiAvKiBMSUJYTUxfUFVTSF9FTkFCTEVEICovCiAKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQlodG1sRnJlZVBhcnNlckN0eHQJKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwogCiAvKgpAQCAtMTg4LDYzICsyMTksNjMgQEAKICAgICBIVE1MX1BBUlNFX0lHTk9SRV9FTkM9MTw8MjEgLyogaWdub3JlIGludGVybmFsIGRvY3VtZW50IGVuY29kaW5nIGhpbnQgKi8KIH0gaHRtbFBhcnNlck9wdGlvbjsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJaHRtbEN0eHRSZXNldAkJKGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCWh0bWxDdHh0VXNlT3B0aW9ucwkoaHRtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCWh0bWxSZWFkRG9jCQkoY29uc3QgeG1sQ2hhciAqY3VyLAogCQkJCQkgY29uc3QgY2hhciAqVVJMLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaHRtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4gaHRtbERvY1B0cgogCQlodG1sUmVhZEZpbGUJCShjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCWh0bWxSZWFkTWVtb3J5CQkoY29uc3QgY2hhciAqYnVmZmVyLAogCQkJCQkgaW50IHNpemUsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCWh0bWxSZWFkRmQJCShpbnQgZmQsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCWh0bWxSZWFkSU8JCSh4bWxJbnB1dFJlYWRDYWxsYmFjayBpb3JlYWQsCiAJCQkJCSB4bWxJbnB1dENsb3NlQ2FsbGJhY2sgaW9jbG9zZSwKIAkJCQkJIHZvaWQgKmlvY3R4LAogCQkJCQkgY29uc3QgY2hhciAqVVJMLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaHRtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4gaHRtbERvY1B0cgogCQlodG1sQ3R4dFJlYWREb2MJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjdXIsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCWh0bWxDdHh0UmVhZEZpbGUJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIGh0bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIGh0bWxEb2NQdHIKIAkJaHRtbEN0eHRSZWFkTWVtb3J5CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgY2hhciAqYnVmZmVyLAogCQkJCQkgaW50IHNpemUsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBodG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBodG1sRG9jUHRyCiAJCWh0bWxDdHh0UmVhZEZkCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgaW50IGZkLAogCQkJCQkgY29uc3QgY2hhciAqVVJMLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaHRtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4gaHRtbERvY1B0cgogCQlodG1sQ3R4dFJlYWRJTwkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbElucHV0UmVhZENhbGxiYWNrIGlvcmVhZCwKIAkJCQkJIHhtbElucHV0Q2xvc2VDYWxsYmFjayBpb2Nsb3NlLApAQCAtMjY2LDEwICsyOTcsMTAgQEAKIC8qIFVzaW5nIGh0bWxFbGVtRGVzYyByYXRoZXIgdGhhbiBuYW1lIGhlcmUsIHRvIGVtcGhhc2lzZSB0aGUgZmFjdAogICAgdGhhdCBvdGhlcndpc2UgdGhlcmUncyBhIGxvb2t1cCBvdmVyaGVhZAogKi8KLVhNTFBVQkZVTiBodG1sU3RhdHVzIFhNTENBTEwgaHRtbEF0dHJBbGxvd2VkKGNvbnN0IGh0bWxFbGVtRGVzYyosIGNvbnN0IHhtbENoYXIqLCBpbnQpIDsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCBodG1sRWxlbWVudEFsbG93ZWRIZXJlKGNvbnN0IGh0bWxFbGVtRGVzYyosIGNvbnN0IHhtbENoYXIqKSA7Ci1YTUxQVUJGVU4gaHRtbFN0YXR1cyBYTUxDQUxMIGh0bWxFbGVtZW50U3RhdHVzSGVyZShjb25zdCBodG1sRWxlbURlc2MqLCBjb25zdCBodG1sRWxlbURlc2MqKSA7Ci1YTUxQVUJGVU4gaHRtbFN0YXR1cyBYTUxDQUxMIGh0bWxOb2RlU3RhdHVzKGNvbnN0IGh0bWxOb2RlUHRyLCBpbnQpIDsKK1hNTFBVQkZVTiBodG1sU3RhdHVzIGh0bWxBdHRyQWxsb3dlZChjb25zdCBodG1sRWxlbURlc2MqLCBjb25zdCB4bWxDaGFyKiwgaW50KSA7CitYTUxQVUJGVU4gaW50IGh0bWxFbGVtZW50QWxsb3dlZEhlcmUoY29uc3QgaHRtbEVsZW1EZXNjKiwgY29uc3QgeG1sQ2hhciopIDsKK1hNTFBVQkZVTiBodG1sU3RhdHVzIGh0bWxFbGVtZW50U3RhdHVzSGVyZShjb25zdCBodG1sRWxlbURlc2MqLCBjb25zdCBodG1sRWxlbURlc2MqKSA7CitYTUxQVUJGVU4gaHRtbFN0YXR1cyBodG1sTm9kZVN0YXR1cyhjb25zdCBodG1sTm9kZVB0ciwgaW50KSA7CiAvKioKICAqIGh0bWxEZWZhdWx0U3ViZWxlbWVudDoKICAqIEBlbHQ6IEhUTUwgZWxlbWVudApAQCAtMzAyLDUgKzMzMywxMSBAQAogfQogI2VuZGlmCiAKKyNlbHNlIC8qIExJQlhNTF9IVE1MX0VOQUJMRUQgKi8KKworLyoqIERPQ19ESVNBQkxFICovCisjZGVmaW5lIFhNTF9HTE9CQUxTX0hUTUwKKy8qKiBET0NfRU5BQkxFICovCisKICNlbmRpZiAvKiBMSUJYTUxfSFRNTF9FTkFCTEVEICovCiAjZW5kaWYgLyogX19IVE1MX1BBUlNFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmggYi9pbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oCmluZGV4IGMwZTExMDMuLjhlMWJhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaApAQCAtNTksNzMgKzU5LDczIEBACiAgKi8KICNkZWZpbmUgSFRNTF9QSV9OT0RFCQlYTUxfUElfTk9ERQogCi1YTUxQVUJGVU4gaHRtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4gaHRtbERvY1B0cgogCQlodG1sTmV3RG9jCQkoY29uc3QgeG1sQ2hhciAqVVJJLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqRXh0ZXJuYWxJRCk7Ci1YTUxQVUJGVU4gaHRtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4gaHRtbERvY1B0cgogCQlodG1sTmV3RG9jTm9EdEQJCShjb25zdCB4bWxDaGFyICpVUkksCiAJCQkJCSBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElEKTsKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQlodG1sR2V0TWV0YUVuY29kaW5nCShodG1sRG9jUHRyIGRvYyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJaHRtbFNldE1ldGFFbmNvZGluZwkoaHRtbERvY1B0ciBkb2MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICplbmNvZGluZyk7CiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlodG1sRG9jRHVtcE1lbW9yeQkoeG1sRG9jUHRyIGN1ciwKIAkJCQkJIHhtbENoYXIgKiptZW0sCiAJCQkJCSBpbnQgKnNpemUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJaHRtbERvY0R1bXBNZW1vcnlGb3JtYXQJKHhtbERvY1B0ciBjdXIsCiAJCQkJCSB4bWxDaGFyICoqbWVtLAogCQkJCQkgaW50ICpzaXplLAogCQkJCQkgaW50IGZvcm1hdCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJaHRtbERvY0R1bXAJCShGSUxFICpmLAogCQkJCQkgeG1sRG9jUHRyIGN1cik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJaHRtbFNhdmVGaWxlCQkoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSB4bWxEb2NQdHIgY3VyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQlodG1sTm9kZUR1bXAJCSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgY3VyKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWh0bWxOb2RlRHVtcEZpbGUJKEZJTEUgKm91dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJaHRtbE5vZGVEdW1wRmlsZUZvcm1hdAkoRklMRSAqb3V0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgY3VyLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgZm9ybWF0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQlodG1sU2F2ZUZpbGVFbmMJCShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJIHhtbERvY1B0ciBjdXIsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJaHRtbFNhdmVGaWxlRm9ybWF0CShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJIHhtbERvY1B0ciBjdXIsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBmb3JtYXQpOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlodG1sTm9kZUR1bXBGb3JtYXRPdXRwdXQoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IGZvcm1hdCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlodG1sRG9jQ29udGVudER1bXBPdXRwdXQoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbERvY1B0ciBjdXIsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlodG1sRG9jQ29udGVudER1bXBGb3JtYXRPdXRwdXQoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbERvY1B0ciBjdXIsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBmb3JtYXQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJaHRtbE5vZGVEdW1wT3V0cHV0CSh4bWxPdXRwdXRCdWZmZXJQdHIgYnVmLAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgY3VyLApAQCAtMTMzLDcgKzEzMyw3IEBACiAKICNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCWh0bWxJc0Jvb2xlYW5BdHRyCShjb25zdCB4bWxDaGFyICpuYW1lKTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC9TQVguaCBiL2luY2x1ZGUvbGlieG1sL1NBWC5oCmluZGV4IGZhNTA1NjguLmVlYTEwNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL1NBWC5oCisrKyBiL2luY2x1ZGUvbGlieG1sL1NBWC5oCkBAIC0xMiw4ICsxMiw2IEBACiAjaWZuZGVmIF9fWE1MX1NBWF9IX18KICNkZWZpbmUgX19YTUxfU0FYX0hfXwogCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KIApAQCAtMjMsNjEgKzIxLDYxIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQlnZXRQdWJsaWNJZAkJCSh2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQlnZXRTeXN0ZW1JZAkJCSh2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXNldERvY3VtZW50TG9jYXRvcgkJKHZvaWQgKmN0eCwKIAkJCQkJCSB4bWxTQVhMb2NhdG9yUHRyIGxvYyk7CiAKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJZ2V0TGluZU51bWJlcgkJCSh2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQlnZXRDb2x1bW5OdW1iZXIJCQkodm9pZCAqY3R4KTsKIAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQlpc1N0YW5kYWxvbmUJCQkodm9pZCAqY3R4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJaGFzSW50ZXJuYWxTdWJzZXQJCSh2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQloYXNFeHRlcm5hbFN1YnNldAkJKHZvaWQgKmN0eCk7CiAKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlpbnRlcm5hbFN1YnNldAkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlEKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlleHRlcm5hbFN1YnNldAkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlEKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sRW50aXR5UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJZ2V0RW50aXR5CQkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sRW50aXR5UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJZ2V0UGFyYW1ldGVyRW50aXR5CQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIKIAkJcmVzb2x2ZUVudGl0eQkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHVibGljSWQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqc3lzdGVtSWQpOwogCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJZW50aXR5RGVjbAkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBpbnQgdHlwZSwKQEAgLTg1LDcgKzgzLDcgQEAKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpzeXN0ZW1JZCwKIAkJCQkJCSB4bWxDaGFyICpjb250ZW50KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlhdHRyaWJ1dGVEZWNsCQkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICplbGVtLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmZ1bGxuYW1lLApAQCAtOTQsMTkgKzkyLDE5IEBACiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqZGVmYXVsdFZhbHVlLAogCQkJCQkJIHhtbEVudW1lcmF0aW9uUHRyIHRyZWUpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWVsZW1lbnREZWNsCQkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGludCB0eXBlLAogCQkJCQkJIHhtbEVsZW1lbnRDb250ZW50UHRyIGNvbnRlbnQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCW5vdGF0aW9uRGVjbAkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpwdWJsaWNJZCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpzeXN0ZW1JZCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJdW5wYXJzZWRFbnRpdHlEZWNsCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHVibGljSWQsCkBAIC0xMTQsODMgKzExMiw4MyBAQAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5vdGF0aW9uTmFtZSk7CiAKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlzdGFydERvY3VtZW50CQkJKHZvaWQgKmN0eCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJZW5kRG9jdW1lbnQJCQkodm9pZCAqY3R4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlhdHRyaWJ1dGUJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmZ1bGxuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlzdGFydEVsZW1lbnQJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmZ1bGxuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKiphdHRzKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQllbmRFbGVtZW50CQkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlyZWZlcmVuY2UJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWNoYXJhY3RlcnMJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmNoLAogCQkJCQkJIGludCBsZW4pOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWlnbm9yYWJsZVdoaXRlc3BhY2UJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqY2gsCiAJCQkJCQkgaW50IGxlbik7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJcHJvY2Vzc2luZ0luc3RydWN0aW9uCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnRhcmdldCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpkYXRhKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlnbG9iYWxOYW1lc3BhY2UJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmhyZWYsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQlzZXROYW1lc3BhY2UJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxOc1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTnNQdHIKIAkJZ2V0TmFtZXNwYWNlCQkJKHZvaWQgKmN0eCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCWNoZWNrTmFtZXNwYWNlCQkJKHZvaWQgKmN0eCwKIAkJCQkJCSB4bWxDaGFyICpuYW1lU3BhY2UpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCW5hbWVzcGFjZURlY2wJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmhyZWYsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQljb21tZW50CQkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWNkYXRhQmxvY2sJCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkJIGludCBsZW4pOwogCiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWluaXR4bWxEZWZhdWx0U0FYSGFuZGxlcgkoeG1sU0FYSGFuZGxlclYxICpoZGxyLAogCQkJCQkJIGludCB3YXJuaW5nKTsKICNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJaW5pdGh0bWxEZWZhdWx0U0FYSGFuZGxlcgkoeG1sU0FYSGFuZGxlclYxICpoZGxyKTsKICNlbmRpZgogI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL1NBWDIuaCBiL2luY2x1ZGUvbGlieG1sL1NBWDIuaAppbmRleCA4ZTliMGI5Li40YzRlY2NlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9TQVgyLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvU0FYMi5oCkBAIC0xMiw2MyArMTIsNjEgQEAKICNpZm5kZWYgX19YTUxfU0FYMl9IX18KICNkZWZpbmUgX19YTUxfU0FYMl9IX18KIAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQl4bWxTQVgyR2V0UHVibGljSWQJCSh2b2lkICpjdHgpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCXhtbFNBWDJHZXRTeXN0ZW1JZAkJKHZvaWQgKmN0eCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgyU2V0RG9jdW1lbnRMb2NhdG9yCSh2b2lkICpjdHgsCiAJCQkJCQkgeG1sU0FYTG9jYXRvclB0ciBsb2MpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU0FYMkdldExpbmVOdW1iZXIJCSh2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNBWDJHZXRDb2x1bW5OdW1iZXIJCSh2b2lkICpjdHgpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU0FYMklzU3RhbmRhbG9uZQkJKHZvaWQgKmN0eCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU0FYMkhhc0ludGVybmFsU3Vic2V0CSh2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNBWDJIYXNFeHRlcm5hbFN1YnNldAkodm9pZCAqY3R4KTsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkludGVybmFsU3Vic2V0CQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqRXh0ZXJuYWxJRCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpTeXN0ZW1JRCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgyRXh0ZXJuYWxTdWJzZXQJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlEKTsKLVhNTFBVQkZVTiB4bWxFbnRpdHlQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEVudGl0eVB0cgogCQl4bWxTQVgyR2V0RW50aXR5CQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIHhtbEVudGl0eVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRW50aXR5UHRyCiAJCXhtbFNBWDJHZXRQYXJhbWV0ZXJFbnRpdHkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKLVhNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIKIAkJeG1sU0FYMlJlc29sdmVFbnRpdHkJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHVibGljSWQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqc3lzdGVtSWQpOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgyRW50aXR5RGVjbAkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGludCB0eXBlLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnB1YmxpY0lkLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnN5c3RlbUlkLAogCQkJCQkJIHhtbENoYXIgKmNvbnRlbnQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkF0dHJpYnV0ZURlY2wJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqZWxlbSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpmdWxsbmFtZSwKQEAgLTc2LDM4ICs3NCwzOCBAQAogCQkJCQkJIGludCBkZWYsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqZGVmYXVsdFZhbHVlLAogCQkJCQkJIHhtbEVudW1lcmF0aW9uUHRyIHRyZWUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkVsZW1lbnREZWNsCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgaW50IHR5cGUsCiAJCQkJCQkgeG1sRWxlbWVudENvbnRlbnRQdHIgY29udGVudCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgyTm90YXRpb25EZWNsCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHVibGljSWQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqc3lzdGVtSWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMlVucGFyc2VkRW50aXR5RGVjbAkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHVibGljSWQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqc3lzdGVtSWQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbm90YXRpb25OYW1lKTsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMlN0YXJ0RG9jdW1lbnQJCSh2b2lkICpjdHgpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkVuZERvY3VtZW50CQkodm9pZCAqY3R4KTsKICNpZiBkZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkgfHwgXAogICAgIGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9MRUdBQ1lfRU5BQkxFRCkKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFNBWDJTdGFydEVsZW1lbnQJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqZnVsbG5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqKmF0dHMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkVuZEVsZW1lbnQJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCBvciBMSUJYTUxfSFRNTF9FTkFCTEVEIG9yIExJQlhNTF9MRUdBQ1lfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMlN0YXJ0RWxlbWVudE5zCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmxvY2FsbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgsCkBAIC0xMTcsNTQgKzExNSw1NSBAQAogCQkJCQkJIGludCBuYl9hdHRyaWJ1dGVzLAogCQkJCQkJIGludCBuYl9kZWZhdWx0ZWQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqKmF0dHJpYnV0ZXMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkVuZEVsZW1lbnROcwkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpsb2NhbG5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKlVSSSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgyUmVmZXJlbmNlCQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMkNoYXJhY3RlcnMJCSh2b2lkICpjdHgsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqY2gsCiAJCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgySWdub3JhYmxlV2hpdGVzcGFjZQkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmNoLAogCQkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU0FYMlByb2Nlc3NpbmdJbnN0cnVjdGlvbgkodm9pZCAqY3R4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnRhcmdldCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpkYXRhKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFNBWDJDb21tZW50CQkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTQVgyQ0RhdGFCbG9jawkJKHZvaWQgKmN0eCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSwKIAkJCQkJCSBpbnQgbGVuKTsKIAogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU0FYRGVmYXVsdFZlcnNpb24JCShpbnQgdmVyc2lvbik7CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU0FYVmVyc2lvbgkJCSh4bWxTQVhIYW5kbGVyICpoZGxyLAogCQkJCQkJIGludCB2ZXJzaW9uKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFNBWDJJbml0RGVmYXVsdFNBWEhhbmRsZXIgICAgKHhtbFNBWEhhbmRsZXIgKmhkbHIsCiAJCQkJCQkgaW50IHdhcm5pbmcpOwogI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFNBWDJJbml0SHRtbERlZmF1bHRTQVhIYW5kbGVyKHhtbFNBWEhhbmRsZXIgKmhkbHIpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCWh0bWxEZWZhdWx0U0FYSGFuZGxlckluaXQJKHZvaWQpOwogI2VuZGlmCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0CSh2b2lkKTsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvYzE0bi5oIGIvaW5jbHVkZS9saWJ4bWwvYzE0bi5oCmluZGV4IGFmOTNkZTYuLmY5YmRmOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL2MxNG4uaAorKysgYi9pbmNsdWRlL2xpYnhtbC9jMTRuLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogCiAjaWZkZWYgTElCWE1MX0MxNE5fRU5BQkxFRAotI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAogCiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KQEAgLTY2LDcgKzY1LDcgQEAKICAgICBYTUxfQzE0Tl8xXzEgICAgICAgICAgICA9IDIgICAgIC8qIEMxNE4gMS4xIHNwZWMgKi8KIH0geG1sQzE0Tk1vZGU7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxDMTRORG9jU2F2ZVRvCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVNldFB0ciBub2RlcywKIAkJCQkJIGludCBtb2RlLCAvKiBhIHhtbEMxNE5Nb2RlICovCkBAIC03NCw3ICs3Myw3IEBACiAJCQkJCSBpbnQgd2l0aF9jb21tZW50cywKIAkJCQkJIHhtbE91dHB1dEJ1ZmZlclB0ciBidWYpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQzE0TkRvY0R1bXBNZW1vcnkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlU2V0UHRyIG5vZGVzLAogCQkJCQkgaW50IG1vZGUsIC8qIGEgeG1sQzE0Tk1vZGUgKi8KQEAgLTgyLDcgKzgxLDcgQEAKIAkJCQkJIGludCB3aXRoX2NvbW1lbnRzLAogCQkJCQkgeG1sQ2hhciAqKmRvY190eHRfcHRyKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbEMxNE5Eb2NTYXZlCQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVTZXRQdHIgbm9kZXMsCiAJCQkJCSBpbnQgbW9kZSwgLyogYSB4bWxDMTROTW9kZSAqLwpAQCAtMTA5LDcgKzEwOCw3IEBACiAJCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJCSB4bWxOb2RlUHRyIHBhcmVudCk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxDMTRORXhlY3V0ZQkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxDMTROSXNWaXNpYmxlQ2FsbGJhY2sgaXNfdmlzaWJsZV9jYWxsYmFjaywKIAkJCQkJIHZvaWQqIHVzZXJfZGF0YSwKQEAgLTEyMiw3ICsxMjEsNiBAQAogfQogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKLSNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KICNlbmRpZiAvKiBMSUJYTUxfQzE0Tl9FTkFCTEVEICovCiAjZW5kaWYgLyogX19YTUxfQzE0Tl9IX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGIvaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oCmluZGV4IDI2YjE3OGQuLjAyZmE3YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL2NhdGFsb2cuaAorKysgYi9pbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmgKQEAgLTY2LDExMyArNjYsMTEzIEBACiAvKgogICogT3BlcmF0aW9ucyBvbiBhIGdpdmVuIGNhdGFsb2cuCiAgKi8KLVhNTFBVQkZVTiB4bWxDYXRhbG9nUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDYXRhbG9nUHRyCiAJCXhtbE5ld0NhdGFsb2cJCShpbnQgc2dtbCk7Ci1YTUxQVUJGVU4geG1sQ2F0YWxvZ1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2F0YWxvZ1B0cgogCQl4bWxMb2FkQUNhdGFsb2cJCShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci1YTUxQVUJGVU4geG1sQ2F0YWxvZ1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2F0YWxvZ1B0cgogCQl4bWxMb2FkU0dNTFN1cGVyQ2F0YWxvZwkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbENvbnZlcnRTR01MQ2F0YWxvZwkoeG1sQ2F0YWxvZ1B0ciBjYXRhbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQUNhdGFsb2dBZGQJCSh4bWxDYXRhbG9nUHRyIGNhdGFsLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdHlwZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm9yaWcsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpyZXBsYWNlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxBQ2F0YWxvZ1JlbW92ZQkoeG1sQ2F0YWxvZ1B0ciBjYXRhbCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxBQ2F0YWxvZ1Jlc29sdmUJKHhtbENhdGFsb2dQdHIgY2F0YWwsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwdWJJRCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpzeXNJRCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sQUNhdGFsb2dSZXNvbHZlU3lzdGVtKHhtbENhdGFsb2dQdHIgY2F0YWwsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpzeXNJRCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sQUNhdGFsb2dSZXNvbHZlUHVibGljKHhtbENhdGFsb2dQdHIgY2F0YWwsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwdWJJRCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sQUNhdGFsb2dSZXNvbHZlVVJJCSh4bWxDYXRhbG9nUHRyIGNhdGFsLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqVVJJKTsKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEFDYXRhbG9nRHVtcAkJKHhtbENhdGFsb2dQdHIgY2F0YWwsCiAJCQkJCSBGSUxFICpvdXQpOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZUNhdGFsb2cJCSh4bWxDYXRhbG9nUHRyIGNhdGFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxDYXRhbG9nSXNFbXB0eQkoeG1sQ2F0YWxvZ1B0ciBjYXRhbCk7CiAKIC8qCiAgKiBHbG9iYWwgb3BlcmF0aW9ucy4KICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sSW5pdGlhbGl6ZUNhdGFsb2cJKHZvaWQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbExvYWRDYXRhbG9nCQkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTG9hZENhdGFsb2dzCQkoY29uc3QgY2hhciAqcGF0aHMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQ2F0YWxvZ0NsZWFudXAJKHZvaWQpOwogI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQ2F0YWxvZ0R1bXAJCShGSUxFICpvdXQpOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbENhdGFsb2dSZXNvbHZlCShjb25zdCB4bWxDaGFyICpwdWJJRCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpzeXNJRCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sQ2F0YWxvZ1Jlc29sdmVTeXN0ZW0JKGNvbnN0IHhtbENoYXIgKnN5c0lEKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxDYXRhbG9nUmVzb2x2ZVB1YmxpYwkoY29uc3QgeG1sQ2hhciAqcHViSUQpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbENhdGFsb2dSZXNvbHZlVVJJCShjb25zdCB4bWxDaGFyICpVUkkpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbENhdGFsb2dBZGQJCShjb25zdCB4bWxDaGFyICp0eXBlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqb3JpZywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnJlcGxhY2UpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbENhdGFsb2dSZW1vdmUJKGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxQYXJzZUNhdGFsb2dGaWxlCShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQ2F0YWxvZ0NvbnZlcnQJKHZvaWQpOwogCiAvKgogICogU3RyaWN0bHkgbWluaW1hbCBpbnRlcmZhY2VzIGZvciBwZXItZG9jdW1lbnQgY2F0YWxvZ3MgdXNlZAogICogYnkgdGhlIHBhcnNlci4KICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQ2F0YWxvZ0ZyZWVMb2NhbAkodm9pZCAqY2F0YWxvZ3MpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZCAqCiAJCXhtbENhdGFsb2dBZGRMb2NhbAkodm9pZCAqY2F0YWxvZ3MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpVUkwpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbENhdGFsb2dMb2NhbFJlc29sdmUJKHZvaWQgKmNhdGFsb2dzLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqcHViSUQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqc3lzSUQpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbENhdGFsb2dMb2NhbFJlc29sdmVVUkkodm9pZCAqY2F0YWxvZ3MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpVUkkpOwogLyoKICAqIFByZWZlcmVuY2Ugc2V0dGluZ3MuCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxDYXRhbG9nU2V0RGVidWcJKGludCBsZXZlbCk7Ci1YTUxQVUJGVU4geG1sQ2F0YWxvZ1ByZWZlciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2F0YWxvZ1ByZWZlcgogCQl4bWxDYXRhbG9nU2V0RGVmYXVsdFByZWZlcih4bWxDYXRhbG9nUHJlZmVyIHByZWZlcik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxDYXRhbG9nU2V0RGVmYXVsdHMJKHhtbENhdGFsb2dBbGxvdyBhbGxvdyk7Ci1YTUxQVUJGVU4geG1sQ2F0YWxvZ0FsbG93IFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDYXRhbG9nQWxsb3cKIAkJeG1sQ2F0YWxvZ0dldERlZmF1bHRzCSh2b2lkKTsKIAogCiAvKiBERVBSRUNBVEVEIGludGVyZmFjZXMgKi8KLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQl4bWxDYXRhbG9nR2V0U3lzdGVtCShjb25zdCB4bWxDaGFyICpzeXNJRCk7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJeG1sQ2F0YWxvZ0dldFB1YmxpYwkoY29uc3QgeG1sQ2hhciAqcHViSUQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL2NodmFsaWQuaCBiL2luY2x1ZGUvbGlieG1sL2NodmFsaWQuaAppbmRleCBmYjQzMDE2Li44MjI1Yzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oCkBAIC01MSw3ICs1MSw3IEBACiAvKioKICAqIFJhbmdlIGNoZWNraW5nIHJvdXRpbmUKICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbENoYXJJblJhbmdlKHVuc2lnbmVkIGludCB2YWwsIGNvbnN0IHhtbENoUmFuZ2VHcm91cCAqZ3JvdXApOwogCiAKQEAgLTIwNywyMSArMjA3LDIxIEBACiAjZGVmaW5lIHhtbElzUHViaWRDaGFyUShjKQkoKChjKSA8IDB4MTAwKSA/IFwKIAkJCQkgeG1sSXNQdWJpZENoYXJfY2goKGMpKSA6IDApCiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxJc0Jhc2VDaGFyKHVuc2lnbmVkIGludCBjaCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sSXNCbGFuayh1bnNpZ25lZCBpbnQgY2gpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbElzQ2hhcih1bnNpZ25lZCBpbnQgY2gpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbElzQ29tYmluaW5nKHVuc2lnbmVkIGludCBjaCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sSXNEaWdpdCh1bnNpZ25lZCBpbnQgY2gpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbElzRXh0ZW5kZXIodW5zaWduZWQgaW50IGNoKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxJc0lkZW9ncmFwaGljKHVuc2lnbmVkIGludCBjaCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sSXNQdWJpZENoYXIodW5zaWduZWQgaW50IGNoKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oIGIvaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaAppbmRleCA1YjNiZTEzLi44Mjc0Njg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oCisrKyBiL2luY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmgKQEAgLTI1LDM5ICsyNSwzOSBAQAogLyoKICAqIFRoZSBzdGFuZGFyZCBEdW1wIHJvdXRpbmVzLgogICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbERlYnVnRHVtcFN0cmluZwkoRklMRSAqb3V0cHV0LAogCQkJCSBjb25zdCB4bWxDaGFyICpzdHIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxEZWJ1Z0R1bXBBdHRyCShGSUxFICpvdXRwdXQsCiAJCQkJIHhtbEF0dHJQdHIgYXR0ciwKIAkJCQkgaW50IGRlcHRoKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sRGVidWdEdW1wQXR0ckxpc3QJKEZJTEUgKm91dHB1dCwKIAkJCQkgeG1sQXR0clB0ciBhdHRyLAogCQkJCSBpbnQgZGVwdGgpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxEZWJ1Z0R1bXBPbmVOb2RlCShGSUxFICpvdXRwdXQsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkgaW50IGRlcHRoKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sRGVidWdEdW1wTm9kZQkoRklMRSAqb3V0cHV0LAogCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJIGludCBkZXB0aCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbERlYnVnRHVtcE5vZGVMaXN0CShGSUxFICpvdXRwdXQsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkgaW50IGRlcHRoKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sRGVidWdEdW1wRG9jdW1lbnRIZWFkKEZJTEUgKm91dHB1dCwKIAkJCQkgeG1sRG9jUHRyIGRvYyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbERlYnVnRHVtcERvY3VtZW50CShGSUxFICpvdXRwdXQsCiAJCQkJIHhtbERvY1B0ciBkb2MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxEZWJ1Z0R1bXBEVEQJCShGSUxFICpvdXRwdXQsCiAJCQkJIHhtbER0ZFB0ciBkdGQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxEZWJ1Z0R1bXBFbnRpdGllcwkoRklMRSAqb3V0cHV0LAogCQkJCSB4bWxEb2NQdHIgZG9jKTsKIApAQCAtNjcsNyArNjcsNyBAQAogICoJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxEZWJ1Z0NoZWNrRG9jdW1lbnQJKEZJTEUgKiBvdXRwdXQsCiAJCQkJIHhtbERvY1B0ciBkb2MpOwogCkBAIC03NywxMiArNzcsMTIgQEAKICAqCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxMc09uZU5vZGUJCShGSUxFICpvdXRwdXQsIHhtbE5vZGVQdHIgbm9kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxMc0NvdW50Tm9kZQkJKHhtbE5vZGVQdHIgbm9kZSk7CiAKLVhNTFBVQkZVTiBjb25zdCBjaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IGNoYXIgKgogCXhtbEJvb2xUb1RleHQJCShpbnQgYm9vbHZhbCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzYsNjMgKzEzNiw2MyBAQAogCQkJICAgICB4bWxOb2RlUHRyIG5vZGUsCiAJCQkgICAgIHhtbE5vZGVQdHIgbm9kZTIpOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbFNoZWxsUHJpbnRYUGF0aEVycm9yCShpbnQgZXJyb3JUeXBlLAogCQkJCSBjb25zdCBjaGFyICphcmcpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxTaGVsbFByaW50WFBhdGhSZXN1bHQoeG1sWFBhdGhPYmplY3RQdHIgbGlzdCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxTaGVsbExpc3QJCSh4bWxTaGVsbEN0eHRQdHIgY3R4dCwKIAkJCQkgY2hhciAqYXJnLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZTIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sU2hlbGxCYXNlCQkoeG1sU2hlbGxDdHh0UHRyIGN0eHQsCiAJCQkJIGNoYXIgKmFyZywKIAkJCQkgeG1sTm9kZVB0ciBub2RlLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbFNoZWxsRGlyCQkoeG1sU2hlbGxDdHh0UHRyIGN0eHQsCiAJCQkJIGNoYXIgKmFyZywKIAkJCQkgeG1sTm9kZVB0ciBub2RlLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbFNoZWxsTG9hZAkJKHhtbFNoZWxsQ3R4dFB0ciBjdHh0LAogCQkJCSBjaGFyICpmaWxlbmFtZSwKIAkJCQkgeG1sTm9kZVB0ciBub2RlLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUyKTsKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sU2hlbGxQcmludE5vZGUJKHhtbE5vZGVQdHIgbm9kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxTaGVsbENhdAkJKHhtbFNoZWxsQ3R4dFB0ciBjdHh0LAogCQkJCSBjaGFyICphcmcsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkgeG1sTm9kZVB0ciBub2RlMik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxTaGVsbFdyaXRlCQkoeG1sU2hlbGxDdHh0UHRyIGN0eHQsCiAJCQkJIGNoYXIgKmZpbGVuYW1lLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZTIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sU2hlbGxTYXZlCQkoeG1sU2hlbGxDdHh0UHRyIGN0eHQsCiAJCQkJIGNoYXIgKmZpbGVuYW1lLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZTIpOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogI2lmZGVmIExJQlhNTF9WQUxJRF9FTkFCTEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxTaGVsbFZhbGlkYXRlCSh4bWxTaGVsbEN0eHRQdHIgY3R4dCwKIAkJCQkgY2hhciAqZHRkLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJIHhtbE5vZGVQdHIgbm9kZTIpOwogI2VuZGlmIC8qIExJQlhNTF9WQUxJRF9FTkFCTEVEICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxTaGVsbER1CQkoeG1sU2hlbGxDdHh0UHRyIGN0eHQsCiAJCQkJIGNoYXIgKmFyZywKIAkJCQkgeG1sTm9kZVB0ciB0cmVlLAogCQkJCSB4bWxOb2RlUHRyIG5vZGUyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbFNoZWxsUHdkCQkoeG1sU2hlbGxDdHh0UHRyIGN0eHQsCiAJCQkJIGNoYXIgKmJ1ZmZlciwKIAkJCQkgeG1sTm9kZVB0ciBub2RlLApAQCAtMjAxLDcgKzIwMSw3IEBACiAvKgogICogVGhlIFNoZWxsIGludGVyZmFjZS4KICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxTaGVsbAkJKHhtbERvY1B0ciBkb2MsCiAJCQkJIGNoYXIgKmZpbGVuYW1lLAogCQkJCSB4bWxTaGVsbFJlYWRsaW5lRnVuYyBpbnB1dCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL2RpY3QuaCBiL2luY2x1ZGUvbGlieG1sL2RpY3QuaAppbmRleCA5MWY3NGQxLi4yMmFhM2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9kaWN0LmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvZGljdC5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTI4LDUxICsyOSw1MSBAQAogICogSW5pdGlhbGl6ZXIKICAqLwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCAgeG1sSW5pdGlhbGl6ZURpY3Qodm9pZCk7CitYTUxQVUJGVU4gaW50ICB4bWxJbml0aWFsaXplRGljdCh2b2lkKTsKIAogLyoKICAqIENvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLgogICovCi1YTUxQVUJGVU4geG1sRGljdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRGljdFB0cgogCQkJeG1sRGljdENyZWF0ZQkodm9pZCk7Ci1YTUxQVUJGVU4gc2l6ZV90IFhNTENBTEwKK1hNTFBVQkZVTiBzaXplX3QKIAkJCXhtbERpY3RTZXRMaW1pdAkoeG1sRGljdFB0ciBkaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGltaXQpOwotWE1MUFVCRlVOIHNpemVfdCBYTUxDQUxMCitYTUxQVUJGVU4gc2l6ZV90CiAJCQl4bWxEaWN0R2V0VXNhZ2UgKHhtbERpY3RQdHIgZGljdCk7Ci1YTUxQVUJGVU4geG1sRGljdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRGljdFB0cgogCQkJeG1sRGljdENyZWF0ZVN1Yih4bWxEaWN0UHRyIHN1Yik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbERpY3RSZWZlcmVuY2UoeG1sRGljdFB0ciBkaWN0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxEaWN0RnJlZQkoeG1sRGljdFB0ciBkaWN0KTsKIAogLyoKICAqIExvb2t1cCBvZiBlbnRyeSBpbiB0aGUgZGljdGlvbmFyeS4KICAqLwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCQl4bWxEaWN0TG9va3VwCSh4bWxEaWN0UHRyIGRpY3QsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJCXhtbERpY3RFeGlzdHMJKHhtbERpY3RQdHIgZGljdCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKTsKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQkJeG1sRGljdFFMb29rdXAJKHhtbERpY3RQdHIgZGljdCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxEaWN0T3ducwkoeG1sRGljdFB0ciBkaWN0LAogCQkJCQkgY29uc3QgeG1sQ2hhciAqc3RyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sRGljdFNpemUJKHhtbERpY3RQdHIgZGljdCk7CiAKIC8qCiAgKiBDbGVhbnVwIGZ1bmN0aW9uCiAgKi8KIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogICAgICAgICAgICAgICAgICAgICAgICAgeG1sRGljdENsZWFudXAgICh2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGIvaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaAppbmRleCAzODFlMTg4Li44NTk0Y2ZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL2VuY29kaW5nLmgKQEAgLTMyLDYgKzMyLDE1IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCit0eXBlZGVmIGVudW0geworICAgIFhNTF9FTkNfRVJSX1NVQ0NFU1MgICAgID0gIDAsCisgICAgWE1MX0VOQ19FUlJfU1BBQ0UgICAgICAgPSAtMSwKKyAgICBYTUxfRU5DX0VSUl9JTlBVVCAgICAgICA9IC0yLAorICAgIFhNTF9FTkNfRVJSX1BBUlRJQUwgICAgID0gLTMsCisgICAgWE1MX0VOQ19FUlJfSU5URVJOQUwgICAgPSAtNCwKKyAgICBYTUxfRU5DX0VSUl9NRU1PUlkgICAgICA9IC01Cit9IHhtbENoYXJFbmNFcnJvcjsKKwogLyoKICAqIHhtbENoYXJFbmNvZGluZzoKICAqCkBAIC0xNDIsMzAgKzE1MSwyMiBAQAogI2VuZGlmIC8qIExJQlhNTF9JQ1VfRU5BQkxFRCAqLwogfTsKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCiAvKgogICogSW50ZXJmYWNlcyBmb3IgZW5jb2RpbmcgaGFuZGxlcnMuCiAgKi8KIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbEluaXRDaGFyRW5jb2RpbmdIYW5kbGVycwkodm9pZCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxDbGVhbnVwQ2hhckVuY29kaW5nSGFuZGxlcnMJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxSZWdpc3RlckNoYXJFbmNvZGluZ0hhbmRsZXIJKHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgaGFuZGxlcik7Ci1YTUxQVUJGVU4geG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhckVuY29kaW5nSGFuZGxlclB0cgogCXhtbEdldENoYXJFbmNvZGluZ0hhbmRsZXIJKHhtbENoYXJFbmNvZGluZyBlbmMpOwotWE1MUFVCRlVOIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIKIAl4bWxGaW5kQ2hhckVuY29kaW5nSGFuZGxlcgkoY29uc3QgY2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhckVuY29kaW5nSGFuZGxlclB0cgogCXhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIJKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmdJbnB1dEZ1bmMgaW5wdXQsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmdPdXRwdXRGdW5jIG91dHB1dCk7CkBAIC0xNzMsNTQgKzE3NCw1NiBAQAogLyoKICAqIEludGVyZmFjZXMgZm9yIGVuY29kaW5nIG5hbWVzIGFuZCBhbGlhc2VzLgogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxBZGRFbmNvZGluZ0FsaWFzCQkoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IGNoYXIgKmFsaWFzKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbERlbEVuY29kaW5nQWxpYXMJCShjb25zdCBjaGFyICphbGlhcyk7Ci1YTUxQVUJGVU4gY29uc3QgY2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCBjaGFyICoKIAl4bWxHZXRFbmNvZGluZ0FsaWFzCQkoY29uc3QgY2hhciAqYWxpYXMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxDbGVhbnVwRW5jb2RpbmdBbGlhc2VzCSh2b2lkKTsKLVhNTFBVQkZVTiB4bWxDaGFyRW5jb2RpbmcgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXJFbmNvZGluZwogCXhtbFBhcnNlQ2hhckVuY29kaW5nCQkoY29uc3QgY2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4gY29uc3QgY2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCBjaGFyICoKIAl4bWxHZXRDaGFyRW5jb2RpbmdOYW1lCQkoeG1sQ2hhckVuY29kaW5nIGVuYyk7CiAKIC8qCiAgKiBJbnRlcmZhY2VzIGRpcmVjdGx5IHVzZWQgYnkgdGhlIHBhcnNlcnMuCiAgKi8KLVhNTFBVQkZVTiB4bWxDaGFyRW5jb2RpbmcgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXJFbmNvZGluZwogCXhtbERldGVjdENoYXJFbmNvZGluZwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAogCQkJCQkgaW50IGxlbik7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorc3RydWN0IF94bWxCdWZmZXI7CitYTUxQVUJGVU4gaW50CiAJeG1sQ2hhckVuY091dEZ1bmMJCSh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyICpoYW5kbGVyLAotCQkJCQkgeG1sQnVmZmVyUHRyIG91dCwKLQkJCQkJIHhtbEJ1ZmZlclB0ciBpbik7CisJCQkJCSBzdHJ1Y3QgX3htbEJ1ZmZlciAqb3V0LAorCQkJCQkgc3RydWN0IF94bWxCdWZmZXIgKmluKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sQ2hhckVuY0luRnVuYwkJKHhtbENoYXJFbmNvZGluZ0hhbmRsZXIgKmhhbmRsZXIsCi0JCQkJCSB4bWxCdWZmZXJQdHIgb3V0LAotCQkJCQkgeG1sQnVmZmVyUHRyIGluKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorCQkJCQkgc3RydWN0IF94bWxCdWZmZXIgKm91dCwKKwkJCQkJIHN0cnVjdCBfeG1sQnVmZmVyICppbik7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCXhtbENoYXJFbmNGaXJzdExpbmUJCSh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyICpoYW5kbGVyLAotCQkJCQkgeG1sQnVmZmVyUHRyIG91dCwKLQkJCQkJIHhtbEJ1ZmZlclB0ciBpbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKKwkJCQkJIHN0cnVjdCBfeG1sQnVmZmVyICpvdXQsCisJCQkJCSBzdHJ1Y3QgX3htbEJ1ZmZlciAqaW4pOworWE1MUFVCRlVOIGludAogCXhtbENoYXJFbmNDbG9zZUZ1bmMJCSh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyICpoYW5kbGVyKTsKIAogLyoKICAqIEV4cG9ydCBhIGZldyB1c2VmdWwgZnVuY3Rpb25zCiAgKi8KICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCVVURjhUb2lzb2xhdDEJCQkodW5zaWduZWQgY2hhciAqb3V0LAogCQkJCQkgaW50ICpvdXRsZW4sCiAJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKIAkJCQkJIGludCAqaW5sZW4pOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJaXNvbGF0MVRvVVRGOAkJCSh1bnNpZ25lZCBjaGFyICpvdXQsCiAJCQkJCSBpbnQgKm91dGxlbiwKIAkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaCBiL2luY2x1ZGUvbGlieG1sL2VudGl0aWVzLmgKaW5kZXggMmI2MGQ5ZS4uZjY3OTM3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaAorKysgYi9pbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oCkBAIC0xMiw3ICsxMiw5IEBACiAjZGVmaW5lIF9fWE1MX0VOVElUSUVTX0hfXwogCiAjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKyNkZWZpbmUgWE1MX1RSRUVfSU5URVJOQUxTCiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyN1bmRlZiBYTUxfVFJFRV9JTlRFUk5BTFMKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTU2LDEwICs1OCw4IEBACiAgICAgc3RydWN0IF94bWxFbnRpdHkgICAgICpuZXh0ZTsJLyogdW51c2VkICovCiAgICAgY29uc3QgeG1sQ2hhciAgICAgICAgICAgKlVSSTsJLyogdGhlIGZ1bGwgVVJJIGFzIGNvbXB1dGVkICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICBvd25lcjsJLyogZG9lcyB0aGUgZW50aXR5IG93biB0aGUgY2hpbGRyZW5zICovCi0gICAgaW50CQkJIGNoZWNrZWQ7CS8qIHdhcyB0aGUgZW50aXR5IGNvbnRlbnQgY2hlY2tlZCAqLwotCQkJCQkvKiB0aGlzIGlzIGFsc28gdXNlZCB0byBjb3VudCBlbnRpdGllcwotCQkJCQkgKiByZWZlcmVuY2VzIGRvbmUgZnJvbSB0aGF0IGVudGl0eQotCQkJCQkgKiBhbmQgaWYgaXQgY29udGFpbnMgJzwnICovCisgICAgaW50ICAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAgLyogdmFyaW91cyBmbGFncyAqLworICAgIHVuc2lnbmVkIGxvbmcgICBleHBhbmRlZFNpemU7ICAgICAgIC8qIGV4cGFuZGVkIHNpemUgKi8KIH07CiAKIC8qCkBAIC03Niw3MiArNzYsNzQgQEAKIAogI2lmZGVmIExJQlhNTF9MRUdBQ1lfRU5BQkxFRAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEluaXRpYWxpemVQcmVkZWZpbmVkRW50aXRpZXMJKHZvaWQpOwogI2VuZGlmIC8qIExJQlhNTF9MRUdBQ1lfRU5BQkxFRCAqLwogCi1YTUxQVUJGVU4geG1sRW50aXR5UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJCXhtbE5ld0VudGl0eQkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBpbnQgdHlwZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQpOwotWE1MUFVCRlVOIHhtbEVudGl0eVB0ciBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAorCQkJeG1sRnJlZUVudGl0eQkJKHhtbEVudGl0eVB0ciBlbnRpdHkpOworWE1MUFVCRlVOIHhtbEVudGl0eVB0cgogCQkJeG1sQWRkRG9jRW50aXR5CQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGludCB0eXBlLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKkV4dGVybmFsSUQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqU3lzdGVtSUQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqY29udGVudCk7Ci1YTUxQVUJGVU4geG1sRW50aXR5UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJCXhtbEFkZER0ZEVudGl0eQkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBpbnQgdHlwZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlELAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQpOwotWE1MUFVCRlVOIHhtbEVudGl0eVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRW50aXR5UHRyCiAJCQl4bWxHZXRQcmVkZWZpbmVkRW50aXR5CShjb25zdCB4bWxDaGFyICpuYW1lKTsKLVhNTFBVQkZVTiB4bWxFbnRpdHlQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEVudGl0eVB0cgogCQkJeG1sR2V0RG9jRW50aXR5CQkoY29uc3QgeG1sRG9jICpkb2MsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sRW50aXR5UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJCXhtbEdldER0ZEVudGl0eQkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sRW50aXR5UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJCXhtbEdldFBhcmFtZXRlckVudGl0eQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKICNpZmRlZiBMSUJYTUxfTEVHQUNZX0VOQUJMRUQKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJCXhtbEVuY29kZUVudGl0aWVzCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmlucHV0KTsKICNlbmRpZiAvKiBMSUJYTUxfTEVHQUNZX0VOQUJMRUQgKi8KLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQoeG1sRG9jUHRyIGRvYywKIAkJCQkJCSBjb25zdCB4bWxDaGFyICppbnB1dCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbEVuY29kZVNwZWNpYWxDaGFycwkoY29uc3QgeG1sRG9jICpkb2MsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqaW5wdXQpOwotWE1MUFVCRlVOIHhtbEVudGl0aWVzVGFibGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEVudGl0aWVzVGFibGVQdHIKIAkJCXhtbENyZWF0ZUVudGl0aWVzVGFibGUJKHZvaWQpOwogI2lmZGVmIExJQlhNTF9UUkVFX0VOQUJMRUQKLVhNTFBVQkZVTiB4bWxFbnRpdGllc1RhYmxlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnRpdGllc1RhYmxlUHRyCiAJCQl4bWxDb3B5RW50aXRpZXNUYWJsZQkoeG1sRW50aXRpZXNUYWJsZVB0ciB0YWJsZSk7CiAjZW5kaWYgLyogTElCWE1MX1RSRUVfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbEZyZWVFbnRpdGllc1RhYmxlCSh4bWxFbnRpdGllc1RhYmxlUHRyIHRhYmxlKTsKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxEdW1wRW50aXRpZXNUYWJsZQkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJCSB4bWxFbnRpdGllc1RhYmxlUHRyIHRhYmxlKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxEdW1wRW50aXR5RGVjbAkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJCSB4bWxFbnRpdHlQdHIgZW50KTsKICNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KICNpZmRlZiBMSUJYTUxfTEVHQUNZX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxDbGVhbnVwUHJlZGVmaW5lZEVudGl0aWVzKHZvaWQpOwogI2VuZGlmIC8qIExJQlhNTF9MRUdBQ1lfRU5BQkxFRCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggYi9pbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmgKaW5kZXggZDU3Y2NiMC4uOTJmNDEzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL2dsb2JhbHMuaApAQCAtMSw0OTYgKzEsMzggQEAKIC8qCiAgKiBTdW1tYXJ5OiBpbnRlcmZhY2UgZm9yIGFsbCBnbG9iYWwgdmFyaWFibGVzIG9mIHRoZSBsaWJyYXJ5Ci0gKiBEZXNjcmlwdGlvbjogYWxsIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFuZCB0aHJlYWQgaGFuZGxpbmcgZm9yCi0gKiAgICAgICAgICAgICAgdGhvc2UgdmFyaWFibGVzIGlzIGhhbmRsZWQgYnkgdGhpcyBtb2R1bGUuCi0gKgotICogVGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYnVpbGRfZ2xvYi5weQotICogYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIGZpbGUgZ2xvYmFsLmRhdGEKKyAqIERlc2NyaXB0aW9uOiBEZXByZWNhdGVkLCBkb24ndCB1c2UKICAqCiAgKiBDb3B5OiBTZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogQXV0aG9yOiBHYXJ5IFBlbm5pbmd0b24gPEdhcnkuUGVubmluZ3RvbkB1ay5zdW4uY29tPiwgRGFuaWVsIFZlaWxsYXJkCiAgKi8KIAogI2lmbmRlZiBfX1hNTF9HTE9CQUxTX0gKICNkZWZpbmUgX19YTUxfR0xPQkFMU19ICiAKICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorCisvKgorICogVGhpcyBmaWxlIHdhcyByZXF1aXJlZCB0byBhY2Nlc3MgZ2xvYmFsIHZhcmlhYmxlcyB1bnRpbCB2ZXJzaW9uIHYyLjEyLjAuCisgKgorICogVGhlc2UgaW5jbHVkZXMgYXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICovCisjaW5jbHVkZSA8bGlieG1sL0hUTUxwYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jaW5jbHVkZSA8bGlieG1sL1NBWDIuaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGlieG1sL3htbElPLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHNhdmUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMIHhtbEluaXRHbG9iYWxzKHZvaWQpOwotWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sQ2xlYW51cEdsb2JhbHModm9pZCk7Ci0KLS8qKgotICogeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmM6Ci0gKiBAVVJJOiB0aGUgVVJJIHRvIHJlYWQgZnJvbQotICogQGVuYzogdGhlIHJlcXVlc3RlZCBzb3VyY2UgZW5jb2RpbmcKLSAqCi0gKiBTaWduYXR1cmUgZm9yIHRoZSBmdW5jdGlvbiBkb2luZyB0aGUgbG9va3VwIGZvciBhIHN1aXRhYmxlIGlucHV0IG1ldGhvZAotICogY29ycmVzcG9uZGluZyB0byBhbiBVUkkuCi0gKgotICogUmV0dXJucyB0aGUgbmV3IHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBOVUxMIGlmIG5vCi0gKiAgICAgICAgIG1ldGhvZCB3YXMgZm91bmQuCi0gKi8KLXR5cGVkZWYgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgKCp4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYykgKGNvbnN0IGNoYXIgKlVSSSwKLQkJCQkJCQkJCSAgIHhtbENoYXJFbmNvZGluZyBlbmMpOwotCi0KLS8qKgotICogeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jOgotICogQFVSSTogdGhlIFVSSSB0byB3cml0ZSB0bwotICogQGVuYzogdGhlIHJlcXVlc3RlZCB0YXJnZXQgZW5jb2RpbmcKLSAqCi0gKiBTaWduYXR1cmUgZm9yIHRoZSBmdW5jdGlvbiBkb2luZyB0aGUgbG9va3VwIGZvciBhIHN1aXRhYmxlIG91dHB1dCBtZXRob2QKLSAqIGNvcnJlc3BvbmRpbmcgdG8gYW4gVVJJLgotICoKLSAqIFJldHVybnMgdGhlIG5ldyB4bWxPdXRwdXRCdWZmZXJQdHIgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIE5VTEwgaWYgbm8KLSAqICAgICAgICAgbWV0aG9kIHdhcyBmb3VuZC4KLSAqLwotdHlwZWRlZiB4bWxPdXRwdXRCdWZmZXJQdHIgKCp4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMpIChjb25zdCBjaGFyICpVUkksCi0JCQkJCQkJCSB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIsCi0JCQkJCQkJCSBpbnQgY29tcHJlc3Npb24pOwotCi1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMKLVhNTENBTEwgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIGZ1bmMpOwotWE1MUFVCRlVOIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYwotWE1MQ0FMTCB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQgKHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyBmdW5jKTsKLQotLyoKLSAqIEV4dGVybmFsbHkgZ2xvYmFsIHN5bWJvbHMgd2hpY2ggbmVlZCB0byBiZSBwcm90ZWN0ZWQgZm9yIGJhY2t3YXJkcwotICogY29tcGF0aWJpbGl0eSBzdXBwb3J0LgotICovCi0KLSN1bmRlZglodG1sRGVmYXVsdFNBWEhhbmRsZXIKLSN1bmRlZglvbGRYTUxXRGNvbXBhdGliaWxpdHkKLSN1bmRlZgl4bWxCdWZmZXJBbGxvY1NjaGVtZQotI3VuZGVmCXhtbERlZmF1bHRCdWZmZXJTaXplCi0jdW5kZWYJeG1sRGVmYXVsdFNBWEhhbmRsZXIKLSN1bmRlZgl4bWxEZWZhdWx0U0FYTG9jYXRvcgotI3VuZGVmCXhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZQotI3VuZGVmCXhtbEZyZWUKLSN1bmRlZgl4bWxHZW5lcmljRXJyb3IKLSN1bmRlZgl4bWxTdHJ1Y3R1cmVkRXJyb3IKLSN1bmRlZgl4bWxHZW5lcmljRXJyb3JDb250ZXh0Ci0jdW5kZWYJeG1sU3RydWN0dXJlZEVycm9yQ29udGV4dAotI3VuZGVmCXhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlCi0jdW5kZWYJeG1sSW5kZW50VHJlZU91dHB1dAotI3VuZGVmICB4bWxUcmVlSW5kZW50U3RyaW5nCi0jdW5kZWYJeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZQotI3VuZGVmCXhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlCi0jdW5kZWYJeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZQotI3VuZGVmCXhtbE1hbGxvYwotI3VuZGVmCXhtbE1hbGxvY0F0b21pYwotI3VuZGVmCXhtbE1lbVN0cmR1cAotI3VuZGVmCXhtbFBhcnNlckRlYnVnRW50aXRpZXMKLSN1bmRlZgl4bWxQYXJzZXJWZXJzaW9uCi0jdW5kZWYJeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUKLSN1bmRlZgl4bWxSZWFsbG9jCi0jdW5kZWYJeG1sU2F2ZU5vRW1wdHlUYWdzCi0jdW5kZWYJeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlCi0jdW5kZWYgIHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZQotI3VuZGVmICB4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZQotI3VuZGVmICB4bWxMYXN0RXJyb3IKLSN1bmRlZiAgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlCi0jdW5kZWYgIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUKLQotLyoqCi0gKiB4bWxSZWdpc3Rlck5vZGVGdW5jOgotICogQG5vZGU6IHRoZSBjdXJyZW50IG5vZGUKLSAqCi0gKiBTaWduYXR1cmUgZm9yIHRoZSByZWdpc3RyYXRpb24gY2FsbGJhY2sgb2YgYSBjcmVhdGVkIG5vZGUKLSAqLwotdHlwZWRlZiB2b2lkICgqeG1sUmVnaXN0ZXJOb2RlRnVuYykgKHhtbE5vZGVQdHIgbm9kZSk7Ci0vKioKLSAqIHhtbERlcmVnaXN0ZXJOb2RlRnVuYzoKLSAqIEBub2RlOiB0aGUgY3VycmVudCBub2RlCi0gKgotICogU2lnbmF0dXJlIGZvciB0aGUgZGVyZWdpc3RyYXRpb24gY2FsbGJhY2sgb2YgYSBkaXNjYXJkZWQgbm9kZQotICovCi10eXBlZGVmIHZvaWQgKCp4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMpICh4bWxOb2RlUHRyIG5vZGUpOwotCiB0eXBlZGVmIHN0cnVjdCBfeG1sR2xvYmFsU3RhdGUgeG1sR2xvYmFsU3RhdGU7CiB0eXBlZGVmIHhtbEdsb2JhbFN0YXRlICp4bWxHbG9iYWxTdGF0ZVB0cjsKLXN0cnVjdCBfeG1sR2xvYmFsU3RhdGUKLXsKLQljb25zdCBjaGFyICp4bWxQYXJzZXJWZXJzaW9uOwogCi0JeG1sU0FYTG9jYXRvciB4bWxEZWZhdWx0U0FYTG9jYXRvcjsKLQl4bWxTQVhIYW5kbGVyVjEgeG1sRGVmYXVsdFNBWEhhbmRsZXI7Ci0JeG1sU0FYSGFuZGxlclYxIGRvY2JEZWZhdWx0U0FYSGFuZGxlcjsgLyogdW51c2VkICovCi0JeG1sU0FYSGFuZGxlclYxIGh0bWxEZWZhdWx0U0FYSGFuZGxlcjsKLQotCXhtbEZyZWVGdW5jIHhtbEZyZWU7Ci0JeG1sTWFsbG9jRnVuYyB4bWxNYWxsb2M7Ci0JeG1sU3RyZHVwRnVuYyB4bWxNZW1TdHJkdXA7Ci0JeG1sUmVhbGxvY0Z1bmMgeG1sUmVhbGxvYzsKLQotCXhtbEdlbmVyaWNFcnJvckZ1bmMgeG1sR2VuZXJpY0Vycm9yOwotCXhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgeG1sU3RydWN0dXJlZEVycm9yOwotCXZvaWQgKnhtbEdlbmVyaWNFcnJvckNvbnRleHQ7Ci0KLQlpbnQgb2xkWE1MV0Rjb21wYXRpYmlsaXR5OwotCi0JeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSB4bWxCdWZmZXJBbGxvY1NjaGVtZTsKLQlpbnQgeG1sRGVmYXVsdEJ1ZmZlclNpemU7Ci0KLQlpbnQgeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlOwotCWludCB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWU7Ci0JaW50IHhtbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlOwotCWludCB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlOwotCWludCB4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTsKLQlpbnQgeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZTsKLQlpbnQgeG1sUGFyc2VyRGVidWdFbnRpdGllczsKLQlpbnQgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWU7Ci0KLQlpbnQgeG1sU2F2ZU5vRW1wdHlUYWdzOwotCWludCB4bWxJbmRlbnRUcmVlT3V0cHV0OwotCWNvbnN0IGNoYXIgKnhtbFRyZWVJbmRlbnRTdHJpbmc7Ci0KLQl4bWxSZWdpc3Rlck5vZGVGdW5jIHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZTsKLQl4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU7Ci0KLQl4bWxNYWxsb2NGdW5jIHhtbE1hbGxvY0F0b21pYzsKLQl4bWxFcnJvciB4bWxMYXN0RXJyb3I7Ci0KLQl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWU7Ci0JeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWU7Ci0KLQl2b2lkICp4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0OwotfTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCXhtbEluaXRpYWxpemVHbG9iYWxTdGF0ZSh4bWxHbG9iYWxTdGF0ZVB0ciBncyk7Ci0KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYyh2b2lkICpjdHgsIHhtbEdlbmVyaWNFcnJvckZ1bmMgaGFuZGxlcik7Ci0KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYyh2b2lkICpjdHgsIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgaGFuZGxlcik7Ci0KLVhNTFBVQkZVTiB4bWxSZWdpc3Rlck5vZGVGdW5jIFhNTENBTEwgeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCh4bWxSZWdpc3Rlck5vZGVGdW5jIGZ1bmMpOwotWE1MUFVCRlVOIHhtbFJlZ2lzdGVyTm9kZUZ1bmMgWE1MQ0FMTCB4bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0KHhtbFJlZ2lzdGVyTm9kZUZ1bmMgZnVuYyk7Ci1YTUxQVUJGVU4geG1sRGVyZWdpc3Rlck5vZGVGdW5jIFhNTENBTEwgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0KHhtbERlcmVnaXN0ZXJOb2RlRnVuYyBmdW5jKTsKLVhNTFBVQkZVTiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgWE1MQ0FMTCB4bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQoeG1sRGVyZWdpc3Rlck5vZGVGdW5jIGZ1bmMpOwotCi1YTUxQVUJGVU4geG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIFhNTENBTEwKLQl4bWxUaHJEZWZPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQoeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIGZ1bmMpOwotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jIFhNTENBTEwKLQl4bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCgKLQkJCQl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyBmdW5jKTsKLQotLyoqIERPQ19ESVNBQkxFICovCi0vKgotICogSW4gZ2VuZXJhbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZW50cnkgcG9pbnRzIGFyZSBub3Qga2VwdAotICogdGhyZWFkIHNwZWNpZmljIGJ1dCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IExJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRAotICogICAgLSB4bWxNYWxsb2MKLSAqICAgIC0geG1sTWFsbG9jQXRvbWljCi0gKiAgICAtIHhtbFJlYWxsb2MKLSAqICAgIC0geG1sTWVtU3RyZHVwCi0gKiAgICAtIHhtbEZyZWUKLSAqLwotCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVECi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1YTUxQVUJGVU4gIHhtbE1hbGxvY0Z1bmMgKiBYTUxDQUxMIF9feG1sTWFsbG9jKHZvaWQpOwotI2RlZmluZSB4bWxNYWxsb2MgXAotKCooX194bWxNYWxsb2MoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbE1hbGxvY0Z1bmMgeG1sTWFsbG9jOwotI2VuZGlmCi0KLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLVhNTFBVQkZVTiAgeG1sTWFsbG9jRnVuYyAqIFhNTENBTEwgX194bWxNYWxsb2NBdG9taWModm9pZCk7Ci0jZGVmaW5lIHhtbE1hbGxvY0F0b21pYyBcCi0oKihfX3htbE1hbGxvY0F0b21pYygpKSkKLSNlbHNlCi1YTUxQVUJWQVIgeG1sTWFsbG9jRnVuYyB4bWxNYWxsb2NBdG9taWM7Ci0jZW5kaWYKLQotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotWE1MUFVCRlVOICB4bWxSZWFsbG9jRnVuYyAqIFhNTENBTEwgX194bWxSZWFsbG9jKHZvaWQpOwotI2RlZmluZSB4bWxSZWFsbG9jIFwKLSgqKF9feG1sUmVhbGxvYygpKSkKLSNlbHNlCi1YTUxQVUJWQVIgeG1sUmVhbGxvY0Z1bmMgeG1sUmVhbGxvYzsKLSNlbmRpZgotCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1YTUxQVUJGVU4gIHhtbEZyZWVGdW5jICogWE1MQ0FMTCBfX3htbEZyZWUodm9pZCk7Ci0jZGVmaW5lIHhtbEZyZWUgXAotKCooX194bWxGcmVlKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiB4bWxGcmVlRnVuYyB4bWxGcmVlOwotI2VuZGlmCi0KLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLVhNTFBVQkZVTiAgeG1sU3RyZHVwRnVuYyAqIFhNTENBTEwgX194bWxNZW1TdHJkdXAodm9pZCk7Ci0jZGVmaW5lIHhtbE1lbVN0cmR1cCBcCi0oKihfX3htbE1lbVN0cmR1cCgpKSkKLSNlbHNlCi1YTUxQVUJWQVIgeG1sU3RyZHVwRnVuYyB4bWxNZW1TdHJkdXA7Ci0jZW5kaWYKLQotI2Vsc2UgLyogIUxJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRCAqLwotWE1MUFVCVkFSIHhtbE1hbGxvY0Z1bmMgeG1sTWFsbG9jOwotWE1MUFVCVkFSIHhtbE1hbGxvY0Z1bmMgeG1sTWFsbG9jQXRvbWljOwotWE1MUFVCVkFSIHhtbFJlYWxsb2NGdW5jIHhtbFJlYWxsb2M7Ci1YTUxQVUJWQVIgeG1sRnJlZUZ1bmMgeG1sRnJlZTsKLVhNTFBVQlZBUiB4bWxTdHJkdXBGdW5jIHhtbE1lbVN0cmR1cDsKLSNlbmRpZiAvKiBMSUJYTUxfVEhSRUFEX0FMTE9DX0VOQUJMRUQgKi8KLQotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLVhNTFBVQkZVTiB4bWxTQVhIYW5kbGVyVjEgKiBYTUxDQUxMIF9faHRtbERlZmF1bHRTQVhIYW5kbGVyKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSBodG1sRGVmYXVsdFNBWEhhbmRsZXIgXAotKCooX19odG1sRGVmYXVsdFNBWEhhbmRsZXIoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbFNBWEhhbmRsZXJWMSBodG1sRGVmYXVsdFNBWEhhbmRsZXI7Ci0jZW5kaWYKLSNlbmRpZgotCi1YTUxQVUJGVU4geG1sRXJyb3IgKiBYTUxDQUxMIF9feG1sTGFzdEVycm9yKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxMYXN0RXJyb3IgXAotKCooX194bWxMYXN0RXJyb3IoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbEVycm9yIHhtbExhc3RFcnJvcjsKLSNlbmRpZgotCi0vKgotICogRXZlcnl0aGluZyBzdGFydGluZyBmcm9tIHRoZSBsaW5lIGJlbG93IGlzCi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBidWlsZF9nbG9iLnB5LgotICogRG8gbm90IG1vZGlmeSB0aGUgcHJldmlvdXMgbGluZS4KLSAqLwotCi0KLVhNTFBVQkZVTiBpbnQgKiBYTUxDQUxMIF9fb2xkWE1MV0Rjb21wYXRpYmlsaXR5KHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSBvbGRYTUxXRGNvbXBhdGliaWxpdHkgXAotKCooX19vbGRYTUxXRGNvbXBhdGliaWxpdHkoKSkpCi0jZWxzZQotWE1MUFVCVkFSIGludCBvbGRYTUxXRGNvbXBhdGliaWxpdHk7Ci0jZW5kaWYKLQotWE1MUFVCRlVOIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgKiBYTUxDQUxMIF9feG1sQnVmZmVyQWxsb2NTY2hlbWUodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbEJ1ZmZlckFsbG9jU2NoZW1lIFwKLSgqKF9feG1sQnVmZmVyQWxsb2NTY2hlbWUoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgeG1sQnVmZmVyQWxsb2NTY2hlbWU7Ci0jZW5kaWYKLVhNTFBVQkZVTiB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIFhNTENBTEwKLQl4bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZSh4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHYpOwotCi1YTUxQVUJGVU4gaW50ICogWE1MQ0FMTCBfX3htbERlZmF1bHRCdWZmZXJTaXplKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxEZWZhdWx0QnVmZmVyU2l6ZSBcCi0oKihfX3htbERlZmF1bHRCdWZmZXJTaXplKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiBpbnQgeG1sRGVmYXVsdEJ1ZmZlclNpemU7Ci0jZW5kaWYKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZShpbnQgdik7Ci0KLVhNTFBVQkZVTiB4bWxTQVhIYW5kbGVyVjEgKiBYTUxDQUxMIF9feG1sRGVmYXVsdFNBWEhhbmRsZXIodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbERlZmF1bHRTQVhIYW5kbGVyIFwKLSgqKF9feG1sRGVmYXVsdFNBWEhhbmRsZXIoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbFNBWEhhbmRsZXJWMSB4bWxEZWZhdWx0U0FYSGFuZGxlcjsKLSNlbmRpZgotCi1YTUxQVUJGVU4geG1sU0FYTG9jYXRvciAqIFhNTENBTEwgX194bWxEZWZhdWx0U0FYTG9jYXRvcih2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sRGVmYXVsdFNBWExvY2F0b3IgXAotKCooX194bWxEZWZhdWx0U0FYTG9jYXRvcigpKSkKLSNlbHNlCi1YTUxQVUJWQVIgeG1sU0FYTG9jYXRvciB4bWxEZWZhdWx0U0FYTG9jYXRvcjsKLSNlbmRpZgotCi1YTUxQVUJGVU4gaW50ICogWE1MQ0FMTCBfX3htbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIFwKLSgqKF9feG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiBpbnQgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlOwotI2VuZGlmCi1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlKGludCB2KTsKLQotWE1MUFVCRlVOIHhtbEdlbmVyaWNFcnJvckZ1bmMgKiBYTUxDQUxMIF9feG1sR2VuZXJpY0Vycm9yKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxHZW5lcmljRXJyb3IgXAotKCooX194bWxHZW5lcmljRXJyb3IoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbEdlbmVyaWNFcnJvckZ1bmMgeG1sR2VuZXJpY0Vycm9yOwotI2VuZGlmCi0KLVhNTFBVQkZVTiB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jICogWE1MQ0FMTCBfX3htbFN0cnVjdHVyZWRFcnJvcih2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sU3RydWN0dXJlZEVycm9yIFwKLSgqKF9feG1sU3RydWN0dXJlZEVycm9yKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIHhtbFN0cnVjdHVyZWRFcnJvcjsKLSNlbmRpZgotCi1YTUxQVUJGVU4gdm9pZCAqICogWE1MQ0FMTCBfX3htbEdlbmVyaWNFcnJvckNvbnRleHQodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbEdlbmVyaWNFcnJvckNvbnRleHQgXAotKCooX194bWxHZW5lcmljRXJyb3JDb250ZXh0KCkpKQotI2Vsc2UKLVhNTFBVQlZBUiB2b2lkICogeG1sR2VuZXJpY0Vycm9yQ29udGV4dDsKLSNlbmRpZgotCi1YTUxQVUJGVU4gdm9pZCAqICogWE1MQ0FMTCBfX3htbFN0cnVjdHVyZWRFcnJvckNvbnRleHQodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQgXAotKCooX194bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0KCkpKQotI2Vsc2UKLVhNTFBVQlZBUiB2b2lkICogeG1sU3RydWN0dXJlZEVycm9yQ29udGV4dDsKLSNlbmRpZgotCi1YTUxQVUJGVU4gaW50ICogWE1MQ0FMTCBfX3htbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSBcCi0oKihfX3htbEdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiBpbnQgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWU7Ci0jZW5kaWYKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZShpbnQgdik7Ci0KLVhNTFBVQkZVTiBpbnQgKiBYTUxDQUxMIF9feG1sSW5kZW50VHJlZU91dHB1dCh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sSW5kZW50VHJlZU91dHB1dCBcCi0oKihfX3htbEluZGVudFRyZWVPdXRwdXQoKSkpCi0jZWxzZQotWE1MUFVCVkFSIGludCB4bWxJbmRlbnRUcmVlT3V0cHV0OwotI2VuZGlmCi1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dChpbnQgdik7Ci0KLVhNTFBVQkZVTiBjb25zdCBjaGFyICogKiBYTUxDQUxMIF9feG1sVHJlZUluZGVudFN0cmluZyh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sVHJlZUluZGVudFN0cmluZyBcCi0oKihfX3htbFRyZWVJbmRlbnRTdHJpbmcoKSkpCi0jZWxzZQotWE1MUFVCVkFSIGNvbnN0IGNoYXIgKiB4bWxUcmVlSW5kZW50U3RyaW5nOwotI2VuZGlmCi1YTUxQVUJGVU4gY29uc3QgY2hhciAqIFhNTENBTEwgeG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyhjb25zdCBjaGFyICogdik7Ci0KLVhNTFBVQkZVTiBpbnQgKiBYTUxDQUxMIF9feG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSBcCi0oKihfX3htbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUoKSkpCi0jZWxzZQotWE1MUFVCVkFSIGludCB4bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlOwotI2VuZGlmCi1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZShpbnQgdik7Ci0KLVhNTFBVQkZVTiBpbnQgKiBYTUxDQUxMIF9feG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlIFwKLSgqKF9feG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUoKSkpCi0jZWxzZQotWE1MUFVCVkFSIGludCB4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZTsKLSNlbmRpZgotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKGludCB2KTsKLQotWE1MUFVCRlVOIGludCAqIFhNTENBTEwgX194bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIFwKLSgqKF9feG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSgpKSkKLSNlbHNlCi1YTUxQVUJWQVIgaW50IHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWU7Ci0jZW5kaWYKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlKGludCB2KTsKLQotWE1MUFVCRlVOIGludCAqIFhNTENBTEwgX194bWxQYXJzZXJEZWJ1Z0VudGl0aWVzKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxQYXJzZXJEZWJ1Z0VudGl0aWVzIFwKLSgqKF9feG1sUGFyc2VyRGVidWdFbnRpdGllcygpKSkKLSNlbHNlCi1YTUxQVUJWQVIgaW50IHhtbFBhcnNlckRlYnVnRW50aXRpZXM7Ci0jZW5kaWYKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUaHJEZWZQYXJzZXJEZWJ1Z0VudGl0aWVzKGludCB2KTsKLQotWE1MUFVCRlVOIGNvbnN0IGNoYXIgKiAqIFhNTENBTEwgX194bWxQYXJzZXJWZXJzaW9uKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxQYXJzZXJWZXJzaW9uIFwKLSgqKF9feG1sUGFyc2VyVmVyc2lvbigpKSkKLSNlbHNlCi1YTUxQVUJWQVIgY29uc3QgY2hhciAqIHhtbFBhcnNlclZlcnNpb247Ci0jZW5kaWYKLQotWE1MUFVCRlVOIGludCAqIFhNTENBTEwgX194bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgXAotKCooX194bWxQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSgpKSkKLSNlbHNlCi1YTUxQVUJWQVIgaW50IHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlOwotI2VuZGlmCi1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUoaW50IHYpOwotCi1YTUxQVUJGVU4gaW50ICogWE1MQ0FMTCBfX3htbFNhdmVOb0VtcHR5VGFncyh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sU2F2ZU5vRW1wdHlUYWdzIFwKLSgqKF9feG1sU2F2ZU5vRW1wdHlUYWdzKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiBpbnQgeG1sU2F2ZU5vRW1wdHlUYWdzOwotI2VuZGlmCi1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzKGludCB2KTsKLQotWE1MUFVCRlVOIGludCAqIFhNTENBTEwgX194bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSBcCi0oKihfX3htbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSgpKSkKLSNlbHNlCi1YTUxQVUJWQVIgaW50IHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZTsKLSNlbmRpZgotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZShpbnQgdik7Ci0KLVhNTFBVQkZVTiB4bWxSZWdpc3Rlck5vZGVGdW5jICogWE1MQ0FMTCBfX3htbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlIFwKLSgqKF9feG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiB4bWxSZWdpc3Rlck5vZGVGdW5jIHhtbFJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZTsKLSNlbmRpZgotCi1YTUxQVUJGVU4geG1sRGVyZWdpc3Rlck5vZGVGdW5jICogWE1MQ0FMTCBfX3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKHZvaWQpOwotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2RlZmluZSB4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSBcCi0oKihfX3htbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKCkpKQotI2Vsc2UKLVhNTFBVQlZBUiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU7Ci0jZW5kaWYKLQotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jICogWE1MQ0FMTCBcCi0JCQkJX194bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUodm9pZCk7Ci0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jZGVmaW5lIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSBcCi0oKihfX3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSgpKSkKLSNlbHNlCi1YTUxQVUJWQVIgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlOwotI2VuZGlmCi0KLVhNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMgKiBYTUxDQUxMIF9feG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSh2b2lkKTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSNkZWZpbmUgeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSBcCi0oKihfX3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUoKSkpCi0jZWxzZQotWE1MUFVCVkFSIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlOwotI2VuZGlmCitYTUxfREVQUkVDQVRFRCBYTUxQVUJGVU4gdm9pZAoreG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlKHhtbEdsb2JhbFN0YXRlUHRyIGdzKTsKK1hNTF9ERVBSRUNBVEVEIFhNTFBVQkZVTgoreG1sR2xvYmFsU3RhdGVQdHIgeG1sR2V0R2xvYmFsU3RhdGUodm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvaGFzaC5oIGIvaW5jbHVkZS9saWJ4bWwvaGFzaC5oCmluZGV4IGI2ODJiNmIuLmY0YWYwOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL2hhc2guaAorKysgYi9pbmNsdWRlL2xpYnhtbC9oYXNoLmgKQEAgLTExLDYgKzExLDEwIEBACiAjaWZuZGVmIF9fWE1MX0hBU0hfSF9fCiAjZGVmaW5lIF9fWE1MX0hBU0hfSF9fCiAKKyNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpYnhtbC9kaWN0Lmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC0yMSwxOCArMjUsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgX3htbEhhc2hUYWJsZSB4bWxIYXNoVGFibGU7CiB0eXBlZGVmIHhtbEhhc2hUYWJsZSAqeG1sSGFzaFRhYmxlUHRyOwogCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2RpY3QuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCiAvKgogICogUmVjZW50IHZlcnNpb24gb2YgZ2NjIHByb2R1Y2UgYSB3YXJuaW5nIHdoZW4gYSBmdW5jdGlvbiBwb2ludGVyIGlzIGFzc2lnbmVkCiAgKiB0byBhbiBvYmplY3QgcG9pbnRlciwgb3IgdmljZSB2ZXJzYS4gIFRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgYSBkaXJ0eSBoYWNrCkBAIC01NSw3ICs0Nyw2IEBACiAKICNkZWZpbmUgWE1MX0NBU1RfRlBUUihmcHRyKSBmcHRyCiAKLQogLyoKICAqIGZ1bmN0aW9uIHR5cGVzOgogICovCkBAIC0xMDMsMTMyICs5NCwxMzcgQEAKIC8qCiAgKiBDb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4KICAqLwotWE1MUFVCRlVOIHhtbEhhc2hUYWJsZVB0ciBYTUxDQUxMCi0JCQl4bWxIYXNoQ3JlYXRlCShpbnQgc2l6ZSk7Ci1YTUxQVUJGVU4geG1sSGFzaFRhYmxlUHRyIFhNTENBTEwKLQkJCXhtbEhhc2hDcmVhdGVEaWN0KGludCBzaXplLAorWE1MUFVCRlVOIHhtbEhhc2hUYWJsZVB0cgorCQl4bWxIYXNoQ3JlYXRlCQkoaW50IHNpemUpOworWE1MUFVCRlVOIHhtbEhhc2hUYWJsZVB0cgorCQl4bWxIYXNoQ3JlYXRlRGljdAkoaW50IHNpemUsCiAJCQkJCSB4bWxEaWN0UHRyIGRpY3QpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAotCQkJeG1sSGFzaEZyZWUJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKLQkJCQkJIHhtbEhhc2hEZWFsbG9jYXRvciBmKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKLQkJCXhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3Iodm9pZCAqZW50cnksCitYTUxQVUJGVU4gdm9pZAorCQl4bWxIYXNoRnJlZQkJKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAorCQkJCQkgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpOworWE1MUFVCRlVOIHZvaWQKKwkJeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcih2b2lkICplbnRyeSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwogCiAvKgogICogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoIHRhYmxlLgogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKLQkJCXhtbEhhc2hBZGRFbnRyeQkoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAorWE1MUFVCRlVOIGludAorCQl4bWxIYXNoQWRkRW50cnkJCSh4bWxIYXNoVGFibGVQdHIgaGFzaCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyZGF0YSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKLQkJCXhtbEhhc2hVcGRhdGVFbnRyeSh4bWxIYXNoVGFibGVQdHIgdGFibGUsCitYTUxQVUJGVU4gaW50CisJCXhtbEhhc2hVcGRhdGVFbnRyeQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEsCi0JCQkJCSB4bWxIYXNoRGVhbGxvY2F0b3IgZik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKLQkJCXhtbEhhc2hBZGRFbnRyeTIoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAorCQkJCQkgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpOworWE1MUFVCRlVOIGludAorCQl4bWxIYXNoQWRkRW50cnkyCSh4bWxIYXNoVGFibGVQdHIgaGFzaCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMiwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAotCQkJeG1sSGFzaFVwZGF0ZUVudHJ5Mih4bWxIYXNoVGFibGVQdHIgdGFibGUsCitYTUxQVUJGVU4gaW50CisJCXhtbEhhc2hVcGRhdGVFbnRyeTIJKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEsCi0JCQkJCSB4bWxIYXNoRGVhbGxvY2F0b3IgZik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKLQkJCXhtbEhhc2hBZGRFbnRyeTMoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAorCQkJCQkgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpOworWE1MUFVCRlVOIGludAorCQl4bWxIYXNoQWRkRW50cnkzCSh4bWxIYXNoVGFibGVQdHIgaGFzaCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMiwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUzLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCi0JCQl4bWxIYXNoVXBkYXRlRW50cnkzKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKK1hNTFBVQkZVTiBpbnQKKwkJeG1sSGFzaFVwZGF0ZUVudHJ5MwkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZTIsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lMywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhLAotCQkJCQkgeG1sSGFzaERlYWxsb2NhdG9yIGYpOworCQkJCQkgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpOwogCiAvKgogICogUmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAotCQkJeG1sSGFzaFJlbW92ZUVudHJ5KHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEhhc2hEZWFsbG9jYXRvciBmKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAotCQkJeG1sSGFzaFJlbW92ZUVudHJ5Mih4bWxIYXNoVGFibGVQdHIgdGFibGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZTIsIHhtbEhhc2hEZWFsbG9jYXRvciBmKTsKLVhNTFBVQkZVTiBpbnQgIFhNTENBTEwKLQkJCXhtbEhhc2hSZW1vdmVFbnRyeTMoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLCBjb25zdCB4bWxDaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUyLCBjb25zdCB4bWxDaGFyICpuYW1lMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxIYXNoRGVhbGxvY2F0b3IgZik7CitYTUxQVUJGVU4gaW50CisJCXhtbEhhc2hSZW1vdmVFbnRyeQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCisJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAorCQkJCQkgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2MpOworWE1MUFVCRlVOIGludAorCQl4bWxIYXNoUmVtb3ZlRW50cnkyCSh4bWxIYXNoVGFibGVQdHIgaGFzaCwKKwkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCisJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lMiwKKwkJCQkJIHhtbEhhc2hEZWFsbG9jYXRvciBkZWFsbG9jKTsKK1hNTFBVQkZVTiBpbnQgCisJCXhtbEhhc2hSZW1vdmVFbnRyeTMJKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAorCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKKwkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUyLAorCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZTMsCisJCQkJCSB4bWxIYXNoRGVhbGxvY2F0b3IgZGVhbGxvYyk7CiAKIC8qCi0gKiBSZXRyaWV2ZSB0aGUgdXNlcmRhdGEuCisgKiBSZXRyaWV2ZSB0aGUgcGF5bG9hZC4KICAqLwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCi0JCQl4bWxIYXNoTG9va3VwCSh4bWxIYXNoVGFibGVQdHIgdGFibGUsCitYTUxQVUJGVU4gdm9pZCAqCisJCXhtbEhhc2hMb29rdXAJCSh4bWxIYXNoVGFibGVQdHIgaGFzaCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCi0JCQl4bWxIYXNoTG9va3VwMgkoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAorWE1MUFVCRlVOIHZvaWQgKgorCQl4bWxIYXNoTG9va3VwMgkJKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUyKTsKLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAotCQkJeG1sSGFzaExvb2t1cDMJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKK1hNTFBVQkZVTiB2b2lkICoKKwkJeG1sSGFzaExvb2t1cDMJCSh4bWxIYXNoVGFibGVQdHIgaGFzaCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lMiwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUzKTsKLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAotCQkJeG1sSGFzaFFMb29rdXAJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKLQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCi0JCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCi0JCQl4bWxIYXNoUUxvb2t1cDIJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKLQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCitYTUxQVUJGVU4gdm9pZCAqCisJCXhtbEhhc2hRTG9va3VwCQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgsCi0JCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lMiwKLQkJCQkJIGNvbnN0IHhtbENoYXIgKnByZWZpeDIpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCi0JCQl4bWxIYXNoUUxvb2t1cDMJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKLQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCisJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKK1hNTFBVQkZVTiB2b2lkICoKKwkJeG1sSGFzaFFMb29rdXAyCQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgsCi0JCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lMiwKKwkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgyLAotCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZTMsCi0JCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgzKTsKKwkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUyKTsKK1hNTFBVQkZVTiB2b2lkICoKKwkJeG1sSGFzaFFMb29rdXAzCQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCisJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgsCisJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAorCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4MiwKKwkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUyLAorCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4MywKKwkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUzKTsKIAogLyoKICAqIEhlbHBlcnMuCiAgKi8KLVhNTFBVQkZVTiB4bWxIYXNoVGFibGVQdHIgWE1MQ0FMTAotCQkJeG1sSGFzaENvcHkJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKLQkJCQkJIHhtbEhhc2hDb3BpZXIgZik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKLQkJCXhtbEhhc2hTaXplCSh4bWxIYXNoVGFibGVQdHIgdGFibGUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAotCQkJeG1sSGFzaFNjYW4JKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKLQkJCQkJIHhtbEhhc2hTY2FubmVyIGYsCitYTUxQVUJGVU4geG1sSGFzaFRhYmxlUHRyCisJCXhtbEhhc2hDb3B5CQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCisJCQkJCSB4bWxIYXNoQ29waWVyIGNvcHkpOworWE1MUFVCRlVOIGludAorCQl4bWxIYXNoU2l6ZQkJKHhtbEhhc2hUYWJsZVB0ciBoYXNoKTsKK1hNTFBVQkZVTiB2b2lkCisJCXhtbEhhc2hTY2FuCQkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCisJCQkJCSB4bWxIYXNoU2Nhbm5lciBzY2FuLAogCQkJCQkgdm9pZCAqZGF0YSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCi0JCQl4bWxIYXNoU2NhbjMJKHhtbEhhc2hUYWJsZVB0ciB0YWJsZSwKK1hNTFBVQkZVTiB2b2lkCisJCXhtbEhhc2hTY2FuMwkJKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUyLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZTMsCi0JCQkJCSB4bWxIYXNoU2Nhbm5lciBmLAorCQkJCQkgeG1sSGFzaFNjYW5uZXIgc2NhbiwKIAkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAotCQkJeG1sSGFzaFNjYW5GdWxsCSh4bWxIYXNoVGFibGVQdHIgdGFibGUsCi0JCQkJCSB4bWxIYXNoU2Nhbm5lckZ1bGwgZiwKK1hNTFBVQkZVTiB2b2lkCisJCXhtbEhhc2hTY2FuRnVsbAkJKHhtbEhhc2hUYWJsZVB0ciBoYXNoLAorCQkJCQkgeG1sSGFzaFNjYW5uZXJGdWxsIHNjYW4sCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKLQkJCXhtbEhhc2hTY2FuRnVsbDMoeG1sSGFzaFRhYmxlUHRyIHRhYmxlLAorWE1MUFVCRlVOIHZvaWQKKwkJeG1sSGFzaFNjYW5GdWxsMwkoeG1sSGFzaFRhYmxlUHRyIGhhc2gsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZTIsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lMywKLQkJCQkJIHhtbEhhc2hTY2FubmVyRnVsbCBmLAorCQkJCQkgeG1sSGFzaFNjYW5uZXJGdWxsIHNjYW4sCiAJCQkJCSB2b2lkICpkYXRhKTsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvbGlzdC5oIGIvaW5jbHVkZS9saWJ4bWwvbGlzdC5oCmluZGV4IDMyMTFjNzUuLjVlYWI4ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL2xpc3QuaAorKysgYi9pbmNsdWRlL2xpYnhtbC9saXN0LmgKQEAgLTUyLDc5ICs1Miw3OSBAQAogdHlwZWRlZiBpbnQgKCp4bWxMaXN0V2Fsa2VyKSAoY29uc3Qgdm9pZCAqZGF0YSwgdm9pZCAqdXNlcik7CiAKIC8qIENyZWF0aW9uL0RlbGV0aW9uICovCi1YTUxQVUJGVU4geG1sTGlzdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTGlzdFB0cgogCQl4bWxMaXN0Q3JlYXRlCQkoeG1sTGlzdERlYWxsb2NhdG9yIGRlYWxsb2NhdG9yLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbExpc3REYXRhQ29tcGFyZSBjb21wYXJlKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbExpc3REZWxldGUJCSh4bWxMaXN0UHRyIGwpOwogCiAvKiBCYXNpYyBPcGVyYXRvcnMgKi8KLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQgKgogCQl4bWxMaXN0U2VhcmNoCQkoeG1sTGlzdFB0ciBsLAogCQkJCQkgdm9pZCAqZGF0YSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAkJeG1sTGlzdFJldmVyc2VTZWFyY2gJKHhtbExpc3RQdHIgbCwKIAkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbExpc3RJbnNlcnQJCSh4bWxMaXN0UHRyIGwsCiAJCQkJCSB2b2lkICpkYXRhKSA7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTGlzdEFwcGVuZAkJKHhtbExpc3RQdHIgbCwKIAkJCQkJIHZvaWQgKmRhdGEpIDsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxMaXN0UmVtb3ZlRmlyc3QJKHhtbExpc3RQdHIgbCwKIAkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbExpc3RSZW1vdmVMYXN0CSh4bWxMaXN0UHRyIGwsCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxMaXN0UmVtb3ZlQWxsCSh4bWxMaXN0UHRyIGwsCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbExpc3RDbGVhcgkJKHhtbExpc3RQdHIgbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTGlzdEVtcHR5CQkoeG1sTGlzdFB0ciBsKTsKLVhNTFBVQkZVTiB4bWxMaW5rUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxMaW5rUHRyCiAJCXhtbExpc3RGcm9udAkJKHhtbExpc3RQdHIgbCk7Ci1YTUxQVUJGVU4geG1sTGlua1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTGlua1B0cgogCQl4bWxMaXN0RW5kCQkoeG1sTGlzdFB0ciBsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxMaXN0U2l6ZQkJKHhtbExpc3RQdHIgbCk7CiAKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbExpc3RQb3BGcm9udAkJKHhtbExpc3RQdHIgbCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxMaXN0UG9wQmFjawkJKHhtbExpc3RQdHIgbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTGlzdFB1c2hGcm9udAkoeG1sTGlzdFB0ciBsLAogCQkJCQkgdm9pZCAqZGF0YSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTGlzdFB1c2hCYWNrCQkoeG1sTGlzdFB0ciBsLAogCQkJCQkgdm9pZCAqZGF0YSk7CiAKIC8qIEFkdmFuY2VkIE9wZXJhdG9ycyAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTGlzdFJldmVyc2UJCSh4bWxMaXN0UHRyIGwpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTGlzdFNvcnQJCSh4bWxMaXN0UHRyIGwpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTGlzdFdhbGsJCSh4bWxMaXN0UHRyIGwsCiAJCQkJCSB4bWxMaXN0V2Fsa2VyIHdhbGtlciwKIAkJCQkJIHZvaWQgKnVzZXIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTGlzdFJldmVyc2VXYWxrCSh4bWxMaXN0UHRyIGwsCiAJCQkJCSB4bWxMaXN0V2Fsa2VyIHdhbGtlciwKIAkJCQkJIHZvaWQgKnVzZXIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTGlzdE1lcmdlCQkoeG1sTGlzdFB0ciBsMSwKIAkJCQkJIHhtbExpc3RQdHIgbDIpOwotWE1MUFVCRlVOIHhtbExpc3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbExpc3RQdHIKIAkJeG1sTGlzdER1cAkJKGNvbnN0IHhtbExpc3RQdHIgb2xkKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxMaXN0Q29weQkJKHhtbExpc3RQdHIgY3VyLAogCQkJCQkgY29uc3QgeG1sTGlzdFB0ciBvbGQpOwogLyogTGluayBvcGVyYXRvcnMgKi8KLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQgKgogCQl4bWxMaW5rR2V0RGF0YSAgICAgICAgICAoeG1sTGlua1B0ciBsayk7CiAKIC8qIHhtbExpc3RVbmlxdWUoKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvbmFub2Z0cC5oIGIvaW5jbHVkZS9saWJ4bWwvbmFub2Z0cC5oCmluZGV4IGYzOWJkZTUuLmVkM2FjNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL25hbm9mdHAuaAorKysgYi9pbmNsdWRlL2xpYnhtbC9uYW5vZnRwLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CiAKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKKyNpZiBkZWZpbmVkKExJQlhNTF9GVFBfRU5BQkxFRCkKIAogLyogTmVlZGVkIGZvciBwb3J0YWJpbGl0eSB0byBXaW5kb3dzIDY0IGJpdHMgKi8KICNpZiBkZWZpbmVkKF9XSU4zMikKQEAgLTgwLDUyICs4MCw1MiBAQAogICogSW5pdAogICovCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxOYW5vRlRQSW5pdAkJKHZvaWQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sTmFub0ZUUENsZWFudXAJKHZvaWQpOwogCiAvKgogICogQ3JlYXRpbmcvZnJlZWluZyBjb250ZXh0cy4KICAqLwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQgKgogCXhtbE5hbm9GVFBOZXdDdHh0CShjb25zdCBjaGFyICpVUkwpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sTmFub0ZUUEZyZWVDdHh0CSh2b2lkICogY3R4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxOYW5vRlRQQ29ubmVjdFRvCShjb25zdCBjaGFyICpzZXJ2ZXIsCiAJCQkJIGludCBwb3J0KTsKIC8qCiAgKiBPcGVuaW5nL2Nsb3Npbmcgc2Vzc2lvbiBjb25uZWN0aW9ucy4KICAqLwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQgKgogCXhtbE5hbm9GVFBPcGVuCQkoY29uc3QgY2hhciAqVVJMKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxOYW5vRlRQQ29ubmVjdAkodm9pZCAqY3R4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxOYW5vRlRQQ2xvc2UJCSh2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9GVFBRdWl0CQkodm9pZCAqY3R4KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbE5hbm9GVFBTY2FuUHJveHkJKGNvbnN0IGNoYXIgKlVSTCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxOYW5vRlRQUHJveHkJCShjb25zdCBjaGFyICpob3N0LAogCQkJCSBpbnQgcG9ydCwKIAkJCQkgY29uc3QgY2hhciAqdXNlciwKIAkJCQkgY29uc3QgY2hhciAqcGFzc3dkLAogCQkJCSBpbnQgdHlwZSk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTmFub0ZUUFVwZGF0ZVVSTAkodm9pZCAqY3R4LAogCQkJCSBjb25zdCBjaGFyICpVUkwpOwogCkBAIC0xMzMsNDggKzEzMyw0OCBAQAogICogUmF0aGVyIGludGVybmFsIGNvbW1hbmRzLgogICovCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTmFub0ZUUEdldFJlc3BvbnNlCSh2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9GVFBDaGVja1Jlc3BvbnNlCSh2b2lkICpjdHgpOwogCiAvKgogICogQ0QvRElSL0dFVCBoYW5kbGVycy4KICAqLwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9GVFBDd2QJCSh2b2lkICpjdHgsCiAJCQkJIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTmFub0ZUUERlbGUJCSh2b2lkICpjdHgsCiAJCQkJIGNvbnN0IGNoYXIgKmZpbGUpOwogCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIFNPQ0tFVCBYTUxDQUxMCitYTUxQVUJGVU4gU09DS0VUCiAJeG1sTmFub0ZUUEdldENvbm5lY3Rpb24JKHZvaWQgKmN0eCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTmFub0ZUUENsb3NlQ29ubmVjdGlvbih2b2lkICpjdHgpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9GVFBMaXN0CQkodm9pZCAqY3R4LAogCQkJCSBmdHBMaXN0Q2FsbGJhY2sgY2FsbGJhY2ssCiAJCQkJIHZvaWQgKnVzZXJEYXRhLAogCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIFNPQ0tFVCBYTUxDQUxMCitYTUxQVUJGVU4gU09DS0VUCiAJeG1sTmFub0ZUUEdldFNvY2tldAkodm9pZCAqY3R4LAogCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTmFub0ZUUEdldAkJKHZvaWQgKmN0eCwKIAkJCQkgZnRwRGF0YUNhbGxiYWNrIGNhbGxiYWNrLAogCQkJCSB2b2lkICp1c2VyRGF0YSwKIAkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9GVFBSZWFkCQkodm9pZCAqY3R4LAogCQkJCSB2b2lkICpkZXN0LAogCQkJCSBpbnQgbGVuKTsKQEAgLTE4Miw1ICsxODIsNSBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLSNlbmRpZiAvKiBMSUJYTUxfRlRQX0VOQUJMRUQgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKExJQlhNTF9GVFBfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfTEVHQUNZX0VOQUJMRUQpICovCiAjZW5kaWYgLyogX19OQU5PX0ZUUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL25hbm9odHRwLmggYi9pbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oCmluZGV4IDIyYjhmYjQuLjNiNWUwMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL25hbm9odHRwLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaApAQCAtMTgsMjQgKzE4LDI0IEBACiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbE5hbm9IVFRQSW5pdAkJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxOYW5vSFRUUENsZWFudXAJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxOYW5vSFRUUFNjYW5Qcm94eQkoY29uc3QgY2hhciAqVVJMKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9IVFRQRmV0Y2gJKGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJIGNoYXIgKipjb250ZW50VHlwZSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxOYW5vSFRUUE1ldGhvZAkoY29uc3QgY2hhciAqVVJMLAogCQkJCSBjb25zdCBjaGFyICptZXRob2QsCiAJCQkJIGNvbnN0IGNoYXIgKmlucHV0LAogCQkJCSBjaGFyICoqY29udGVudFR5cGUsCiAJCQkJIGNvbnN0IGNoYXIgKmhlYWRlcnMsCiAJCQkJIGludCAgIGlsZW4pOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZCAqCiAJeG1sTmFub0hUVFBNZXRob2RSZWRpcgkoY29uc3QgY2hhciAqVVJMLAogCQkJCSBjb25zdCBjaGFyICptZXRob2QsCiAJCQkJIGNvbnN0IGNoYXIgKmlucHV0LApAQCAtNDMsMzUgKzQzLDM1IEBACiAJCQkJIGNoYXIgKipyZWRpciwKIAkJCQkgY29uc3QgY2hhciAqaGVhZGVycywKIAkJCQkgaW50ICAgaWxlbik7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxOYW5vSFRUUE9wZW4JCShjb25zdCBjaGFyICpVUkwsCiAJCQkJIGNoYXIgKipjb250ZW50VHlwZSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxOYW5vSFRUUE9wZW5SZWRpcgkoY29uc3QgY2hhciAqVVJMLAogCQkJCSBjaGFyICoqY29udGVudFR5cGUsCiAJCQkJIGNoYXIgKipyZWRpcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxOYW5vSFRUUFJldHVybkNvZGUJKHZvaWQgKmN0eCk7Ci1YTUxQVUJGVU4gY29uc3QgY2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCBjaGFyICoKIAl4bWxOYW5vSFRUUEF1dGhIZWFkZXIJKHZvaWQgKmN0eCk7Ci1YTUxQVUJGVU4gY29uc3QgY2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCBjaGFyICoKIAl4bWxOYW5vSFRUUFJlZGlyCSh2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTmFub0hUVFBDb250ZW50TGVuZ3RoKCB2b2lkICogY3R4ICk7Ci1YTUxQVUJGVU4gY29uc3QgY2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCBjaGFyICoKIAl4bWxOYW5vSFRUUEVuY29kaW5nCSh2b2lkICpjdHgpOwotWE1MUFVCRlVOIGNvbnN0IGNoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgY2hhciAqCiAJeG1sTmFub0hUVFBNaW1lVHlwZQkodm9pZCAqY3R4KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE5hbm9IVFRQUmVhZAkJKHZvaWQgKmN0eCwKIAkJCQkgdm9pZCAqZGVzdCwKIAkJCQkgaW50IGxlbik7CiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxOYW5vSFRUUFNhdmUJCSh2b2lkICpjdHh0LAogCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAjZW5kaWYgLyogTElCWE1MX09VVFBVVF9FTkFCTEVEICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbE5hbm9IVFRQQ2xvc2UJKHZvaWQgKmN0eCk7CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3BhcnNlci5oIGIvaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKaW5kZXggODJjNjFkNi4uODdhYWNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKQEAgLTExLDEzICsxMSwyMSBAQAogI2RlZmluZSBfX1hNTF9QQVJTRVJfSF9fCiAKICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorI2RlZmluZSBYTUxfVFJFRV9JTlRFUk5BTFMKICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI3VuZGVmIFhNTF9UUkVFX0lOVEVSTkFMUwogI2luY2x1ZGUgPGxpYnhtbC9kaWN0Lmg+CiAjaW5jbHVkZSA8bGlieG1sL2hhc2guaD4KICNpbmNsdWRlIDxsaWJ4bWwvdmFsaWQuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZW50aXRpZXMuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbG1lbW9yeS5oPgorI2luY2x1ZGUgPGxpYnhtbC9lbmNvZGluZy5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxJTy5oPgorLyogZm9yIGNvbXBhdGliaWxpdHkgKi8KKyNpbmNsdWRlIDxsaWJ4bWwvU0FYMi5oPgorI2luY2x1ZGUgPGxpYnhtbC90aHJlYWRzLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC02MSwxNyArNjksMTQgQEAKICAgICBpbnQgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGlmIGtub3duICovCiAgICAgaW50IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbGluZSAqLwogICAgIGludCBjb2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNvbHVtbiAqLwotICAgIC8qCi0gICAgICogTk9URTogY29uc3VtZWQgaXMgb25seSB0ZXN0ZWQgZm9yIGVxdWFsaXR5IGluIHRoZSBwYXJzZXIgY29kZSwKLSAgICAgKiAgICAgICBzbyBldmVuIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93IHRoaXMgc2hvdWxkIG5vdCBnaXZlIHRyb3VibGVzCi0gICAgICogICAgICAgZm9yIHBhcnNpbmcgdmVyeSBsYXJnZSBpbnN0YW5jZXMuCi0gICAgICovCiAgICAgdW5zaWduZWQgbG9uZyBjb25zdW1lZDsgICAgICAgICAgIC8qIEhvdyBtYW55IHhtbENoYXJzIGFscmVhZHkgY29uc3VtZWQgKi8KICAgICB4bWxQYXJzZXJJbnB1dERlYWxsb2NhdGUgZnJlZTsgICAgLyogZnVuY3Rpb24gdG8gZGVhbGxvY2F0ZSB0aGUgYmFzZSAqLwotICAgIGNvbnN0IHhtbENoYXIgKmVuY29kaW5nOyAgICAgICAgICAvKiB0aGUgZW5jb2Rpbmcgc3RyaW5nIGZvciBlbnRpdHkgKi8KKyAgICBjb25zdCB4bWxDaGFyICplbmNvZGluZzsgICAgICAgICAgLyogdW51c2VkICovCiAgICAgY29uc3QgeG1sQ2hhciAqdmVyc2lvbjsgICAgICAgICAgIC8qIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgZW50aXR5ICovCi0gICAgaW50IHN0YW5kYWxvbmU7ICAgICAgICAgICAgICAgICAgIC8qIFdhcyB0aGF0IGVudGl0eSBtYXJrZWQgc3RhbmRhbG9uZSAqLworICAgIGludCBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFncyAqLwogICAgIGludCBpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbiB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eSAqLworICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50Q29uc3VtZWQ7ICAgICAvKiBjb25zdW1lZCBieXRlcyBmcm9tIHBhcmVudHMgKi8KKyAgICB4bWxFbnRpdHlQdHIgZW50aXR5OyAgICAgICAgICAgICAgLyogZW50aXR5LCBpZiBhbnkgKi8KIH07CiAKIC8qKgpAQCAtMTI1LDcgKzEzMCw4IEBACiAgICAgWE1MX1BBUlNFUl9TWVNURU1fTElURVJBTCwJLyogd2l0aGluIGEgU1lTVEVNIHZhbHVlICovCiAgICAgWE1MX1BBUlNFUl9FUElMT0csCQkvKiB0aGUgTWlzYyogYWZ0ZXIgdGhlIGxhc3QgZW5kIHRhZyAqLwogICAgIFhNTF9QQVJTRVJfSUdOT1JFLAkJLyogd2l0aGluIGFuIElHTk9SRUQgc2VjdGlvbiAqLwotICAgIFhNTF9QQVJTRVJfUFVCTElDX0xJVEVSQUwJLyogd2l0aGluIGEgUFVCTElDIHZhbHVlICovCisgICAgWE1MX1BBUlNFUl9QVUJMSUNfTElURVJBTCwJLyogd2l0aGluIGEgUFVCTElDIHZhbHVlICovCisgICAgWE1MX1BBUlNFUl9YTUxfREVDTCAgICAgICAgIC8qIGJlZm9yZSBYTUwgZGVjbCAoYnV0IGFmdGVyIEJPTSkgKi8KIH0geG1sUGFyc2VySW5wdXRTdGF0ZTsKIAogLyoqCkBAIC0xNjgsNiArMTc0LDggQEAKIH0geG1sUGFyc2VyTW9kZTsKIAogdHlwZWRlZiBzdHJ1Y3QgX3htbFN0YXJ0VGFnIHhtbFN0YXJ0VGFnOwordHlwZWRlZiBzdHJ1Y3QgX3htbFBhcnNlck5zRGF0YSB4bWxQYXJzZXJOc0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBfeG1sQXR0ckhhc2hCdWNrZXQgeG1sQXR0ckhhc2hCdWNrZXQ7CiAKIC8qKgogICogeG1sUGFyc2VyQ3R4dDoKQEAgLTI0OCw4ICsyNTYsNyBAQAogCiAgICAgaW50ICAgICAgICAgICAgICAgIGRlcHRoOyAgICAgICAgIC8qIHRvIHByZXZlbnQgZW50aXR5IHN1YnN0aXR1dGlvbiBsb29wcyAqLwogICAgIHhtbFBhcnNlcklucHV0UHRyICBlbnRpdHk7ICAgICAgICAvKiB1c2VkIHRvIGNoZWNrIGVudGl0aWVzIGJvdW5kYXJpZXMgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgY2hhcnNldDsgICAgICAgLyogZW5jb2Rpbmcgb2YgdGhlIGluLW1lbW9yeSBjb250ZW50Ci0JCQkJICAgICAgICAgYWN0dWFsbHkgYW4geG1sQ2hhckVuY29kaW5nICovCisgICAgaW50ICAgICAgICAgICAgICAgIGNoYXJzZXQ7ICAgICAgIC8qIHVudXNlZCAqLwogICAgIGludCAgICAgICAgICAgICAgICBub2RlbGVuOyAgICAgICAvKiBUaG9zZSB0d28gZmllbGRzIGFyZSB0aGVyZSB0byAqLwogICAgIGludCAgICAgICAgICAgICAgICBub2RlbWVtOyAgICAgICAvKiBTcGVlZCB1cCBsYXJnZSBub2RlIHBhcnNpbmcgKi8KICAgICBpbnQgICAgICAgICAgICAgICAgcGVkYW50aWM7ICAgICAgLyogc2lnbmFsIHBlZGFudGljIHdhcm5pbmdzICovCkBAIC0yNzksNyArMjg2LDcgQEAKICAgICBpbnQgICAgICAgICAgICAgICAgbnNOcjsgICAgICAgICAgLyogdGhlIG51bWJlciBvZiBpbmhlcml0ZWQgbmFtZXNwYWNlcyAqLwogICAgIGludCAgICAgICAgICAgICAgICBuc01heDsgICAgICAgICAvKiB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzICovCiAgICAgY29uc3QgeG1sQ2hhciAqICAgKm5zVGFiOyAgICAgICAgIC8qIHRoZSBhcnJheSBvZiBwcmVmaXgvbmFtZXNwYWNlIG5hbWUgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAqYXR0YWxsb2NzOyAgICAgLyogd2hpY2ggYXR0cmlidXRlIHdlcmUgYWxsb2NhdGVkICovCisgICAgdW5zaWduZWQgICAgICAgICAgKmF0dGFsbG9jczsgICAgIC8qIHdoaWNoIGF0dHJpYnV0ZSB3ZXJlIGFsbG9jYXRlZCAqLwogICAgIHhtbFN0YXJ0VGFnICAgICAgICpwdXNoVGFiOyAgICAgICAvKiBhcnJheSBvZiBkYXRhIGZvciBwdXNoICovCiAgICAgeG1sSGFzaFRhYmxlUHRyICAgIGF0dHNEZWZhdWx0OyAgIC8qIGRlZmF1bHRlZCBhdHRyaWJ1dGVzIGlmIGFueSAqLwogICAgIHhtbEhhc2hUYWJsZVB0ciAgICBhdHRzU3BlY2lhbDsgICAvKiBub24tQ0RBVEEgYXR0cmlidXRlcyBpZiBhbnkgKi8KQEAgLTMwMCw3ICszMDcsNyBAQAogICAgICAqLwogICAgIHhtbEVycm9yICAgICAgICAgIGxhc3RFcnJvcjsKICAgICB4bWxQYXJzZXJNb2RlICAgICBwYXJzZU1vZGU7ICAgIC8qIHRoZSBwYXJzZXIgbW9kZSAqLwotICAgIHVuc2lnbmVkIGxvbmcgICAgbmJlbnRpdGllczsgICAgLyogbnVtYmVyIG9mIGVudGl0aWVzIHJlZmVyZW5jZXMgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgIG5iZW50aXRpZXM7ICAgIC8qIHVudXNlZCAqLwogICAgIHVuc2lnbmVkIGxvbmcgIHNpemVlbnRpdGllczsgICAgLyogc2l6ZSBvZiBwYXJzZWQgZW50aXRpZXMgKi8KIAogICAgIC8qIGZvciB1c2UgYnkgSFRNTCBub24tcmVjdXJzaXZlIHBhcnNlciAqLwpAQCAtMzExLDYgKzMxOCwxNSBAQAogCiAgICAgaW50ICAgICAgICAgICAgICAgIGlucHV0X2lkOyAgICAgIC8qIHdlIG5lZWQgdG8gbGFiZWwgaW5wdXRzICovCiAgICAgdW5zaWduZWQgbG9uZyAgICAgIHNpemVlbnRjb3B5OyAgIC8qIHZvbHVtZSBvZiBlbnRpdHkgY29weSAqLworCisgICAgaW50ICAgICAgICAgICBlbmRDaGVja1N0YXRlOyAgICAvKiBxdW90ZSBzdGF0ZSBmb3IgcHVzaCBwYXJzZXIgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgICAgbmJFcnJvcnM7ICAgIC8qIG51bWJlciBvZiBlcnJvcnMgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgIG5iV2FybmluZ3M7ICAgIC8qIG51bWJlciBvZiB3YXJuaW5ncyAqLworICAgIHVuc2lnbmVkICAgICAgICAgICAgbWF4QW1wbDsgICAgLyogbWF4aW11bSBhbXBsaWZpY2F0aW9uIGZhY3RvciAqLworCisgICAgeG1sUGFyc2VyTnNEYXRhICAgICAgICpuc2RiOyAgICAvKiBuYW1lc3BhY2UgZGF0YWJhc2UgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgYXR0ckhhc2hNYXg7ICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgICAgeG1sQXR0ckhhc2hCdWNrZXQgKmF0dHJIYXNoOyAgICAvKiBhdHR0cmlidXRlIGhhc2ggdGFibGUgKi8KIH07CiAKIC8qKgpAQCAtNjA1LDcgKzYyMSw3IEBACiAgKgogICogRGlzcGxheSBhbmQgZm9ybWF0IGEgd2FybmluZyBtZXNzYWdlcywgY2FsbGJhY2suCiAgKi8KLXR5cGVkZWYgdm9pZCAoWE1MQ0RFQ0wgKndhcm5pbmdTQVhGdW5jKSAodm9pZCAqY3R4LAordHlwZWRlZiB2b2lkICgqd2FybmluZ1NBWEZ1bmMpICh2b2lkICpjdHgsCiAJCQkJY29uc3QgY2hhciAqbXNnLCAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwogLyoqCiAgKiBlcnJvclNBWEZ1bmM6CkBAIC02MTUsNyArNjMxLDcgQEAKICAqCiAgKiBEaXNwbGF5IGFuZCBmb3JtYXQgYW4gZXJyb3IgbWVzc2FnZXMsIGNhbGxiYWNrLgogICovCi10eXBlZGVmIHZvaWQgKFhNTENERUNMICplcnJvclNBWEZ1bmMpICh2b2lkICpjdHgsCit0eXBlZGVmIHZvaWQgKCplcnJvclNBWEZ1bmMpICh2b2lkICpjdHgsCiAJCQkJY29uc3QgY2hhciAqbXNnLCAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwogLyoqCiAgKiBmYXRhbEVycm9yU0FYRnVuYzoKQEAgLTYyNyw3ICs2NDMsNyBAQAogICogTm90ZTogc28gZmFyIGZhdGFsRXJyb3IoKSBTQVggY2FsbGJhY2tzIGFyZSBub3QgdXNlZCwgZXJyb3IoKQogICogICAgICAgZ2V0IGFsbCB0aGUgY2FsbGJhY2tzIGZvciBlcnJvcnMuCiAgKi8KLXR5cGVkZWYgdm9pZCAoWE1MQ0RFQ0wgKmZhdGFsRXJyb3JTQVhGdW5jKSAodm9pZCAqY3R4LAordHlwZWRlZiB2b2lkICgqZmF0YWxFcnJvclNBWEZ1bmMpICh2b2lkICpjdHgsCiAJCQkJY29uc3QgY2hhciAqbXNnLCAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwogLyoqCiAgKiBpc1N0YW5kYWxvbmVTQVhGdW5jOgpAQCAtNzMxLDYgKzc0NywxOSBAQAogICAgIHNldERvY3VtZW50TG9jYXRvclNBWEZ1bmMgc2V0RG9jdW1lbnRMb2NhdG9yOwogICAgIHN0YXJ0RG9jdW1lbnRTQVhGdW5jIHN0YXJ0RG9jdW1lbnQ7CiAgICAgZW5kRG9jdW1lbnRTQVhGdW5jIGVuZERvY3VtZW50OworICAgIC8qCisgICAgICogYHN0YXJ0RWxlbWVudGAgYW5kIGBlbmRFbGVtZW50YCBhcmUgb25seSB1c2VkIGJ5IHRoZSBsZWdhY3kgU0FYMQorICAgICAqIGludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBzb2Z0d2FyZS4gSWYgeW91IHJlYWxseQorICAgICAqIGhhdmUgdG8gZW5hYmxlIFNBWDEsIHRoZSBwcmVmZXJyZWQgd2F5IGlzIHNldCB0aGUgYGluaXRpYWxpemVkYAorICAgICAqIG1lbWJlciB0byAxIGluc3RlYWQgb2YgWE1MX1NBWDJfTUFHSUMuCisgICAgICoKKyAgICAgKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUKKyAgICAgKiBgc3RhcnRFbGVtZW50TnNgIGFuZCBgZW5kRWxlbWVudE5zYCBoYW5kbGVycyB0byBOVUxMLgorICAgICAqCisgICAgICogWW91IGNhbiBhbHNvIHNldCB0aGUgWE1MX1BBUlNFX1NBWDEgcGFyc2VyIG9wdGlvbiwgYnV0IHZlcnNpb25zCisgICAgICogb2xkZXIgdGhhbiAyLjEyLjAgd2lsbCBwcm9iYWJseSBjcmFzaCBpZiB0aGlzIG9wdGlvbiBpcyBwcm92aWRlZAorICAgICAqIHRvZ2V0aGVyIHdpdGggY3VzdG9tIFNBWCBjYWxsYmFja3MuCisgICAgICovCiAgICAgc3RhcnRFbGVtZW50U0FYRnVuYyBzdGFydEVsZW1lbnQ7CiAgICAgZW5kRWxlbWVudFNBWEZ1bmMgZW5kRWxlbWVudDsKICAgICByZWZlcmVuY2VTQVhGdW5jIHJlZmVyZW5jZTsKQEAgLTc0NCw4ICs3NzMsMTQgQEAKICAgICBnZXRQYXJhbWV0ZXJFbnRpdHlTQVhGdW5jIGdldFBhcmFtZXRlckVudGl0eTsKICAgICBjZGF0YUJsb2NrU0FYRnVuYyBjZGF0YUJsb2NrOwogICAgIGV4dGVybmFsU3Vic2V0U0FYRnVuYyBleHRlcm5hbFN1YnNldDsKKyAgICAvKgorICAgICAqIGBpbml0aWFsaXplZGAgc2hvdWxkIGFsd2F5cyBiZSBzZXQgdG8gWE1MX1NBWDJfTUFHSUMgdG8gZW5hYmxlIHRoZQorICAgICAqIG1vZGVybiBTQVgyIGludGVyZmFjZS4KKyAgICAgKi8KICAgICB1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ7Ci0gICAgLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIGV4dGVuc2lvbnMgYXZhaWxhYmxlIG9ubHkgb24gdmVyc2lvbiAyICovCisgICAgLyoKKyAgICAgKiBUaGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIG9ubHkgdXNlZCBieSB0aGUgU0FYMiBpbnRlcmZhY2UuCisgICAgICovCiAgICAgdm9pZCAqX3ByaXZhdGU7CiAgICAgc3RhcnRFbGVtZW50TnNTQVgyRnVuYyBzdGFydEVsZW1lbnROczsKICAgICBlbmRFbGVtZW50TnNTQVgyRnVuYyBlbmRFbGVtZW50TnM7CkBAIC04MDMsMzQgKzgzOCwxMDIgQEAKIAkJCQkJIGNvbnN0IGNoYXIgKklELAogCQkJCQkgeG1sUGFyc2VyQ3R4dFB0ciBjb250ZXh0KTsKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi19CisvKgorICogVmFyaWFibGVzCisgKi8KKworWE1MUFVCVkFSIGNvbnN0IGNoYXIgKmNvbnN0IHhtbFBhcnNlclZlcnNpb247CisjaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECisvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCitYTUxQVUJGVU4gY29uc3QgY2hhciAqY29uc3QgKl9feG1sUGFyc2VyVmVyc2lvbih2b2lkKTsKICNlbmRpZgogCi0jaW5jbHVkZSA8bGlieG1sL2VuY29kaW5nLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3htbElPLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KKy8qKiBET0NfRElTQUJMRSAqLworI2RlZmluZSBYTUxfR0xPQkFMU19QQVJTRVJfQ09SRSBcCisgIFhNTF9PUChvbGRYTUxXRGNvbXBhdGliaWxpdHksIGludCwgWE1MX0RFUFJFQ0FURUQpIFwKKyAgWE1MX09QKHhtbERlZmF1bHRTQVhMb2NhdG9yLCB4bWxTQVhMb2NhdG9yLCBYTUxfREVQUkVDQVRFRCkgXAorICBYTUxfT1AoeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlLCBpbnQsIFhNTF9ERVBSRUNBVEVEKSBcCisgIFhNTF9PUCh4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSwgaW50LCBYTUxfREVQUkVDQVRFRCkgXAorICBYTUxfT1AoeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSwgaW50LCBYTUxfREVQUkVDQVRFRCkgXAorICBYTUxfT1AoeG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUsIGludCwgWE1MX0RFUFJFQ0FURUQpIFwKKyAgWE1MX09QKHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUsIGludCwgWE1MX0RFUFJFQ0FURUQpIFwKKyAgWE1MX09QKHhtbFBhcnNlckRlYnVnRW50aXRpZXMsIGludCwgWE1MX0RFUFJFQ0FURUQpIFwKKyAgWE1MX09QKHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlLCBpbnQsIFhNTF9ERVBSRUNBVEVEKSBcCisgIFhNTF9PUCh4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUsIGludCwgWE1MX0RFUFJFQ0FURUQpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7CisjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECisgICNkZWZpbmUgWE1MX0dMT0JBTFNfUEFSU0VSX09VVFBVVCBcCisgICAgWE1MX09QKHhtbEluZGVudFRyZWVPdXRwdXQsIGludCwgWE1MX05PX0FUVFIpIFwKKyAgICBYTUxfT1AoeG1sVHJlZUluZGVudFN0cmluZywgY29uc3QgY2hhciAqLCBYTUxfTk9fQVRUUikgXAorICAgIFhNTF9PUCh4bWxTYXZlTm9FbXB0eVRhZ3MsIGludCwgWE1MX05PX0FUVFIpCisjZWxzZQorICAjZGVmaW5lIFhNTF9HTE9CQUxTX1BBUlNFUl9PVVRQVVQKICNlbmRpZgogCisjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAorICAjZGVmaW5lIFhNTF9HTE9CQUxTX1BBUlNFUl9TQVgxIFwKKyAgICBYTUxfT1AoeG1sRGVmYXVsdFNBWEhhbmRsZXIsIHhtbFNBWEhhbmRsZXJWMSwgWE1MX0RFUFJFQ0FURUQpCisjZWxzZQorICAjZGVmaW5lIFhNTF9HTE9CQUxTX1BBUlNFUl9TQVgxCisjZW5kaWYKKworI2RlZmluZSBYTUxfR0xPQkFMU19QQVJTRVIgXAorICBYTUxfR0xPQkFMU19QQVJTRVJfQ09SRSBcCisgIFhNTF9HTE9CQUxTX1BBUlNFUl9PVVRQVVQgXAorICBYTUxfR0xPQkFMU19QQVJTRVJfU0FYMQorCisjZGVmaW5lIFhNTF9PUCBYTUxfREVDTEFSRV9HTE9CQUwKK1hNTF9HTE9CQUxTX1BBUlNFUgorI3VuZGVmIFhNTF9PUAorCisjaWYgZGVmaW5lZChMSUJYTUxfVEhSRUFEX0VOQUJMRUQpICYmICFkZWZpbmVkKFhNTF9HTE9CQUxTX05PX1JFREVGSU5JVElPTikKKyAgI2RlZmluZSBvbGRYTUxXRGNvbXBhdGliaWxpdHkgWE1MX0dMT0JBTF9NQUNSTyhvbGRYTUxXRGNvbXBhdGliaWxpdHkpCisgICNkZWZpbmUgeG1sRGVmYXVsdFNBWEhhbmRsZXIgWE1MX0dMT0JBTF9NQUNSTyh4bWxEZWZhdWx0U0FYSGFuZGxlcikKKyAgI2RlZmluZSB4bWxEZWZhdWx0U0FYTG9jYXRvciBYTUxfR0xPQkFMX01BQ1JPKHhtbERlZmF1bHRTQVhMb2NhdG9yKQorICAjZGVmaW5lIHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSBcCisgICAgWE1MX0dMT0JBTF9NQUNSTyh4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUpCisgICNkZWZpbmUgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUgXAorICAgIFhNTF9HTE9CQUxfTUFDUk8oeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUpCisgICNkZWZpbmUgeG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSBYTUxfR0xPQkFMX01BQ1JPKHhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUpCisgICNkZWZpbmUgeG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUgXAorICAgIFhNTF9HTE9CQUxfTUFDUk8oeG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUpCisgICNkZWZpbmUgeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSBYTUxfR0xPQkFMX01BQ1JPKHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUpCisgICNkZWZpbmUgeG1sUGFyc2VyRGVidWdFbnRpdGllcyBYTUxfR0xPQkFMX01BQ1JPKHhtbFBhcnNlckRlYnVnRW50aXRpZXMpCisgICNkZWZpbmUgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgXAorICAgIFhNTF9HTE9CQUxfTUFDUk8oeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUpCisgICNkZWZpbmUgeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlIFwKKyAgICBYTUxfR0xPQkFMX01BQ1JPKHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSkKKyAgI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAorICAgICNkZWZpbmUgeG1sSW5kZW50VHJlZU91dHB1dCBYTUxfR0xPQkFMX01BQ1JPKHhtbEluZGVudFRyZWVPdXRwdXQpCisgICAgI2RlZmluZSB4bWxUcmVlSW5kZW50U3RyaW5nIFhNTF9HTE9CQUxfTUFDUk8oeG1sVHJlZUluZGVudFN0cmluZykKKyAgICAjZGVmaW5lIHhtbFNhdmVOb0VtcHR5VGFncyBYTUxfR0xPQkFMX01BQ1JPKHhtbFNhdmVOb0VtcHR5VGFncykKKyAgI2VuZGlmCisjZW5kaWYKKy8qKiBET0NfRU5BQkxFICovCiAKIC8qCiAgKiBJbml0L0NsZWFudXAKICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sSW5pdFBhcnNlcgkJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQ2xlYW51cFBhcnNlcgkodm9pZCk7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKKwkJeG1sSW5pdEdsb2JhbHMJCSh2b2lkKTsKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAorCQl4bWxDbGVhbnVwR2xvYmFscwkodm9pZCk7CiAKIC8qCiAgKiBJbnB1dCBmdW5jdGlvbnMKICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQl4bWxQYXJzZXJJbnB1dFJlYWQJKHhtbFBhcnNlcklucHV0UHRyIGluLAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gaW50CiAJCXhtbFBhcnNlcklucHV0R3JvdwkoeG1sUGFyc2VySW5wdXRQdHIgaW4sCiAJCQkJCSBpbnQgbGVuKTsKIApAQCAtODM4LDEwMSArOTQxLDEzMCBAQAogICogQmFzaWMgcGFyc2luZyBJbnRlcmZhY2VzCiAgKi8KICNpZmRlZiBMSUJYTUxfU0FYMV9FTkFCTEVECi1YTUxQVUJGVU4geG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sUGFyc2VEb2MJCShjb25zdCB4bWxDaGFyICpjdXIpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbFBhcnNlRmlsZQkJKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxQYXJzZU1lbW9yeQkJKGNvbnN0IGNoYXIgKmJ1ZmZlciwKIAkJCQkJIGludCBzaXplKTsKICNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTF9ERVBSRUNBVEVEIFhNTFBVQkZVTiBpbnQKIAkJeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdChpbnQgdmFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQgWE1MUFVCRlVOIGludAorICAgICAgICAgICAgICAgIHhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZShpbnQgdik7CitYTUxfREVQUkVDQVRFRCBYTUxQVUJGVU4gaW50CiAJCXhtbEtlZXBCbGFua3NEZWZhdWx0CShpbnQgdmFsKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVEIFhNTFBVQkZVTiBpbnQKKwkJeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZShpbnQgdik7CitYTUxQVUJGVU4gdm9pZAogCQl4bWxTdG9wUGFyc2VyCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQgWE1MUFVCRlVOIGludAogCQl4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHQoaW50IHZhbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTF9ERVBSRUNBVEVEIFhNTFBVQkZVTiBpbnQKKyAgICAgICAgICAgICAgICB4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZShpbnQgdik7CitYTUxfREVQUkVDQVRFRCBYTUxQVUJGVU4gaW50CiAJCXhtbExpbmVOdW1iZXJzRGVmYXVsdAkoaW50IHZhbCk7CitYTUxfREVQUkVDQVRFRCBYTUxQVUJGVU4gaW50CisgICAgICAgICAgICAgICAgeG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUoaW50IHYpOworWE1MX0RFUFJFQ0FURUQgWE1MUFVCRlVOIGludAorICAgICAgICAgICAgICAgIHhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZShpbnQgdik7CitYTUxfREVQUkVDQVRFRCBYTUxQVUJGVU4gaW50CisgICAgICAgICAgICAgICAgeG1sVGhyRGVmR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUoaW50IHYpOworWE1MX0RFUFJFQ0FURUQgWE1MUFVCRlVOIGludAorICAgICAgICAgICAgICAgIHhtbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUoaW50IHYpOworWE1MX0RFUFJFQ0FURUQgWE1MUFVCRlVOIGludAorICAgICAgICAgICAgICAgIHhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMoaW50IHYpOwogCiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogLyoKICAqIFJlY292ZXJ5IG1vZGUKICAqLwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxSZWNvdmVyRG9jCQkoY29uc3QgeG1sQ2hhciAqY3VyKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sUmVjb3Zlck1lbW9yeQkoY29uc3QgY2hhciAqYnVmZmVyLAogCQkJCQkgaW50IHNpemUpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxSZWNvdmVyRmlsZQkJKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKICNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCiAKIC8qCiAgKiBMZXNzIGNvbW1vbiByb3V0aW5lcyBhbmQgU0FYIGludGVyZmFjZXMKICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFBhcnNlRG9jdW1lbnQJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sUGFyc2VFeHRQYXJzZWRFbnQJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQl4bWxTQVhVc2VyUGFyc2VGaWxlCSh4bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJIHZvaWQgKnVzZXJfZGF0YSwKIAkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU0FYVXNlclBhcnNlTWVtb3J5CSh4bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJIHZvaWQgKnVzZXJfZGF0YSwKIAkJCQkJIGNvbnN0IGNoYXIgKmJ1ZmZlciwKIAkJCQkJIGludCBzaXplKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sU0FYUGFyc2VEb2MJCSh4bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmN1ciwKIAkJCQkJIGludCByZWNvdmVyeSk7Ci1YTUxQVUJGVU4geG1sRG9jUHRyIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbFNBWFBhcnNlTWVtb3J5CSh4bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJIGNvbnN0IGNoYXIgKmJ1ZmZlciwKIAkJCQkJIGludCBzaXplLAogCQkJCQkgaW50IHJlY292ZXJ5KTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YSAoeG1sU0FYSGFuZGxlclB0ciBzYXgsCiAJCQkJCSBjb25zdCBjaGFyICpidWZmZXIsCiAJCQkJCSBpbnQgc2l6ZSwKIAkJCQkJIGludCByZWNvdmVyeSwKIAkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxTQVhQYXJzZUZpbGUJCSh4bWxTQVhIYW5kbGVyUHRyIHNheCwKIAkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgaW50IHJlY292ZXJ5KTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sU0FYUGFyc2VGaWxlV2l0aERhdGEJKHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSBpbnQgcmVjb3ZlcnksCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sU0FYUGFyc2VFbnRpdHkJKHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxQYXJzZUVudGl0eQkJKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKICNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCiAKICNpZmRlZiBMSUJYTUxfVkFMSURfRU5BQkxFRAotWE1MUFVCRlVOIHhtbER0ZFB0ciBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbER0ZFB0cgogCQl4bWxTQVhQYXJzZURURAkJKHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgY29uc3QgeG1sQ2hhciAqRXh0ZXJuYWxJRCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlEKTsKLVhNTFBVQkZVTiB4bWxEdGRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbER0ZFB0cgogCQl4bWxQYXJzZURURAkJKGNvbnN0IHhtbENoYXIgKkV4dGVybmFsSUQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpTeXN0ZW1JRCk7Ci1YTUxQVUJGVU4geG1sRHRkUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxEdGRQdHIKIAkJeG1sSU9QYXJzZURURAkJKHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmcgZW5jKTsKICNlbmRpZiAvKiBMSUJYTUxfVkFMSURfRU5BQkxFICovCiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sU0FYSGFuZGxlclB0ciBzYXgsCiAJCQkJCSB2b2lkICp1c2VyX2RhdGEsCkBAIC05NDAsMTQgKzEwNzIsMTQgQEAKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnN0cmluZywKIAkJCQkJIHhtbE5vZGVQdHIgKmxzdCk7CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHhtbFBhcnNlckVycm9ycyBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VyRXJyb3JzCiAJCXhtbFBhcnNlSW5Ob2RlQ29udGV4dAkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgY29uc3QgY2hhciAqZGF0YSwKIAkJCQkJIGludCBkYXRhbGVuLAogCQkJCQkgaW50IG9wdGlvbnMsCiAJCQkJCSB4bWxOb2RlUHRyICpsc3QpOwogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnlSZWNvdmVyKHhtbERvY1B0ciBkb2MsCiAgICAgICAgICAgICAgICAgICAgICB4bWxTQVhIYW5kbGVyUHRyIHNheCwKICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKQEAgLTk1NSw3ICsxMDg3LDggQEAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHhtbE5vZGVQdHIgKmxzdCwKICAgICAgICAgICAgICAgICAgICAgIGludCByZWNvdmVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBpbnQKIAkJeG1sUGFyc2VFeHRlcm5hbEVudGl0eQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgdm9pZCAqdXNlcl9kYXRhLApAQCAtOTY0LDcgKzEwOTcsNyBAQAogCQkJCQkgY29uc3QgeG1sQ2hhciAqSUQsCiAJCQkJCSB4bWxOb2RlUHRyICpsc3QpOwogI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxQYXJzZUN0eHRFeHRlcm5hbEVudGl0eSh4bWxQYXJzZXJDdHh0UHRyIGN0eCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKklELApAQCAtOTczLDIxICsxMTA2LDI1IEBACiAvKgogICogUGFyc2VyIGNvbnRleHRzIGhhbmRsaW5nLgogICovCi1YTUxQVUJGVU4geG1sUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VyQ3R4dFB0cgogCQl4bWxOZXdQYXJzZXJDdHh0CSh2b2lkKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlckN0eHRQdHIKKwkJeG1sTmV3U0FYUGFyc2VyQ3R4dAkoY29uc3QgeG1sU0FYSGFuZGxlciAqc2F4LAorCQkJCQkgdm9pZCAqdXNlckRhdGEpOworWE1MUFVCRlVOIGludAogCQl4bWxJbml0UGFyc2VyQ3R4dAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbENsZWFyUGFyc2VyQ3R4dAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEZyZWVQYXJzZXJDdHh0CSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQl4bWxTZXR1cFBhcnNlckZvckJ1ZmZlcgkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgeG1sQ2hhciogYnVmZmVyLAogCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLVhNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyCiAJCXhtbENyZWF0ZURvY1BhcnNlckN0eHQJKGNvbnN0IHhtbENoYXIgKmN1cik7CiAKICNpZmRlZiBMSUJYTUxfTEVHQUNZX0VOQUJMRUQKQEAgLTk5NSwxNiArMTEzMiwxNiBAQAogICogUmVhZGluZy9zZXR0aW5nIG9wdGlvbmFsIHBhcnNpbmcgZmVhdHVyZXMuCiAgKi8KIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sR2V0RmVhdHVyZXNMaXN0CShpbnQgKmxlbiwKIAkJCQkJIGNvbnN0IGNoYXIgKipyZXN1bHQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxHZXRGZWF0dXJlCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJIHZvaWQgKnJlc3VsdCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNldEZlYXR1cmUJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgdm9pZCAqdmFsdWUpOwpAQCAtMTAxNCwxMyArMTE1MSwxMyBAQAogLyoKICAqIEludGVyZmFjZXMgZm9yIHRoZSBQdXNoIG1vZGUuCiAgKi8KLVhNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyCiAJCXhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgdm9pZCAqdXNlcl9kYXRhLAogCQkJCQkgY29uc3QgY2hhciAqY2h1bmssCiAJCQkJCSBpbnQgc2l6ZSwKIAkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxQYXJzZUNodW5rCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgY2hhciAqY2h1bmssCiAJCQkJCSBpbnQgc2l6ZSwKQEAgLTEwMzEsNyArMTE2OCw3IEBACiAgKiBTcGVjaWFsIEkvTyBtb2RlLgogICovCiAKLVhNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyCiAJCXhtbENyZWF0ZUlPUGFyc2VyQ3R4dAkoeG1sU0FYSGFuZGxlclB0ciBzYXgsCiAJCQkJCSB2b2lkICp1c2VyX2RhdGEsCiAJCQkJCSB4bWxJbnB1dFJlYWRDYWxsYmFjayAgIGlvcmVhZCwKQEAgLTEwMzksNyArMTE3Niw3IEBACiAJCQkJCSB2b2lkICppb2N0eCwKIAkJCQkJIHhtbENoYXJFbmNvZGluZyBlbmMpOwogCi1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyCiAJCXhtbE5ld0lPSW5wdXRTdHJlYW0JKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LAogCQkJCQkgeG1sQ2hhckVuY29kaW5nIGVuYyk7CkBAIC0xMDQ3LDE3ICsxMTg0LDE3IEBACiAvKgogICogTm9kZSBpbmZvcy4KICAqLwotWE1MUFVCRlVOIGNvbnN0IHhtbFBhcnNlck5vZGVJbmZvKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sUGFyc2VyTm9kZUluZm8qCiAJCXhtbFBhcnNlckZpbmROb2RlSW5mbwkoY29uc3QgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCSAgICAgICAgIGNvbnN0IHhtbE5vZGVQdHIgbm9kZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxJbml0Tm9kZUluZm9TZXEJKHhtbFBhcnNlck5vZGVJbmZvU2VxUHRyIHNlcSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxDbGVhck5vZGVJbmZvU2VxCSh4bWxQYXJzZXJOb2RlSW5mb1NlcVB0ciBzZXEpOwotWE1MUFVCRlVOIHVuc2lnbmVkIGxvbmcgWE1MQ0FMTAorWE1MUFVCRlVOIHVuc2lnbmVkIGxvbmcKIAkJeG1sUGFyc2VyRmluZE5vZGVJbmZvSW5kZXgoY29uc3QgeG1sUGFyc2VyTm9kZUluZm9TZXFQdHIgc2VxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxOb2RlUHRyIG5vZGUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sUGFyc2VyQWRkTm9kZUluZm8JKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIGNvbnN0IHhtbFBhcnNlck5vZGVJbmZvUHRyIGluZm8pOwogCkBAIC0xMDY1LDExICsxMjAyLDExIEBACiAgKiBFeHRlcm5hbCBlbnRpdGllcyBoYW5kbGluZyBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbiB4bWxJTy4KICAqLwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcih4bWxFeHRlcm5hbEVudGl0eUxvYWRlciBmKTsKLVhNTFBVQkZVTiB4bWxFeHRlcm5hbEVudGl0eUxvYWRlciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRXh0ZXJuYWxFbnRpdHlMb2FkZXIKIAkJeG1sR2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIodm9pZCk7Ci1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyCiAJCXhtbExvYWRFeHRlcm5hbEVudGl0eQkoY29uc3QgY2hhciAqVVJMLAogCQkJCQkgY29uc3QgY2hhciAqSUQsCiAJCQkJCSB4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwpAQCAtMTA3Nyw3ICsxMjE0LDcgQEAKIC8qCiAgKiBJbmRleCBsb29rdXAsIGFjdHVhbGx5IGltcGxlbWVudGVkIGluIHRoZSBlbmNvZGluZyBtb2R1bGUKICAqLwotWE1MUFVCRlVOIGxvbmcgWE1MQ0FMTAorWE1MUFVCRlVOIGxvbmcKIAkJeG1sQnl0ZUNvbnN1bWVkCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKIAogLyoKQEAgLTExMTcsNjkgKzEyNTQsNzIgQEAKICAgICBYTUxfUEFSU0VfQklHX0xJTkVTID0gMTw8MjIgLyogU3RvcmUgYmlnIGxpbmVzIG51bWJlcnMgaW4gdGV4dCBQU1ZJIGZpZWxkICovCiB9IHhtbFBhcnNlck9wdGlvbjsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQ3R4dFJlc2V0CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxDdHh0UmVzZXRQdXNoCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCBjaGFyICpjaHVuaywKIAkJCQkJIGludCBzaXplLAogCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQ3R4dFVzZU9wdGlvbnMJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKKwkJeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24oeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAorCQkJCQkgdW5zaWduZWQgbWF4QW1wbCk7CitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbFJlYWREb2MJCShjb25zdCB4bWxDaGFyICpjdXIsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxSZWFkRmlsZQkJKGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbFJlYWRNZW1vcnkJCShjb25zdCBjaGFyICpidWZmZXIsCiAJCQkJCSBpbnQgc2l6ZSwKIAkJCQkJIGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbFJlYWRGZAkJKGludCBmZCwKIAkJCQkJIGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbFJlYWRJTwkJKHhtbElucHV0UmVhZENhbGxiYWNrIGlvcmVhZCwKIAkJCQkJIHhtbElucHV0Q2xvc2VDYWxsYmFjayBpb2Nsb3NlLAogCQkJCQkgdm9pZCAqaW9jdHgsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxDdHh0UmVhZERvYwkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmN1ciwKIAkJCQkJIGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbEN0eHRSZWFkRmlsZQkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4geG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sQ3R4dFJlYWRNZW1vcnkJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCBjaGFyICpidWZmZXIsCiAJCQkJCSBpbnQgc2l6ZSwKIAkJCQkJIGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCXhtbEN0eHRSZWFkRmQJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSBpbnQgZmQsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxEb2NQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbERvY1B0cgogCQl4bWxDdHh0UmVhZElPCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sSW5wdXRSZWFkQ2FsbGJhY2sgaW9yZWFkLAogCQkJCQkgeG1sSW5wdXRDbG9zZUNhbGxiYWNrIGlvY2xvc2UsCkBAIC0xMjM1LDcgKzEzNzUsNyBAQAogICAgIFhNTF9XSVRIX05PTkUgPSA5OTk5OSAvKiBqdXN0IHRvIGJlIHN1cmUgb2YgYWxsb2NhdGlvbiBzaXplICovCiB9IHhtbEZlYXR1cmU7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxIYXNGZWF0dXJlCQkoeG1sRmVhdHVyZSBmZWF0dXJlKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBiL2luY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCmluZGV4IDY1NmVlNDYuLjAxN2VkMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9IVE1McGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL2NodmFsaWQuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvU0FYMi5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtNDEsNiArNDIsMTMgQEAKICNkZWZpbmUgWE1MX01BWF9URVhUX0xFTkdUSCAxMDAwMDAwMAogCiAvKioKKyAqIFhNTF9NQVhfSFVHRV9MRU5HVEg6CisgKgorICogTWF4aW11bSBzaXplIGFsbG93ZWQgd2hlbiBYTUxfUEFSU0VfSFVHRSBpcyBzZXQuCisgKi8KKyNkZWZpbmUgWE1MX01BWF9IVUdFX0xFTkdUSCAxMDAwMDAwMDAwCisKKy8qKgogICogWE1MX01BWF9OQU1FX0xFTkdUSDoKICAqCiAgKiBNYXhpbXVtIHNpemUgYWxsb3dlZCBmb3IgYSBtYXJrdXAgaWRlbnRpZmllci4KQEAgLTI3OSwzNCArMjg3LDYgQEAKICNkZWZpbmUgSVNfUFVCSURDSEFSX0NIKGMpIHhtbElzUHViaWRDaGFyX2NoKGMpCiAKIC8qKgotICogU0tJUF9FT0w6Ci0gKiBAcDogIGFuZCBVVEY4IHN0cmluZyBwb2ludGVyCi0gKgotICogU2tpcHMgdGhlIGVuZCBvZiBsaW5lIGNoYXJzLgotICovCi0jZGVmaW5lIFNLSVBfRU9MKHApCQkJCQkJCVwKLSAgICBpZiAoKihwKSA9PSAweDEzKSB7IHArKyA7IGlmICgqKHApID09IDB4MTApIHArKzsgfQkJCVwKLSAgICBpZiAoKihwKSA9PSAweDEwKSB7IHArKyA7IGlmICgqKHApID09IDB4MTMpIHArKzsgfQotCi0vKioKLSAqIE1PVkVUT19FTkRUQUc6Ci0gKiBAcDogIGFuZCBVVEY4IHN0cmluZyBwb2ludGVyCi0gKgotICogU2tpcHMgdG8gdGhlIG5leHQgJz4nIGNoYXIuCi0gKi8KLSNkZWZpbmUgTU9WRVRPX0VORFRBRyhwKQkJCQkJCVwKLSAgICB3aGlsZSAoKCpwKSAmJiAoKihwKSAhPSAnPicpKSAocCkrKwotCi0vKioKLSAqIE1PVkVUT19TVEFSVFRBRzoKLSAqIEBwOiAgYW5kIFVURjggc3RyaW5nIHBvaW50ZXIKLSAqCi0gKiBTa2lwcyB0byB0aGUgbmV4dCAnPCcgY2hhci4KLSAqLwotI2RlZmluZSBNT1ZFVE9fU1RBUlRUQUcocCkJCQkJCQlcCi0gICAgd2hpbGUgKCgqcCkgJiYgKCoocCkgIT0gJzwnKSkgKHApKysKLQotLyoqCiAgKiBHbG9iYWwgdmFyaWFibGVzIHVzZWQgZm9yIHByZWRlZmluZWQgc3RyaW5ncy4KICAqLwogWE1MUFVCVkFSIGNvbnN0IHhtbENoYXIgeG1sU3RyaW5nVGV4dFtdOwpAQCAtMzE2LDcxICsyOTYsNjIgQEAKIC8qCiAgKiBGdW5jdGlvbiB0byBmaW5pc2ggdGhlIHdvcmsgb2YgdGhlIG1hY3JvcyB3aGVyZSBuZWVkZWQuCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCAgICAgICAgICAgICAgICAgICB4bWxJc0xldHRlciAgICAgKGludCBjKTsKK1hNTFBVQkZVTiBpbnQgICAgICAgICAgICAgICAgICAgeG1sSXNMZXR0ZXIgICAgIChpbnQgYyk7CiAKIC8qKgogICogUGFyc2VyIGNvbnRleHQuCiAgKi8KLVhNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyCiAJCQl4bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dAkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIHhtbFBhcnNlckN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlckN0eHRQdHIKIAkJCXhtbENyZWF0ZVVSTFBhcnNlckN0eHQJKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJDdHh0UHRyCiAJCQl4bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KGNvbnN0IGNoYXIgKmJ1ZmZlciwKIAkJCQkJCSBpbnQgc2l6ZSk7Ci1YTUxQVUJGVU4geG1sUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VyQ3R4dFB0cgogCQkJeG1sQ3JlYXRlRW50aXR5UGFyc2VyQ3R4dChjb25zdCB4bWxDaGFyICpVUkwsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqSUQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqYmFzZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFN3aXRjaEVuY29kaW5nCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sQ2hhckVuY29kaW5nIGVuYyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFN3aXRjaFRvRW5jb2RpbmcJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgaGFuZGxlcik7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxTd2l0Y2hJbnB1dEVuY29kaW5nCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXIpOwogCi0jaWZkZWYgSU5fTElCWE1MCi0vKiBpbnRlcm5hbCBlcnJvciByZXBvcnRpbmcgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKLQkJCV9feG1sRXJyRW5jb2RpbmcJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKLQkJCQkJCSB4bWxQYXJzZXJFcnJvcnMgeG1sZXJyLAotCQkJCQkJIGNvbnN0IGNoYXIgKm1zZywKLQkJCQkJCSBjb25zdCB4bWxDaGFyICogc3RyMSwKLQkJCQkJCSBjb25zdCB4bWxDaGFyICogc3RyMikgTElCWE1MX0FUVFJfRk9STUFUKDMsMCk7Ci0jZW5kaWYKLQogLyoqCiAgKiBJbnB1dCBTdHJlYW1zLgogICovCi1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyCiAJCQl4bWxOZXdTdHJpbmdJbnB1dFN0cmVhbQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKmJ1ZmZlcik7Ci1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0cgogCQkJeG1sTmV3RW50aXR5SW5wdXRTdHJlYW0JKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSB4bWxFbnRpdHlQdHIgZW50aXR5KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sUHVzaElucHV0CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIHhtbFBhcnNlcklucHV0UHRyIGlucHV0KTsKLVhNTFBVQkZVTiB4bWxDaGFyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyCiAJCQl4bWxQb3BJbnB1dAkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sRnJlZUlucHV0U3RyZWFtCSh4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCk7Ci1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyCiAJCQl4bWxOZXdJbnB1dEZyb21GaWxlCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0cgogCQkJeG1sTmV3SW5wdXRTdHJlYW0JKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CiAKIC8qKgogICogTmFtZXNwYWNlcy4KICAqLwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxTcGxpdFFOYW1lCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgeG1sQ2hhciAqKnByZWZpeCk7CkBAIC0zODgsMTA5ICszNTksMTUxIEBACiAvKioKICAqIEdlbmVyaWMgcHJvZHVjdGlvbiBydWxlcy4KICAqLwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQkJeG1sUGFyc2VOYW1lCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFBhcnNlTm10b2tlbgkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxQYXJzZUVudGl0eVZhbHVlCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sQ2hhciAqKm9yaWcpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sUGFyc2VBdHRWYWx1ZQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFBhcnNlU3lzdGVtTGl0ZXJhbAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFBhcnNlUHViaWRMaXRlcmFsCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxQYXJzZUNoYXJEYXRhCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgaW50IGNkYXRhKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFBhcnNlRXh0ZXJuYWxJRAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIHhtbENoYXIgKipwdWJsaWNJRCwKIAkJCQkJCSBpbnQgc3RyaWN0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VDb21tZW50CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJCXhtbFBhcnNlUElUYXJnZXQJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbFBhcnNlUEkJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxQYXJzZU5vdGF0aW9uRGVjbAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VFbnRpdHlEZWNsCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQkJeG1sUGFyc2VEZWZhdWx0RGVjbAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIHhtbENoYXIgKip2YWx1ZSk7Ci1YTUxQVUJGVU4geG1sRW51bWVyYXRpb25QdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxFbnVtZXJhdGlvblB0cgogCQkJeG1sUGFyc2VOb3RhdGlvblR5cGUJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sRW51bWVyYXRpb25QdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxFbnVtZXJhdGlvblB0cgogCQkJeG1sUGFyc2VFbnVtZXJhdGlvblR5cGUJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gaW50CiAJCQl4bWxQYXJzZUVudW1lcmF0ZWRUeXBlCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sRW51bWVyYXRpb25QdHIgKnRyZWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQkJeG1sUGFyc2VBdHRyaWJ1dGVUeXBlCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sRW51bWVyYXRpb25QdHIgKnRyZWUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxQYXJzZUF0dHJpYnV0ZUxpc3REZWNsKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sRWxlbWVudENvbnRlbnRQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxFbGVtZW50Q29udGVudFB0cgogCQkJeG1sUGFyc2VFbGVtZW50TWl4ZWRDb250ZW50RGVjbAogCQkJCQkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSBpbnQgaW5wdXRjaGspOwotWE1MUFVCRlVOIHhtbEVsZW1lbnRDb250ZW50UHRyIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4geG1sRWxlbWVudENvbnRlbnRQdHIKIAkJCXhtbFBhcnNlRWxlbWVudENoaWxkcmVuQ29udGVudERlY2wKIAkJCQkJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgaW50IGlucHV0Y2hrKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFBhcnNlRWxlbWVudENvbnRlbnREZWNsKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIHhtbEVsZW1lbnRDb250ZW50UHRyICpyZXN1bHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQkJeG1sUGFyc2VFbGVtZW50RGVjbAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VNYXJrdXBEZWNsCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQkJeG1sUGFyc2VDaGFyUmVmCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxFbnRpdHlQdHIgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxFbnRpdHlQdHIKIAkJCXhtbFBhcnNlRW50aXR5UmVmCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxQYXJzZVJlZmVyZW5jZQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VQRVJlZmVyZW5jZQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VEb2NUeXBlRGVjbAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKICNpZmRlZiBMSUJYTUxfU0FYMV9FTkFCTEVECi1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCQl4bWxQYXJzZUF0dHJpYnV0ZQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIHhtbENoYXIgKip2YWx1ZSk7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCQl4bWxQYXJzZVN0YXJ0VGFnCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxQYXJzZUVuZFRhZwkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxQYXJzZUNEU2VjdAkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VDb250ZW50CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VFbGVtZW50CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFBhcnNlVmVyc2lvbk51bQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFBhcnNlVmVyc2lvbkluZm8JKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxQYXJzZUVuY05hbWUJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQkJeG1sUGFyc2VFbmNvZGluZ0RlY2wJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gaW50CiAJCQl4bWxQYXJzZVNERGVjbAkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbFBhcnNlWE1MRGVjbAkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbFBhcnNlVGV4dERlY2wJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbFBhcnNlTWlzYwkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sUGFyc2VFeHRlcm5hbFN1YnNldAkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKkV4dGVybmFsSUQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqU3lzdGVtSUQpOwpAQCAtNTE5LDE0ICs1MzIsMTYgQEAKICAqLwogI2RlZmluZSBYTUxfU1VCU1RJVFVURV9CT1RICTMKIAotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxTdHJpbmdEZWNvZGVFbnRpdGllcwkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpzdHIsCiAJCQkJCQkgaW50IHdoYXQsCiAJCQkJCQkgeG1sQ2hhciBlbmQsCiAJCQkJCQkgeG1sQ2hhciAgZW5kMiwKIAkJCQkJCSB4bWxDaGFyIGVuZDMpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxTdHJpbmdMZW5EZWNvZGVFbnRpdGllcwkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnN0ciwKIAkJCQkJCSBpbnQgbGVuLApAQCAtNTM4LDQ4ICs1NTMsNDkgQEAKIC8qCiAgKiBHZW5lcmF0ZWQgYnkgTUFDUk9TIG9uIHRvcCBvZiBwYXJzZXIuYyBjLmYuIFBVU0hfQU5EX1BPUC4KICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCQkJbm9kZVB1c2gJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAkJCW5vZGVQdXNoCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIHhtbE5vZGVQdHIgdmFsdWUpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAkJbm9kZVBvcAkJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCQkJaW5wdXRQdXNoCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAorWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCQlub2RlUG9wCQkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CitYTUxQVUJGVU4gaW50CQkJaW5wdXRQdXNoCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIHhtbFBhcnNlcklucHV0UHRyIHZhbHVlKTsKLVhNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0ciBYTUxDQUxMCWlucHV0UG9wCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAluYW1lUG9wCQkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwJCQluYW1lUHVzaAkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0cglpbnB1dFBvcAkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgluYW1lUG9wCQkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAkJCW5hbWVQdXNoCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKIAogLyoKICAqIG90aGVyIGNvbW1vZGl0aWVzIHNoYXJlZCBiZXR3ZWVuIHBhcnNlci5jIGFuZCBwYXJzZXJJbnRlcm5hbHMuCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAkJCXhtbFNraXBCbGFua0NoYXJzCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCQkJeG1sU3RyaW5nQ3VycmVudENoYXIJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gaW50CQkJeG1sU2tpcEJsYW5rQ2hhcnMJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAkJCXhtbFN0cmluZ0N1cnJlbnRDaGFyCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqY3VyLAogCQkJCQkJIGludCAqbGVuKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwJCQl4bWxQYXJzZXJIYW5kbGVQRVJlZmVyZW5jZSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCQkJeG1sQ2hlY2tMYW5ndWFnZUlECShjb25zdCB4bWxDaGFyICpsYW5nKTsKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAkJCXhtbFBhcnNlckhhbmRsZVBFUmVmZXJlbmNlKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAkJCXhtbENoZWNrTGFuZ3VhZ2VJRAkoY29uc3QgeG1sQ2hhciAqbGFuZyk7CiAKIC8qCiAgKiBSZWFsbHkgY29yZSBmdW5jdGlvbiBzaGFyZWQgd2l0aCBIVE1MIHBhcnNlci4KICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCQkJeG1sQ3VycmVudENoYXIJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAkJCXhtbEN1cnJlbnRDaGFyCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGludCAqbGVuKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAkJeG1sQ29weUNoYXJNdWx0aUJ5dGUJKHhtbENoYXIgKm91dCwKK1hNTFBVQkZVTiBpbnQJCXhtbENvcHlDaGFyTXVsdGlCeXRlCSh4bWxDaGFyICpvdXQsCiAJCQkJCQkgaW50IHZhbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwJCQl4bWxDb3B5Q2hhcgkJKGludCBsZW4sCitYTUxQVUJGVU4gaW50CQkJeG1sQ29weUNoYXIJCShpbnQgbGVuLAogCQkJCQkJIHhtbENoYXIgKm91dCwKIAkJCQkJCSBpbnQgdmFsKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwJCQl4bWxOZXh0Q2hhcgkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCQkJeG1sUGFyc2VySW5wdXRTaHJpbmsJKHhtbFBhcnNlcklucHV0UHRyIGluKTsKLQotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLS8qCi0gKiBBY3R1YWxseSBjb21lcyBmcm9tIHRoZSBIVE1MIHBhcnNlciBidXQgbGF1bmNoZWQgZnJvbSB0aGUgaW5pdCBzdHVmZi4KLSAqLwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwJCQlodG1sSW5pdEF1dG9DbG9zZQkodm9pZCk7Ci1YTUxQVUJGVU4gaHRtbFBhcnNlckN0eHRQdHIgWE1MQ0FMTAlodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQoY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZyk7Ci0jZW5kaWYKK1hNTFBVQkZVTiB2b2lkCQkJeG1sTmV4dENoYXIJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOworWE1MX0RFUFJFQ0FURUQKK1hNTFBVQkZVTiB2b2lkCQkJeG1sUGFyc2VySW5wdXRTaHJpbmsJKHhtbFBhcnNlcklucHV0UHRyIGluKTsKIAogLyoKICAqIFNwZWNpZmljIGZ1bmN0aW9uIHRvIGtlZXAgdHJhY2sgb2YgZW50aXRpZXMgcmVmZXJlbmNlcwpAQCAtNjAwLDM0ICs2MTYsMzQgQEAKIAkJCQkJCSB4bWxOb2RlUHRyIGxhc3ROb2RlKTsKIAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwJCXhtbFNldEVudGl0eVJlZmVyZW5jZUZ1bmMJKHhtbEVudGl0eVJlZmVyZW5jZUZ1bmMgZnVuYyk7CitYTUxQVUJGVU4gdm9pZAkJeG1sU2V0RW50aXR5UmVmZXJlbmNlRnVuYwkoeG1sRW50aXR5UmVmZXJlbmNlRnVuYyBmdW5jKTsKIAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sUGFyc2VRdW90ZWRTdHJpbmcJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlTmFtZXNwYWNlICAgICAgICh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sTmFtZXNwYWNlUGFyc2VOU0RlZgkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFNjYW5OYW1lCQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbE5hbWVzcGFjZVBhcnNlTkNOYW1lCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwJeG1sUGFyc2VySGFuZGxlUmVmZXJlbmNlKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CitYTUxQVUJGVU4gdm9pZAl4bWxQYXJzZXJIYW5kbGVSZWZlcmVuY2UoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbE5hbWVzcGFjZVBhcnNlUU5hbWUJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSB4bWxDaGFyICoqcHJlZml4KTsKIC8qKgogICogRW50aXRpZXMKICAqLwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxEZWNvZGVFbnRpdGllcwkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSBpbnQgbGVuLAogCQkJCQkJIGludCB3aGF0LApAQCAtNjM1LDIxICs2NTEsMTIgQEAKIAkJCQkJCSB4bWxDaGFyICBlbmQyLAogCQkJCQkJIHhtbENoYXIgZW5kMyk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbEhhbmRsZUVudGl0eQkJKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJCSB4bWxFbnRpdHlQdHIgZW50aXR5KTsKIAogI2VuZGlmIC8qIExJQlhNTF9MRUdBQ1lfRU5BQkxFRCAqLwogCi0jaWZkZWYgSU5fTElCWE1MCi0vKgotICogaW50ZXJuYWwgb25seQotICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCi0JeG1sRXJyTWVtb3J5CQkoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAotCQkJCSBjb25zdCBjaGFyICpleHRyYSk7Ci0jZW5kaWYKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3BhdHRlcm4uaCBiL2luY2x1ZGUvbGlieG1sL3BhdHRlcm4uaAppbmRleCA5N2QyY2QyLi43MmJmMjM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oCkBAIC00MywxOCArNDMsMTggQEAKICAgICBYTUxfUEFUVEVSTl9YU0ZJRUxECQk9IDE8PDIJLyogWFBhdGggc3Vic2V0IGZvciBzY2hlbWEgZmllbGQgKi8KIH0geG1sUGF0dGVybkZsYWdzOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sRnJlZVBhdHRlcm4JCSh4bWxQYXR0ZXJuUHRyIGNvbXApOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sRnJlZVBhdHRlcm5MaXN0CSh4bWxQYXR0ZXJuUHRyIGNvbXApOwogCi1YTUxQVUJGVU4geG1sUGF0dGVyblB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGF0dGVyblB0cgogCQkJeG1sUGF0dGVybmNvbXBpbGUJKGNvbnN0IHhtbENoYXIgKnBhdHRlcm4sCiAJCQkJCQkgeG1sRGljdCAqZGljdCwKIAkJCQkJCSBpbnQgZmxhZ3MsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqKm5hbWVzcGFjZXMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxQYXR0ZXJuTWF0Y2gJCSh4bWxQYXR0ZXJuUHRyIGNvbXAsCiAJCQkJCQkgeG1sTm9kZVB0ciBub2RlKTsKIApAQCAtNjIsMzQgKzYyLDM0IEBACiB0eXBlZGVmIHN0cnVjdCBfeG1sU3RyZWFtQ3R4dCB4bWxTdHJlYW1DdHh0OwogdHlwZWRlZiB4bWxTdHJlYW1DdHh0ICp4bWxTdHJlYW1DdHh0UHRyOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFBhdHRlcm5TdHJlYW1hYmxlCSh4bWxQYXR0ZXJuUHRyIGNvbXApOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxQYXR0ZXJuTWF4RGVwdGgJKHhtbFBhdHRlcm5QdHIgY29tcCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFBhdHRlcm5NaW5EZXB0aAkoeG1sUGF0dGVyblB0ciBjb21wKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sUGF0dGVybkZyb21Sb290CSh4bWxQYXR0ZXJuUHRyIGNvbXApOwotWE1MUFVCRlVOIHhtbFN0cmVhbUN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFN0cmVhbUN0eHRQdHIKIAkJCXhtbFBhdHRlcm5HZXRTdHJlYW1DdHh0CSh4bWxQYXR0ZXJuUHRyIGNvbXApOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbEZyZWVTdHJlYW1DdHh0CSh4bWxTdHJlYW1DdHh0UHRyIHN0cmVhbSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFN0cmVhbVB1c2hOb2RlCSh4bWxTdHJlYW1DdHh0UHRyIHN0cmVhbSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5zLAogCQkJCQkJIGludCBub2RlVHlwZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFN0cmVhbVB1c2gJCSh4bWxTdHJlYW1DdHh0UHRyIHN0cmVhbSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5zKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sU3RyZWFtUHVzaEF0dHIJKHhtbFN0cmVhbUN0eHRQdHIgc3RyZWFtLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbnMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxTdHJlYW1Qb3AJCSh4bWxTdHJlYW1DdHh0UHRyIHN0cmVhbSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFN0cmVhbVdhbnRzQW55Tm9kZQkoeG1sU3RyZWFtQ3R4dFB0ciBzdHJlYW0pOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC9yZWxheG5nLmggYi9pbmNsdWRlL2xpYnhtbC9yZWxheG5nLmgKaW5kZXggNjM2OTc4NS4uMDc5YjdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3JlbGF4bmcuaApAQCAtMTEsOCArMTEsOSBAQAogI2RlZmluZSBfX1hNTF9SRUxBWF9OR19fCiAKICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpYnhtbC9oYXNoLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgorI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CiAKICNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECiAKQEAgLTMyLDcgKzMzLDcgQEAKICAqCiAgKiBTaWduYXR1cmUgb2YgYW4gZXJyb3IgY2FsbGJhY2sgZnJvbSBhIFJlbGF4LU5HIHZhbGlkYXRpb24KICAqLwotdHlwZWRlZiB2b2lkIChYTUxDREVDTCAqeG1sUmVsYXhOR1ZhbGlkaXR5RXJyb3JGdW5jKSAodm9pZCAqY3R4LAordHlwZWRlZiB2b2lkICgqeG1sUmVsYXhOR1ZhbGlkaXR5RXJyb3JGdW5jKSAodm9pZCAqY3R4LAogCQkJCQkJICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJCQkJICAgICAgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIApAQCAtNDQsNyArNDUsNyBAQAogICoKICAqIFNpZ25hdHVyZSBvZiBhIHdhcm5pbmcgY2FsbGJhY2sgZnJvbSBhIFJlbGF4LU5HIHZhbGlkYXRpb24KICAqLwotdHlwZWRlZiB2b2lkIChYTUxDREVDTCAqeG1sUmVsYXhOR1ZhbGlkaXR5V2FybmluZ0Z1bmMpICh2b2lkICpjdHgsCit0eXBlZGVmIHZvaWQgKCp4bWxSZWxheE5HVmFsaWRpdHlXYXJuaW5nRnVuYykgKHZvaWQgKmN0eCwKIAkJCQkJCQljb25zdCBjaGFyICptc2csCiAJCQkJCQkJLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIApAQCAtMTE2LDk1ICsxMTcsOTUgQEAKICAgICBYTUxfUkVMQVhOR1BfQ1JORyA9IDIKIH0geG1sUmVsYXhOR1BhcnNlckZsYWc7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVsYXhOR0luaXRUeXBlcwkJKHZvaWQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCSAgICB4bWxSZWxheE5HQ2xlYW51cFR5cGVzCSh2b2lkKTsKIAogLyoKICAqIEludGVyZmFjZXMgZm9yIHBhcnNpbmcuCiAgKi8KLVhNTFBVQkZVTiB4bWxSZWxheE5HUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUmVsYXhOR1BhcnNlckN0eHRQdHIKIAkJICAgIHhtbFJlbGF4TkdOZXdQYXJzZXJDdHh0CShjb25zdCBjaGFyICpVUkwpOwotWE1MUFVCRlVOIHhtbFJlbGF4TkdQYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxSZWxheE5HUGFyc2VyQ3R4dFB0cgogCQkgICAgeG1sUmVsYXhOR05ld01lbVBhcnNlckN0eHQJKGNvbnN0IGNoYXIgKmJ1ZmZlciwKIAkJCQkJCSBpbnQgc2l6ZSk7Ci1YTUxQVUJGVU4geG1sUmVsYXhOR1BhcnNlckN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFJlbGF4TkdQYXJzZXJDdHh0UHRyCiAJCSAgICB4bWxSZWxheE5HTmV3RG9jUGFyc2VyQ3R4dAkoeG1sRG9jUHRyIGRvYyk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVsYXhQYXJzZXJTZXRGbGFnCSh4bWxSZWxheE5HUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGludCBmbGFnKTsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFJlbGF4TkdGcmVlUGFyc2VyQ3R4dAkoeG1sUmVsYXhOR1BhcnNlckN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sUmVsYXhOR1NldFBhcnNlckVycm9ycyh4bWxSZWxheE5HUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sUmVsYXhOR1ZhbGlkaXR5RXJyb3JGdW5jIGVyciwKIAkJCQkJIHhtbFJlbGF4TkdWYWxpZGl0eVdhcm5pbmdGdW5jIHdhcm4sCiAJCQkJCSB2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxSZWxheE5HR2V0UGFyc2VyRXJyb3JzKHhtbFJlbGF4TkdQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxSZWxheE5HVmFsaWRpdHlFcnJvckZ1bmMgKmVyciwKIAkJCQkJIHhtbFJlbGF4TkdWYWxpZGl0eVdhcm5pbmdGdW5jICp3YXJuLAogCQkJCQkgdm9pZCAqKmN0eCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sUmVsYXhOR1NldFBhcnNlclN0cnVjdHVyZWRFcnJvcnMoCiAJCQkJCSB4bWxSZWxheE5HUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzZXJyb3IsCiAJCQkJCSB2b2lkICpjdHgpOwotWE1MUFVCRlVOIHhtbFJlbGF4TkdQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFJlbGF4TkdQdHIKIAkJICAgIHhtbFJlbGF4TkdQYXJzZQkJKHhtbFJlbGF4TkdQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFJlbGF4TkdGcmVlCQkoeG1sUmVsYXhOR1B0ciBzY2hlbWEpOwogI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFJlbGF4TkdEdW1wCQkoRklMRSAqb3V0cHV0LAogCQkJCQkgeG1sUmVsYXhOR1B0ciBzY2hlbWEpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFJlbGF4TkdEdW1wVHJlZQkoRklMRSAqIG91dHB1dCwKIAkJCQkJIHhtbFJlbGF4TkdQdHIgc2NoZW1hKTsKICNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KIC8qCiAgKiBJbnRlcmZhY2VzIGZvciB2YWxpZGF0aW5nCiAgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCSAgICB4bWxSZWxheE5HU2V0VmFsaWRFcnJvcnMoeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sUmVsYXhOR1ZhbGlkaXR5RXJyb3JGdW5jIGVyciwKIAkJCQkJIHhtbFJlbGF4TkdWYWxpZGl0eVdhcm5pbmdGdW5jIHdhcm4sCiAJCQkJCSB2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxSZWxheE5HR2V0VmFsaWRFcnJvcnMoeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sUmVsYXhOR1ZhbGlkaXR5RXJyb3JGdW5jICplcnIsCiAJCQkJCSB4bWxSZWxheE5HVmFsaWRpdHlXYXJuaW5nRnVuYyAqd2FybiwKIAkJCQkJIHZvaWQgKipjdHgpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbFJlbGF4TkdTZXRWYWxpZFN0cnVjdHVyZWRFcnJvcnMoeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgc2Vycm9yLCB2b2lkICpjdHgpOwotWE1MUFVCRlVOIHhtbFJlbGF4TkdWYWxpZEN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFJlbGF4TkdWYWxpZEN0eHRQdHIKIAkJICAgIHhtbFJlbGF4TkdOZXdWYWxpZEN0eHQJKHhtbFJlbGF4TkdQdHIgc2NoZW1hKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCSAgICB4bWxSZWxheE5HRnJlZVZhbGlkQ3R4dAkoeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVsYXhOR1ZhbGlkYXRlRG9jCSh4bWxSZWxheE5HVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sRG9jUHRyIGRvYyk7CiAvKgogICogSW50ZXJmYWNlcyBmb3IgcHJvZ3Jlc3NpdmUgdmFsaWRhdGlvbiB3aGVuIHBvc3NpYmxlCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVsYXhOR1ZhbGlkYXRlUHVzaEVsZW1lbnQJKHhtbFJlbGF4TkdWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIGVsZW0pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxSZWxheE5HVmFsaWRhdGVQdXNoQ0RhdGEJKHhtbFJlbGF4TkdWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmRhdGEsCiAJCQkJCSBpbnQgbGVuKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVsYXhOR1ZhbGlkYXRlUG9wRWxlbWVudAkoeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgZWxlbSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFJlbGF4TkdWYWxpZGF0ZUZ1bGxFbGVtZW50CSh4bWxSZWxheE5HVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBlbGVtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBiL2luY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaAppbmRleCBjNTIxZDFjLi5lOWQzYjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGlieG1sL3htbHJlZ2V4cC5oPgogI2luY2x1ZGUgPGxpYnhtbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGlieG1sL2RpY3QuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtOTQ3LDggKzk0OCw4IEBACiAgICAgdm9pZCAqdm9sYXRpbGVzOyAvKiBPYnNvbGV0ZSAqLwogfTsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCAgICAgICAgIHhtbFNjaGVtYUZyZWVUeXBlICAgICAgICAoeG1sU2NoZW1hVHlwZVB0ciB0eXBlKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgICAgICAgICB4bWxTY2hlbWFGcmVlV2lsZGNhcmQoeG1sU2NoZW1hV2lsZGNhcmRQdHIgd2lsZGNhcmQpOworWE1MUFVCRlVOIHZvaWQgICAgICAgICB4bWxTY2hlbWFGcmVlVHlwZSAgICAgICAgKHhtbFNjaGVtYVR5cGVQdHIgdHlwZSk7CitYTUxQVUJGVU4gdm9pZCAgICAgICAgIHhtbFNjaGVtYUZyZWVXaWxkY2FyZCh4bWxTY2hlbWFXaWxkY2FyZFB0ciB3aWxkY2FyZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvc2NoZW1hdHJvbi5oIGIvaW5jbHVkZS9saWJ4bWwvc2NoZW1hdHJvbi5oCmluZGV4IGM2MWU2MWIuLjhkZDhkMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3NjaGVtYXRyb24uaAorKysgYi9pbmNsdWRlL2xpYnhtbC9zY2hlbWF0cm9uLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2lmZGVmIExJQlhNTF9TQ0hFTUFUUk9OX0VOQUJMRUQKIAorI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgogI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNjksNjggKzcwLDY4IEBACiAvKgogICogSW50ZXJmYWNlcyBmb3IgcGFyc2luZy4KICAqLwotWE1MUFVCRlVOIHhtbFNjaGVtYXRyb25QYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWF0cm9uUGFyc2VyQ3R4dFB0cgogCSAgICB4bWxTY2hlbWF0cm9uTmV3UGFyc2VyQ3R4dAkoY29uc3QgY2hhciAqVVJMKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWF0cm9uUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2NoZW1hdHJvblBhcnNlckN0eHRQdHIKIAkgICAgeG1sU2NoZW1hdHJvbk5ld01lbVBhcnNlckN0eHQoY29uc3QgY2hhciAqYnVmZmVyLAogCQkJCQkgaW50IHNpemUpOwotWE1MUFVCRlVOIHhtbFNjaGVtYXRyb25QYXJzZXJDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWF0cm9uUGFyc2VyQ3R4dFB0cgogCSAgICB4bWxTY2hlbWF0cm9uTmV3RG9jUGFyc2VyQ3R4dCh4bWxEb2NQdHIgZG9jKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYXRyb25GcmVlUGFyc2VyQ3R4dAkoeG1sU2NoZW1hdHJvblBhcnNlckN0eHRQdHIgY3R4dCk7CiAvKioqKioKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYXRyb25TZXRQYXJzZXJFcnJvcnMoeG1sU2NoZW1hdHJvblBhcnNlckN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbFNjaGVtYXRyb25WYWxpZGl0eUVycm9yRnVuYyBlcnIsCiAJCQkJCSB4bWxTY2hlbWF0cm9uVmFsaWRpdHlXYXJuaW5nRnVuYyB3YXJuLAogCQkJCQkgdm9pZCAqY3R4KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWF0cm9uR2V0UGFyc2VyRXJyb3JzKHhtbFNjaGVtYXRyb25QYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCXhtbFNjaGVtYXRyb25WYWxpZGl0eUVycm9yRnVuYyAqIGVyciwKIAkJCQkJeG1sU2NoZW1hdHJvblZhbGlkaXR5V2FybmluZ0Z1bmMgKiB3YXJuLAogCQkJCQl2b2lkICoqY3R4KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWF0cm9uSXNWYWxpZAkoeG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0ciBjdHh0KTsKICAqKioqKi8KLVhNTFBVQkZVTiB4bWxTY2hlbWF0cm9uUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWF0cm9uUHRyCiAJICAgIHhtbFNjaGVtYXRyb25QYXJzZQkJKHhtbFNjaGVtYXRyb25QYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkgICAgeG1sU2NoZW1hdHJvbkZyZWUJCSh4bWxTY2hlbWF0cm9uUHRyIHNjaGVtYSk7CiAvKgogICogSW50ZXJmYWNlcyBmb3IgdmFsaWRhdGluZwogICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCSAgICB4bWxTY2hlbWF0cm9uU2V0VmFsaWRTdHJ1Y3R1cmVkRXJyb3JzKAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxTY2hlbWF0cm9uVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSAgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzZXJyb3IsCiAJCQkJCSAgdm9pZCAqY3R4KTsKIC8qKioqKioKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYXRyb25TZXRWYWxpZEVycm9ycwkoeG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU2NoZW1hdHJvblZhbGlkaXR5RXJyb3JGdW5jIGVyciwKIAkJCQkJIHhtbFNjaGVtYXRyb25WYWxpZGl0eVdhcm5pbmdGdW5jIHdhcm4sCiAJCQkJCSB2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYXRyb25HZXRWYWxpZEVycm9ycwkoeG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU2NoZW1hdHJvblZhbGlkaXR5RXJyb3JGdW5jICplcnIsCiAJCQkJCSB4bWxTY2hlbWF0cm9uVmFsaWRpdHlXYXJuaW5nRnVuYyAqd2FybiwKIAkJCQkJIHZvaWQgKipjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYXRyb25TZXRWYWxpZE9wdGlvbnMoeG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYXRyb25WYWxpZEN0eHRHZXRPcHRpb25zKHhtbFNjaGVtYXRyb25WYWxpZEN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgICAgIHhtbFNjaGVtYXRyb25WYWxpZGF0ZU9uZUVsZW1lbnQgKHhtbFNjaGVtYXRyb25WYWxpZEN0eHRQdHIgY3R4dCwKIAkJCSAgICAgICAgICAgICAgICAgeG1sTm9kZVB0ciBlbGVtKTsKICAqKioqKioqLwogCi1YTUxQVUJGVU4geG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0cgogCSAgICB4bWxTY2hlbWF0cm9uTmV3VmFsaWRDdHh0CSh4bWxTY2hlbWF0cm9uUHRyIHNjaGVtYSwKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYXRyb25GcmVlVmFsaWRDdHh0CSh4bWxTY2hlbWF0cm9uVmFsaWRDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYXRyb25WYWxpZGF0ZURvYwkoeG1sU2NoZW1hdHJvblZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGluc3RhbmNlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oIGIvaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oCmluZGV4IDZlZWRhYzEuLjhmNGI2ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3RocmVhZHMuaAorKysgYi9pbmNsdWRlL2xpYnhtbC90aHJlYWRzLmgKQEAgLTI5LDU5ICsyOSw1NSBAQAogdHlwZWRlZiBzdHJ1Y3QgX3htbFJNdXRleCB4bWxSTXV0ZXg7CiB0eXBlZGVmIHhtbFJNdXRleCAqeG1sUk11dGV4UHRyOwogCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1YTUxQVUJGVU4geG1sTXV0ZXhQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIGludAorCQkJeG1sQ2hlY2tUaHJlYWRMb2NhbFN0b3JhZ2Uodm9pZCk7CisKK1hNTFBVQkZVTiB4bWxNdXRleFB0cgogCQkJeG1sTmV3TXV0ZXgJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbE11dGV4TG9jawkoeG1sTXV0ZXhQdHIgdG9rKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxNdXRleFVubG9jawkoeG1sTXV0ZXhQdHIgdG9rKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxGcmVlTXV0ZXgJKHhtbE11dGV4UHRyIHRvayk7CiAKLVhNTFBVQkZVTiB4bWxSTXV0ZXhQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFJNdXRleFB0cgogCQkJeG1sTmV3Uk11dGV4CSh2b2lkKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxSTXV0ZXhMb2NrCSh4bWxSTXV0ZXhQdHIgdG9rKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxSTXV0ZXhVbmxvY2sJKHhtbFJNdXRleFB0ciB0b2spOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbEZyZWVSTXV0ZXgJKHhtbFJNdXRleFB0ciB0b2spOwogCiAvKgogICogTGlicmFyeSB3aWRlIEFQSXMuCiAgKi8KIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sSW5pdFRocmVhZHMJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbExvY2tMaWJyYXJ5CSh2b2lkKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxVbmxvY2tMaWJyYXJ5KHZvaWQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQkJeG1sR2V0VGhyZWFkSWQJKHZvaWQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxfREVQUkVDQVRFRAorWE1MUFVCRlVOIGludAogCQkJeG1sSXNNYWluVGhyZWFkCSh2b2lkKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sQ2xlYW51cFRocmVhZHModm9pZCk7Ci1YTUxQVUJGVU4geG1sR2xvYmFsU3RhdGVQdHIgWE1MQ0FMTAotCQkJeG1sR2V0R2xvYmFsU3RhdGUodm9pZCk7CiAKLSNpZmRlZiBIQVZFX1BUSFJFQURfSAotI2VsaWYgZGVmaW5lZChIQVZFX1dJTjMyX1RIUkVBRFMpICYmICFkZWZpbmVkKEhBVkVfQ09NUElMRVJfVExTKSAmJiAoIWRlZmluZWQoTElCWE1MX1NUQVRJQykgfHwgZGVmaW5lZChMSUJYTUxfU1RBVElDX0ZPUl9ETEwpKQotI2lmIGRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKQotaW50IFhNTENBTEwKKy8qKiBET0NfRElTQUJMRSAqLworI2lmIGRlZmluZWQoTElCWE1MX1RIUkVBRF9FTkFCTEVEKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgXAorICAgIGRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKQoraW50CiB4bWxEbGxNYWluKHZvaWQgKmhpbnN0RExMLCB1bnNpZ25lZCBsb25nIGZkd1JlYXNvbiwKICAgICAgICAgICAgdm9pZCAqbHB2UmVzZXJ2ZWQpOwogI2VuZGlmCi0jZW5kaWYKKy8qKiBET0NfRU5BQkxFICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGIvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCmluZGV4IDk4ZTIwODcuLmE5MGExNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3RyZWUuaAorKysgYi9pbmNsdWRlL2xpYnhtbC90cmVlLmgKQEAgLTksNiArOSwxNSBAQAogICogQXV0aG9yOiBEYW5pZWwgVmVpbGxhcmQKICAqLwogCisjaWZuZGVmIFhNTF9UUkVFX0lOVEVSTkFMUworCisvKgorICogRW11bGF0ZSBjaXJjdWxhciBkZXBlbmRlbmN5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgKi8KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisKKyNlbHNlIC8qIFhNTF9UUkVFX0lOVEVSTkFMUyAqLworCiAjaWZuZGVmIF9fWE1MX1RSRUVfSF9fCiAjZGVmaW5lIF9fWE1MX1RSRUVfSF9fCiAKQEAgLTE2LDYgKzI1LDggQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHJlZ2V4cC5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtNzQsNyArODUsNyBAQAogdHlwZWRlZiBlbnVtIHsKICAgICBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlULAkvKiBkb3VibGUgZWFjaCB0aW1lIG9uZSBuZWVkIHRvIGdyb3cgKi8KICAgICBYTUxfQlVGRkVSX0FMTE9DX0VYQUNULAkvKiBncm93IG9ubHkgdG8gdGhlIG1pbmltYWwgc2l6ZSAqLwotICAgIFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFLCAvKiBpbW11dGFibGUgYnVmZmVyICovCisgICAgWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUsIC8qIGltbXV0YWJsZSBidWZmZXIsIGRlcHJlY2F0ZWQgKi8KICAgICBYTUxfQlVGRkVSX0FMTE9DX0lPLAkvKiBzcGVjaWFsIGFsbG9jYXRpb24gc2NoZW1lIHVzZWQgZm9yIEkvTyAqLwogICAgIFhNTF9CVUZGRVJfQUxMT0NfSFlCUklELAkvKiBleGFjdCB1cCB0byBhIHRocmVzaG9sZCwgYW5kIGRvdWJsZWl0IHRoZXJlYWZ0ZXIgKi8KICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQJLyogbGltaXQgdGhlIHVwcGVyIHNpemUgb2YgdGhlIGJ1ZmZlciAqLwpAQCAtMTE3LDEwICsxMjgsMTAgQEAKICAqIEEgZmV3IHB1YmxpYyByb3V0aW5lcyBmb3IgeG1sQnVmLiBBcyB0aG9zZSBhcmUgZXhwZWN0ZWQgdG8gYmUgdXNlZAogICogbW9zdGx5IGludGVybmFsbHkgdGhlIGJ1bGsgb2YgdGhlIHJvdXRpbmVzIGFyZSBpbnRlcm5hbCBpbiBidWYuaAogICovCi1YTUxQVUJGVU4geG1sQ2hhciogWE1MQ0FMTCAgICAgICB4bWxCdWZDb250ZW50CShjb25zdCB4bWxCdWYqIGJ1Zik7Ci1YTUxQVUJGVU4geG1sQ2hhciogWE1MQ0FMTCAgICAgICB4bWxCdWZFbmQgICAgICAoeG1sQnVmUHRyIGJ1Zik7Ci1YTUxQVUJGVU4gc2l6ZV90IFhNTENBTEwgICAgICAgICB4bWxCdWZVc2UgICAgICAoY29uc3QgeG1sQnVmUHRyIGJ1Zik7Ci1YTUxQVUJGVU4gc2l6ZV90IFhNTENBTEwgICAgICAgICB4bWxCdWZTaHJpbmsJKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBsZW4pOworWE1MUFVCRlVOIHhtbENoYXIqICAgICAgIHhtbEJ1ZkNvbnRlbnQJKGNvbnN0IHhtbEJ1ZiogYnVmKTsKK1hNTFBVQkZVTiB4bWxDaGFyKiAgICAgICB4bWxCdWZFbmQgICAgICAoeG1sQnVmUHRyIGJ1Zik7CitYTUxQVUJGVU4gc2l6ZV90ICAgICAgICAgeG1sQnVmVXNlICAgICAgKGNvbnN0IHhtbEJ1ZlB0ciBidWYpOworWE1MUFVCRlVOIHNpemVfdCAgICAgICAgIHhtbEJ1ZlNocmluawkoeG1sQnVmUHRyIGJ1Ziwgc2l6ZV90IGxlbik7CiAKIC8qCiAgKiBMSUJYTUwyX05FV19CVUZGRVI6CkBAIC0xODAsOCArMTkxLDEwIEBACiAgICAgLyogWE1MX0RPQ0JfRE9DVU1FTlRfTk9ERT0JMjEgKi8gLyogcmVtb3ZlZCAqLwogfSB4bWxFbGVtZW50VHlwZTsKIAorLyoqIERPQ19ESVNBQkxFICovCiAvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBYTUxfRE9DQl9ET0NVTUVOVF9OT0RFIDIxCisvKiogRE9DX0VOQUJMRSAqLwogCiAvKioKICAqIHhtbE5vdGF0aW9uOgpAQCAtMzI3LDE0ICszNDAsNiBAQAogICAgIFhNTF9FTEVNRU5UX1RZUEVfRUxFTUVOVAogfSB4bWxFbGVtZW50VHlwZVZhbDsKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaWJ4bWwveG1scmVnZXhwLmg+Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KIC8qKgogICogeG1sRWxlbWVudDoKICAqCkBAIC01NzEsMTIgKzU3NiwxMSBAQAogICAgIHN0cnVjdCBfeG1sRHRkICAqZXh0U3Vic2V0OwkvKiB0aGUgZG9jdW1lbnQgZXh0ZXJuYWwgc3Vic2V0ICovCiAgICAgc3RydWN0IF94bWxOcyAgICpvbGROczsJLyogR2xvYmFsIG5hbWVzcGFjZSwgdGhlIG9sZCB3YXkgKi8KICAgICBjb25zdCB4bWxDaGFyICAqdmVyc2lvbjsJLyogdGhlIFhNTCB2ZXJzaW9uIHN0cmluZyAqLwotICAgIGNvbnN0IHhtbENoYXIgICplbmNvZGluZzsgICAvKiBleHRlcm5hbCBpbml0aWFsIGVuY29kaW5nLCBpZiBhbnkgKi8KKyAgICBjb25zdCB4bWxDaGFyICAqZW5jb2Rpbmc7ICAgLyogYWN0dWFsIGVuY29kaW5nLCBpZiBhbnkgKi8KICAgICB2b2lkICAgICAgICAgICAqaWRzOyAgICAgICAgLyogSGFzaCB0YWJsZSBmb3IgSUQgYXR0cmlidXRlcyBpZiBhbnkgKi8KICAgICB2b2lkICAgICAgICAgICAqcmVmczsgICAgICAgLyogSGFzaCB0YWJsZSBmb3IgSURSRUZzIGF0dHJpYnV0ZXMgaWYgYW55ICovCiAgICAgY29uc3QgeG1sQ2hhciAgKlVSTDsJLyogVGhlIFVSSSBmb3IgdGhhdCBkb2N1bWVudCAqLwotICAgIGludCAgICAgICAgICAgICBjaGFyc2V0OyAgICAvKiBJbnRlcm5hbCBmbGFnIGZvciBjaGFyc2V0IGhhbmRsaW5nLAotCQkJCSAgIGFjdHVhbGx5IGFuIHhtbENoYXJFbmNvZGluZyAqLworICAgIGludCAgICAgICAgICAgICBjaGFyc2V0OyAgICAvKiB1bnVzZWQgKi8KICAgICBzdHJ1Y3QgX3htbERpY3QgKmRpY3Q7ICAgICAgLyogZGljdCB1c2VkIHRvIGFsbG9jYXRlIG5hbWVzIG9yIE5VTEwgKi8KICAgICB2b2lkICAgICAgICAgICAqcHN2aTsJLyogZm9yIHR5cGUvUFNWSSBpbmZvcm1hdGlvbiAqLwogICAgIGludCAgICAgICAgICAgICBwYXJzZUZsYWdzOwkvKiBzZXQgb2YgeG1sUGFyc2VyT3B0aW9uIHVzZWQgdG8gcGFyc2UgdGhlCkBAIC02MjksNiArNjMzLDIyIEBACiB9OwogCiAvKioKKyAqIHhtbFJlZ2lzdGVyTm9kZUZ1bmM6CisgKiBAbm9kZTogdGhlIGN1cnJlbnQgbm9kZQorICoKKyAqIFNpZ25hdHVyZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBjYWxsYmFjayBvZiBhIGNyZWF0ZWQgbm9kZQorICovCit0eXBlZGVmIHZvaWQgKCp4bWxSZWdpc3Rlck5vZGVGdW5jKSAoeG1sTm9kZVB0ciBub2RlKTsKKworLyoqCisgKiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmM6CisgKiBAbm9kZTogdGhlIGN1cnJlbnQgbm9kZQorICoKKyAqIFNpZ25hdHVyZSBmb3IgdGhlIGRlcmVnaXN0cmF0aW9uIGNhbGxiYWNrIG9mIGEgZGlzY2FyZGVkIG5vZGUKKyAqLwordHlwZWRlZiB2b2lkICgqeG1sRGVyZWdpc3Rlck5vZGVGdW5jKSAoeG1sTm9kZVB0ciBub2RlKTsKKworLyoqCiAgKiB4bWxDaGlsZHJlbk5vZGU6CiAgKgogICogTWFjcm8gZm9yIGNvbXBhdGliaWxpdHkgbmFtaW5nIGxheWVyIHdpdGggbGlieG1sMS4gTWFwcwpAQCAtNjUyLDQwICs2NzIsNTYgQEAKICAqIFZhcmlhYmxlcy4KICAqLwogCisvKiogRE9DX0RJU0FCTEUgKi8KKyNkZWZpbmUgWE1MX0dMT0JBTFNfVFJFRSBcCisgIFhNTF9PUCh4bWxCdWZmZXJBbGxvY1NjaGVtZSwgeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSwgWE1MX0RFUFJFQ0FURUQpIFwKKyAgWE1MX09QKHhtbERlZmF1bHRCdWZmZXJTaXplLCBpbnQsIFhNTF9ERVBSRUNBVEVEKSBcCisgIFhNTF9PUCh4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUsIHhtbFJlZ2lzdGVyTm9kZUZ1bmMsIFhNTF9ERVBSRUNBVEVEKSBcCisgIFhNTF9PUCh4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSwgeG1sRGVyZWdpc3Rlck5vZGVGdW5jLCBcCisgICAgICAgICBYTUxfREVQUkVDQVRFRCkKKworI2RlZmluZSBYTUxfT1AgWE1MX0RFQ0xBUkVfR0xPQkFMCitYTUxfR0xPQkFMU19UUkVFCisjdW5kZWYgWE1MX09QCisKKyNpZiBkZWZpbmVkKExJQlhNTF9USFJFQURfRU5BQkxFRCkgJiYgIWRlZmluZWQoWE1MX0dMT0JBTFNfTk9fUkVERUZJTklUSU9OKQorICAjZGVmaW5lIHhtbEJ1ZmZlckFsbG9jU2NoZW1lIFhNTF9HTE9CQUxfTUFDUk8oeG1sQnVmZmVyQWxsb2NTY2hlbWUpCisgICNkZWZpbmUgeG1sRGVmYXVsdEJ1ZmZlclNpemUgWE1MX0dMT0JBTF9NQUNSTyh4bWxEZWZhdWx0QnVmZmVyU2l6ZSkKKyAgI2RlZmluZSB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgXAorICAgIFhNTF9HTE9CQUxfTUFDUk8oeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKQorICAjZGVmaW5lIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlIFwKKyAgICBYTUxfR0xPQkFMX01BQ1JPKHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlKQorI2VuZGlmCisvKiogRE9DX0VOQUJMRSAqLworCiAvKgogICogU29tZSBoZWxwZXIgZnVuY3Rpb25zCiAgKi8KLSNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpIHx8IFwKLSAgICBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0RFQlVHX0VOQUJMRUQpIHx8IFwKLSAgICBkZWZpbmVkIChMSUJYTUxfSFRNTF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpIHx8IFwKLSAgICBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKSB8fCBcCi0gICAgZGVmaW5lZChMSUJYTUxfTEVHQUNZX0VOQUJMRUQpCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVOQ05hbWUJKGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkgaW50IHNwYWNlKTsKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChMSUJYTUxfVFJFRV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVRTmFtZQkoY29uc3QgeG1sQ2hhciAqdmFsdWUsCiAJCQkJCSBpbnQgc3BhY2UpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlTmFtZQkJKGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkgaW50IHNwYWNlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZU5NVG9rZW4JKGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkgaW50IHNwYWNlKTsKICNlbmRpZgogCi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sQnVpbGRRTmFtZQkJKGNvbnN0IHhtbENoYXIgKm5jbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnByZWZpeCwKIAkJCQkJIHhtbENoYXIgKm1lbW9yeSwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbFNwbGl0UU5hbWUyCQkoY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIHhtbENoYXIgKipwcmVmaXgpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCXhtbFNwbGl0UU5hbWUzCQkoY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGludCAqbGVuKTsKIApAQCAtNjkzLDMxOCArNzI5LDMxOCBAQAogICogSGFuZGxpbmcgQnVmZmVycywgdGhlIG9sZCBvbmVzIHNlZSBAeG1sQnVmIGZvciB0aGUgbmV3IG9uZXMuCiAgKi8KIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU2V0QnVmZmVyQWxsb2NhdGlvblNjaGVtZSh4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHNjaGVtZSk7Ci1YTUxQVUJGVU4geG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSBYTUxDQUxMCitYTUxQVUJGVU4geG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZQogCQl4bWxHZXRCdWZmZXJBbGxvY2F0aW9uU2NoZW1lKHZvaWQpOwogCi1YTUxQVUJGVU4geG1sQnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxCdWZmZXJQdHIKIAkJeG1sQnVmZmVyQ3JlYXRlCQkodm9pZCk7Ci1YTUxQVUJGVU4geG1sQnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxCdWZmZXJQdHIKIAkJeG1sQnVmZmVyQ3JlYXRlU2l6ZQkoc2l6ZV90IHNpemUpOwotWE1MUFVCRlVOIHhtbEJ1ZmZlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQnVmZmVyUHRyCiAJCXhtbEJ1ZmZlckNyZWF0ZVN0YXRpYwkodm9pZCAqbWVtLAogCQkJCQkgc2l6ZV90IHNpemUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbEJ1ZmZlclJlc2l6ZQkJKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxCdWZmZXJGcmVlCQkoeG1sQnVmZmVyUHRyIGJ1Zik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQnVmZmVyRHVtcAkJKEZJTEUgKmZpbGUsCiAJCQkJCSB4bWxCdWZmZXJQdHIgYnVmKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxCdWZmZXJBZGQJCSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqc3RyLAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQnVmZmVyQWRkSGVhZAkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnN0ciwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbEJ1ZmZlckNhdAkJKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpzdHIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbEJ1ZmZlckNDYXQJCSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgY29uc3QgY2hhciAqc3RyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxCdWZmZXJTaHJpbmsJCSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgdW5zaWduZWQgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sQnVmZmVyR3JvdwkJKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbGVuKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEJ1ZmZlckVtcHR5CQkoeG1sQnVmZmVyUHRyIGJ1Zik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIqCiAJCXhtbEJ1ZmZlckNvbnRlbnQJKGNvbnN0IHhtbEJ1ZmZlciAqYnVmKTsKLVhNTFBVQkZVTiB4bWxDaGFyKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhcioKIAkJeG1sQnVmZmVyRGV0YWNoICAgICAgICAgKHhtbEJ1ZmZlclB0ciBidWYpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQnVmZmVyU2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZSBzY2hlbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbEJ1ZmZlckxlbmd0aAkJKGNvbnN0IHhtbEJ1ZmZlciAqYnVmKTsKIAogLyoKICAqIENyZWF0aW5nL2ZyZWVpbmcgbmV3IHN0cnVjdHVyZXMuCiAgKi8KLVhNTFBVQkZVTiB4bWxEdGRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbER0ZFB0cgogCQl4bWxDcmVhdGVJbnRTdWJzZXQJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqRXh0ZXJuYWxJRCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKlN5c3RlbUlEKTsKLVhNTFBVQkZVTiB4bWxEdGRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbER0ZFB0cgogCQl4bWxOZXdEdGQJCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKkV4dGVybmFsSUQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpTeXN0ZW1JRCk7Ci1YTUxQVUJGVU4geG1sRHRkUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxEdGRQdHIKIAkJeG1sR2V0SW50U3Vic2V0CQkoY29uc3QgeG1sRG9jICpkb2MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZUR0ZAkJKHhtbER0ZFB0ciBjdXIpOwogI2lmZGVmIExJQlhNTF9MRUdBQ1lfRU5BQkxFRAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxOc1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTnNQdHIKIAkJeG1sTmV3R2xvYmFsTnMJCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqaHJlZiwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnByZWZpeCk7CiAjZW5kaWYgLyogTElCWE1MX0xFR0FDWV9FTkFCTEVEICovCi1YTUxQVUJGVU4geG1sTnNQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5zUHRyCiAJCXhtbE5ld05zCQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqaHJlZiwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnByZWZpeCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlTnMJCSh4bWxOc1B0ciBjdXIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZU5zTGlzdAkJKHhtbE5zUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sTmV3RG9jCQkoY29uc3QgeG1sQ2hhciAqdmVyc2lvbik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlRG9jCQkoeG1sRG9jUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sQXR0clB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXR0clB0cgogCQl4bWxOZXdEb2NQcm9wCQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSk7CiAjaWYgZGVmaW5lZChMSUJYTUxfVFJFRV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpIHx8IFwKICAgICBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpCi1YTUxQVUJGVU4geG1sQXR0clB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXR0clB0cgogCQl4bWxOZXdQcm9wCQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKICNlbmRpZgotWE1MUFVCRlVOIHhtbEF0dHJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF0dHJQdHIKIAkJeG1sTmV3TnNQcm9wCQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgeG1sTnNQdHIgbnMsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIHhtbEF0dHJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF0dHJQdHIKIAkJeG1sTmV3TnNQcm9wRWF0TmFtZQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgeG1sTnNQdHIgbnMsCiAJCQkJCSB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZVByb3BMaXN0CQkoeG1sQXR0clB0ciBjdXIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZVByb3AJCSh4bWxBdHRyUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sQXR0clB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXR0clB0cgogCQl4bWxDb3B5UHJvcAkJKHhtbE5vZGVQdHIgdGFyZ2V0LAogCQkJCQkgeG1sQXR0clB0ciBjdXIpOwotWE1MUFVCRlVOIHhtbEF0dHJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF0dHJQdHIKIAkJeG1sQ29weVByb3BMaXN0CQkoeG1sTm9kZVB0ciB0YXJnZXQsCiAJCQkJCSB4bWxBdHRyUHRyIGN1cik7CiAjaWZkZWYgTElCWE1MX1RSRUVfRU5BQkxFRAotWE1MUFVCRlVOIHhtbER0ZFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRHRkUHRyCiAJCXhtbENvcHlEdGQJCSh4bWxEdGRQdHIgZHRkKTsKICNlbmRpZiAvKiBMSUJYTUxfVFJFRV9FTkFCTEVEICovCiAjaWYgZGVmaW5lZChMSUJYTUxfVFJFRV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpCi1YTUxQVUJGVU4geG1sRG9jUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxEb2NQdHIKIAkJeG1sQ29weURvYwkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSBpbnQgcmVjdXJzaXZlKTsKICNlbmRpZiAvKiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkgKi8KIC8qCiAgKiBDcmVhdGluZyBuZXcgbm9kZXMuCiAgKi8KLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbE5ld0RvY05vZGUJCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTnNQdHIgbnMsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqY29udGVudCk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdEb2NOb2RlRWF0TmFtZQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5zUHRyIG5zLAogCQkJCQkgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sTmV3Tm9kZQkJKHhtbE5zUHRyIG5zLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdOb2RlRWF0TmFtZQkoeG1sTnNQdHIgbnMsCiAJCQkJCSB4bWxDaGFyICpuYW1lKTsKICNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbE5ld0NoaWxkCQkoeG1sTm9kZVB0ciBwYXJlbnQsCiAJCQkJCSB4bWxOc1B0ciBucywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjb250ZW50KTsKICNlbmRpZgotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sTmV3RG9jVGV4dAkJKGNvbnN0IHhtbERvYyAqZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqY29udGVudCk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdUZXh0CQkoY29uc3QgeG1sQ2hhciAqY29udGVudCk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdEb2NQSQkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqY29udGVudCk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdQSQkJKGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjb250ZW50KTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbE5ld0RvY1RleHRMZW4JKHhtbERvY1B0ciBkb2MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjb250ZW50LAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdUZXh0TGVuCQkoY29uc3QgeG1sQ2hhciAqY29udGVudCwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sTmV3RG9jQ29tbWVudAkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sTmV3Q29tbWVudAkJKGNvbnN0IHhtbENoYXIgKmNvbnRlbnQpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sTmV3Q0RhdGFCbG9jawkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQsCiAJCQkJCSBpbnQgbGVuKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbE5ld0NoYXJSZWYJCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxOZXdSZWZlcmVuY2UJCShjb25zdCB4bWxEb2MgKmRvYywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sQ29weU5vZGUJCSh4bWxOb2RlUHRyIG5vZGUsCiAJCQkJCSBpbnQgcmVjdXJzaXZlKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbERvY0NvcHlOb2RlCQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIGludCByZWN1cnNpdmUpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sRG9jQ29weU5vZGVMaXN0CSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBub2RlKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbENvcHlOb2RlTGlzdAkJKHhtbE5vZGVQdHIgbm9kZSk7CiAjaWZkZWYgTElCWE1MX1RSRUVfRU5BQkxFRAotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sTmV3VGV4dENoaWxkCQkoeG1sTm9kZVB0ciBwYXJlbnQsCiAJCQkJCSB4bWxOc1B0ciBucywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjb250ZW50KTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbE5ld0RvY1Jhd05vZGUJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOc1B0ciBucywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjb250ZW50KTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbE5ld0RvY0ZyYWdtZW50CSh4bWxEb2NQdHIgZG9jKTsKICNlbmRpZiAvKiBMSUJYTUxfVFJFRV9FTkFCTEVEICovCiAKIC8qCiAgKiBOYXZpZ2F0aW5nLgogICovCi1YTUxQVUJGVU4gbG9uZyBYTUxDQUxMCitYTUxQVUJGVU4gbG9uZwogCQl4bWxHZXRMaW5lTm8JCShjb25zdCB4bWxOb2RlICpub2RlKTsKICNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0RFQlVHX0VOQUJMRUQpCi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sR2V0Tm9kZVBhdGgJCShjb25zdCB4bWxOb2RlICpub2RlKTsKICNlbmRpZiAvKiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0RFQlVHX0VOQUJMRUQpICovCi1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxEb2NHZXRSb290RWxlbWVudAkoY29uc3QgeG1sRG9jICpkb2MpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sR2V0TGFzdENoaWxkCQkoY29uc3QgeG1sTm9kZSAqcGFyZW50KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxOb2RlSXNUZXh0CQkoY29uc3QgeG1sTm9kZSAqbm9kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sSXNCbGFua05vZGUJCShjb25zdCB4bWxOb2RlICpub2RlKTsKIAogLyoKICAqIENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUuCiAgKi8KICNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKQotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sRG9jU2V0Um9vdEVsZW1lbnQJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIHJvb3QpOwogI2VuZGlmIC8qIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfV1JJVEVSX0VOQUJMRUQpICovCiAjaWZkZWYgTElCWE1MX1RSRUVfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTm9kZVNldE5hbWUJCSh4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwogI2VuZGlmIC8qIExJQlhNTF9UUkVFX0VOQUJMRUQgKi8KLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbEFkZENoaWxkCQkoeG1sTm9kZVB0ciBwYXJlbnQsCiAJCQkJCSB4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQl4bWxBZGRDaGlsZExpc3QJCSh4bWxOb2RlUHRyIHBhcmVudCwKIAkJCQkJIHhtbE5vZGVQdHIgY3VyKTsKICNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKQotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sUmVwbGFjZU5vZGUJCSh4bWxOb2RlUHRyIG9sZCwKIAkJCQkJIHhtbE5vZGVQdHIgY3VyKTsKICNlbmRpZiAvKiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1dSSVRFUl9FTkFCTEVEKSAqLwogI2lmIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKSB8fCBcCiAgICAgZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9YSU5DTFVERV9FTkFCTEVEKQotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sQWRkUHJldlNpYmxpbmcJKHhtbE5vZGVQdHIgY3VyLAogCQkJCQkgeG1sTm9kZVB0ciBlbGVtKTsKICNlbmRpZiAvKiBMSUJYTUxfVFJFRV9FTkFCTEVEIHx8IExJQlhNTF9IVE1MX0VOQUJMRUQgfHwgTElCWE1MX1NDSEVNQVNfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sQWRkU2libGluZwkJKHhtbE5vZGVQdHIgY3VyLAogCQkJCQkgeG1sTm9kZVB0ciBlbGVtKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCXhtbEFkZE5leHRTaWJsaW5nCSh4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIHhtbE5vZGVQdHIgZWxlbSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxVbmxpbmtOb2RlCQkoeG1sTm9kZVB0ciBjdXIpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sVGV4dE1lcmdlCQkoeG1sTm9kZVB0ciBmaXJzdCwKIAkJCQkJIHhtbE5vZGVQdHIgc2Vjb25kKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxUZXh0Q29uY2F0CQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqY29udGVudCwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZU5vZGVMaXN0CQkoeG1sTm9kZVB0ciBjdXIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZU5vZGUJCSh4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTZXRUcmVlRG9jCQkoeG1sTm9kZVB0ciB0cmVlLAogCQkJCQkgeG1sRG9jUHRyIGRvYyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTZXRMaXN0RG9jCQkoeG1sTm9kZVB0ciBsaXN0LAogCQkJCQkgeG1sRG9jUHRyIGRvYyk7CiAvKgogICogTmFtZXNwYWNlcy4KICAqLwotWE1MUFVCRlVOIHhtbE5zUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOc1B0cgogCQl4bWxTZWFyY2hOcwkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIG5vZGUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lU3BhY2UpOwotWE1MUFVCRlVOIHhtbE5zUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOc1B0cgogCQl4bWxTZWFyY2hOc0J5SHJlZgkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmhyZWYpOwogI2lmIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfWFBBVEhfRU5BQkxFRCkgfHwgXAogICAgIGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkKLVhNTFBVQkZVTiB4bWxOc1B0ciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOc1B0ciAqCiAJCXhtbEdldE5zTGlzdAkJKGNvbnN0IHhtbERvYyAqZG9jLAogCQkJCQkgY29uc3QgeG1sTm9kZSAqbm9kZSk7CiAjZW5kaWYgLyogZGVmaW5lZChMSUJYTUxfVFJFRV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9YUEFUSF9FTkFCTEVEKSAqLwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTZXROcwkJKHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkJIHhtbE5zUHRyIG5zKTsKLVhNTFBVQkZVTiB4bWxOc1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTnNQdHIKIAkJeG1sQ29weU5hbWVzcGFjZQkoeG1sTnNQdHIgY3VyKTsKLVhNTFBVQkZVTiB4bWxOc1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTnNQdHIKIAkJeG1sQ29weU5hbWVzcGFjZUxpc3QJKHhtbE5zUHRyIGN1cik7CiAKIC8qCkBAIC0xMDEyLDk0ICsxMDQ4LDk0IEBACiAgKi8KICNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1hJTkNMVURFX0VOQUJMRUQpIHx8IFwKICAgICBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkKLVhNTFBVQkZVTiB4bWxBdHRyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxBdHRyUHRyCiAJCXhtbFNldFByb3AJCSh4bWxOb2RlUHRyIG5vZGUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIHhtbEF0dHJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF0dHJQdHIKIAkJeG1sU2V0TnNQcm9wCQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgeG1sTnNQdHIgbnMsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwogI2VuZGlmIC8qIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfWElOQ0xVREVfRU5BQkxFRCkgfHwgXAogCSAgZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpICovCi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sR2V0Tm9Oc1Byb3AJCShjb25zdCB4bWxOb2RlICpub2RlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sR2V0UHJvcAkJKGNvbnN0IHhtbE5vZGUgKm5vZGUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKLVhNTFBVQkZVTiB4bWxBdHRyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxBdHRyUHRyCiAJCXhtbEhhc1Byb3AJCShjb25zdCB4bWxOb2RlICpub2RlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sQXR0clB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXR0clB0cgogCQl4bWxIYXNOc1Byb3AJCShjb25zdCB4bWxOb2RlICpub2RlLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWVTcGFjZSk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sR2V0TnNQcm9wCQkoY29uc3QgeG1sTm9kZSAqbm9kZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lU3BhY2UpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sU3RyaW5nR2V0Tm9kZUxpc3QJKGNvbnN0IHhtbERvYyAqZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJeG1sU3RyaW5nTGVuR2V0Tm9kZUxpc3QJKGNvbnN0IHhtbERvYyAqZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUsCiAJCQkJCSBpbnQgbGVuKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxOb2RlTGlzdEdldFN0cmluZwkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIGNvbnN0IHhtbE5vZGUgKmxpc3QsCiAJCQkJCSBpbnQgaW5MaW5lKTsKICNpZmRlZiBMSUJYTUxfVFJFRV9FTkFCTEVECi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sTm9kZUxpc3RHZXRSYXdTdHJpbmcJKGNvbnN0IHhtbERvYyAqZG9jLAogCQkJCQkgY29uc3QgeG1sTm9kZSAqbGlzdCwKIAkJCQkJIGludCBpbkxpbmUpOwogI2VuZGlmIC8qIExJQlhNTF9UUkVFX0VOQUJMRUQgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbE5vZGVTZXRDb250ZW50CSh4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQpOwogI2lmZGVmIExJQlhNTF9UUkVFX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbE5vZGVTZXRDb250ZW50TGVuCSh4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQsCiAJCQkJCSBpbnQgbGVuKTsKICNlbmRpZiAvKiBMSUJYTUxfVFJFRV9FTkFCTEVEICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxOb2RlQWRkQ29udGVudAkoeG1sTm9kZVB0ciBjdXIsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpjb250ZW50KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbE5vZGVBZGRDb250ZW50TGVuCSh4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQsCiAJCQkJCSBpbnQgbGVuKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxOb2RlR2V0Q29udGVudAkoY29uc3QgeG1sTm9kZSAqY3VyKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbE5vZGVCdWZHZXRDb250ZW50CSh4bWxCdWZmZXJQdHIgYnVmZmVyLAogCQkJCQkgY29uc3QgeG1sTm9kZSAqY3VyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxCdWZHZXROb2RlQ29udGVudAkoeG1sQnVmUHRyIGJ1ZiwKIAkJCQkJIGNvbnN0IHhtbE5vZGUgKmN1cik7CiAKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxOb2RlR2V0TGFuZwkJKGNvbnN0IHhtbE5vZGUgKmN1cik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTm9kZUdldFNwYWNlUHJlc2VydmUJKGNvbnN0IHhtbE5vZGUgKmN1cik7CiAjaWZkZWYgTElCWE1MX1RSRUVfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTm9kZVNldExhbmcJCSh4bWxOb2RlUHRyIGN1ciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmxhbmcpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTm9kZVNldFNwYWNlUHJlc2VydmUgKHhtbE5vZGVQdHIgY3VyLAogCQkJCQkgaW50IHZhbCk7CiAjZW5kaWYgLyogTElCWE1MX1RSRUVfRU5BQkxFRCAqLwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbE5vZGVHZXRCYXNlCQkoY29uc3QgeG1sRG9jICpkb2MsCiAJCQkJCSBjb25zdCB4bWxOb2RlICpjdXIpOwogI2lmIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfWElOQ0xVREVfRU5BQkxFRCkKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbE5vZGVTZXRCYXNlCQkoeG1sTm9kZVB0ciBjdXIsCiAJCQkJCSBjb25zdCB4bWxDaGFyICp1cmkpOwogI2VuZGlmCkBAIC0xMTA3LDE0ICsxMTQzLDE0IEBACiAvKgogICogUmVtb3ZpbmcgY29udGVudC4KICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFJlbW92ZVByb3AJCSh4bWxBdHRyUHRyIGN1cik7CiAjaWYgZGVmaW5lZChMSUJYTUxfVFJFRV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVW5zZXROc1Byb3AJCSh4bWxOb2RlUHRyIG5vZGUsCiAJCQkJCSB4bWxOc1B0ciBucywKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFVuc2V0UHJvcAkJKHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUpOwogI2VuZGlmIC8qIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKSAqLwpAQCAtMTEyMiwxMyArMTE1OCwxMyBAQAogLyoKICAqIEludGVybmFsLCBkb24ndCB1c2UuCiAgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEJ1ZmZlcldyaXRlQ0hBUgkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnN0cmluZyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxCdWZmZXJXcml0ZUNoYXIJKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCSBjb25zdCBjaGFyICpzdHJpbmcpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sQnVmZmVyV3JpdGVRdW90ZWRTdHJpbmcoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnN0cmluZyk7CiAKQEAgLTExNDMsNyArMTE3OSw3IEBACiAvKgogICogTmFtZXNwYWNlIGhhbmRsaW5nLgogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sUmVjb25jaWxpYXRlTnMJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIHRyZWUpOwogI2VuZGlmCkBAIC0xMTUyLDY3ICsxMTg4LDY3IEBACiAvKgogICogU2F2aW5nLgogICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxEb2NEdW1wRm9ybWF0TWVtb3J5CSh4bWxEb2NQdHIgY3VyLAogCQkJCQkgeG1sQ2hhciAqKm1lbSwKIAkJCQkJIGludCAqc2l6ZSwKIAkJCQkJIGludCBmb3JtYXQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRG9jRHVtcE1lbW9yeQkoeG1sRG9jUHRyIGN1ciwKIAkJCQkJIHhtbENoYXIgKiptZW0sCiAJCQkJCSBpbnQgKnNpemUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRG9jRHVtcE1lbW9yeUVuYwkoeG1sRG9jUHRyIG91dF9kb2MsCiAJCQkJCSB4bWxDaGFyICoqZG9jX3R4dF9wdHIsCiAJCQkJCSBpbnQgKiBkb2NfdHh0X2xlbiwKIAkJCQkJIGNvbnN0IGNoYXIgKnR4dF9lbmNvZGluZyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxEb2NEdW1wRm9ybWF0TWVtb3J5RW5jKHhtbERvY1B0ciBvdXRfZG9jLAogCQkJCQkgeG1sQ2hhciAqKmRvY190eHRfcHRyLAogCQkJCQkgaW50ICogZG9jX3R4dF9sZW4sCiAJCQkJCSBjb25zdCBjaGFyICp0eHRfZW5jb2RpbmcsCiAJCQkJCSBpbnQgZm9ybWF0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxEb2NGb3JtYXREdW1wCShGSUxFICpmLAogCQkJCQkgeG1sRG9jUHRyIGN1ciwKIAkJCQkJIGludCBmb3JtYXQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbERvY0R1bXAJCShGSUxFICpmLAogCQkJCQkgeG1sRG9jUHRyIGN1cik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxFbGVtRHVtcAkJKEZJTEUgKmYsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBjdXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNhdmVGaWxlCQkoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSB4bWxEb2NQdHIgY3VyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTYXZlRm9ybWF0RmlsZQkoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSB4bWxEb2NQdHIgY3VyLAogCQkJCQkgaW50IGZvcm1hdCk7Ci1YTUxQVUJGVU4gc2l6ZV90IFhNTENBTEwKK1hNTFBVQkZVTiBzaXplX3QKIAkJeG1sQnVmTm9kZUR1bXAJCSh4bWxCdWZQdHIgYnVmLAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgY3VyLAogCQkJCQkgaW50IGxldmVsLAogCQkJCQkgaW50IGZvcm1hdCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTm9kZUR1bXAJCSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgY3VyLAogCQkJCQkgaW50IGxldmVsLAogCQkJCQkgaW50IGZvcm1hdCk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTYXZlRmlsZVRvCQkoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbERvY1B0ciBjdXIsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU2F2ZUZvcm1hdEZpbGVUbyAgICAgKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsCiAJCQkJCSB4bWxEb2NQdHIgY3VyLAogCQkJCSAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCSAgICAgICAgIGludCBmb3JtYXQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sTm9kZUR1bXBPdXRwdXQJKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBjdXIsCkBAIC0xMjIwLDEzICsxMjU2LDEzIEBACiAJCQkJCSBpbnQgZm9ybWF0LAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU2F2ZUZvcm1hdEZpbGVFbmMgICAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgeG1sRG9jUHRyIGN1ciwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IGZvcm1hdCk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTYXZlRmlsZUVuYwkJKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgeG1sRG9jUHRyIGN1ciwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKQEAgLTEyMzUsNDcgKzEyNzEsNDcgQEAKIC8qCiAgKiBYSFRNTAogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sSXNYSFRNTAkJKGNvbnN0IHhtbENoYXIgKnN5c3RlbUlELAogCQkJCQkgY29uc3QgeG1sQ2hhciAqcHVibGljSUQpOwogCiAvKgogICogQ29tcHJlc3Npb24uCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxHZXREb2NDb21wcmVzc01vZGUJKGNvbnN0IHhtbERvYyAqZG9jKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFNldERvY0NvbXByZXNzTW9kZQkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIGludCBtb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxHZXRDb21wcmVzc01vZGUJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU2V0Q29tcHJlc3NNb2RlCShpbnQgbW9kZSk7CiAKIC8qCiAqIERPTS13cmFwcGVyIGhlbHBlciBmdW5jdGlvbnMuCiAqLwotWE1MUFVCRlVOIHhtbERPTVdyYXBDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxET01XcmFwQ3R4dFB0cgogCQl4bWxET01XcmFwTmV3Q3R4dAkodm9pZCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxET01XcmFwRnJlZUN0eHQJKHhtbERPTVdyYXBDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbERPTVdyYXBSZWNvbmNpbGVOYW1lc3BhY2VzKHhtbERPTVdyYXBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxOb2RlUHRyIGVsZW0sCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkgICAgeG1sRE9NV3JhcEFkb3B0Tm9kZQkJKHhtbERPTVdyYXBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgc291cmNlRG9jLAogCQkJCQkgeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgeG1sRG9jUHRyIGRlc3REb2MsCiAJCQkJCSB4bWxOb2RlUHRyIGRlc3RQYXJlbnQsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkgICAgeG1sRE9NV3JhcFJlbW92ZU5vZGUJKHhtbERPTVdyYXBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBub2RlLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbERPTVdyYXBDbG9uZU5vZGUJCSh4bWxET01XcmFwQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIHNvdXJjZURvYywKIAkJCQkJIHhtbE5vZGVQdHIgbm9kZSwKQEAgLTEyOTAsMjMgKzEzMjYsMzcgQEAKICAqIDUgaW50ZXJmYWNlcyBmcm9tIERPTSBFbGVtZW50VHJhdmVyc2FsLCBidXQgZGlmZmVyZW50IGluIGVudGl0aWVzCiAgKiB0cmF2ZXJzYWwuCiAgKi8KLVhNTFBVQkZVTiB1bnNpZ25lZCBsb25nIFhNTENBTEwKK1hNTFBVQkZVTiB1bnNpZ25lZCBsb25nCiAgICAgICAgICAgICB4bWxDaGlsZEVsZW1lbnRDb3VudCAgICAgICAgKHhtbE5vZGVQdHIgcGFyZW50KTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAgICAgICAgICAgICB4bWxOZXh0RWxlbWVudFNpYmxpbmcgICAgICAgKHhtbE5vZGVQdHIgbm9kZSk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogICAgICAgICAgICAgeG1sRmlyc3RFbGVtZW50Q2hpbGQgICAgICAgICh4bWxOb2RlUHRyIHBhcmVudCk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogICAgICAgICAgICAgeG1sTGFzdEVsZW1lbnRDaGlsZCAgICAgICAgICh4bWxOb2RlUHRyIHBhcmVudCk7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogICAgICAgICAgICAgeG1sUHJldmlvdXNFbGVtZW50U2libGluZyAgICh4bWxOb2RlUHRyIG5vZGUpOwogI2VuZGlmCisKK1hNTFBVQkZVTiB4bWxSZWdpc3Rlck5vZGVGdW5jCisJICAgIHhtbFJlZ2lzdGVyTm9kZURlZmF1bHQJKHhtbFJlZ2lzdGVyTm9kZUZ1bmMgZnVuYyk7CitYTUxQVUJGVU4geG1sRGVyZWdpc3Rlck5vZGVGdW5jCisJICAgIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdAkoeG1sRGVyZWdpc3Rlck5vZGVGdW5jIGZ1bmMpOworWE1MUFVCRlVOIHhtbFJlZ2lzdGVyTm9kZUZ1bmMKKyAgICAgICAgICAgIHhtbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQoeG1sUmVnaXN0ZXJOb2RlRnVuYyBmdW5jKTsKK1hNTFBVQkZVTiB4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMKKyAgICAgICAgICAgIHhtbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdCh4bWxEZXJlZ2lzdGVyTm9kZUZ1bmMgZnVuYyk7CisKK1hNTF9ERVBSRUNBVEVEIFhNTFBVQkZVTiB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lCisgICAgICAgICAgICB4bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZSAgKHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgdik7CitYTUxfREVQUkVDQVRFRCBYTUxQVUJGVU4gaW50CisgICAgICAgICAgICB4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSAgKGludCB2KTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLSNpZm5kZWYgX19YTUxfUEFSU0VSX0hfXwotI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KLSNlbmRpZgogCiAjZW5kaWYgLyogX19YTUxfVFJFRV9IX18gKi8KIAorI2VuZGlmIC8qIFhNTF9UUkVFX0lOVEVSTkFMUyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC91cmkuaCBiL2luY2x1ZGUvbGlieG1sL3VyaS5oCmluZGV4IGRiNDgyNjIuLmViODYzMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3VyaS5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3VyaS5oCkBAIC0xMSw4ICsxMSw5IEBACiAjaWZuZGVmIF9fWE1MX1VSSV9IX18KICNkZWZpbmUgX19YTUxfVVJJX0hfXwogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtNDksNDMgKzUwLDQzIEBACiAgKiB4bWxDaGFyICoJeG1sTm9kZUdldEJhc2UJKHhtbERvY1B0ciBkb2MsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxOb2RlUHRyIGN1cik7CiAgKi8KLVhNTFBVQkZVTiB4bWxVUklQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFVSSVB0cgogCQl4bWxDcmVhdGVVUkkJCSh2b2lkKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxCdWlsZFVSSQkJKGNvbnN0IHhtbENoYXIgKlVSSSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmJhc2UpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbEJ1aWxkUmVsYXRpdmVVUkkJKGNvbnN0IHhtbENoYXIgKlVSSSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmJhc2UpOwotWE1MUFVCRlVOIHhtbFVSSVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sVVJJUHRyCiAJCXhtbFBhcnNlVVJJCQkoY29uc3QgY2hhciAqc3RyKTsKLVhNTFBVQkZVTiB4bWxVUklQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFVSSVB0cgogCQl4bWxQYXJzZVVSSVJhdwkJKGNvbnN0IGNoYXIgKnN0ciwKIAkJCQkJIGludCByYXcpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFBhcnNlVVJJUmVmZXJlbmNlCSh4bWxVUklQdHIgdXJpLAogCQkJCQkgY29uc3QgY2hhciAqc3RyKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxTYXZlVXJpCQkoeG1sVVJJUHRyIHVyaSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxQcmludFVSSQkJKEZJTEUgKnN0cmVhbSwKIAkJCQkJIHhtbFVSSVB0ciB1cmkpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbFVSSUVzY2FwZVN0ciAgICAgICAgIChjb25zdCB4bWxDaGFyICpzdHIsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpsaXN0KTsKLVhNTFBVQkZVTiBjaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNoYXIgKgogCQl4bWxVUklVbmVzY2FwZVN0cmluZwkoY29uc3QgY2hhciAqc3RyLAogCQkJCQkgaW50IGxlbiwKIAkJCQkJIGNoYXIgKnRhcmdldCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sTm9ybWFsaXplVVJJUGF0aAkoY2hhciAqcGF0aCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sVVJJRXNjYXBlCQkoY29uc3QgeG1sQ2hhciAqc3RyKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEZyZWVVUkkJCSh4bWxVUklQdHIgdXJpKTsKLVhNTFBVQkZVTiB4bWxDaGFyKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhcioKIAkJeG1sQ2Fub25pY1BhdGgJCShjb25zdCB4bWxDaGFyICpwYXRoKTsKLVhNTFBVQkZVTiB4bWxDaGFyKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhcioKIAkJeG1sUGF0aFRvVVJJCQkoY29uc3QgeG1sQ2hhciAqcGF0aCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCBiL2luY2x1ZGUvbGlieG1sL3ZhbGlkLmgKaW5kZXggM2VhZjg0YS4uM2UwNGI1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwvdmFsaWQuaAorKysgYi9pbmNsdWRlL2xpYnhtbC92YWxpZC5oCkBAIC0xMyw3ICsxMyw5IEBACiAKICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgorI2RlZmluZSBYTUxfVFJFRV9JTlRFUk5BTFMKICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI3VuZGVmIFhNTF9UUkVFX0lOVEVSTkFMUwogI2luY2x1ZGUgPGxpYnhtbC9saXN0Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGF1dG9tYXRhLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHJlZ2V4cC5oPgpAQCAtMzksNyArNDEsNyBAQAogICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYSB2YWxpZGl0eSBlcnJvciBpcyBmb3VuZC4gVGhpcyBpcyBhIG1lc3NhZ2UKICAqIG9yaWVudGVkIGZ1bmN0aW9uIHNpbWlsYXIgdG8gYW4gKnByaW50ZiBmdW5jdGlvbi4KICAqLwotdHlwZWRlZiB2b2lkIChYTUxDREVDTCAqeG1sVmFsaWRpdHlFcnJvckZ1bmMpICh2b2lkICpjdHgsCit0eXBlZGVmIHZvaWQgKCp4bWxWYWxpZGl0eUVycm9yRnVuYykgKHZvaWQgKmN0eCwKIAkJCSAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJICAgICAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwogCkBAIC01NCwyNSArNTYsMTAgQEAKICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIGEgdmFsaWRpdHkgd2FybmluZyBpcyBmb3VuZC4gVGhpcyBpcyBhIG1lc3NhZ2UKICAqIG9yaWVudGVkIGZ1bmN0aW9uIHNpbWlsYXIgdG8gYW4gKnByaW50ZiBmdW5jdGlvbi4KICAqLwotdHlwZWRlZiB2b2lkIChYTUxDREVDTCAqeG1sVmFsaWRpdHlXYXJuaW5nRnVuYykgKHZvaWQgKmN0eCwKK3R5cGVkZWYgdm9pZCAoKnhtbFZhbGlkaXR5V2FybmluZ0Z1bmMpICh2b2lkICpjdHgsCiAJCQkgICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJICAgICAgIC4uLikgTElCWE1MX0FUVFJfRk9STUFUKDIsMyk7CiAKLSNpZmRlZiBJTl9MSUJYTUwKLS8qKgotICogWE1MX1ZDVFhUX0RURF9WQUxJREFURUQ6Ci0gKgotICogU2V0IGFmdGVyIHhtbFZhbGlkYXRlRHRkRmluYWwgd2FzIGNhbGxlZC4KLSAqLwotI2RlZmluZSBYTUxfVkNUWFRfRFREX1ZBTElEQVRFRCAoMXUgPDwgMCkKLS8qKgotICogWE1MX1ZDVFhUX1VTRV9QQ1RYVDoKLSAqCi0gKiBTZXQgaWYgdGhlIHZhbGlkYXRpb24gY29udGV4dCBpcyBwYXJ0IG9mIGEgcGFyc2VyIGNvbnRleHQuCi0gKi8KLSNkZWZpbmUgWE1MX1ZDVFhUX1VTRV9QQ1RYVCAoMXUgPDwgMSkKLSNlbmRpZgotCiAvKgogICogeG1sVmFsaWRDdHh0OgogICogQW4geG1sVmFsaWRDdHh0IGlzIHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZyB3aGVuIHZhbGlkYXRpbmcuCkBAIC0xNTAsNTUgKzEzNyw1NSBAQAogdHlwZWRlZiB4bWxSZWZUYWJsZSAqeG1sUmVmVGFibGVQdHI7CiAKIC8qIE5vdGF0aW9uICovCi1YTUxQVUJGVU4geG1sTm90YXRpb25QdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vdGF0aW9uUHRyCiAJCXhtbEFkZE5vdGF0aW9uRGVjbAkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEdGRQdHIgZHRkLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKlB1YmxpY0lELAogCQkJCQkgY29uc3QgeG1sQ2hhciAqU3lzdGVtSUQpOwogI2lmZGVmIExJQlhNTF9UUkVFX0VOQUJMRUQKLVhNTFBVQkZVTiB4bWxOb3RhdGlvblRhYmxlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb3RhdGlvblRhYmxlUHRyCiAJCXhtbENvcHlOb3RhdGlvblRhYmxlCSh4bWxOb3RhdGlvblRhYmxlUHRyIHRhYmxlKTsKICNlbmRpZiAvKiBMSUJYTUxfVFJFRV9FTkFCTEVEICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlTm90YXRpb25UYWJsZQkoeG1sTm90YXRpb25UYWJsZVB0ciB0YWJsZSk7CiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxEdW1wTm90YXRpb25EZWNsCSh4bWxCdWZmZXJQdHIgYnVmLAogCQkJCQkgeG1sTm90YXRpb25QdHIgbm90YSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxEdW1wTm90YXRpb25UYWJsZQkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbE5vdGF0aW9uVGFibGVQdHIgdGFibGUpOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCiAvKiBFbGVtZW50IENvbnRlbnQgKi8KIC8qIHRoZSBub24gRG9jIHZlcnNpb24gYXJlIGJlaW5nIGRlcHJlY2F0ZWQgKi8KLVhNTFBVQkZVTiB4bWxFbGVtZW50Q29udGVudFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRWxlbWVudENvbnRlbnRQdHIKIAkJeG1sTmV3RWxlbWVudENvbnRlbnQJKGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSB4bWxFbGVtZW50Q29udGVudFR5cGUgdHlwZSk7Ci1YTUxQVUJGVU4geG1sRWxlbWVudENvbnRlbnRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEVsZW1lbnRDb250ZW50UHRyCiAJCXhtbENvcHlFbGVtZW50Q29udGVudAkoeG1sRWxlbWVudENvbnRlbnRQdHIgY29udGVudCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlRWxlbWVudENvbnRlbnQJKHhtbEVsZW1lbnRDb250ZW50UHRyIGN1cik7CiAvKiB0aGUgbmV3IHZlcnNpb25zIHdpdGggZG9jIGFyZ3VtZW50ICovCi1YTUxQVUJGVU4geG1sRWxlbWVudENvbnRlbnRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEVsZW1lbnRDb250ZW50UHRyCiAJCXhtbE5ld0RvY0VsZW1lbnRDb250ZW50CSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIHhtbEVsZW1lbnRDb250ZW50VHlwZSB0eXBlKTsKLVhNTFBVQkZVTiB4bWxFbGVtZW50Q29udGVudFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRWxlbWVudENvbnRlbnRQdHIKIAkJeG1sQ29weURvY0VsZW1lbnRDb250ZW50KHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxFbGVtZW50Q29udGVudFB0ciBjb250ZW50KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEZyZWVEb2NFbGVtZW50Q29udGVudCh4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sRWxlbWVudENvbnRlbnRQdHIgY3VyKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFNucHJpbnRmRWxlbWVudENvbnRlbnQoY2hhciAqYnVmLAogCQkJCQkgaW50IHNpemUsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sRWxlbWVudENvbnRlbnRQdHIgY29udGVudCwKIAkJCQkJIGludCBlbmdsb2IpOwogI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAogLyogREVQUkVDQVRFRCAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sU3ByaW50ZkVsZW1lbnRDb250ZW50KGNoYXIgKmJ1ZiwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxFbGVtZW50Q29udGVudFB0ciBjb250ZW50LAogCQkJCQkgaW50IGVuZ2xvYik7CkBAIC0yMDYsMzkgKzE5MywzOSBAQAogLyogREVQUkVDQVRFRCAqLwogCiAvKiBFbGVtZW50ICovCi1YTUxQVUJGVU4geG1sRWxlbWVudFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRWxlbWVudFB0cgogCQl4bWxBZGRFbGVtZW50RGVjbAkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEdGRQdHIgZHRkLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIHhtbEVsZW1lbnRUeXBlVmFsIHR5cGUsCiAJCQkJCSB4bWxFbGVtZW50Q29udGVudFB0ciBjb250ZW50KTsKICNpZmRlZiBMSUJYTUxfVFJFRV9FTkFCTEVECi1YTUxQVUJGVU4geG1sRWxlbWVudFRhYmxlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbGVtZW50VGFibGVQdHIKIAkJeG1sQ29weUVsZW1lbnRUYWJsZQkoeG1sRWxlbWVudFRhYmxlUHRyIHRhYmxlKTsKICNlbmRpZiAvKiBMSUJYTUxfVFJFRV9FTkFCTEVEICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlRWxlbWVudFRhYmxlCSh4bWxFbGVtZW50VGFibGVQdHIgdGFibGUpOwogI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRHVtcEVsZW1lbnRUYWJsZQkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbEVsZW1lbnRUYWJsZVB0ciB0YWJsZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxEdW1wRWxlbWVudERlY2wJKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCSB4bWxFbGVtZW50UHRyIGVsZW0pOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCiAvKiBFbnVtZXJhdGlvbiAqLwotWE1MUFVCRlVOIHhtbEVudW1lcmF0aW9uUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnVtZXJhdGlvblB0cgogCQl4bWxDcmVhdGVFbnVtZXJhdGlvbgkoY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlRW51bWVyYXRpb24JKHhtbEVudW1lcmF0aW9uUHRyIGN1cik7CiAjaWZkZWYgTElCWE1MX1RSRUVfRU5BQkxFRAotWE1MUFVCRlVOIHhtbEVudW1lcmF0aW9uUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbnVtZXJhdGlvblB0cgogCQl4bWxDb3B5RW51bWVyYXRpb24JKHhtbEVudW1lcmF0aW9uUHRyIGN1cik7CiAjZW5kaWYgLyogTElCWE1MX1RSRUVfRU5BQkxFRCAqLwogCiAvKiBBdHRyaWJ1dGUgKi8KLVhNTFBVQkZVTiB4bWxBdHRyaWJ1dGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF0dHJpYnV0ZVB0cgogCQl4bWxBZGRBdHRyaWJ1dGVEZWNsCSh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbER0ZFB0ciBkdGQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICplbGVtLApAQCAtMjQ5LDYwICsyMzYsNjAgQEAKIAkJCQkJIGNvbnN0IHhtbENoYXIgKmRlZmF1bHRWYWx1ZSwKIAkJCQkJIHhtbEVudW1lcmF0aW9uUHRyIHRyZWUpOwogI2lmZGVmIExJQlhNTF9UUkVFX0VOQUJMRUQKLVhNTFBVQkZVTiB4bWxBdHRyaWJ1dGVUYWJsZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXR0cmlidXRlVGFibGVQdHIKIAkJeG1sQ29weUF0dHJpYnV0ZVRhYmxlICAoeG1sQXR0cmlidXRlVGFibGVQdHIgdGFibGUpOwogI2VuZGlmIC8qIExJQlhNTF9UUkVFX0VOQUJMRUQgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbEZyZWVBdHRyaWJ1dGVUYWJsZSAgKHhtbEF0dHJpYnV0ZVRhYmxlUHRyIHRhYmxlKTsKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbER1bXBBdHRyaWJ1dGVUYWJsZSAgKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCXhtbEF0dHJpYnV0ZVRhYmxlUHRyIHRhYmxlKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbER1bXBBdHRyaWJ1dGVEZWNsICAgKHhtbEJ1ZmZlclB0ciBidWYsCiAJCQkJCXhtbEF0dHJpYnV0ZVB0ciBhdHRyKTsKICNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KIAogLyogSURzICovCi1YTUxQVUJGVU4geG1sSURQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbElEUHRyCiAJCXhtbEFkZElECSAgICAgICAoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCXhtbERvY1B0ciBkb2MsCiAJCQkJCWNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQl4bWxBdHRyUHRyIGF0dHIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sRnJlZUlEVGFibGUJICAgICAgICh4bWxJRFRhYmxlUHRyIHRhYmxlKTsKLVhNTFBVQkZVTiB4bWxBdHRyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxBdHRyUHRyCiAJCXhtbEdldElECSAgICAgICAoeG1sRG9jUHRyIGRvYywKIAkJCQkJY29uc3QgeG1sQ2hhciAqSUQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbElzSUQJCSAgICAgICAoeG1sRG9jUHRyIGRvYywKIAkJCQkJeG1sTm9kZVB0ciBlbGVtLAogCQkJCQl4bWxBdHRyUHRyIGF0dHIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFJlbW92ZUlECSAgICAgICAoeG1sRG9jUHRyIGRvYywKIAkJCQkJeG1sQXR0clB0ciBhdHRyKTsKIAogLyogSURSRUZzICovCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHhtbFJlZlB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUmVmUHRyCiAJCXhtbEFkZFJlZgkgICAgICAgKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQl4bWxEb2NQdHIgZG9jLAogCQkJCQljb25zdCB4bWxDaGFyICp2YWx1ZSwKIAkJCQkJeG1sQXR0clB0ciBhdHRyKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlUmVmVGFibGUJICAgICAgICh4bWxSZWZUYWJsZVB0ciB0YWJsZSk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbElzUmVmCSAgICAgICAoeG1sRG9jUHRyIGRvYywKIAkJCQkJeG1sTm9kZVB0ciBlbGVtLAogCQkJCQl4bWxBdHRyUHRyIGF0dHIpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxSZW1vdmVSZWYJICAgICAgICh4bWxEb2NQdHIgZG9jLAogCQkJCQl4bWxBdHRyUHRyIGF0dHIpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxMaXN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxMaXN0UHRyCiAJCXhtbEdldFJlZnMJICAgICAgICh4bWxEb2NQdHIgZG9jLAogCQkJCQljb25zdCB4bWxDaGFyICpJRCk7CiAKQEAgLTMxMSwxNDYgKzI5OCwxNDYgQEAKICAqLwogI2lmZGVmIExJQlhNTF9WQUxJRF9FTkFCTEVECiAvKiBBbGxvY2F0ZS9SZWxlYXNlIFZhbGlkYXRpb24gQ29udGV4dHMgKi8KLVhNTFBVQkZVTiB4bWxWYWxpZEN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFZhbGlkQ3R4dFB0cgogCQl4bWxOZXdWYWxpZEN0eHQodm9pZCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxGcmVlVmFsaWRDdHh0KHhtbFZhbGlkQ3R4dFB0cik7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZVJvb3QJCSh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlRWxlbWVudERlY2wJKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEVsZW1lbnRQdHIgZWxlbSk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJeG1sVmFsaWROb3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBlbGVtLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxWYWxpZEN0eHROb3JtYWxpemVBdHRyaWJ1dGVWYWx1ZSh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIGVsZW0sCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlQXR0cmlidXRlRGVjbCh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICB4bWxBdHRyaWJ1dGVQdHIgYXR0cik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVBdHRyaWJ1dGVWYWx1ZSh4bWxBdHRyaWJ1dGVUeXBlIHR5cGUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVOb3RhdGlvbkRlY2wJKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIHhtbE5vdGF0aW9uUHRyIG5vdGEpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlRHRkCQkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sRHRkUHRyIGR0ZCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVEdGRGaW5hbAkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZURvY3VtZW50CSh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlRWxlbWVudAkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBlbGVtKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZU9uZUVsZW1lbnQJKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIHhtbE5vZGVQdHIgZWxlbSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVPbmVBdHRyaWJ1dGUJKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIJZWxlbSwKIAkJCQkJIHhtbEF0dHJQdHIgYXR0ciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZU9uZU5hbWVzcGFjZQkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jLAogCQkJCQkgeG1sTm9kZVB0ciBlbGVtLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4LAogCQkJCQkgeG1sTnNQdHIgbnMsCiAJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVEb2N1bWVudEZpbmFsKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYyk7CiAjZW5kaWYgLyogTElCWE1MX1ZBTElEX0VOQUJMRUQgKi8KIAogI2lmIGRlZmluZWQoTElCWE1MX1ZBTElEX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZU5vdGF0aW9uVXNlCSh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpub3RhdGlvbk5hbWUpOwogI2VuZGlmIC8qIExJQlhNTF9WQUxJRF9FTkFCTEVEIG9yIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQgKi8KIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbElzTWl4ZWRFbGVtZW50CSh4bWxEb2NQdHIgZG9jLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sQXR0cmlidXRlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxBdHRyaWJ1dGVQdHIKIAkJeG1sR2V0RHRkQXR0ckRlc2MJKHhtbER0ZFB0ciBkdGQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICplbGVtLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sQXR0cmlidXRlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxBdHRyaWJ1dGVQdHIKIAkJeG1sR2V0RHRkUUF0dHJEZXNjCSh4bWxEdGRQdHIgZHRkLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqZWxlbSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgpOwotWE1MUFVCRlVOIHhtbE5vdGF0aW9uUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb3RhdGlvblB0cgogCQl4bWxHZXREdGROb3RhdGlvbkRlc2MJKHhtbER0ZFB0ciBkdGQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKLVhNTFBVQkZVTiB4bWxFbGVtZW50UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFbGVtZW50UHRyCiAJCXhtbEdldER0ZFFFbGVtZW50RGVzYwkoeG1sRHRkUHRyIGR0ZCwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpwcmVmaXgpOwotWE1MUFVCRlVOIHhtbEVsZW1lbnRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEVsZW1lbnRQdHIKIAkJeG1sR2V0RHRkRWxlbWVudERlc2MJKHhtbER0ZFB0ciBkdGQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKIAogI2lmZGVmIExJQlhNTF9WQUxJRF9FTkFCTEVECiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZEdldFBvdGVudGlhbENoaWxkcmVuKHhtbEVsZW1lbnRDb250ZW50ICpjdHJlZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKipuYW1lcywKIAkJCQkJIGludCAqbGVuLAogCQkJCQkgaW50IG1heCk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMoeG1sTm9kZSAqcHJldiwKIAkJCQkJIHhtbE5vZGUgKm5leHQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICoqbmFtZXMsCiAJCQkJCSBpbnQgbWF4KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZU5hbWVWYWx1ZQkoY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlTmFtZXNWYWx1ZQkoY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlTm10b2tlblZhbHVlCShjb25zdCB4bWxDaGFyICp2YWx1ZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVObXRva2Vuc1ZhbHVlKGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKIAogI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAogLyoKICAqIFZhbGlkYXRpb24gYmFzZWQgb24gdGhlIHJlZ2V4cCBzdXBwb3J0CiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZEJ1aWxkQ29udGVudE1vZGVsKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRWxlbWVudFB0ciBlbGVtKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFZhbGlkYXRlUHVzaEVsZW1lbnQJKHhtbFZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRG9jUHRyIGRvYywKIAkJCQkJIHhtbE5vZGVQdHIgZWxlbSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnFuYW1lKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxWYWxpZGF0ZVB1c2hDRGF0YQkoeG1sVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSBjb25zdCB4bWxDaGFyICpkYXRhLAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sVmFsaWRhdGVQb3BFbGVtZW50CSh4bWxWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIGVsZW0sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oIGIvaW5jbHVkZS9saWJ4bWwveGluY2x1ZGUuaAppbmRleCA4NjNhYjI1Li5lMWQxMzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmgKQEAgLTg5LDM1ICs4OSwzNSBAQAogLyoKICAqIHN0YW5kYWxvbmUgcHJvY2Vzc2luZwogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWEluY2x1ZGVQcm9jZXNzCSh4bWxEb2NQdHIgZG9jKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxYSW5jbHVkZVByb2Nlc3NGbGFncwkoeG1sRG9jUHRyIGRvYywKIAkJCQkJIGludCBmbGFncyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWEluY2x1ZGVQcm9jZXNzRmxhZ3NEYXRhKHhtbERvY1B0ciBkb2MsCiAJCQkJCSBpbnQgZmxhZ3MsCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogICAgICAgICAgICAgICAgIHhtbFhJbmNsdWRlUHJvY2Vzc1RyZWVGbGFnc0RhdGEoeG1sTm9kZVB0ciB0cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhJbmNsdWRlUHJvY2Vzc1RyZWUJKHhtbE5vZGVQdHIgdHJlZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWEluY2x1ZGVQcm9jZXNzVHJlZUZsYWdzKHhtbE5vZGVQdHIgdHJlZSwKIAkJCQkJIGludCBmbGFncyk7CiAvKgogICogY29udGV4dHVhbCBwcm9jZXNzaW5nCiAgKi8KLVhNTFBVQkZVTiB4bWxYSW5jbHVkZUN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhJbmNsdWRlQ3R4dFB0cgogCQl4bWxYSW5jbHVkZU5ld0NvbnRleHQJKHhtbERvY1B0ciBkb2MpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhJbmNsdWRlU2V0RmxhZ3MJKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LAogCQkJCQkgaW50IGZsYWdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhtbFhJbmNsdWRlRnJlZUNvbnRleHQJKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxYSW5jbHVkZVByb2Nlc3NOb2RlCSh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbE5vZGVQdHIgdHJlZSk7CiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3hsaW5rLmggYi9pbmNsdWRlL2xpYnhtbC94bGluay5oCmluZGV4IDA0ZTRiMzIuLjEwNjU3MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3hsaW5rLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwveGxpbmsuaApAQCAtMTYwLDIzICsxNjAsMjMgQEAKICAqIGRldGVjdGlvbiBjYWxsYmFja3MuCiAgKi8KIAotWE1MUFVCRlVOIHhsaW5rTm9kZURldGVjdEZ1bmMgWE1MQ0FMTAorWE1MUFVCRlVOIHhsaW5rTm9kZURldGVjdEZ1bmMKIAkJeGxpbmtHZXREZWZhdWx0RGV0ZWN0CSh2b2lkKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhsaW5rU2V0RGVmYXVsdERldGVjdAkoeGxpbmtOb2RlRGV0ZWN0RnVuYyBmdW5jKTsKIAogLyoKICAqIFJvdXRpbmVzIHRvIHNldC9nZXQgdGhlIGRlZmF1bHQgaGFuZGxlcnMuCiAgKi8KLVhNTFBVQkZVTiB4bGlua0hhbmRsZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhsaW5rSGFuZGxlclB0cgogCQl4bGlua0dldERlZmF1bHRIYW5kbGVyCSh2b2lkKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCXhsaW5rU2V0RGVmYXVsdEhhbmRsZXIJKHhsaW5rSGFuZGxlclB0ciBoYW5kbGVyKTsKIAogLyoKICAqIExpbmsgZGV0ZWN0aW9uIG1vZHVsZSBpdHNlbGYuCiAgKi8KLVhNTFBVQkZVTiB4bGlua1R5cGUgWE1MQ0FMTAorWE1MUFVCRlVOIHhsaW5rVHlwZQogCQl4bGlua0lzTGluawkJKHhtbERvY1B0ciBkb2MsCiAJCQkJCSB4bWxOb2RlUHRyIG5vZGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWxJTy5oIGIvaW5jbHVkZS9saWJ4bWwveG1sSU8uaAppbmRleCAwOTViMmY1Li4yNDg3YmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC94bWxJTy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbElPLmgKQEAgLTEyLDYgKzEyLDEwIEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGlieG1sL2VuY29kaW5nLmg+CisjZGVmaW5lIFhNTF9UUkVFX0lOVEVSTkFMUworI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjdW5kZWYgWE1MX1RSRUVfSU5URVJOQUxTCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0zMSw3ICszNSw3IEBACiAgKgogICogUmV0dXJucyAxIGlmIHllcyBhbmQgMCBpZiBhbm90aGVyIElucHV0IG1vZHVsZSBzaG91bGQgYmUgdXNlZAogICovCi10eXBlZGVmIGludCAoWE1MQ0FMTCAqeG1sSW5wdXRNYXRjaENhbGxiYWNrKSAoY2hhciBjb25zdCAqZmlsZW5hbWUpOwordHlwZWRlZiBpbnQgKCp4bWxJbnB1dE1hdGNoQ2FsbGJhY2spIChjaGFyIGNvbnN0ICpmaWxlbmFtZSk7CiAvKioKICAqIHhtbElucHV0T3BlbkNhbGxiYWNrOgogICogQGZpbGVuYW1lOiB0aGUgZmlsZW5hbWUgb3IgVVJJCkBAIC00MCw3ICs0NCw3IEBACiAgKgogICogUmV0dXJucyBhbiBJbnB1dCBjb250ZXh0IG9yIE5VTEwgaW4gY2FzZSBvciBlcnJvcgogICovCi10eXBlZGVmIHZvaWQgKiAoWE1MQ0FMTCAqeG1sSW5wdXRPcGVuQ2FsbGJhY2spIChjaGFyIGNvbnN0ICpmaWxlbmFtZSk7Cit0eXBlZGVmIHZvaWQgKiAoKnhtbElucHV0T3BlbkNhbGxiYWNrKSAoY2hhciBjb25zdCAqZmlsZW5hbWUpOwogLyoqCiAgKiB4bWxJbnB1dFJlYWRDYWxsYmFjazoKICAqIEBjb250ZXh0OiAgYW4gSW5wdXQgY29udGV4dApAQCAtNTEsNyArNTUsNyBAQAogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotdHlwZWRlZiBpbnQgKFhNTENBTEwgKnhtbElucHV0UmVhZENhbGxiYWNrKSAodm9pZCAqIGNvbnRleHQsIGNoYXIgKiBidWZmZXIsIGludCBsZW4pOwordHlwZWRlZiBpbnQgKCp4bWxJbnB1dFJlYWRDYWxsYmFjaykgKHZvaWQgKiBjb250ZXh0LCBjaGFyICogYnVmZmVyLCBpbnQgbGVuKTsKIC8qKgogICogeG1sSW5wdXRDbG9zZUNhbGxiYWNrOgogICogQGNvbnRleHQ6ICBhbiBJbnB1dCBjb250ZXh0CkBAIC02MCw3ICs2NCw3IEBACiAgKgogICogUmV0dXJucyAwIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotdHlwZWRlZiBpbnQgKFhNTENBTEwgKnhtbElucHV0Q2xvc2VDYWxsYmFjaykgKHZvaWQgKiBjb250ZXh0KTsKK3R5cGVkZWYgaW50ICgqeG1sSW5wdXRDbG9zZUNhbGxiYWNrKSAodm9pZCAqIGNvbnRleHQpOwogCiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECiAvKgpAQCAtNzcsNyArODEsNyBAQAogICoKICAqIFJldHVybnMgMSBpZiB5ZXMgYW5kIDAgaWYgYW5vdGhlciBPdXRwdXQgbW9kdWxlIHNob3VsZCBiZSB1c2VkCiAgKi8KLXR5cGVkZWYgaW50IChYTUxDQUxMICp4bWxPdXRwdXRNYXRjaENhbGxiYWNrKSAoY2hhciBjb25zdCAqZmlsZW5hbWUpOwordHlwZWRlZiBpbnQgKCp4bWxPdXRwdXRNYXRjaENhbGxiYWNrKSAoY2hhciBjb25zdCAqZmlsZW5hbWUpOwogLyoqCiAgKiB4bWxPdXRwdXRPcGVuQ2FsbGJhY2s6CiAgKiBAZmlsZW5hbWU6IHRoZSBmaWxlbmFtZSBvciBVUkkKQEAgLTg2LDcgKzkwLDcgQEAKICAqCiAgKiBSZXR1cm5zIGFuIE91dHB1dCBjb250ZXh0IG9yIE5VTEwgaW4gY2FzZSBvciBlcnJvcgogICovCi10eXBlZGVmIHZvaWQgKiAoWE1MQ0FMTCAqeG1sT3V0cHV0T3BlbkNhbGxiYWNrKSAoY2hhciBjb25zdCAqZmlsZW5hbWUpOwordHlwZWRlZiB2b2lkICogKCp4bWxPdXRwdXRPcGVuQ2FsbGJhY2spIChjaGFyIGNvbnN0ICpmaWxlbmFtZSk7CiAvKioKICAqIHhtbE91dHB1dFdyaXRlQ2FsbGJhY2s6CiAgKiBAY29udGV4dDogIGFuIE91dHB1dCBjb250ZXh0CkBAIC05Nyw3ICsxMDEsNyBAQAogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotdHlwZWRlZiBpbnQgKFhNTENBTEwgKnhtbE91dHB1dFdyaXRlQ2FsbGJhY2spICh2b2lkICogY29udGV4dCwgY29uc3QgY2hhciAqIGJ1ZmZlciwKK3R5cGVkZWYgaW50ICgqeG1sT3V0cHV0V3JpdGVDYWxsYmFjaykgKHZvaWQgKiBjb250ZXh0LCBjb25zdCBjaGFyICogYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7CiAvKioKICAqIHhtbE91dHB1dENsb3NlQ2FsbGJhY2s6CkBAIC0xMDcsMjEgKzExMSwzOCBAQAogICoKICAqIFJldHVybnMgMCBvciAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KLXR5cGVkZWYgaW50IChYTUxDQUxMICp4bWxPdXRwdXRDbG9zZUNhbGxiYWNrKSAodm9pZCAqIGNvbnRleHQpOwordHlwZWRlZiBpbnQgKCp4bWxPdXRwdXRDbG9zZUNhbGxiYWNrKSAodm9pZCAqIGNvbnRleHQpOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgorLyoqCisgKiB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzoKKyAqIEBVUkk6IHRoZSBVUkkgdG8gcmVhZCBmcm9tCisgKiBAZW5jOiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBlbmNvZGluZworICoKKyAqIFNpZ25hdHVyZSBmb3IgdGhlIGZ1bmN0aW9uIGRvaW5nIHRoZSBsb29rdXAgZm9yIGEgc3VpdGFibGUgaW5wdXQgbWV0aG9kCisgKiBjb3JyZXNwb25kaW5nIHRvIGFuIFVSSS4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXcgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIE5VTEwgaWYgbm8KKyAqICAgICAgICAgbWV0aG9kIHdhcyBmb3VuZC4KKyAqLwordHlwZWRlZiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cgorKCp4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYykoY29uc3QgY2hhciAqVVJJLCB4bWxDaGFyRW5jb2RpbmcgZW5jKTsKIAotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2VuY29kaW5nLmg+CisvKioKKyAqIHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYzoKKyAqIEBVUkk6IHRoZSBVUkkgdG8gd3JpdGUgdG8KKyAqIEBlbmM6IHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IGVuY29kaW5nCisgKgorICogU2lnbmF0dXJlIGZvciB0aGUgZnVuY3Rpb24gZG9pbmcgdGhlIGxvb2t1cCBmb3IgYSBzdWl0YWJsZSBvdXRwdXQgbWV0aG9kCisgKiBjb3JyZXNwb25kaW5nIHRvIGFuIFVSSS4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXcgeG1sT3V0cHV0QnVmZmVyUHRyIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBOVUxMIGlmIG5vCisgKiAgICAgICAgIG1ldGhvZCB3YXMgZm91bmQuCisgKi8KK3R5cGVkZWYgeG1sT3V0cHV0QnVmZmVyUHRyCisoKnhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYykoY29uc3QgY2hhciAqVVJJLAorICAgICAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIsIGludCBjb21wcmVzc2lvbik7CiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKIHN0cnVjdCBfeG1sUGFyc2VySW5wdXRCdWZmZXIgewogICAgIHZvaWQqICAgICAgICAgICAgICAgICAgY29udGV4dDsKICAgICB4bWxJbnB1dFJlYWRDYWxsYmFjayAgIHJlYWRjYWxsYmFjazsKQEAgLTE1Miw1NiArMTczLDc1IEBACiB9OwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCisvKiogRE9DX0RJU0FCTEUgKi8KKyNkZWZpbmUgWE1MX0dMT0JBTFNfSU8gXAorICBYTUxfT1AoeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlLCBcCisgICAgICAgICAgIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVGdW5jLCBYTUxfREVQUkVDQVRFRCkgXAorICBYTUxfT1AoeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSwgXAorICAgICAgICAgICB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMsIFhNTF9ERVBSRUNBVEVEKQorCisjZGVmaW5lIFhNTF9PUCBYTUxfREVDTEFSRV9HTE9CQUwKK1hNTF9HTE9CQUxTX0lPCisjdW5kZWYgWE1MX09QCisKKyNpZiBkZWZpbmVkKExJQlhNTF9USFJFQURfRU5BQkxFRCkgJiYgIWRlZmluZWQoWE1MX0dMT0JBTFNfTk9fUkVERUZJTklUSU9OKQorICAjZGVmaW5lIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSBcCisgICAgWE1MX0dMT0JBTF9NQUNSTyh4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lVmFsdWUpCisgICNkZWZpbmUgeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSBcCisgICAgWE1MX0dMT0JBTF9NQUNSTyh4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlKQorI2VuZGlmCisvKiogRE9DX0VOQUJMRSAqLworCiAvKgogICogSW50ZXJmYWNlcyBmb3IgaW5wdXQKICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MJCSh2b2lkKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sUG9wSW5wdXRDYWxsYmFja3MJCQkodm9pZCk7CiAKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sUmVnaXN0ZXJEZWZhdWx0SW5wdXRDYWxsYmFja3MJKHZvaWQpOwotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cgogCXhtbEFsbG9jUGFyc2VySW5wdXRCdWZmZXIJCSh4bWxDaGFyRW5jb2RpbmcgZW5jKTsKIAotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cgogCXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUJKGNvbnN0IGNoYXIgKlVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmcgZW5jKTsKLVhNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VySW5wdXRCdWZmZXJQdHIKIAl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGUJCShGSUxFICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJFbmNvZGluZyBlbmMpOwotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cgogCXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmQJCShpbnQgZmQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmcgZW5jKTsKLVhNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VySW5wdXRCdWZmZXJQdHIKIAl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbQkJKGNvbnN0IGNoYXIgKm1lbSwgaW50IHNpemUsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmcgZW5jKTsKLVhNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VySW5wdXRCdWZmZXJQdHIKIAl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYwkoY29uc3QgY2hhciAqbWVtLCBpbnQgc2l6ZSwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXJFbmNvZGluZyBlbmMpOwotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cgogCXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlSU8JCSh4bWxJbnB1dFJlYWRDYWxsYmFjayAgIGlvcmVhZCwKIAkJCQkJCSB4bWxJbnB1dENsb3NlQ2FsbGJhY2sgIGlvY2xvc2UsCiAJCQkJCQkgdm9pZCAqaW9jdHgsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmcgZW5jKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbFBhcnNlcklucHV0QnVmZmVyUmVhZAkJKHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGluLAogCQkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sUGFyc2VySW5wdXRCdWZmZXJHcm93CQkoeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW4sCiAJCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxQYXJzZXJJbnB1dEJ1ZmZlclB1c2gJCSh4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBpbiwKIAkJCQkJCSBpbnQgbGVuLAogCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Zik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcgkJKHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGluKTsKLVhNTFBVQkZVTiBjaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNoYXIgKgogCXhtbFBhcnNlckdldERpcmVjdG9yeQkJCShjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MJCSh4bWxJbnB1dE1hdGNoQ2FsbGJhY2sgbWF0Y2hGdW5jLAogCQkJCQkJIHhtbElucHV0T3BlbkNhbGxiYWNrIG9wZW5GdW5jLAogCQkJCQkJIHhtbElucHV0UmVhZENhbGxiYWNrIHJlYWRGdW5jLApAQCAtMjE1LDYyICsyNTUsNjIgQEAKIC8qCiAgKiBJbnRlcmZhY2VzIGZvciBvdXRwdXQKICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxDbGVhbnVwT3V0cHV0Q2FsbGJhY2tzCQkodm9pZCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxQb3BPdXRwdXRDYWxsYmFja3MJCQkodm9pZCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbFJlZ2lzdGVyRGVmYXVsdE91dHB1dENhbGxiYWNrcyh2b2lkKTsKLVhNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE91dHB1dEJ1ZmZlclB0cgogCXhtbEFsbG9jT3V0cHV0QnVmZmVyCQkoeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBlbmNvZGVyKTsKIAotWE1MUFVCRlVOIHhtbE91dHB1dEJ1ZmZlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sT3V0cHV0QnVmZmVyUHRyCiAJeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUJKGNvbnN0IGNoYXIgKlVSSSwKIAkJCQkJIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgZW5jb2RlciwKIAkJCQkJIGludCBjb21wcmVzc2lvbik7CiAKLVhNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE91dHB1dEJ1ZmZlclB0cgogCXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGUJKEZJTEUgKmZpbGUsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIpOwogCi1YTUxQVUJGVU4geG1sT3V0cHV0QnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJQdHIKIAl4bWxPdXRwdXRCdWZmZXJDcmVhdGVCdWZmZXIJKHhtbEJ1ZmZlclB0ciBidWZmZXIsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIpOwogCi1YTUxQVUJGVU4geG1sT3V0cHV0QnVmZmVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJQdHIKIAl4bWxPdXRwdXRCdWZmZXJDcmVhdGVGZAkJKGludCBmZCwKIAkJCQkJIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgZW5jb2Rlcik7CiAKLVhNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE91dHB1dEJ1ZmZlclB0cgogCXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUlPCQkoeG1sT3V0cHV0V3JpdGVDYWxsYmFjayAgIGlvd3JpdGUsCiAJCQkJCSB4bWxPdXRwdXRDbG9zZUNhbGxiYWNrICBpb2Nsb3NlLAogCQkJCQkgdm9pZCAqaW9jdHgsCiAJCQkJCSB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIpOwogCiAvKiBDb3VwbGUgb2YgQVBJcyB0byBnZXQgdGhlIG91dHB1dCB3aXRob3V0IGRpZ2dpbmcgaW50byB0aGUgYnVmZmVycyAqLwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAgICAgICAgIHhtbE91dHB1dEJ1ZmZlckdldENvbnRlbnQgICAgICAgKHhtbE91dHB1dEJ1ZmZlclB0ciBvdXQpOwotWE1MUFVCRlVOIHNpemVfdCBYTUxDQUxMCitYTUxQVUJGVU4gc2l6ZV90CiAgICAgICAgIHhtbE91dHB1dEJ1ZmZlckdldFNpemUgICAgICAgICAgKHhtbE91dHB1dEJ1ZmZlclB0ciBvdXQpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxPdXRwdXRCdWZmZXJXcml0ZQkJKHhtbE91dHB1dEJ1ZmZlclB0ciBvdXQsCiAJCQkJCSBpbnQgbGVuLAogCQkJCQkgY29uc3QgY2hhciAqYnVmKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE91dHB1dEJ1ZmZlcldyaXRlU3RyaW5nCSh4bWxPdXRwdXRCdWZmZXJQdHIgb3V0LAogCQkJCQkgY29uc3QgY2hhciAqc3RyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE91dHB1dEJ1ZmZlcldyaXRlRXNjYXBlCSh4bWxPdXRwdXRCdWZmZXJQdHIgb3V0LAogCQkJCQkgY29uc3QgeG1sQ2hhciAqc3RyLAogCQkJCQkgeG1sQ2hhckVuY29kaW5nT3V0cHV0RnVuYyBlc2NhcGluZyk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE91dHB1dEJ1ZmZlckZsdXNoCQkoeG1sT3V0cHV0QnVmZmVyUHRyIG91dCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxPdXRwdXRCdWZmZXJDbG9zZQkJKHhtbE91dHB1dEJ1ZmZlclB0ciBvdXQpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxSZWdpc3Rlck91dHB1dENhbGxiYWNrcwkoeG1sT3V0cHV0TWF0Y2hDYWxsYmFjayBtYXRjaEZ1bmMsCiAJCQkJCSB4bWxPdXRwdXRPcGVuQ2FsbGJhY2sgb3BlbkZ1bmMsCiAJCQkJCSB4bWxPdXRwdXRXcml0ZUNhbGxiYWNrIHdyaXRlRnVuYywKQEAgLTI4MywyMCArMzIzLDIwIEBACiAKICNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECiAvKiAgVGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0cyBpZiBIVFRQIHN1cHBvcnQgYnVpbHQgaW50byB0aGUgbGlicmFyeSAgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sUmVnaXN0ZXJIVFRQUG9zdENhbGxiYWNrcwkodm9pZCApOwogI2VuZGlmIC8qIExJQlhNTF9IVFRQX0VOQUJMRUQgKi8KIAogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCi1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyCiAJeG1sQ2hlY2tIVFRQSW5wdXQJCSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxQYXJzZXJJbnB1dFB0ciByZXQpOwogCiAvKgogICogQSBwcmVkZWZpbmVkIGVudGl0eSBsb2FkZXIgZGlzYWJsaW5nIG5ldHdvcmsgYWNjZXNzZXMKICAqLwotWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dFB0cgogCXhtbE5vTmV0RXh0ZXJuYWxFbnRpdHlMb2FkZXIJKGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKklELAogCQkJCQkgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKQEAgLTMwNSw2MSArMzQ1LDc0IEBACiAgKiB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aCBpcyBvYnNvbGV0ZSwgZG9uJ3QgdXNlIGl0LgogICogQ2hlY2sgeG1sQ2Fub25pY1BhdGggaW4gdXJpLmggZm9yIGEgYmV0dGVyIGFsdGVybmF0aXZlLgogICovCi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAl4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAkJKGNvbnN0IHhtbENoYXIgKnBhdGgpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxDaGVja0ZpbGVuYW1lCQkoY29uc3QgY2hhciAqcGF0aCk7CiAvKioKICAqIERlZmF1bHQgJ2ZpbGU6Ly8nIHByb3RvY29sIGNhbGxiYWNrcwogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxGaWxlTWF0Y2gJCQkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZCAqCiAJeG1sRmlsZU9wZW4JCQkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sRmlsZVJlYWQJCQkodm9pZCAqIGNvbnRleHQsCiAJCQkJCSBjaGFyICogYnVmZmVyLAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxGaWxlQ2xvc2UJCQkodm9pZCAqIGNvbnRleHQpOwogCiAvKioKICAqIERlZmF1bHQgJ2h0dHA6Ly8nIHByb3RvY29sIGNhbGxiYWNrcwogICovCiAjaWZkZWYgTElCWE1MX0hUVFBfRU5BQkxFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sSU9IVFRQTWF0Y2gJCQkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZCAqCiAJeG1sSU9IVFRQT3BlbgkJCShjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxJT0hUVFBPcGVuVwkJCShjb25zdCBjaGFyICogcG9zdF91cmksCiAJCQkJCSBpbnQgICBjb21wcmVzc2lvbiApOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sSU9IVFRQUmVhZAkJCSh2b2lkICogY29udGV4dCwKIAkJCQkJIGNoYXIgKiBidWZmZXIsCiAJCQkJCSBpbnQgbGVuKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbElPSFRUUENsb3NlCQkJKHZvaWQgKiBjb250ZXh0KTsKICNlbmRpZiAvKiBMSUJYTUxfSFRUUF9FTkFCTEVEICovCiAKIC8qKgogICogRGVmYXVsdCAnZnRwOi8vJyBwcm90b2NvbCBjYWxsYmFja3MKICAqLwotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCisjaWYgZGVmaW5lZChMSUJYTUxfRlRQX0VOQUJMRUQpCitYTUxQVUJGVU4gaW50CiAJeG1sSU9GVFBNYXRjaAkJCShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxJT0ZUUE9wZW4JCQkoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sSU9GVFBSZWFkCQkJKHZvaWQgKiBjb250ZXh0LAogCQkJCQkgY2hhciAqIGJ1ZmZlciwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sSU9GVFBDbG9zZQkJCSh2b2lkICogY29udGV4dCk7Ci0jZW5kaWYgLyogTElCWE1MX0ZUUF9FTkFCTEVEICovCisjZW5kaWYgLyogZGVmaW5lZChMSUJYTUxfRlRQX0VOQUJMRUQpICovCisKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYworCXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0KAorCQl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyBmdW5jKTsKK1hNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMKKwl4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQoCisJCXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyBmdW5jKTsKK1hNTFBVQkZVTiB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZUZ1bmMKKwl4bWxUaHJEZWZPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQoCisJCXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyBmdW5jKTsKK1hNTFBVQkZVTiB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYworCXhtbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0KAorCQl4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRnVuYyBmdW5jKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oIGIvaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAppbmRleCBiZjFiMTMxLi5lYTM4ZWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmgKQEAgLTExLDExICsxMSwxMSBAQAogI2RlZmluZSBfX1hNTF9BVVRPTUFUQV9IX18KIAogI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KIAogI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAogI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi0jaW5jbHVkZSA8bGlieG1sL3htbHJlZ2V4cC5oPgorCisjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtNDAsMzIgKzQwLDMyIEBACiAvKgogICogQnVpbGRpbmcgQVBJCiAgKi8KLVhNTFBVQkZVTiB4bWxBdXRvbWF0YVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFQdHIKIAkJICAgIHhtbE5ld0F1dG9tYXRhCQkodm9pZCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sRnJlZUF1dG9tYXRhCQkoeG1sQXV0b21hdGFQdHIgYW0pOwogCi1YTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0cgogCQkgICAgeG1sQXV0b21hdGFHZXRJbml0U3RhdGUJKHhtbEF1dG9tYXRhUHRyIGFtKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sQXV0b21hdGFTZXRGaW5hbFN0YXRlCSh4bWxBdXRvbWF0YVB0ciBhbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIHN0YXRlKTsKLVhNTFBVQkZVTiB4bWxBdXRvbWF0YVN0YXRlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxBdXRvbWF0YVN0YXRlUHRyCiAJCSAgICB4bWxBdXRvbWF0YU5ld1N0YXRlCQkoeG1sQXV0b21hdGFQdHIgYW0pOwotWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIKIAkJICAgIHhtbEF1dG9tYXRhTmV3VHJhbnNpdGlvbgkoeG1sQXV0b21hdGFQdHIgYW0sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciBmcm9tLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgdG8sCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdG9rZW4sCiAJCQkJCQkgdm9pZCAqZGF0YSk7Ci1YTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0cgogCQkgICAgeG1sQXV0b21hdGFOZXdUcmFuc2l0aW9uMgkoeG1sQXV0b21hdGFQdHIgYW0sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciBmcm9tLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgdG8sCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdG9rZW4sCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdG9rZW4yLAogCQkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIKICAgICAgICAgICAgICAgICAgICAgeG1sQXV0b21hdGFOZXdOZWdUcmFucwkoeG1sQXV0b21hdGFQdHIgYW0sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciBmcm9tLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgdG8sCkBAIC03Myw3ICs3Myw3IEBACiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdG9rZW4yLAogCQkJCQkJIHZvaWQgKmRhdGEpOwogCi1YTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0cgogCQkgICAgeG1sQXV0b21hdGFOZXdDb3VudFRyYW5zCSh4bWxBdXRvbWF0YVB0ciBhbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIGZyb20sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciB0bywKQEAgLTgxLDcgKzgxLDcgQEAKIAkJCQkJCSBpbnQgbWluLAogCQkJCQkJIGludCBtYXgsCiAJCQkJCQkgdm9pZCAqZGF0YSk7Ci1YTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0cgogCQkgICAgeG1sQXV0b21hdGFOZXdDb3VudFRyYW5zMgkoeG1sQXV0b21hdGFQdHIgYW0sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciBmcm9tLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgdG8sCkBAIC05MCw3ICs5MCw3IEBACiAJCQkJCQkgaW50IG1pbiwKIAkJCQkJCSBpbnQgbWF4LAogCQkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIKIAkJICAgIHhtbEF1dG9tYXRhTmV3T25jZVRyYW5zCSh4bWxBdXRvbWF0YVB0ciBhbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIGZyb20sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciB0bywKQEAgLTk4LDcgKzk4LDcgQEAKIAkJCQkJCSBpbnQgbWluLAogCQkJCQkJIGludCBtYXgsCiAJCQkJCQkgdm9pZCAqZGF0YSk7Ci1YTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0cgogCQkgICAgeG1sQXV0b21hdGFOZXdPbmNlVHJhbnMyCSh4bWxBdXRvbWF0YVB0ciBhbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIGZyb20sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciB0bywKQEAgLTEwNywzMyArMTA3LDMzIEBACiAJCQkJCQkgaW50IG1pbiwKIAkJCQkJCSBpbnQgbWF4LAogCQkJCQkJIHZvaWQgKmRhdGEpOwotWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIKIAkJICAgIHhtbEF1dG9tYXRhTmV3QWxsVHJhbnMJKHhtbEF1dG9tYXRhUHRyIGFtLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgZnJvbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIHRvLAogCQkJCQkJIGludCBsYXgpOwotWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIKIAkJICAgIHhtbEF1dG9tYXRhTmV3RXBzaWxvbgkoeG1sQXV0b21hdGFQdHIgYW0sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciBmcm9tLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgdG8pOwotWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEF1dG9tYXRhU3RhdGVQdHIKIAkJICAgIHhtbEF1dG9tYXRhTmV3Q291bnRlZFRyYW5zCSh4bWxBdXRvbWF0YVB0ciBhbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIGZyb20sCiAJCQkJCQkgeG1sQXV0b21hdGFTdGF0ZVB0ciB0bywKIAkJCQkJCSBpbnQgY291bnRlcik7Ci1YTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sQXV0b21hdGFTdGF0ZVB0cgogCQkgICAgeG1sQXV0b21hdGFOZXdDb3VudGVyVHJhbnMJKHhtbEF1dG9tYXRhUHRyIGFtLAogCQkJCQkJIHhtbEF1dG9tYXRhU3RhdGVQdHIgZnJvbSwKIAkJCQkJCSB4bWxBdXRvbWF0YVN0YXRlUHRyIHRvLAogCQkJCQkJIGludCBjb3VudGVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sQXV0b21hdGFOZXdDb3VudGVyCSh4bWxBdXRvbWF0YVB0ciBhbSwKIAkJCQkJCSBpbnQgbWluLAogCQkJCQkJIGludCBtYXgpOwogCi1YTUxQVUJGVU4geG1sUmVnZXhwUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBzdHJ1Y3QgX3htbFJlZ2V4cCAqCiAJCSAgICB4bWxBdXRvbWF0YUNvbXBpbGUJCSh4bWxBdXRvbWF0YVB0ciBhbSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbEF1dG9tYXRhSXNEZXRlcm1pbmlzdAkoeG1sQXV0b21hdGFQdHIgYW0pOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3htbGVycm9yLmggYi9pbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oCmluZGV4IGVlOTViZTkuLjFmMGFiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3htbGVycm9yLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaApAQCAtNywxMSArNywxMSBAQAogICogQXV0aG9yOiBEYW5pZWwgVmVpbGxhcmQKICAqLwogCi0jaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgotCiAjaWZuZGVmIF9fWE1MX0VSUk9SX0hfXwogI2RlZmluZSBfX1hNTF9FUlJPUl9IX18KIAorI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTIxMCw2ICsyMTAsNyBAQAogICAgIFhNTF9FUlJfTkFNRV9UT09fTE9ORywgLyogMTEwICovCiAgICAgWE1MX0VSUl9VU0VSX1NUT1AsIC8qIDExMSAqLwogICAgIFhNTF9FUlJfQ09NTUVOVF9BQlJVUFRMWV9FTkRFRCwgLyogMTEyICovCisgICAgWE1MX1dBUl9FTkNPRElOR19NSVNNQVRDSCwgLyogMTEzICovCiAgICAgWE1MX05TX0VSUl9YTUxfTkFNRVNQQUNFID0gMjAwLAogICAgIFhNTF9OU19FUlJfVU5ERUZJTkVEX05BTUVTUEFDRSwgLyogMjAxICovCiAgICAgWE1MX05TX0VSUl9RTkFNRSwgLyogMjAyICovCkBAIC04NDQsNyArODQ1LDcgQEAKICAqIFNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IgYW5kCiAgKiBubyBwYXJzaW5nIG9yIHZhbGlkaXR5IGNvbnRleHQgYXZhaWxhYmxlIC4KICAqLwotdHlwZWRlZiB2b2lkIChYTUxDREVDTCAqeG1sR2VuZXJpY0Vycm9yRnVuYykgKHZvaWQgKmN0eCwKK3R5cGVkZWYgdm9pZCAoKnhtbEdlbmVyaWNFcnJvckZ1bmMpICh2b2lkICpjdHgsCiAJCQkJIGNvbnN0IGNoYXIgKm1zZywKIAkJCQkgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIC8qKgpAQCAtODU1LDkyICs4NTYsOTIgQEAKICAqIFNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IgYW5kCiAgKiB0aGUgbW9kdWxlIGhhbmRsZXMgdGhlIG5ldyBlcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtLgogICovCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKnhtbFN0cnVjdHVyZWRFcnJvckZ1bmMpICh2b2lkICp1c2VyRGF0YSwgeG1sRXJyb3JQdHIgZXJyb3IpOwordHlwZWRlZiB2b2lkICgqeG1sU3RydWN0dXJlZEVycm9yRnVuYykgKHZvaWQgKnVzZXJEYXRhLCBjb25zdCB4bWxFcnJvciAqZXJyb3IpOworCisvKiogRE9DX0RJU0FCTEUgKi8KKyNkZWZpbmUgWE1MX0dMT0JBTFNfRVJST1IgXAorICBYTUxfT1AoeG1sTGFzdEVycm9yLCB4bWxFcnJvciwgWE1MX0RFUFJFQ0FURUQpIFwKKyAgWE1MX09QKHhtbEdlbmVyaWNFcnJvciwgeG1sR2VuZXJpY0Vycm9yRnVuYywgWE1MX05PX0FUVFIpIFwKKyAgWE1MX09QKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsIHZvaWQgKiwgWE1MX05PX0FUVFIpIFwKKyAgWE1MX09QKHhtbFN0cnVjdHVyZWRFcnJvciwgeG1sU3RydWN0dXJlZEVycm9yRnVuYywgWE1MX05PX0FUVFIpIFwKKyAgWE1MX09QKHhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQsIHZvaWQgKiwgWE1MX05PX0FUVFIpCisKKyNkZWZpbmUgWE1MX09QIFhNTF9ERUNMQVJFX0dMT0JBTAorWE1MX0dMT0JBTFNfRVJST1IKKyN1bmRlZiBYTUxfT1AKKworI2lmIGRlZmluZWQoTElCWE1MX1RIUkVBRF9FTkFCTEVEKSAmJiAhZGVmaW5lZChYTUxfR0xPQkFMU19OT19SRURFRklOSVRJT04pCisgICNkZWZpbmUgeG1sTGFzdEVycm9yIFhNTF9HTE9CQUxfTUFDUk8oeG1sTGFzdEVycm9yKQorICAjZGVmaW5lIHhtbEdlbmVyaWNFcnJvciBYTUxfR0xPQkFMX01BQ1JPKHhtbEdlbmVyaWNFcnJvcikKKyAgI2RlZmluZSB4bWxHZW5lcmljRXJyb3JDb250ZXh0IFhNTF9HTE9CQUxfTUFDUk8oeG1sR2VuZXJpY0Vycm9yQ29udGV4dCkKKyAgI2RlZmluZSB4bWxTdHJ1Y3R1cmVkRXJyb3IgWE1MX0dMT0JBTF9NQUNSTyh4bWxTdHJ1Y3R1cmVkRXJyb3IpCisgICNkZWZpbmUgeG1sU3RydWN0dXJlZEVycm9yQ29udGV4dCBYTUxfR0xPQkFMX01BQ1JPKHhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQpCisjZW5kaWYKKy8qKiBET0NfRU5BQkxFICovCiAKIC8qCiAgKiBVc2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byByZXNldCB0aGUgdHdvIGdsb2JhbCB2YXJpYWJsZXMKICAqIHhtbEdlbmVyaWNFcnJvciBhbmQgeG1sR2VuZXJpY0Vycm9yQ29udGV4dC4KICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jCSh2b2lkICpjdHgsCiAJCQkJIHhtbEdlbmVyaWNFcnJvckZ1bmMgaGFuZGxlcik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAorICAgIHhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmModm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBoYW5kbGVyKTsKK1hNTF9ERVBSRUNBVEVECitYTUxQVUJGVU4gdm9pZAogICAgIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYwkoeG1sR2VuZXJpY0Vycm9yRnVuYyAqaGFuZGxlcik7CiAKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYwkodm9pZCAqY3R4LAogCQkJCSB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIGhhbmRsZXIpOworWE1MUFVCRlVOIHZvaWQKKyAgICB4bWxUaHJEZWZTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgaGFuZGxlcik7CiAvKgogICogRGVmYXVsdCBtZXNzYWdlIHJvdXRpbmVzIHVzZWQgYnkgU0FYIGFuZCBWYWxpZCBjb250ZXh0IGZvciBlcnJvcgogICogYW5kIHdhcm5pbmcgcmVwb3J0aW5nLgogICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDREVDTAorWE1MUFVCRlVOIHZvaWQKICAgICB4bWxQYXJzZXJFcnJvcgkJKHZvaWQgKmN0eCwKIAkJCQkgY29uc3QgY2hhciAqbXNnLAogCQkJCSAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0RFQ0wKK1hNTFBVQkZVTiB2b2lkCiAgICAgeG1sUGFyc2VyV2FybmluZwkJKHZvaWQgKmN0eCwKIAkJCQkgY29uc3QgY2hhciAqbXNnLAogCQkJCSAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0RFQ0wKK1hNTFBVQkZVTiB2b2lkCiAgICAgeG1sUGFyc2VyVmFsaWRpdHlFcnJvcgkodm9pZCAqY3R4LAogCQkJCSBjb25zdCBjaGFyICptc2csCiAJCQkJIC4uLikgTElCWE1MX0FUVFJfRk9STUFUKDIsMyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDREVDTAorWE1MUFVCRlVOIHZvaWQKICAgICB4bWxQYXJzZXJWYWxpZGl0eVdhcm5pbmcJKHZvaWQgKmN0eCwKIAkJCQkgY29uc3QgY2hhciAqbXNnLAogCQkJCSAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAotICAgIHhtbFBhcnNlclByaW50RmlsZUluZm8JKHhtbFBhcnNlcklucHV0UHRyIGlucHV0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKLSAgICB4bWxQYXJzZXJQcmludEZpbGVDb250ZXh0CSh4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCk7CitzdHJ1Y3QgX3htbFBhcnNlcklucHV0OworWE1MUFVCRlVOIHZvaWQKKyAgICB4bWxQYXJzZXJQcmludEZpbGVJbmZvCShzdHJ1Y3QgX3htbFBhcnNlcklucHV0ICppbnB1dCk7CitYTUxQVUJGVU4gdm9pZAorICAgIHhtbFBhcnNlclByaW50RmlsZUNvbnRleHQJKHN0cnVjdCBfeG1sUGFyc2VySW5wdXQgKmlucHV0KTsKIAogLyoKICAqIEV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uIHJvdXRpbmVzCiAgKi8KLVhNTFBVQkZVTiB4bWxFcnJvclB0ciBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sRXJyb3IgKgogICAgIHhtbEdldExhc3RFcnJvcgkJKHZvaWQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKICAgICB4bWxSZXNldExhc3RFcnJvcgkJKHZvaWQpOwotWE1MUFVCRlVOIHhtbEVycm9yUHRyIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxFcnJvciAqCiAgICAgeG1sQ3R4dEdldExhc3RFcnJvcgkJKHZvaWQgKmN0eCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogICAgIHhtbEN0eHRSZXNldExhc3RFcnJvcgkodm9pZCAqY3R4KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAgICAgeG1sUmVzZXRFcnJvcgkJKHhtbEVycm9yUHRyIGVycik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKLSAgICB4bWxDb3B5RXJyb3IJCSh4bWxFcnJvclB0ciBmcm9tLAorWE1MUFVCRlVOIGludAorICAgIHhtbENvcHlFcnJvcgkJKGNvbnN0IHhtbEVycm9yICpmcm9tLAogCQkJCSB4bWxFcnJvclB0ciB0byk7CiAKLSNpZmRlZiBJTl9MSUJYTUwKLS8qCi0gKiBJbnRlcm5hbCBjYWxsYmFjayByZXBvcnRpbmcgcm91dGluZQotICovCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCi0gICAgX194bWxSYWlzZUVycm9yCQkoeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzY2hhbm5lbCwKLQkJCQkgeG1sR2VuZXJpY0Vycm9yRnVuYyBjaGFubmVsLAotCQkJCSB2b2lkICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3R4LAotCQkJCSB2b2lkICpub2RlLAotCQkJCSBpbnQgZG9tYWluLAotCQkJCSBpbnQgY29kZSwKLQkJCQkgeG1sRXJyb3JMZXZlbCBsZXZlbCwKLQkJCQkgY29uc3QgY2hhciAqZmlsZSwKLQkJCQkgaW50IGxpbmUsCi0JCQkJIGNvbnN0IGNoYXIgKnN0cjEsCi0JCQkJIGNvbnN0IGNoYXIgKnN0cjIsCi0JCQkJIGNvbnN0IGNoYXIgKnN0cjMsCi0JCQkJIGludCBpbnQxLAotCQkJCSBpbnQgY29sLAotCQkJCSBjb25zdCBjaGFyICptc2csCi0JCQkJIC4uLikgTElCWE1MX0FUVFJfRk9STUFUKDE2LDE3KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKLSAgICBfX3htbFNpbXBsZUVycm9yCQkoaW50IGRvbWFpbiwKLQkJCQkgaW50IGNvZGUsCi0JCQkJIHhtbE5vZGVQdHIgbm9kZSwKLQkJCQkgY29uc3QgY2hhciAqbXNnLAotCQkJCSBjb25zdCBjaGFyICpleHRyYSkgTElCWE1MX0FUVFJfRk9STUFUKDQsMCk7Ci0jZW5kaWYKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmggYi9pbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmgKaW5kZXggYWNlZWRlNS4uM2IwNjNlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaApAQCAtOCw1MCArOCwxOSBAQAogI2lmbmRlZiBfX1hNTF9FWFBPUlRTX0hfXwogI2RlZmluZSBfX1hNTF9FWFBPUlRTX0hfXwogCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKIC8qKiBET0NfRElTQUJMRSAqLwotCi0jaWZkZWYgTElCWE1MX1NUQVRJQwotICAjZGVmaW5lIFhNTFBVQkxJQwotI2VsaWYgZGVmaW5lZChJTl9MSUJYTUwpCi0gICNkZWZpbmUgWE1MUFVCTElDIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotI2Vsc2UKLSAgI2RlZmluZSBYTUxQVUJMSUMgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoTElCWE1MX0ZBU1RDQUxMKQotICAjZGVmaW5lIFhNTENBTEwgX19mYXN0Y2FsbAotI2Vsc2UKLSAgI2RlZmluZSBYTUxDQUxMIF9fY2RlY2wKLSNlbmRpZgotI2RlZmluZSBYTUxDREVDTCBfX2NkZWNsCi0KLS8qKiBET0NfRU5BQkxFICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyAgI2lmZGVmIExJQlhNTF9TVEFUSUMKKyAgICAjZGVmaW5lIFhNTFBVQkxJQworICAjZWxpZiBkZWZpbmVkKElOX0xJQlhNTCkKKyAgICAjZGVmaW5lIFhNTFBVQkxJQyBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIFhNTFBVQkxJQyBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgI2VuZGlmCiAjZWxzZSAvKiBub3QgV2luZG93cyAqLwotCi0vKioKLSAqIFhNTFBVQkxJQzoKLSAqCi0gKiBNYWNybyB3aGljaCBkZWNsYXJlcyBhIHB1YmxpYyBzeW1ib2wKLSAqLwotI2RlZmluZSBYTUxQVUJMSUMKLQotLyoqCi0gKiBYTUxDQUxMOgotICoKLSAqIE1hY3JvIHdoaWNoIGRlY2xhcmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGV4cG9ydGVkIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIFhNTENBTEwKLQotLyoqCi0gKiBYTUxDREVDTDoKLSAqCi0gKiBNYWNybyB3aGljaCBkZWNsYXJlcyB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdAotICogdXNlICcuLi4nLgotICovCi0jZGVmaW5lIFhNTENERUNMCi0KKyAgI2RlZmluZSBYTUxQVUJMSUMKICNlbmRpZiAvKiBwbGF0Zm9ybSBzd2l0Y2ggKi8KKy8qKiBET0NfRU5BQkxFICovCiAKIC8qCiAgKiBYTUxQVUJGVU46CkBAIC02NywxMCArMzYsMTQgQEAKICAqLwogI2RlZmluZSBYTUxQVUJWQVIgWE1MUFVCTElDIGV4dGVybgogCisvKiogRE9DX0RJU0FCTEUgKi8KIC8qIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgWE1MQ0FMTAorI2RlZmluZSBYTUxDREVDTAogI2lmICFkZWZpbmVkKExJQlhNTF9ETExfSU1QT1JUKQogI2RlZmluZSBMSUJYTUxfRExMX0lNUE9SVCBYTUxQVUJWQVIKICNlbmRpZgorLyoqIERPQ19FTkFCTEUgKi8KIAogI2VuZGlmIC8qIF9fWE1MX0VYUE9SVFNfSF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oIGIvaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmgKaW5kZXggYWUyYTQyNy4uMDk3ZTNjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5LmgKQEAgLTE1LDMyICsxNSw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogCi0vKioKLSAqIERFQlVHX01FTU9SWToKLSAqCi0gKiBERUJVR19NRU1PUlkgcmVwbGFjZXMgdGhlIGFsbG9jYXRvciB3aXRoIGEgY29sbGVjdCBhbmQgZGVidWcKLSAqIHNoZWxsIHRvIHRoZSBsaWJjIGFsbG9jYXRvci4KLSAqIERFQlVHX01FTU9SWSBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgd2hlbiBkZWJ1Z2dpbmcKLSAqIGxpYnhtbCBpLmUuIGlmIGxpYnhtbCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggLS13aXRoLWRlYnVnLW1lbSB0b28uCi0gKi8KLS8qICNkZWZpbmUgREVCVUdfTUVNT1JZX0ZSRUVEICovCi0vKiAjZGVmaW5lIERFQlVHX01FTU9SWV9MT0NBVElPTiAqLwotCi0jaWZkZWYgREVCVUcKLSNpZm5kZWYgREVCVUdfTUVNT1JZCi0jZGVmaW5lIERFQlVHX01FTU9SWQotI2VuZGlmCi0jZW5kaWYKLQotLyoqCi0gKiBERUJVR19NRU1PUllfTE9DQVRJT046Ci0gKgotICogREVCVUdfTUVNT1JZX0xPQ0FUSU9OIHNob3VsZCBiZSBhY3RpdmF0ZWQgb25seSB3aGVuIGRlYnVnZ2luZwotICogbGlieG1sIGkuZS4gaWYgbGlieG1sIGhhcyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCAtLXdpdGgtZGVidWctbWVtIHRvby4KLSAqLwotI2lmZGVmIERFQlVHX01FTU9SWV9MT0NBVElPTgotI2VuZGlmCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTU0LDcgKzI4LDcgQEAKICAqCiAgKiBTaWduYXR1cmUgZm9yIGEgZnJlZSgpIGltcGxlbWVudGF0aW9uLgogICovCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKnhtbEZyZWVGdW5jKSh2b2lkICptZW0pOwordHlwZWRlZiB2b2lkICgqeG1sRnJlZUZ1bmMpKHZvaWQgKm1lbSk7CiAvKioKICAqIHhtbE1hbGxvY0Z1bmM6CiAgKiBAc2l6ZTogIHRoZSBzaXplIHJlcXVlc3RlZCBpbiBieXRlcwpAQCAtNjMsNyArMzcsNyBAQAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCi10eXBlZGVmIHZvaWQgKihMSUJYTUxfQVRUUl9BTExPQ19TSVpFKDEpIFhNTENBTEwgKnhtbE1hbGxvY0Z1bmMpKHNpemVfdCBzaXplKTsKK3R5cGVkZWYgdm9pZCAqKExJQlhNTF9BVFRSX0FMTE9DX1NJWkUoMSkgKnhtbE1hbGxvY0Z1bmMpKHNpemVfdCBzaXplKTsKIAogLyoqCiAgKiB4bWxSZWFsbG9jRnVuYzoKQEAgLTc0LDcgKzQ4LDcgQEAKICAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgcmVhbGxvY2F0ZWQgYmxvY2sgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCi10eXBlZGVmIHZvaWQgKihYTUxDQUxMICp4bWxSZWFsbG9jRnVuYykodm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKigqeG1sUmVhbGxvY0Z1bmMpKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpOwogCiAvKioKICAqIHhtbFN0cmR1cEZ1bmM6CkBAIC04NCwzOSArNTgsNjcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBjb3B5IG9mIHRoZSBzdHJpbmcgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCi10eXBlZGVmIGNoYXIgKihYTUxDQUxMICp4bWxTdHJkdXBGdW5jKShjb25zdCBjaGFyICpzdHIpOwordHlwZWRlZiBjaGFyICooKnhtbFN0cmR1cEZ1bmMpKGNvbnN0IGNoYXIgKnN0cik7CiAKIC8qCi0gKiBUaGUgNCBpbnRlcmZhY2VzIHVzZWQgZm9yIGFsbCBtZW1vcnkgaGFuZGxpbmcgd2l0aGluIGxpYnhtbC4KLUxJQlhNTF9ETExfSU1QT1JUIHhtbEZyZWVGdW5jIHhtbEZyZWU7Ci1MSUJYTUxfRExMX0lNUE9SVCB4bWxNYWxsb2NGdW5jIHhtbE1hbGxvYzsKLUxJQlhNTF9ETExfSU1QT1JUIHhtbE1hbGxvY0Z1bmMgeG1sTWFsbG9jQXRvbWljOwotTElCWE1MX0RMTF9JTVBPUlQgeG1sUmVhbGxvY0Z1bmMgeG1sUmVhbGxvYzsKLUxJQlhNTF9ETExfSU1QT1JUIHhtbFN0cmR1cEZ1bmMgeG1sTWVtU3RyZHVwOworICogSW4gZ2VuZXJhbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZW50cnkgcG9pbnRzIGFyZSBub3Qga2VwdAorICogdGhyZWFkIHNwZWNpZmljIGJ1dCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IExJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRAorICogICAgLSB4bWxNYWxsb2MKKyAqICAgIC0geG1sTWFsbG9jQXRvbWljCisgKiAgICAtIHhtbFJlYWxsb2MKKyAqICAgIC0geG1sTWVtU3RyZHVwCisgKiAgICAtIHhtbEZyZWUKICAqLworLyoqIERPQ19ESVNBQkxFICovCisjaWZkZWYgTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVECisgICNkZWZpbmUgWE1MX0dMT0JBTFNfQUxMT0MgXAorICAgIFhNTF9PUCh4bWxNYWxsb2MsIHhtbE1hbGxvY0Z1bmMsIFhNTF9OT19BVFRSKSBcCisgICAgWE1MX09QKHhtbE1hbGxvY0F0b21pYywgeG1sTWFsbG9jRnVuYywgWE1MX05PX0FUVFIpIFwKKyAgICBYTUxfT1AoeG1sUmVhbGxvYywgeG1sUmVhbGxvY0Z1bmMsIFhNTF9OT19BVFRSKSBcCisgICAgWE1MX09QKHhtbEZyZWUsIHhtbEZyZWVGdW5jLCBYTUxfTk9fQVRUUikgXAorICAgIFhNTF9PUCh4bWxNZW1TdHJkdXAsIHhtbFN0cmR1cEZ1bmMsIFhNTF9OT19BVFRSKQorICAjZGVmaW5lIFhNTF9PUCBYTUxfREVDTEFSRV9HTE9CQUwKKyAgICBYTUxfR0xPQkFMU19BTExPQworICAjdW5kZWYgWE1MX09QCisgICNpZiBkZWZpbmVkKExJQlhNTF9USFJFQURfRU5BQkxFRCkgJiYgIWRlZmluZWQoWE1MX0dMT0JBTFNfTk9fUkVERUZJTklUSU9OKQorICAgICNkZWZpbmUgeG1sTWFsbG9jIFhNTF9HTE9CQUxfTUFDUk8oeG1sTWFsbG9jKQorICAgICNkZWZpbmUgeG1sTWFsbG9jQXRvbWljIFhNTF9HTE9CQUxfTUFDUk8oeG1sTWFsbG9jQXRvbWljKQorICAgICNkZWZpbmUgeG1sUmVhbGxvYyBYTUxfR0xPQkFMX01BQ1JPKHhtbFJlYWxsb2MpCisgICAgI2RlZmluZSB4bWxGcmVlIFhNTF9HTE9CQUxfTUFDUk8oeG1sRnJlZSkKKyAgICAjZGVmaW5lIHhtbE1lbVN0cmR1cCBYTUxfR0xPQkFMX01BQ1JPKHhtbE1lbVN0cmR1cCkKKyAgI2VuZGlmCisjZWxzZQorICAjZGVmaW5lIFhNTF9HTE9CQUxTX0FMTE9DCisvKiogRE9DX0VOQUJMRSAqLworICBYTUxQVUJWQVIgeG1sTWFsbG9jRnVuYyB4bWxNYWxsb2M7CisgIFhNTFBVQlZBUiB4bWxNYWxsb2NGdW5jIHhtbE1hbGxvY0F0b21pYzsKKyAgWE1MUFVCVkFSIHhtbFJlYWxsb2NGdW5jIHhtbFJlYWxsb2M7CisgIFhNTFBVQlZBUiB4bWxGcmVlRnVuYyB4bWxGcmVlOworICBYTUxQVUJWQVIgeG1sU3RyZHVwRnVuYyB4bWxNZW1TdHJkdXA7CisjZW5kaWYKIAogLyoKICAqIFRoZSB3YXkgdG8gb3ZlcmxvYWQgdGhlIGV4aXN0aW5nIGZ1bmN0aW9ucy4KICAqIFRoZSB4bWxHYyBmdW5jdGlvbiBoYXZlIGFuIGV4dHJhIGVudHJ5IGZvciBhdG9taWMgYmxvY2sKICAqIGFsbG9jYXRpb25zIHVzZWZ1bCBmb3IgZ2FyYmFnZSBjb2xsZWN0ZWQgbWVtb3J5IGFsbG9jYXRvcnMKICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTWVtU2V0dXAJKHhtbEZyZWVGdW5jIGZyZWVGdW5jLAogCQkJIHhtbE1hbGxvY0Z1bmMgbWFsbG9jRnVuYywKIAkJCSB4bWxSZWFsbG9jRnVuYyByZWFsbG9jRnVuYywKIAkJCSB4bWxTdHJkdXBGdW5jIHN0cmR1cEZ1bmMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sTWVtR2V0CSh4bWxGcmVlRnVuYyAqZnJlZUZ1bmMsCiAJCQkgeG1sTWFsbG9jRnVuYyAqbWFsbG9jRnVuYywKIAkJCSB4bWxSZWFsbG9jRnVuYyAqcmVhbGxvY0Z1bmMsCiAJCQkgeG1sU3RyZHVwRnVuYyAqc3RyZHVwRnVuYyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxHY01lbVNldHVwCSh4bWxGcmVlRnVuYyBmcmVlRnVuYywKIAkJCSB4bWxNYWxsb2NGdW5jIG1hbGxvY0Z1bmMsCiAJCQkgeG1sTWFsbG9jRnVuYyBtYWxsb2NBdG9taWNGdW5jLAogCQkJIHhtbFJlYWxsb2NGdW5jIHJlYWxsb2NGdW5jLAogCQkJIHhtbFN0cmR1cEZ1bmMgc3RyZHVwRnVuYyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAl4bWxHY01lbUdldAkoeG1sRnJlZUZ1bmMgKmZyZWVGdW5jLAogCQkJIHhtbE1hbGxvY0Z1bmMgKm1hbGxvY0Z1bmMsCiAJCQkgeG1sTWFsbG9jRnVuYyAqbWFsbG9jQXRvbWljRnVuYywKQEAgLTEyNyw0OCArMTI5LDUxIEBACiAgKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgbWVtb3J5IGxheWVyLgogICovCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJeG1sSW5pdE1lbW9yeQkodm9pZCk7CiAKIC8qCiAgKiBDbGVhbnVwIG9mIHRoZSBtZW1vcnkgbGF5ZXIuCiAgKi8KIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogICAgICAgICAgICAgICAgIHhtbENsZWFudXBNZW1vcnkgICAgICAgICh2b2lkKTsKIC8qCiAgKiBUaGVzZSBhcmUgc3BlY2lmaWMgdG8gdGhlIFhNTCBkZWJ1ZyBtZW1vcnkgd3JhcHBlci4KICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gc2l6ZV90CisJeG1sTWVtU2l6ZQkodm9pZCAqcHRyKTsKK1hNTFBVQkZVTiBpbnQKIAl4bWxNZW1Vc2VkCSh2b2lkKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCXhtbE1lbUJsb2Nrcwkodm9pZCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbE1lbURpc3BsYXkJKEZJTEUgKmZwKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJeG1sTWVtRGlzcGxheUxhc3QoRklMRSAqZnAsIGxvbmcgbmJCeXRlcyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCXhtbE1lbVNob3cJKEZJTEUgKmZwLCBpbnQgbnIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxNZW1vcnlEdW1wCSh2b2lkKTsKLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQgKgogCXhtbE1lbU1hbGxvYwkoc2l6ZV90IHNpemUpIExJQlhNTF9BVFRSX0FMTE9DX1NJWkUoMSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxNZW1SZWFsbG9jCSh2b2lkICpwdHIsc2l6ZV90IHNpemUpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxNZW1GcmVlCSh2b2lkICpwdHIpOwotWE1MUFVCRlVOIGNoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY2hhciAqCiAJeG1sTWVtb3J5U3RyZHVwCShjb25zdCBjaGFyICpzdHIpOwotWE1MUFVCRlVOIHZvaWQgKiBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZCAqCiAJeG1sTWFsbG9jTG9jCShzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpIExJQlhNTF9BVFRSX0FMTE9DX1NJWkUoMSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxSZWFsbG9jTG9jCSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Ci1YTUxQVUJGVU4gdm9pZCAqIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkICoKIAl4bWxNYWxsb2NBdG9taWNMb2MgKHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkgTElCWE1MX0FUVFJfQUxMT0NfU0laRSgxKTsKLVhNTFBVQkZVTiBjaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNoYXIgKgogCXhtbE1lbVN0cmR1cExvYwkoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CiAKIAorLyoqIERPQ19ESVNBQkxFICovCiAjaWZkZWYgREVCVUdfTUVNT1JZX0xPQ0FUSU9OCiAvKioKICAqIHhtbE1hbGxvYzoKQEAgLTIxMCwxNyArMjE1LDExIEBACiAjZGVmaW5lIHhtbE1lbVN0cmR1cChzdHIpIHhtbE1lbVN0cmR1cExvYygoc3RyKSwgX19GSUxFX18sIF9fTElORV9fKQogCiAjZW5kaWYgLyogREVCVUdfTUVNT1JZX0xPQ0FUSU9OICovCisvKiogRE9DX0VOQUJMRSAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCi0jaWZuZGVmIF9fWE1MX0dMT0JBTFNfSAotI2lmbmRlZiBfX1hNTF9USFJFQURTX0hfXwotI2luY2x1ZGUgPGxpYnhtbC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KLSNlbmRpZgotI2VuZGlmCi0KICNlbmRpZiAgLyogX19ERUJVR19NRU1PUllfQUxMT0NfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWxtb2R1bGUuaCBiL2luY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oCmluZGV4IDk2Njc4MjAuLjI3OTk4NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oCkBAIC0zNywxNiArMzcsMTYgQEAKICAgICBYTUxfTU9EVUxFX0xPQ0FMPSAyCQkvKiBsb2NhbCBiaW5kaW5nICovCiB9IHhtbE1vZHVsZU9wdGlvbjsKIAotWE1MUFVCRlVOIHhtbE1vZHVsZVB0ciBYTUxDQUxMIHhtbE1vZHVsZU9wZW4JKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorWE1MUFVCRlVOIHhtbE1vZHVsZVB0ciB4bWxNb2R1bGVPcGVuCShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJCSBpbnQgb3B0aW9ucyk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxNb2R1bGVTeW1ib2wJCSh4bWxNb2R1bGVQdHIgbW9kdWxlLAorWE1MUFVCRlVOIGludCB4bWxNb2R1bGVTeW1ib2wJCSh4bWxNb2R1bGVQdHIgbW9kdWxlLAogCQkJCQkJIGNvbnN0IGNoYXIqIG5hbWUsCiAJCQkJCQkgdm9pZCAqKnJlc3VsdCk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxNb2R1bGVDbG9zZQkJKHhtbE1vZHVsZVB0ciBtb2R1bGUpOworWE1MUFVCRlVOIGludCB4bWxNb2R1bGVDbG9zZQkJKHhtbE1vZHVsZVB0ciBtb2R1bGUpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sTW9kdWxlRnJlZQkJKHhtbE1vZHVsZVB0ciBtb2R1bGUpOworWE1MUFVCRlVOIGludCB4bWxNb2R1bGVGcmVlCQkoeG1sTW9kdWxlUHRyIG1vZHVsZSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggYi9pbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaAppbmRleCBlOGE4YmNjLi5iOWY2OTg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaAorKysgYi9pbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaApAQCAtMTIsMTEgKzEyLDE0IEBACiAKICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbElPLmg+CiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAogI2luY2x1ZGUgPGxpYnhtbC9yZWxheG5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHNjaGVtYXMuaD4KICNlbmRpZgorLyogZm9yIGNvbXBhdGliaWxpdHkgKi8KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0xMDgsMjM5ICsxMTEsMjQyIEBACiAvKgogICogQ29uc3RydWN0b3JzICYgRGVzdHJ1Y3RvcgogICovCi1YTUxQVUJGVU4geG1sVGV4dFJlYWRlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sVGV4dFJlYWRlclB0cgogCQkJeG1sTmV3VGV4dFJlYWRlcgkoeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpVUkkpOwotWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIKIAkJCXhtbE5ld1RleHRSZWFkZXJGaWxlbmFtZShjb25zdCBjaGFyICpVUkkpOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sRnJlZVRleHRSZWFkZXIJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICB4bWxUZXh0UmVhZGVyU2V0dXAoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQsIGNvbnN0IGNoYXIgKlVSTCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgaW50IG9wdGlvbnMpOworWE1MUFVCRlVOIHZvaWQKKyAgICAgICAgICAgIHhtbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1heEFtcGwpOwogCiAvKgogICogSXRlcmF0b3JzCiAgKi8KLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sVGV4dFJlYWRlclJlYWQJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAogI2lmZGVmIExJQlhNTF9XUklURVJfRU5BQkxFRAotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxUZXh0UmVhZGVyUmVhZElubmVyWG1sKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxUZXh0UmVhZGVyUmVhZE91dGVyWG1sKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKICNlbmRpZgogCi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJCXhtbFRleHRSZWFkZXJSZWFkU3RyaW5nCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFRleHRSZWFkZXJSZWFkQXR0cmlidXRlVmFsdWUoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwogCiAvKgogICogQXR0cmlidXRlcyBvZiB0aGUgbm9kZQogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFRleHRSZWFkZXJBdHRyaWJ1dGVDb3VudCh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFRleHRSZWFkZXJEZXB0aAkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxUZXh0UmVhZGVySGFzQXR0cmlidXRlcyh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFRleHRSZWFkZXJIYXNWYWx1ZSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFRleHRSZWFkZXJJc0RlZmF1bHQJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sVGV4dFJlYWRlcklzRW1wdHlFbGVtZW50KHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sVGV4dFJlYWRlck5vZGVUeXBlCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbFRleHRSZWFkZXJRdW90ZUNoYXIJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sVGV4dFJlYWRlclJlYWRTdGF0ZQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxUZXh0UmVhZGVySXNOYW1lc3BhY2VEZWNsKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCSAgICB4bWxUZXh0UmVhZGVyQ29uc3RCYXNlVXJpCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJDb25zdExvY2FsTmFtZQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCSAgICB4bWxUZXh0UmVhZGVyQ29uc3ROYW1lCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJDb25zdE5hbWVzcGFjZVVyaSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJDb25zdFByZWZpeAkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCSAgICB4bWxUZXh0UmVhZGVyQ29uc3RYbWxMYW5nCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJDb25zdFN0cmluZwkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqc3RyKTsKLVhNTFBVQkZVTiBjb25zdCB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKgogCQkgICAgeG1sVGV4dFJlYWRlckNvbnN0VmFsdWUJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAogLyoKICAqIHVzZSB0aGUgQ29uc3QgdmVyc2lvbiBvZiB0aGUgcm91dGluZSBmb3IKICAqIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgc2ltcGxlciBjb2RlCiAgKi8KLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sVGV4dFJlYWRlckJhc2VVcmkJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sVGV4dFJlYWRlckxvY2FsTmFtZQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxUZXh0UmVhZGVyTmFtZQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxUZXh0UmVhZGVyTmFtZXNwYWNlVXJpKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkJeG1sVGV4dFJlYWRlclByZWZpeAkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxUZXh0UmVhZGVyWG1sTGFuZwkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCQl4bWxUZXh0UmVhZGVyVmFsdWUJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAogLyoKICAqIE1ldGhvZHMgb2YgdGhlIFhtbFRleHRSZWFkZXIKICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyQ2xvc2UJCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJHZXRBdHRyaWJ1dGVObwkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgaW50IG5vKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkgICAgeG1sVGV4dFJlYWRlckdldEF0dHJpYnV0ZQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJHZXRBdHRyaWJ1dGVOcwkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbG9jYWxOYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWVzcGFjZVVSSSk7Ci1YTUxQVUJGVU4geG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyCiAJCSAgICB4bWxUZXh0UmVhZGVyR2V0UmVtYWluZGVyCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJMb29rdXBOYW1lc3BhY2UoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlck1vdmVUb0F0dHJpYnV0ZU5vKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyLAogCQkJCQkJIGludCBubyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJNb3ZlVG9BdHRyaWJ1dGUoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJNb3ZlVG9BdHRyaWJ1dGVOcyh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpsb2NhbE5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZXNwYWNlVVJJKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlck1vdmVUb0ZpcnN0QXR0cmlidXRlKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlck1vdmVUb05leHRBdHRyaWJ1dGUoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyTW92ZVRvRWxlbWVudAkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyTm9ybWFsaXphdGlvbgkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCSAgICB4bWxUZXh0UmVhZGVyQ29uc3RFbmNvZGluZyAgKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAogLyoKICAqIEV4dGVuc2lvbnMKICAqLwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyU2V0UGFyc2VyUHJvcAkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgaW50IHByb3AsCiAJCQkJCQkgaW50IHZhbHVlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlckdldFBhcnNlclByb3AJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyLAogCQkJCQkJIGludCBwcm9wKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCSAgICB4bWxUZXh0UmVhZGVyQ3VycmVudE5vZGUJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICB4bWxUZXh0UmVhZGVyR2V0UGFyc2VyTGluZU51bWJlcih4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogICAgICAgICAgICAgeG1sVGV4dFJlYWRlckdldFBhcnNlckNvbHVtbk51bWJlcih4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7CiAKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyCiAJCSAgICB4bWxUZXh0UmVhZGVyUHJlc2VydmUJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKICNpZmRlZiBMSUJYTUxfUEFUVEVSTl9FTkFCTEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJQcmVzZXJ2ZVBhdHRlcm4oeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcGF0dGVybiwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICoqbmFtZXNwYWNlcyk7CiAjZW5kaWYgLyogTElCWE1MX1BBVFRFUk5fRU5BQkxFRCAqLwotWE1MUFVCRlVOIHhtbERvY1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRG9jUHRyCiAJCSAgICB4bWxUZXh0UmVhZGVyQ3VycmVudERvYwkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVQdHIKIAkJICAgIHhtbFRleHRSZWFkZXJFeHBhbmQJCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJOZXh0CQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyTmV4dFNpYmxpbmcJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlcklzVmFsaWQJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKICNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJSZWxheE5HVmFsaWRhdGUoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgY2hhciAqcm5nKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlclJlbGF4TkdWYWxpZGF0ZUN0eHQoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkJIGludCBvcHRpb25zKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyUmVsYXhOR1NldFNjaGVtYSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJCSB4bWxSZWxheE5HUHRyIHNjaGVtYSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJTY2hlbWFWYWxpZGF0ZQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCQkgY29uc3QgY2hhciAqeHNkKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sVGV4dFJlYWRlclNjaGVtYVZhbGlkYXRlQ3R4dCh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJCSB4bWxTY2hlbWFWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFRleHRSZWFkZXJTZXRTY2hlbWEJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyLAogCQkJCQkJIHhtbFNjaGVtYVB0ciBzY2hlbWEpOwogI2VuZGlmCi1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJICAgIHhtbFRleHRSZWFkZXJDb25zdFhtbFZlcnNpb24oeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxUZXh0UmVhZGVyU3RhbmRhbG9uZSAgICAgKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAogCiAvKgogICogSW5kZXggbG9va3VwCiAgKi8KLVhNTFBVQkZVTiBsb25nIFhNTENBTEwKK1hNTFBVQkZVTiBsb25nCiAJCXhtbFRleHRSZWFkZXJCeXRlQ29uc3VtZWQJKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKTsKIAogLyoKICAqIE5ldyBtb3JlIGNvbXBsZXRlIEFQSXMgZm9yIHNpbXBsZXIgY3JlYXRpb24gYW5kIHJldXNlIG9mIHJlYWRlcnMKICAqLwotWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIKIAkJeG1sUmVhZGVyV2Fsa2VyCQkoeG1sRG9jUHRyIGRvYyk7Ci1YTUxQVUJGVU4geG1sVGV4dFJlYWRlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sVGV4dFJlYWRlclB0cgogCQl4bWxSZWFkZXJGb3JEb2MJCShjb25zdCB4bWxDaGFyICogY3VyLAogCQkJCQkgY29uc3QgY2hhciAqVVJMLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4geG1sVGV4dFJlYWRlclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sVGV4dFJlYWRlclB0cgogCQl4bWxSZWFkZXJGb3JGaWxlCShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIKIAkJeG1sUmVhZGVyRm9yTWVtb3J5CShjb25zdCBjaGFyICpidWZmZXIsCiAJCQkJCSBpbnQgc2l6ZSwKIAkJCQkJIGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFRleHRSZWFkZXJQdHIKIAkJeG1sUmVhZGVyRm9yRmQJCShpbnQgZmQsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxUZXh0UmVhZGVyUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxUZXh0UmVhZGVyUHRyCiAJCXhtbFJlYWRlckZvcklPCQkoeG1sSW5wdXRSZWFkQ2FsbGJhY2sgaW9yZWFkLAogCQkJCQkgeG1sSW5wdXRDbG9zZUNhbGxiYWNrIGlvY2xvc2UsCiAJCQkJCSB2b2lkICppb2N0eCwKQEAgLTM0OCwzNCArMzU0LDM0IEBACiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFJlYWRlck5ld1dhbGtlcgkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCSB4bWxEb2NQdHIgZG9jKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxSZWFkZXJOZXdEb2MJCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKiBjdXIsCiAJCQkJCSBjb25zdCBjaGFyICpVUkwsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxSZWFkZXJOZXdGaWxlCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sUmVhZGVyTmV3TWVtb3J5CSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJIGNvbnN0IGNoYXIgKmJ1ZmZlciwKIAkJCQkJIGludCBzaXplLAogCQkJCQkgY29uc3QgY2hhciAqVVJMLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sUmVhZGVyTmV3RmQJCSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJIGludCBmZCwKIAkJCQkJIGNvbnN0IGNoYXIgKlVSTCwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFJlYWRlck5ld0lPCQkoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCiAJCQkJCSB4bWxJbnB1dFJlYWRDYWxsYmFjayBpb3JlYWQsCiAJCQkJCSB4bWxJbnB1dENsb3NlQ2FsbGJhY2sgaW9jbG9zZSwKQEAgLTM5NywyMyArNDAzLDIzIEBACiAgKgogICogU2lnbmF0dXJlIG9mIGFuIGVycm9yIGNhbGxiYWNrIGZyb20gYSByZWFkZXIgcGFyc2VyCiAgKi8KLXR5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqeG1sVGV4dFJlYWRlckVycm9yRnVuYykodm9pZCAqYXJnLAordHlwZWRlZiB2b2lkICgqeG1sVGV4dFJlYWRlckVycm9yRnVuYykodm9pZCAqYXJnLAogCQkJCQkgICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJCQkgICAgICAgeG1sUGFyc2VyU2V2ZXJpdGllcyBzZXZlcml0eSwKIAkJCQkJICAgICAgIHhtbFRleHRSZWFkZXJMb2NhdG9yUHRyIGxvY2F0b3IpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFRleHRSZWFkZXJMb2NhdG9yTGluZU51bWJlcih4bWxUZXh0UmVhZGVyTG9jYXRvclB0ciBsb2NhdG9yKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCSAgICB4bWxUZXh0UmVhZGVyTG9jYXRvckJhc2VVUkkgKHhtbFRleHRSZWFkZXJMb2NhdG9yUHRyIGxvY2F0b3IpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkgICAgeG1sVGV4dFJlYWRlclNldEVycm9ySGFuZGxlcih4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJIHhtbFRleHRSZWFkZXJFcnJvckZ1bmMgZiwKIAkJCQkJIHZvaWQgKmFyZyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCSAgICB4bWxUZXh0UmVhZGVyU2V0U3RydWN0dXJlZEVycm9ySGFuZGxlcih4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKIAkJCQkJCSAgIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgZiwKIAkJCQkJCSAgIHZvaWQgKmFyZyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCSAgICB4bWxUZXh0UmVhZGVyR2V0RXJyb3JIYW5kbGVyKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyLAogCQkJCQkgeG1sVGV4dFJlYWRlckVycm9yRnVuYyAqZiwKIAkJCQkJIHZvaWQgKiphcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmggYi9pbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaAppbmRleCA3MDA5NjQ1Li4yZDY2NDM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaAorKysgYi9pbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaApAQCAtMTEsNyArMTEsOSBAQAogI2lmbmRlZiBfX1hNTF9SRUdFWFBfSF9fCiAjZGVmaW5lIF9fWE1MX1JFR0VYUF9IX18KIAorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CiAKICNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKIApAQCAtMzYsMjggKzM4LDE5IEBACiB0eXBlZGVmIHN0cnVjdCBfeG1sUmVnRXhlY0N0eHQgeG1sUmVnRXhlY0N0eHQ7CiB0eXBlZGVmIHhtbFJlZ0V4ZWNDdHh0ICp4bWxSZWdFeGVjQ3R4dFB0cjsKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC9kaWN0Lmg+Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KIC8qCiAgKiBUaGUgUE9TSVggbGlrZSBBUEkKICAqLwotWE1MUFVCRlVOIHhtbFJlZ2V4cFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUmVnZXhwUHRyCiAJCSAgICB4bWxSZWdleHBDb21waWxlCShjb25zdCB4bWxDaGFyICpyZWdleHApOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAkJCSB4bWxSZWdGcmVlUmVnZXhwKHhtbFJlZ2V4cFB0ciByZWdleHApOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAkJCSB4bWxSZWdGcmVlUmVnZXhwKHhtbFJlZ2V4cFB0ciByZWdleHApOworWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVnZXhwRXhlYwkoeG1sUmVnZXhwUHRyIGNvbXAsCiAJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sUmVnZXhwUHJpbnQJKEZJTEUgKm91dHB1dCwKIAkJCQkJIHhtbFJlZ2V4cFB0ciByZWdleHApOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxSZWdleHBJc0RldGVybWluaXN0KHhtbFJlZ2V4cFB0ciBjb21wKTsKIAogLyoqCkBAIC03NywyOSArNzAsMjkgQEAKIC8qCiAgKiBUaGUgcHJvZ3Jlc3NpdmUgQVBJCiAgKi8KLVhNTFBVQkZVTiB4bWxSZWdFeGVjQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUmVnRXhlY0N0eHRQdHIKIAkJICAgIHhtbFJlZ05ld0V4ZWNDdHh0CSh4bWxSZWdleHBQdHIgY29tcCwKIAkJCQkJIHhtbFJlZ0V4ZWNDYWxsYmFja3MgY2FsbGJhY2ssCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCSAgICB4bWxSZWdGcmVlRXhlY0N0eHQJKHhtbFJlZ0V4ZWNDdHh0UHRyIGV4ZWMpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxSZWdFeGVjUHVzaFN0cmluZyh4bWxSZWdFeGVjQ3R4dFB0ciBleGVjLAogCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUsCiAJCQkJCSB2b2lkICpkYXRhKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVnRXhlY1B1c2hTdHJpbmcyKHhtbFJlZ0V4ZWNDdHh0UHRyIGV4ZWMsCiAJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlMiwKIAkJCQkJIHZvaWQgKmRhdGEpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFJlZ0V4ZWNOZXh0VmFsdWVzKHhtbFJlZ0V4ZWNDdHh0UHRyIGV4ZWMsCiAJCQkJCSBpbnQgKm5idmFsLAogCQkJCQkgaW50ICpuYm5lZywKIAkJCQkJIHhtbENoYXIgKip2YWx1ZXMsCiAJCQkJCSBpbnQgKnRlcm1pbmFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sUmVnRXhlY0VyckluZm8JKHhtbFJlZ0V4ZWNDdHh0UHRyIGV4ZWMsCiAJCQkJCSBjb25zdCB4bWxDaGFyICoqc3RyaW5nLAogCQkJCQkgaW50ICpuYnZhbCwKQEAgLTExNiwxNSArMTA5LDE1IEBACiB0eXBlZGVmIHN0cnVjdCBfeG1sRXhwQ3R4dCB4bWxFeHBDdHh0OwogdHlwZWRlZiB4bWxFeHBDdHh0ICp4bWxFeHBDdHh0UHRyOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sRXhwRnJlZUN0eHQJKHhtbEV4cEN0eHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sRXhwQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRXhwQ3R4dFB0cgogCQkJeG1sRXhwTmV3Q3R4dAkoaW50IG1heE5vZGVzLAogCQkJCQkgeG1sRGljdFB0ciBkaWN0KTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxFeHBDdHh0TmJOb2Rlcyh4bWxFeHBDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxFeHBDdHh0TmJDb25zKHhtbEV4cEN0eHRQdHIgY3R4dCk7CiAKIC8qIEV4cHJlc3Npb25zIGFyZSB0cmVlcyBidXQgdGhlIHRyZWUgaXMgb3BhcXVlICovCkBAIC0xNTAsMzEgKzE0MywzMSBAQAogLyoKICAqIEV4cHJlc3Npb25zIGFyZSByZWZlcmVuY2UgY291bnRlZCBpbnRlcm5hbGx5CiAgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCQl4bWxFeHBGcmVlCSh4bWxFeHBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIGV4cHIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJCXhtbEV4cFJlZgkoeG1sRXhwTm9kZVB0ciBleHByKTsKIAogLyoKICAqIGNvbnN0cnVjdG9ycyBjYW4gYmUgZWl0aGVyIG1hbnVhbCBvciBmcm9tIGEgc3RyaW5nCiAgKi8KLVhNTFBVQkZVTiB4bWxFeHBOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFeHBOb2RlUHRyCiAJCQl4bWxFeHBQYXJzZQkoeG1sRXhwQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgY2hhciAqZXhwcik7Ci1YTUxQVUJGVU4geG1sRXhwTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRXhwTm9kZVB0cgogCQkJeG1sRXhwTmV3QXRvbQkoeG1sRXhwQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbEV4cE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEV4cE5vZGVQdHIKIAkJCXhtbEV4cE5ld09yCSh4bWxFeHBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIGxlZnQsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIHJpZ2h0KTsKLVhNTFBVQkZVTiB4bWxFeHBOb2RlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxFeHBOb2RlUHRyCiAJCQl4bWxFeHBOZXdTZXEJKHhtbEV4cEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbEV4cE5vZGVQdHIgbGVmdCwKIAkJCQkJIHhtbEV4cE5vZGVQdHIgcmlnaHQpOwotWE1MUFVCRlVOIHhtbEV4cE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEV4cE5vZGVQdHIKIAkJCXhtbEV4cE5ld1JhbmdlCSh4bWxFeHBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIHN1YnNldCwKIAkJCQkJIGludCBtaW4sCkBAIC0xODIsMzQgKzE3NSwzNCBAQAogLyoKICAqIFRoZSByZWFsbHkgaW50ZXJlc3RpbmcgQVBJcwogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbEV4cElzTmlsbGFibGUoeG1sRXhwTm9kZVB0ciBleHByKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkJeG1sRXhwTWF4VG9rZW4JKHhtbEV4cE5vZGVQdHIgZXhwcik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbEV4cEdldExhbmd1YWdlKHhtbEV4cEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbEV4cE5vZGVQdHIgZXhwciwKIAkJCQkJIGNvbnN0IHhtbENoYXIqKmxhbmdMaXN0LAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJCXhtbEV4cEdldFN0YXJ0CSh4bWxFeHBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIGV4cHIsCiAJCQkJCSBjb25zdCB4bWxDaGFyKip0b2tMaXN0LAogCQkJCQkgaW50IGxlbik7Ci1YTUxQVUJGVU4geG1sRXhwTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sRXhwTm9kZVB0cgogCQkJeG1sRXhwU3RyaW5nRGVyaXZlKHhtbEV4cEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbEV4cE5vZGVQdHIgZXhwciwKIAkJCQkJIGNvbnN0IHhtbENoYXIgKnN0ciwKIAkJCQkJIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbEV4cE5vZGVQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbEV4cE5vZGVQdHIKIAkJCXhtbEV4cEV4cERlcml2ZQkoeG1sRXhwQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sRXhwTm9kZVB0ciBleHByLAogCQkJCQkgeG1sRXhwTm9kZVB0ciBzdWIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCQl4bWxFeHBTdWJzdW1lCSh4bWxFeHBDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIGV4cHIsCiAJCQkJCSB4bWxFeHBOb2RlUHRyIHN1Yik7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkJeG1sRXhwRHVtcAkoeG1sQnVmZmVyUHRyIGJ1ZiwKIAkJCQkJIHhtbEV4cE5vZGVQdHIgZXhwcik7CiAjZW5kaWYgLyogTElCWE1MX0VYUFJfRU5BQkxFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oIGIvaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oCmluZGV4IGZiMzI5YjIuLmZiZjI5M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3htbHNhdmUuaAorKysgYi9pbmNsdWRlL2xpYnhtbC94bWxzYXZlLmgKQEAgLTQxLDQ3ICs0MSw1NiBAQAogdHlwZWRlZiBzdHJ1Y3QgX3htbFNhdmVDdHh0IHhtbFNhdmVDdHh0OwogdHlwZWRlZiB4bWxTYXZlQ3R4dCAqeG1sU2F2ZUN0eHRQdHI7CiAKLVhNTFBVQkZVTiB4bWxTYXZlQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2F2ZUN0eHRQdHIKIAkJeG1sU2F2ZVRvRmQJCShpbnQgZmQsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKLVhNTFBVQkZVTiB4bWxTYXZlQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2F2ZUN0eHRQdHIKIAkJeG1sU2F2ZVRvRmlsZW5hbWUJKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAJCQkJCSBpbnQgb3B0aW9ucyk7CiAKLVhNTFBVQkZVTiB4bWxTYXZlQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2F2ZUN0eHRQdHIKIAkJeG1sU2F2ZVRvQnVmZmVyCQkoeG1sQnVmZmVyUHRyIGJ1ZmZlciwKIAkJCQkJIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogCQkJCQkgaW50IG9wdGlvbnMpOwogCi1YTUxQVUJGVU4geG1sU2F2ZUN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFNhdmVDdHh0UHRyCiAJCXhtbFNhdmVUb0lPCQkoeG1sT3V0cHV0V3JpdGVDYWxsYmFjayBpb3dyaXRlLAogCQkJCQkgeG1sT3V0cHV0Q2xvc2VDYWxsYmFjayBpb2Nsb3NlLAogCQkJCQkgdm9pZCAqaW9jdHgsCiAJCQkJCSBjb25zdCBjaGFyICplbmNvZGluZywKIAkJCQkJIGludCBvcHRpb25zKTsKIAotWE1MUFVCRlVOIGxvbmcgWE1MQ0FMTAorWE1MUFVCRlVOIGxvbmcKIAkJeG1sU2F2ZURvYwkJKHhtbFNhdmVDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgZG9jKTsKLVhNTFBVQkZVTiBsb25nIFhNTENBTEwKK1hNTFBVQkZVTiBsb25nCiAJCXhtbFNhdmVUcmVlCQkoeG1sU2F2ZUN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbE5vZGVQdHIgbm9kZSk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTYXZlRmx1c2gJCSh4bWxTYXZlQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTYXZlQ2xvc2UJCSh4bWxTYXZlQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTYXZlU2V0RXNjYXBlCSh4bWxTYXZlQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sQ2hhckVuY29kaW5nT3V0cHV0RnVuYyBlc2NhcGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNhdmVTZXRBdHRyRXNjYXBlCSh4bWxTYXZlQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sQ2hhckVuY29kaW5nT3V0cHV0RnVuYyBlc2NhcGUpOworCitYTUxQVUJGVU4gaW50CisgICAgICAgICAgICAgICAgeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dChpbnQgdik7CitYTUxQVUJGVU4gY29uc3QgY2hhciAqCisgICAgICAgICAgICAgICAgeG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyhjb25zdCBjaGFyICogdik7CitYTUxQVUJGVU4gaW50CisgICAgICAgICAgICAgICAgeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzKGludCB2KTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKKwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogI2VuZGlmIC8qIF9fWE1MX1hNTFNBVkVfSF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaCBiL2luY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaAppbmRleCBiOTBlOWQxLi5jMmFmM2Q3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oCkBAIC0xNiw3ICsxNiwxMCBAQAogCiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAogCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJ4bWwvZW5jb2RpbmcuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtOTIsNyArOTUsNyBAQAogICoKICAqIFNpZ25hdHVyZSBvZiBhbiBlcnJvciBjYWxsYmFjayBmcm9tIGFuIFhTRCB2YWxpZGF0aW9uCiAgKi8KLXR5cGVkZWYgdm9pZCAoWE1MQ0RFQ0wgKnhtbFNjaGVtYVZhbGlkaXR5RXJyb3JGdW5jKQordHlwZWRlZiB2b2lkICgqeG1sU2NoZW1hVmFsaWRpdHlFcnJvckZ1bmMpCiAgICAgICAgICAgICAgICAgICh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIAogLyoqCkBAIC0xMDMsNyArMTA2LDcgQEAKICAqCiAgKiBTaWduYXR1cmUgb2YgYSB3YXJuaW5nIGNhbGxiYWNrIGZyb20gYW4gWFNEIHZhbGlkYXRpb24KICAqLwotdHlwZWRlZiB2b2lkIChYTUxDREVDTCAqeG1sU2NoZW1hVmFsaWRpdHlXYXJuaW5nRnVuYykKK3R5cGVkZWYgdm9pZCAoKnhtbFNjaGVtYVZhbGlkaXR5V2FybmluZ0Z1bmMpCiAgICAgICAgICAgICAgICAgICh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIAogLyoqCkBAIC0xMjgsOTUgKzEzMSw5NSBAQAogICogUmV0dXJuczogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwogCi10eXBlZGVmIGludCAoWE1MQ0RFQ0wgKnhtbFNjaGVtYVZhbGlkaXR5TG9jYXRvckZ1bmMpICh2b2lkICpjdHgsCit0eXBlZGVmIGludCAoKnhtbFNjaGVtYVZhbGlkaXR5TG9jYXRvckZ1bmMpICh2b2lkICpjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZmlsZSwgdW5zaWduZWQgbG9uZyAqbGluZSk7CiAKIC8qCiAgKiBJbnRlcmZhY2VzIGZvciBwYXJzaW5nLgogICovCi1YTUxQVUJGVU4geG1sU2NoZW1hUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2NoZW1hUGFyc2VyQ3R4dFB0cgogCSAgICB4bWxTY2hlbWFOZXdQYXJzZXJDdHh0CShjb25zdCBjaGFyICpVUkwpOwotWE1MUFVCRlVOIHhtbFNjaGVtYVBhcnNlckN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFNjaGVtYVBhcnNlckN0eHRQdHIKIAkgICAgeG1sU2NoZW1hTmV3TWVtUGFyc2VyQ3R4dAkoY29uc3QgY2hhciAqYnVmZmVyLAogCQkJCQkgaW50IHNpemUpOwotWE1MUFVCRlVOIHhtbFNjaGVtYVBhcnNlckN0eHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFNjaGVtYVBhcnNlckN0eHRQdHIKIAkgICAgeG1sU2NoZW1hTmV3RG9jUGFyc2VyQ3R4dAkoeG1sRG9jUHRyIGRvYyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCSAgICB4bWxTY2hlbWFGcmVlUGFyc2VyQ3R4dAkoeG1sU2NoZW1hUGFyc2VyQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYVNldFBhcnNlckVycm9ycwkoeG1sU2NoZW1hUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU2NoZW1hVmFsaWRpdHlFcnJvckZ1bmMgZXJyLAogCQkJCQkgeG1sU2NoZW1hVmFsaWRpdHlXYXJuaW5nRnVuYyB3YXJuLAogCQkJCQkgdm9pZCAqY3R4KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYVNldFBhcnNlclN0cnVjdHVyZWRFcnJvcnMoeG1sU2NoZW1hUGFyc2VyQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU3RydWN0dXJlZEVycm9yRnVuYyBzZXJyb3IsCiAJCQkJCSB2b2lkICpjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYUdldFBhcnNlckVycm9ycyh4bWxTY2hlbWFQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCXhtbFNjaGVtYVZhbGlkaXR5RXJyb3JGdW5jICogZXJyLAogCQkJCQl4bWxTY2hlbWFWYWxpZGl0eVdhcm5pbmdGdW5jICogd2FybiwKIAkJCQkJdm9pZCAqKmN0eCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU2NoZW1hSXNWYWxpZAkoeG1sU2NoZW1hVmFsaWRDdHh0UHRyIGN0eHQpOwogCi1YTUxQVUJGVU4geG1sU2NoZW1hUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFQdHIKIAkgICAgeG1sU2NoZW1hUGFyc2UJCSh4bWxTY2hlbWFQYXJzZXJDdHh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkgICAgeG1sU2NoZW1hRnJlZQkJKHhtbFNjaGVtYVB0ciBzY2hlbWEpOwogI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkgICAgeG1sU2NoZW1hRHVtcAkJKEZJTEUgKm91dHB1dCwKIAkJCQkJIHhtbFNjaGVtYVB0ciBzY2hlbWEpOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogLyoKICAqIEludGVyZmFjZXMgZm9yIHZhbGlkYXRpbmcKICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkgICAgeG1sU2NoZW1hU2V0VmFsaWRFcnJvcnMJKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU2NoZW1hVmFsaWRpdHlFcnJvckZ1bmMgZXJyLAogCQkJCQkgeG1sU2NoZW1hVmFsaWRpdHlXYXJuaW5nRnVuYyB3YXJuLAogCQkJCQkgdm9pZCAqY3R4KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYVNldFZhbGlkU3RydWN0dXJlZEVycm9ycyh4bWxTY2hlbWFWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgc2Vycm9yLAogCQkJCQkgdm9pZCAqY3R4KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCSAgICB4bWxTY2hlbWFHZXRWYWxpZEVycm9ycwkoeG1sU2NoZW1hVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxTY2hlbWFWYWxpZGl0eUVycm9yRnVuYyAqZXJyLAogCQkJCQkgeG1sU2NoZW1hVmFsaWRpdHlXYXJuaW5nRnVuYyAqd2FybiwKIAkJCQkJIHZvaWQgKipjdHgpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYVNldFZhbGlkT3B0aW9ucwkoeG1sU2NoZW1hVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSBpbnQgb3B0aW9ucyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogICAgICAgICAgICAgeG1sU2NoZW1hVmFsaWRhdGVTZXRGaWxlbmFtZSh4bWxTY2hlbWFWYWxpZEN0eHRQdHIgdmN0eHQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYVZhbGlkQ3R4dEdldE9wdGlvbnMoeG1sU2NoZW1hVmFsaWRDdHh0UHRyIGN0eHQpOwogCi1YTUxQVUJGVU4geG1sU2NoZW1hVmFsaWRDdHh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFWYWxpZEN0eHRQdHIKIAkgICAgeG1sU2NoZW1hTmV3VmFsaWRDdHh0CSh4bWxTY2hlbWFQdHIgc2NoZW1hKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJICAgIHhtbFNjaGVtYUZyZWVWYWxpZEN0eHQJKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCSAgICB4bWxTY2hlbWFWYWxpZGF0ZURvYwkoeG1sU2NoZW1hVmFsaWRDdHh0UHRyIGN0eHQsCiAJCQkJCSB4bWxEb2NQdHIgaW5zdGFuY2UpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICB4bWxTY2hlbWFWYWxpZGF0ZU9uZUVsZW1lbnQgKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJICAgICAgICAgICAgICAgICB4bWxOb2RlUHRyIGVsZW0pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJICAgIHhtbFNjaGVtYVZhbGlkYXRlU3RyZWFtCSh4bWxTY2hlbWFWYWxpZEN0eHRQdHIgY3R4dCwKIAkJCQkJIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LAogCQkJCQkgeG1sQ2hhckVuY29kaW5nIGVuYywKIAkJCQkJIHhtbFNBWEhhbmRsZXJQdHIgc2F4LAogCQkJCQkgdm9pZCAqdXNlcl9kYXRhKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCSAgICB4bWxTY2hlbWFWYWxpZGF0ZUZpbGUJKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgY29uc3QgY2hhciAqIGZpbGVuYW1lLAogCQkJCQkgaW50IG9wdGlvbnMpOwogCi1YTUxQVUJGVU4geG1sUGFyc2VyQ3R4dFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sUGFyc2VyQ3R4dFB0cgogCSAgICB4bWxTY2hlbWFWYWxpZEN0eHRHZXRQYXJzZXJDdHh0KHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0KTsKIAogLyoKQEAgLTIyNSwxNSArMjI4LDE1IEBACiB0eXBlZGVmIHN0cnVjdCBfeG1sU2NoZW1hU0FYUGx1ZyB4bWxTY2hlbWFTQVhQbHVnU3RydWN0OwogdHlwZWRlZiB4bWxTY2hlbWFTQVhQbHVnU3RydWN0ICp4bWxTY2hlbWFTQVhQbHVnUHRyOwogCi1YTUxQVUJGVU4geG1sU2NoZW1hU0FYUGx1Z1B0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2NoZW1hU0FYUGx1Z1B0cgogICAgICAgICAgICAgeG1sU2NoZW1hU0FYUGx1ZwkJKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0LAogCQkJCQkgeG1sU0FYSGFuZGxlclB0ciAqc2F4LAogCQkJCQkgdm9pZCAqKnVzZXJfZGF0YSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgICAgIHhtbFNjaGVtYVNBWFVucGx1ZwkJKHhtbFNjaGVtYVNBWFBsdWdQdHIgcGx1Zyk7CiAKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKICAgICAgICAgICAgIHhtbFNjaGVtYVZhbGlkYXRlU2V0TG9jYXRvcgkoeG1sU2NoZW1hVmFsaWRDdHh0UHRyIHZjdHh0LAogCQkJCQkgeG1sU2NoZW1hVmFsaWRpdHlMb2NhdG9yRnVuYyBmLAogCQkJCQkgdm9pZCAqY3R4dCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaCBiL2luY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oCmluZGV4IDVkNTg4ZjkuLmUyY2RlMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oCkBAIC0zMCwxMTggKzMwLDExOCBAQAogICAgIFhNTF9TQ0hFTUFfV0hJVEVTUEFDRV9DT0xMQVBTRSA9IDMKIH0geG1sU2NoZW1hV2hpdGVzcGFjZVZhbHVlVHlwZTsKIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFJbml0VHlwZXMJCSh2b2lkKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTY2hlbWFDbGVhbnVwVHlwZXMJCSh2b2lkKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFUeXBlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFUeXBlUHRyCiAJCXhtbFNjaGVtYUdldFByZWRlZmluZWRUeXBlCShjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5zKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFWYWxpZGF0ZVByZWRlZmluZWRUeXBlCSh4bWxTY2hlbWFUeXBlUHRyIHR5cGUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUsCiAJCQkJCQkgeG1sU2NoZW1hVmFsUHRyICp2YWwpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYVZhbFByZWRlZlR5cGVOb2RlCSh4bWxTY2hlbWFUeXBlUHRyIHR5cGUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqdmFsdWUsCiAJCQkJCQkgeG1sU2NoZW1hVmFsUHRyICp2YWwsCiAJCQkJCQkgeG1sTm9kZVB0ciBub2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFWYWxpZGF0ZUZhY2V0CQkoeG1sU2NoZW1hVHlwZVB0ciBiYXNlLAogCQkJCQkJIHhtbFNjaGVtYUZhY2V0UHRyIGZhY2V0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkJIHhtbFNjaGVtYVZhbFB0ciB2YWwpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYVZhbGlkYXRlRmFjZXRXaHRzcAkoeG1sU2NoZW1hRmFjZXRQdHIgZmFjZXQsCiAJCQkJCQkgeG1sU2NoZW1hV2hpdGVzcGFjZVZhbHVlVHlwZSBmd3MsCiAJCQkJCQkgeG1sU2NoZW1hVmFsVHlwZSB2YWxUeXBlLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkJIHhtbFNjaGVtYVZhbFB0ciB2YWwsCiAJCQkJCQkgeG1sU2NoZW1hV2hpdGVzcGFjZVZhbHVlVHlwZSB3cyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTY2hlbWFGcmVlVmFsdWUJCSh4bWxTY2hlbWFWYWxQdHIgdmFsKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFGYWNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2NoZW1hRmFjZXRQdHIKIAkJeG1sU2NoZW1hTmV3RmFjZXQJCSh2b2lkKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFDaGVja0ZhY2V0CQkoeG1sU2NoZW1hRmFjZXRQdHIgZmFjZXQsCiAJCQkJCQkgeG1sU2NoZW1hVHlwZVB0ciB0eXBlRGVjbCwKIAkJCQkJCSB4bWxTY2hlbWFQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxTY2hlbWFGcmVlRmFjZXQJCSh4bWxTY2hlbWFGYWNldFB0ciBmYWNldCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU2NoZW1hQ29tcGFyZVZhbHVlcwkJKHhtbFNjaGVtYVZhbFB0ciB4LAogCQkJCQkJIHhtbFNjaGVtYVZhbFB0ciB5KTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFUeXBlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFUeXBlUHRyCiAgICAgeG1sU2NoZW1hR2V0QnVpbHRJbkxpc3RTaW1wbGVUeXBlSXRlbVR5cGUJKHhtbFNjaGVtYVR5cGVQdHIgdHlwZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICB4bWxTY2hlbWFWYWxpZGF0ZUxpc3RTaW1wbGVUeXBlRmFjZXQJKHhtbFNjaGVtYUZhY2V0UHRyIGZhY2V0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkJIHVuc2lnbmVkIGxvbmcgYWN0dWFsTGVuLAogCQkJCQkJIHVuc2lnbmVkIGxvbmcgKmV4cGVjdGVkTGVuKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFUeXBlUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFUeXBlUHRyCiAJCXhtbFNjaGVtYUdldEJ1aWx0SW5UeXBlCQkoeG1sU2NoZW1hVmFsVHlwZSB0eXBlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFJc0J1aWx0SW5UeXBlRmFjZXQJKHhtbFNjaGVtYVR5cGVQdHIgdHlwZSwKIAkJCQkJCSBpbnQgZmFjZXRUeXBlKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxTY2hlbWFDb2xsYXBzZVN0cmluZwkJKGNvbnN0IHhtbENoYXIgKnZhbHVlKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxTY2hlbWFXaGl0ZVNwYWNlUmVwbGFjZQkoY29uc3QgeG1sQ2hhciAqdmFsdWUpOwotWE1MUFVCRlVOIHVuc2lnbmVkIGxvbmcgIFhNTENBTEwKK1hNTFBVQkZVTiB1bnNpZ25lZCBsb25nIAogCQl4bWxTY2hlbWFHZXRGYWNldFZhbHVlQXNVTG9uZwkoeG1sU2NoZW1hRmFjZXRQdHIgZmFjZXQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYVZhbGlkYXRlTGVuZ3RoRmFjZXQJKHhtbFNjaGVtYVR5cGVQdHIgdHlwZSwKIAkJCQkJCSB4bWxTY2hlbWFGYWNldFB0ciBmYWNldCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSwKIAkJCQkJCSB4bWxTY2hlbWFWYWxQdHIgdmFsLAogCQkJCQkJIHVuc2lnbmVkIGxvbmcgKmxlbmd0aCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU2NoZW1hVmFsaWRhdGVMZW5ndGhGYWNldFdodHNwKHhtbFNjaGVtYUZhY2V0UHRyIGZhY2V0LAogCQkJCQkJICB4bWxTY2hlbWFWYWxUeXBlIHZhbFR5cGUsCiAJCQkJCQkgIGNvbnN0IHhtbENoYXIgKnZhbHVlLAogCQkJCQkJICB4bWxTY2hlbWFWYWxQdHIgdmFsLAogCQkJCQkJICB1bnNpZ25lZCBsb25nICpsZW5ndGgsCiAJCQkJCQkgIHhtbFNjaGVtYVdoaXRlc3BhY2VWYWx1ZVR5cGUgd3MpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYVZhbFByZWRlZlR5cGVOb2RlTm9Ob3JtKHhtbFNjaGVtYVR5cGVQdHIgdHlwZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSwKIAkJCQkJCSB4bWxTY2hlbWFWYWxQdHIgKnZhbCwKIAkJCQkJCSB4bWxOb2RlUHRyIG5vZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYUdldENhbm9uVmFsdWUJCSh4bWxTY2hlbWFWYWxQdHIgdmFsLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKipyZXRWYWx1ZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sU2NoZW1hR2V0Q2Fub25WYWx1ZVdodHNwCSh4bWxTY2hlbWFWYWxQdHIgdmFsLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKipyZXRWYWx1ZSwKIAkJCQkJCSB4bWxTY2hlbWFXaGl0ZXNwYWNlVmFsdWVUeXBlIHdzKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFWYWx1ZUFwcGVuZAkJKHhtbFNjaGVtYVZhbFB0ciBwcmV2LAogCQkJCQkJIHhtbFNjaGVtYVZhbFB0ciBjdXIpOwotWE1MUFVCRlVOIHhtbFNjaGVtYVZhbFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sU2NoZW1hVmFsUHRyCiAJCXhtbFNjaGVtYVZhbHVlR2V0TmV4dAkJKHhtbFNjaGVtYVZhbFB0ciBjdXIpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAJCXhtbFNjaGVtYVZhbHVlR2V0QXNTdHJpbmcJKHhtbFNjaGVtYVZhbFB0ciB2YWwpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFNjaGVtYVZhbHVlR2V0QXNCb29sZWFuCSh4bWxTY2hlbWFWYWxQdHIgdmFsKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFWYWxQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFNjaGVtYVZhbFB0cgogCQl4bWxTY2hlbWFOZXdTdHJpbmdWYWx1ZQkJKHhtbFNjaGVtYVZhbFR5cGUgdHlwZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICp2YWx1ZSk7Ci1YTUxQVUJGVU4geG1sU2NoZW1hVmFsUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFWYWxQdHIKIAkJeG1sU2NoZW1hTmV3Tk9UQVRJT05WYWx1ZQkoY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpucyk7Ci1YTUxQVUJGVU4geG1sU2NoZW1hVmFsUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFWYWxQdHIKIAkJeG1sU2NoZW1hTmV3UU5hbWVWYWx1ZQkJKGNvbnN0IHhtbENoYXIgKm5hbWVzcGFjZU5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbG9jYWxOYW1lKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxTY2hlbWFDb21wYXJlVmFsdWVzV2h0c3AJKHhtbFNjaGVtYVZhbFB0ciB4LAogCQkJCQkJIHhtbFNjaGVtYVdoaXRlc3BhY2VWYWx1ZVR5cGUgeHdzLAogCQkJCQkJIHhtbFNjaGVtYVZhbFB0ciB5LAogCQkJCQkJIHhtbFNjaGVtYVdoaXRlc3BhY2VWYWx1ZVR5cGUgeXdzKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFWYWxQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFNjaGVtYVZhbFB0cgogCQl4bWxTY2hlbWFDb3B5VmFsdWUJCSh4bWxTY2hlbWFWYWxQdHIgdmFsKTsKLVhNTFBVQkZVTiB4bWxTY2hlbWFWYWxUeXBlIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxTY2hlbWFWYWxUeXBlCiAJCXhtbFNjaGVtYUdldFZhbFR5cGUJCSh4bWxTY2hlbWFWYWxQdHIgdmFsKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWxzdHJpbmcuaCBiL2luY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oCmluZGV4IDJkMGIyZDEuLmRiMTFhMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oCkBAIC0zNywxMDAgKzM3LDEwMCBAQAogLyoKICAqIHhtbENoYXIgaGFuZGxpbmcKICAqLwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sU3RyZHVwICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpjdXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sU3RybmR1cCAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sQ2hhclN0cm5kdXAgICAgICAgICAgIChjb25zdCBjaGFyICpjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sQ2hhclN0cmR1cCAgICAgICAgICAgIChjb25zdCBjaGFyICpjdXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sU3Ryc3ViICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKICAgICAgICAgICAgICAgICB4bWxTdHJjaHIgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhciB2YWwpOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sU3Ryc3RyICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnZhbCk7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKICAgICAgICAgICAgICAgICB4bWxTdHJjYXNlc3RyICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqdmFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogICAgICAgICAgICAgICAgIHhtbFN0cmNtcCAgICAgICAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqc3RyMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqc3RyMik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgICAgICAgICB4bWxTdHJuY21wICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnN0cjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnN0cjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICAgICAgeG1sU3RyY2FzZWNtcCAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpzdHIxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpzdHIyKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogICAgICAgICAgICAgICAgIHhtbFN0cm5jYXNlY21wICAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqc3RyMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqc3RyMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgICAgICAgICB4bWxTdHJFcXVhbCAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnN0cjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnN0cjIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICAgICAgeG1sU3RyUUVxdWFsICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpwcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpzdHIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICAgICAgeG1sU3RybGVuICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICpzdHIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgeG1sU3RyY2F0ICAgICAgICAgICAgICAgICh4bWxDaGFyICpjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmFkZCk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKICAgICAgICAgICAgICAgICB4bWxTdHJuY2F0ICAgICAgICAgICAgICAgKHhtbENoYXIgKmN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqYWRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogICAgICAgICAgICAgICAgIHhtbFN0cm5jYXROZXcgICAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqc3RyMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqc3RyMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgICAgICAgICB4bWxTdHJQcmludGYgICAgICAgICAgICAgKHhtbENoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgICAgICAgICAgeG1sU3RyVlByaW50ZiAgICAgICAgICAgICAgICAoeG1sQ2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXApIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDApOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sR2V0VVRGOENoYXIgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnV0ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4pOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbENoZWNrVVRGOCAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICp1dGYpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFVURjhTdHJzaXplICAgICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICp1dGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgIHhtbFVURjhTdHJuZHVwICAgICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICp1dGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pOwotWE1MUFVCRlVOIGNvbnN0IHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqCiAgICAgICAgIHhtbFVURjhTdHJwb3MgICAgICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICp1dGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFVURjhTdHJsb2MgICAgICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICp1dGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnV0ZmNoYXIpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAgICAgICAgIHhtbFVURjhTdHJzdWIgICAgICAgICAgICAgICAgICAgIChjb25zdCB4bWxDaGFyICp1dGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVVRGOFN0cmxlbiAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnV0Zik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVVRGOFNpemUgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnV0Zik7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVVRGOENoYXJjbXAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKnV0ZjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnV0ZjIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWx1bmljb2RlLmggYi9pbmNsdWRlL2xpYnhtbC94bWx1bmljb2RlLmgKaW5kZXggMDFhYzhiNi4uMmU1MGE0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbHVuaWNvZGUuaApAQCAtMjMsMTc1ICsyMywxNzUgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0FlZ2Vhbk51bWJlcnMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0FscGhhYmV0aWNQcmVzZW50YXRpb25Gb3JtcwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQXJhYmljCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNBcmFiaWNQcmVzZW50YXRpb25Gb3Jtc0EJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0FyYWJpY1ByZXNlbnRhdGlvbkZvcm1zQgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQXJtZW5pYW4JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0Fycm93cwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQmFzaWNMYXRpbgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQmVuZ2FsaQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQmxvY2tFbGVtZW50cwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQm9wb21vZm8JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0JvcG9tb2ZvRXh0ZW5kZWQJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0JveERyYXdpbmcJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0JyYWlsbGVQYXR0ZXJucwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQnVoaWQJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0J5emFudGluZU11c2ljYWxTeW1ib2xzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDSktDb21wYXRpYmlsaXR5CShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDSktDb21wYXRpYmlsaXR5Rm9ybXMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NKS0NvbXBhdGliaWxpdHlJZGVvZ3JhcGhzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDSktDb21wYXRpYmlsaXR5SWRlb2dyYXBoc1N1cHBsZW1lbnQJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NKS1JhZGljYWxzU3VwcGxlbWVudAkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ0pLU3ltYm9sc2FuZFB1bmN0dWF0aW9uCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBocwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ0pLVW5pZmllZElkZW9ncmFwaHNFeHRlbnNpb25BCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoc0V4dGVuc2lvbkIJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NoZXJva2VlCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzZm9yU3ltYm9scwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ29tYmluaW5nSGFsZk1hcmtzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDb21iaW5pbmdNYXJrc2ZvclN5bWJvbHMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NvbnRyb2xQaWN0dXJlcwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ3VycmVuY3lTeW1ib2xzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDeXByaW90U3lsbGFiYXJ5CShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDeXJpbGxpYwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ3lyaWxsaWNTdXBwbGVtZW50CShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNEZXNlcmV0CShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNEZXZhbmFnYXJpCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNEaW5nYmF0cwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzRW5jbG9zZWRBbHBoYW51bWVyaWNzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNFbmNsb3NlZENKS0xldHRlcnNhbmRNb250aHMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0V0aGlvcGljCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNHZW5lcmFsUHVuY3R1YXRpb24JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0dlb21ldHJpY1NoYXBlcwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzR2VvcmdpYW4JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0dvdGhpYwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzR3JlZWsJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0dyZWVrRXh0ZW5kZWQJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0dyZWVrYW5kQ29wdGljCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNHdWphcmF0aQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzR3VybXVraGkJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0hhbGZ3aWR0aGFuZEZ1bGx3aWR0aEZvcm1zCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNIYW5ndWxDb21wYXRpYmlsaXR5SmFtbwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzSGFuZ3VsSmFtbwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzSGFuZ3VsU3lsbGFibGVzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNIYW51bm9vCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNIZWJyZXcJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0hpZ2hQcml2YXRlVXNlU3Vycm9nYXRlcwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzSGlnaFN1cnJvZ2F0ZXMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0hpcmFnYW5hCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNJUEFFeHRlbnNpb25zCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNJZGVvZ3JhcGhpY0Rlc2NyaXB0aW9uQ2hhcmFjdGVycwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzS2FuYnVuCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNLYW5neGlSYWRpY2FscwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzS2FubmFkYQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzS2F0YWthbmEJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0thdGFrYW5hUGhvbmV0aWNFeHRlbnNpb25zCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNLaG1lcgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzS2htZXJTeW1ib2xzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNMYW8JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0xhdGluMVN1cHBsZW1lbnQJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0xhdGluRXh0ZW5kZWRBCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNMYXRpbkV4dGVuZGVkQgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTGF0aW5FeHRlbmRlZEFkZGl0aW9uYWwJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0xldHRlcmxpa2VTeW1ib2xzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNMaW1idQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTGluZWFyQklkZW9ncmFtcwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTGluZWFyQlN5bGxhYmFyeQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTG93U3Vycm9nYXRlcwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTWFsYXlhbGFtCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNNYXRoZW1hdGljYWxBbHBoYW51bWVyaWNTeW1ib2xzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNNYXRoZW1hdGljYWxPcGVyYXRvcnMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc01pc2NlbGxhbmVvdXNNYXRoZW1hdGljYWxTeW1ib2xzQQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTWlzY2VsbGFuZW91c01hdGhlbWF0aWNhbFN5bWJvbHNCCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNNaXNjZWxsYW5lb3VzU3ltYm9scwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTWlzY2VsbGFuZW91c1N5bWJvbHNhbmRBcnJvd3MJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc01pc2NlbGxhbmVvdXNUZWNobmljYWwJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc01vbmdvbGlhbgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzTXVzaWNhbFN5bWJvbHMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc015YW5tYXIJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc051bWJlckZvcm1zCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNPZ2hhbQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzT2xkSXRhbGljCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNPcHRpY2FsQ2hhcmFjdGVyUmVjb2duaXRpb24JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc09yaXlhCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNPc21hbnlhCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNQaG9uZXRpY0V4dGVuc2lvbnMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1ByaXZhdGVVc2UJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1ByaXZhdGVVc2VBcmVhCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNSdW5pYwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzU2hhdmlhbgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzU2luaGFsYQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzU21hbGxGb3JtVmFyaWFudHMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1NwYWNpbmdNb2RpZmllckxldHRlcnMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1NwZWNpYWxzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNTdXBlcnNjcmlwdHNhbmRTdWJzY3JpcHRzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNTdXBwbGVtZW50YWxBcnJvd3NBCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNTdXBwbGVtZW50YWxBcnJvd3NCCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNTdXBwbGVtZW50YWxNYXRoZW1hdGljYWxPcGVyYXRvcnMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1N1cHBsZW1lbnRhcnlQcml2YXRlVXNlQXJlYUEJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1N1cHBsZW1lbnRhcnlQcml2YXRlVXNlQXJlYUIJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1N5cmlhYwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzVGFnYWxvZwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzVGFnYmFud2EJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1RhZ3MJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1RhaUxlCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNUYWlYdWFuSmluZ1N5bWJvbHMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1RhbWlsCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNUZWx1Z3UJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1RoYWFuYQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzVGhhaQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzVGliZXRhbgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzVWdhcml0aWMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1VuaWZpZWRDYW5hZGlhbkFib3JpZ2luYWxTeWxsYWJpY3MJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1ZhcmlhdGlvblNlbGVjdG9ycwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzVmFyaWF0aW9uU2VsZWN0b3JzU3VwcGxlbWVudAkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzWWlSYWRpY2FscwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzWWlTeWxsYWJsZXMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc1lpamluZ0hleGFncmFtU3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0FlZ2Vhbk51bWJlcnMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNBbHBoYWJldGljUHJlc2VudGF0aW9uRm9ybXMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNBcmFiaWMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNBcmFiaWNQcmVzZW50YXRpb25Gb3Jtc0EJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNBcmFiaWNQcmVzZW50YXRpb25Gb3Jtc0IJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNBcm1lbmlhbgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0Fycm93cwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0Jhc2ljTGF0aW4JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNCZW5nYWxpCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQmxvY2tFbGVtZW50cwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0JvcG9tb2ZvCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQm9wb21vZm9FeHRlbmRlZAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0JveERyYXdpbmcJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNCcmFpbGxlUGF0dGVybnMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNCdWhpZAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0J5emFudGluZU11c2ljYWxTeW1ib2xzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ0pLQ29tcGF0aWJpbGl0eQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NKS0NvbXBhdGliaWxpdHlGb3JtcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NKS0NvbXBhdGliaWxpdHlJZGVvZ3JhcGhzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ0pLQ29tcGF0aWJpbGl0eUlkZW9ncmFwaHNTdXBwbGVtZW50CShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ0pLUmFkaWNhbHNTdXBwbGVtZW50CShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ0pLU3ltYm9sc2FuZFB1bmN0dWF0aW9uCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ0pLVW5pZmllZElkZW9ncmFwaHMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoc0V4dGVuc2lvbkEJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoc0V4dGVuc2lvbkIJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDaGVyb2tlZQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3MJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzZm9yU3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NvbWJpbmluZ0hhbGZNYXJrcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NvbWJpbmluZ01hcmtzZm9yU3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NvbnRyb2xQaWN0dXJlcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0N1cnJlbmN5U3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0N5cHJpb3RTeWxsYWJhcnkJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDeXJpbGxpYwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0N5cmlsbGljU3VwcGxlbWVudAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0Rlc2VyZXQJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNEZXZhbmFnYXJpCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzRGluZ2JhdHMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNFbmNsb3NlZEFscGhhbnVtZXJpY3MJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNFbmNsb3NlZENKS0xldHRlcnNhbmRNb250aHMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNFdGhpb3BpYwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0dlbmVyYWxQdW5jdHVhdGlvbgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0dlb21ldHJpY1NoYXBlcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0dlb3JnaWFuCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzR290aGljCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzR3JlZWsJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNHcmVla0V4dGVuZGVkCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzR3JlZWthbmRDb3B0aWMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNHdWphcmF0aQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0d1cm11a2hpCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzSGFsZndpZHRoYW5kRnVsbHdpZHRoRm9ybXMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNIYW5ndWxDb21wYXRpYmlsaXR5SmFtbwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0hhbmd1bEphbW8JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNIYW5ndWxTeWxsYWJsZXMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNIYW51bm9vCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzSGVicmV3CShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzSGlnaFByaXZhdGVVc2VTdXJyb2dhdGVzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzSGlnaFN1cnJvZ2F0ZXMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNIaXJhZ2FuYQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0lQQUV4dGVuc2lvbnMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNJZGVvZ3JhcGhpY0Rlc2NyaXB0aW9uQ2hhcmFjdGVycwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0thbmJ1bgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0thbmd4aVJhZGljYWxzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzS2FubmFkYQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0thdGFrYW5hCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzS2F0YWthbmFQaG9uZXRpY0V4dGVuc2lvbnMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNLaG1lcgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0tobWVyU3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0xhbwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0xhdGluMVN1cHBsZW1lbnQJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNMYXRpbkV4dGVuZGVkQQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0xhdGluRXh0ZW5kZWRCCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTGF0aW5FeHRlbmRlZEFkZGl0aW9uYWwJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNMZXR0ZXJsaWtlU3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0xpbWJ1CShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTGluZWFyQklkZW9ncmFtcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0xpbmVhckJTeWxsYWJhcnkJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNMb3dTdXJyb2dhdGVzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTWFsYXlhbGFtCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTWF0aGVtYXRpY2FsQWxwaGFudW1lcmljU3ltYm9scwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc01hdGhlbWF0aWNhbE9wZXJhdG9ycwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc01pc2NlbGxhbmVvdXNNYXRoZW1hdGljYWxTeW1ib2xzQQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc01pc2NlbGxhbmVvdXNNYXRoZW1hdGljYWxTeW1ib2xzQgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc01pc2NlbGxhbmVvdXNTeW1ib2xzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTWlzY2VsbGFuZW91c1N5bWJvbHNhbmRBcnJvd3MJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNNaXNjZWxsYW5lb3VzVGVjaG5pY2FsCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTW9uZ29saWFuCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTXVzaWNhbFN5bWJvbHMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNNeWFubWFyCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzTnVtYmVyRm9ybXMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNPZ2hhbQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc09sZEl0YWxpYwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc09wdGljYWxDaGFyYWN0ZXJSZWNvZ25pdGlvbgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc09yaXlhCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzT3NtYW55YQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1Bob25ldGljRXh0ZW5zaW9ucwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1ByaXZhdGVVc2UJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNQcml2YXRlVXNlQXJlYQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1J1bmljCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzU2hhdmlhbgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1NpbmhhbGEJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNTbWFsbEZvcm1WYXJpYW50cwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1NwYWNpbmdNb2RpZmllckxldHRlcnMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNTcGVjaWFscwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1N1cGVyc2NyaXB0c2FuZFN1YnNjcmlwdHMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNTdXBwbGVtZW50YWxBcnJvd3NBCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzU3VwcGxlbWVudGFsQXJyb3dzQgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1N1cHBsZW1lbnRhbE1hdGhlbWF0aWNhbE9wZXJhdG9ycwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1N1cHBsZW1lbnRhcnlQcml2YXRlVXNlQXJlYUEJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNTdXBwbGVtZW50YXJ5UHJpdmF0ZVVzZUFyZWFCCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzU3lyaWFjCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzVGFnYWxvZwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1RhZ2JhbndhCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzVGFncwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1RhaUxlCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzVGFpWHVhbkppbmdTeW1ib2xzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzVGFtaWwJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNUZWx1Z3UJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNUaGFhbmEJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNUaGFpCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzVGliZXRhbgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1VnYXJpdGljCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzVW5pZmllZENhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1ZhcmlhdGlvblNlbGVjdG9ycwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc1ZhcmlhdGlvblNlbGVjdG9yc1N1cHBsZW1lbnQJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNZaVJhZGljYWxzCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzWWlTeWxsYWJsZXMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNZaWppbmdIZXhhZ3JhbVN5bWJvbHMJKGludCBjb2RlKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQmxvY2sJKGludCBjb2RlLCBjb25zdCBjaGFyICpibG9jayk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQmxvY2sJKGludCBjb2RlLCBjb25zdCBjaGFyICpibG9jayk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdEMJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdENjCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRDZgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0Q28JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdENzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRMCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRMbAkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0TG0JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdExvCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRMdAkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0THUJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdE0JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdE1jCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRNZQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0TW4JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdE4JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdE5kCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRObAkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0Tm8JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdFAJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdFBjCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRQZAkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0UGUJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdFBmCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRQaQkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0UG8JKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdFBzCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRTCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRTYwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0U2sJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdFNtCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRTbwkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0WgkoaW50IGNvZGUpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFVDU0lzQ2F0WmwJKGludCBjb2RlKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdFpwCShpbnQgY29kZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVUNTSXNDYXRacwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdEMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRDYwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdENmCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0Q28JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRDcwkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdEwJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRMbAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdExtCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0TG8JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRMdAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdEx1CShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0TQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdE1jCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0TWUJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRNbgkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdE4JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXROZAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdE5sCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0Tm8JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRQCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0UGMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRQZAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdFBlCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0UGYJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRQaQkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdFBvCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0UHMJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRTCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0U2MJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRTawkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdFNtCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0U28JKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRaCShpbnQgY29kZSk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0WmwJKGludCBjb2RlKTsKK1hNTFBVQkZVTiBpbnQgeG1sVUNTSXNDYXRacAkoaW50IGNvZGUpOworWE1MUFVCRlVOIGludCB4bWxVQ1NJc0NhdFpzCShpbnQgY29kZSk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxVQ1NJc0NhdAkoaW50IGNvZGUsIGNvbnN0IGNoYXIgKmNhdCk7CitYTUxQVUJGVU4gaW50IHhtbFVDU0lzQ2F0CShpbnQgY29kZSwgY29uc3QgY2hhciAqY2F0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmggYi9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgKaW5kZXggMjllYThlMC4uYzU5NmMwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaApAQCAtMjEsNyArMjEsNyBAQAogICogeW91ciBsaWJyYXJ5IGFuZCBpbmNsdWRlcyBtaXNtYXRjaAogICovCiAjaWZuZGVmIExJQlhNTDJfQ09NUElMSU5HX01TQ0NERUYKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sQ2hlY2tWZXJzaW9uKGludCB2ZXJzaW9uKTsKK1hNTFBVQkZVTiB2b2lkIHhtbENoZWNrVmVyc2lvbihpbnQgdmVyc2lvbik7CiAjZW5kaWYgLyogTElCWE1MMl9DT01QSUxJTkdfTVNDQ0RFRiAqLwogCiAvKioKQEAgLTI5LDI4ICsyOSwyOCBAQAogICoKICAqIHRoZSB2ZXJzaW9uIHN0cmluZyBsaWtlICIxLjIuMyIKICAqLwotI2RlZmluZSBMSUJYTUxfRE9UVEVEX1ZFUlNJT04gIjIuMTAuMyIKKyNkZWZpbmUgTElCWE1MX0RPVFRFRF9WRVJTSU9OICIyLjEyLjUiCiAKIC8qKgogICogTElCWE1MX1ZFUlNJT046CiAgKgogICogdGhlIHZlcnNpb24gbnVtYmVyOiAxLjIuMyB2YWx1ZSBpcyAxMDIwMwogICovCi0jZGVmaW5lIExJQlhNTF9WRVJTSU9OIDIxMDAzCisjZGVmaW5lIExJQlhNTF9WRVJTSU9OIDIxMjA1CiAKIC8qKgogICogTElCWE1MX1ZFUlNJT05fU1RSSU5HOgogICoKICAqIHRoZSB2ZXJzaW9uIG51bWJlciBzdHJpbmcsIDEuMi4zIHZhbHVlIGlzICIxMDIwMyIKICAqLwotI2RlZmluZSBMSUJYTUxfVkVSU0lPTl9TVFJJTkcgIjIxMDAzIgorI2RlZmluZSBMSUJYTUxfVkVSU0lPTl9TVFJJTkcgIjIxMjA1IgogCiAvKioKICAqIExJQlhNTF9WRVJTSU9OX0VYVFJBOgogICoKICAqIGV4dHJhIHZlcnNpb24gaW5mb3JtYXRpb24sIHVzZWQgdG8gc2hvdyBhIGdpdCBjb21taXQgZGVzY3JpcHRpb24KICAqLwotI2RlZmluZSBMSUJYTUxfVkVSU0lPTl9FWFRSQSAiLUdJVHYyLjEwLjMiCisjZGVmaW5lIExJQlhNTF9WRVJTSU9OX0VYVFJBICIiCiAKIC8qKgogICogTElCWE1MX1RFU1RfVkVSU0lPTjoKQEAgLTU4LDcgKzU4LDcgQEAKICAqIE1hY3JvIHRvIGNoZWNrIHRoYXQgdGhlIGxpYnhtbCB2ZXJzaW9uIGluIHVzZSBpcyBjb21wYXRpYmxlIHdpdGgKICAqIHRoZSB2ZXJzaW9uIHRoZSBzb2Z0d2FyZSBoYXMgYmVlbiBjb21waWxlZCBhZ2FpbnN0CiAgKi8KLSNkZWZpbmUgTElCWE1MX1RFU1RfVkVSU0lPTiB4bWxDaGVja1ZlcnNpb24oMjEwMDMpOworI2RlZmluZSBMSUJYTUxfVEVTVF9WRVJTSU9OIHhtbENoZWNrVmVyc2lvbigyMTIwNSk7CiAKICNpZm5kZWYgVk1TCiAjaWYgMApAQCAtMTcxLDcgKzE3MSw3IEBACiAgKgogICogV2hldGhlciB0aGUgRlRQIHN1cHBvcnQgaXMgY29uZmlndXJlZCBpbgogICovCi0jaWYgMQorI2lmIDAKICNkZWZpbmUgTElCWE1MX0ZUUF9FTkFCTEVECiAjZW5kaWYKIApAQCAtMjA3LDcgKzIwNyw3IEBACiAgKgogICogV2hldGhlciB0aGUgZGVwcmVjYXRlZCBBUElzIGFyZSBjb21waWxlZCBpbiBmb3IgY29tcGF0aWJpbGl0eQogICovCi0jaWYgMQorI2lmIDAKICNkZWZpbmUgTElCWE1MX0xFR0FDWV9FTkFCTEVECiAjZW5kaWYKIApAQCAtMzEzLDcgKzMxMyw3IEBACiAvKioKICAqIExJQlhNTF9ERUJVR19SVU5USU1FOgogICoKLSAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgZGVidWdnaW5nIGlzIGNvbmZpZ3VyZWQgaW4KKyAqIFJlbW92ZWQKICAqLwogI2lmIDAKICNkZWZpbmUgTElCWE1MX0RFQlVHX1JVTlRJTUUKQEAgLTM4Nyw3ICszODcsNyBAQAogICoKICAqIHRoZSBzdHJpbmcgc3VmZml4IHVzZWQgYnkgZHluYW1pYyBtb2R1bGVzICh1c3VhbGx5IHNoYXJlZCBsaWJyYXJpZXMpCiAgKi8KLSNkZWZpbmUgTElCWE1MX01PRFVMRV9FWFRFTlNJT04gIi5zbyIKKyNkZWZpbmUgTElCWE1MX01PRFVMRV9FWFRFTlNJT04gIi5zbyIgCiAjZW5kaWYKIAogLyoqCkBAIC00MDksMTIgKzQwOSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIF9fR05VQ19fCi0KLS8qKgotICogQVRUUklCVVRFX1VOVVNFRDoKLSAqCi0gKiBNYWNybyB1c2VkIHRvIHNpZ25hbCB0byBHQ0MgdW51c2VkIGZ1bmN0aW9uIHBhcmFtZXRlcnMKLSAqLworLyoqIERPQ19ESVNBQkxFICovCiAKICNpZm5kZWYgQVRUUklCVVRFX1VOVVNFRAogIyBpZiAoKF9fR05VQ19fID4gMikgfHwgKChfX0dOVUNfXyA9PSAyKSAmJiAoX19HTlVDX01JTk9SX18gPj0gNykpKQpAQCAtNDI0LDEyICs0MTksNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLS8qKgotICogTElCWE1MX0FUVFJfQUxMT0NfU0laRToKLSAqCi0gKiBNYWNybyB1c2VkIHRvIGluZGljYXRlIHRvIEdDQyB0aGlzIGlzIGFuIGFsbG9jYXRvciBmdW5jdGlvbgotICovCi0KICNpZm5kZWYgTElCWE1MX0FUVFJfQUxMT0NfU0laRQogIyBpZiAoIWRlZmluZWQoX19jbGFuZ19fKSAmJiAoKF9fR05VQ19fID4gNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpKSkKICMgIGRlZmluZSBMSUJYTUxfQVRUUl9BTExPQ19TSVpFKHgpIF9fYXR0cmlidXRlX18oKGFsbG9jX3NpemUoeCkpKQpAQCAtNDQwLDEyICs0MjksNiBAQAogIyBkZWZpbmUgTElCWE1MX0FUVFJfQUxMT0NfU0laRSh4KQogI2VuZGlmCiAKLS8qKgotICogTElCWE1MX0FUVFJfRk9STUFUOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoZSBwYXJhbWV0ZXIgYXJlIHByaW50ZiBsaWtlCi0gKi8KLQogI2lmbmRlZiBMSUJYTUxfQVRUUl9GT1JNQVQKICMgaWYgKChfX0dOVUNfXyA+IDMpIHx8ICgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSkKICMgIGRlZmluZSBMSUJYTUxfQVRUUl9GT1JNQVQoZm10LGFyZ3MpIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXyxmbXQsYXJncykpKQpAQCAtNDU3LDQ0ICs0NDAsNjkgQEAKICNlbmRpZgogCiAjaWZuZGVmIFhNTF9ERVBSRUNBVEVECi0jICBpZmRlZiBJTl9MSUJYTUwKKyMgIGlmIGRlZmluZWQgKElOX0xJQlhNTCkgfHwgKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18gPCAzMDEpCiAjICAgIGRlZmluZSBYTUxfREVQUkVDQVRFRAotIyAgZWxzZQogLyogQXZhaWxhYmxlIHNpbmNlIGF0IGxlYXN0IEdDQyAzLjEgKi8KKyMgIGVsc2UKICMgICAgZGVmaW5lIFhNTF9ERVBSRUNBVEVEIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IChfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fID49IDQwNikKKyAgI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCAoX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXyA+PSA4MDApCisgICAgI2RlZmluZSBYTUxfSUdOT1JFX0ZQVFJfQ0FTVF9XQVJOSU5HUyBcCisgICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XcGVkYW50aWNcIiIpIFwKKyAgICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2Nhc3QtZnVuY3Rpb24tdHlwZVwiIikKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIFhNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTIFwKKyAgICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdwZWRhbnRpY1wiIikKKyAgI2VuZGlmCisgICNkZWZpbmUgWE1MX1BPUF9XQVJOSU5HUyBcCisgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisgICNkZWZpbmUgWE1MX0lHTk9SRV9GUFRSX0NBU1RfV0FSTklOR1MKKyAgI2RlZmluZSBYTUxfUE9QX1dBUk5JTkdTCisjZW5kaWYKKwogI2Vsc2UgLyogISBfX0dOVUNfXyAqLwotLyoqCi0gKiBBVFRSSUJVVEVfVU5VU0VEOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gc2lnbmFsIHRvIEdDQyB1bnVzZWQgZnVuY3Rpb24gcGFyYW1ldGVycwotICovCiAjZGVmaW5lIEFUVFJJQlVURV9VTlVTRUQKLS8qKgotICogTElCWE1MX0FUVFJfQUxMT0NfU0laRToKLSAqCi0gKiBNYWNybyB1c2VkIHRvIGluZGljYXRlIHRvIEdDQyB0aGlzIGlzIGFuIGFsbG9jYXRvciBmdW5jdGlvbgotICovCiAjZGVmaW5lIExJQlhNTF9BVFRSX0FMTE9DX1NJWkUoeCkKLS8qKgotICogTElCWE1MX0FUVFJfRk9STUFUOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoZSBwYXJhbWV0ZXIgYXJlIHByaW50ZiBsaWtlCi0gKi8KICNkZWZpbmUgTElCWE1MX0FUVFJfRk9STUFUKGZtdCxhcmdzKQotLyoqCi0gKiBYTUxfREVQUkVDQVRFRDoKLSAqCi0gKiBNYWNybyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBmdW5jdGlvbiwgdmFyaWFibGUsIHR5cGUgb3Igc3RydWN0IG1lbWJlcgotICogaXMgZGVwcmVjYXRlZC4KLSAqLwogI2lmbmRlZiBYTUxfREVQUkVDQVRFRAotI2RlZmluZSBYTUxfREVQUkVDQVRFRAorIyAgaWYgZGVmaW5lZCAoSU5fTElCWE1MKSB8fCAhZGVmaW5lZCAoX01TQ19WRVIpCisjICAgIGRlZmluZSBYTUxfREVQUkVDQVRFRAorLyogQXZhaWxhYmxlIHNpbmNlIFZpc3VhbCBTdHVkaW8gMjAwNSAqLworIyAgZWxpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjICAgIGRlZmluZSBYTUxfREVQUkVDQVRFRCBfX2RlY2xzcGVjKGRlcHJlY2F0ZWQpCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZCAoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyAgZGVmaW5lIFhNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTIF9fcHJhZ21hKHdhcm5pbmcocHVzaCkpCisjZWxzZQorIyAgZGVmaW5lIFhNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTCisjZW5kaWYKKyNpZm5kZWYgWE1MX1BPUF9XQVJOSU5HUworIyAgaWYgZGVmaW5lZCAoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyAgICBkZWZpbmUgWE1MX1BPUF9XQVJOSU5HUyBfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCisjICBlbHNlCisjICAgIGRlZmluZSBYTUxfUE9QX1dBUk5JTkdTCisjICBlbmRpZgogI2VuZGlmCiAjZW5kaWYgLyogX19HTlVDX18gKi8KIAorI2RlZmluZSBYTUxfTk9fQVRUUgorCisjaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECisgICNkZWZpbmUgWE1MX0RFQ0xBUkVfR0xPQkFMKG5hbWUsIHR5cGUsIGF0dHJzKSBcCisgICAgYXR0cnMgWE1MUFVCRlVOIHR5cGUgKl9fIyNuYW1lKHZvaWQpOworICAjZGVmaW5lIFhNTF9HTE9CQUxfTUFDUk8obmFtZSkgKCpfXyMjbmFtZSgpKQorI2Vsc2UKKyAgI2RlZmluZSBYTUxfREVDTEFSRV9HTE9CQUwobmFtZSwgdHlwZSwgYXR0cnMpIFwKKyAgICBhdHRycyBYTUxQVUJWQVIgdHlwZSBuYW1lOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gYi9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KaW5kZXggYmRlYmZlMy4uNmQyYWU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCisrKyBiL2luY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgpAQCAtMjEsNyArMjEsNyBAQAogICogeW91ciBsaWJyYXJ5IGFuZCBpbmNsdWRlcyBtaXNtYXRjaAogICovCiAjaWZuZGVmIExJQlhNTDJfQ09NUElMSU5HX01TQ0NERUYKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sQ2hlY2tWZXJzaW9uKGludCB2ZXJzaW9uKTsKK1hNTFBVQkZVTiB2b2lkIHhtbENoZWNrVmVyc2lvbihpbnQgdmVyc2lvbik7CiAjZW5kaWYgLyogTElCWE1MMl9DT01QSUxJTkdfTVNDQ0RFRiAqLwogCiAvKioKQEAgLTMxMyw5ICszMTMsOSBAQAogLyoqCiAgKiBMSUJYTUxfREVCVUdfUlVOVElNRToKICAqCi0gKiBXaGV0aGVyIHRoZSBydW50aW1lIGRlYnVnZ2luZyBpcyBjb25maWd1cmVkIGluCisgKiBSZW1vdmVkCiAgKi8KLSNpZiBAV0lUSF9SVU5fREVCVUdACisjaWYgMAogI2RlZmluZSBMSUJYTUxfREVCVUdfUlVOVElNRQogI2VuZGlmCiAKQEAgLTQwOSwxMiArNDA5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgX19HTlVDX18KLQotLyoqCi0gKiBBVFRSSUJVVEVfVU5VU0VEOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gc2lnbmFsIHRvIEdDQyB1bnVzZWQgZnVuY3Rpb24gcGFyYW1ldGVycwotICovCisvKiogRE9DX0RJU0FCTEUgKi8KIAogI2lmbmRlZiBBVFRSSUJVVEVfVU5VU0VECiAjIGlmICgoX19HTlVDX18gPiAyKSB8fCAoKF9fR05VQ19fID09IDIpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA3KSkpCkBAIC00MjQsMTIgKzQxOSw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotLyoqCi0gKiBMSUJYTUxfQVRUUl9BTExPQ19TSVpFOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoaXMgaXMgYW4gYWxsb2NhdG9yIGZ1bmN0aW9uCi0gKi8KLQogI2lmbmRlZiBMSUJYTUxfQVRUUl9BTExPQ19TSVpFCiAjIGlmICghZGVmaW5lZChfX2NsYW5nX18pICYmICgoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkpKQogIyAgZGVmaW5lIExJQlhNTF9BVFRSX0FMTE9DX1NJWkUoeCkgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZSh4KSkpCkBAIC00NDAsMTIgKzQyOSw2IEBACiAjIGRlZmluZSBMSUJYTUxfQVRUUl9BTExPQ19TSVpFKHgpCiAjZW5kaWYKIAotLyoqCi0gKiBMSUJYTUxfQVRUUl9GT1JNQVQ6Ci0gKgotICogTWFjcm8gdXNlZCB0byBpbmRpY2F0ZSB0byBHQ0MgdGhlIHBhcmFtZXRlciBhcmUgcHJpbnRmIGxpa2UKLSAqLwotCiAjaWZuZGVmIExJQlhNTF9BVFRSX0ZPUk1BVAogIyBpZiAoKF9fR05VQ19fID4gMykgfHwgKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpKQogIyAgZGVmaW5lIExJQlhNTF9BVFRSX0ZPUk1BVChmbXQsYXJncykgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhfX3ByaW50Zl9fLGZtdCxhcmdzKSkpCkBAIC00NTcsNDQgKzQ0MCw2OSBAQAogI2VuZGlmCiAKICNpZm5kZWYgWE1MX0RFUFJFQ0FURUQKLSMgIGlmZGVmIElOX0xJQlhNTAorIyAgaWYgZGVmaW5lZCAoSU5fTElCWE1MKSB8fCAoX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXyA8IDMwMSkKICMgICAgZGVmaW5lIFhNTF9ERVBSRUNBVEVECi0jICBlbHNlCiAvKiBBdmFpbGFibGUgc2luY2UgYXQgbGVhc3QgR0NDIDMuMSAqLworIyAgZWxzZQogIyAgICBkZWZpbmUgWE1MX0RFUFJFQ0FURUQgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18gPj0gNDA2KQorICAjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IChfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fID49IDgwMCkKKyAgICAjZGVmaW5lIFhNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTIFwKKyAgICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdwZWRhbnRpY1wiIikgXAorICAgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XY2FzdC1mdW5jdGlvbi10eXBlXCIiKQorICAjZWxzZQorICAgICNkZWZpbmUgWE1MX0lHTk9SRV9GUFRSX0NBU1RfV0FSTklOR1MgXAorICAgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKKyAgICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3BlZGFudGljXCIiKQorICAjZW5kaWYKKyAgI2RlZmluZSBYTUxfUE9QX1dBUk5JTkdTIFwKKyAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorI2Vsc2UKKyAgI2RlZmluZSBYTUxfSUdOT1JFX0ZQVFJfQ0FTVF9XQVJOSU5HUworICAjZGVmaW5lIFhNTF9QT1BfV0FSTklOR1MKKyNlbmRpZgorCiAjZWxzZSAvKiAhIF9fR05VQ19fICovCi0vKioKLSAqIEFUVFJJQlVURV9VTlVTRUQ6Ci0gKgotICogTWFjcm8gdXNlZCB0byBzaWduYWwgdG8gR0NDIHVudXNlZCBmdW5jdGlvbiBwYXJhbWV0ZXJzCi0gKi8KICNkZWZpbmUgQVRUUklCVVRFX1VOVVNFRAotLyoqCi0gKiBMSUJYTUxfQVRUUl9BTExPQ19TSVpFOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdG8gR0NDIHRoaXMgaXMgYW4gYWxsb2NhdG9yIGZ1bmN0aW9uCi0gKi8KICNkZWZpbmUgTElCWE1MX0FUVFJfQUxMT0NfU0laRSh4KQotLyoqCi0gKiBMSUJYTUxfQVRUUl9GT1JNQVQ6Ci0gKgotICogTWFjcm8gdXNlZCB0byBpbmRpY2F0ZSB0byBHQ0MgdGhlIHBhcmFtZXRlciBhcmUgcHJpbnRmIGxpa2UKLSAqLwogI2RlZmluZSBMSUJYTUxfQVRUUl9GT1JNQVQoZm10LGFyZ3MpCi0vKioKLSAqIFhNTF9ERVBSRUNBVEVEOgotICoKLSAqIE1hY3JvIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGZ1bmN0aW9uLCB2YXJpYWJsZSwgdHlwZSBvciBzdHJ1Y3QgbWVtYmVyCi0gKiBpcyBkZXByZWNhdGVkLgotICovCiAjaWZuZGVmIFhNTF9ERVBSRUNBVEVECi0jZGVmaW5lIFhNTF9ERVBSRUNBVEVECisjICBpZiBkZWZpbmVkIChJTl9MSUJYTUwpIHx8ICFkZWZpbmVkIChfTVNDX1ZFUikKKyMgICAgZGVmaW5lIFhNTF9ERVBSRUNBVEVECisvKiBBdmFpbGFibGUgc2luY2UgVmlzdWFsIFN0dWRpbyAyMDA1ICovCisjICBlbGlmIGRlZmluZWQgKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyMgICAgZGVmaW5lIFhNTF9ERVBSRUNBVEVEIF9fZGVjbHNwZWMoZGVwcmVjYXRlZCkKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjICBkZWZpbmUgWE1MX0lHTk9SRV9GUFRSX0NBU1RfV0FSTklOR1MgX19wcmFnbWEod2FybmluZyhwdXNoKSkKKyNlbHNlCisjICBkZWZpbmUgWE1MX0lHTk9SRV9GUFRSX0NBU1RfV0FSTklOR1MKKyNlbmRpZgorI2lmbmRlZiBYTUxfUE9QX1dBUk5JTkdTCisjICBpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjICAgIGRlZmluZSBYTUxfUE9QX1dBUk5JTkdTIF9fcHJhZ21hKHdhcm5pbmcocG9wKSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFhNTF9QT1BfV0FSTklOR1MKKyMgIGVuZGlmCiAjZW5kaWYKICNlbmRpZiAvKiBfX0dOVUNfXyAqLwogCisjZGVmaW5lIFhNTF9OT19BVFRSCisKKyNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKKyAgI2RlZmluZSBYTUxfREVDTEFSRV9HTE9CQUwobmFtZSwgdHlwZSwgYXR0cnMpIFwKKyAgICBhdHRycyBYTUxQVUJGVU4gdHlwZSAqX18jI25hbWUodm9pZCk7CisgICNkZWZpbmUgWE1MX0dMT0JBTF9NQUNSTyhuYW1lKSAoKl9fIyNuYW1lKCkpCisjZWxzZQorICAjZGVmaW5lIFhNTF9ERUNMQVJFX0dMT0JBTChuYW1lLCB0eXBlLCBhdHRycykgXAorICAgIGF0dHJzIFhNTFBVQlZBUiB0eXBlIG5hbWU7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oIGIvaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmgKaW5kZXggZGQ1YWRkMy4uMzM5ZjI1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmgKQEAgLTI5LDIwICsyOSwyMCBAQAogLyoKICAqIENvbnN0cnVjdG9ycyAmIERlc3RydWN0b3IKICAqLwotICAgIFhNTFBVQkZVTiB4bWxUZXh0V3JpdGVyUHRyIFhNTENBTEwKKyAgICBYTUxQVUJGVU4geG1sVGV4dFdyaXRlclB0cgogICAgICAgICB4bWxOZXdUZXh0V3JpdGVyKHhtbE91dHB1dEJ1ZmZlclB0ciBvdXQpOwotICAgIFhNTFBVQkZVTiB4bWxUZXh0V3JpdGVyUHRyIFhNTENBTEwKKyAgICBYTUxQVUJGVU4geG1sVGV4dFdyaXRlclB0cgogICAgICAgICB4bWxOZXdUZXh0V3JpdGVyRmlsZW5hbWUoY29uc3QgY2hhciAqdXJpLCBpbnQgY29tcHJlc3Npb24pOwotICAgIFhNTFBVQkZVTiB4bWxUZXh0V3JpdGVyUHRyIFhNTENBTEwKKyAgICBYTUxQVUJGVU4geG1sVGV4dFdyaXRlclB0cgogICAgICAgICB4bWxOZXdUZXh0V3JpdGVyTWVtb3J5KHhtbEJ1ZmZlclB0ciBidWYsIGludCBjb21wcmVzc2lvbik7Ci0gICAgWE1MUFVCRlVOIHhtbFRleHRXcml0ZXJQdHIgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiB4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgIHhtbE5ld1RleHRXcml0ZXJQdXNoUGFyc2VyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IGNvbXByZXNzaW9uKTsKLSAgICBYTUxQVUJGVU4geG1sVGV4dFdyaXRlclB0ciBYTUxDQUxMCisgICAgWE1MUFVCRlVOIHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgeG1sTmV3VGV4dFdyaXRlckRvYyh4bWxEb2NQdHIgKiBkb2MsIGludCBjb21wcmVzc2lvbik7Ci0gICAgWE1MUFVCRlVOIHhtbFRleHRXcml0ZXJQdHIgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiB4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgIHhtbE5ld1RleHRXcml0ZXJUcmVlKHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXByZXNzaW9uKTsKLSAgICBYTUxQVUJGVU4gdm9pZCBYTUxDQUxMIHhtbEZyZWVUZXh0V3JpdGVyKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyKTsKKyAgICBYTUxQVUJGVU4gdm9pZCB4bWxGcmVlVGV4dFdyaXRlcih4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CiAKIC8qCiAgKiBGdW5jdGlvbnMKQEAgLTUyLDMwICs1MiwzMCBAQAogLyoKICAqIERvY3VtZW50CiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJTdGFydERvY3VtZW50KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhbmRhbG9uZSk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJFbmREb2N1bWVudCh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyRW5kRG9jdW1lbnQoeG1sVGV4dFdyaXRlclB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyKTsKIAogLyoKICAqIENvbW1lbnRzCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlclN0YXJ0Q29tbWVudCh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyU3RhcnRDb21tZW50KHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyRW5kQ29tbWVudCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyRW5kQ29tbWVudCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDb21tZW50KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCQkJCQlMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRDb21tZW50KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncHRyKQogCQkJCQkgTElCWE1MX0FUVFJfRk9STUFUKDIsMCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZUNvbW1lbnQoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlcldyaXRlQ29tbWVudCh4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQpOwpAQCAtODMsNDcgKzgzLDQ3IEBACiAvKgogICogRWxlbWVudHMKICAqLwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnROUyh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50TlMoeG1sVGV4dFdyaXRlclB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlckVuZEVsZW1lbnQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyRnVsbEVuZEVsZW1lbnQoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlckVuZEVsZW1lbnQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIpOworICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlckZ1bGxFbmRFbGVtZW50KHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlcik7CiAKIC8qCiAgKiBFbGVtZW50cyBjb252ZW5pZW5jeSBmdW5jdGlvbnMKICAqLwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RWxlbWVudCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAkJCQkJTElCWE1MX0FUVFJfRk9STUFUKDMsNCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0RWxlbWVudCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdwdHIpCiAJCQkJCSBMSUJYTUxfQVRUUl9GT1JNQVQoMywwKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlcldyaXRlRWxlbWVudCh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyV3JpdGVFbGVtZW50KHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRFbGVtZW50TlMoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAJCQkJCSAgTElCWE1MX0FUVFJfRk9STUFUKDUsNik7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0RWxlbWVudE5TKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdwdHIpCiAJCQkJCSAgIExJQlhNTF9BVFRSX0ZPUk1BVCg1LDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyV3JpdGVFbGVtZW50TlMoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlcldyaXRlRWxlbWVudE5TKHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LApAQCAtMTQ0LDQ4ICsxNDQsNDggQEAKIC8qCiAgKiBUZXh0CiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdFJhdyh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCQkJCSAgICBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRSYXcoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3B0cikKIAkJCQkgICAgIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlUmF3TGVuKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIGNvbnRlbnQsIGludCBsZW4pOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlUmF3KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIGNvbnRlbnQpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRTdHJpbmcoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0U3RyaW5nKHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmb3JtYXQsIC4uLikKIAkJCQkJCQkgTElCWE1MX0FUVFJfRk9STUFUKDIsMyk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRTdHJpbmcoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFN0cmluZyh4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncHRyKQogCQkJCQkJCSAgTElCWE1MX0FUVFJfRk9STUFUKDIsMCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZVN0cmluZyh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJXcml0ZVN0cmluZyh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZUJhc2U2NCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJXcml0ZUJhc2U2NCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGludCBsZW4pOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyV3JpdGVCaW5IZXgoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyV3JpdGVCaW5IZXgoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgbGVuKTsKIAogLyoKICAqIEF0dHJpYnV0ZXMKICAqLwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlclN0YXJ0QXR0cmlidXRlKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyU3RhcnRBdHRyaWJ1dGVOUyh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyU3RhcnRBdHRyaWJ1dGVOUyh4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwKQEAgLTE5MywzNiArMTkzLDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkkpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyRW5kQXR0cmlidXRlKHhtbFRleHRXcml0ZXJQdHIKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJFbmRBdHRyaWJ1dGUoeG1sVGV4dFdyaXRlclB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlcik7CiAKIC8qCiAgKiBBdHRyaWJ1dGVzIGNvbnZlbmllbmN5IGZ1bmN0aW9ucwogICovCi0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRBdHRyaWJ1dGUoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCQkJCQkgIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDQpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdEF0dHJpYnV0ZSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdwdHIpCiAJCQkJCSAgIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyV3JpdGVBdHRyaWJ1dGUoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlKHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEF0dHJpYnV0ZU5TKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAJCQkJCSAgICBMSUJYTUxfQVRUUl9GT1JNQVQoNSw2KTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRBdHRyaWJ1dGVOUyh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdwdHIpCiAJCQkJCSAgICAgTElCWE1MX0FUVFJfRk9STUFUKDUsMCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZU5TKHhtbFRleHRXcml0ZXJQdHIKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJXcml0ZUF0dHJpYnV0ZU5TKHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LApAQCAtMjQ0LDI1ICsyNDQsMjUgQEAKIC8qCiAgKiBQSSdzCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJTdGFydFBJKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogdGFyZ2V0KTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlckVuZFBJKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyKTsKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJFbmRQSSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CiAKIC8qCiAgKiBQSSBjb252ZW5pZW5jeSBmdW5jdGlvbnMKICAqLwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0UEkoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCQkJCSAgIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDQpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFBJKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdwdHIpCiAJCQkJICAgIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlUEkoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBjb250ZW50KTsKQEAgLTI3Nyw1MiArMjc3LDUyIEBACiAvKgogICogQ0RBVEEKICAqLwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyU3RhcnRDREFUQSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJFbmRDREFUQSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyU3RhcnRDREFUQSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyRW5kQ0RBVEEoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIpOwogCiAvKgogICogQ0RBVEEgY29udmVuaWVuY3kgZnVuY3Rpb25zCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdENEQVRBKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAkJCQkgICAgICBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRDREFUQSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdwdHIpCiAJCQkJICAgICAgIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlQ0RBVEEoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBjb250ZW50KTsKIAogLyoKICAqIERURAogICovCi0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyU3RhcnREVEQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBwdWJpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBzeXNpZCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJFbmREVEQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIpOworICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlckVuZERURCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CiAKIC8qCiAgKiBEVEQgY29udmVuaWVuY3kgZnVuY3Rpb25zCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdERURCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIHB1YmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIHN5c2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAJCQkJICAgIExJQlhNTF9BVFRSX0ZPUk1BVCg1LDYpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdERURCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHViaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIHN5c2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdwdHIpCiAJCQkJICAgICBMSUJYTUxfQVRUUl9GT1JNQVQoNSwwKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZURURCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIHB1YmlkLApAQCAtMzM5LDI3ICszMzksMjcgQEAKIC8qCiAgKiBEVEQgZWxlbWVudCBkZWZpbml0aW9uCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJTdGFydERUREVsZW1lbnQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyRW5kRFRERWxlbWVudCh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyRW5kRFRERWxlbWVudCh4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlcik7CiAKIC8qCiAgKiBEVEQgZWxlbWVudCBkZWZpbml0aW9uIGNvbnZlbmllbmN5IGZ1bmN0aW9ucwogICovCi0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXREVERFbGVtZW50KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCQkJCQkgICBMSUJYTUxfQVRUUl9GT1JNQVQoMyw0KTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXREVERFbGVtZW50KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3B0cikKIAkJCQkJICAgIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxUZXh0V3JpdGVyV3JpdGVEVERFbGVtZW50KHhtbFRleHRXcml0ZXJQdHIKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJXcml0ZURUREVsZW1lbnQoeG1sVGV4dFdyaXRlclB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLApAQCAtMzY5LDI3ICszNjksMjcgQEAKIC8qCiAgKiBEVEQgYXR0cmlidXRlIGxpc3QgZGVmaW5pdGlvbgogICovCi0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyU3RhcnREVERBdHRsaXN0KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlckVuZERUREF0dGxpc3QoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlckVuZERUREF0dGxpc3QoeG1sVGV4dFdyaXRlclB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIpOwogCiAvKgogICogRFREIGF0dHJpYnV0ZSBsaXN0IGRlZmluaXRpb24gY29udmVuaWVuY3kgZnVuY3Rpb25zCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdERUREF0dGxpc3QoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAJCQkJCSAgIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDQpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdERUREF0dGxpc3QoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncHRyKQogCQkJCQkgICAgTElCWE1MX0FUVFJfRk9STUFUKDMsMCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZURUREF0dGxpc3QoeG1sVGV4dFdyaXRlclB0cgorICAgIFhNTFBVQkZVTiBpbnQgeG1sVGV4dFdyaXRlcldyaXRlRFREQXR0bGlzdCh4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCkBAIC0zOTksNDggKzM5OSw0OCBAQAogLyoKICAqIERURCBlbnRpdHkgZGVmaW5pdGlvbgogICovCi0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyU3RhcnREVERFbnRpdHkoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGUsIGNvbnN0IHhtbENoYXIgKiBuYW1lKTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlckVuZERUREVudGl0eSh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyRW5kRFRERW50aXR5KHhtbFRleHRXcml0ZXJQdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIpOwogCiAvKgogICogRFREIGVudGl0eSBkZWZpbml0aW9uIGNvbnZlbmllbmN5IGZ1bmN0aW9ucwogICovCi0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMCisgICAgWE1MUFVCRlVOIGludAogICAgICAgICB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXREVERJbnRlcm5hbEVudGl0eSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAJCQkJCQkgIExJQlhNTF9BVFRSX0ZPUk1BVCg0LDUpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdERUREludGVybmFsRW50aXR5KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3B0cikKIAkJCQkJCSAgIExJQlhNTF9BVFRSX0ZPUk1BVCg0LDApOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlRFRESW50ZXJuYWxFbnRpdHkoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBjb250ZW50KTsKLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJXcml0ZURUREV4dGVybmFsRW50aXR5KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHViaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBzeXNpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5kYXRhaWQpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlRFRERXh0ZXJuYWxFbnRpdHlDb250ZW50cyh4bWxUZXh0V3JpdGVyUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBwdWJpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogc3lzaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRhdGFpZCk7Ci0gICAgWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFRleHRXcml0ZXJXcml0ZURUREVudGl0eSh4bWxUZXh0V3JpdGVyUHRyCisgICAgWE1MUFVCRlVOIGludCB4bWxUZXh0V3JpdGVyV3JpdGVEVERFbnRpdHkoeG1sVGV4dFdyaXRlclB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLCBpbnQgcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKgpAQCAtNDU1LDcgKzQ1NSw3IEBACiAvKgogICogRFREIG5vdGF0aW9uIGRlZmluaXRpb24KICAqLwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlcldyaXRlRFRETm90YXRpb24oeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHViaWQsCkBAIC00NjQsMjAgKzQ2NCwyMCBAQAogLyoKICAqIEluZGVudGF0aW9uCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwKKyAgICBYTUxQVUJGVU4gaW50CiAgICAgICAgIHhtbFRleHRXcml0ZXJTZXRJbmRlbnQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsIGludCBpbmRlbnQpOwotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlclNldEluZGVudFN0cmluZyh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogc3RyKTsKIAotICAgIFhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorICAgIFhNTFBVQkZVTiBpbnQKICAgICAgICAgeG1sVGV4dFdyaXRlclNldFF1b3RlQ2hhcih4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgeG1sQ2hhciBxdW90ZWNoYXIpOwogCiAKIC8qCiAgKiBtaXNjCiAgKi8KLSAgICBYTUxQVUJGVU4gaW50IFhNTENBTEwgeG1sVGV4dFdyaXRlckZsdXNoKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyKTsKKyAgICBYTUxQVUJGVU4gaW50IHhtbFRleHRXcml0ZXJGbHVzaCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwveHBhdGguaCBiL2luY2x1ZGUvbGlieG1sL3hwYXRoLmgKaW5kZXggYmZiYzVkNi4uNmRhZTA3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveHBhdGguaAorKysgYi9pbmNsdWRlL2xpYnhtbC94cGF0aC5oCkBAIC00MDAsNyArNDAwLDcgQEAKICAgICBpbnQgeHB0cjsJCQkJLyogaXQgdGhpcyBhbiBYUG9pbnRlciBleHByZXNzaW9uICovCiAgICAgeG1sTm9kZVB0ciAgICAgICAgIGFuY2VzdG9yOwkvKiB1c2VkIGZvciB3YWxraW5nIHByZWNlZGluZyBheGlzICovCiAKLSAgICBpbnQgICAgICAgICAgICAgIHZhbHVlRnJhbWU7ICAgICAgICAvKiB1c2VkIHRvIGxpbWl0IFBvcCBvbiB0aGUgc3RhY2sgKi8KKyAgICBpbnQgICAgICAgICAgICAgIHZhbHVlRnJhbWU7ICAgICAgICAvKiBhbHdheXMgemVybyBmb3IgY29tcGF0aWJpbGl0eSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDU0LDY4ICs0NTQsNjggQEAKICAgICAoKChucykgPT0gTlVMTCkgfHwgKChucyktPm5vZGVOciA9PSAwKSB8fCAoKG5zKS0+bm9kZVRhYiA9PSBOVUxMKSkKIAogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFBhdGhGcmVlT2JqZWN0CQkoeG1sWFBhdGhPYmplY3RQdHIgb2JqKTsKLVhNTFBVQkZVTiB4bWxOb2RlU2V0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlU2V0UHRyCiAJCSAgICB4bWxYUGF0aE5vZGVTZXRDcmVhdGUJKHhtbE5vZGVQdHIgdmFsKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCSAgICB4bWxYUGF0aEZyZWVOb2RlU2V0TGlzdAkoeG1sWFBhdGhPYmplY3RQdHIgb2JqKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwKK1hNTFBVQkZVTiB2b2lkCiAJCSAgICB4bWxYUGF0aEZyZWVOb2RlU2V0CQkoeG1sTm9kZVNldFB0ciBvYmopOwotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFBhdGhPYmplY3RDb3B5CQkoeG1sWFBhdGhPYmplY3RQdHIgdmFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sWFBhdGhDbXBOb2RlcwkJKHhtbE5vZGVQdHIgbm9kZTEsCiAJCQkJCQkgeG1sTm9kZVB0ciBub2RlMik7CiAvKioKICAqIENvbnZlcnNpb24gZnVuY3Rpb25zIHRvIGJhc2ljIHR5cGVzLgogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFhQYXRoQ2FzdE51bWJlclRvQm9vbGVhbgkoZG91YmxlIHZhbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFhQYXRoQ2FzdFN0cmluZ1RvQm9vbGVhbgkoY29uc3QgeG1sQ2hhciAqIHZhbCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFhQYXRoQ2FzdE5vZGVTZXRUb0Jvb2xlYW4oeG1sTm9kZVNldFB0ciBucyk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFhQYXRoQ2FzdFRvQm9vbGVhbgkoeG1sWFBhdGhPYmplY3RQdHIgdmFsKTsKIAotWE1MUFVCRlVOIGRvdWJsZSBYTUxDQUxMCitYTUxQVUJGVU4gZG91YmxlCiAJCSAgICB4bWxYUGF0aENhc3RCb29sZWFuVG9OdW1iZXIJKGludCB2YWwpOwotWE1MUFVCRlVOIGRvdWJsZSBYTUxDQUxMCitYTUxQVUJGVU4gZG91YmxlCiAJCSAgICB4bWxYUGF0aENhc3RTdHJpbmdUb051bWJlcgkoY29uc3QgeG1sQ2hhciAqIHZhbCk7Ci1YTUxQVUJGVU4gZG91YmxlIFhNTENBTEwKK1hNTFBVQkZVTiBkb3VibGUKIAkJICAgIHhtbFhQYXRoQ2FzdE5vZGVUb051bWJlcgkoeG1sTm9kZVB0ciBub2RlKTsKLVhNTFBVQkZVTiBkb3VibGUgWE1MQ0FMTAorWE1MUFVCRlVOIGRvdWJsZQogCQkgICAgeG1sWFBhdGhDYXN0Tm9kZVNldFRvTnVtYmVyCSh4bWxOb2RlU2V0UHRyIG5zKTsKLVhNTFBVQkZVTiBkb3VibGUgWE1MQ0FMTAorWE1MUFVCRlVOIGRvdWJsZQogCQkgICAgeG1sWFBhdGhDYXN0VG9OdW1iZXIJKHhtbFhQYXRoT2JqZWN0UHRyIHZhbCk7CiAKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkgICAgeG1sWFBhdGhDYXN0Qm9vbGVhblRvU3RyaW5nCShpbnQgdmFsKTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQkgICAgeG1sWFBhdGhDYXN0TnVtYmVyVG9TdHJpbmcJKGRvdWJsZSB2YWwpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCSAgICB4bWxYUGF0aENhc3ROb2RlVG9TdHJpbmcJKHhtbE5vZGVQdHIgbm9kZSk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJICAgIHhtbFhQYXRoQ2FzdE5vZGVTZXRUb1N0cmluZwkoeG1sTm9kZVNldFB0ciBucyk7Ci1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxDaGFyICoKIAkJICAgIHhtbFhQYXRoQ2FzdFRvU3RyaW5nCSh4bWxYUGF0aE9iamVjdFB0ciB2YWwpOwogCi1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCSAgICB4bWxYUGF0aENvbnZlcnRCb29sZWFuCSh4bWxYUGF0aE9iamVjdFB0ciB2YWwpOwotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFBhdGhDb252ZXJ0TnVtYmVyCSh4bWxYUGF0aE9iamVjdFB0ciB2YWwpOwotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFBhdGhDb252ZXJ0U3RyaW5nCSh4bWxYUGF0aE9iamVjdFB0ciB2YWwpOwogCiAvKioKICAqIENvbnRleHQgaGFuZGxpbmcuCiAgKi8KLVhNTFBVQkZVTiB4bWxYUGF0aENvbnRleHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoQ29udGV4dFB0cgogCQkgICAgeG1sWFBhdGhOZXdDb250ZXh0CQkoeG1sRG9jUHRyIGRvYyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFBhdGhGcmVlQ29udGV4dAkJKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sWFBhdGhDb250ZXh0U2V0Q2FjaGUoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJICAgICAgICAgICAgaW50IGFjdGl2ZSwKIAkJCQkJICAgIGludCB2YWx1ZSwKQEAgLTUyMyw0OCArNTIzLDQ4IEBACiAvKioKICAqIEV2YWx1YXRpb24gZnVuY3Rpb25zLgogICovCi1YTUxQVUJGVU4gbG9uZyBYTUxDQUxMCitYTUxQVUJGVU4gbG9uZwogCQkgICAgeG1sWFBhdGhPcmRlckRvY0VsZW1zCSh4bWxEb2NQdHIgZG9jKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQkgICAgeG1sWFBhdGhTZXRDb250ZXh0Tm9kZQkoeG1sTm9kZVB0ciBub2RlLAogCQkJCQkJIHhtbFhQYXRoQ29udGV4dFB0ciBjdHgpOwotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFBhdGhOb2RlRXZhbAkJKHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpzdHIsCiAJCQkJCQkgeG1sWFBhdGhDb250ZXh0UHRyIGN0eCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCSAgICB4bWxYUGF0aEV2YWwJCShjb25zdCB4bWxDaGFyICpzdHIsCiAJCQkJCQkgeG1sWFBhdGhDb250ZXh0UHRyIGN0eCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCSAgICB4bWxYUGF0aEV2YWxFeHByZXNzaW9uCShjb25zdCB4bWxDaGFyICpzdHIsCiAJCQkJCQkgeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCSAgICB4bWxYUGF0aEV2YWxQcmVkaWNhdGUJKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0LAogCQkJCQkJIHhtbFhQYXRoT2JqZWN0UHRyIHJlcyk7CiAvKioKICAqIFNlcGFyYXRlIGNvbXBpbGF0aW9uL2V2YWx1YXRpb24gZW50cnkgcG9pbnRzLgogICovCi1YTUxQVUJGVU4geG1sWFBhdGhDb21wRXhwclB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhDb21wRXhwclB0cgogCQkgICAgeG1sWFBhdGhDb21waWxlCQkoY29uc3QgeG1sQ2hhciAqc3RyKTsKLVhNTFBVQkZVTiB4bWxYUGF0aENvbXBFeHByUHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aENvbXBFeHByUHRyCiAJCSAgICB4bWxYUGF0aEN0eHRDb21waWxlCQkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqc3RyKTsKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJICAgIHhtbFhQYXRoQ29tcGlsZWRFdmFsCSh4bWxYUGF0aENvbXBFeHByUHRyIGNvbXAsCiAJCQkJCQkgeG1sWFBhdGhDb250ZXh0UHRyIGN0eCk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJICAgIHhtbFhQYXRoQ29tcGlsZWRFdmFsVG9Cb29sZWFuKHhtbFhQYXRoQ29tcEV4cHJQdHIgY29tcCwKIAkJCQkJCSB4bWxYUGF0aENvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFBhdGhGcmVlQ29tcEV4cHIJKHhtbFhQYXRoQ29tcEV4cHJQdHIgY29tcCk7CiAjZW5kaWYgLyogTElCWE1MX1hQQVRIX0VOQUJMRUQgKi8KICNpZiBkZWZpbmVkKExJQlhNTF9YUEFUSF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpCiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFhQYXRoSW5pdAkJKHZvaWQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoSXNOYU4JKGRvdWJsZSB2YWwpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoSXNJbmYJKGRvdWJsZSB2YWwpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmggYi9pbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oCmluZGV4IDc2YTZiNDguLmQxYzkwZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmgKKysrIGIvaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBfX1hNTF9YUEFUSF9JTlRFUk5BTFNfSF9fCiAjZGVmaW5lIF9fWE1MX1hQQVRIX0lOVEVSTkFMU19IX18KIAorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KICNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KIApAQCAtMTAwLDE1ICsxMDEsMTUgQEAKICAqLwogI2RlZmluZSB4bWxYUGF0aEdldENvbnRleHROb2RlKGN0eHQpCSgoY3R4dCktPmNvbnRleHQtPm5vZGUpCiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxYUGF0aFBvcEJvb2xlYW4JKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBkb3VibGUgWE1MQ0FMTAorWE1MUFVCRlVOIGRvdWJsZQogCQl4bWxYUGF0aFBvcE51bWJlcgkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHhtbENoYXIgKiBYTUxDQUxMCitYTUxQVUJGVU4geG1sQ2hhciAqCiAJCXhtbFhQYXRoUG9wU3RyaW5nCSh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sTm9kZVNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVNldFB0cgogCQl4bWxYUGF0aFBvcE5vZGVTZXQJKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkICogWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQgKgogCQl4bWxYUGF0aFBvcEV4dGVybmFsCSh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7CiAKIC8qKgpAQCAtMjk3LDcgKzI5OCw3IEBACiAgICAgaWYgKGN0eHQgPT0gTlVMTCkgcmV0dXJuOwkJCQkJCVwKICAgICBpZiAobmFyZ3MgIT0gKHgpKQkJCQkJCQlcCiAgICAgICAgIFhQX0VSUk9SKFhQQVRIX0lOVkFMSURfQVJJVFkpOwkJCQkJXAotICAgIGlmIChjdHh0LT52YWx1ZU5yIDwgY3R4dC0+dmFsdWVGcmFtZSArICh4KSkJCQkJXAorICAgIGlmIChjdHh0LT52YWx1ZU5yIDwgKHgpKQkJCQkJCVwKICAgICAgICAgWFBfRVJST1IoWFBBVEhfU1RBQ0tfRVJST1IpOwogCiAvKioKQEAgLTMzMSw3ICszMzIsNyBAQAogICogVmFyaWFibGUgTG9va3VwIGZvcndhcmRpbmcuCiAgKi8KIAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAl4bWxYUGF0aFJlZ2lzdGVyVmFyaWFibGVMb29rdXAJKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0LAogCQkJCQkgeG1sWFBhdGhWYXJpYWJsZUxvb2t1cEZ1bmMgZiwKIAkJCQkJIHZvaWQgKmRhdGEpOwpAQCAtMzQwLDcgKzM0MSw3IEBACiAgKiBGdW5jdGlvbiBMb29rdXAgZm9yd2FyZGluZy4KICAqLwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCSAgICB4bWxYUGF0aFJlZ2lzdGVyRnVuY0xvb2t1cAkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJCSB4bWxYUGF0aEZ1bmNMb29rdXBGdW5jIGYsCiAJCQkJCSB2b2lkICpmdW5jQ3R4dCk7CkBAIC0zNDgsMjIgKzM0OSwyMiBAQAogLyoKICAqIEVycm9yIHJlcG9ydGluZy4KICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sWFBhdGhlcnJvcgkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQkJIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkJIGludCBsaW5lLAogCQkJCSBpbnQgbm8pOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aEVycgkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQkJIGludCBlcnJvcik7CiAKICNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sWFBhdGhEZWJ1Z0R1bXBPYmplY3QJKEZJTEUgKm91dHB1dCwKIAkJCQkJIHhtbFhQYXRoT2JqZWN0UHRyIGN1ciwKIAkJCQkJIGludCBkZXB0aCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCSAgICB4bWxYUGF0aERlYnVnRHVtcENvbXBFeHByKEZJTEUgKm91dHB1dCwKIAkJCQkJIHhtbFhQYXRoQ29tcEV4cHJQdHIgY29tcCwKIAkJCQkJIGludCBkZXB0aCk7CkBAIC0zNzEsNDggKzM3Miw0OCBAQAogLyoqCiAgKiBOb2RlU2V0IGhhbmRsaW5nLgogICovCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWFBhdGhOb2RlU2V0Q29udGFpbnMJCSh4bWxOb2RlU2V0UHRyIGN1ciwKIAkJCQkJCSB4bWxOb2RlUHRyIHZhbCk7Ci1YTUxQVUJGVU4geG1sTm9kZVNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVNldFB0cgogCQl4bWxYUGF0aERpZmZlcmVuY2UJCSh4bWxOb2RlU2V0UHRyIG5vZGVzMSwKIAkJCQkJCSB4bWxOb2RlU2V0UHRyIG5vZGVzMik7Ci1YTUxQVUJGVU4geG1sTm9kZVNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVNldFB0cgogCQl4bWxYUGF0aEludGVyc2VjdGlvbgkJKHhtbE5vZGVTZXRQdHIgbm9kZXMxLAogCQkJCQkJIHhtbE5vZGVTZXRQdHIgbm9kZXMyKTsKIAotWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIKIAkJeG1sWFBhdGhEaXN0aW5jdFNvcnRlZAkJKHhtbE5vZGVTZXRQdHIgbm9kZXMpOwotWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIKIAkJeG1sWFBhdGhEaXN0aW5jdAkJKHhtbE5vZGVTZXRQdHIgbm9kZXMpOwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWFBhdGhIYXNTYW1lTm9kZXMJCSh4bWxOb2RlU2V0UHRyIG5vZGVzMSwKIAkJCQkJCSB4bWxOb2RlU2V0UHRyIG5vZGVzMik7CiAKLVhNTFBVQkZVTiB4bWxOb2RlU2V0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlU2V0UHRyCiAJCXhtbFhQYXRoTm9kZUxlYWRpbmdTb3J0ZWQJKHhtbE5vZGVTZXRQdHIgbm9kZXMsCiAJCQkJCQkgeG1sTm9kZVB0ciBub2RlKTsKLVhNTFBVQkZVTiB4bWxOb2RlU2V0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlU2V0UHRyCiAJCXhtbFhQYXRoTGVhZGluZ1NvcnRlZAkJKHhtbE5vZGVTZXRQdHIgbm9kZXMxLAogCQkJCQkJIHhtbE5vZGVTZXRQdHIgbm9kZXMyKTsKLVhNTFBVQkZVTiB4bWxOb2RlU2V0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlU2V0UHRyCiAJCXhtbFhQYXRoTm9kZUxlYWRpbmcJCSh4bWxOb2RlU2V0UHRyIG5vZGVzLAogCQkJCQkJIHhtbE5vZGVQdHIgbm9kZSk7Ci1YTUxQVUJGVU4geG1sTm9kZVNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVNldFB0cgogCQl4bWxYUGF0aExlYWRpbmcJCQkoeG1sTm9kZVNldFB0ciBub2RlczEsCiAJCQkJCQkgeG1sTm9kZVNldFB0ciBub2RlczIpOwogCi1YTUxQVUJGVU4geG1sTm9kZVNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVNldFB0cgogCQl4bWxYUGF0aE5vZGVUcmFpbGluZ1NvcnRlZAkoeG1sTm9kZVNldFB0ciBub2RlcywKIAkJCQkJCSB4bWxOb2RlUHRyIG5vZGUpOwotWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIKIAkJeG1sWFBhdGhUcmFpbGluZ1NvcnRlZAkJKHhtbE5vZGVTZXRQdHIgbm9kZXMxLAogCQkJCQkJIHhtbE5vZGVTZXRQdHIgbm9kZXMyKTsKLVhNTFBVQkZVTiB4bWxOb2RlU2V0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxOb2RlU2V0UHRyCiAJCXhtbFhQYXRoTm9kZVRyYWlsaW5nCQkoeG1sTm9kZVNldFB0ciBub2RlcywKIAkJCQkJCSB4bWxOb2RlUHRyIG5vZGUpOwotWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbE5vZGVTZXRQdHIKIAkJeG1sWFBhdGhUcmFpbGluZwkJKHhtbE5vZGVTZXRQdHIgbm9kZXMxLAogCQkJCQkJIHhtbE5vZGVTZXRQdHIgbm9kZXMyKTsKIApAQCAtNDIxLDIwOCArNDIyLDIwOCBAQAogICogRXh0ZW5kaW5nIGEgY29udGV4dC4KICAqLwogCi1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWFBhdGhSZWdpc3Rlck5zCQkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqcHJlZml4LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5zX3VyaSk7Ci1YTUxQVUJGVU4gY29uc3QgeG1sQ2hhciAqIFhNTENBTEwKK1hNTFBVQkZVTiBjb25zdCB4bWxDaGFyICoKIAkJeG1sWFBhdGhOc0xvb2t1cAkJKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKnByZWZpeCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aFJlZ2lzdGVyZWROc0NsZWFudXAJKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0KTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoUmVnaXN0ZXJGdW5jCQkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSB4bWxYUGF0aEZ1bmN0aW9uIGYpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoUmVnaXN0ZXJGdW5jTlMJCSh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5zX3VyaSwKIAkJCQkJCSB4bWxYUGF0aEZ1bmN0aW9uIGYpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoUmVnaXN0ZXJWYXJpYWJsZQkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSB4bWxYUGF0aE9iamVjdFB0ciB2YWx1ZSk7Ci1YTUxQVUJGVU4gaW50IFhNTENBTEwKK1hNTFBVQkZVTiBpbnQKIAkJeG1sWFBhdGhSZWdpc3RlclZhcmlhYmxlTlMJKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0LAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbnNfdXJpLAogCQkJCQkJIHhtbFhQYXRoT2JqZWN0UHRyIHZhbHVlKTsKLVhNTFBVQkZVTiB4bWxYUGF0aEZ1bmN0aW9uIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aEZ1bmN0aW9uCiAJCXhtbFhQYXRoRnVuY3Rpb25Mb29rdXAJCSh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKLVhNTFBVQkZVTiB4bWxYUGF0aEZ1bmN0aW9uIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aEZ1bmN0aW9uCiAJCXhtbFhQYXRoRnVuY3Rpb25Mb29rdXBOUwkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgY29uc3QgeG1sQ2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuc191cmkpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sWFBhdGhSZWdpc3RlcmVkRnVuY3NDbGVhbnVwCSh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoVmFyaWFibGVMb29rdXAJCSh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lKTsKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJeG1sWFBhdGhWYXJpYWJsZUxvb2t1cE5TCSh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCwKIAkJCQkJCSBjb25zdCB4bWxDaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHhtbENoYXIgKm5zX3VyaSk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aFJlZ2lzdGVyZWRWYXJpYWJsZXNDbGVhbnVwKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0KTsKIAogLyoqCiAgKiBVdGlsaXRpZXMgdG8gZXh0ZW5kIFhQYXRoLgogICovCi1YTUxQVUJGVU4geG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIKIAkJICB4bWxYUGF0aE5ld1BhcnNlckNvbnRleHQJKGNvbnN0IHhtbENoYXIgKnN0ciwKIAkJCQkJCSB4bWxYUGF0aENvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aEZyZWVQYXJzZXJDb250ZXh0CSh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7CiAKIC8qIFRPRE86IHJlbWFwIHRvIHhtbFhQYXRoVmFsdWVQb3AgYW5kIFB1c2guICovCi1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXZhbHVlUG9wCQkJKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl2YWx1ZVB1c2gJCQkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgeG1sWFBhdGhPYmplY3RQdHIgdmFsdWUpOwogCi1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoTmV3U3RyaW5nCQkoY29uc3QgeG1sQ2hhciAqdmFsKTsKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJeG1sWFBhdGhOZXdDU3RyaW5nCQkoY29uc3QgY2hhciAqdmFsKTsKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJeG1sWFBhdGhXcmFwU3RyaW5nCQkoeG1sQ2hhciAqdmFsKTsKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJeG1sWFBhdGhXcmFwQ1N0cmluZwkJKGNoYXIgKiB2YWwpOwotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQl4bWxYUGF0aE5ld0Zsb2F0CQkoZG91YmxlIHZhbCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoTmV3Qm9vbGVhbgkJKGludCB2YWwpOwotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQl4bWxYUGF0aE5ld05vZGVTZXQJCSh4bWxOb2RlUHRyIHZhbCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoTmV3VmFsdWVUcmVlCQkoeG1sTm9kZVB0ciB2YWwpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoTm9kZVNldEFkZAkJKHhtbE5vZGVTZXRQdHIgY3VyLAogCQkJCQkJIHhtbE5vZGVQdHIgdmFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxYUGF0aE5vZGVTZXRBZGRVbmlxdWUJKHhtbE5vZGVTZXRQdHIgY3VyLAogCQkJCQkJIHhtbE5vZGVQdHIgdmFsKTsKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTAorWE1MUFVCRlVOIGludAogCQl4bWxYUGF0aE5vZGVTZXRBZGROcwkJKHhtbE5vZGVTZXRQdHIgY3VyLAogCQkJCQkJIHhtbE5vZGVQdHIgbm9kZSwKIAkJCQkJCSB4bWxOc1B0ciBucyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aE5vZGVTZXRTb3J0CQkoeG1sTm9kZVNldFB0ciBzZXQpOwogCi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aFJvb3QJCQkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sWFBhdGhFdmFsRXhwcgkJKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxYUGF0aFBhcnNlTmFtZQkJKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB4bWxDaGFyICogWE1MQ0FMTAorWE1MUFVCRlVOIHhtbENoYXIgKgogCQl4bWxYUGF0aFBhcnNlTkNOYW1lCQkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwogCiAvKgogICogRXhpc3RpbmcgZnVuY3Rpb25zLgogICovCi1YTUxQVUJGVU4gZG91YmxlIFhNTENBTEwKK1hNTFBVQkZVTiBkb3VibGUKIAkJeG1sWFBhdGhTdHJpbmdFdmFsTnVtYmVyCShjb25zdCB4bWxDaGFyICpzdHIpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMCitYTUxQVUJGVU4gaW50CiAJCXhtbFhQYXRoRXZhbHVhdGVQcmVkaWNhdGVSZXN1bHQgKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAogCQkJCQkJIHhtbFhQYXRoT2JqZWN0UHRyIHJlcyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQl4bWxYUGF0aFJlZ2lzdGVyQWxsRnVuY3Rpb25zCSh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4geG1sTm9kZVNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVNldFB0cgogCQl4bWxYUGF0aE5vZGVTZXRNZXJnZQkJKHhtbE5vZGVTZXRQdHIgdmFsMSwKIAkJCQkJCSB4bWxOb2RlU2V0UHRyIHZhbDIpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sWFBhdGhOb2RlU2V0RGVsCQkoeG1sTm9kZVNldFB0ciBjdXIsCiAJCQkJCQkgeG1sTm9kZVB0ciB2YWwpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJeG1sWFBhdGhOb2RlU2V0UmVtb3ZlCQkoeG1sTm9kZVNldFB0ciBjdXIsCiAJCQkJCQkgaW50IHZhbCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoTmV3Tm9kZVNldExpc3QJCSh4bWxOb2RlU2V0UHRyIHZhbCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoV3JhcE5vZGVTZXQJCSh4bWxOb2RlU2V0UHRyIHZhbCk7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCXhtbFhQYXRoV3JhcEV4dGVybmFsCQkodm9pZCAqdmFsKTsKIAotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFhQYXRoRXF1YWxWYWx1ZXMoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFhQYXRoTm90RXF1YWxWYWx1ZXMoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIGludCBYTUxDQUxMIHhtbFhQYXRoQ29tcGFyZVZhbHVlcyh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IGluZiwgaW50IHN0cmljdCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMIHhtbFhQYXRoVmFsdWVGbGlwU2lnbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMIHhtbFhQYXRoQWRkVmFsdWVzKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdWJWYWx1ZXMoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aE11bHRWYWx1ZXMoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aERpdlZhbHVlcyh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMIHhtbFhQYXRoTW9kVmFsdWVzKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKK1hNTFBVQkZVTiBpbnQgeG1sWFBhdGhFcXVhbFZhbHVlcyh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7CitYTUxQVUJGVU4gaW50IHhtbFhQYXRoTm90RXF1YWxWYWx1ZXMoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpOworWE1MUFVCRlVOIGludCB4bWxYUGF0aENvbXBhcmVWYWx1ZXMoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBpbmYsIGludCBzdHJpY3QpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhWYWx1ZUZsaXBTaWduKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoQWRkVmFsdWVzKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoU3ViVmFsdWVzKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoTXVsdFZhbHVlcyh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aERpdlZhbHVlcyh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aE1vZFZhbHVlcyh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCk7CiAKLVhNTFBVQkZVTiBpbnQgWE1MQ0FMTCB4bWxYUGF0aElzTm9kZVR5cGUoY29uc3QgeG1sQ2hhciAqbmFtZSk7CitYTUxQVUJGVU4gaW50IHhtbFhQYXRoSXNOb2RlVHlwZShjb25zdCB4bWxDaGFyICpuYW1lKTsKIAogLyoKICAqIFNvbWUgb2YgdGhlIGF4aXMgbmF2aWdhdGlvbiByb3V0aW5lcy4KICAqLwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTCB4bWxYUGF0aE5leHRTZWxmKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAorWE1MUFVCRlVOIHhtbE5vZGVQdHIgeG1sWFBhdGhOZXh0U2VsZih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwKIAkJCXhtbE5vZGVQdHIgY3VyKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwgeG1sWFBhdGhOZXh0Q2hpbGQoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHRDaGlsZCh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwKIAkJCXhtbE5vZGVQdHIgY3VyKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwgeG1sWFBhdGhOZXh0RGVzY2VuZGFudCh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyIHhtbFhQYXRoTmV4dERlc2NlbmRhbnQoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQl4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMIHhtbFhQYXRoTmV4dERlc2NlbmRhbnRPclNlbGYoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHREZXNjZW5kYW50T3JTZWxmKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAogCQkJeG1sTm9kZVB0ciBjdXIpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTCB4bWxYUGF0aE5leHRQYXJlbnQoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHRQYXJlbnQoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQl4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMIHhtbFhQYXRoTmV4dEFuY2VzdG9yT3JTZWxmKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAorWE1MUFVCRlVOIHhtbE5vZGVQdHIgeG1sWFBhdGhOZXh0QW5jZXN0b3JPclNlbGYoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQl4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMIHhtbFhQYXRoTmV4dEZvbGxvd2luZ1NpYmxpbmcoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHRGb2xsb3dpbmdTaWJsaW5nKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAogCQkJeG1sTm9kZVB0ciBjdXIpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTCB4bWxYUGF0aE5leHRGb2xsb3dpbmcoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHRGb2xsb3dpbmcoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQl4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMIHhtbFhQYXRoTmV4dE5hbWVzcGFjZSh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwKK1hNTFBVQkZVTiB4bWxOb2RlUHRyIHhtbFhQYXRoTmV4dE5hbWVzcGFjZSh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwKIAkJCXhtbE5vZGVQdHIgY3VyKTsKLVhNTFBVQkZVTiB4bWxOb2RlUHRyIFhNTENBTEwgeG1sWFBhdGhOZXh0QXR0cmlidXRlKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAorWE1MUFVCRlVOIHhtbE5vZGVQdHIgeG1sWFBhdGhOZXh0QXR0cmlidXRlKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAogCQkJeG1sTm9kZVB0ciBjdXIpOwotWE1MUFVCRlVOIHhtbE5vZGVQdHIgWE1MQ0FMTCB4bWxYUGF0aE5leHRQcmVjZWRpbmcoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHRQcmVjZWRpbmcoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQl4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMIHhtbFhQYXRoTmV4dEFuY2VzdG9yKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAorWE1MUFVCRlVOIHhtbE5vZGVQdHIgeG1sWFBhdGhOZXh0QW5jZXN0b3IoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQl4bWxOb2RlUHRyIGN1cik7Ci1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMIHhtbFhQYXRoTmV4dFByZWNlZGluZ1NpYmxpbmcoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCitYTUxQVUJGVU4geG1sTm9kZVB0ciB4bWxYUGF0aE5leHRQcmVjZWRpbmdTaWJsaW5nKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAogCQkJeG1sTm9kZVB0ciBjdXIpOwogLyoKICAqIFRoZSBvZmZpY2lhbCBjb3JlIG9mIFhQYXRoIGZ1bmN0aW9ucy4KICAqLwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aExhc3RGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhQb3NpdGlvbkZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aENvdW50RnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7Ci1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMIHhtbFhQYXRoSWRGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhMb2NhbE5hbWVGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhOYW1lc3BhY2VVUklGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdHJpbmdGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdHJpbmdMZW5ndGhGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhDb25jYXRGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhDb250YWluc0Z1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aFN0YXJ0c1dpdGhGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdWJzdHJpbmdGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdWJzdHJpbmdCZWZvcmVGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdWJzdHJpbmdBZnRlckZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aE5vcm1hbGl6ZUZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aFRyYW5zbGF0ZUZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aE5vdEZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aFRydWVGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhGYWxzZUZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aExhbmdGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhOdW1iZXJGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhTdW1GdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhGbG9vckZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aENlaWxpbmdGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhSb3VuZEZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOwotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTCB4bWxYUGF0aEJvb2xlYW5GdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoTGFzdEZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhQb3NpdGlvbkZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhDb3VudEZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhJZEZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhMb2NhbE5hbWVGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoTmFtZXNwYWNlVVJJRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aFN0cmluZ0Z1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhTdHJpbmdMZW5ndGhGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoQ29uY2F0RnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aENvbnRhaW5zRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aFN0YXJ0c1dpdGhGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoU3Vic3RyaW5nRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aFN1YnN0cmluZ0JlZm9yZUZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhTdWJzdHJpbmdBZnRlckZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhOb3JtYWxpemVGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoVHJhbnNsYXRlRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aE5vdEZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhUcnVlRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aEZhbHNlRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aExhbmdGdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoTnVtYmVyRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aFN1bUZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhGbG9vckZ1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworWE1MUFVCRlVOIHZvaWQgeG1sWFBhdGhDZWlsaW5nRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aFJvdW5kRnVuY3Rpb24oeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIGludCBuYXJncyk7CitYTUxQVUJGVU4gdm9pZCB4bWxYUGF0aEJvb2xlYW5GdW5jdGlvbih4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgaW50IG5hcmdzKTsKIAogLyoqCiAgKiBSZWFsbHkgaW50ZXJuYWwgZnVuY3Rpb25zCiAgKi8KLVhNTFBVQkZVTiB2b2lkIFhNTENBTEwgeG1sWFBhdGhOb2RlU2V0RnJlZU5zKHhtbE5zUHRyIG5zKTsKK1hNTFBVQkZVTiB2b2lkIHhtbFhQYXRoTm9kZVNldEZyZWVOcyh4bWxOc1B0ciBucyk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwveHBvaW50ZXIuaCBiL2luY2x1ZGUvbGlieG1sL3hwb2ludGVyLmgKaW5kZXggY2E3YmRiZS4uYTUyNjAwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWJ4bWwveHBvaW50ZXIuaAorKysgYi9pbmNsdWRlL2xpYnhtbC94cG9pbnRlci5oCkBAIC0yOCw3ICsyOCw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZkZWYgTElCWE1MX1hQVFJfTE9DU19FTkFCTEVECisjaWYgZGVmaW5lZChMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQpCiAvKgogICogQSBMb2NhdGlvbiBTZXQKICAqLwpAQCAtNDUsOTAgKzQ1LDkxIEBACiAgKi8KIAogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxMb2NhdGlvblNldFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTG9jYXRpb25TZXRQdHIKIAkJICAgIHhtbFhQdHJMb2NhdGlvblNldENyZWF0ZQkoeG1sWFBhdGhPYmplY3RQdHIgdmFsKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFB0ckZyZWVMb2NhdGlvblNldAkoeG1sTG9jYXRpb25TZXRQdHIgb2JqKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sTG9jYXRpb25TZXRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbExvY2F0aW9uU2V0UHRyCiAJCSAgICB4bWxYUHRyTG9jYXRpb25TZXRNZXJnZQkoeG1sTG9jYXRpb25TZXRQdHIgdmFsMSwKIAkJCQkJCSB4bWxMb2NhdGlvblNldFB0ciB2YWwyKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCSAgICB4bWxYUHRyTmV3UmFuZ2UJCSh4bWxOb2RlUHRyIHN0YXJ0LAogCQkJCQkJIGludCBzdGFydGluZGV4LAogCQkJCQkJIHhtbE5vZGVQdHIgZW5kLAogCQkJCQkJIGludCBlbmRpbmRleCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFB0ck5ld1JhbmdlUG9pbnRzCSh4bWxYUGF0aE9iamVjdFB0ciBzdGFydCwKIAkJCQkJCSB4bWxYUGF0aE9iamVjdFB0ciBlbmQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJICAgIHhtbFhQdHJOZXdSYW5nZU5vZGVQb2ludAkoeG1sTm9kZVB0ciBzdGFydCwKIAkJCQkJCSB4bWxYUGF0aE9iamVjdFB0ciBlbmQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJICAgIHhtbFhQdHJOZXdSYW5nZVBvaW50Tm9kZQkoeG1sWFBhdGhPYmplY3RQdHIgc3RhcnQsCiAJCQkJCQkgeG1sTm9kZVB0ciBlbmQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJICAgIHhtbFhQdHJOZXdSYW5nZU5vZGVzCSh4bWxOb2RlUHRyIHN0YXJ0LAogCQkJCQkJIHhtbE5vZGVQdHIgZW5kKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCSAgICB4bWxYUHRyTmV3TG9jYXRpb25TZXROb2RlcwkoeG1sTm9kZVB0ciBzdGFydCwKIAkJCQkJCSB4bWxOb2RlUHRyIGVuZCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFB0ck5ld0xvY2F0aW9uU2V0Tm9kZVNldCh4bWxOb2RlU2V0UHRyIHNldCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFB0ck5ld1JhbmdlTm9kZU9iamVjdAkoeG1sTm9kZVB0ciBzdGFydCwKIAkJCQkJCSB4bWxYUGF0aE9iamVjdFB0ciBlbmQpOwogWE1MX0RFUFJFQ0FURUQKLVhNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKIAkJICAgIHhtbFhQdHJOZXdDb2xsYXBzZWRSYW5nZQkoeG1sTm9kZVB0ciBzdGFydCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFhQdHJMb2NhdGlvblNldEFkZAkoeG1sTG9jYXRpb25TZXRQdHIgY3VyLAogCQkJCQkJIHhtbFhQYXRoT2JqZWN0UHRyIHZhbCk7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyIFhNTENBTEwKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgogCQkgICAgeG1sWFB0cldyYXBMb2NhdGlvblNldAkoeG1sTG9jYXRpb25TZXRQdHIgdmFsKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFB0ckxvY2F0aW9uU2V0RGVsCSh4bWxMb2NhdGlvblNldFB0ciBjdXIsCiAJCQkJCQkgeG1sWFBhdGhPYmplY3RQdHIgdmFsKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFB0ckxvY2F0aW9uU2V0UmVtb3ZlCSh4bWxMb2NhdGlvblNldFB0ciBjdXIsCiAJCQkJCQkgaW50IHZhbCk7Ci0jZW5kaWYgLyogTElCWE1MX1hQVFJfTE9DU19FTkFCTEVEICovCisjZW5kaWYgLyogZGVmaW5lZChMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQpICovCiAKIC8qCiAgKiBGdW5jdGlvbnMuCiAgKi8KLVhNTFBVQkZVTiB4bWxYUGF0aENvbnRleHRQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoQ29udGV4dFB0cgogCQkgICAgeG1sWFB0ck5ld0NvbnRleHQJCSh4bWxEb2NQdHIgZG9jLAogCQkJCQkJIHhtbE5vZGVQdHIgaGVyZSwKIAkJCQkJCSB4bWxOb2RlUHRyIG9yaWdpbik7Ci1YTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIgWE1MQ0FMTAorWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCiAJCSAgICB4bWxYUHRyRXZhbAkJCShjb25zdCB4bWxDaGFyICpzdHIsCiAJCQkJCQkgeG1sWFBhdGhDb250ZXh0UHRyIGN0eCk7Ci0jaWZkZWYgTElCWE1MX1hQVFJfTE9DU19FTkFCTEVECisKKyNpZiBkZWZpbmVkKExJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRCkKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4gdm9pZCBYTUxDQUxMCitYTUxQVUJGVU4gdm9pZAogCQkgICAgeG1sWFB0clJhbmdlVG9GdW5jdGlvbgkoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsCiAJCQkJCQkgaW50IG5hcmdzKTsKIFhNTF9ERVBSRUNBVEVECi1YTUxQVUJGVU4geG1sTm9kZVB0ciBYTUxDQUxMCitYTUxQVUJGVU4geG1sTm9kZVB0cgogCQkgICAgeG1sWFB0ckJ1aWxkTm9kZUxpc3QJKHhtbFhQYXRoT2JqZWN0UHRyIG9iaik7CiBYTUxfREVQUkVDQVRFRAotWE1MUFVCRlVOIHZvaWQgWE1MQ0FMTAorWE1MUFVCRlVOIHZvaWQKIAkJICAgIHhtbFhQdHJFdmFsUmFuZ2VQcmVkaWNhdGUJKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0KTsKLSNlbmRpZiAvKiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKExJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRCkgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ByaXZhdGUvTWFrZWZpbGUuYW0gYi9pbmNsdWRlL3ByaXZhdGUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljMGJkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcHJpdmF0ZS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE5IEBACitFWFRSQV9ESVNUID0gXAorCWJ1Zi5oIFwKKwlkaWN0LmggXAorCWVuYy5oIFwKKwllbnRpdGllcy5oIFwKKwllcnJvci5oIFwKKwlnbG9iYWxzLmggXAorCWh0bWwuaCBcCisJaW8uaCBcCisJbWVtb3J5LmggXAorCXBhcnNlci5oIFwKKwlyZWdleHAuaCBcCisJc2F2ZS5oIFwKKwlzdHJpbmcuaCBcCisJdGhyZWFkcy5oIFwKKwl0cmVlLmggXAorCXhpbmNsdWRlLmggXAorCXhwYXRoLmggXAorCXh6bGliLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9idWYuaCBiL2luY2x1ZGUvcHJpdmF0ZS9idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmVmNGNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL2J1Zi5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgWE1MX0JVRl9IX1BSSVZBVEVfXworI2RlZmluZSBYTUxfQlVGX0hfUFJJVkFURV9fCisKKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorCitYTUxfSElEREVOIHhtbEJ1ZlB0cgoreG1sQnVmQ3JlYXRlKHZvaWQpOworWE1MX0hJRERFTiB4bWxCdWZQdHIKK3htbEJ1ZkNyZWF0ZVNpemUoc2l6ZV90IHNpemUpOworCitYTUxfSElEREVOIGludAoreG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmLCB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHNjaGVtZSk7CitYTUxfSElEREVOIGludAoreG1sQnVmR2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmKTsKKworWE1MX0hJRERFTiB2b2lkCit4bWxCdWZGcmVlKHhtbEJ1ZlB0ciBidWYpOworWE1MX0hJRERFTiB2b2lkCit4bWxCdWZFbXB0eSh4bWxCdWZQdHIgYnVmKTsKKworLyogc2l6ZV90IHhtbEJ1ZlNocmluayh4bWxCdWZQdHIgYnVmLCBzaXplX3QgbGVuKTsgKi8KK1hNTF9ISURERU4gaW50Cit4bWxCdWZHcm93KHhtbEJ1ZlB0ciBidWYsIGludCBsZW4pOworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZlJlc2l6ZSh4bWxCdWZQdHIgYnVmLCBzaXplX3QgbGVuKTsKKworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZkFkZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pOworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZkNhdCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIpOworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZkNDYXQoeG1sQnVmUHRyIGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKK1hNTF9ISURERU4gaW50Cit4bWxCdWZXcml0ZVF1b3RlZFN0cmluZyh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHJpbmcpOworCitYTUxfSElEREVOIHNpemVfdAoreG1sQnVmQXZhaWwoY29uc3QgeG1sQnVmUHRyIGJ1Zik7CitYTUxfSElEREVOIHNpemVfdAoreG1sQnVmTGVuZ3RoKGNvbnN0IHhtbEJ1ZlB0ciBidWYpOworLyogc2l6ZV90IHhtbEJ1ZlVzZShjb25zdCB4bWxCdWZQdHIgYnVmKTsgKi8KK1hNTF9ISURERU4gaW50Cit4bWxCdWZJc0VtcHR5KGNvbnN0IHhtbEJ1ZlB0ciBidWYpOworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZkFkZExlbih4bWxCdWZQdHIgYnVmLCBzaXplX3QgbGVuKTsKKworLyogY29uc3QgeG1sQ2hhciAqIHhtbEJ1ZkNvbnRlbnQoY29uc3QgeG1sQnVmICpidWYpOyAqLworLyogY29uc3QgeG1sQ2hhciAqIHhtbEJ1ZkVuZCh4bWxCdWZQdHIgYnVmKTsgKi8KKworWE1MX0hJRERFTiB4bWxDaGFyICoKK3htbEJ1ZkRldGFjaCh4bWxCdWZQdHIgYnVmKTsKKworWE1MX0hJRERFTiBzaXplX3QKK3htbEJ1ZkR1bXAoRklMRSAqZmlsZSwgeG1sQnVmUHRyIGJ1Zik7CisKK1hNTF9ISURERU4geG1sQnVmUHRyCit4bWxCdWZGcm9tQnVmZmVyKHhtbEJ1ZmZlclB0ciBidWZmZXIpOworWE1MX0hJRERFTiB4bWxCdWZmZXJQdHIKK3htbEJ1ZkJhY2tUb0J1ZmZlcih4bWxCdWZQdHIgYnVmKTsKK1hNTF9ISURERU4gaW50Cit4bWxCdWZNZXJnZUJ1ZmZlcih4bWxCdWZQdHIgYnVmLCB4bWxCdWZmZXJQdHIgYnVmZmVyKTsKKworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZlJlc2V0SW5wdXQoeG1sQnVmUHRyIGJ1ZiwgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQpOworWE1MX0hJRERFTiBpbnQKK3htbEJ1ZlVwZGF0ZUlucHV0KHhtbEJ1ZlB0ciBidWYsIHhtbFBhcnNlcklucHV0UHRyIGlucHV0LCBzaXplX3QgcG9zKTsKKworI2VuZGlmIC8qIFhNTF9CVUZfSF9QUklWQVRFX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9kaWN0LmggYi9pbmNsdWRlL3ByaXZhdGUvZGljdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGJlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUvZGljdC5oCkBAIC0wLDAgKzEsNzIgQEAKKyNpZm5kZWYgWE1MX0RJQ1RfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX0RJQ1RfSF9QUklWQVRFX18KKworI2luY2x1ZGUgPGxpYnhtbC9kaWN0Lmg+CisKKy8qCisgKiBWYWx1ZXMgYXJlIEFORGVkIHdpdGggMHhGRkZGRkZGRiB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aGVyZQorICogdW5zaWduZWQgaXMgbGFyZ2VyIHRoYW4gMzIgYml0cy4gV2l0aCAzMi1iaXQgdW5zaWduZWQgdmFsdWVzLAorICogbW9kZXJuIGNvbXBpbGVycyBzaG91bGQgb3B0aW1pemUgdGhlIG9wZXJhdGlvbiBhd2F5LgorICovCisKKyNkZWZpbmUgSEFTSF9ST0woeCxuKSAoKHgpIDw8IChuKSB8ICgoeCkgJiAweEZGRkZGRkZGKSA+PiAoMzIgLSAobikpKQorI2RlZmluZSBIQVNIX1JPUih4LG4pICgoKHgpICYgMHhGRkZGRkZGRikgPj4gKG4pIHwgKHgpIDw8ICgzMiAtIChuKSkpCisKKy8qCisgKiBHb29kT0FBVDogT25lIG9mIGEgc21hbGxlc3Qgbm9uLW11bHRpcGxpY2F0aXZlIE9uZS1BdC1hLVRpbWUgZnVuY3Rpb25zCisgKiB0aGF0IHBhc3NlcyBTTUhhc2hlci4KKyAqCisgKiBBdXRob3I6IFNva29sb3YgWXVyYSBha2EgZnVubnktZmFsY29uCisgKi8KKworI2RlZmluZSBIQVNIX0lOSVQoaDEsIGgyLCBzZWVkKSBcCisgICAgZG8geyBcCisgICAgICAgIGgxID0gc2VlZCBeIDB4M2IwMDsgXAorICAgICAgICBoMiA9IEhBU0hfUk9MKHNlZWQsIDE1KTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSEFTSF9VUERBVEUoaDEsIGgyLCBjaCkgXAorICAgIGRvIHsgXAorICAgICAgICBoMSArPSBjaDsgXAorICAgICAgICBoMSArPSBoMSA8PCAzOyBcCisgICAgICAgIGgyICs9IGgxOyBcCisgICAgICAgIGgyID0gSEFTSF9ST0woaDIsIDcpOyBcCisgICAgICAgIGgyICs9IGgyIDw8IDI7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBSZXN1bHQgaXMgaW4gaDIgKi8KKyNkZWZpbmUgSEFTSF9GSU5JU0goaDEsIGgyKSBcCisgICAgZG8geyBcCisgICAgICAgIGgxIF49IGgyOyBcCisgICAgICAgIGgxICs9IEhBU0hfUk9MKGgyLCAxNCk7IFwKKyAgICAgICAgaDIgXj0gaDE7IGgyICs9IEhBU0hfUk9SKGgxLCA2KTsgXAorICAgICAgICBoMSBePSBoMjsgaDEgKz0gSEFTSF9ST0woaDIsIDUpOyBcCisgICAgICAgIGgyIF49IGgxOyBoMiArPSBIQVNIX1JPUihoMSwgOCk7IFwKKyAgICAgICAgaDIgJj0gMHhGRkZGRkZGRjsgXAorICAgIH0gd2hpbGUgKDApCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBoYXNoVmFsdWU7CisgICAgY29uc3QgeG1sQ2hhciAqbmFtZTsKK30geG1sSGFzaGVkU3RyaW5nOworCitYTUxfSElEREVOIHZvaWQKK3htbEluaXREaWN0SW50ZXJuYWwodm9pZCk7CitYTUxfSElEREVOIHZvaWQKK3htbENsZWFudXBEaWN0SW50ZXJuYWwodm9pZCk7CisKK1hNTF9ISURERU4gdW5zaWduZWQKK3htbERpY3RDb21wdXRlSGFzaChjb25zdCB4bWxEaWN0ICpkaWN0LCBjb25zdCB4bWxDaGFyICpzdHJpbmcpOworWE1MX0hJRERFTiB1bnNpZ25lZAoreG1sRGljdENvbWJpbmVIYXNoKHVuc2lnbmVkIHYxLCB1bnNpZ25lZCB2Mik7CitYTUxfSElEREVOIHhtbEhhc2hlZFN0cmluZworeG1sRGljdExvb2t1cEhhc2hlZCh4bWxEaWN0UHRyIGRpY3QsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBsZW4pOworCitYTUxfSElEREVOIHZvaWQKK3htbEluaXRSYW5kb20odm9pZCk7CitYTUxfSElEREVOIHZvaWQKK3htbENsZWFudXBSYW5kb20odm9pZCk7CitYTUxfSElEREVOIHVuc2lnbmVkCit4bWxSYW5kb20odm9pZCk7CisKKyNlbmRpZiAvKiBYTUxfRElDVF9IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL2VuYy5oIGIvaW5jbHVkZS9wcml2YXRlL2VuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTQ5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUvZW5jLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBYTUxfRU5DX0hfUFJJVkFURV9fCisjZGVmaW5lIFhNTF9FTkNfSF9QUklWQVRFX18KKworI2luY2x1ZGUgPGxpYnhtbC9lbmNvZGluZy5oPgorI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisKK1hNTF9ISURERU4gdm9pZAoreG1sSW5pdEVuY29kaW5nSW50ZXJuYWwodm9pZCk7CisKK1hNTF9ISURERU4gaW50Cit4bWxFbmNJbnB1dENodW5rKHhtbENoYXJFbmNvZGluZ0hhbmRsZXIgKmhhbmRsZXIsIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAgICAgICAgICAgaW50ICpvdXRsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgKmlubGVuKTsKK1hNTF9ISURERU4gaW50Cit4bWxDaGFyRW5jSW5wdXQoeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQpOworWE1MX0hJRERFTiBpbnQKK3htbENoYXJFbmNPdXRwdXQoeG1sT3V0cHV0QnVmZmVyUHRyIG91dHB1dCwgaW50IGluaXQpOworCisjZW5kaWYgLyogWE1MX0VOQ19IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL2VudGl0aWVzLmggYi9pbmNsdWRlL3ByaXZhdGUvZW50aXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2YxNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL2VudGl0aWVzLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBYTUxfRU5USVRJRVNfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX0VOVElUSUVTX0hfUFJJVkFURV9fCisKKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKworLyoKKyAqIEVudGl0eSBmbGFncworICoKKyAqIFhNTF9FTlRfUEFSU0VEOiBUaGUgZW50aXR5IHdhcyBwYXJzZWQgYW5kIGBjaGlsZHJlbmAgcG9pbnRzIHRvIHRoZQorICogY29udGVudC4KKyAqIFhNTF9FTlRfQ0hFQ0tFRDogVGhlIGVudGl0eSB3YXMgY2hlY2tlZCBmb3IgbG9vcHMuCisgKi8KKyNkZWZpbmUgWE1MX0VOVF9QQVJTRUQgICAgICAoMTw8MCkKKyNkZWZpbmUgWE1MX0VOVF9DSEVDS0VEICAgICAoMTw8MSkKKyNkZWZpbmUgWE1MX0VOVF9FWFBBTkRJTkcgICAoMTw8MikKKyNkZWZpbmUgWE1MX0VOVF9DSEVDS0VEX0xUICAoMTw8MykKKyNkZWZpbmUgWE1MX0VOVF9DT05UQUlOU19MVCAoMTw8NCkKKworWE1MX0hJRERFTiB4bWxDaGFyICoKK3htbEVuY29kZUF0dHJpYnV0ZUVudGl0aWVzKHhtbERvY1B0ciBkb2MsIGNvbnN0IHhtbENoYXIgKmlucHV0KTsKKworI2VuZGlmIC8qIFhNTF9FTlRJVElFU19IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL2Vycm9yLmggYi9pbmNsdWRlL3ByaXZhdGUvZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjViNzgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL2Vycm9yLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBYTUxfRVJST1JfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX0VSUk9SX0hfUFJJVkFURV9fCisKKyNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorCitzdHJ1Y3QgX3htbE5vZGU7CisKK1hNTF9ISURERU4gdm9pZAorX194bWxSYWlzZUVycm9yKHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgc2NoYW5uZWwsCisgICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBjaGFubmVsLCB2b2lkICpkYXRhLCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgdm9pZCAqbm9kLCBpbnQgZG9tYWluLCBpbnQgY29kZSwgeG1sRXJyb3JMZXZlbCBsZXZlbCwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc3RyMSwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIyLCBjb25zdCBjaGFyICpzdHIzLCBpbnQgaW50MSwgaW50IGNvbCwKKwkgICAgICAgIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMTYsMTcpOworWE1MX0hJRERFTiB2b2lkCitfX3htbFNpbXBsZUVycm9yKGludCBkb21haW4sIGludCBjb2RlLCBzdHJ1Y3QgX3htbE5vZGUgKm5vZGUsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqZXh0cmEpIExJQlhNTF9BVFRSX0ZPUk1BVCg0LDApOworWE1MX0hJRERFTiB2b2lkCit4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgTElCWE1MX0FUVFJfRk9STUFUKDIsMyk7CisKKyNlbmRpZiAvKiBYTUxfRVJST1JfSF9QUklWQVRFX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9nbG9iYWxzLmggYi9pbmNsdWRlL3ByaXZhdGUvZ2xvYmFscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2YxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUvZ2xvYmFscy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBYTUxfR0xPQkFMU19IX1BSSVZBVEVfXworI2RlZmluZSBYTUxfR0xPQkFMU19IX1BSSVZBVEVfXworCitYTUxfSElEREVOIHZvaWQKK3htbEluaXRHbG9iYWxzSW50ZXJuYWwodm9pZCk7CitYTUxfSElEREVOIHZvaWQKK3htbENsZWFudXBHbG9iYWxzSW50ZXJuYWwodm9pZCk7CisKKyNlbmRpZiAvKiBYTUxfR0xPQkFMU19IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL2h0bWwuaCBiL2luY2x1ZGUvcHJpdmF0ZS9odG1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0OTkyOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcHJpdmF0ZS9odG1sLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBYTUxfSFRNTF9IX1BSSVZBVEVfXworI2RlZmluZSBYTUxfSFRNTF9IX1BSSVZBVEVfXworCisjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKworI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKKworWE1MX0hJRERFTiB2b2lkCitfX2h0bWxQYXJzZUNvbnRlbnQodm9pZCAqY3R4KTsKKworI2VuZGlmIC8qIExJQlhNTF9IVE1MX0VOQUJMRUQgKi8KKworI2VuZGlmIC8qIFhNTF9IVE1MX0hfUFJJVkFURV9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9pby5oIGIvaW5jbHVkZS9wcml2YXRlL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0YjIxMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcHJpdmF0ZS9pby5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgWE1MX0lPX0hfUFJJVkFURV9fCisjZGVmaW5lIFhNTF9JT19IX1BSSVZBVEVfXworCisjaW5jbHVkZSA8bGlieG1sL2VuY29kaW5nLmg+CisjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgorCitYTUxfSElEREVOIHZvaWQKK19feG1sSU9FcnIoaW50IGRvbWFpbiwgaW50IGNvZGUsIGNvbnN0IGNoYXIgKmV4dHJhKTsKK1hNTF9ISURERU4gdm9pZAorX194bWxMb2FkZXJFcnIodm9pZCAqY3R4LCBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkgTElCWE1MX0FUVFJfRk9STUFUKDIsMCk7CisKK3htbFBhcnNlcklucHV0QnVmZmVyUHRyCit4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0cmluZyhjb25zdCB4bWxDaGFyICpzdHIpOworCisjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECitYTUxfSElEREVOIHhtbE91dHB1dEJ1ZmZlclB0cgoreG1sQWxsb2NPdXRwdXRCdWZmZXJJbnRlcm5hbCh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIpOworI2VuZGlmCisKKyNlbmRpZiAvKiBYTUxfSU9fSF9QUklWQVRFX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9tZW1vcnkuaCBiL2luY2x1ZGUvcHJpdmF0ZS9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjA0OTdjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL21lbW9yeS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBYTUxfTUVNT1JZX0hfUFJJVkFURV9fCisjZGVmaW5lIFhNTF9NRU1PUllfSF9QUklWQVRFX18KKworWE1MX0hJRERFTiB2b2lkCit4bWxJbml0TWVtb3J5SW50ZXJuYWwodm9pZCk7CitYTUxfSElEREVOIHZvaWQKK3htbENsZWFudXBNZW1vcnlJbnRlcm5hbCh2b2lkKTsKKworI2VuZGlmIC8qIFhNTF9NRU1PUllfSF9QUklWQVRFX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9wYXJzZXIuaCBiL2luY2x1ZGUvcHJpdmF0ZS9wYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQxNzlmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL3BhcnNlci5oCkBAIC0wLDAgKzEsNjYgQEAKKyNpZm5kZWYgWE1MX1BBUlNFUl9IX1BSSVZBVEVfXworI2RlZmluZSBYTUxfUEFSU0VSX0hfUFJJVkFURV9fCisKKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKworLyoqCisgKiBYTUxfVkNUWFRfRFREX1ZBTElEQVRFRDoKKyAqCisgKiBTZXQgYWZ0ZXIgeG1sVmFsaWRhdGVEdGRGaW5hbCB3YXMgY2FsbGVkLgorICovCisjZGVmaW5lIFhNTF9WQ1RYVF9EVERfVkFMSURBVEVEICgxdSA8PCAwKQorLyoqCisgKiBYTUxfVkNUWFRfVVNFX1BDVFhUOgorICoKKyAqIFNldCBpZiB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGlzIHBhcnQgb2YgYSBwYXJzZXIgY29udGV4dC4KKyAqLworI2RlZmluZSBYTUxfVkNUWFRfVVNFX1BDVFhUICgxdSA8PCAxKQorCisjZGVmaW5lIFhNTF9JTlBVVF9IQVNfRU5DT0RJTkcgICAgICAoMXUgPDwgMCkKKyNkZWZpbmUgWE1MX0lOUFVUX0FVVE9fRU5DT0RJTkcgICAgICg3dSA8PCAxKQorI2RlZmluZSBYTUxfSU5QVVRfQVVUT19VVEY4ICAgICAgICAgKDF1IDw8IDEpCisjZGVmaW5lIFhNTF9JTlBVVF9BVVRPX1VURjE2TEUgICAgICAoMnUgPDwgMSkKKyNkZWZpbmUgWE1MX0lOUFVUX0FVVE9fVVRGMTZCRSAgICAgICgzdSA8PCAxKQorI2RlZmluZSBYTUxfSU5QVVRfQVVUT19PVEhFUiAgICAgICAgKDR1IDw8IDEpCisjZGVmaW5lIFhNTF9JTlBVVF9VU0VTX0VOQ19ERUNMICAgICAoMXUgPDwgNCkKKyNkZWZpbmUgWE1MX0lOUFVUX0VOQ09ESU5HX0VSUk9SICAgICgxdSA8PCA1KQorCitYTUxfSElEREVOIHZvaWQKK3htbEVyck1lbW9yeSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IGNoYXIgKmV4dHJhKTsKK1hNTF9ISURERU4gdm9pZAoreG1sRmF0YWxFcnIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxQYXJzZXJFcnJvcnMgZXJyb3IsIGNvbnN0IGNoYXIgKmluZm8pOworWE1MX0hJRERFTiB2b2lkIExJQlhNTF9BVFRSX0ZPUk1BVCgzLDApCit4bWxXYXJuaW5nTXNnKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgeG1sUGFyc2VyRXJyb3JzIGVycm9yLAorICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csIGNvbnN0IHhtbENoYXIgKnN0cjEsIGNvbnN0IHhtbENoYXIgKnN0cjIpOworWE1MX0hJRERFTiB2b2lkCitfX3htbEVyckVuY29kaW5nKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgeG1sUGFyc2VyRXJyb3JzIHhtbGVyciwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLCBjb25zdCB4bWxDaGFyICpzdHIxLAorICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpzdHIyKSBMSUJYTUxfQVRUUl9GT1JNQVQoMywwKTsKK1hNTF9ISURERU4gdm9pZAoreG1sSGFsdFBhcnNlcih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOworWE1MX0hJRERFTiBpbnQKK3htbFBhcnNlckdyb3coeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKK1hNTF9ISURERU4gdm9pZAoreG1sUGFyc2VyU2hyaW5rKHhtbFBhcnNlckN0eHRQdHIgY3R4dCk7CisKK1hNTF9ISURERU4gdm9pZAoreG1sRGV0ZWN0RW5jb2RpbmcoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKK1hNTF9ISURERU4gdm9pZAoreG1sU2V0RGVjbGFyZWRFbmNvZGluZyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbENoYXIgKmVuY29kaW5nKTsKKworWE1MX0hJRERFTiB4bWxQYXJzZXJOc0RhdGEgKgoreG1sUGFyc2VyTnNDcmVhdGUodm9pZCk7CitYTUxfSElEREVOIHZvaWQKK3htbFBhcnNlck5zRnJlZSh4bWxQYXJzZXJOc0RhdGEgKm5zZGIpOworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBTQVggaGFuZGxlcnMgdG8gYXR0YWNoIGV4dHJhIGRhdGEgdG8gbmFtZXNwYWNlcworICogZWZmaWNpZW50bHkgYW5kIHNob3VsZCBiZSBtYWRlIHB1YmxpYy4KKyAqLworWE1MX0hJRERFTiBpbnQKK3htbFBhcnNlck5zVXBkYXRlU2F4KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2F4RGF0YSk7CitYTUxfSElEREVOIHZvaWQgKgoreG1sUGFyc2VyTnNMb29rdXBTYXgoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpwcmVmaXgpOworCisjZW5kaWYgLyogWE1MX1BBUlNFUl9IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL3JlZ2V4cC5oIGIvaW5jbHVkZS9wcml2YXRlL3JlZ2V4cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDI0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUvcmVnZXhwLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFhNTF9SRUdFWFBfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX1JFR0VYUF9IX1BSSVZBVEVfXworCisjaW5jbHVkZSA8bGlieG1sL3htbGF1dG9tYXRhLmg+CisKK1hNTF9ISURERU4gdm9pZAoreG1sQXV0b21hdGFTZXRGbGFncyh4bWxBdXRvbWF0YVB0ciBhbSwgaW50IGZsYWdzKTsKKworI2VuZGlmIC8qIFhNTF9SRUdFWFBfSF9QUklWQVRFX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9zYXZlLmggYi9pbmNsdWRlL3ByaXZhdGUvc2F2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2FhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUvc2F2ZS5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgWE1MX1NBVkVfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX1NBVkVfSF9QUklWQVRFX18KKworI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKworI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAorCitYTUxfSElEREVOIHZvaWQKK3htbEJ1ZkF0dHJTZXJpYWxpemVUeHRDb250ZW50KHhtbEJ1ZlB0ciBidWYsIHhtbERvY1B0ciBkb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxBdHRyUHRyIGF0dHIsIGNvbnN0IHhtbENoYXIgKiBzdHJpbmcpOworWE1MX0hJRERFTiB2b2lkCit4bWxOc0xpc3REdW1wT3V0cHV0KHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsIHhtbE5zUHRyIGN1cik7CisKKyNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KKworI2VuZGlmIC8qIFhNTF9TQVZFX0hfUFJJVkFURV9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS9zdHJpbmcuaCBiL2luY2x1ZGUvcHJpdmF0ZS9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjY1ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL3N0cmluZy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBYTUxfU1RSSU5HX0hfUFJJVkFURV9fCisjZGVmaW5lIFhNTF9TVFJJTkdfSF9QUklWQVRFX18KKworI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKworWE1MX0hJRERFTiB4bWxDaGFyICoKK3htbEVzY2FwZUZvcm1hdFN0cmluZyh4bWxDaGFyICoqbXNnKTsKKworI2VuZGlmIC8qIFhNTF9TVFJJTkdfSF9QUklWQVRFX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpdmF0ZS90aHJlYWRzLmggYi9pbmNsdWRlL3ByaXZhdGUvdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2JjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUvdGhyZWFkcy5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgWE1MX1RIUkVBRFNfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX1RIUkVBRFNfSF9QUklWQVRFX18KKworI2luY2x1ZGUgPGxpYnhtbC90aHJlYWRzLmg+CisKKyNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKKyAgI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAjZGVmaW5lIEhBVkVfUE9TSVhfVEhSRUFEUworICAjZWxpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyAgICAjaW5jbHVkZSA8d2luZG93cy5oPgorICAgICNkZWZpbmUgSEFWRV9XSU4zMl9USFJFQURTCisgICNlbmRpZgorI2VuZGlmCisKKy8qCisgKiB4bWxNdXRleCBhcmUgYSBzaW1wbGUgbXV0dWFsIGV4Y2VwdGlvbiBsb2NrcworICovCitzdHJ1Y3QgX3htbE11dGV4IHsKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKyAgICBwdGhyZWFkX211dGV4X3QgbG9jazsKKyNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCisgICAgQ1JJVElDQUxfU0VDVElPTiBjczsKKyNlbHNlCisgICAgaW50IGVtcHR5OworI2VuZGlmCit9OworCitYTUxfSElEREVOIHZvaWQKK3htbEluaXRNdXRleCh4bWxNdXRleFB0ciBtdXRleCk7CitYTUxfSElEREVOIHZvaWQKK3htbENsZWFudXBNdXRleCh4bWxNdXRleFB0ciBtdXRleCk7CisKKyNlbmRpZiAvKiBYTUxfVEhSRUFEU19IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL3RyZWUuaCBiL2luY2x1ZGUvcHJpdmF0ZS90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1ZTE2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcHJpdmF0ZS90cmVlLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBYTUxfVFJFRV9IX1BSSVZBVEVfXworI2RlZmluZSBYTUxfVFJFRV9IX1BSSVZBVEVfXworCisvKgorICogSW50ZXJuYWwgdmFyaWFibGUgaW5kaWNhdGluZyBpZiBhIGNhbGxiYWNrIGhhcyBiZWVuIHJlZ2lzdGVyZWQgZm9yCisgKiBub2RlIGNyZWF0aW9uL2Rlc3RydWN0aW9uLiBJdCBhdm9pZHMgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZSBpbiBsb2NraW5nCisgKiBmdW5jdGlvbiB3aGlsZSBjaGVja2luZyBpZiB0aGUgY2FsbGJhY2sgZXhpc3RzLgorICovCitYTUxfSElEREVOIGV4dGVybiBpbnQKK19feG1sUmVnaXN0ZXJDYWxsYmFja3M7CisKK1hNTF9ISURERU4geG1sTm9kZVB0cgoreG1sU3RhdGljQ29weU5vZGUoeG1sTm9kZVB0ciBub2RlLCB4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgIGludCBleHRlbmRlZCk7CitYTUxfSElEREVOIHhtbE5vZGVQdHIKK3htbFN0YXRpY0NvcHlOb2RlTGlzdCh4bWxOb2RlUHRyIG5vZGUsIHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgcGFyZW50KTsKKworI2VuZGlmIC8qIFhNTF9UUkVFX0hfUFJJVkFURV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ByaXZhdGUveGluY2x1ZGUuaCBiL2luY2x1ZGUvcHJpdmF0ZS94aW5jbHVkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzc3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ByaXZhdGUveGluY2x1ZGUuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgWE1MX0lOQ0xVREVfSF9QUklWQVRFX18KKyNkZWZpbmUgWE1MX0lOQ0xVREVfSF9QUklWQVRFX18KKworI2luY2x1ZGUgPGxpYnhtbC94aW5jbHVkZS5oPgorCitYTUxfSElEREVOIGludAoreG1sWEluY2x1ZGVTZXRTdHJlYW1pbmdNb2RlKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCBpbnQgbW9kZSk7CisKKyNlbmRpZiAvKiBYTUxfSU5DTFVERV9IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL3hwYXRoLmggYi9pbmNsdWRlL3ByaXZhdGUveHBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZThkNzUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL3hwYXRoLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIFhNTF9YUEFUSF9IX1BSSVZBVEVfXworI2RlZmluZSBYTUxfWFBBVEhfSF9QUklWQVRFX18KKworWE1MX0hJRERFTiB2b2lkCit4bWxJbml0WFBhdGhJbnRlcm5hbCh2b2lkKTsKKworI2VuZGlmIC8qIFhNTF9YUEFUSF9IX1BSSVZBVEVfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL3h6bGliLmggYi9pbmNsdWRlL3ByaXZhdGUveHpsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzMyNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcml2YXRlL3h6bGliLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqCisgKiB4emxpYi5oOiBoZWFkZXIgZm9yIHRoZSBmcm9udCBlbmQgZm9yIHRoZSB0cmFuc3BhcmVudCBzdXBwb3J0IG9mIGx6bWEKKyAqICAgICAgICAgIGNvbXByZXNzaW9uIGF0IHRoZSBJL08gbGF5ZXIKKyAqCisgKiBTZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogQW5kZXJzIEYgQmpvcmtsdW5kIDxhZmJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICovCisKKyNpZm5kZWYgTElCWE1MMl9YWkxJQl9ICisjZGVmaW5lIExJQlhNTDJfWFpMSUJfSAorCisjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKworI2lmZGVmIExJQlhNTF9MWk1BX0VOQUJMRUQKKwordHlwZWRlZiB2b2lkICp4ekZpbGU7ICAgICAgICAgICAvKiBvcGFxdWUgbHptYSBmaWxlIGRlc2NyaXB0b3IgKi8KKworWE1MX0hJRERFTiB4ekZpbGUKK19fbGlieG1sMl94em9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7CitYTUxfSElEREVOIHh6RmlsZQorX19saWJ4bWwyX3h6ZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKTsKK1hNTF9ISURERU4gaW50CitfX2xpYnhtbDJfeHpyZWFkKHh6RmlsZSBmaWxlLCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbik7CitYTUxfSElEREVOIGludAorX19saWJ4bWwyX3h6Y2xvc2UoeHpGaWxlIGZpbGUpOworWE1MX0hJRERFTiBpbnQKK19fbGlieG1sMl94emNvbXByZXNzZWQoeHpGaWxlIGYpOworCisjZW5kaWYgLyogTElCWE1MX0xaTUFfRU5BQkxFRCAqLworCisjZW5kaWYgLyogTElCWE1MMl9YWkxJQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbjMyY29uZmlnLmggYi9pbmNsdWRlL3dpbjMyY29uZmlnLmgKaW5kZXggMWQ4ZmEwOC4uYTI1ZTAzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW4zMmNvbmZpZy5oCisrKyBiL2luY2x1ZGUvd2luMzJjb25maWcuaApAQCAtMSwyNCArMSwyMSBAQAogI2lmbmRlZiBfX0xJQlhNTF9XSU4zMl9DT05GSUdfXwogI2RlZmluZSBfX0xJQlhNTF9XSU4zMl9DT05GSUdfXwogCi0jZGVmaW5lIFNFTkRfQVJHMl9DQVNUCi0jZGVmaW5lIEdFVEhPU1RCWU5BTUVfQVJHX0NBU1QKLQogI2RlZmluZSBIQVZFX1NZU19TVEFUX0gKICNkZWZpbmUgSEFWRV9TVEFUCiAjZGVmaW5lIEhBVkVfRkNOVExfSAogCiAjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE2MDApCi0jZGVmaW5lIEhBVkVfU1RESU5UX0gKKyAgI2RlZmluZSBIQVZFX1NURElOVF9ICiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jaWYgX01TQ19WRVIgPCAxOTAwCi0jZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgotI2VuZGlmCi0jaWYgX01TQ19WRVIgPCAxNTAwCi0jZGVmaW5lIHZzbnByaW50ZihiLGMsZixhKSBfdnNucHJpbnRmKGIsYyxmLGEpCi0jZW5kaWYKKyAgI2lmIF9NU0NfVkVSIDwgMTkwMAorICAgICNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisgICNlbmRpZgorICAjaWYgX01TQ19WRVIgPCAxNTAwCisgICAgI2RlZmluZSB2c25wcmludGYoYixjLGYsYSkgX3ZzbnByaW50ZihiLGMsZixhKQorICAjZW5kaWYKICNlbmRpZgogCiAjZW5kaWYgLyogX19MSUJYTUxfV0lOMzJfQ09ORklHX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvd3NvY2tjb21wYXQuaCBiL2luY2x1ZGUvd3NvY2tjb21wYXQuaAppbmRleCA4NWI5ZTdkLi4xNDFkZTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dzb2NrY29tcGF0LmgKKysrIGIvaW5jbHVkZS93c29ja2NvbXBhdC5oCkBAIC0yNSwxMSArMjUsMTQgQEAKIC8qIENoZWNrIGlmIHdzMnRjcGlwLmggaXMgYSByZWNlbnQgdmVyc2lvbiB3aGljaCBwcm92aWRlcyBnZXRhZGRyaW5mbygpICovCiAjaWYgZGVmaW5lZChHZXRBZGRySW5mbykKICNpbmNsdWRlIDx3c3BpYXBpLmg+Ci0jZGVmaW5lIEhBVkVfR0VUQUREUklORk8KKyNpZm5kZWYgU1VQUE9SVF9JUDYKKyAgI2RlZmluZSBTVVBQT1JUX0lQNgorI2VuZGlmCiAjZW5kaWYKIAotI3VuZGVmIFhNTF9TT0NLTEVOX1QKKyNpZm5kZWYgWE1MX1NPQ0tMRU5fVAogI2RlZmluZSBYTUxfU09DS0xFTl9UIGludAorI2VuZGlmCiAKICNpZm5kZWYgRUNPTk5SRVNFVAogI2RlZmluZSBFQ09OTlJFU0VUIFdTQUVDT05OUkVTRVQKZGlmZiAtLWdpdCBhL2xlZ2FjeS5jIGIvbGVnYWN5LmMKaW5kZXggYmRlMzg1NC4uNGJkMjVmYiAxMDA2NDQKLS0tIGEvbGVnYWN5LmMKKysrIGIvbGVnYWN5LmMKQEAgLTEzMzgsNSArMTMzOCw0MjcgQEAKICAgICAgICAgeG1sU0FYMkNEYXRhQmxvY2soY3R4LCB2YWx1ZSwgbGVuKTsKIH0KIAorLyoKKyAqIG5hbm9mdHAuaAorICovCisKKyNpZm5kZWYgTElCWE1MX0ZUUF9FTkFCTEVECisKKyNpbmNsdWRlIDxsaWJ4bWwvbmFub2Z0cC5oPgorCisvKiogRE9DX0RJU0FCTEUgKi8KKworI2lmZGVmIF9XSU4zMgorICAjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisgICNkZWZpbmUgU09DS0VUIGludAorI2VuZGlmCisKK3R5cGVkZWYgdm9pZAorKCpmdHBMaXN0Q2FsbGJhY2spKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqYXR0cmliLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm93bmVyLCBjb25zdCBjaGFyICpncm91cCwgdW5zaWduZWQgbG9uZyBzaXplLAorICAgICAgICAgICAgICAgICAgIGludCBsaW5rcywgaW50IHllYXIsIGNvbnN0IGNoYXIgKm1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwKKyAgICAgICAgICAgICAgICAgICBpbnQgbWludXRlKTsKKwordHlwZWRlZiB2b2lkCisoKmZ0cERhdGFDYWxsYmFjaykgKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKKworWE1MUFVCRlVOIHZvaWQKK3htbE5hbm9GVFBJbml0KHZvaWQpOworCit2b2lkCit4bWxOYW5vRlRQSW5pdCh2b2lkKSB7Cit9CisKK1hNTFBVQkZVTiB2b2lkCit4bWxOYW5vRlRQQ2xlYW51cCh2b2lkKTsKKwordm9pZAoreG1sTmFub0ZUUENsZWFudXAodm9pZCkgeworfQorCitYTUxQVUJGVU4gdm9pZAoreG1sTmFub0ZUUFByb3h5KGNvbnN0IGNoYXIgKmhvc3QsIGludCBwb3J0LCBjb25zdCBjaGFyICp1c2VyLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3ZCwgaW50IHR5cGUpOworCit2b2lkCit4bWxOYW5vRlRQUHJveHkoY29uc3QgY2hhciAqaG9zdCBBVFRSSUJVVEVfVU5VU0VELCBpbnQgcG9ydCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzZXIgQVRUUklCVVRFX1VOVVNFRCwKKwkgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3ZCBBVFRSSUJVVEVfVU5VU0VELCBpbnQgdHlwZSBBVFRSSUJVVEVfVU5VU0VEKSB7Cit9CisKK1hNTFBVQkZVTiBpbnQKK3htbE5hbm9GVFBVcGRhdGVVUkwodm9pZCAqY3R4LCBjb25zdCBjaGFyICpVUkwpOworCitpbnQKK3htbE5hbm9GVFBVcGRhdGVVUkwodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKlVSTCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworWE1MUFVCRlVOIHZvaWQKK3htbE5hbm9GVFBTY2FuUHJveHkoY29uc3QgY2hhciAqVVJMKTsKKwordm9pZAoreG1sTmFub0ZUUFNjYW5Qcm94eShjb25zdCBjaGFyICpVUkwgQVRUUklCVVRFX1VOVVNFRCkgeworfQorCitYTUxQVUJGVU4gdm9pZCAqCit4bWxOYW5vRlRQTmV3Q3R4dChjb25zdCBjaGFyICpVUkwpOworCit2b2lkKgoreG1sTmFub0ZUUE5ld0N0eHQoY29uc3QgY2hhciAqVVJMIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oTlVMTCk7Cit9CisKK1hNTFBVQkZVTiB2b2lkCit4bWxOYW5vRlRQRnJlZUN0eHQodm9pZCAqY3R4KTsKKwordm9pZAoreG1sTmFub0ZUUEZyZWVDdHh0KHZvaWQgKiBjdHggQVRUUklCVVRFX1VOVVNFRCkgeworfQorCitYTUxQVUJGVU4gaW50Cit4bWxOYW5vRlRQR2V0UmVzcG9uc2Uodm9pZCAqY3R4KTsKKworaW50Cit4bWxOYW5vRlRQR2V0UmVzcG9uc2Uodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitYTUxQVUJGVU4gaW50Cit4bWxOYW5vRlRQQ2hlY2tSZXNwb25zZSh2b2lkICpjdHgpOworCitpbnQKK3htbE5hbm9GVFBDaGVja1Jlc3BvbnNlKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworWE1MUFVCRlVOIGludAoreG1sTmFub0ZUUFF1aXQodm9pZCAqY3R4KTsKKworaW50Cit4bWxOYW5vRlRQUXVpdCh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybigtMSk7Cit9CisKK1hNTFBVQkZVTiBpbnQKK3htbE5hbm9GVFBDb25uZWN0KHZvaWQgKmN0eCk7CisKK2ludAoreG1sTmFub0ZUUENvbm5lY3Qodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitYTUxQVUJGVU4gdm9pZCAqCit4bWxOYW5vRlRQQ29ubmVjdFRvKGNvbnN0IGNoYXIgKnNlcnZlciwgaW50IHBvcnQpOworCit2b2lkKgoreG1sTmFub0ZUUENvbm5lY3RUbyhjb25zdCBjaGFyICpzZXJ2ZXIgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIGludAoreG1sTmFub0ZUUEN3ZCh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CisKK2ludAoreG1sTmFub0ZUUEN3ZCh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGlyZWN0b3J5IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitYTUxQVUJGVU4gaW50Cit4bWxOYW5vRlRQRGVsZSh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKmZpbGUpOworCitpbnQKK3htbE5hbm9GVFBEZWxlKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCBjaGFyICpmaWxlIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitYTUxQVUJGVU4gU09DS0VUCit4bWxOYW5vRlRQR2V0Q29ubmVjdGlvbih2b2lkICpjdHgpOworCitTT0NLRVQKK3htbE5hbm9GVFBHZXRDb25uZWN0aW9uKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworWE1MUFVCRlVOIGludAoreG1sTmFub0ZUUENsb3NlQ29ubmVjdGlvbih2b2lkICpjdHgpOworCitpbnQKK3htbE5hbm9GVFBDbG9zZUNvbm5lY3Rpb24odm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitYTUxQVUJGVU4gaW50Cit4bWxOYW5vRlRQTGlzdCh2b2lkICpjdHgsIGZ0cExpc3RDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlckRhdGEsCisJICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworaW50Cit4bWxOYW5vRlRQTGlzdCh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgIGZ0cExpc3RDYWxsYmFjayBjYWxsYmFjayBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEgQVRUUklCVVRFX1VOVVNFRCwKKwkgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybigtMSk7Cit9CisKK1hNTFBVQkZVTiBTT0NLRVQKK3htbE5hbm9GVFBHZXRTb2NrZXQodm9pZCAqY3R4LCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKK1NPQ0tFVAoreG1sTmFub0ZUUEdldFNvY2tldCh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybigtMSk7Cit9CisKK1hNTFBVQkZVTiBpbnQKK3htbE5hbm9GVFBHZXQodm9pZCAqY3R4LCBmdHBEYXRhQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJEYXRhLAorCSAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworaW50Cit4bWxOYW5vRlRQR2V0KHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICBmdHBEYXRhQ2FsbGJhY2sgY2FsbGJhY2sgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEgQVRUUklCVVRFX1VOVVNFRCwKKwkgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworWE1MUFVCRlVOIGludAoreG1sTmFub0ZUUFJlYWQodm9pZCAqY3R4LCB2b2lkICpkZXN0LCBpbnQgbGVuKTsKKworaW50Cit4bWxOYW5vRlRQUmVhZCh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwgdm9pZCAqZGVzdCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgaW50IGxlbiBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworWE1MUFVCRlVOIHZvaWQgKgoreG1sTmFub0ZUUE9wZW4oY29uc3QgY2hhciAqVVJMKTsKKwordm9pZCoKK3htbE5hbm9GVFBPcGVuKGNvbnN0IGNoYXIgKlVSTCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitYTUxQVUJGVU4gaW50Cit4bWxOYW5vRlRQQ2xvc2Uodm9pZCAqY3R4KTsKKworaW50Cit4bWxOYW5vRlRQQ2xvc2Uodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitYTUxQVUJGVU4gaW50Cit4bWxJT0ZUUE1hdGNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworaW50Cit4bWxJT0ZUUE1hdGNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oMCk7Cit9CisKK1hNTFBVQkZVTiB2b2lkICoKK3htbElPRlRQT3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKK3ZvaWQgKgoreG1sSU9GVFBPcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oTlVMTCk7Cit9CisKK1hNTFBVQkZVTiBpbnQKK3htbElPRlRQUmVhZCh2b2lkICpjb250ZXh0LCBjaGFyICpidWZmZXIsIGludCBsZW4pOworCitpbnQKK3htbElPRlRQUmVhZCh2b2lkICpjb250ZXh0IEFUVFJJQlVURV9VTlVTRUQsIGNoYXIgKmJ1ZmZlciBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgIGludCBsZW4gQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybigtMSk7Cit9CisKK1hNTFBVQkZVTiBpbnQKK3htbElPRlRQQ2xvc2Uodm9pZCAqY29udGV4dCk7CisKK2ludAoreG1sSU9GVFBDbG9zZSh2b2lkICpjb250ZXh0IEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oLTEpOworfQorCisvKiogRE9DX0VOQUJMRSAqLworCisjZW5kaWYgLyogI2lmbmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQgKi8KKworLyoKKyAqIHhwb2ludGVyLmgKKyAqLworCisjaWZuZGVmIExJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRAorCisjaW5jbHVkZSA8bGlieG1sL3hwYXRoLmg+CisjaW5jbHVkZSA8bGlieG1sL3hwYXRoSW50ZXJuYWxzLmg+CisjaW5jbHVkZSA8bGlieG1sL3hwb2ludGVyLmg+CisKKy8qKiBET0NfRElTQUJMRSAqLworCit0eXBlZGVmIHN0cnVjdCBfeG1sTG9jYXRpb25TZXQgKnhtbExvY2F0aW9uU2V0UHRyOworCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZSh4bWxOb2RlUHRyIHN0YXJ0LCBpbnQgc3RhcnRpbmRleCwKKyAgICAgICAgICAgICAgICB4bWxOb2RlUHRyIGVuZCwgaW50IGVuZGluZGV4KTsKKworeG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZSh4bWxOb2RlUHRyIHN0YXJ0IEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgaW50IHN0YXJ0aW5kZXggQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICB4bWxOb2RlUHRyIGVuZCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgIGludCBlbmRpbmRleCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZVBvaW50cyh4bWxYUGF0aE9iamVjdFB0ciBzdGFydCwgeG1sWFBhdGhPYmplY3RQdHIgZW5kKTsKKworeG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZVBvaW50cyh4bWxYUGF0aE9iamVjdFB0ciBzdGFydCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgIHhtbFhQYXRoT2JqZWN0UHRyIGVuZCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZVBvaW50Tm9kZSh4bWxYUGF0aE9iamVjdFB0ciBzdGFydCwgeG1sTm9kZVB0ciBlbmQpOworCit4bWxYUGF0aE9iamVjdFB0cgoreG1sWFB0ck5ld1JhbmdlUG9pbnROb2RlKHhtbFhQYXRoT2JqZWN0UHRyIHN0YXJ0IEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgeG1sTm9kZVB0ciBlbmQgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCit4bWxYUHRyTmV3UmFuZ2VOb2RlUG9pbnQoeG1sTm9kZVB0ciBzdGFydCwgeG1sWFBhdGhPYmplY3RQdHIgZW5kKTsKKworeG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZU5vZGVQb2ludCh4bWxOb2RlUHRyIHN0YXJ0IEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgeG1sWFBhdGhPYmplY3RQdHIgZW5kIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oTlVMTCk7Cit9CisKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgoreG1sWFB0ck5ld1JhbmdlTm9kZXMoeG1sTm9kZVB0ciBzdGFydCwgeG1sTm9kZVB0ciBlbmQpOworCit4bWxYUGF0aE9iamVjdFB0cgoreG1sWFB0ck5ld1JhbmdlTm9kZXMoeG1sTm9kZVB0ciBzdGFydCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgeG1sTm9kZVB0ciBlbmQgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCit4bWxYUHRyTmV3Q29sbGFwc2VkUmFuZ2UoeG1sTm9kZVB0ciBzdGFydCk7CisKK3htbFhQYXRoT2JqZWN0UHRyCit4bWxYUHRyTmV3Q29sbGFwc2VkUmFuZ2UoeG1sTm9kZVB0ciBzdGFydCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitYTUxQVUJGVU4geG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZU5vZGVPYmplY3QoeG1sTm9kZVB0ciBzdGFydCwgeG1sWFBhdGhPYmplY3RQdHIgZW5kKTsKKworeG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdSYW5nZU5vZGVPYmplY3QoeG1sTm9kZVB0ciBzdGFydCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aE9iamVjdFB0ciBlbmQgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIHhtbExvY2F0aW9uU2V0UHRyCit4bWxYUHRyTG9jYXRpb25TZXRDcmVhdGUoeG1sWFBhdGhPYmplY3RQdHIgdmFsKTsKKworeG1sTG9jYXRpb25TZXRQdHIKK3htbFhQdHJMb2NhdGlvblNldENyZWF0ZSh4bWxYUGF0aE9iamVjdFB0ciB2YWwgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIHZvaWQKK3htbFhQdHJMb2NhdGlvblNldEFkZCh4bWxMb2NhdGlvblNldFB0ciBjdXIsIHhtbFhQYXRoT2JqZWN0UHRyIHZhbCk7CisKK3ZvaWQKK3htbFhQdHJMb2NhdGlvblNldEFkZCh4bWxMb2NhdGlvblNldFB0ciBjdXIgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aE9iamVjdFB0ciB2YWwgQVRUUklCVVRFX1VOVVNFRCkgeworfQorCitYTUxQVUJGVU4geG1sTG9jYXRpb25TZXRQdHIKK3htbFhQdHJMb2NhdGlvblNldE1lcmdlKHhtbExvY2F0aW9uU2V0UHRyIHZhbDEsIHhtbExvY2F0aW9uU2V0UHRyIHZhbDIpOworCit4bWxMb2NhdGlvblNldFB0cgoreG1sWFB0ckxvY2F0aW9uU2V0TWVyZ2UoeG1sTG9jYXRpb25TZXRQdHIgdmFsMSBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgeG1sTG9jYXRpb25TZXRQdHIgdmFsMiBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitYTUxQVUJGVU4gdm9pZAoreG1sWFB0ckxvY2F0aW9uU2V0RGVsKHhtbExvY2F0aW9uU2V0UHRyIGN1ciwgeG1sWFBhdGhPYmplY3RQdHIgdmFsKTsKKwordm9pZAoreG1sWFB0ckxvY2F0aW9uU2V0RGVsKHhtbExvY2F0aW9uU2V0UHRyIGN1ciBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgIHhtbFhQYXRoT2JqZWN0UHRyIHZhbCBBVFRSSUJVVEVfVU5VU0VEKSB7Cit9CisKK1hNTFBVQkZVTiB2b2lkCit4bWxYUHRyTG9jYXRpb25TZXRSZW1vdmUoeG1sTG9jYXRpb25TZXRQdHIgY3VyLCBpbnQgdmFsKTsKKwordm9pZAoreG1sWFB0ckxvY2F0aW9uU2V0UmVtb3ZlKHhtbExvY2F0aW9uU2V0UHRyIGN1ciBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwgQVRUUklCVVRFX1VOVVNFRCkgeworfQorCitYTUxQVUJGVU4gdm9pZAoreG1sWFB0ckZyZWVMb2NhdGlvblNldCh4bWxMb2NhdGlvblNldFB0ciBvYmopOworCit2b2lkCit4bWxYUHRyRnJlZUxvY2F0aW9uU2V0KHhtbExvY2F0aW9uU2V0UHRyIG9iaiBBVFRSSUJVVEVfVU5VU0VEKSB7Cit9CisKK1hNTFBVQkZVTiB4bWxYUGF0aE9iamVjdFB0cgoreG1sWFB0ck5ld0xvY2F0aW9uU2V0Tm9kZXMoeG1sTm9kZVB0ciBzdGFydCwgeG1sTm9kZVB0ciBlbmQpOworCit4bWxYUGF0aE9iamVjdFB0cgoreG1sWFB0ck5ld0xvY2F0aW9uU2V0Tm9kZXMoeG1sTm9kZVB0ciBzdGFydCBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sTm9kZVB0ciBlbmQgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCit4bWxYUHRyTmV3TG9jYXRpb25TZXROb2RlU2V0KHhtbE5vZGVTZXRQdHIgc2V0KTsKKworeG1sWFBhdGhPYmplY3RQdHIKK3htbFhQdHJOZXdMb2NhdGlvblNldE5vZGVTZXQoeG1sTm9kZVNldFB0ciBzZXQgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHJldHVybihOVUxMKTsKK30KKworWE1MUFVCRlVOIHhtbFhQYXRoT2JqZWN0UHRyCit4bWxYUHRyV3JhcExvY2F0aW9uU2V0KHhtbExvY2F0aW9uU2V0UHRyIHZhbCk7CisKK3htbFhQYXRoT2JqZWN0UHRyCit4bWxYUHRyV3JhcExvY2F0aW9uU2V0KHhtbExvY2F0aW9uU2V0UHRyIHZhbCBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgcmV0dXJuKE5VTEwpOworfQorCitYTUxQVUJGVU4geG1sTm9kZVB0cgoreG1sWFB0ckJ1aWxkTm9kZUxpc3QoeG1sWFBhdGhPYmplY3RQdHIgb2JqKTsKKworeG1sTm9kZVB0cgoreG1sWFB0ckJ1aWxkTm9kZUxpc3QoeG1sWFBhdGhPYmplY3RQdHIgb2JqIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICByZXR1cm4oTlVMTCk7Cit9CisKK1hNTFBVQkZVTiB2b2lkCit4bWxYUHRyUmFuZ2VUb0Z1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgbmFyZ3MpOworCit2b2lkCit4bWxYUHRyUmFuZ2VUb0Z1bmN0aW9uKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmFyZ3MgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIFhQX0VSUk9SKFhQQVRIX0VYUFJfRVJST1IpOworfQorCisvKiogRE9DX0VOQUJMRSAqLworCisjZW5kaWYgLyogI2lmbmRlZiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQgKi8KKwogI2VuZGlmIC8qIExJQlhNTF9MRUdBQ1lfRU5BQkxFRCAqLwogCmRpZmYgLS1naXQgYS9saWJ4bWwtMi4wLXVuaW5zdGFsbGVkLnBjLmluIGIvbGlieG1sLTIuMC11bmluc3RhbGxlZC5wYy5pbgppbmRleCAwYzMxODZmLi5hN2I4MWZhIDEwMDY0NAotLS0gYS9saWJ4bWwtMi4wLXVuaW5zdGFsbGVkLnBjLmluCisrKyBiL2xpYnhtbC0yLjAtdW5pbnN0YWxsZWQucGMuaW4KQEAgLTcsNyArNyw2IEBACiBOYW1lOiBsaWJYTUwKIFZlcnNpb246IEBWRVJTSU9OQAogRGVzY3JpcHRpb246IGxpYlhNTCBsaWJyYXJ5IHZlcnNpb24yLgotUmVxdWlyZXM6Ci1MaWJzOiAtTCR7bGliZGlyfSBAWE1MX0xJQlNACi1MaWJzLnByaXZhdGU6IEBYTUxfUFJJVkFURV9MSUJTQCBATElCU0AKK1JlcXVpcmVzQFhNTF9QQ19QUklWQVRFQDogQFhNTF9QQ19SRVFVSVJFU0AKK0xpYnM6IC1MJHtsaWJkaXJ9IEBYTUxfTElCU0AgQFhNTF9QQ19MSUJTX1BSSVZBVEVAIEBYTUxfUENfTElCU0AgQExJQlNACiBDZmxhZ3M6IEBYTUxfSU5DTFVERURJUkAgQFhNTF9DRkxBR1NACmRpZmYgLS1naXQgYS9saWJ4bWwtMi4wLnBjLmluIGIvbGlieG1sLTIuMC5wYy5pbgppbmRleCA4OGUzOTYzLi42ZDdiNjJmIDEwMDY0NAotLS0gYS9saWJ4bWwtMi4wLnBjLmluCisrKyBiL2xpYnhtbC0yLjAucGMuaW4KQEAgLTcsNyArNyw2IEBACiBOYW1lOiBsaWJYTUwKIFZlcnNpb246IEBWRVJTSU9OQAogRGVzY3JpcHRpb246IGxpYlhNTCBsaWJyYXJ5IHZlcnNpb24yLgotUmVxdWlyZXM6Ci1MaWJzOiAtTCR7bGliZGlyfSBAWE1MX0xJQlNACi1MaWJzLnByaXZhdGU6IEBYTUxfUFJJVkFURV9MSUJTQCBATElCU0AKK1JlcXVpcmVzQFhNTF9QQ19QUklWQVRFQDogQFhNTF9QQ19SRVFVSVJFU0AKK0xpYnM6IC1MJHtsaWJkaXJ9IEBYTUxfTElCU0AgQFhNTF9QQ19MSUJTX1BSSVZBVEVAIEBYTUxfUENfTElCU0AgQExJQlNACiBDZmxhZ3M6IEBYTUxfSU5DTFVERURJUkAgQFhNTF9DRkxBR1NACmRpZmYgLS1naXQgYS9saWJ4bWwuaCBiL2xpYnhtbC5oCmluZGV4IGZmOTU2NDEuLjBkMTZjNDMgMTAwNjQ0Ci0tLSBhL2xpYnhtbC5oCisrKyBiL2xpYnhtbC5oCkBAIC0xNCwxMDQgKzE0LDU4IEBACiAgKiBEbyBub3QgYWRkIGFueSAjaW5jbHVkZSBkaXJlY3RpdmVzIGFib3ZlIHRoaXMgYmxvY2suCiAgKi8KICNpZm5kZWYgTk9fTEFSR0VGSUxFX1NPVVJDRQotI2lmbmRlZiBfTEFSR0VGSUxFX1NPVVJDRQotI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQotI2VuZGlmCi0jaWZuZGVmIF9GSUxFX09GRlNFVF9CSVRTCi0jZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0Ci0jZW5kaWYKKyAgI2lmbmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorICAgICNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyAgI2VuZGlmCisgICNpZm5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyAgICAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisgICNlbmRpZgogI2VuZGlmCiAKIC8qCi0gKiBDdXJyZW50bHkgc3VwcG9ydGVkIHBsYXRmb3JtcyB1c2UgZWl0aGVyIGF1dG9jb25mIG9yCi0gKiBjb3B5IHRvIGNvbmZpZy5oIG93biAicHJlc2V0IiBjb25maWd1cmF0aW9uIGZpbGUuCi0gKiBBcyByZXN1bHQgaWZkZWYgSEFWRV9DT05GSUdfSCBpcyBvbWl0dGVkIGhlcmUuCisgKiBUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNvbnRhaW4gcHJpdmF0ZQorICogYW5kIHB1YmxpYyBidWlsZCBjb25maWd1cmF0aW9uLgogICovCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CiAKKy8qCisgKiBEdWUgdG8gc29tZSBBdXRvdG9vbHMgbGltaXRhdGlvbnMsIHRoaXMgdmFyaWFibGUgbXVzdCBiZSBwYXNzZWQgYXMKKyAqIGNvbXBpbGVyIGZsYWcuIERlZmluZSBhIGRlZmF1bHQgdmFsdWUgaWYgdGhlIG1hY3JvIHdhc24ndCBzZXQgYnkgdGhlCisgKiBidWlsZCBzeXN0ZW0uCisgKi8KICNpZm5kZWYgU1lTQ09ORkRJUgogICAjZGVmaW5lIFNZU0NPTkZESVIgIi9ldGMiCiAjZW5kaWYKICNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CiAKLSNpZiBkZWZpbmVkKF9fTHlueF9fKQotI2luY2x1ZGUgPHN0ZGlvLmg+IC8qIHB1bGwgZGVmaW5pdGlvbiBvZiBzaXplX3QgKi8KLSNpbmNsdWRlIDx2YXJhcmdzLmg+Ci1pbnQgc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKLWludCB2ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisjaWZkZWYgV0lUSF9UUklPCisgICNkZWZpbmUgVFJJT19SRVBMQUNFX1NURElPCisgICNpbmNsdWRlICJ0cmlvLmgiCiAjZW5kaWYKIAotI2lmbmRlZiBXSVRIX1RSSU8KLSNpbmNsdWRlIDxzdGRpby5oPgorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgXAorICAgICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmIFwKKyAgICAoZGVmaW5lZChfX2NsYW5nX18pIHx8IFwKKyAgICAgKGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KSkpCisgICNkZWZpbmUgWE1MX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCiAjZWxzZQotLyoqCi0gKiBUUklPX1JFUExBQ0VfU1RESU86Ci0gKgotICogVGhpcyBtYWNybyBpcyBkZWZpbmVkIGlmIHRoZSB0cmlvIHN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9ucyBhcmUgdG8KLSAqIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBzdGRpbyBvbmVzLgotICovCi0jZGVmaW5lIFRSSU9fUkVQTEFDRV9TVERJTwotI2luY2x1ZGUgInRyaW8uaCIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IFwKLSAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18gPj0gNDA2KSkKLSNkZWZpbmUgWE1MX0lHTk9SRV9QRURBTlRJQ19XQVJOSU5HUyBcCi0gICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKLSAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdwZWRhbnRpY1wiIikKLSNkZWZpbmUgWE1MX1BPUF9XQVJOSU5HUyBcCi0gICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0jZGVmaW5lIFhNTF9JR05PUkVfUEVEQU5USUNfV0FSTklOR1MKLSNkZWZpbmUgWE1MX1BPUF9XQVJOSU5HUworICAjZGVmaW5lIFhNTF9ISURERU4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IFwKICAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDgpKQotI2RlZmluZSBBVFRSSUJVVEVfTk9fU0FOSVRJWkUoYXJnKSBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZShhcmcpKSkKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fU0FOSVRJWkUoYXJnKSBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZShhcmcpKSkKICNlbHNlCi0jZGVmaW5lIEFUVFJJQlVURV9OT19TQU5JVElaRShhcmcpCisgICNkZWZpbmUgQVRUUklCVVRFX05PX1NBTklUSVpFKGFyZykKICNlbmRpZgogCi0vKgotICogSW50ZXJuYWwgdmFyaWFibGUgaW5kaWNhdGluZyBpZiBhIGNhbGxiYWNrIGhhcyBiZWVuIHJlZ2lzdGVyZWQgZm9yCi0gKiBub2RlIGNyZWF0aW9uL2Rlc3RydWN0aW9uLiBJdCBhdm9pZHMgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZSBpbiBsb2NraW5nCi0gKiBmdW5jdGlvbiB3aGlsZSBjaGVja2luZyBpZiB0aGUgY2FsbGJhY2sgZXhpc3RzLgotICovCi1leHRlcm4gaW50IF9feG1sUmVnaXN0ZXJDYWxsYmFja3M7Ci0vKgotICogaW50ZXJuYWwgZXJyb3IgcmVwb3J0aW5nIHJvdXRpbmVzLCBzaGFyZWQgYnV0IG5vdCBwYXJ0IG9mIHRoZSBBUEkuCi0gKi8KLXZvaWQgX194bWxJT0VycihpbnQgZG9tYWluLCBpbnQgY29kZSwgY29uc3QgY2hhciAqZXh0cmEpOwotdm9pZCBfX3htbExvYWRlckVycih2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqZmlsZW5hbWUpIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDApOwotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLS8qCi0gKiBpbnRlcm5hbCBmdW5jdGlvbiBvZiBIVE1MIHBhcnNlciBuZWVkZWQgZm9yIHhtbFBhcnNlSW5Ob2RlQ29udGV4dAotICogYnV0IG5vdCBwYXJ0IG9mIHRoZSBBUEkKLSAqLwotdm9pZCBfX2h0bWxQYXJzZUNvbnRlbnQodm9pZCAqY3R4KTsKKyNpZmRlZiBfX2NsYW5nX18KKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fU0FOSVRJWkVfSU5URUdFUiBcCisgICAgQVRUUklCVVRFX05PX1NBTklUSVpFKCJ1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IikgXAorICAgIEFUVFJJQlVURV9OT19TQU5JVElaRSgidW5zaWduZWQtc2hpZnQtYmFzZSIpCisjZWxzZQorICAjZGVmaW5lIEFUVFJJQlVURV9OT19TQU5JVElaRV9JTlRFR0VSCiAjZW5kaWYKIAotLyoKLSAqIGludGVybmFsIGdsb2JhbCBpbml0aWFsaXphdGlvbiBjcml0aWNhbCBzZWN0aW9uIHJvdXRpbmVzLgotICovCi12b2lkIF9feG1sR2xvYmFsSW5pdE11dGV4TG9jayh2b2lkKTsKLXZvaWQgX194bWxHbG9iYWxJbml0TXV0ZXhVbmxvY2sodm9pZCk7Ci12b2lkIF9feG1sR2xvYmFsSW5pdE11dGV4RGVzdHJveSh2b2lkKTsKLQotaW50IF9feG1sSW5pdGlhbGl6ZURpY3Qodm9pZCk7Ci0KLS8qCi0gKiBpbnRlcm5hbCB0aHJlYWQgc2FmZSByYW5kb20gZnVuY3Rpb24KLSAqLwotaW50IF9feG1sUmFuZG9tKHZvaWQpOwotCi1YTUxQVUJGVU4geG1sQ2hhciAqIFhNTENBTEwgeG1sRXNjYXBlRm9ybWF0U3RyaW5nKHhtbENoYXIgKiptc2cpOwotaW50IHhtbElucHV0UmVhZENhbGxiYWNrTm9wKHZvaWQgKmNvbnRleHQsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbik7Ci0KLSNpZiAhZGVmaW5lZChQSUMpICYmICFkZWZpbmVkKE5PTElCVE9PTCkgJiYgIWRlZmluZWQoTElCWE1MX1NUQVRJQykKLSMgIGRlZmluZSBMSUJYTUxfU1RBVElDCi0jZW5kaWYKICNlbmRpZiAvKiAhIF9fWE1MX0xJQlhNTF9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnhtbC5tNCBiL2xpYnhtbC5tNAppbmRleCBmYzc3OTBjLi4yN2FkODRkIDEwMDY0NAotLS0gYS9saWJ4bWwubTQKKysrIGIvbGlieG1sLm00CkBAIC0xLDE5MSArMSwxNCBAQAotIyBDb25maWd1cmUgcGF0aHMgZm9yIExJQlhNTDIKLSMgU2ltb24gSm9zZWZzc29uIDIwMjAtMDItMTIKLSMgRml4IGF1dG9jb25mIDIuNzArIHdhcm5pbmdzCi0jIE1pa2UgSG9tbWV5IDIwMDQtMDYtMTkKLSMgdXNlIENQUEZMQUdTIGluc3RlYWQgb2YgQ0ZMQUdTCi0jIFRvc2hpbyBLdXJhdG9taSAyMDAxLTA0LTIxCi0jIEFkYXB0ZWQgZnJvbToKLSMgQ29uZmlndXJlIHBhdGhzIGZvciBHTElCCi0jIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCi0KIGRubCBBTV9QQVRIX1hNTDIoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQogZG5sIFRlc3QgZm9yIFhNTCwgYW5kIGRlZmluZSBYTUxfQ1BQRkxBR1MgYW5kIFhNTF9MSUJTCiBkbmwKLUFDX0RFRlVOKFtBTV9QQVRIX1hNTDJdLFsgCi1BQ19BUkdfV0lUSCh4bWwtcHJlZml4LAotICAgICAgICAgICAgWyAgLS13aXRoLXhtbC1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIGxpYnhtbCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCi0gICAgICAgICAgICB4bWxfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCB4bWxfY29uZmlnX3ByZWZpeD0iIikKLUFDX0FSR19XSVRIKHhtbC1leGVjLXByZWZpeCwKLSAgICAgICAgICAgIFsgIC0td2l0aC14bWwtZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIGxpYnhtbCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCi0gICAgICAgICAgICB4bWxfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIHhtbF9jb25maWdfZXhlY19wcmVmaXg9IiIpCi1BQ19BUkdfRU5BQkxFKHhtbHRlc3QsCi0gICAgICAgICAgICAgIFsgIC0tZGlzYWJsZS14bWx0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBMSUJYTUwgcHJvZ3JhbV0sLAotICAgICAgICAgICAgICBlbmFibGVfeG1sdGVzdD15ZXMpCitBQ19ERUZVTihbQU1fUEFUSF9YTUwyXSxbCisgIG00X3dhcm4oW29ic29sZXRlXSwgW0FNX1BBVEhfWE1MMiBpcyBkZXByZWNhdGVkLCB1c2UgUEtHX0NIRUNLX01PRFVMRVMgaW5zdGVhZF0pCisgIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQogCi0gIGlmIHRlc3QgeCR4bWxfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCi0gICAgIHhtbF9jb25maWdfYXJncz0iJHhtbF9jb25maWdfYXJncyIKLSAgICAgaWYgdGVzdCB4JHtYTUwyX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCi0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi94bWwyLWNvbmZpZwotICAgICBmaQotICBmaQotICBpZiB0ZXN0IHgkeG1sX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KLSAgICAgeG1sX2NvbmZpZ19hcmdzPSIkeG1sX2NvbmZpZ19hcmdzIC0tcHJlZml4PSR4bWxfY29uZmlnX3ByZWZpeCIKLSAgICAgaWYgdGVzdCB4JHtYTUwyX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCi0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX3ByZWZpeC9iaW4veG1sMi1jb25maWcKLSAgICAgZmkKLSAgZmkKKyAgdmVyZGVwPWlmZWxzZShbJDFdLCBbXSwgW10sIFsiPj0gJDEiXSkKKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MLCBbbGlieG1sLTIuMCAkdmVyZGVwXSwgWyQyXSwgWyQzXSkKIAotICBBQ19QQVRIX1BST0coWE1MMl9DT05GSUcsIHhtbDItY29uZmlnLCBubykKLSAgbWluX3htbF92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMi4wLjAsWyQxXSkKLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJ4bWwgLSB2ZXJzaW9uID49ICRtaW5feG1sX3ZlcnNpb24pCi0gIG5vX3htbD0iIgotICBpZiB0ZXN0ICIkWE1MMl9DT05GSUciID0gIm5vIiA7IHRoZW4KLSAgICBub194bWw9eWVzCi0gIGVsc2UKLSAgICBYTUxfQ1BQRkxBR1M9YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAotICAgIFhNTF9MSUJTPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLWxpYnNgCi0gICAgeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAotICAgIHhtbF9jb25maWdfbWlub3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAotICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDIvJ2AKLSAgICB4bWxfY29uZmlnX21pY3JvX3ZlcnNpb249YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCi0gICAgaWYgdGVzdCAieCRlbmFibGVfeG1sdGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWE1MX0NQUEZMQUdTIgotICAgICAgTElCUz0iJFhNTF9MSUJTICRMSUJTIgotZG5sCi1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgbGlieG1sIGlzIHN1ZmZpY2llbnRseSBuZXcuCi1kbmwgKEFsc28gc2FuaXR5IGNoZWNrcyB0aGUgcmVzdWx0cyBvZiB4bWwyLWNvbmZpZyB0byBzb21lIGV4dGVudCkKLWRubAotICAgICAgcm0gLWYgY29uZi54bWx0ZXN0Ci0gICAgICBBQ19SVU5fSUZFTFNFKAotICAgICAgICAgICAgW0FDX0xBTkdfU09VUkNFKFtbCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgotCi1pbnQgCi1tYWluKCkKLXsKLSAgaW50IHhtbF9tYWpvcl92ZXJzaW9uLCB4bWxfbWlub3JfdmVyc2lvbiwgeG1sX21pY3JvX3ZlcnNpb247Ci0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOwotICBjaGFyICp0bXBfdmVyc2lvbjsKLQotICBzeXN0ZW0oInRvdWNoIGNvbmYueG1sdGVzdCIpOwotCi0gIC8qIENhcHR1cmUgeG1sMi1jb25maWcgb3V0cHV0IHZpYSBhdXRvY29uZi9jb25maWd1cmUgdmFyaWFibGVzICovCi0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLwotICB0bXBfdmVyc2lvbiA9IChjaGFyICopc3RyZHVwKCIkbWluX3htbF92ZXJzaW9uIik7Ci0gIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nIGZyb20geG1sMi1jb25maWdcbiIsICIkbWluX3htbF92ZXJzaW9uIik7Ci0gICAgIGV4aXQoMSk7Ci0gICB9Ci0gICBmcmVlKHRtcF92ZXJzaW9uKTsKLQotICAgLyogQ2FwdHVyZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFkZXIgZmlsZXMgKi8KLSAgIHRtcF92ZXJzaW9uID0gKGNoYXIgKilzdHJkdXAoTElCWE1MX0RPVFRFRF9WRVJTSU9OKTsKLSAgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZ4bWxfbWFqb3JfdmVyc2lvbiwgJnhtbF9taW5vcl92ZXJzaW9uLCAmeG1sX21pY3JvX3ZlcnNpb24pICE9IDMpIHsKLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nIGZyb20gbGlieG1sIGluY2x1ZGVzXG4iLCAiTElCWE1MX0RPVFRFRF9WRVJTSU9OIik7Ci0gICAgIGV4aXQoMSk7Ci0gICB9Ci0gICBmcmVlKHRtcF92ZXJzaW9uKTsKLQotIC8qIENvbXBhcmUgeG1sMi1jb25maWcgb3V0cHV0IHRvIHRoZSBsaWJ4bWwgaGVhZGVycyAqLwotICBpZiAoKHhtbF9tYWpvcl92ZXJzaW9uICE9ICR4bWxfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8Ci0gICAgICAoeG1sX21pbm9yX3ZlcnNpb24gIT0gJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKLSAgICAgICh4bWxfbWljcm9fdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKLSAgICB7Ci0gICAgICBwcmludGYoIioqKiBsaWJ4bWwgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCi0gICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKLSAgICAgIHByaW50ZigiKioqIHhtbDItY29uZmlnICh2ZXJzaW9uICVkLiVkLiVkKVxuIiwKLSAgICAgICAgICR4bWxfY29uZmlnX21ham9yX3ZlcnNpb24sICR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24sICR4bWxfY29uZmlnX21pY3JvX3ZlcnNpb24pOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfSAKLS8qIENvbXBhcmUgdGhlIGhlYWRlcnMgdG8gdGhlIGxpYnJhcnkgdG8gbWFrZSBzdXJlIHdlIG1hdGNoICovCi0gIC8qIExlc3MgdGhhbiBpZGVhbCAtLSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCByZXR1cm4gdmFsdWUgZmVlZGJhY2ssIAotICAgKiBvbmx5IGV4aXRzIGlmIHRoZXJlJ3MgYSBzZXJpb3VzIG1pc21hdGNoIGJldHdlZW4gaGVhZGVyIGFuZCBsaWJyYXJ5LgotICAgKi8KLSAgICBMSUJYTUxfVEVTVF9WRVJTSU9OOwotCi0gICAgLyogVGVzdCB0aGF0IHRoZSBsaWJyYXJ5IGlzIGdyZWF0ZXIgdGhhbiBvdXIgbWluaW11bSB2ZXJzaW9uICovCi0gICAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAotICAgICAgICAoKHhtbF9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoeG1sX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8Ci0gICAgICAgICgoeG1sX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICh4bWxfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYKLSAgICAgICAgKHhtbF9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgIH0KLSAgICAgZWxzZQotICAgICAgewotICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIGxpYnhtbCAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCi0gICAgICAgICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKLSAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIGxpYnhtbCBuZXdlciB0aGFuICVkLiVkLiVkLlxuIiwKLSAgICAgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7Ci0gICAgICAgIHByaW50ZigiKioqXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOwotICAgICAgICBwcmludGYoIioqKiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB3cm9uZyBjb3B5IG9mIHRoZSB4bWwyLWNvbmZpZyBzaGVsbCBzY3JpcHQgaXNcbiIpOwotICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOwotICAgICAgICBwcmludGYoIioqKiBvZiBMSUJYTUwsIGJ1dCB5b3UgY2FuIGFsc28gc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB0byBwb2ludCB0byB0aGVcbiIpOwotICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgeG1sMi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOwotICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOwotICAgIH0KLSAgcmV0dXJuIDE7Ci19Ci1dXSldLCwgbm9feG1sPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCi0gICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgotICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAieCRub194bWwiID0geCA7IHRoZW4KLSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMgKHZlcnNpb24gJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbi4keG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uLiR4bWxfY29uZmlnX21pY3JvX3ZlcnNpb24pKQotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCi0gIGVsc2UKLSAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgaWYgdGVzdCAiJFhNTDJfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgICAgZWNobyAiKioqIFRoZSB4bWwyLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IExJQlhNTCBjb3VsZCBub3QgYmUgZm91bmQiCi0gICAgICAgZWNobyAiKioqIElmIGxpYnhtbCB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCi0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCi0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byB4bWwyLWNvbmZpZy4iCi0gICAgIGVsc2UKLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYueG1sdGVzdCA7IHRoZW4KLSAgICAgICAgOgotICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsaWJ4bWwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCi0gICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWE1MX0NQUEZMQUdTIgotICAgICAgICAgIExJQlM9IiRMSUJTICRYTUxfTElCUyIKLQkgIEFDX0xJTktfSUZFTFNFKAotICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWwotI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLV1dLCAgICBbWyBMSUJYTUxfVEVTVF9WRVJTSU9OOyByZXR1cm4gMDtdXSldLAotICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKLSAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIExJQlhNTCBvciBmaW5kaW5nIHRoZSB3cm9uZyIKLSAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBMSUJYTUwuIElmIGl0IGlzIG5vdCBmaW5kaW5nIExJQlhNTCwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCi0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCi0gICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKLSAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCi0gICAgICAgICAgZWNobyAiKioqIgotICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiIF0sCi0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKLSAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cnJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIExJQlhNTCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgotICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIExJQlhNTCBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKLSAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgeG1sMi1jb25maWcgc2NyaXB0OiAkWE1MMl9DT05GSUciIF0pCi0gICAgICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgotICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgICAgZmkKLSAgICAgZmkKLQotICAgICBYTUxfQ1BQRkxBR1M9IiIKLSAgICAgWE1MX0xJQlM9IiIKLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKLSAgZmkKKyAgWE1MX0NQUEZMQUdTPSRYTUxfQ0ZMQUdTCiAgIEFDX1NVQlNUKFhNTF9DUFBGTEFHUykKICAgQUNfU1VCU1QoWE1MX0xJQlMpCi0gIHJtIC1mIGNvbmYueG1sdGVzdAogXSkKZGlmZiAtLWdpdCBhL2xpYnhtbC5zcGVjLmluIGIvbGlieG1sLnNwZWMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDgzZGUuLjAwMDAwMDAKLS0tIGEvbGlieG1sLnNwZWMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotJWdsb2JhbCB3aXRoX3B5dGhvbjMgMQotCi1TdW1tYXJ5OiBMaWJyYXJ5IHByb3ZpZGluZyBYTUwgYW5kIEhUTUwgc3VwcG9ydAotTmFtZTogbGlieG1sMgotVmVyc2lvbjogQFZFUlNJT05ACi1SZWxlYXNlOiAxJXs/ZGlzdH0lez9leHRyYV9yZWxlYXNlfQotTGljZW5zZTogTUlUCi1Hcm91cDogRGV2ZWxvcG1lbnQvTGlicmFyaWVzCi1Tb3VyY2U6IGh0dHBzOi8vZG93bmxvYWQuZ25vbWUub3JnL3NvdXJjZXMvbGlieG1sMi9ATElCWE1MX01BSk9SX1ZFUlNJT05ALkBMSUJYTUxfTUlOT1JfVkVSU0lPTkAvbGlieG1sMi0le3ZlcnNpb259LnRhci54egotQnVpbGRSb290OiAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdAotQnVpbGRSZXF1aXJlczogcHl0aG9uLWRldmVsCi0laWYgMCV7P3dpdGhfcHl0aG9uM30KLUJ1aWxkUmVxdWlyZXM6IHB5dGhvbjMtZGV2ZWwKLSVlbmRpZiAjIHdpdGhfcHl0aG9uMwotQnVpbGRSZXF1aXJlczogemxpYi1kZXZlbAotQnVpbGRSZXF1aXJlczogcGtnY29uZmlnCi1CdWlsZFJlcXVpcmVzOiB4ei1kZXZlbAotVVJMOiBodHRwczovL2dpdGxhYi5nbm9tZS5vcmcvR05PTUUvbGlieG1sMgotCi0lZGVzY3JpcHRpb24KLVRoaXMgbGlicmFyeSBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBYTUwgZmlsZXMuIEl0IGluY2x1ZGVzIHN1cHBvcnQKLXRvIHJlYWQsIG1vZGlmeSBhbmQgd3JpdGUgWE1MIGFuZCBIVE1MIGZpbGVzLiBUaGVyZSBpcyBEVERzIHN1cHBvcnQKLXRoaXMgaW5jbHVkZXMgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBldmVuIHdpdGggY29tcGxleCBEdERzLCBlaXRoZXIKLWF0IHBhcnNlIHRpbWUgb3IgbGF0ZXIgb25jZSB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBvdXRwdXQKLWNhbiBiZSBhIHNpbXBsZSBTQVggc3RyZWFtIG9yIGFuZCBpbi1tZW1vcnkgRE9NIGxpa2UgcmVwcmVzZW50YXRpb25zLgotSW4gdGhpcyBjYXNlIG9uZSBjYW4gdXNlIHRoZSBidWlsdC1pbiBYUGF0aCBhbmQgWFBvaW50ZXIgaW1wbGVtZW50YXRpb24KLXRvIHNlbGVjdCBzdWIgbm9kZXMgb3IgcmFuZ2VzLiBBIGZsZXhpYmxlIElucHV0L091dHB1dCBtZWNoYW5pc20gaXMKLWF2YWlsYWJsZSwgd2l0aCBleGlzdGluZyBIVFRQIGFuZCBGVFAgbW9kdWxlcyBhbmQgY29tYmluZWQgdG8gYW4KLVVSSSBsaWJyYXJ5LgotCi0lcGFja2FnZSBkZXZlbAotU3VtbWFyeTogTGlicmFyaWVzLCBpbmNsdWRlcywgZXRjLiB0byBkZXZlbG9wIFhNTCBhbmQgSFRNTCBhcHBsaWNhdGlvbnMKLUdyb3VwOiBEZXZlbG9wbWVudC9MaWJyYXJpZXMKLVJlcXVpcmVzOiBsaWJ4bWwyID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9Ci1SZXF1aXJlczogemxpYi1kZXZlbAotUmVxdWlyZXM6IHh6LWRldmVsCi1SZXF1aXJlczogcGtnY29uZmlnCi0KLSVkZXNjcmlwdGlvbiBkZXZlbAotTGlicmFyaWVzLCBpbmNsdWRlIGZpbGVzLCBldGMgeW91IGNhbiB1c2UgdG8gZGV2ZWxvcCBYTUwgYXBwbGljYXRpb25zLgotVGhpcyBsaWJyYXJ5IGFsbG93cyB0byBtYW5pcHVsYXRlIFhNTCBmaWxlcy4gSXQgaW5jbHVkZXMgc3VwcG9ydAotdG8gcmVhZCwgbW9kaWZ5IGFuZCB3cml0ZSBYTUwgYW5kIEhUTUwgZmlsZXMuIFRoZXJlIGlzIERURHMgc3VwcG9ydAotdGhpcyBpbmNsdWRlcyBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGV2ZW4gd2l0aCBjb21wbGV4IER0RHMsIGVpdGhlcgotYXQgcGFyc2UgdGltZSBvciBsYXRlciBvbmNlIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBtb2RpZmllZC4gVGhlIG91dHB1dAotY2FuIGJlIGEgc2ltcGxlIFNBWCBzdHJlYW0gb3IgYW5kIGluLW1lbW9yeSBET00gbGlrZSByZXByZXNlbnRhdGlvbnMuCi1JbiB0aGlzIGNhc2Ugb25lIGNhbiB1c2UgdGhlIGJ1aWx0LWluIFhQYXRoIGFuZCBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbgotdG8gc2VsZWN0IHN1YiBub2RlcyBvciByYW5nZXMuIEEgZmxleGlibGUgSW5wdXQvT3V0cHV0IG1lY2hhbmlzbSBpcwotYXZhaWxhYmxlLCB3aXRoIGV4aXN0aW5nIEhUVFAgYW5kIEZUUCBtb2R1bGVzIGFuZCBjb21iaW5lZCB0byBhbgotVVJJIGxpYnJhcnkuCi0KLSVwYWNrYWdlIHN0YXRpYwotU3VtbWFyeTogU3RhdGljIGxpYnJhcnkgZm9yIGxpYnhtbDIKLUdyb3VwOiBEZXZlbG9wbWVudC9MaWJyYXJpZXMKLVJlcXVpcmVzOiBsaWJ4bWwyID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9Ci0KLSVkZXNjcmlwdGlvbiBzdGF0aWMKLVN0YXRpYyBsaWJyYXJ5IGZvciBsaWJ4bWwyIHByb3ZpZGVkIGZvciBzcGVjaWZpYyB1c2VzIG9yIHNoYXZpbmcgYSBmZXcKLW1pY3Jvc2Vjb25kcyB3aGVuIHBhcnNpbmcsIGRvIG5vdCBsaW5rIHRvIHRoZW0gZm9yIGdlbmVyaWMgcHVycG9zZSBwYWNrYWdlcy4KLQotJXBhY2thZ2UgLW4gcHl0aG9uLSV7bmFtZX0KLSV7P3B5dGhvbl9wcm92aWRlOiVweXRob25fcHJvdmlkZSBweXRob24tJXtuYW1lfX0KLVN1bW1hcnk6IFB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIGxpYnhtbDIgbGlicmFyeQotR3JvdXA6IERldmVsb3BtZW50L0xpYnJhcmllcwotUmVxdWlyZXM6IGxpYnhtbDIgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KLU9ic29sZXRlczogJXtuYW1lfS1weXRob24gPCAle3ZlcnNpb259LSV7cmVsZWFzZX0KLVByb3ZpZGVzOiAle25hbWV9LXB5dGhvbiA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQotCi0lZGVzY3JpcHRpb24gLW4gcHl0aG9uLSV7bmFtZX0KLVRoZSBsaWJ4bWwyLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgUHl0aG9uIDIgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMKLXdyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSwgdmVyc2lvbiAyLCB0byB1c2UgdGhlIGludGVyZmFjZQotc3VwcGxpZWQgYnkgdGhlIGxpYnhtbDIgbGlicmFyeSB0byBtYW5pcHVsYXRlIFhNTCBmaWxlcy4KLQotVGhpcyBsaWJyYXJ5IGFsbG93cyB0byBtYW5pcHVsYXRlIFhNTCBmaWxlcy4gSXQgaW5jbHVkZXMgc3VwcG9ydAotdG8gcmVhZCwgbW9kaWZ5IGFuZCB3cml0ZSBYTUwgYW5kIEhUTUwgZmlsZXMuIFRoZXJlIGlzIERURHMgc3VwcG9ydAotdGhpcyBpbmNsdWRlcyBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGV2ZW4gd2l0aCBjb21wbGV4IERURHMsIGVpdGhlcgotYXQgcGFyc2UgdGltZSBvciBsYXRlciBvbmNlIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBtb2RpZmllZC4KLQotJWlmIDAlez93aXRoX3B5dGhvbjN9Ci0lcGFja2FnZSAtbiBweXRob24zLSV7bmFtZX0KLVN1bW1hcnk6IFB5dGhvbiAzIGJpbmRpbmdzIGZvciB0aGUgbGlieG1sMiBsaWJyYXJ5Ci1Hcm91cDogRGV2ZWxvcG1lbnQvTGlicmFyaWVzCi1SZXF1aXJlczogbGlieG1sMiA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQotT2Jzb2xldGVzOiAle25hbWV9LXB5dGhvbjMgPCAle3ZlcnNpb259LSV7cmVsZWFzZX0KLVByb3ZpZGVzOiAle25hbWV9LXB5dGhvbjMgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KLQotJWRlc2NyaXB0aW9uIC1uIHB5dGhvbjMtJXtuYW1lfQotVGhlIGxpYnhtbDItcHl0aG9uMyBwYWNrYWdlIGNvbnRhaW5zIGEgUHl0aG9uIDMgbW9kdWxlIHRoYXQgcGVybWl0cwotYXBwbGljYXRpb25zIHdyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSwgdmVyc2lvbiAzLCB0byB1c2UgdGhlCi1pbnRlcmZhY2Ugc3VwcGxpZWQgYnkgdGhlIGxpYnhtbDIgbGlicmFyeSB0byBtYW5pcHVsYXRlIFhNTCBmaWxlcy4KLQotVGhpcyBsaWJyYXJ5IGFsbG93cyB0byBtYW5pcHVsYXRlIFhNTCBmaWxlcy4gSXQgaW5jbHVkZXMgc3VwcG9ydAotdG8gcmVhZCwgbW9kaWZ5IGFuZCB3cml0ZSBYTUwgYW5kIEhUTUwgZmlsZXMuIFRoZXJlIGlzIERURHMgc3VwcG9ydAotdGhpcyBpbmNsdWRlcyBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uIGV2ZW4gd2l0aCBjb21wbGV4IERURHMsIGVpdGhlcgotYXQgcGFyc2UgdGltZSBvciBsYXRlciBvbmNlIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBtb2RpZmllZC4KLSVlbmRpZiAjIHdpdGhfcHl0aG9uMwotCi0lcHJlcAotJXNldHVwIC1xCi0KLW1rZGlyIHB5M2RvYwotY3AgZG9jLyoucHkgcHkzZG9jCi1zZWQgLWkgJ3N8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCMhL3Vzci9iaW4vZW52ICV7X19weXRob24zfXwnIHB5M2RvYy8qLnB5Ci0KLSVidWlsZAotJWNvbmZpZ3VyZQotbWFrZSAle19zbXBfbWZsYWdzfQotCi1maW5kIGRvYyAtdHlwZSBmIC1leGVjIGNobW9kIDA2NDQgXHtcfSBcOwotCi0laW5zdGFsbAotcm0gLWZyICV7YnVpbGRyb290fQotCi1tYWtlIGluc3RhbGwgREVTVERJUj0le2J1aWxkcm9vdH0KLQotJWlmIDAlez93aXRoX3B5dGhvbjN9Ci1tYWtlIGNsZWFuCi0lY29uZmlndXJlIC0td2l0aC1weXRob249JXtfX3B5dGhvbjN9Ci1tYWtlIGluc3RhbGwgREVTVERJUj0le2J1aWxkcm9vdH0KLSVlbmRpZiAjIHdpdGhfcHl0aG9uMwotCi0KLXJtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5sYQotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvKi5hCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy8qLmxhCi1ybSAtcmYgJFJQTV9CVUlMRF9ST09UJXtfZGF0YWRpcn0vZG9jL2xpYnhtbDItJXt2ZXJzaW9ufS8qCi1ybSAtcmYgJFJQTV9CVUlMRF9ST09UJXtfZGF0YWRpcn0vZG9jL2xpYnhtbDItcHl0aG9uLSV7dmVyc2lvbn0vKgotKGNkIGRvYy9leGFtcGxlcyA7IG1ha2UgY2xlYW4gOyBybSAtcmYgLmRlcHMgTWFrZWZpbGUpCi1nemlwIC05IC1jIGRvYy9saWJ4bWwyLWFwaS54bWwgPiBkb2MvbGlieG1sMi1hcGkueG1sLmd6Ci0KLSVjaGVjawotI2Rpc2FibGluZyBweXRob24gdGVzdHMgZnJvbSBycG0gYnVpbGQgYXMgYnJva2VuIGluIEZlZG9yYSAzMAotbWFrZSBQWVRIT05fU1VCRElSPSIiIHJ1bnRlc3RzCi0KLSVjbGVhbgotcm0gLWZyICV7YnVpbGRyb290fQotCi0lcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwotCi0lcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCi0KLSVmaWxlcwotJWRlZmF0dHIoLSwgcm9vdCwgcm9vdCkKLQotJWRvYyBORVdTIFJFQURNRS5tZCBDb3B5cmlnaHQgVE9ETwotJWRvYyAle19tYW5kaXJ9L21hbjEveG1sbGludC4xKgotJWRvYyAle19tYW5kaXJ9L21hbjEveG1sY2F0YWxvZy4xKgotCi0le19saWJkaXJ9L2xpYiouc28uKgotJXtfYmluZGlyfS94bWxsaW50Ci0le19iaW5kaXJ9L3htbGNhdGFsb2cKLQotJWZpbGVzIGRldmVsCi0lZGVmYXR0cigtLCByb290LCByb290KQotCi0lZG9jICV7X21hbmRpcn0vbWFuMS94bWwyLWNvbmZpZy4xKgotJWRvYyBORVdTIFJFQURNRS5tZCBDb3B5cmlnaHQKLSVkb2MgZG9jLyouaHRtbCBkb2MvaHRtbCBkb2MvKi5naWYgZG9jLyoucG5nCi0lZG9jIGRvYy90dXRvcmlhbCBkb2MvbGlieG1sMi1hcGkueG1sLmd6Ci0lZG9jIGRvYy9leGFtcGxlcwotJWRvYyAlZGlyICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9saWJ4bWwyCi0lZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9saWJ4bWwyLyouZGV2aGVscAotJWRvYyAle19kYXRhZGlyfS9ndGstZG9jL2h0bWwvbGlieG1sMi8qLmh0bWwKLSVkb2MgJXtfZGF0YWRpcn0vZ3RrLWRvYy9odG1sL2xpYnhtbDIvKi5wbmcKLSVkb2MgJXtfZGF0YWRpcn0vZ3RrLWRvYy9odG1sL2xpYnhtbDIvKi5jc3MKLQotJXtfbGliZGlyfS9saWIqLnNvCi0le19saWJkaXJ9Lyouc2gKLSV7X2luY2x1ZGVkaXJ9LyoKLSV7X2JpbmRpcn0veG1sMi1jb25maWcKLSV7X2RhdGFkaXJ9L2FjbG9jYWwvbGlieG1sLm00Ci0le19saWJkaXJ9L3BrZ2NvbmZpZy9saWJ4bWwtMi4wLnBjCi0le19saWJkaXJ9L2NtYWtlL2xpYnhtbDIvbGlieG1sMi1jb25maWcuY21ha2UKLQotJWZpbGVzIHN0YXRpYwotJWRlZmF0dHIoLSwgcm9vdCwgcm9vdCkKLQotJXtfbGliZGlyfS8qYQotCi0lZmlsZXMgLW4gcHl0aG9uLSV7bmFtZX0KLSVkZWZhdHRyKC0sIHJvb3QsIHJvb3QpCi0KLSV7X2xpYmRpcn0vcHl0aG9uMiovc2l0ZS1wYWNrYWdlcy9saWJ4bWwyLnB5KgotJXtfbGliZGlyfS9weXRob24yKi9zaXRlLXBhY2thZ2VzL2Rydl9saWJ4bWwyLnB5KgotJXtfbGliZGlyfS9weXRob24yKi9zaXRlLXBhY2thZ2VzL2xpYnhtbDJtb2QqCi0lZG9jIHB5dGhvbi9UT0RPCi0lZG9jIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0Ci0lZG9jIHB5dGhvbi90ZXN0cy8qLnB5Ci0lZG9jIGRvYy8qLnB5Ci0lZG9jIGRvYy9weXRob24uaHRtbAotCi0laWYgMCV7P3dpdGhfcHl0aG9uM30KLSVmaWxlcyAtbiBweXRob24zLSV7bmFtZX0KLSVkZWZhdHRyKC0sIHJvb3QsIHJvb3QpCi0KLSV7X2xpYmRpcn0vcHl0aG9uMyovc2l0ZS1wYWNrYWdlcy9saWJ4bWwyLnB5KgotJXtfbGliZGlyfS9weXRob24zKi9zaXRlLXBhY2thZ2VzL2Rydl9saWJ4bWwyLnB5KgotJXtfbGliZGlyfS9weXRob24zKi9zaXRlLXBhY2thZ2VzL19fcHljYWNoZV9fLypweSoKLSV7X2xpYmRpcn0vcHl0aG9uMyovc2l0ZS1wYWNrYWdlcy9saWJ4bWwybW9kKgotJWRvYyBweXRob24vVE9ETwotJWRvYyBweXRob24vbGlieG1sMmNsYXNzLnR4dAotJWRvYyBweTNkb2MvKi5weQotJWRvYyBkb2MvcHl0aG9uLmh0bWwKLSVlbmRpZiAjIHdpdGhfcHl0aG9uMwotCi0lY2hhbmdlbG9nCi0qIEBSRUxEQVRFQCBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+Ci0tIHVwc3RyZWFtIHJlbGVhc2UgQFZFUlNJT05ACi0KZGlmZiAtLWdpdCBhL2xpYnhtbDItY29uZmlnLmNtYWtlLmNtYWtlLmluIGIvbGlieG1sMi1jb25maWcuY21ha2UuY21ha2UuaW4KaW5kZXggMjc1ODZhYS4uYWVhZDk0OSAxMDA2NDQKLS0tIGEvbGlieG1sMi1jb25maWcuY21ha2UuY21ha2UuaW4KKysrIGIvbGlieG1sMi1jb25maWcuY21ha2UuY21ha2UuaW4KQEAgLTM1LDYgKzM1LDcgQEAKICAgICBmb3JlYWNoKHByb3BlcnR5IElOIElURU1TIElNUE9SVEVEX0xPQ0FUSU9OIElNUE9SVEVEX0lNUExJQikKICAgICAgIGdldF90YXJnZXRfcHJvcGVydHkoJHtiYXNlbmFtZX1fJHtwcm9wZXJ0eX1fREVCVUcgJHt0YXJnZXR9ICR7cHJvcGVydHl9X0RFQlVHKQogICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eSgke2Jhc2VuYW1lfV8ke3Byb3BlcnR5fV9NSU5TSVpFUkVMICR7dGFyZ2V0fSAke3Byb3BlcnR5fV9NSU5TSVpFUkVMKQorICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eSgke2Jhc2VuYW1lfV8ke3Byb3BlcnR5fV9OT0NPTkZJRyAke3RhcmdldH0gJHtwcm9wZXJ0eX1fTk9DT05GSUcpCiAgICAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KCR7YmFzZW5hbWV9XyR7cHJvcGVydHl9X1JFTEVBU0UgJHt0YXJnZXR9ICR7cHJvcGVydHl9X1JFTEVBU0UpCiAgICAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KCR7YmFzZW5hbWV9XyR7cHJvcGVydHl9X1JFTFdJVEhERUJJTkZPICR7dGFyZ2V0fSAke3Byb3BlcnR5fV9SRUxXSVRIREVCSU5GTykKIApAQCAtNTIsNiArNTMsOCBAQAogICAgICAgICBzZXQoJHtiYXNlbmFtZX1fTElCUkFSWSAkeyR7YmFzZW5hbWV9XyR7cHJvcGVydHl9X01JTlNJWkVSRUx9KQogICAgICAgZWxzZWlmKCR7YmFzZW5hbWV9XyR7cHJvcGVydHl9X0RFQlVHKQogICAgICAgICBzZXQoJHtiYXNlbmFtZX1fTElCUkFSWSAkeyR7YmFzZW5hbWV9XyR7cHJvcGVydHl9X0RFQlVHfSkKKyAgICAgIGVsc2VpZigke2Jhc2VuYW1lfV8ke3Byb3BlcnR5fV9OT0NPTkZJRykKKyAgICAgICAgc2V0KCR7YmFzZW5hbWV9X0xJQlJBUlkgJHske2Jhc2VuYW1lfV8ke3Byb3BlcnR5fV9OT0NPTkZJR30pCiAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCiAgIGVuZGlmKCkKQEAgLTYxLDYgKzY0LDcgQEAKICAgaWYoVEFSR0VUICR7dGFyZ2V0fSkKICAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KCR7YmFzZW5hbWV9X0lNUE9SVEVEX0xPQ0FUSU9OX0RFQlVHICR7dGFyZ2V0fSBJTVBPUlRFRF9MT0NBVElPTl9ERUJVRykKICAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KCR7YmFzZW5hbWV9X0lNUE9SVEVEX0xPQ0FUSU9OX01JTlNJWkVSRUwgJHt0YXJnZXR9IElNUE9SVEVEX0xPQ0FUSU9OX01JTlNJWkVSRUwpCisgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eSgke2Jhc2VuYW1lfV9JTVBPUlRFRF9MT0NBVElPTl9OT0NPTkZJRyAke3RhcmdldH0gSU1QT1JURURfTE9DQVRJT05fTk9DT05GSUcpCiAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eSgke2Jhc2VuYW1lfV9JTVBPUlRFRF9MT0NBVElPTl9SRUxFQVNFICR7dGFyZ2V0fSBJTVBPUlRFRF9MT0NBVElPTl9SRUxFQVNFKQogICAgIGdldF90YXJnZXRfcHJvcGVydHkoJHtiYXNlbmFtZX1fSU1QT1JURURfTE9DQVRJT05fUkVMV0lUSERFQklORk8gJHt0YXJnZXR9IElNUE9SVEVEX0xPQ0FUSU9OX1JFTFdJVEhERUJJTkZPKQogCkBAIC03Miw2ICs3Niw4IEBACiAgICAgICBzZXQoJHtiYXNlbmFtZX1fRVhFQ1VUQUJMRSAkeyR7YmFzZW5hbWV9X0lNUE9SVEVEX0xPQ0FUSU9OX01JTlNJWkVSRUx9KQogICAgIGVsc2VpZigke2Jhc2VuYW1lfV9JTVBPUlRFRF9MT0NBVElPTl9ERUJVRykKICAgICAgIHNldCgke2Jhc2VuYW1lfV9FWEVDVVRBQkxFICR7JHtiYXNlbmFtZX1fSU1QT1JURURfTE9DQVRJT05fREVCVUd9KQorICAgIGVsc2VpZigke2Jhc2VuYW1lfV9JTVBPUlRFRF9MT0NBVElPTl9OT0NPTkZJRykKKyAgICAgIHNldCgke2Jhc2VuYW1lfV9FWEVDVVRBQkxFICR7JHtiYXNlbmFtZX1fSU1QT1JURURfTE9DQVRJT05fTk9DT05GSUd9KQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogZW5kbWFjcm8oKQpAQCAtOTYsNiArMTAyLDExIEBACiAgIGZpbmRfZGVwZW5kZW5jeShJY29udikKICAgbGlzdChBUFBFTkQgTElCWE1MMl9MSUJSQVJJRVMgICAgJHtJY29udl9MSUJSQVJJRVN9KQogICBsaXN0KEFQUEVORCBMSUJYTUwyX0lOQ0xVREVfRElSUyAke0ljb252X0lOQ0xVREVfRElSU30pCisgIGlmKE5PVCBJY29udl9GT1VORCkKKyAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fRk9VTkQgRkFMU0UpCisgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X05PVF9GT1VORF9NRVNTQUdFICJJY29udiBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoTk9UIExJQlhNTDJfU0hBUkVEKQpAQCAtMTA0LDIxICsxMTUsNDEgQEAKICAgaWYoTElCWE1MMl9XSVRIX1RIUkVBRFMpCiAgICAgZmluZF9kZXBlbmRlbmN5KFRocmVhZHMpCiAgICAgbGlzdChBUFBFTkQgTElCWE1MMl9MSUJSQVJJRVMgJHtDTUFLRV9USFJFQURfTElCU19JTklUfSkKKyAgICBpZihOT1QgVGhyZWFkc19GT1VORCkKKyAgICAgIHNldCgke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9GT1VORCBGQUxTRSkKKyAgICAgIHNldCgke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9OT1RfRk9VTkRfTUVTU0FHRSAiVGhyZWFkcyBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAogICBpZihMSUJYTUwyX1dJVEhfSUNVKQogICAgIGZpbmRfZGVwZW5kZW5jeShJQ1UgQ09NUE9ORU5UUyBkYXRhIGkxOG4gdWMpCiAgICAgbGlzdChBUFBFTkQgTElCWE1MMl9MSUJSQVJJRVMgICAgJHtJQ1VfTElCUkFSSUVTfSkKKyAgICBpZihOT1QgSUNVX0ZPVU5EKQorICAgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIEZBTFNFKQorICAgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X05PVF9GT1VORF9NRVNTQUdFICJJQ1UgZGVwZW5kZW5jeSB3YXMgbm90IGZvdW5kIikKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYoTElCWE1MMl9XSVRIX0xaTUEpCiAgICAgZmluZF9kZXBlbmRlbmN5KExpYkxaTUEpCiAgICAgbGlzdChBUFBFTkQgTElCWE1MMl9MSUJSQVJJRVMgICAgJHtMSUJMWk1BX0xJQlJBUklFU30pCisgICAgaWYoTk9UIExpYkxaTUFfRk9VTkQpCisgICAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fRk9VTkQgRkFMU0UpCisgICAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTk9UX0ZPVU5EX01FU1NBR0UgIkxpYkxaTUEgZGVwZW5kZW5jeSB3YXMgbm90IGZvdW5kIikKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYoTElCWE1MMl9XSVRIX1pMSUIpCiAgICAgZmluZF9kZXBlbmRlbmN5KFpMSUIpCiAgICAgbGlzdChBUFBFTkQgTElCWE1MMl9MSUJSQVJJRVMgICAgJHtaTElCX0xJQlJBUklFU30pCisgICAgaWYoTk9UIFpMSUJfRk9VTkQpCisgICAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fRk9VTkQgRkFMU0UpCisgICAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTk9UX0ZPVU5EX01FU1NBR0UgIlpMSUIgZGVwZW5kZW5jeSB3YXMgbm90IGZvdW5kIikKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYoVU5JWCkKZGlmZiAtLWdpdCBhL2xpYnhtbDItY29uZmlnLmNtYWtlLmluIGIvbGlieG1sMi1jb25maWcuY21ha2UuaW4KaW5kZXggNDk4OTY5MC4uMDQ0NzkzNiAxMDA2NDQKLS0tIGEvbGlieG1sMi1jb25maWcuY21ha2UuaW4KKysrIGIvbGlieG1sMi1jb25maWcuY21ha2UuaW4KQEAgLTU1LDMwICs1NSw1NSBAQAogICBsaXN0KEFQUEVORCBMSUJYTUwyX0xJQlJBUklFUyAgICAke0ljb252X0xJQlJBUklFU30pCiAgIGxpc3QoQVBQRU5EIExJQlhNTDJfSU5DTFVERV9ESVJTICR7SWNvbnZfSU5DTFVERV9ESVJTfSkKICAgbGlzdChBUFBFTkQgTElCWE1MMl9JTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIkljb252OjpJY29udiIpCisgIGlmKE5PVCBJY29udl9GT1VORCkKKyAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fRk9VTkQgRkFMU0UpCisgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X05PVF9GT1VORF9NRVNTQUdFICJJY29udiBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoTElCWE1MMl9XSVRIX1RIUkVBRFMpCiAgIGZpbmRfZGVwZW5kZW5jeShUaHJlYWRzKQogICBsaXN0KEFQUEVORCBMSUJYTUwyX0xJQlJBUklFUyAgICAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQogICBsaXN0KEFQUEVORCBMSUJYTUwyX0lOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiXCQ8TElOS19PTkxZOlRocmVhZHM6OlRocmVhZHM+IikKKyAgaWYoTk9UIFRocmVhZHNfRk9VTkQpCisgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIEZBTFNFKQorICAgIHNldCgke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9OT1RfRk9VTkRfTUVTU0FHRSAiVGhyZWFkcyBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoTElCWE1MMl9XSVRIX0lDVSkKICAgZmluZF9kZXBlbmRlbmN5KElDVSBDT01QT05FTlRTIGRhdGEgaTE4biB1YykKICAgbGlzdChBUFBFTkQgTElCWE1MMl9MSUJSQVJJRVMgICAgJHtJQ1VfTElCUkFSSUVTfSkKICAgbGlzdChBUFBFTkQgTElCWE1MMl9JTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlwkPExJTktfT05MWTpJQ1U6OmRhdGE+O1wkPExJTktfT05MWTpJQ1U6OmkxOG4+O1wkPExJTktfT05MWTpJQ1U6OnVjPiIpCisgIGlmKE5PVCBJQ1VfRk9VTkQpCisgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIEZBTFNFKQorICAgIHNldCgke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9OT1RfRk9VTkRfTUVTU0FHRSAiSUNVIGRlcGVuZGVuY3kgd2FzIG5vdCBmb3VuZCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBpZihMSUJYTUwyX1dJVEhfTFpNQSkKICAgZmluZF9kZXBlbmRlbmN5KExpYkxaTUEpCiAgIGxpc3QoQVBQRU5EIExJQlhNTDJfTElCUkFSSUVTICAgICR7TElCTFpNQV9MSUJSQVJJRVN9KQogICBsaXN0KEFQUEVORCBMSUJYTUwyX0lOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiXCQ8TElOS19PTkxZOkxpYkxaTUE6OkxpYkxaTUE+IikKKyAgaWYoTk9UIExpYkxaTUFfRk9VTkQpCisgICAgc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIEZBTFNFKQorICAgIHNldCgke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9OT1RfRk9VTkRfTUVTU0FHRSAiTGliTFpNQSBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoTElCWE1MMl9XSVRIX1pMSUIpCiAgIGZpbmRfZGVwZW5kZW5jeShaTElCKQogICBsaXN0KEFQUEVORCBMSUJYTUwyX0xJQlJBUklFUyAgICAke1pMSUJfTElCUkFSSUVTfSkKICAgbGlzdChBUFBFTkQgTElCWE1MMl9JTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlwkPExJTktfT05MWTpaTElCOjpaTElCPiIpCisgIGlmKE5PVCBaTElCX0ZPVU5EKQorICAgIHNldCgke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9GT1VORCBGQUxTRSkKKyAgICBzZXQoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTk9UX0ZPVU5EX01FU1NBR0UgIlpMSUIgZGVwZW5kZW5jeSB3YXMgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCiBlbmRpZigpCiAKIGlmKFVOSVgpCmRpZmYgLS1naXQgYS9saWJ4bWwyLnN5bXMgYi9saWJ4bWwyLnN5bXMKaW5kZXggZjY5MmExYy4uMjRiOGY5ZiAxMDA2NDQKLS0tIGEvbGlieG1sMi5zeW1zCisrKyBiL2xpYnhtbDIuc3ltcwpAQCAtMSwxNSArMSw1IEBACiAjCi0jIE9mZmljaWFsbHkgZXhwb3J0ZWQgc3ltYm9scywgZm9yIHdoaWNoIGhlYWRlcgotIyBmaWxlIGRlZmluaXRpb25zIGFyZSBpbnN0YWxsZWQgaW4gL3Vzci9pbmNsdWRlL2xpYnhtbDIKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzeW1ib2xzLnhtbCBhbmQgc3ltcy54c2wKLSMKLSMgVmVyc2lvbnMgaGVyZSBhcmUgKmZpeGVkKiB0byBtYXRjaCB0aGUgbGlieG1sMiB2ZXJzaW9uCi0jIGF0IHdoaWNoIHRoZSBzeW1ib2wgd2FzIGludHJvZHVjZWQuIFRoaXMgZW5zdXJlcyB0aGF0Ci0jIGEgbmV3IGNsaWVudCBhcHAgcmVxdWlyaW5nIHN5bWJvbCBmb28oKSBjYW4ndCBhY2NpZGVudGFsbHkKLSMgcnVuIHdpdGggb2xkIGxpYnhtbDIuc28gbm90IHByb3ZpZGluZyBmb28oKSAtIHRoZSBnbG9iYWwKLSMgc29uYW1lIHZlcnNpb24gaW5mbyBjYW4ndCBlbmZvcmNlIHRoaXMgc2luY2Ugd2UgbmV2ZXIKLSMgY2hhbmdlIHRoZSBzb25hbWUKKyMgUmV0YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIERvbid0IGFkZCBuZXcgc3ltYm9scy4KICMKIAogTElCWE1MMl8yLjQuMzAgewpkaWZmIC0tZ2l0IGEvbGlzdC5jIGIvbGlzdC5jCmluZGV4IDEyYTdjMDAuLjQ5MjdhMjYgMTAwNjQ0Ci0tLSBhL2xpc3QuYworKysgYi9saXN0LmMKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CiAjaW5jbHVkZSA8bGlieG1sL2xpc3QuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogCiAvKgogICogVHlwZSBkZWZpbml0aW9uIGFyZSBrZXB0IGludGVybmFsCmRpZmYgLS1naXQgYS9tNC9heF9hcHBlbmRfZmxhZy5tNCBiL200L2F4X2FwcGVuZF9mbGFnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmQ4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9heF9hcHBlbmRfZmxhZy5tNApAQCAtMCwwICsxLDUwIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgICAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9hcHBlbmRfZmxhZy5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0FQUEVORF9GTEFHKEZMQUcsIFtGTEFHUy1WQVJJQUJMRV0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgRkxBRyBpcyBhcHBlbmRlZCB0byB0aGUgRkxBR1MtVkFSSUFCTEUgc2hlbGwgdmFyaWFibGUsIHdpdGggYSBzcGFjZQorIyAgIGFkZGVkIGluIGJldHdlZW4uCisjCisjICAgSWYgRkxBR1MtVkFSSUFCTEUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UncyBmbGFncyAoZS5nLgorIyAgIENGTEFHUykgaXMgdXNlZC4gIEZMQUdTLVZBUklBQkxFIGlzIG5vdCBjaGFuZ2VkIGlmIGl0IGFscmVhZHkgY29udGFpbnMKKyMgICBGTEFHLiAgSWYgRkxBR1MtVkFSSUFCTEUgaXMgdW5zZXQgaW4gdGhlIHNoZWxsLCBpdCBpcyBzZXQgdG8gZXhhY3RseQorIyAgIEZMQUcuCisjCisjICAgTk9URTogSW1wbGVtZW50YXRpb24gYmFzZWQgb24gQVhfQ0ZMQUdTX0dDQ19PUFRJT04uCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggR3VpZG8gVS4gRHJhaGVpbSA8Z3VpZG9kQGdteC5kZT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTEgTWFhcnRlbiBCb3NtYW5zIDxta2Jvc21hbnNAZ21haWwuY29tPgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgOAorCitBQ19ERUZVTihbQVhfQVBQRU5EX0ZMQUddLAorW2RubAorQUNfUFJFUkVRKDIuNjQpZG5sIGZvciBfQUNfTEFOR19QUkVGSVggYW5kIEFTX1ZBUl9TRVRfSUYKK0FTX1ZBUl9QVVNIREVGKFtGTEFHU10sIFttNF9kZWZhdWx0KCQyLF9BQ19MQU5HX1BSRUZJWFtGTEFHU10pXSkKK0FTX1ZBUl9TRVRfSUYoRkxBR1MsWworICBBU19DQVNFKFsiIEFTX1ZBUl9HRVQoRkxBR1MpICJdLAorICAgIFsqIiAkMSAiKl0sIFtBQ19SVU5fTE9HKFs6IEZMQUdTIGFscmVhZHkgY29udGFpbnMgJDFdKV0sCisgICAgWworICAgICBBU19WQVJfQVBQRU5EKEZMQUdTLFsiICQxIl0pCisgICAgIEFDX1JVTl9MT0coWzogRkxBR1M9IiRGTEFHUyJdKQorICAgIF0pCisgIF0sCisgIFsKKyAgQVNfVkFSX1NFVChGTEFHUyxbJDFdKQorICBBQ19SVU5fTE9HKFs6IEZMQUdTPSIkRkxBR1MiXSkKKyAgXSkKK0FTX1ZBUl9QT1BERUYoW0ZMQUdTXSlkbmwKK10pZG5sIEFYX0FQUEVORF9GTEFHCmRpZmYgLS1naXQgYS9tNC9heF9hcHBlbmRfbGlua19mbGFncy5tNCBiL200L2F4X2FwcGVuZF9saW5rX2ZsYWdzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjlmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9heF9hcHBlbmRfbGlua19mbGFncy5tNApAQCAtMCwwICsxLDQ0IEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9hcHBlbmRfbGlua19mbGFncy5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0FQUEVORF9MSU5LX0ZMQUdTKFtGTEFHMSBGTEFHMiAuLi5dLCBbRkxBR1MtVkFSSUFCTEVdLCBbRVhUUkEtRkxBR1NdLCBbSU5QVVRdKQorIworIyBERVNDUklQVElPTgorIworIyAgIEZvciBldmVyeSBGTEFHMSwgRkxBRzIgaXQgaXMgY2hlY2tlZCB3aGV0aGVyIHRoZSBsaW5rZXIgd29ya3Mgd2l0aCB0aGUKKyMgICBmbGFnLiAgSWYgaXQgZG9lcywgdGhlIGZsYWcgaXMgYWRkZWQgRkxBR1MtVkFSSUFCTEUKKyMKKyMgICBJZiBGTEFHUy1WQVJJQUJMRSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGlua2VyJ3MgZmxhZ3MgKExERkxBR1MpIGlzCisjICAgdXNlZC4gRHVyaW5nIHRoZSBjaGVjayB0aGUgZmxhZyBpcyBhbHdheXMgYWRkZWQgdG8gdGhlIGxpbmtlcidzIGZsYWdzLgorIworIyAgIElmIEVYVFJBLUZMQUdTIGlzIGRlZmluZWQsIGl0IGlzIGFkZGVkIHRvIHRoZSBsaW5rZXIncyBkZWZhdWx0IGZsYWdzCisjICAgd2hlbiB0aGUgY2hlY2sgaXMgZG9uZS4gIFRoZSBjaGVjayBpcyB0aHVzIG1hZGUgd2l0aCB0aGUgZmxhZ3M6ICJMREZMQUdTCisjICAgRVhUUkEtRkxBR1MgRkxBRyIuICBUaGlzIGNhbiBmb3IgZXhhbXBsZSBiZSB1c2VkIHRvIGZvcmNlIHRoZSBsaW5rZXIgdG8KKyMgICBpc3N1ZSBhbiBlcnJvciB3aGVuIGEgYmFkIGZsYWcgaXMgZ2l2ZW4uCisjCisjICAgSU5QVVQgZ2l2ZXMgYW4gYWx0ZXJuYXRpdmUgaW5wdXQgc291cmNlIHRvIEFDX0NPTVBJTEVfSUZFTFNFLgorIworIyAgIE5PVEU6IFRoaXMgbWFjcm8gZGVwZW5kcyBvbiB0aGUgQVhfQVBQRU5EX0ZMQUcgYW5kIEFYX0NIRUNLX0xJTktfRkxBRy4KKyMgICBQbGVhc2Uga2VlcCB0aGlzIG1hY3JvIGluIHN5bmMgd2l0aCBBWF9BUFBFTkRfQ09NUElMRV9GTEFHUy4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAxMSBNYWFydGVuIEJvc21hbnMgPG1rYm9zbWFuc0BnbWFpbC5jb20+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCA3CisKK0FDX0RFRlVOKFtBWF9BUFBFTkRfTElOS19GTEFHU10sCitbQVhfUkVRVUlSRV9ERUZJTkVEKFtBWF9DSEVDS19MSU5LX0ZMQUddKQorQVhfUkVRVUlSRV9ERUZJTkVEKFtBWF9BUFBFTkRfRkxBR10pCitmb3IgZmxhZyBpbiAkMTsgZG8KKyAgQVhfQ0hFQ0tfTElOS19GTEFHKFskZmxhZ10sIFtBWF9BUFBFTkRfRkxBRyhbJGZsYWddLCBbbTRfZGVmYXVsdChbJDJdLCBbTERGTEFHU10pXSldLCBbXSwgWyQzXSwgWyQ0XSkKK2RvbmUKK10pZG5sIEFYX0FQUEVORF9MSU5LX0ZMQUdTCmRpZmYgLS1naXQgYS9tNC9heF9jaGVja19saW5rX2ZsYWcubTQgYi9tNC9heF9jaGVja19saW5rX2ZsYWcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhMzBjZQotLS0gL2Rldi9udWxsCisrKyBiL200L2F4X2NoZWNrX2xpbmtfZmxhZy5tNApAQCAtMCwwICsxLDUzIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfY2hlY2tfbGlua19mbGFnLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ0hFQ0tfTElOS19GTEFHKEZMQUcsIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0sIFtFWFRSQS1GTEFHU10sIFtJTlBVVF0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gRkxBRyB3b3JrcyB3aXRoIHRoZSBsaW5rZXIgb3IgZ2l2ZXMgYW4gZXJyb3IuCisjICAgKFdhcm5pbmdzLCBob3dldmVyLCBhcmUgaWdub3JlZCkKKyMKKyMgICBBQ1RJT04tU1VDQ0VTUy9BQ1RJT04tRkFJTFVSRSBhcmUgc2hlbGwgY29tbWFuZHMgdG8gZXhlY3V0ZSBvbgorIyAgIHN1Y2Nlc3MvZmFpbHVyZS4KKyMKKyMgICBJZiBFWFRSQS1GTEFHUyBpcyBkZWZpbmVkLCBpdCBpcyBhZGRlZCB0byB0aGUgbGlua2VyJ3MgZGVmYXVsdCBmbGFncworIyAgIHdoZW4gdGhlIGNoZWNrIGlzIGRvbmUuICBUaGUgY2hlY2sgaXMgdGh1cyBtYWRlIHdpdGggdGhlIGZsYWdzOiAiTERGTEFHUworIyAgIEVYVFJBLUZMQUdTIEZMQUciLiAgVGhpcyBjYW4gZm9yIGV4YW1wbGUgYmUgdXNlZCB0byBmb3JjZSB0aGUgbGlua2VyIHRvCisjICAgaXNzdWUgYW4gZXJyb3Igd2hlbiBhIGJhZCBmbGFnIGlzIGdpdmVuLgorIworIyAgIElOUFVUIGdpdmVzIGFuIGFsdGVybmF0aXZlIGlucHV0IHNvdXJjZSB0byBBQ19MSU5LX0lGRUxTRS4KKyMKKyMgICBOT1RFOiBJbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBBWF9DRkxBR1NfR0NDX09QVElPTi4gUGxlYXNlIGtlZXAgdGhpcworIyAgIG1hY3JvIGluIHN5bmMgd2l0aCBBWF9DSEVDS197UFJFUFJPQyxDT01QSUxFfV9GTEFHLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IEd1aWRvIFUuIERyYWhlaW0gPGd1aWRvZEBnbXguZGU+CisjICAgQ29weXJpZ2h0IChjKSAyMDExIE1hYXJ0ZW4gQm9zbWFucyA8bWtib3NtYW5zQGdtYWlsLmNvbT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDYKKworQUNfREVGVU4oW0FYX0NIRUNLX0xJTktfRkxBR10sCitbQUNfUFJFUkVRKDIuNjQpZG5sIGZvciBfQUNfTEFOR19QUkVGSVggYW5kIEFTX1ZBUl9JRgorQVNfVkFSX1BVU0hERUYoW0NBQ0hFVkFSXSxbYXhfY3ZfY2hlY2tfbGRmbGFnc18kNF8kMV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgbGlua2VyIGFjY2VwdHMgJDFdLCBDQUNIRVZBUiwgWworICBheF9jaGVja19zYXZlX2ZsYWdzPSRMREZMQUdTCisgIExERkxBR1M9IiRMREZMQUdTICQ0ICQxIgorICBBQ19MSU5LX0lGRUxTRShbbTRfZGVmYXVsdChbJDVdLFtBQ19MQU5HX1BST0dSQU0oKV0pXSwKKyAgICBbQVNfVkFSX1NFVChDQUNIRVZBUixbeWVzXSldLAorICAgIFtBU19WQVJfU0VUKENBQ0hFVkFSLFtub10pXSkKKyAgTERGTEFHUz0kYXhfY2hlY2tfc2F2ZV9mbGFnc10pCitBU19WQVJfSUYoQ0FDSEVWQVIseWVzLAorICBbbTRfZGVmYXVsdChbJDJdLCA6KV0sCisgIFttNF9kZWZhdWx0KFskM10sIDopXSkKK0FTX1ZBUl9QT1BERUYoW0NBQ0hFVkFSXSlkbmwKK10pZG5sIEFYX0NIRUNLX0xJTktfRkxBR1MKZGlmZiAtLWdpdCBhL200L2F4X3JlcXVpcmVfZGVmaW5lZC5tNCBiL200L2F4X3JlcXVpcmVfZGVmaW5lZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2MzZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbTQvYXhfcmVxdWlyZV9kZWZpbmVkLm00CkBAIC0wLDAgKzEsMzcgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9yZXF1aXJlX2RlZmluZWQuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9SRVFVSVJFX0RFRklORUQoTUFDUk8pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgQVhfUkVRVUlSRV9ERUZJTkVEIGlzIGEgc2ltcGxlIGhlbHBlciBmb3IgbWFraW5nIHN1cmUgb3RoZXIgbWFjcm9zIGhhdmUKKyMgICBiZWVuIGRlZmluZWQgYW5kIHRodXMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlLiAgVGhpcyBhdm9pZHMgcmFuZG9tIGlzc3VlcworIyAgIHdoZXJlIGEgbWFjcm8gaXNuJ3QgZXhwYW5kZWQuICBJbnN0ZWFkIHRoZSBjb25maWd1cmUgc2NyaXB0IGVtaXRzIGEKKyMgICBub24tZmF0YWw6CisjCisjICAgICAuL2NvbmZpZ3VyZTogbGluZSAxNjczOiBBWF9DRkxBR1NfV0FSTl9BTEw6IGNvbW1hbmQgbm90IGZvdW5kCisjCisjICAgSXQncyBsaWtlIEFDX1JFUVVJUkUgZXhjZXB0IGl0IGRvZXNuJ3QgZXhwYW5kIHRoZSByZXF1aXJlZCBtYWNyby4KKyMKKyMgICBIZXJlJ3MgYW4gZXhhbXBsZToKKyMKKyMgICAgIEFYX1JFUVVJUkVfREVGSU5FRChbQVhfQ0hFQ0tfTElOS19GTEFHXSkKKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAxNCBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CisjCisjICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisjICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCisjICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQorIyAgIHdhcnJhbnR5LgorCisjc2VyaWFsIDIKKworQUNfREVGVU4oW0FYX1JFUVVJUkVfREVGSU5FRF0sIFtkbmwKKyAgbTRfaWZuZGVmKFskMV0sIFttNF9mYXRhbChbbWFjcm8gXSQxWyBpcyBub3QgZGVmaW5lZDsgaXMgYSBtNCBmaWxlIG1pc3Npbmc/XSldKQorXSlkbmwgQVhfUkVRVUlSRV9ERUZJTkVECmRpZmYgLS1naXQgYS9uYW5vZnRwLmMgYi9uYW5vZnRwLmMKaW5kZXggNmRlN2QzMC4uOGZiZTdhYSAxMDA2NDQKLS0tIGEvbmFub2Z0cC5jCisrKyBiL25hbm9mdHAuYwpAQCAtMjMsNiArMjMsOCBAQAogCiAjaWZkZWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorI2luY2x1ZGUgPGlvLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTQ4LDI0ICs1MCwxNSBAQAogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvbmFub2Z0cC5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAKLS8qICNkZWZpbmUgREVCVUdfRlRQIDEgICovCi0jaWZkZWYgU1RBTkRBTE9ORQotI2lmbmRlZiBERUJVR19GVFAKLSNkZWZpbmUgREVCVUdfRlRQIDEKLSNlbmRpZgotI2VuZGlmCi0KKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9pby5oIgogCiAjaWYgZGVmaW5lZChfV0lOMzIpCiAjaW5jbHVkZSA8d3NvY2tjb21wYXQuaD4KQEAgLTc1LDI3ICs2OCwxNiBAQAogICogQSBjb3VwbGUgcG9ydGFiaWxpdHkgbWFjcm9zCiAgKi8KICNpZm5kZWYgX1dJTlNPQ0tBUElfCi0jaWYgIWRlZmluZWQoX19CRU9TX18pIHx8IGRlZmluZWQoX19IQUlLVV9fKQogI2RlZmluZSBjbG9zZXNvY2tldChzKSBjbG9zZShzKQogI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIF9fQkVPU19fCi0jaWZuZGVmIFBGX0lORVQKLSNkZWZpbmUgUEZfSU5FVCBBRl9JTkVUCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX0FJWAotI2lmZGVmIEhBVkVfQlJPS0VOX1NTX0ZBTUlMWQotI2RlZmluZSBzc19mYW1pbHkgX19zc19mYW1pbHkKLSNlbmRpZgotI2VuZGlmCiAKICNpZm5kZWYgWE1MX1NPQ0tMRU5fVAogI2RlZmluZSBYTUxfU09DS0xFTl9UIHVuc2lnbmVkIGludAogI2VuZGlmCiAKKyNkZWZpbmUgR0VUSE9TVEJZTkFNRV9BUkdfQ0FTVCAoY2hhciAqKQorI2RlZmluZSBTRU5EX0FSRzJfQ0FTVCAoY2hhciAqKQorCiAjZGVmaW5lIEZUUF9DT01NQU5EX09LCQkyMDAKICNkZWZpbmUgRlRQX1NZTlRBWF9FUlJPUgk1MDAKICNkZWZpbmUgRlRQX0dFVF9QQVNTV0QJCTMzMQpAQCAtNDE3LDE0ICszOTksNiBAQAogICAgIH0KICAgICBwcm94eVBvcnQgPSAwOwogCi0jaWZkZWYgREVCVUdfRlRQCi0gICAgaWYgKFVSTCA9PSBOVUxMKQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiUmVtb3ZpbmcgRlRQIHByb3h5IGluZm9cbiIpOwotICAgIGVsc2UKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJIlVzaW5nIEZUUCBwcm94eSAlc1xuIiwgVVJMKTsKLSNlbmRpZgogICAgIGlmIChVUkwgPT0gTlVMTCkgcmV0dXJuOwogCiAgICAgdXJpID0geG1sUGFyc2VVUklSYXcoVVJMLCAxKTsKQEAgLTU1NywyOCArNTMxLDEzIEBACiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5jb250cm9sRmQgPT0gSU5WQUxJRF9TT0NLRVQpKSByZXR1cm4oLTEpOwogCiAgICAgaWYgKChjdHh0LT5jb250cm9sQnVmSW5kZXggPCAwKSB8fCAoY3R4dC0+Y29udHJvbEJ1ZkluZGV4ID4gRlRQX0JVRl9TSVpFKSkgewotI2lmZGVmIERFQlVHX0ZUUAotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5hbm9GVFBHZXRNb3JlIDogY29udHJvbEJ1ZkluZGV4ID0gJWRcbiIsCi0JCWN0eHQtPmNvbnRyb2xCdWZJbmRleCk7Ci0jZW5kaWYKIAlyZXR1cm4oLTEpOwogICAgIH0KIAogICAgIGlmICgoY3R4dC0+Y29udHJvbEJ1ZlVzZWQgPCAwKSB8fCAoY3R4dC0+Y29udHJvbEJ1ZlVzZWQgPiBGVFBfQlVGX1NJWkUpKSB7Ci0jaWZkZWYgREVCVUdfRlRQCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTmFub0ZUUEdldE1vcmUgOiBjb250cm9sQnVmVXNlZCA9ICVkXG4iLAotCQljdHh0LT5jb250cm9sQnVmVXNlZCk7Ci0jZW5kaWYKIAlyZXR1cm4oLTEpOwogICAgIH0KICAgICBpZiAoY3R4dC0+Y29udHJvbEJ1ZkluZGV4ID4gY3R4dC0+Y29udHJvbEJ1ZlVzZWQpIHsKLSNpZmRlZiBERUJVR19GVFAKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOYW5vRlRQR2V0TW9yZSA6IGNvbnRyb2xCdWZJbmRleCA+IGNvbnRyb2xCdWZVc2VkICVkID4gJWRcbiIsCi0JICAgICAgIGN0eHQtPmNvbnRyb2xCdWZJbmRleCwgY3R4dC0+Y29udHJvbEJ1ZlVzZWQpOwotI2VuZGlmCiAJcmV0dXJuKC0xKTsKICAgICB9CiAKQEAgLTU5MywxMCArNTUyLDYgQEAKICAgICB9CiAgICAgc2l6ZSA9IEZUUF9CVUZfU0laRSAtIGN0eHQtPmNvbnRyb2xCdWZVc2VkOwogICAgIGlmIChzaXplID09IDApIHsKLSNpZmRlZiBERUJVR19GVFAKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOYW5vRlRQR2V0TW9yZSA6IGJ1ZmZlciBmdWxsICVkIFxuIiwgY3R4dC0+Y29udHJvbEJ1ZlVzZWQpOwotI2VuZGlmCiAJcmV0dXJuKDApOwogICAgIH0KIApAQCAtNjEwLDExICs1NjUsNiBAQAogICAgICAgICBjdHh0LT5jb250cm9sRmQgPSBJTlZBTElEX1NPQ0tFVDsKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICB9Ci0jaWZkZWYgREVCVUdfRlRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJ4bWxOYW5vRlRQR2V0TW9yZSA6IHJlYWQgJWQgWyVkIC0gJWRdXG4iLCBsZW4sCi0JICAgY3R4dC0+Y29udHJvbEJ1ZlVzZWQsIGN0eHQtPmNvbnRyb2xCdWZVc2VkICsgbGVuKTsKLSNlbmRpZgogICAgIGN0eHQtPmNvbnRyb2xCdWZVc2VkICs9IGxlbjsKICAgICBjdHh0LT5jb250cm9sQnVmW2N0eHQtPmNvbnRyb2xCdWZVc2VkXSA9IDA7CiAKQEAgLTY1MiwxMCArNjAyLDYgQEAKICAgICBwdHIgPSAmY3R4dC0+Y29udHJvbEJ1ZltjdHh0LT5jb250cm9sQnVmSW5kZXhdOwogICAgIGVuZCA9ICZjdHh0LT5jb250cm9sQnVmW2N0eHQtPmNvbnRyb2xCdWZVc2VkXTsKIAotI2lmZGVmIERFQlVHX0ZUUAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiXG48PDxcbiVzXG4tLVxuIiwgcHRyKTsKLSNlbmRpZgogICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKICAgICAgICAgY3VyID0geG1sTmFub0ZUUFBhcnNlUmVzcG9uc2UocHRyLCBlbmQgLSBwdHIpOwogCWlmIChjdXIgPiAwKSB7CkBAIC02ODIsMTQgKzYyOCw3IEBACiAKICAgICBpZiAocmVzIDwgMCkgZ290byBnZXRfbW9yZTsKICAgICBjdHh0LT5jb250cm9sQnVmSW5kZXggPSBwdHIgLSBjdHh0LT5jb250cm9sQnVmOwotI2lmZGVmIERFQlVHX0ZUUAotICAgIHB0ciA9ICZjdHh0LT5jb250cm9sQnVmW2N0eHQtPmNvbnRyb2xCdWZJbmRleF07Ci0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJcbi0tLVxuJXNcbi0tXG4iLCBwdHIpOwotI2VuZGlmCiAKLSNpZmRlZiBERUJVR19GVFAKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkdvdCAlZFxuIiwgcmVzKTsKLSNlbmRpZgogICAgIHJldHVybihyZXMgLyAxMDApOwogfQogCkBAIC03NTgsOSArNjk3LDYgQEAKIAlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVVNFUiAlc1xyXG4iLCBjdHh0LT51c2VyKTsKICAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CiAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKICAgICByZXMgPSBzZW5kKGN0eHQtPmNvbnRyb2xGZCwgU0VORF9BUkcyX0NBU1QgYnVmLCBsZW4sIDApOwogICAgIGlmIChyZXMgPCAwKSB7CiAJX194bWxJT0VycihYTUxfRlJPTV9GVFAsIDAsICJzZW5kIGZhaWxlZCIpOwpAQCAtNzg2LDkgKzcyMiw2IEBACiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlBBU1MgJXNcclxuIiwgY3R4dC0+cGFzc3dkKTsKICAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CiAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKICAgICByZXMgPSBzZW5kKGN0eHQtPmNvbnRyb2xGZCwgU0VORF9BUkcyX0NBU1QgYnVmLCBsZW4sIDApOwogICAgIGlmIChyZXMgPCAwKSB7CiAJX194bWxJT0VycihYTUxfRlJPTV9GVFAsIDAsICJzZW5kIGZhaWxlZCIpOwpAQCAtODE3LDkgKzc1MCw2IEBACiAKICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiUVVJVFxyXG4iKTsKICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSNpZmRlZiBERUJVR19GVFAKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzIiwgYnVmKTsgLyogSnVzdCB0byBiZSBjb25zaXN0ZW50LCBldmVuIHRob3VnaCB3ZSBrbm93IGl0IGNhbid0IGhhdmUgYSAlIGluIGl0ICovCi0jZW5kaWYKICAgICByZXMgPSBzZW5kKGN0eHQtPmNvbnRyb2xGZCwgU0VORF9BUkcyX0NBU1QgYnVmLCBsZW4sIDApOwogICAgIGlmIChyZXMgPCAwKSB7CiAJX194bWxJT0VycihYTUxfRlJPTV9GVFAsIDAsICJzZW5kIGZhaWxlZCIpOwpAQCAtMTAxMyw5ICs5NDMsNiBAQAogCSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVVNFUiAlc1xyXG4iLCBwcm94eVVzZXIpOwogICAgICAgICAgICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwogICAgICAgICAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiJXMiLCBidWYpOwotI2VuZGlmCiAJICAgIHJlcyA9IHNlbmQoY3R4dC0+Y29udHJvbEZkLCBTRU5EX0FSRzJfQ0FTVCBidWYsIGxlbiwgMCk7CiAJICAgIGlmIChyZXMgPCAwKSB7CiAJCV9feG1sSU9FcnIoWE1MX0ZST01fRlRQLCAwLCAic2VuZCBmYWlsZWQiKTsKQEAgLTEwMzYsOSArOTYzLDYgQEAKIAkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJQQVNTIGFub255bW91c0BcclxuIik7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgICAgICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzIiwgYnVmKTsKLSNlbmRpZgogCQkgICAgcmVzID0gc2VuZChjdHh0LT5jb250cm9sRmQsIFNFTkRfQVJHMl9DQVNUIGJ1ZiwgbGVuLCAwKTsKIAkJICAgIGlmIChyZXMgPCAwKSB7CiAJCQlfX3htbElPRXJyKFhNTF9GUk9NX0ZUUCwgMCwgInNlbmQgZmFpbGVkIik7CkBAIC0xMDc3LDkgKzEwMDEsNiBAQAogCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiU0lURSAlc1xyXG4iLCBjdHh0LT5ob3N0bmFtZSk7CiAgICAgICAgICAgICAgICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwogICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihidWYpOwotI2lmZGVmIERFQlVHX0ZUUAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzIiwgYnVmKTsKLSNlbmRpZgogCQlyZXMgPSBzZW5kKGN0eHQtPmNvbnRyb2xGZCwgU0VORF9BUkcyX0NBU1QgYnVmLCBsZW4sIDApOwogCQlpZiAocmVzIDwgMCkgewogCQkgICAgX194bWxJT0VycihYTUxfRlJPTV9GVFAsIDAsICJzZW5kIGZhaWxlZCIpOwpAQCAtMTEwOSw5ICsxMDMwLDYgQEAKIAkJCSAgICAgICAgICAgY3R4dC0+dXNlciwgY3R4dC0+aG9zdG5hbWUpOwogICAgICAgICAgICAgICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSNpZmRlZiBERUJVR19GVFAKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKIAkJcmVzID0gc2VuZChjdHh0LT5jb250cm9sRmQsIFNFTkRfQVJHMl9DQVNUIGJ1ZiwgbGVuLCAwKTsKIAkJaWYgKHJlcyA8IDApIHsKIAkJICAgIF9feG1sSU9FcnIoWE1MX0ZST01fRlRQLCAwLCAic2VuZCBmYWlsZWQiKTsKQEAgLTExMzEsOSArMTA0OSw2IEBACiAJCSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiUEFTUyAlc1xyXG4iLCBjdHh0LT5wYXNzd2QpOwogICAgICAgICAgICAgICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSNpZmRlZiBERUJVR19GVFAKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKIAkJcmVzID0gc2VuZChjdHh0LT5jb250cm9sRmQsIFNFTkRfQVJHMl9DQVNUIGJ1ZiwgbGVuLCAwKTsKIAkJaWYgKHJlcyA8IDApIHsKIAkJICAgIF9feG1sSU9FcnIoWE1MX0ZST01fRlRQLCAwLCAic2VuZCBmYWlsZWQiKTsKQEAgLTEyODIsOSArMTE5Nyw2IEBACiAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkNXRCAlc1xyXG4iLCBkaXJlY3RvcnkpOwogICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSNpZmRlZiBERUJVR19GVFAKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzIiwgYnVmKTsKLSNlbmRpZgogICAgIHJlcyA9IHNlbmQoY3R4dC0+Y29udHJvbEZkLCBTRU5EX0FSRzJfQ0FTVCBidWYsIGxlbiwgMCk7CiAgICAgaWYgKHJlcyA8IDApIHsKIAlfX3htbElPRXJyKFhNTF9GUk9NX0ZUUCwgMCwgInNlbmQgZmFpbGVkIik7CkBAIC0xMzMzLDkgKzEyNDUsNiBAQAogICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJERUxFICVzXHJcbiIsIGZpbGUpOwogICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSNpZmRlZiBERUJVR19GVFAKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzIiwgYnVmKTsKLSNlbmRpZgogICAgIHJlcyA9IHNlbmQoY3R4dC0+Y29udHJvbEZkLCBTRU5EX0FSRzJfQ0FTVCBidWYsIGxlbiwgMCk7CiAgICAgaWYgKHJlcyA8IDApIHsKIAlfX3htbElPRXJyKFhNTF9GUk9NX0ZUUCwgMCwgInNlbmQgZmFpbGVkIik7CkBAIC0xNDA1LDkgKzEzMTQsNiBAQAogI2VuZGlmCiAJICAgIHNucHJpbnRmIChidWYsIHNpemVvZihidWYpLCAiUEFTVlxyXG4iKTsKICAgICAgICAgbGVuID0gc3RybGVuIChidWYpOwotI2lmZGVmIERFQlVHX0ZUUAotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiJXMiLCBidWYpOwotI2VuZGlmCiAJcmVzID0gc2VuZChjdHh0LT5jb250cm9sRmQsIFNFTkRfQVJHMl9DQVNUIGJ1ZiwgbGVuLCAwKTsKIAlpZiAocmVzIDwgMCkgewogCSAgICBfX3htbElPRXJyKFhNTF9GUk9NX0ZUUCwgMCwgInNlbmQgZmFpbGVkIik7CkBAIC0xNTA1LDkgKzE0MTEsNiBAQAogCiAgICAgICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgICAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKIAogCXJlcyA9IHNlbmQoY3R4dC0+Y29udHJvbEZkLCBTRU5EX0FSRzJfQ0FTVCBidWYsIGxlbiwgMCk7CiAJaWYgKHJlcyA8IDApIHsKQEAgLTE1NTIsMTcgKzE0NTUsMTAgQEAKICAgICBGRF9TRVQoY3R4dC0+Y29udHJvbEZkLCAmZWZkKTsKICAgICByZXMgPSBzZWxlY3QoY3R4dC0+Y29udHJvbEZkICsgMSwgJnJmZCwgTlVMTCwgJmVmZCwgJnR2KTsKICAgICBpZiAocmVzIDwgMCkgewotI2lmZGVmIERFQlVHX0ZUUAotCXBlcnJvcigic2VsZWN0Iik7Ci0jZW5kaWYKIAljbG9zZXNvY2tldChjdHh0LT5jb250cm9sRmQpOyBjdHh0LT5jb250cm9sRmQgPSBJTlZBTElEX1NPQ0tFVDsKIAlyZXR1cm4oLTEpOwogICAgIH0KICAgICBpZiAocmVzID09IDApIHsKLSNpZmRlZiBERUJVR19GVFAKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5hbm9GVFBDbG9zZUNvbm5lY3Rpb246IHRpbWVvdXRcbiIpOwotI2VuZGlmCiAJY2xvc2Vzb2NrZXQoY3R4dC0+Y29udHJvbEZkKTsgY3R4dC0+Y29udHJvbEZkID0gSU5WQUxJRF9TT0NLRVQ7CiAgICAgfSBlbHNlIHsKIAlyZXMgPSB4bWxOYW5vRlRQR2V0UmVzcG9uc2UoY3R4dCk7CkBAIC0xNzQzLDkgKzE2MzksNiBAQAogICAgIH0KICAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CiAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKICAgICByZXMgPSBzZW5kKGN0eHQtPmNvbnRyb2xGZCwgU0VORF9BUkcyX0NBU1QgYnVmLCBsZW4sIDApOwogICAgIGlmIChyZXMgPCAwKSB7CiAJX194bWxJT0VycihYTUxfRlJPTV9GVFAsIDAsICJzZW5kIGZhaWxlZCIpOwpAQCAtMTc2Nyw5ICsxNjYwLDYgQEAKIAlGRF9TRVQoY3R4dC0+ZGF0YUZkLCAmZWZkKTsKIAlyZXMgPSBzZWxlY3QoY3R4dC0+ZGF0YUZkICsgMSwgJnJmZCwgTlVMTCwgJmVmZCwgJnR2KTsKIAlpZiAocmVzIDwgMCkgewotI2lmZGVmIERFQlVHX0ZUUAotCSAgICBwZXJyb3IoInNlbGVjdCIpOwotI2VuZGlmCiAJICAgIGNsb3Nlc29ja2V0KGN0eHQtPmRhdGFGZCk7IGN0eHQtPmRhdGFGZCA9IElOVkFMSURfU09DS0VUOwogCSAgICByZXR1cm4oLTEpOwogCX0KQEAgLTE3OTQsOSArMTY4NCw2IEBACiAJICAgIGN0eHQtPmRhdGFGZCA9IElOVkFMSURfU09DS0VUOwogCSAgICByZXR1cm4oLTEpOwogCX0KLSNpZmRlZiBERUJVR19GVFAKLSAgICAgICAgd3JpdGUoMSwgJmJ1ZltpbmR4XSwgbGVuKTsKLSNlbmRpZgogCWluZHggKz0gbGVuOwogCWJ1ZltpbmR4XSA9IDA7CiAJYmFzZSA9IDA7CkBAIC0xODM4LDkgKzE3MjUsNiBAQAogCiAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlRZUEUgSVxyXG4iKTsKICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSNpZmRlZiBERUJVR19GVFAKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzIiwgYnVmKTsKLSNlbmRpZgogICAgIHJlcyA9IHNlbmQoY3R4dC0+Y29udHJvbEZkLCBTRU5EX0FSRzJfQ0FTVCBidWYsIGxlbiwgMCk7CiAgICAgaWYgKHJlcyA8IDApIHsKIAlfX3htbElPRXJyKFhNTF9GUk9NX0ZUUCwgMCwgInNlbmQgZmFpbGVkIik7CkBAIC0xODU4LDkgKzE3NDIsNiBAQAogCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJSRVRSICVzXHJcbiIsIGZpbGVuYW1lKTsKICAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CiAgICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jaWZkZWYgREVCVUdfRlRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyIsIGJ1Zik7Ci0jZW5kaWYKICAgICByZXMgPSBzZW5kKGN0eHQtPmNvbnRyb2xGZCwgU0VORF9BUkcyX0NBU1QgYnVmLCBsZW4sIDApOwogICAgIGlmIChyZXMgPCAwKSB7CiAJX194bWxJT0VycihYTUxfRlJPTV9GVFAsIDAsICJzZW5kIGZhaWxlZCIpOwpAQCAtMTkxMiw5ICsxNzkzLDYgQEAKIAlGRF9TRVQoY3R4dC0+ZGF0YUZkLCAmcmZkKTsKIAlyZXMgPSBzZWxlY3QoY3R4dC0+ZGF0YUZkICsgMSwgJnJmZCwgTlVMTCwgTlVMTCwgJnR2KTsKIAlpZiAocmVzIDwgMCkgewotI2lmZGVmIERFQlVHX0ZUUAotCSAgICBwZXJyb3IoInNlbGVjdCIpOwotI2VuZGlmCiAJICAgIGNsb3Nlc29ja2V0KGN0eHQtPmRhdGFGZCk7IGN0eHQtPmRhdGFGZCA9IElOVkFMSURfU09DS0VUOwogCSAgICByZXR1cm4oLTEpOwogCX0KQEAgLTE5NzEsOSArMTg0OSw2IEBACiAJICAgIF9feG1sSU9FcnIoWE1MX0ZST01fRlRQLCAwLCAicmVjdiBmYWlsZWQiKTsKIAl4bWxOYW5vRlRQQ2xvc2VDb25uZWN0aW9uKGN0eHQpOwogICAgIH0KLSNpZmRlZiBERUJVR19GVFAKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlJlY3ZkICVkIGJ5dGVzXG4iLCBsZW4pOwotI2VuZGlmCiAgICAgcmV0dXJuKGxlbik7CiB9CiAKQEAgLTIwOTIsNyArMTk2Nyw2IEBACiAKICAgICB9CiAgICAgeG1sTmFub0ZUUENsb3NlKGN0eHQpOwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICBleGl0KDApOwogfQogI2VuZGlmIC8qIFNUQU5EQUxPTkUgKi8KZGlmZiAtLWdpdCBhL25hbm9odHRwLmMgYi9uYW5vaHR0cC5jCmluZGV4IDJlYWZkM2YuLjBkN2FmNDggMTAwNjQ0Ci0tLSBhL25hbm9odHRwLmMKKysrIGIvbmFub2h0dHAuYwpAQCAtMTYsMTQgKzE2LDE0IEBACiAKICNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCiAjaWZkZWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VsaWYgZGVmaW5lZCAoX1dJTjMyKQorI2luY2x1ZGUgPGlvLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTM3LDEyICszNyw2IEBACiAjaWZkZWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgotI2lmZGVmIEhBVkVfUkVTT0xWX0gKLSNpZmRlZiBIQVZFX0FSUEFfTkFNRVNFUl9ICi0jaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgogI2lmZGVmIEhBVkVfRkNOVExfSAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjZW5kaWYKQEAgLTcwLDM3ICs2NCwzMiBAQAogI2luY2x1ZGUgPHdzb2NrY29tcGF0Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbG1lbW9yeS5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4gLyogZm9yIHhtbFN0cihuKWNhc2VjbXAoKSAqLwogI2luY2x1ZGUgPGxpYnhtbC9uYW5vaHR0cC5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAjaW5jbHVkZSA8bGlieG1sL3VyaS5oPgogCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgorI2luY2x1ZGUgInByaXZhdGUvaW8uaCIKKwogLyoqCiAgKiBBIGNvdXBsZSBwb3J0YWJpbGl0eSBtYWNyb3MKICAqLwogI2lmbmRlZiBfV0lOU09DS0FQSV8KLSNpZiAhZGVmaW5lZChfX0JFT1NfXykgfHwgZGVmaW5lZChfX0hBSUtVX18pCiAjZGVmaW5lIGNsb3Nlc29ja2V0KHMpIGNsb3NlKHMpCi0jZW5kaWYKICNkZWZpbmUgU09DS0VUIGludAogI2RlZmluZSBJTlZBTElEX1NPQ0tFVCAoLTEpCiAjZW5kaWYKIAotI2lmZGVmIF9fQkVPU19fCi0jaWZuZGVmIFBGX0lORVQKLSNkZWZpbmUgUEZfSU5FVCBBRl9JTkVUCi0jZW5kaWYKLSNlbmRpZgotCiAjaWZuZGVmIFhNTF9TT0NLTEVOX1QKICNkZWZpbmUgWE1MX1NPQ0tMRU5fVCB1bnNpZ25lZCBpbnQKICNlbmRpZgogCisjZGVmaW5lIEdFVEhPU1RCWU5BTUVfQVJHX0NBU1QgKGNoYXIgKikKKyNkZWZpbmUgU0VORF9BUkcyX0NBU1QgKGNoYXIgKikKKwogI2lmZGVmIFNUQU5EQUxPTkUKLSNkZWZpbmUgREVCVUdfSFRUUAogI2RlZmluZSB4bWxTdHJuY2FzZWNtcChhLCBiLCBuKSBzdHJuY2FzZWNtcCgoY2hhciAqKWEsIChjaGFyICopYiwgbikKICNkZWZpbmUgeG1sU3RyY2FzZWNtcGkoYSwgYikgc3RyY2FzZWNtcCgoY2hhciAqKWEsIChjaGFyICopYikKICNlbmRpZgpAQCAtMTg4LDIwICsxNzcsNiBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBTVVBQT1JUX0lQNgotc3RhdGljCi1pbnQgaGF2ZV9pcHY2KHZvaWQpIHsKLSAgICBTT0NLRVQgczsKLQotICAgIHMgPSBzb2NrZXQgKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYgKHMgIT0gSU5WQUxJRF9TT0NLRVQpIHsKLQljbG9zZSAocyk7Ci0JcmV0dXJuICgxKTsKLSAgICB9Ci0gICAgcmV0dXJuICgwKTsKLX0KLSNlbmRpZgotCiAvKioKICAqIHhtbE5hbm9IVFRQSW5pdDoKICAqCkBAIC0zNTAsMTQgKzMyNSw2IEBACiAgICAgfQogICAgIHByb3h5UG9ydCA9IDA7CiAKLSNpZmRlZiBERUJVR19IVFRQCi0gICAgaWYgKFVSTCA9PSBOVUxMKQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiUmVtb3ZpbmcgSFRUUCBwcm94eSBpbmZvXG4iKTsKLSAgICBlbHNlCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJVc2luZyBIVFRQIHByb3h5ICVzXG4iLCBVUkwpOwotI2VuZGlmCiAgICAgaWYgKFVSTCA9PSBOVUxMKSByZXR1cm47CiAKICAgICB1cmkgPSB4bWxQYXJzZVVSSVJhdyhVUkwsIDEpOwpAQCAtNTM1LDcgKzUwMiw3IEBACiAKICAgICB3aGlsZSAoY3R4dC0+c3RhdGUgJiBYTUxfTkFOT19IVFRQX1JFQUQpIHsKICAgICAgICAgaWYgKGN0eHQtPmluID09IE5VTEwpIHsKLSAgICAgICAgICAgIGN0eHQtPmluID0gKGNoYXIgKikgeG1sTWFsbG9jQXRvbWljKDY1MDAwICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGN0eHQtPmluID0gKGNoYXIgKikgeG1sTWFsbG9jQXRvbWljKDY1MDAwKTsKICAgICAgICAgICAgIGlmIChjdHh0LT5pbiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgeG1sSFRUUEVyck1lbW9yeSgiYWxsb2NhdGluZyBpbnB1dCIpOwogICAgICAgICAgICAgICAgIGN0eHQtPmxhc3QgPSAtMTsKQEAgLTg3Niw5ICs4NDMsNiBAQAogICAgICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAgICAgfQogICAgIGlmIChzID09IElOVkFMSURfU09DS0VUKSB7Ci0jaWZkZWYgREVCVUdfSFRUUAotICAgICAgICBwZXJyb3IoInNvY2tldCIpOwotI2VuZGlmCiAgICAgICAgIF9feG1sSU9FcnIoWE1MX0ZST01fSFRUUCwgMCwgInNvY2tldCBmYWlsZWRcbiIpOwogICAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVQ7CiAgICAgfQpAQCAtODk2LDE1ICs4NjAsNiBAQAogICAgICAgICBzdGF0dXMgPSBpb2N0bChzLCBGSU9OQklPLCAmZW5hYmxlKTsKICAgICB9CiAjZWxzZSAvKiBWTVMgKi8KLSNpZiBkZWZpbmVkKF9fQkVPU19fKSAmJiAhZGVmaW5lZChfX0hBSUtVX18pCi0gICAgewotICAgICAgICBib29sIG5vYmxvY2sgPSB0cnVlOwotCi0gICAgICAgIHN0YXR1cyA9Ci0gICAgICAgICAgICBzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX05PTkJMT0NLLCAmbm9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5vYmxvY2spKTsKLSAgICB9Ci0jZWxzZSAvKiBfX0JFT1NfXyAqLwogICAgIGlmICgoc3RhdHVzID0gZmNudGwocywgRl9HRVRGTCwgMCkpICE9IC0xKSB7CiAjaWZkZWYgT19OT05CTE9DSwogICAgICAgICBzdGF0dXMgfD0gT19OT05CTE9DSzsKQEAgLTkxNiwxNCArODcxLDEwIEBACiAgICAgICAgIHN0YXR1cyA9IGZjbnRsKHMsIEZfU0VURkwsIHN0YXR1cyk7CiAgICAgfQogICAgIGlmIChzdGF0dXMgPCAwKSB7Ci0jaWZkZWYgREVCVUdfSFRUUAotICAgICAgICBwZXJyb3IoIm5vbmJsb2NraW5nIik7Ci0jZW5kaWYKICAgICAgICAgX194bWxJT0VycihYTUxfRlJPTV9IVFRQLCAwLCAiZXJyb3Igc2V0dGluZyBub24tYmxvY2tpbmcgSU9cbiIpOwogICAgICAgICBjbG9zZXNvY2tldChzKTsKICAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOwogICAgIH0KLSNlbmRpZiAvKiAhX19CRU9TX18gKi8KICNlbmRpZiAvKiAhVk1TICovCiAjZW5kaWYgLyogIV9XSU5TT0NLQVBJXyAqLwogCkBAIC0xMDQyLDMzICs5OTMsMTkgQEAKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2luOwogCiAjaWZkZWYgU1VQUE9SVF9JUDYKLSAgICBzdHJ1Y3QgaW42X2FkZHIgaWE2OwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc29ja2luNjsKICNlbmRpZgogICAgIFNPQ0tFVCBzOwogCiAgICAgbWVtc2V0ICgmc29ja2luLCAwLCBzaXplb2Yoc29ja2luKSk7Ci0jaWZkZWYgU1VQUE9SVF9JUDYKLSAgICBtZW1zZXQgKCZzb2NraW42LCAwLCBzaXplb2Yoc29ja2luNikpOwotI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSAmJiBkZWZpbmVkKFNVUFBPUlRfSVA2KSAmJiBkZWZpbmVkKFJFU19VU0VfSU5FVDYpCi0gICAgaWYgKGhhdmVfaXB2NiAoKSkKLSAgICB7Ci0JaWYgKCEoX3Jlcy5vcHRpb25zICYgUkVTX0lOSVQpKQotCSAgICByZXNfaW5pdCgpOwotCV9yZXMub3B0aW9ucyB8PSBSRVNfVVNFX0lORVQ2OwotICAgIH0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSAmJiBkZWZpbmVkKFNVUFBPUlRfSVA2KSAmJiAhZGVmaW5lZChfV0lOMzIpCi0gICAgaWYgKGhhdmVfaXB2NiAoKSkKLSNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgJiYgKGRlZmluZWQoU1VQUE9SVF9JUDYpIHx8IGRlZmluZWQoX1dJTjMyKSkKKyNpZiBkZWZpbmVkKFNVUFBPUlRfSVA2KQogICAgIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlcywgKnJlc3VsdDsKIAorICAgICAgICBtZW1zZXQgKCZzb2NraW42LCAwLCBzaXplb2Yoc29ja2luNikpOworCiAJcmVzdWx0ID0gTlVMTDsKIAltZW1zZXQgKCZoaW50cywgMCxzaXplb2YoaGludHMpKTsKIAloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOwpAQCAtMTA4OSw4ICsxMDI2LDcgQEAKIAkJbWVtY3B5ICgmc29ja2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CiAJCXNvY2tpbi5zaW5fcG9ydCA9IGh0b25zIChwb3J0KTsKIAkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc29ja2luOwotI2lmZGVmIFNVUFBPUlRfSVA2Ci0JICAgIH0gZWxzZSBpZiAoaGF2ZV9pcHY2ICgpICYmIChyZXMtPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikpIHsKKwkgICAgfSBlbHNlIGlmIChyZXMtPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikgewogCQlpZiAoKHNpemVfdClyZXMtPmFpX2FkZHJsZW4gPiBzaXplb2Yoc29ja2luNikpIHsKIAkJICAgIF9feG1sSU9FcnIoWE1MX0ZST01fSFRUUCwgMCwgImFkZHJlc3Mgc2l6ZSBtaXNtYXRjaFxuIik7CiAJCSAgICBmcmVlYWRkcmluZm8gKHJlc3VsdCk7CkBAIC0xMDk5LDcgKzEwMzUsNiBAQAogCQltZW1jcHkgKCZzb2NraW42LCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CiAJCXNvY2tpbjYuc2luNl9wb3J0ID0gaHRvbnMgKHBvcnQpOwogCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzb2NraW42OwotI2VuZGlmCiAJICAgIH0gZWxzZQogCQljb250aW51ZTsgICAgICAgICAgICAgIC8qIGZvciAqLwogCkBAIC0xMTEzLDExICsxMDQ4LDcgQEAKIAlpZiAocmVzdWx0KQogCSAgICBmcmVlYWRkcmluZm8gKHJlc3VsdCk7CiAgICAgfQotI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSAmJiBkZWZpbmVkKFNVUFBPUlRfSVA2KSAmJiAhZGVmaW5lZChfV0lOMzIpCi0gICAgZWxzZQotI2VuZGlmCi0jaWYgIWRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgfHwgIWRlZmluZWQoX1dJTjMyKQorI2Vsc2UKICAgICB7CiAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoOwogICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpYTsKQEAgLTExNzksMTkgKzExMTAsNiBAQAogCQlzb2NraW4uc2luX2FkZHIgPSBpYTsKIAkJc29ja2luLnNpbl9wb3J0ID0gKHVuc2lnbmVkIHNob3J0KWh0b25zICgodW5zaWduZWQgc2hvcnQpcG9ydCk7CiAJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopICZzb2NraW47Ci0jaWZkZWYgU1VQUE9SVF9JUDYKLQkgICAgfSBlbHNlIGlmIChoYXZlX2lwdjYgKCkgJiYgKGgtPmhfYWRkcnR5cGUgPT0gQUZfSU5FVDYpKSB7Ci0JCS8qIEFBQUEgcmVjb3JkcyAoSVB2NikgKi8KLQkJaWYgKCh1bnNpZ25lZCBpbnQpIGgtPmhfbGVuZ3RoID4gc2l6ZW9mKGlhNikpIHsKLQkJICAgIF9feG1sSU9FcnIoWE1MX0ZST01fSFRUUCwgMCwgImFkZHJlc3Mgc2l6ZSBtaXNtYXRjaFxuIik7Ci0JCSAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVQ7Ci0JCX0KLQkJbWVtY3B5ICgmaWE2LCBoLT5oX2FkZHJfbGlzdFtpXSwgaC0+aF9sZW5ndGgpOwotCQlzb2NraW42LnNpbjZfZmFtaWx5ID0gaC0+aF9hZGRydHlwZTsKLQkJc29ja2luNi5zaW42X2FkZHIgPSBpYTY7Ci0JCXNvY2tpbjYuc2luNl9wb3J0ID0gaHRvbnMgKHBvcnQpOwotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmc29ja2luNjsKLSNlbmRpZgogCSAgICB9IGVsc2UKIAkJYnJlYWs7ICAgICAgICAgICAgICAvKiBmb3IgKi8KIApAQCAtMTIwMiwxMSArMTEyMCw2IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBERUJVR19IVFRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJ4bWxOYW5vSFRUUENvbm5lY3RIb3N0OiAgdW5hYmxlIHRvIGNvbm5lY3QgdG8gJyVzJy5cbiIsCi0gICAgICAgICAgICAgICAgICAgIGhvc3QpOwotI2VuZGlmCiAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOwogfQogCkBAIC0xMzI3LDYgKzEyNDAsMTA3IEBACiAgICAgeG1sTmFub0hUVFBGcmVlQ3R4dChjdHh0KTsKIH0KIAorCisvKioKKyAqIHhtbE5hbm9IVFRQSG9zdG5hbWVNYXRjaDoKKyAqIEBwYXR0ZXJuOiBUaGUgcGF0dGVybiBhcyBpdCBhcHBlYXJzIGluIG5vX3Byb3h5IGVudmlyb25tZW50IHZhcmlhYmxlCisgKiBAaG9zdG5hbWU6IFRoZSBob3N0bmFtZSB0byB0ZXN0IGFzIGl0IGFwcGVhcnMgaW4gdGhlIFVSTAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGVzdHMgd2hldGhlciBhIGdpdmVuIGhvc3RuYW1lIG1hdGNoZXMgYSBwYXR0ZXJuLiBUaGUgcGF0dGVybgorICogdXN1YWxseSBpcyBhIHRva2VuIGZyb20gdGhlIG5vX3Byb3h5IGVudmlyb25tZW50IHZhcmlhYmxlLiBXaWxkY2FyZHMgaW4gdGhlCisgKiBwYXR0ZXJuIGFyZSBub3Qgc3VwcG9ydGVkLgorICoKKyAqIFJldHVybnMgdHJ1ZSwgaWZmIGhvc3RuYW1lIG1hdGNoZXMgdGhlIHBhdHRlcm4uCisgKi8KKworc3RhdGljIGludCAKK3htbE5hbm9IVFRQSG9zdG5hbWVNYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpob3N0bmFtZSkgeworICAgIGludCBpZHhfcGF0dGVybiwgaWR4X2hvc3RuYW1lOworICAgIGNvbnN0IGNoYXIgKiBwYXR0ZXJuX3N0YXJ0OworCisgICAgaWYgKCFwYXR0ZXJuIHx8ICpwYXR0ZXJuID09ICdcMCcgfHwgIWhvc3RuYW1lKQorCXJldHVybiAwOworCisgICAgLyogSWdub3JlIHRyYWlsaW5nICcuJyAqLworICAgIGlmICgqcGF0dGVybiA9PSAnLicpIHsKKyAgICAgICAgaWR4X3BhdHRlcm4gPSBzdHJsZW4ocGF0dGVybikgLTE7CisgICAgICAgIHBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuICsgMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlkeF9wYXR0ZXJuID0gc3RybGVuKHBhdHRlcm4pOworICAgICAgICBwYXR0ZXJuX3N0YXJ0ID0gcGF0dGVybjsKKyAgICB9CisgICAgaWR4X2hvc3RuYW1lID0gc3RybGVuKGhvc3RuYW1lKTsKKworICAgIGZvciAoOyBpZHhfcGF0dGVybiA+PSAwICYmIGlkeF9ob3N0bmFtZSA+PSAwOyAKKyAgICAgICAgICAgLS1pZHhfcGF0dGVybiwgLS1pZHhfaG9zdG5hbWUpIHsKKwlpZiAodG9sb3dlcihwYXR0ZXJuX3N0YXJ0W2lkeF9wYXR0ZXJuXSkgIT0gdG9sb3dlcihob3N0bmFtZVtpZHhfaG9zdG5hbWVdKSkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGlkeF9wYXR0ZXJuID09IC0xICYmIChpZHhfaG9zdG5hbWUgPT0gLTF8fCBob3N0bmFtZVtpZHhfaG9zdG5hbWVdID09ICcuJyk7Cit9CisKKworLyoqCisgKiB4bWxOYW5vSFRUUEJ5cGFzc1Byb3h5OgorICogQGhvc3RuYW1lOiBUaGUgaG9zdG5hbWUgYXMgaXQgYXBwZWFycyBpbiB0aGUgVVJMCisgKgorICogVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIG5vX3Byb3h5IGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCByZXR1cm5zCisgKiB3aGV0aGVyIHRoZSBwcm94eSBzZXJ2ZXIgc2hvdWxkIGJlIGJ5cGFzc2VkIGZvciBhIGdpdmVuIGhvc3QuCisgKgorICogUmV0dXJucyB0cnVlLCBpZmYgYSBwcm94eSBzZXJ2ZXIgc2hvdWxkIGJlIGJ5cGFzc2VkIGZvciB0aGUgZ2l2ZW4gaG9zdG5hbWUuCisgKi8KKworc3RhdGljIGludAoreG1sTmFub0hUVFBCeXBhc3NQcm94eShjb25zdCBjaGFyICpob3N0bmFtZSkgeworICAgIHNpemVfdCBlbnZsZW47CisgICAgY2hhciAqZW52ID0gZ2V0ZW52KCJub19wcm94eSIpLCAqY3B5PU5VTEwsICpwPU5VTEw7CisgICAgaWYgKCFlbnYpCisJcmV0dXJuIDA7CisKKyAgICAvKiAoQXZvaWQgc3RyZHVwIGJlY2F1c2UgaXQncyBub3QgcG9ydGFibGUuKSAqLworICAgIGVudmxlbiA9IHN0cmxlbihlbnYpICsgMTsKKyAgICBjcHkgPSB4bWxNYWxsb2MoZW52bGVuKTsKKyAgICBtZW1jcHkoY3B5LCBlbnYsIGVudmxlbik7CisgICAgZW52ID0gY3B5OworCisgICAgLyogVGhlIHJlbWFpbmRlciBvZiB0aGUgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGEgdG9rZW5pemluZzogKi8KKyAgICB3aGlsZSAoaXNzcGFjZSgqZW52KSkKKyAgICAJKytlbnY7CisgICAgaWYgKCplbnYgPT0gJ1wwJykgeworICAgIAl4bWxGcmVlKGNweSk7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgcCA9IGVudjsKKyAgICB3aGlsZSAoKmVudikgeworCisgICAgCWlmICgqZW52ICE9ICcsJykgeworCSAgICArK2VudjsKKwkgICAgY29udGludWU7CisJfQorCisJKihlbnYrKykgPSAnXDAnOworCWlmICh4bWxOYW5vSFRUUEhvc3RuYW1lTWF0Y2gocCwgaG9zdG5hbWUpKSB7CisJICAgIHhtbEZyZWUoY3B5KTsKKwkgICAgcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKGlzc3BhY2UoKmVudikpCisJICAgICsrZW52OworCXAgPSBlbnY7CisgICAgfQorICAgIGlmICh4bWxOYW5vSFRUUEhvc3RuYW1lTWF0Y2gocCwgaG9zdG5hbWUpKSB7CisgICAgCXhtbEZyZWUoY3B5KTsKKyAgICAJcmV0dXJuIDE7CisgICAgfQorCisgICAgeG1sRnJlZShjcHkpOworICAgIHJldHVybiAwOworfQorCisKIC8qKgogICogeG1sTmFub0hUVFBNZXRob2RSZWRpcjoKICAqIEBVUkw6ICBUaGUgVVJMIHRvIGxvYWQKQEAgLTEzNTQsMTAgKzEzNjgsOCBAQAogICAgIGludCBibGVuOwogICAgIFNPQ0tFVCByZXQ7CiAgICAgaW50IG5iUmVkaXJlY3RzID0gMDsKKyAgICBpbnQgdXNlX3Byb3h5OwogICAgIGNoYXIgKnJlZGlyVVJMID0gTlVMTDsKLSNpZmRlZiBERUJVR19IVFRQCi0gICAgaW50IHhtdF9ieXRlczsKLSNlbmRpZgogCiAgICAgaWYgKFVSTCA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CiAgICAgaWYgKG1ldGhvZCA9PSBOVUxMKSBtZXRob2QgPSAiR0VUIjsKQEAgLTEzODgsNyArMTQwMCw4IEBACiAJaWYgKHJlZGlyVVJMICE9IE5VTEwpIHhtbEZyZWUocmVkaXJVUkwpOwogICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIGlmIChwcm94eSkgeworICAgIHVzZV9wcm94eSA9IHByb3h5ICYmICF4bWxOYW5vSFRUUEJ5cGFzc1Byb3h5KGN0eHQtPmhvc3RuYW1lKTsKKyAgICBpZiAodXNlX3Byb3h5KSB7CiAJYmxlbiA9IHN0cmxlbihjdHh0LT5ob3N0bmFtZSkgKiAyICsgMTY7CiAJcmV0ID0geG1sTmFub0hUVFBDb25uZWN0SG9zdChwcm94eSwgcHJveHlQb3J0KTsKICAgICB9CkBAIC0xNDIzLDcgKzE0MzYsNyBAQAogI2VuZGlmCiAgICAgaWYgKGN0eHQtPnBvcnQgIT0gODApIHsKIAkvKiByZXNlcnZlIHNwYWNlIGZvciAnOnh4eHh4JywgaW5jbC4gcG90ZW50aWFsIHByb3h5ICovCi0JaWYgKHByb3h5KQorCWlmICh1c2VfcHJveHkpCiAJICAgIGJsZW4gKz0gMTc7CiAJZWxzZQogCSAgICBibGVuICs9IDExOwpAQCAtMTQzNyw3ICsxNDUwLDcgQEAKIAogICAgIHAgPSBicDsKIAotICAgIGlmIChwcm94eSkgeworICAgIGlmICh1c2VfcHJveHkpIHsKIAlpZiAoY3R4dC0+cG9ydCAhPSA4MCkgewogCSAgICBwICs9IHNucHJpbnRmKCBwLCBibGVuIC0gKHAgLSBicCksICIlcyBodHRwOi8vJXM6JWQlcyIsCiAJCQltZXRob2QsIGN0eHQtPmhvc3RuYW1lLApAQCAtMTQ3Niw0MSArMTQ4OSwxMyBAQAogICAgIGVsc2UKIAlzbnByaW50ZihwLCBibGVuIC0gKHAgLSBicCksICJcclxuIik7CiAKLSNpZmRlZiBERUJVR19IVFRQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICItPiAlcyVzIiwgcHJveHk/ICIoUHJveHkpICIgOiAiIiwgYnApOwotICAgIGlmICgoYmxlbiAtPSBzdHJsZW4oYnApKzEpIDwgMCkKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJIkVSUk9SOiBvdmVyZmxvd2VkIGJ1ZmZlciBieSAlZCBieXRlc1xuIiwgLWJsZW4pOwotI2VuZGlmCiAgICAgY3R4dC0+b3V0cHRyID0gY3R4dC0+b3V0ID0gYnA7CiAgICAgY3R4dC0+c3RhdGUgPSBYTUxfTkFOT19IVFRQX1dSSVRFOwogICAgIGJsZW4gPSBzdHJsZW4oIGN0eHQtPm91dCApOwotI2lmZGVmIERFQlVHX0hUVFAKLSAgICB4bXRfYnl0ZXMgPSB4bWxOYW5vSFRUUFNlbmQoY3R4dCwgY3R4dC0+b3V0LCBibGVuICk7Ci0gICAgaWYgKCB4bXRfYnl0ZXMgIT0gYmxlbiApCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvciggeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJ4bWxOYW5vSFRUUE1ldGhvZFJlZGlyOiAgT25seSAlZCBvZiAlZCAlcyAlc1xuIiwKLQkJCXhtdF9ieXRlcywgYmxlbiwKLQkJCSJieXRlcyBvZiBIVFRQIGhlYWRlcnMgc2VudCB0byBob3N0IiwKLQkJCWN0eHQtPmhvc3RuYW1lICk7Ci0jZWxzZQogICAgIHhtbE5hbm9IVFRQU2VuZChjdHh0LCBjdHh0LT5vdXQsIGJsZW4gKTsKLSNlbmRpZgogCiAgICAgaWYgKCBpbnB1dCAhPSBOVUxMICkgewotI2lmZGVmIERFQlVHX0hUVFAKLSAgICAgICAgeG10X2J5dGVzID0geG1sTmFub0hUVFBTZW5kKCBjdHh0LCBpbnB1dCwgaWxlbiApOwotCi0JaWYgKCB4bXRfYnl0ZXMgIT0gaWxlbiApCi0JICAgIHhtbEdlbmVyaWNFcnJvciggeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJ4bWxOYW5vSFRUUE1ldGhvZFJlZGlyOiAgT25seSAlZCBvZiAlZCAlcyAlc1xuIiwKLQkJCXhtdF9ieXRlcywgaWxlbiwKLQkJCSJieXRlcyBvZiBIVFRQIGNvbnRlbnQgc2VudCB0byBob3N0IiwKLQkJCWN0eHQtPmhvc3RuYW1lICk7Ci0jZWxzZQogCXhtbE5hbm9IVFRQU2VuZCggY3R4dCwgaW5wdXQsIGlsZW4gKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGN0eHQtPnN0YXRlID0gWE1MX05BTk9fSFRUUF9SRUFEOwpAQCAtMTUyMywxOCArMTUwOCwxMSBAQAogCX0KIAl4bWxOYW5vSFRUUFNjYW5BbnN3ZXIoY3R4dCwgcCk7CiAKLSNpZmRlZiBERUJVR19IVFRQCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICI8LSAlc1xuIiwgcCk7Ci0jZW5kaWYKICAgICAgICAgeG1sRnJlZShwKTsKICAgICB9CiAKICAgICBpZiAoKGN0eHQtPmxvY2F0aW9uICE9IE5VTEwpICYmIChjdHh0LT5yZXR1cm5WYWx1ZSA+PSAzMDApICYmCiAgICAgICAgIChjdHh0LT5yZXR1cm5WYWx1ZSA8IDQwMCkpIHsKLSNpZmRlZiBERUJVR19IVFRQCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJcblJlZGlyZWN0IHRvOiAlc1xuIiwgY3R4dC0+bG9jYXRpb24pOwotI2VuZGlmCiAJd2hpbGUgKCB4bWxOYW5vSFRUUFJlY3YoY3R4dCkgPiAwICkKICAgICAgICAgICAgIDsKICAgICAgICAgaWYgKG5iUmVkaXJlY3RzIDwgWE1MX05BTk9fSFRUUF9NQVhfUkVESVIpIHsKQEAgLTE1NDcsMTAgKzE1MjUsNiBAQAogCX0KIAl4bWxOYW5vSFRUUEZyZWVDdHh0KGN0eHQpOwogCWlmIChyZWRpclVSTCAhPSBOVUxMKSB4bWxGcmVlKHJlZGlyVVJMKTsKLSNpZmRlZiBERUJVR19IVFRQCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOYW5vSFRUUE1ldGhvZFJlZGlyOiBUb28gbWFueSByZWRpcmVjdHMsIGFib3J0aW5nIC4uLlxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0xNTcwLDE3ICsxNTQ0LDYgQEAKIAkgICAgKnJlZGlyID0gTlVMTDsKICAgICB9CiAKLSNpZmRlZiBERUJVR19IVFRQCi0gICAgaWYgKGN0eHQtPmNvbnRlbnRUeXBlICE9IE5VTEwpCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJcbkNvZGUgJWQsIGNvbnRlbnQtdHlwZSAnJXMnXG5cbiIsCi0JICAgICAgIGN0eHQtPnJldHVyblZhbHVlLCBjdHh0LT5jb250ZW50VHlwZSk7Ci0gICAgZWxzZQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiXG5Db2RlICVkLCBubyBjb250ZW50LXR5cGVcblxuIiwKLQkgICAgICAgY3R4dC0+cmV0dXJuVmFsdWUpOwotI2VuZGlmCi0KICAgICByZXR1cm4oKHZvaWQgKikgY3R4dCk7CiB9CiAKQEAgLTE4NzQsNyArMTgzNyw2IEBACiAJCSJcdHVzYWdlICVzIFsgVVJMIFsgZmlsZW5hbWUgXSBdXG4iLCBhcmd2WzBdKTsKICAgICB9CiAgICAgeG1sTmFub0hUVFBDbGVhbnVwKCk7Ci0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybigwKTsKIH0KICNlbmRpZiAvKiBTVEFOREFMT05FICovCmRpZmYgLS1naXQgYS9vcHRpbS9UT1RSWSBiL29wdGltL1RPVFJZCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjM3YjBiLi4wMDAwMDAwCi0tLSBhL29wdGltL1RPVFJZCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotWE1MOgotPT09PQotICAtIEkvTyBhdm9pZCBjb3BpZXMgd2hlbiBwYXJzaW5nIG1tYXAnZWQgZmlsZXMsIG5lZWQgdG8gdXNlCi0gICAgdW5tdXRhYmxlIGJ1ZmZlcnMgZXhjZXB0IGZvciB0aGUgbGFzdCA0SyB0byBtYWtlIGl0IDAgdGVybWluYXRlZAotICAgIChvciBnZXQgcmlkIG9mIDAgdGVybWluYXRpb24gY2hlY2sgaW4gdGhlIHdob2xlIHBhcnNlciwgaGFyZCAhKQotICAtIHJlY2hlY2sgPiA0R2IgaW5zdGFuY2VzIGZvciBwYXJzaW5nLCBhbmQgUk5HIHZhbGlkYXRpb24uCi0gICAgCi0KLVhTTFQ6Ci09PT09PQotICAtIGdsb2JhbCB2YXJpYWJsZSBhY2Nlc3MKLSAgICAgZm9yIGVhY2ggZXhwciBpbiBzdHlsZXNoZWV0IDogYWxsb2NhdGUgaW5kZXgKLSAgICAgZm9yIGVhY2ggdHJhbnNmb3JtYXRpb24gY29udGV4dAotICAgICAgIGNyZWF0ZSBhbiBpbmRleCB0YWJsZQotICAgICAgICAgY2FjaGUgdmFsdWVzIGluIHRoZSB0cmFuc2Zvcm1hdGlvbgotCSAgIC0gY29udGV4dCBldmFsdWF0aW9uCi0JICAgICAtIGNhY2hlCi0JICAgICAtIGNvbnN0YW50cyBhdCB0aGUgWFBBdGggbGV2ZWwKLQkgICAtIHByb3ZpZGUgbW9yZSBpbmZvIG9uIGNvbXBpbGVkIGV4cHJlc3Npb25zCi0JICAgICAtIGRlcGVuZGFuY2VzIHcuci50LiB2YXJpYWJsZXMgKHdoaWNoIG9uZXMpCi0JICAgICAtIGRlcGVuZGVuY3kgb24gdGhlIGN1cnJlbnQgbm9kZQotCSAgICAgLSBkZXBlbmRlbmN5IG9uIHRoZSBjdXJyZW50IGRvY3VtZW50Ci0gIC0gZG8gbm90IHVzZSBfcHJpdmF0ZSBidXQgb3RoZXIgZmllbGRzIGluIHRoZSBub2RlIHN0cnVjdHVyZXMuCmRpZmYgLS1naXQgYS9vcHRpbS9oYXNoX2RpY3QucGF0Y2ggYi9vcHRpbS9oYXNoX2RpY3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNTBhYmMuLjAwMDAwMDAKLS0tIGEvb3B0aW0vaGFzaF9kaWN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLUluZGV4OiBoYXNoLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJDUyBmaWxlOiAvY3ZzL2dub21lL2dub21lLXhtbC9oYXNoLmMsdgotcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCi1kaWZmIC11IC1yMS4zMCBoYXNoLmMKLS0tLSBoYXNoLmMJMjkgT2N0IDIwMDMgMTE6MTg6MzcgLTAwMDAJMS4zMAotKysrIGhhc2guYwkyNCBGZWIgMjAwNCAxNzoxODo0MiAtMDAwMAotQEAgLTI2LDYgKzI2LDcgQEAKLSAjaW5jbHVkZSA8bGlieG1sL3htbG1lbW9yeS5oPgotICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KLSAjaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KLSsjaW5jbHVkZSA8bGlieG1sL2RpY3QuaD4KLSAKLSAjZGVmaW5lIE1BWF9IQVNIX0xFTiA4Ci0gCi1AQCAtMzgsOSArMzksOSBAQAotIHR5cGVkZWYgeG1sSGFzaEVudHJ5ICp4bWxIYXNoRW50cnlQdHI7Ci0gc3RydWN0IF94bWxIYXNoRW50cnkgewotICAgICBzdHJ1Y3QgX3htbEhhc2hFbnRyeSAqbmV4dDsKLS0gICAgeG1sQ2hhciAqbmFtZTsKLS0gICAgeG1sQ2hhciAqbmFtZTI7Ci0tICAgIHhtbENoYXIgKm5hbWUzOwotKyAgICBjb25zdCB4bWxDaGFyICpuYW1lOwotKyAgICBjb25zdCB4bWxDaGFyICpuYW1lMjsKLSsgICAgY29uc3QgeG1sQ2hhciAqbmFtZTM7Ci0gICAgIHZvaWQgKnBheWxvYWQ7Ci0gICAgIGludCB2YWxpZDsKLSB9OwotQEAgLTUyLDYgKzUzLDcgQEAKLSAgICAgc3RydWN0IF94bWxIYXNoRW50cnkgKnRhYmxlOwotICAgICBpbnQgc2l6ZTsKLSAgICAgaW50IG5iRWxlbXM7Ci0rICAgIHhtbERpY3RQdHIgZGljdDsKLSB9OwotIAotIC8qCi1AQCAtMTQzLDEyICsxNDUsMTYgQEAKLSB4bWxIYXNoVGFibGVQdHIKLSB4bWxIYXNoQ3JlYXRlKGludCBzaXplKSB7Ci0gICAgIHhtbEhhc2hUYWJsZVB0ciB0YWJsZTsKLSsgICAgeG1sRGljdFB0ciBkaWN0OwotICAgCi0gICAgIGlmIChzaXplIDw9IDApCi0gICAgICAgICBzaXplID0gMjU2OwotICAgCi0rICAgIGRpY3QgPSB4bWxEaWN0Q3JlYXRlKCk7Ci0rICAgIGlmIChkaWN0ID09IE5VTEwpIHJldHVybihOVUxMKTsKLSAgICAgdGFibGUgPSB4bWxNYWxsb2Moc2l6ZW9mKHhtbEhhc2hUYWJsZSkpOwotICAgICBpZiAodGFibGUpIHsKLSsgICAgICAgIHRhYmxlLT5kaWN0ID0gZGljdDsKLSAgICAgICAgIHRhYmxlLT5zaXplID0gc2l6ZTsKLSAJdGFibGUtPm5iRWxlbXMgPSAwOwotICAgICAgICAgdGFibGUtPnRhYmxlID0geG1sTWFsbG9jKHNpemUgKiBzaXplb2YoeG1sSGFzaEVudHJ5KSk7Ci1AQCAtMTU4LDYgKzE2NCw3IEBACi0gICAgICAgICB9Ci0gICAgICAgICB4bWxGcmVlKHRhYmxlKTsKLSAgICAgfQotKyAgICB4bWxEaWN0RnJlZShkaWN0KTsKLSAgICAgcmV0dXJuKE5VTEwpOwotIH0KLSAKLUBAIC0yODIsMTIgKzI4OSw2IEBACi0gCQluZXh0ID0gaXRlci0+bmV4dDsKLSAJCWlmICgoZiAhPSBOVUxMKSAmJiAoaXRlci0+cGF5bG9hZCAhPSBOVUxMKSkKLSAJCSAgICBmKGl0ZXItPnBheWxvYWQsIGl0ZXItPm5hbWUpOwotLQkJaWYgKGl0ZXItPm5hbWUpCi0tCQkgICAgeG1sRnJlZShpdGVyLT5uYW1lKTsKLS0JCWlmIChpdGVyLT5uYW1lMikKLS0JCSAgICB4bWxGcmVlKGl0ZXItPm5hbWUyKTsKLS0JCWlmIChpdGVyLT5uYW1lMykKLS0JCSAgICB4bWxGcmVlKGl0ZXItPm5hbWUzKTsKLSAJCWl0ZXItPnBheWxvYWQgPSBOVUxMOwotIAkJaWYgKCFpbnNpZGVfdGFibGUpCi0gCQkgICAgeG1sRnJlZShpdGVyKTsKLUBAIC0yOTksNiArMzAwLDcgQEAKLSAJfQotIAl4bWxGcmVlKHRhYmxlLT50YWJsZSk7Ci0gICAgIH0KLSsgICAgeG1sRGljdEZyZWUodGFibGUtPmRpY3QpOwotICAgICB4bWxGcmVlKHRhYmxlKTsKLSB9Ci0gCi1AQCAtNDY1LDYgKzQ2Nyw5IEBACi0gCi0gICAgIGlmICgodGFibGUgPT0gTlVMTCkgfHwgbmFtZSA9PSBOVUxMKQotIAlyZXR1cm4oLTEpOwotKyAgICBpZiAobmFtZSkgbmFtZSA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUsIC0xKTsKLSsgICAgaWYgKG5hbWUyKSBuYW1lMiA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUyLCAtMSk7Ci0rICAgIGlmIChuYW1lMykgbmFtZTMgPSB4bWxEaWN0TG9va3VwKHRhYmxlLT5kaWN0LCBuYW1lMywgLTEpOwotIAotICAgICAvKgotICAgICAgKiBDaGVjayBmb3IgZHVwbGljYXRlIGFuZCBpbnNlcnRpb24gbG9jYXRpb24uCi1AQCAtNDc1LDE1ICs0ODAsMTUgQEAKLSAgICAgfSBlbHNlIHsKLSAJZm9yIChpbnNlcnQgPSAmKHRhYmxlLT50YWJsZVtrZXldKTsgaW5zZXJ0LT5uZXh0ICE9IE5VTEw7Ci0gCSAgICAgaW5zZXJ0ID0gaW5zZXJ0LT5uZXh0KSB7Ci0tCSAgICBpZiAoKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZSwgbmFtZSkpICYmCi0tCQkoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lMiwgbmFtZTIpKSAmJgotLQkJKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTMsIG5hbWUzKSkpCi0rCSAgICBpZiAoKGluc2VydC0+bmFtZSA9PSBuYW1lKSAmJgotKwkJKGluc2VydC0+bmFtZTIgPT0gbmFtZTIpICYmCi0rCQkoaW5zZXJ0LT5uYW1lMyA9PSBuYW1lMykpCi0gCQlyZXR1cm4oLTEpOwotIAkgICAgbGVuKys7Ci0gCX0KLS0JaWYgKCh4bWxTdHJFcXVhbChpbnNlcnQtPm5hbWUsIG5hbWUpKSAmJgotLQkgICAgKHhtbFN0ckVxdWFsKGluc2VydC0+bmFtZTIsIG5hbWUyKSkgJiYKLS0JICAgICh4bWxTdHJFcXVhbChpbnNlcnQtPm5hbWUzLCBuYW1lMykpKQotKwlpZiAoKGluc2VydC0+bmFtZSA9PSBuYW1lKSAmJgotKwkgICAgKGluc2VydC0+bmFtZTIgPT0gbmFtZTIpICYmCi0rCSAgICAoaW5zZXJ0LT5uYW1lMyA9PSBuYW1lMykpCi0gCSAgICByZXR1cm4oLTEpOwotICAgICB9Ci0gCi1AQCAtNDk1LDkgKzUwMCw5IEBACi0gCSAgICAgcmV0dXJuKC0xKTsKLSAgICAgfQotIAotLSAgICBlbnRyeS0+bmFtZSA9IHhtbFN0cmR1cChuYW1lKTsKLS0gICAgZW50cnktPm5hbWUyID0geG1sU3RyZHVwKG5hbWUyKTsKLS0gICAgZW50cnktPm5hbWUzID0geG1sU3RyZHVwKG5hbWUzKTsKLSsgICAgZW50cnktPm5hbWUgPSBuYW1lOwotKyAgICBlbnRyeS0+bmFtZTIgPSBuYW1lMjsKLSsgICAgZW50cnktPm5hbWUzID0gbmFtZTM7Ci0gICAgIGVudHJ5LT5wYXlsb2FkID0gdXNlcmRhdGE7Ci0gICAgIGVudHJ5LT5uZXh0ID0gTlVMTDsKLSAgICAgZW50cnktPnZhbGlkID0gMTsKLUBAIC01MzksNiArNTQ0LDkgQEAKLSAKLSAgICAgaWYgKCh0YWJsZSA9PSBOVUxMKSB8fCBuYW1lID09IE5VTEwpCi0gCXJldHVybigtMSk7Ci0rICAgIGlmIChuYW1lKSBuYW1lID0geG1sRGljdExvb2t1cCh0YWJsZS0+ZGljdCwgbmFtZSwgLTEpOwotKyAgICBpZiAobmFtZTIpIG5hbWUyID0geG1sRGljdExvb2t1cCh0YWJsZS0+ZGljdCwgbmFtZTIsIC0xKTsKLSsgICAgaWYgKG5hbWUzKSBuYW1lMyA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUzLCAtMSk7Ci0gCi0gICAgIC8qCi0gICAgICAqIENoZWNrIGZvciBkdXBsaWNhdGUgYW5kIGluc2VydGlvbiBsb2NhdGlvbi4KLUBAIC01NDksMTggKzU1NywxOCBAQAotICAgICB9IGVsc2UgewotIAlmb3IgKGluc2VydCA9ICYodGFibGUtPnRhYmxlW2tleV0pOyBpbnNlcnQtPm5leHQgIT0gTlVMTDsKLSAJICAgICBpbnNlcnQgPSBpbnNlcnQtPm5leHQpIHsKLS0JICAgIGlmICgoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lLCBuYW1lKSkgJiYKLS0JCSh4bWxTdHJFcXVhbChpbnNlcnQtPm5hbWUyLCBuYW1lMikpICYmCi0tCQkoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lMywgbmFtZTMpKSkgewotKwkgICAgaWYgKChpbnNlcnQtPm5hbWUgPT0gbmFtZSkgJiYKLSsJCShpbnNlcnQtPm5hbWUyID09IG5hbWUyKSAmJgotKwkJKGluc2VydC0+bmFtZTMgPT0gbmFtZTMpKSB7Ci0gCQlpZiAoZikKLSAJCSAgICBmKGluc2VydC0+cGF5bG9hZCwgaW5zZXJ0LT5uYW1lKTsKLSAJCWluc2VydC0+cGF5bG9hZCA9IHVzZXJkYXRhOwotIAkJcmV0dXJuKDApOwotIAkgICAgfQotIAl9Ci0tCWlmICgoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lLCBuYW1lKSkgJiYKLS0JICAgICh4bWxTdHJFcXVhbChpbnNlcnQtPm5hbWUyLCBuYW1lMikpICYmCi0tCSAgICAoeG1sU3RyRXF1YWwoaW5zZXJ0LT5uYW1lMywgbmFtZTMpKSkgewotKwlpZiAoKGluc2VydC0+bmFtZSA9PSBuYW1lKSAmJgotKwkgICAgKGluc2VydC0+bmFtZTIgPT0gbmFtZTIpICYmCi0rCSAgICAoaW5zZXJ0LT5uYW1lMyA9PSBuYW1lMykpIHsKLSAJICAgIGlmIChmKQotIAkJZihpbnNlcnQtPnBheWxvYWQsIGluc2VydC0+bmFtZSk7Ci0gCSAgICBpbnNlcnQtPnBheWxvYWQgPSB1c2VyZGF0YTsKLUBAIC01NzYsOSArNTg0LDkgQEAKLSAJICAgICByZXR1cm4oLTEpOwotICAgICB9Ci0gCi0tICAgIGVudHJ5LT5uYW1lID0geG1sU3RyZHVwKG5hbWUpOwotLSAgICBlbnRyeS0+bmFtZTIgPSB4bWxTdHJkdXAobmFtZTIpOwotLSAgICBlbnRyeS0+bmFtZTMgPSB4bWxTdHJkdXAobmFtZTMpOwotKyAgICBlbnRyeS0+bmFtZSA9IG5hbWU7Ci0rICAgIGVudHJ5LT5uYW1lMiA9IG5hbWUyOwotKyAgICBlbnRyeS0+bmFtZTMgPSBuYW1lMzsKLSAgICAgZW50cnktPnBheWxvYWQgPSB1c2VyZGF0YTsKLSAgICAgZW50cnktPm5leHQgPSBOVUxMOwotICAgICBlbnRyeS0+dmFsaWQgPSAxOwotQEAgLTYxNSwxMCArNjIzLDEzIEBACi0gICAgIGtleSA9IHhtbEhhc2hDb21wdXRlS2V5KHRhYmxlLCBuYW1lLCBuYW1lMiwgbmFtZTMpOwotICAgICBpZiAodGFibGUtPnRhYmxlW2tleV0udmFsaWQgPT0gMCkKLSAJcmV0dXJuKE5VTEwpOwotKyAgICBpZiAobmFtZSkgbmFtZSA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUsIC0xKTsKLSsgICAgaWYgKG5hbWUyKSBuYW1lMiA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUyLCAtMSk7Ci0rICAgIGlmIChuYW1lMykgbmFtZTMgPSB4bWxEaWN0TG9va3VwKHRhYmxlLT5kaWN0LCBuYW1lMywgLTEpOwotICAgICBmb3IgKGVudHJ5ID0gJih0YWJsZS0+dGFibGVba2V5XSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKLS0JaWYgKCh4bWxTdHJFcXVhbChlbnRyeS0+bmFtZSwgbmFtZSkpICYmCi0tCSAgICAoeG1sU3RyRXF1YWwoZW50cnktPm5hbWUyLCBuYW1lMikpICYmCi0tCSAgICAoeG1sU3RyRXF1YWwoZW50cnktPm5hbWUzLCBuYW1lMykpKQotKwlpZiAoKGVudHJ5LT5uYW1lID09IG5hbWUpICYmCi0rCSAgICAoZW50cnktPm5hbWUyID09IG5hbWUyKSAmJgotKwkgICAgKGVudHJ5LT5uYW1lMyA9PSBuYW1lMykpCi0gCSAgICByZXR1cm4oZW50cnktPnBheWxvYWQpOwotICAgICB9Ci0gICAgIHJldHVybihOVUxMKTsKLUBAIC03NzQsNiArNzg1LDkgQEAKLSAgICAgaWYgKGYgPT0gTlVMTCkKLSAJcmV0dXJuOwotIAotKyAgICBpZiAobmFtZSkgbmFtZSA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUsIC0xKTsKLSsgICAgaWYgKG5hbWUyKSBuYW1lMiA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUyLCAtMSk7Ci0rICAgIGlmIChuYW1lMykgbmFtZTMgPSB4bWxEaWN0TG9va3VwKHRhYmxlLT5kaWN0LCBuYW1lMywgLTEpOwotICAgICBpZiAodGFibGUtPnRhYmxlKSB7Ci0gCWZvcihpID0gMDsgaSA8IHRhYmxlLT5zaXplOyBpKyspIHsKLSAJICAgIGlmICh0YWJsZS0+dGFibGVbaV0udmFsaWQgPT0gMCkKLUBAIC03ODEsOSArNzk1LDkgQEAKLSAJICAgIGl0ZXIgPSAmKHRhYmxlLT50YWJsZVtpXSk7Ci0gCSAgICB3aGlsZSAoaXRlcikgewotIAkJbmV4dCA9IGl0ZXItPm5leHQ7Ci0tCQlpZiAoKChuYW1lID09IE5VTEwpIHx8ICh4bWxTdHJFcXVhbChuYW1lLCBpdGVyLT5uYW1lKSkpICYmCi0tCQkgICAgKChuYW1lMiA9PSBOVUxMKSB8fCAoeG1sU3RyRXF1YWwobmFtZTIsIGl0ZXItPm5hbWUyKSkpICYmCi0tCQkgICAgKChuYW1lMyA9PSBOVUxMKSB8fCAoeG1sU3RyRXF1YWwobmFtZTMsIGl0ZXItPm5hbWUzKSkpICYmCi0rCQlpZiAoKChuYW1lID09IE5VTEwpIHx8IChuYW1lID09IGl0ZXItPm5hbWUpKSAmJgotKwkJICAgICgobmFtZTIgPT0gTlVMTCkgfHwgKG5hbWUyID09IGl0ZXItPm5hbWUyKSkgJiYKLSsJCSAgICAoKG5hbWUzID09IE5VTEwpIHx8IChuYW1lMyA9PSBpdGVyLT5uYW1lMykpICYmCi0gCQkgICAgKGl0ZXItPnBheWxvYWQgIT0gTlVMTCkpIHsKLSAJCSAgICBmKGl0ZXItPnBheWxvYWQsIGRhdGEsIGl0ZXItPm5hbWUsCi0gCQkgICAgICBpdGVyLT5uYW1lMiwgaXRlci0+bmFtZTMpOwotQEAgLTkxMywxOSArOTI3LDE2IEBACi0gICAgIGlmICh0YWJsZS0+dGFibGVba2V5XS52YWxpZCA9PSAwKSB7Ci0gICAgICAgICByZXR1cm4oLTEpOwotICAgICB9IGVsc2UgewotKwlpZiAobmFtZSkgbmFtZSA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUsIC0xKTsKLSsJaWYgKG5hbWUyKSBuYW1lMiA9IHhtbERpY3RMb29rdXAodGFibGUtPmRpY3QsIG5hbWUyLCAtMSk7Ci0rCWlmIChuYW1lMykgbmFtZTMgPSB4bWxEaWN0TG9va3VwKHRhYmxlLT5kaWN0LCBuYW1lMywgLTEpOwotICAgICAgICAgZm9yIChlbnRyeSA9ICYodGFibGUtPnRhYmxlW2tleV0pOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7Ci0tICAgICAgICAgICAgaWYgKHhtbFN0ckVxdWFsKGVudHJ5LT5uYW1lLCBuYW1lKSAmJgotLSAgICAgICAgICAgICAgICAgICAgeG1sU3RyRXF1YWwoZW50cnktPm5hbWUyLCBuYW1lMikgJiYKLS0gICAgICAgICAgICAgICAgICAgIHhtbFN0ckVxdWFsKGVudHJ5LT5uYW1lMywgbmFtZTMpKSB7Ci0rICAgICAgICAgICAgaWYgKChlbnRyeS0+bmFtZSA9PSBuYW1lKSAmJgotKwkJKGVudHJ5LT5uYW1lMiA9PSBuYW1lMikgJiYKLSsJCShlbnRyeS0+bmFtZTMgPT0gbmFtZTMpKSB7Ci0gICAgICAgICAgICAgICAgIGlmICgoZiAhPSBOVUxMKSAmJiAoZW50cnktPnBheWxvYWQgIT0gTlVMTCkpCi0gICAgICAgICAgICAgICAgICAgICBmKGVudHJ5LT5wYXlsb2FkLCBlbnRyeS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgIGVudHJ5LT5wYXlsb2FkID0gTlVMTDsKLS0gICAgICAgICAgICAgICAgaWYoZW50cnktPm5hbWUpCi0tICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGVudHJ5LT5uYW1lKTsKLS0gICAgICAgICAgICAgICAgaWYoZW50cnktPm5hbWUyKQotLSAgICAgICAgICAgICAgICAgICAgeG1sRnJlZShlbnRyeS0+bmFtZTIpOwotLSAgICAgICAgICAgICAgICBpZihlbnRyeS0+bmFtZTMpCi0tICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGVudHJ5LT5uYW1lMyk7Ci0gICAgICAgICAgICAgICAgIGlmKHByZXYpIHsKLSAgICAgICAgICAgICAgICAgICAgIHByZXYtPm5leHQgPSBlbnRyeS0+bmV4dDsKLSAJCSAgICB4bWxGcmVlKGVudHJ5KTsKLUluZGV4OiBpbmNsdWRlL2xpYnhtbC9oYXNoLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJDUyBmaWxlOiAvY3ZzL2dub21lL2dub21lLXhtbC9pbmNsdWRlL2xpYnhtbC9oYXNoLmgsdgotcmV0cmlldmluZyByZXZpc2lvbiAxLjE1Ci1kaWZmIC11IC1yMS4xNSBoYXNoLmgKLS0tLSBpbmNsdWRlL2xpYnhtbC9oYXNoLmgJMjAgTm92IDIwMDMgMTE6NTk6MDcgLTAwMDAJMS4xNQotKysrIGluY2x1ZGUvbGlieG1sL2hhc2guaAkyNCBGZWIgMjAwNCAxNzoxODo0MiAtMDAwMAotQEAgLTQyLDcgKzQyLDcgQEAKLSAgKgotICAqIENhbGxiYWNrIHRvIGZyZWUgZGF0YSBmcm9tIGEgaGFzaC4KLSAgKi8KLS10eXBlZGVmIHZvaWQgKCp4bWxIYXNoRGVhbGxvY2F0b3IpKHZvaWQgKnBheWxvYWQsIHhtbENoYXIgKm5hbWUpOwotK3R5cGVkZWYgdm9pZCAoKnhtbEhhc2hEZWFsbG9jYXRvcikodm9pZCAqcGF5bG9hZCwgY29uc3QgeG1sQ2hhciAqbmFtZSk7Ci0gLyoqCi0gICogeG1sSGFzaENvcGllcjoKLSAgKiBAcGF5bG9hZDogIHRoZSBkYXRhIGluIHRoZSBoYXNoCmRpZmYgLS1naXQgYS9vcHRpbS9oYXNoX2RpY3QudHh0IGIvb3B0aW0vaGFzaF9kaWN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0N2I3ZS4uMDAwMDAwMAotLS0gYS9vcHRpbS9oYXNoX2RpY3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotUmV1c2VzIGEgZGljdGlvbmFyeSBmb3IgdGhlIGhhc2ggdGFibGUgdG8gcmVkdWNlIHRoZSBzdHJpbmcgY29tcGFyZQotY29zdHMuIE5vdCB3b3J0aCBpdCB1bmxlc3MgdmFsaWRhdGluZyBiaWcgRFREcwotCi0JCXdpdGhvdXQJCXdpdGgKLWRiMTAwMDAgIHRyZWUJMTc1Lzc5CQkxNzkvODEKLWRiMTAwMDAwIHN0cmVhbQkxMjIyCQkxMjE3Ci1kYmExMDAwMDBzdHJlYW0JNTkzCQk2MDEKLVJFQyB2YWxpZGF0aW9uCTE5ODYJCTIwOTgKLURvY2Jvb2sgdmFsaWQJMTA4MDgJCTEwNjQ5Ci0KLVR1ZSBGZWIgMjQgMTk6MDk6NDkgQ0VUIDIwMDQKZGlmZiAtLWdpdCBhL3BhcnNlci5jIGIvcGFyc2VyLmMKaW5kZXggNzk0Nzk5Ny4uMzU5YTYwOCAxMDA2NDQKLS0tIGEvcGFyc2VyLmMKKysrIGIvcGFyc2VyLmMKQEAgLTUxLDExICs1MSw5IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGlieG1sL3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgotI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdmFsaWQuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZW50aXRpZXMuaD4KQEAgLTYzLDE2ICs2MSwyMyBAQAogI2luY2x1ZGUgPGxpYnhtbC9lbmNvZGluZy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxJTy5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvU0FYMi5oPgogI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKICNpbmNsdWRlIDxsaWJ4bWwvY2F0YWxvZy5oPgogI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAotI2luY2x1ZGUgPGxpYnhtbC94bWxzY2hlbWFzdHlwZXMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvcmVsYXhuZy5oPgotI2VuZGlmCiAKLSNpbmNsdWRlICJidWYuaCIKLSNpbmNsdWRlICJlbmMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZGljdC5oIgorI2luY2x1ZGUgInByaXZhdGUvZW50aXRpZXMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9odG1sLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9pby5oIgorI2luY2x1ZGUgInByaXZhdGUvcGFyc2VyLmgiCisKKyNkZWZpbmUgTlNfSU5ERVhfRU1QVFkgIElOVF9NQVgKKyNkZWZpbmUgTlNfSU5ERVhfWE1MICAgIChJTlRfTUFYIC0gMSkKKyNkZWZpbmUgVVJJX0hBU0hfRU1QVFkgIDB4RDk0M0EwNEUKKyNkZWZpbmUgVVJJX0hBU0hfWE1MICAgIDB4RjA0NTFGMDIKIAogc3RydWN0IF94bWxTdGFydFRhZyB7CiAgICAgY29uc3QgeG1sQ2hhciAqcHJlZml4OwpAQCAtODEsMTQgKzg2LDM4IEBACiAgICAgaW50IG5zTnI7CiB9OwogCi1zdGF0aWMgdm9pZAoteG1sRmF0YWxFcnIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxQYXJzZXJFcnJvcnMgZXJyb3IsIGNvbnN0IGNoYXIgKmluZm8pOwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHZvaWQgKnNheERhdGE7CisgICAgdW5zaWduZWQgcHJlZml4SGFzaFZhbHVlOworICAgIHVuc2lnbmVkIHVyaUhhc2hWYWx1ZTsKKyAgICB1bnNpZ25lZCBlbGVtZW50SWQ7CisgICAgaW50IG9sZEluZGV4OworfSB4bWxQYXJzZXJOc0V4dHJhOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaGFzaFZhbHVlOworICAgIGludCBpbmRleDsKK30geG1sUGFyc2VyTnNCdWNrZXQ7CisKK3N0cnVjdCBfeG1sUGFyc2VyTnNEYXRhIHsKKyAgICB4bWxQYXJzZXJOc0V4dHJhICpleHRyYTsKKworICAgIHVuc2lnbmVkIGhhc2hTaXplOworICAgIHVuc2lnbmVkIGhhc2hFbGVtczsKKyAgICB4bWxQYXJzZXJOc0J1Y2tldCAqaGFzaDsKKworICAgIHVuc2lnbmVkIGVsZW1lbnRJZDsKKyAgICBpbnQgZGVmYXVsdE5zSW5kZXg7Cit9OworCitzdHJ1Y3QgX3htbEF0dHJIYXNoQnVja2V0IHsKKyAgICBpbnQgaW5kZXg7Cit9OwogCiBzdGF0aWMgeG1sUGFyc2VyQ3R4dFB0cgoteG1sQ3JlYXRlRW50aXR5UGFyc2VyQ3R4dEludGVybmFsKGNvbnN0IHhtbENoYXIgKlVSTCwgY29uc3QgeG1sQ2hhciAqSUQsCi0JICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqYmFzZSwgeG1sUGFyc2VyQ3R4dFB0ciBwY3R4KTsKLQotc3RhdGljIHZvaWQgeG1sSGFsdFBhcnNlcih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpOworeG1sQ3JlYXRlRW50aXR5UGFyc2VyQ3R4dEludGVybmFsKHhtbFNBWEhhbmRsZXJQdHIgc2F4LCB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgY29uc3QgeG1sQ2hhciAqVVJMLCBjb25zdCB4bWxDaGFyICpJRCwgY29uc3QgeG1sQ2hhciAqYmFzZSwKKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBwY3R4KTsKIAogc3RhdGljIGludAogeG1sUGFyc2VFbGVtZW50U3RhcnQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KTsKQEAgLTEwOCwxNTYgKzEzNywyMSBAQAogI2RlZmluZSBYTUxfUEFSU0VSX0xPVF9FTlRJVFkgNTAwMAogCiAvKgotICogWE1MX1BBUlNFUl9OT05fTElORUFSIGlzIHRoZSB0aHJlc2hvbGQgd2hlcmUgdGhlIHJhdGlvIG9mIHBhcnNlZCBlbnRpdHkKLSAqICAgIHJlcGxhY2VtZW50IG92ZXIgdGhlIHNpemUgaW4gYnl0ZSBvZiB0aGUgaW5wdXQgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUKLSAqICAgIGFuZCBleHBvbmVudGlhbCBiZWhhdmlvdXIuIEEgdmFsdWUgb2YgMTAgY29ycmVzcG9uZCB0byBhdCBsZWFzdCAzIGVudGl0eQotICogICAgcmVwbGFjZW1lbnQgcGVyIGJ5dGUgb2YgaW5wdXQuCisgKiBDb25zdGFudHMgZm9yIHByb3RlY3Rpb24gYWdhaW5zdCBhYnVzaXZlIGVudGl0eSBleHBhbnNpb24KKyAqICgiYmlsbGlvbiBsYXVnaHMiKS4KICAqLwotI2RlZmluZSBYTUxfUEFSU0VSX05PTl9MSU5FQVIgMTAKIAogLyoKLSAqIHhtbFBhcnNlckVudGl0eUNoZWNrCi0gKgotICogRnVuY3Rpb24gdG8gY2hlY2sgbm9uLWxpbmVhciBlbnRpdHkgZXhwYW5zaW9uIGJlaGF2aW91cgotICogVGhpcyBpcyBoZXJlIHRvIGRldGVjdCBhbmQgc3RvcCBleHBvbmVudGlhbCBsaW5lYXIgZW50aXR5IGV4cGFuc2lvbgotICogVGhpcyBpcyBub3QgYSBsaW1pdGF0aW9uIG9mIHRoZSBwYXJzZXIgYnV0IGEgc2FmZXR5Ci0gKiBib3VuZGFyeSBmZWF0dXJlLiBJdCBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUgWE1MX1BBUlNFX0hVR0UKLSAqIHBhcnNlciBvcHRpb24uCisgKiBBIGNlcnRhaW4gYW1vdW50IG9mIGVudGl0eSBleHBhbnNpb24gd2hpY2ggaXMgYWx3YXlzIGFsbG93ZWQuCiAgKi8KLXN0YXRpYyBpbnQKLXhtbFBhcnNlckVudGl0eUNoZWNrKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICB4bWxFbnRpdHlQdHIgZW50LCBzaXplX3QgcmVwbGFjZW1lbnQpCi17Ci0gICAgc2l6ZV90IGNvbnN1bWVkID0gMDsKLSAgICBpbnQgaTsKKyNkZWZpbmUgWE1MX1BBUlNFUl9BTExPV0VEX0VYUEFOU0lPTiAxMDAwMDAwCiAKLSAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfSFVHRSkpCi0gICAgICAgIHJldHVybiAoMCk7Ci0gICAgaWYgKGN0eHQtPmxhc3RFcnJvci5jb2RlID09IFhNTF9FUlJfRU5USVRZX0xPT1ApCi0gICAgICAgIHJldHVybiAoMSk7Ci0KLSAgICAvKgotICAgICAqIFRoaXMgbWF5IGxvb2sgYWJzdXJkIGJ1dCBpcyBuZWVkZWQgdG8gZGV0ZWN0Ci0gICAgICogZW50aXRpZXMgcHJvYmxlbXMKLSAgICAgKi8KLSAgICBpZiAoKGVudCAhPSBOVUxMKSAmJiAoZW50LT5ldHlwZSAhPSBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFkpICYmCi0JKGVudC0+Y29udGVudCAhPSBOVUxMKSAmJiAoZW50LT5jaGVja2VkID09IDApICYmCi0JKGN0eHQtPmVyck5vICE9IFhNTF9FUlJfRU5USVRZX0xPT1ApKSB7Ci0JdW5zaWduZWQgbG9uZyBvbGRuYmVudCA9IGN0eHQtPm5iZW50aXRpZXMsIGRpZmY7Ci0JeG1sQ2hhciAqcmVwOwotCi0JZW50LT5jaGVja2VkID0gMTsKLQotICAgICAgICArK2N0eHQtPmRlcHRoOwotCXJlcCA9IHhtbFN0cmluZ0RlY29kZUVudGl0aWVzKGN0eHQsIGVudC0+Y29udGVudCwKLQkJCQkgIFhNTF9TVUJTVElUVVRFX1JFRiwgMCwgMCwgMCk7Ci0gICAgICAgIC0tY3R4dC0+ZGVwdGg7Ci0JaWYgKChyZXAgPT0gTlVMTCkgfHwgKGN0eHQtPmVyck5vID09IFhNTF9FUlJfRU5USVRZX0xPT1ApKSB7Ci0JICAgIGVudC0+Y29udGVudFswXSA9IDA7Ci0JfQotCi0gICAgICAgIGRpZmYgPSBjdHh0LT5uYmVudGl0aWVzIC0gb2xkbmJlbnQgKyAxOwotICAgICAgICBpZiAoZGlmZiA+IElOVF9NQVggLyAyKQotICAgICAgICAgICAgZGlmZiA9IElOVF9NQVggLyAyOwotCWVudC0+Y2hlY2tlZCA9IGRpZmYgKiAyOwotCWlmIChyZXAgIT0gTlVMTCkgewotCSAgICBpZiAoeG1sU3RyY2hyKHJlcCwgJzwnKSkKLQkJZW50LT5jaGVja2VkIHw9IDE7Ci0JICAgIHhtbEZyZWUocmVwKTsKLQkgICAgcmVwID0gTlVMTDsKLQl9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBQcmV2ZW50IGVudGl0eSBleHBvbmVudGlhbCBjaGVjaywgbm90IGp1c3QgcmVwbGFjZW1lbnQgd2hpbGUKLSAgICAgKiBwYXJzaW5nIHRoZSBEVEQKLSAgICAgKiBUaGUgY2hlY2sgaXMgcG90ZW50aWFsbHkgY29zdGx5IHNvIGRvIHRoYXQgb25seSBvbmNlIGluIGEgdGhvdXNhbmQKLSAgICAgKi8KLSAgICBpZiAoKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9EVEQpICYmIChjdHh0LT5uYmVudGl0aWVzID4gMTAwMDApICYmCi0gICAgICAgIChjdHh0LT5uYmVudGl0aWVzICUgMTAyNCA9PSAwKSkgewotCWZvciAoaSA9IDA7aSA8IGN0eHQtPmlucHV0TnI7aSsrKSB7Ci0JICAgIGNvbnN1bWVkICs9IGN0eHQtPmlucHV0VGFiW2ldLT5jb25zdW1lZCArCi0JICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0VGFiW2ldLT5jdXIgLSBjdHh0LT5pbnB1dFRhYltpXS0+YmFzZSk7Ci0JfQotCWlmIChjdHh0LT5uYmVudGl0aWVzID4gY29uc3VtZWQgKiBYTUxfUEFSU0VSX05PTl9MSU5FQVIpIHsKLQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9FTlRJVFlfTE9PUCwgTlVMTCk7Ci0JICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VPRjsKLQkgICAgcmV0dXJuICgxKTsKLQl9Ci0JY29uc3VtZWQgPSAwOwotICAgIH0KLQotCi0KLSAgICBpZiAocmVwbGFjZW1lbnQgIT0gMCkgewotCWlmIChyZXBsYWNlbWVudCA8IFhNTF9NQVhfVEVYVF9MRU5HVEgpCi0JICAgIHJldHVybigwKTsKLQotICAgICAgICAvKgotCSAqIElmIHRoZSB2b2x1bWUgb2YgZW50aXR5IGNvcHkgcmVhY2hlcyAxMCB0aW1lcyB0aGUKLQkgKiBhbW91bnQgb2YgcGFyc2VkIGRhdGEgYW5kIG92ZXIgdGhlIGxhcmdlIHRleHQgdGhyZXNob2xkCi0JICogdGhlbiB0aGF0J3MgdmVyeSBsaWtlbHkgdG8gYmUgYW4gYWJ1c2UuCi0JICovCi0gICAgICAgIGlmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSB7Ci0JICAgIGNvbnN1bWVkID0gY3R4dC0+aW5wdXQtPmNvbnN1bWVkICsKLQkgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKLQl9Ci0gICAgICAgIGNvbnN1bWVkICs9IGN0eHQtPnNpemVlbnRpdGllczsKLQotICAgICAgICBpZiAocmVwbGFjZW1lbnQgPCBYTUxfUEFSU0VSX05PTl9MSU5FQVIgKiBjb25zdW1lZCkKLQkgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSBpZiAoc2l6ZSAhPSAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIERvIHRoZSBjaGVjayBiYXNlZCBvbiB0aGUgcmVwbGFjZW1lbnQgc2l6ZSBvZiB0aGUgZW50aXR5Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoc2l6ZSA8IFhNTF9QQVJTRVJfQklHX0VOVElUWSkKLQkgICAgcmV0dXJuKDApOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEEgbGltaXQgb24gdGhlIGFtb3VudCBvZiB0ZXh0IGRhdGEgcmVhc29uYWJseSB1c2VkCi0gICAgICAgICAqLwotICAgICAgICBpZiAoY3R4dC0+aW5wdXQgIT0gTlVMTCkgewotICAgICAgICAgICAgY29uc3VtZWQgPSBjdHh0LT5pbnB1dC0+Y29uc3VtZWQgKwotICAgICAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2UpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN1bWVkICs9IGN0eHQtPnNpemVlbnRpdGllczsKLQotICAgICAgICBpZiAoKHNpemUgPCBYTUxfUEFSU0VSX05PTl9MSU5FQVIgKiBjb25zdW1lZCkgJiYKLQkgICAgKGN0eHQtPm5iZW50aXRpZXMgKiAzIDwgWE1MX1BBUlNFUl9OT05fTElORUFSICogY29uc3VtZWQpKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKGVudCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHVzZSB0aGUgbnVtYmVyIG9mIHBhcnNlZCBlbnRpdGllcyBpbiB0aGUgcmVwbGFjZW1lbnQKLSAgICAgICAgICovCi0gICAgICAgIHNpemUgPSBlbnQtPmNoZWNrZWQgLyAyOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBhbW91bnQgb2YgZGF0YSBwYXJzZWQgY291bnRpbmcgZW50aXRpZXMgc2l6ZSBvbmx5IG9uY2UKLSAgICAgICAgICovCi0gICAgICAgIGlmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjb25zdW1lZCA9IGN0eHQtPmlucHV0LT5jb25zdW1lZCArCi0gICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3VtZWQgKz0gY3R4dC0+c2l6ZWVudGl0aWVzOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIENoZWNrIHRoZSBkZW5zaXR5IG9mIGVudGl0aWVzIGZvciB0aGUgYW1vdW50IG9mIGRhdGEKLQkgKiBrbm93aW5nIGFuIGVudGl0eSByZWZlcmVuY2Ugd2lsbCB0YWtlIGF0IGxlYXN0IDMgYnl0ZXMKLSAgICAgICAgICovCi0gICAgICAgIGlmIChzaXplICogMyA8IGNvbnN1bWVkICogWE1MX1BBUlNFUl9OT05fTElORUFSKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBzdHJhbmdlIHdlIGdvdCBubyBkYXRhIGZvciBjaGVja2luZwotICAgICAgICAgKi8KLQlpZiAoKChjdHh0LT5sYXN0RXJyb3IuY29kZSAhPSBYTUxfRVJSX1VOREVDTEFSRURfRU5USVRZKSAmJgotCSAgICAgKGN0eHQtPmxhc3RFcnJvci5jb2RlICE9IFhNTF9XQVJfVU5ERUNMQVJFRF9FTlRJVFkpKSB8fAotCSAgICAoY3R4dC0+bmJlbnRpdGllcyA8PSAxMDAwMCkpCi0JICAgIHJldHVybiAoMCk7Ci0gICAgfQotICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRU5USVRZX0xPT1AsIE5VTEwpOwotICAgIHJldHVybiAoMSk7Ci19CisvKgorICogRml4ZWQgY29zdCBmb3IgZWFjaCBlbnRpdHkgcmVmZXJlbmNlLiBUaGlzIGNydWRlbHkgbW9kZWxzIHByb2Nlc3NpbmcgdGltZQorICogYXMgd2VsbCB0byBwcm90ZWN0LCBmb3IgZXhhbXBsZSwgYWdhaW5zdCBleHBvbmVudGlhbCBleHBhbnNpb24gb2YgZW1wdHkKKyAqIG9yIHZlcnkgc2hvcnQgZW50aXRpZXMuCisgKi8KKyNkZWZpbmUgWE1MX0VOVF9GSVhFRF9DT1NUIDIwCiAKIC8qKgogICogeG1sUGFyc2VyTWF4RGVwdGg6CkBAIC0yNzEsNyArMTY1LDYgQEAKIAogCiAKLSNkZWZpbmUgU0FYMiAxCiAjZGVmaW5lIFhNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFIDMwMAogI2RlZmluZSBYTUxfUEFSU0VSX0JVRkZFUl9TSVpFIDEwMAogI2RlZmluZSBTQVhfQ09NUEFUX01PREUgQkFEX0NBU1QgIlNBWCBjb21wYXRpYmlsaXR5IG1vZGUgZG9jdW1lbnQiCkBAIC0yODcsNiArMTgwLDE0IEBACiAgKi8KICNkZWZpbmUgWE1MX1BBUlNFUl9DSFVOS19TSVpFIDEwMAogCisvKioKKyAqIHhtbFBhcnNlclZlcnNpb246CisgKgorICogQ29uc3RhbnQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGludGVybmFsIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkKKyAqLworY29uc3QgY2hhciAqY29uc3QKK3htbFBhcnNlclZlcnNpb24gPSBMSUJYTUxfVkVSU0lPTl9TVFJJTkcgTElCWE1MX1ZFUlNJT05fRVhUUkE7CisKIC8qCiAgKiBMaXN0IG9mIFhNTCBwcmVmaXhlZCBQSSBhbGxvd2VkIGJ5IFczQyBzcGVjcwogICovCkBAIC0zMDksOCArMjEwLDcgQEAKIAkJICAgICAgY29uc3QgeG1sQ2hhciAqSUQsIHhtbE5vZGVQdHIgKmxpc3QpOwogCiBzdGF0aWMgaW50Ci14bWxDdHh0VXNlT3B0aW9uc0ludGVybmFsKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKK3htbEN0eHRVc2VPcHRpb25zSW50ZXJuYWwoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBpbnQgb3B0aW9ucyk7CiAjaWZkZWYgTElCWE1MX0xFR0FDWV9FTkFCTEVECiBzdGF0aWMgdm9pZAogeG1sQWRkRW50aXR5UmVmZXJlbmNlKHhtbEVudGl0eVB0ciBlbnQsIHhtbE5vZGVQdHIgZmlyc3ROb2RlLApAQCAtMzY3LDIyMiArMjY3LDYgQEAKIH0KIAogLyoqCi0gKiB4bWxGYXRhbEVycjoKLSAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0Ci0gKiBAZXJyb3I6ICB0aGUgZXJyb3IgbnVtYmVyCi0gKiBAZXh0cmE6ICBleHRyYSBpbmZvcm1hdGlvbiBzdHJpbmcKLSAqCi0gKiBIYW5kbGUgYSBmYXRhbCBwYXJzZXIgZXJyb3IsIGkuZS4gdmlvbGF0aW5nIFdlbGwtRm9ybWVkbmVzcyBjb25zdHJhaW50cwotICovCi1zdGF0aWMgdm9pZAoteG1sRmF0YWxFcnIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxQYXJzZXJFcnJvcnMgZXJyb3IsIGNvbnN0IGNoYXIgKmluZm8pCi17Ci0gICAgY29uc3QgY2hhciAqZXJybXNnOwotCi0gICAgaWYgKChjdHh0ICE9IE5VTEwpICYmIChjdHh0LT5kaXNhYmxlU0FYICE9IDApICYmCi0gICAgICAgIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSkKLQlyZXR1cm47Ci0gICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICBjYXNlIFhNTF9FUlJfSU5WQUxJRF9IRVhfQ0hBUlJFRjoKLSAgICAgICAgICAgIGVycm1zZyA9ICJDaGFyUmVmOiBpbnZhbGlkIGhleGFkZWNpbWFsIHZhbHVlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfSU5WQUxJRF9ERUNfQ0hBUlJFRjoKLSAgICAgICAgICAgIGVycm1zZyA9ICJDaGFyUmVmOiBpbnZhbGlkIGRlY2ltYWwgdmFsdWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9JTlZBTElEX0NIQVJSRUY6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiQ2hhclJlZjogaW52YWxpZCB2YWx1ZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SOgotICAgICAgICAgICAgZXJybXNnID0gImludGVybmFsIGVycm9yIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfUEVSRUZfQVRfRU9GOgotICAgICAgICAgICAgZXJybXNnID0gIlBFUmVmZXJlbmNlIGF0IGVuZCBvZiBkb2N1bWVudCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1BFUkVGX0lOX1BST0xPRzoKLSAgICAgICAgICAgIGVycm1zZyA9ICJQRVJlZmVyZW5jZSBpbiBwcm9sb2ciOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9QRVJFRl9JTl9FUElMT0c6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiUEVSZWZlcmVuY2UgaW4gZXBpbG9nIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfUEVSRUZfTk9fTkFNRToKLSAgICAgICAgICAgIGVycm1zZyA9ICJQRVJlZmVyZW5jZTogbm8gbmFtZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1BFUkVGX1NFTUlDT0xfTUlTU0lORzoKLSAgICAgICAgICAgIGVycm1zZyA9ICJQRVJlZmVyZW5jZTogZXhwZWN0aW5nICc7JyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VOVElUWV9MT09QOgotICAgICAgICAgICAgZXJybXNnID0gIkRldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VOVElUWV9OT1RfU1RBUlRFRDoKLSAgICAgICAgICAgIGVycm1zZyA9ICJFbnRpdHlWYWx1ZTogXCIgb3IgJyBleHBlY3RlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VOVElUWV9QRV9JTlRFUk5BTDoKLSAgICAgICAgICAgIGVycm1zZyA9ICJQRVJlZmVyZW5jZXMgZm9yYmlkZGVuIGluIGludGVybmFsIHN1YnNldCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VOVElUWV9OT1RfRklOSVNIRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiRW50aXR5VmFsdWU6IFwiIG9yICcgZXhwZWN0ZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9BVFRSSUJVVEVfTk9UX1NUQVJURUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiQXR0VmFsdWU6IFwiIG9yICcgZXhwZWN0ZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9MVF9JTl9BVFRSSUJVVEU6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiVW5lc2NhcGVkICc8JyBub3QgYWxsb3dlZCBpbiBhdHRyaWJ1dGVzIHZhbHVlcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0xJVEVSQUxfTk9UX1NUQVJURUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiU3lzdGVtTGl0ZXJhbCBcIiBvciAnIGV4cGVjdGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfTElURVJBTF9OT1RfRklOSVNIRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiVW5maW5pc2hlZCBTeXN0ZW0gb3IgUHVibGljIElEIFwiIG9yICcgZXhwZWN0ZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9NSVNQTEFDRURfQ0RBVEFfRU5EOgotICAgICAgICAgICAgZXJybXNnID0gIlNlcXVlbmNlICddXT4nIG5vdCBhbGxvd2VkIGluIGNvbnRlbnQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9VUklfUkVRVUlSRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiU1lTVEVNIG9yIFBVQkxJQywgdGhlIFVSSSBpcyBtaXNzaW5nIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfUFVCSURfUkVRVUlSRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiUFVCTElDLCB0aGUgUHVibGljIElkZW50aWZpZXIgaXMgbWlzc2luZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0hZUEhFTl9JTl9DT01NRU5UOgotICAgICAgICAgICAgZXJybXNnID0gIkNvbW1lbnQgbXVzdCBub3QgY29udGFpbiAnLS0nIChkb3VibGUtaHlwaGVuKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1BJX05PVF9TVEFSVEVEOgotICAgICAgICAgICAgZXJybXNnID0gInhtbFBhcnNlUEkgOiBubyB0YXJnZXQgbmFtZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1JFU0VSVkVEX1hNTF9OQU1FOgotICAgICAgICAgICAgZXJybXNnID0gIkludmFsaWQgUEkgbmFtZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX05PVEFUSU9OX05PVF9TVEFSVEVEOgotICAgICAgICAgICAgZXJybXNnID0gIk5PVEFUSU9OOiBOYW1lIGV4cGVjdGVkIGhlcmUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9OT1RBVElPTl9OT1RfRklOSVNIRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiJz4nIHJlcXVpcmVkIHRvIGNsb3NlIE5PVEFUSU9OIGRlY2xhcmF0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfVkFMVUVfUkVRVUlSRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiRW50aXR5IHZhbHVlIHJlcXVpcmVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfVVJJX0ZSQUdNRU5UOgotICAgICAgICAgICAgZXJybXNnID0gIkZyYWdtZW50IG5vdCBhbGxvd2VkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfQVRUTElTVF9OT1RfU1RBUlRFRDoKLSAgICAgICAgICAgIGVycm1zZyA9ICInKCcgcmVxdWlyZWQgdG8gc3RhcnQgQVRUTElTVCBlbnVtZXJhdGlvbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX05NVE9LRU5fUkVRVUlSRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiTm1Ub2tlbiBleHBlY3RlZCBpbiBBVFRMSVNUIGVudW1lcmF0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfQVRUTElTVF9OT1RfRklOSVNIRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiJyknIHJlcXVpcmVkIHRvIGZpbmlzaCBBVFRMSVNUIGVudW1lcmF0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfTUlYRURfTk9UX1NUQVJURUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiTWl4ZWRDb250ZW50RGVjbCA6ICd8JyBvciAnKSonIGV4cGVjdGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfUENEQVRBX1JFUVVJUkVEOgotICAgICAgICAgICAgZXJybXNnID0gIk1peGVkQ29udGVudERlY2wgOiAnI1BDREFUQScgZXhwZWN0ZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9FTEVNQ09OVEVOVF9OT1RfU1RBUlRFRDoKLSAgICAgICAgICAgIGVycm1zZyA9ICJDb250ZW50RGVjbCA6IE5hbWUgb3IgJygnIGV4cGVjdGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfRUxFTUNPTlRFTlRfTk9UX0ZJTklTSEVEOgotICAgICAgICAgICAgZXJybXNnID0gIkNvbnRlbnREZWNsIDogJywnICd8JyBvciAnKScgZXhwZWN0ZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9QRVJFRl9JTl9JTlRfU1VCU0VUOgotICAgICAgICAgICAgZXJybXNnID0KLSAgICAgICAgICAgICAgICAiUEVSZWZlcmVuY2U6IGZvcmJpZGRlbiB3aXRoaW4gbWFya3VwIGRlY2wgaW4gaW50ZXJuYWwgc3Vic2V0IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfR1RfUkVRVUlSRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiZXhwZWN0ZWQgJz4nIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfQ09ORFNFQ19JTlZBTElEOgotICAgICAgICAgICAgZXJybXNnID0gIlhNTCBjb25kaXRpb25hbCBzZWN0aW9uICdbJyBleHBlY3RlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VYVF9TVUJTRVRfTk9UX0ZJTklTSEVEOgotICAgICAgICAgICAgZXJybXNnID0gIkNvbnRlbnQgZXJyb3IgaW4gdGhlIGV4dGVybmFsIHN1YnNldCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0NPTkRTRUNfSU5WQUxJRF9LRVlXT1JEOgotICAgICAgICAgICAgZXJybXNnID0KLSAgICAgICAgICAgICAgICAiY29uZGl0aW9uYWwgc2VjdGlvbiBJTkNMVURFIG9yIElHTk9SRSBrZXl3b3JkIGV4cGVjdGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfQ09ORFNFQ19OT1RfRklOSVNIRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiWE1MIGNvbmRpdGlvbmFsIHNlY3Rpb24gbm90IGNsb3NlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1hNTERFQ0xfTk9UX1NUQVJURUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiVGV4dCBkZWNsYXJhdGlvbiAnPD94bWwnIHJlcXVpcmVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfWE1MREVDTF9OT1RfRklOSVNIRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAicGFyc2luZyBYTUwgZGVjbGFyYXRpb246ICc/PicgZXhwZWN0ZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9FWFRfRU5USVRZX1NUQU5EQUxPTkU6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIGNhbm5vdCBiZSBzdGFuZGFsb25lIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfRU5USVRZUkVGX1NFTUlDT0xfTUlTU0lORzoKLSAgICAgICAgICAgIGVycm1zZyA9ICJFbnRpdHlSZWY6IGV4cGVjdGluZyAnOyciOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9ET0NUWVBFX05PVF9GSU5JU0hFRDoKLSAgICAgICAgICAgIGVycm1zZyA9ICJET0NUWVBFIGltcHJvcGVybHkgdGVybWluYXRlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0xUU0xBU0hfUkVRVUlSRUQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiRW5kVGFnOiAnPC8nIG5vdCBmb3VuZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VRVUFMX1JFUVVJUkVEOgotICAgICAgICAgICAgZXJybXNnID0gImV4cGVjdGVkICc9JyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1NUUklOR19OT1RfQ0xPU0VEOgotICAgICAgICAgICAgZXJybXNnID0gIlN0cmluZyBub3QgY2xvc2VkIGV4cGVjdGluZyBcIiBvciAnIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfU1RSSU5HX05PVF9TVEFSVEVEOgotICAgICAgICAgICAgZXJybXNnID0gIlN0cmluZyBub3Qgc3RhcnRlZCBleHBlY3RpbmcgJyBvciBcIiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VOQ09ESU5HX05BTUU6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiSW52YWxpZCBYTUwgZW5jb2RpbmcgbmFtZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1NUQU5EQUxPTkVfVkFMVUU6Ci0gICAgICAgICAgICBlcnJtc2cgPSAic3RhbmRhbG9uZSBhY2NlcHRzIG9ubHkgJ3llcycgb3IgJ25vJyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0RPQ1VNRU5UX0VNUFRZOgotICAgICAgICAgICAgZXJybXNnID0gIkRvY3VtZW50IGlzIGVtcHR5IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfRE9DVU1FTlRfRU5EOgotICAgICAgICAgICAgZXJybXNnID0gIkV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9OT1RfV0VMTF9CQUxBTkNFRDoKLSAgICAgICAgICAgIGVycm1zZyA9ICJjaHVuayBpcyBub3Qgd2VsbCBiYWxhbmNlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxfRVJSX0VYVFJBX0NPTlRFTlQ6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiZXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHdlbGwgYmFsYW5jZWQgY2h1bmsiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9WRVJTSU9OX01JU1NJTkc6Ci0gICAgICAgICAgICBlcnJtc2cgPSAiTWFsZm9ybWVkIGRlY2xhcmF0aW9uIGV4cGVjdGluZyB2ZXJzaW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfTkFNRV9UT09fTE9ORzoKLSAgICAgICAgICAgIGVycm1zZyA9ICJOYW1lIHRvbyBsb25nIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIDAKLSAgICAgICAgY2FzZToKLSAgICAgICAgICAgIGVycm1zZyA9ICIiOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm1zZyA9ICJVbnJlZ2lzdGVyZWQgZXJyb3IgbWVzc2FnZSI7Ci0gICAgfQotICAgIGlmIChjdHh0ICE9IE5VTEwpCi0JY3R4dC0+ZXJyTm8gPSBlcnJvcjsKLSAgICBpZiAoaW5mbyA9PSBOVUxMKSB7Ci0gICAgICAgIF9feG1sUmFpc2VFcnJvcihOVUxMLCBOVUxMLCBOVUxMLCBjdHh0LCBOVUxMLCBYTUxfRlJPTV9QQVJTRVIsIGVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VSUl9GQVRBTCwgTlVMTCwgMCwgaW5mbywgTlVMTCwgTlVMTCwgMCwgMCwgIiVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnKTsKLSAgICB9IGVsc2UgewotICAgICAgICBfX3htbFJhaXNlRXJyb3IoTlVMTCwgTlVMTCwgTlVMTCwgY3R4dCwgTlVMTCwgWE1MX0ZST01fUEFSU0VSLCBlcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FUlJfRkFUQUwsIE5VTEwsIDAsIGluZm8sIE5VTEwsIE5VTEwsIDAsIDAsICIlczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2csIGluZm8pOwotICAgIH0KLSAgICBpZiAoY3R4dCAhPSBOVUxMKSB7Ci0JY3R4dC0+d2VsbEZvcm1lZCA9IDA7Ci0JaWYgKGN0eHQtPnJlY292ZXJ5ID09IDApCi0JICAgIGN0eHQtPmRpc2FibGVTQVggPSAxOwotICAgIH0KLX0KLQotLyoqCiAgKiB4bWxGYXRhbEVyck1zZzoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAZXJyb3I6ICB0aGUgZXJyb3IgbnVtYmVyCkBAIC02MTgsNyArMzAyLDcgQEAKICAqCiAgKiBIYW5kbGUgYSB3YXJuaW5nLgogICovCi1zdGF0aWMgdm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMywwKQordm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMywwKQogeG1sV2FybmluZ01zZyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbFBhcnNlckVycm9ycyBlcnJvciwKICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLCBjb25zdCB4bWxDaGFyICpzdHIxLCBjb25zdCB4bWxDaGFyICpzdHIyKQogewpAQCAtODU0LDYgKzUzOCw5MCBAQAogICAgICAgICAgICAgICAgICAgICBpbmZvMSwgaW5mbzIsIGluZm8zKTsKIH0KIAorc3RhdGljIHZvaWQKK3htbFNhdHVyYXRlZEFkZCh1bnNpZ25lZCBsb25nICpkc3QsIHVuc2lnbmVkIGxvbmcgdmFsKSB7CisgICAgaWYgKHZhbCA+IFVMT05HX01BWCAtICpkc3QpCisgICAgICAgICpkc3QgPSBVTE9OR19NQVg7CisgICAgZWxzZQorICAgICAgICAqZHN0ICs9IHZhbDsKK30KKworc3RhdGljIHZvaWQKK3htbFNhdHVyYXRlZEFkZFNpemVUKHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgbG9uZyB2YWwpIHsKKyAgICBpZiAodmFsID4gVUxPTkdfTUFYIC0gKmRzdCkKKyAgICAgICAgKmRzdCA9IFVMT05HX01BWDsKKyAgICBlbHNlCisgICAgICAgICpkc3QgKz0gdmFsOworfQorCisvKioKKyAqIHhtbFBhcnNlckVudGl0eUNoZWNrOgorICogQGN0eHQ6ICBwYXJzZXIgY29udGV4dAorICogQGV4dHJhOiAgc3VtIG9mIHVuZXhwYW5kZWQgZW50aXR5IHNpemVzCisgKgorICogQ2hlY2sgZm9yIG5vbi1saW5lYXIgZW50aXR5IGV4cGFuc2lvbiBiZWhhdmlvdXIuCisgKgorICogSW4gc29tZSBjYXNlcyBsaWtlIHhtbFN0cmluZ0RlY29kZUVudGl0aWVzLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogZm9yIGVhY2gsIHBvc3NpYmx5IG5lc3RlZCBlbnRpdHkgYW5kIGl0cyB1bmV4cGFuZGVkIGNvbnRlbnQgbGVuZ3RoLgorICoKKyAqIEluIG90aGVyIGNhc2VzIGxpa2UgeG1sUGFyc2VSZWZlcmVuY2UsIGl0J3Mgb25seSBjYWxsZWQgZm9yIGVhY2gKKyAqIHRvcC1sZXZlbCBlbnRpdHkgd2l0aCBpdHMgdW5leHBhbmRlZCBjb250ZW50IGxlbmd0aCBwbHVzIHRoZSBzdW0gb2YKKyAqIHRoZSB1bmV4cGFuZGVkIGNvbnRlbnQgbGVuZ3RocyAocGx1cyBmaXhlZCBjb3N0KSBvZiBhbGwgbmVzdGVkCisgKiBlbnRpdGllcy4KKyAqCisgKiBTdW1taW5nIHRoZSB1bmV4cGFuZGVkIGxlbmd0aHMgYWxzbyBhZGRzIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZS4KKyAqIFRoaXMgaXMgYnkgZGVzaWduLiBUYWtpbmcgdGhlIGxlbmd0aCBvZiB0aGUgZW50aXR5IG5hbWUgaW50byBhY2NvdW50CisgKiBkaXNjb3VyYWdlcyBhdHRhY2tzIHRoYXQgdHJ5IHRvIHdhc3RlIENQVSB0aW1lIHdpdGggYWJ1c2l2ZWx5IGxvbmcKKyAqIGVudGl0eSBuYW1lcy4gU2VlIHRlc3QvcmVjdXJzZS9sb2w2LnhtbCBmb3IgZXhhbXBsZS4gRWFjaCBjYWxsIGFsc28KKyAqIGFkZHMgc29tZSBmaXhlZCBjb3N0IFhNTF9FTlRfRklYRURfQ09TVCB0byBkaXNjb3VyYWdlIGF0dGFja3Mgd2l0aAorICogc2hvcnQgZW50aXRpZXMuCisgKgorICogUmV0dXJucyAxIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQKK3htbFBhcnNlckVudGl0eUNoZWNrKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgdW5zaWduZWQgbG9uZyBleHRyYSkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGNvbnN1bWVkOworICAgIHhtbFBhcnNlcklucHV0UHRyIGlucHV0ID0gY3R4dC0+aW5wdXQ7CisgICAgeG1sRW50aXR5UHRyIGVudGl0eSA9IGlucHV0LT5lbnRpdHk7CisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdG90YWwgY29uc3VtZWQgYnl0ZXMgc28gZmFyLCBpbmNsdWRpbmcgaW5wdXQgc3RyZWFtcyBvZgorICAgICAqIGV4dGVybmFsIGVudGl0aWVzLgorICAgICAqLworICAgIGNvbnN1bWVkID0gaW5wdXQtPnBhcmVudENvbnN1bWVkOworICAgIGlmICgoZW50aXR5ID09IE5VTEwpIHx8CisgICAgICAgICgoZW50aXR5LT5ldHlwZSA9PSBYTUxfRVhURVJOQUxfUEFSQU1FVEVSX0VOVElUWSkgJiYKKyAgICAgICAgICgoZW50aXR5LT5mbGFncyAmIFhNTF9FTlRfUEFSU0VEKSA9PSAwKSkpIHsKKyAgICAgICAgeG1sU2F0dXJhdGVkQWRkKCZjb25zdW1lZCwgaW5wdXQtPmNvbnN1bWVkKTsKKyAgICAgICAgeG1sU2F0dXJhdGVkQWRkU2l6ZVQoJmNvbnN1bWVkLCBpbnB1dC0+Y3VyIC0gaW5wdXQtPmJhc2UpOworICAgIH0KKyAgICB4bWxTYXR1cmF0ZWRBZGQoJmNvbnN1bWVkLCBjdHh0LT5zaXplZW50aXRpZXMpOworCisgICAgLyoKKyAgICAgKiBBZGQgZXh0cmEgY29zdCBhbmQgc29tZSBmaXhlZCBjb3N0LgorICAgICAqLworICAgIHhtbFNhdHVyYXRlZEFkZCgmY3R4dC0+c2l6ZWVudGNvcHksIGV4dHJhKTsKKyAgICB4bWxTYXR1cmF0ZWRBZGQoJmN0eHQtPnNpemVlbnRjb3B5LCBYTUxfRU5UX0ZJWEVEX0NPU1QpOworCisgICAgLyoKKyAgICAgKiBJdCdzIGltcG9ydGFudCB0byBhbHdheXMgdXNlIHNhdHVyYXRpb24gYXJpdGhtZXRpYyB3aGVuIHRyYWNraW5nCisgICAgICogZW50aXR5IHNpemVzIHRvIG1ha2UgdGhlIHNpemUgY2hlY2tzIHJlbGlhYmxlLiBJZiAic2l6ZWVudGNvcHkiCisgICAgICogb3ZlcmZsb3dzLCB3ZSBoYXZlIHRvIGFib3J0LgorICAgICAqLworICAgIGlmICgoY3R4dC0+c2l6ZWVudGNvcHkgPiBYTUxfUEFSU0VSX0FMTE9XRURfRVhQQU5TSU9OKSAmJgorICAgICAgICAoKGN0eHQtPnNpemVlbnRjb3B5ID49IFVMT05HX01BWCkgfHwKKyAgICAgICAgIChjdHh0LT5zaXplZW50Y29weSAvIGN0eHQtPm1heEFtcGwgPiBjb25zdW1lZCkpKSB7CisgICAgICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfRU5USVRZX0xPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICJNYXhpbXVtIGVudGl0eSBhbXBsaWZpY2F0aW9uIGZhY3RvciBleGNlZWRlZCwgc2VlICIKKyAgICAgICAgICAgICAgICAgICAgICAgInhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uLlxuIik7CisgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisKKyAgICByZXR1cm4oMCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgogICoJCUxpYnJhcnkgd2lkZSBvcHRpb25zCQkJCQkqCkBAIC0xMDQ5LDExICs4MTcsNyBAQAogICAgICAgICAgICAgcmV0dXJuKDApOwogI2VuZGlmCiAgICAgICAgIGNhc2UgWE1MX1dJVEhfREVCVUdfUlVOOgotI2lmZGVmIExJQlhNTF9ERUJVR19SVU5USU1FCi0gICAgICAgICAgICByZXR1cm4oMSk7Ci0jZWxzZQogICAgICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmCiAgICAgICAgIGNhc2UgWE1MX1dJVEhfWkxJQjoKICNpZmRlZiBMSUJYTUxfWkxJQl9FTkFCTEVECiAgICAgICAgICAgICByZXR1cm4oMSk7CkBAIC0xMTAwLDcgKzg2NCwxMSBAQAogICAgIGlmIChjdHh0ID09IE5VTEwpIHJldHVybjsKICAgICBzYXggPSBjdHh0LT5zYXg7CiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotICAgIGlmICgoc2F4KSAmJiAgKHNheC0+aW5pdGlhbGl6ZWQgPT0gWE1MX1NBWDJfTUFHSUMpICYmCisgICAgLyoKKyAgICAgKiBPbmx5IGVuYWJsZSBTQVgyIGlmIHRoZXJlIFNBWDIgZWxlbWVudCBoYW5kbGVycywgZXhjZXB0IHdoZW4gdGhlcmUKKyAgICAgKiBhcmUgbm8gZWxlbWVudCBoYW5kbGVycyBhdCBhbGwuCisgICAgICovCisgICAgaWYgKChzYXgpICYmIChzYXgtPmluaXRpYWxpemVkID09IFhNTF9TQVgyX01BR0lDKSAmJgogICAgICAgICAoKHNheC0+c3RhcnRFbGVtZW50TnMgIT0gTlVMTCkgfHwKICAgICAgICAgIChzYXgtPmVuZEVsZW1lbnROcyAhPSBOVUxMKSB8fAogICAgICAgICAgKChzYXgtPnN0YXJ0RWxlbWVudCA9PSBOVUxMKSAmJiAoc2F4LT5lbmRFbGVtZW50ID09IE5VTEwpKSkpCkBAIC0xMTE4LDYgKzg4NiwxNSBAQAogICAgIH0KIH0KIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIHhtbEhhc2hlZFN0cmluZyBwcmVmaXg7CisgICAgeG1sSGFzaGVkU3RyaW5nIG5hbWU7CisgICAgeG1sSGFzaGVkU3RyaW5nIHZhbHVlOworICAgIGNvbnN0IHhtbENoYXIgKnZhbHVlRW5kOworICAgIGludCBleHRlcm5hbDsKKyAgICBpbnQgZXhwYW5kZWRTaXplOworfSB4bWxEZWZBdHRyOworCiB0eXBlZGVmIHN0cnVjdCBfeG1sRGVmQXR0cnMgeG1sRGVmQXR0cnM7CiB0eXBlZGVmIHhtbERlZkF0dHJzICp4bWxEZWZBdHRyc1B0cjsKIHN0cnVjdCBfeG1sRGVmQXR0cnMgewpAQCAtMTEyNSw5ICs5MDIsOSBAQAogICAgIGludCBtYXhBdHRyczsgICAgICAgLyogdGhlIHNpemUgb2YgdGhlIGFycmF5ICovCiAjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCiAgICAgLyogVXNpbmcgYSBDOTkgZmxleGlibGUgYXJyYXkgbWVtYmVyIGF2b2lkcyBVQlNhbiBlcnJvcnMuICovCi0gICAgY29uc3QgeG1sQ2hhciAqdmFsdWVzW107IC8qIGFycmF5IG9mIGxvY2FsbmFtZS9wcmVmaXgvdmFsdWVzL2V4dGVybmFsICovCisgICAgeG1sRGVmQXR0ciBhdHRyc1tdOyAvKiBhcnJheSBvZiBsb2NhbG5hbWUvcHJlZml4L3ZhbHVlcy9leHRlcm5hbCAqLwogI2Vsc2UKLSAgICBjb25zdCB4bWxDaGFyICp2YWx1ZXNbNV07CisgICAgeG1sRGVmQXR0ciBhdHRyc1sxXTsKICNlbmRpZgogfTsKIApAQCAtMTIxOSw3ICs5OTYsNyBAQAogCSAgICByZXR1cm4oTlVMTCk7CiAJfQogCXhtbEF0dHJOb3JtYWxpemVTcGFjZShyZXQsIHJldCk7Ci0JKmxlbiA9IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKXJldCk7CisJKmxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKXJldCk7CiAgICAgICAgIHJldHVybihyZXQpOwogICAgIH0gZWxzZSBpZiAocmVtb3ZlX2hlYWQpIHsKICAgICAgICAgKmxlbiAtPSByZW1vdmVfaGVhZDsKQEAgLTEyNDQsOSArMTAyMSwxMiBAQAogICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqZnVsbGF0dHIsCiAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICp2YWx1ZSkgewogICAgIHhtbERlZkF0dHJzUHRyIGRlZmF1bHRzOwotICAgIGludCBsZW47Ci0gICAgY29uc3QgeG1sQ2hhciAqbmFtZTsKLSAgICBjb25zdCB4bWxDaGFyICpwcmVmaXg7CisgICAgeG1sRGVmQXR0ciAqYXR0cjsKKyAgICBpbnQgbGVuLCBleHBhbmRlZFNpemU7CisgICAgeG1sSGFzaGVkU3RyaW5nIG5hbWU7CisgICAgeG1sSGFzaGVkU3RyaW5nIHByZWZpeDsKKyAgICB4bWxIYXNoZWRTdHJpbmcgaHZhbHVlOworICAgIGNvbnN0IHhtbENoYXIgKmxvY2FsbmFtZTsKIAogICAgIC8qCiAgICAgICogQWxsb3dzIHRvIGRldGVjdCBhdHRyaWJ1dGUgcmVkZWZpbml0aW9ucwpAQCAtMTI2Niw0MSArMTA0NiwzOCBAQAogICAgICAqIHNwbGl0IHRoZSBlbGVtZW50IG5hbWUgaW50byBwcmVmaXg6bG9jYWxuYW1lICwgdGhlIHN0cmluZyBmb3VuZAogICAgICAqIGFyZSB3aXRoaW4gdGhlIERURCBhbmQgdGhlbiBub3QgYXNzb2NpYXRlZCB0byBuYW1lc3BhY2UgbmFtZXMuCiAgICAgICovCi0gICAgbmFtZSA9IHhtbFNwbGl0UU5hbWUzKGZ1bGxuYW1lLCAmbGVuKTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWUgPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIGZ1bGxuYW1lLCAtMSk7Ci0JcHJlZml4ID0gTlVMTDsKKyAgICBsb2NhbG5hbWUgPSB4bWxTcGxpdFFOYW1lMyhmdWxsbmFtZSwgJmxlbik7CisgICAgaWYgKGxvY2FsbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIG5hbWUgPSB4bWxEaWN0TG9va3VwSGFzaGVkKGN0eHQtPmRpY3QsIGZ1bGxuYW1lLCAtMSk7CisJcHJlZml4Lm5hbWUgPSBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hbWUgPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIG5hbWUsIC0xKTsKLQlwcmVmaXggPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIGZ1bGxuYW1lLCBsZW4pOworICAgICAgICBuYW1lID0geG1sRGljdExvb2t1cEhhc2hlZChjdHh0LT5kaWN0LCBsb2NhbG5hbWUsIC0xKTsKKwlwcmVmaXggPSB4bWxEaWN0TG9va3VwSGFzaGVkKGN0eHQtPmRpY3QsIGZ1bGxuYW1lLCBsZW4pOworICAgICAgICBpZiAocHJlZml4Lm5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gbWVtX2Vycm9yOwogICAgIH0KKyAgICBpZiAobmFtZS5uYW1lID09IE5VTEwpCisgICAgICAgIGdvdG8gbWVtX2Vycm9yOwogCiAgICAgLyoKICAgICAgKiBtYWtlIHN1cmUgdGhlcmUgaXMgc29tZSBzdG9yYWdlCiAgICAgICovCi0gICAgZGVmYXVsdHMgPSB4bWxIYXNoTG9va3VwMihjdHh0LT5hdHRzRGVmYXVsdCwgbmFtZSwgcHJlZml4KTsKLSAgICBpZiAoZGVmYXVsdHMgPT0gTlVMTCkgewotICAgICAgICBkZWZhdWx0cyA9ICh4bWxEZWZBdHRyc1B0cikgeG1sTWFsbG9jKHNpemVvZih4bWxEZWZBdHRycykgKwotCSAgICAgICAgICAgICAgICAgICAoNCAqIDUpICogc2l6ZW9mKGNvbnN0IHhtbENoYXIgKikpOwotCWlmIChkZWZhdWx0cyA9PSBOVUxMKQotCSAgICBnb3RvIG1lbV9lcnJvcjsKLQlkZWZhdWx0cy0+bmJBdHRycyA9IDA7Ci0JZGVmYXVsdHMtPm1heEF0dHJzID0gNDsKLQlpZiAoeG1sSGFzaFVwZGF0ZUVudHJ5MihjdHh0LT5hdHRzRGVmYXVsdCwgbmFtZSwgcHJlZml4LAotCSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzLCBOVUxMKSA8IDApIHsKLQkgICAgeG1sRnJlZShkZWZhdWx0cyk7Ci0JICAgIGdvdG8gbWVtX2Vycm9yOwotCX0KLSAgICB9IGVsc2UgaWYgKGRlZmF1bHRzLT5uYkF0dHJzID49IGRlZmF1bHRzLT5tYXhBdHRycykgeworICAgIGRlZmF1bHRzID0geG1sSGFzaExvb2t1cDIoY3R4dC0+YXR0c0RlZmF1bHQsIG5hbWUubmFtZSwgcHJlZml4Lm5hbWUpOworICAgIGlmICgoZGVmYXVsdHMgPT0gTlVMTCkgfHwKKyAgICAgICAgKGRlZmF1bHRzLT5uYkF0dHJzID49IGRlZmF1bHRzLT5tYXhBdHRycykpIHsKICAgICAgICAgeG1sRGVmQXR0cnNQdHIgdGVtcDsKKyAgICAgICAgaW50IG5ld1NpemU7CiAKLSAgICAgICAgdGVtcCA9ICh4bWxEZWZBdHRyc1B0cikgeG1sUmVhbGxvYyhkZWZhdWx0cywgc2l6ZW9mKHhtbERlZkF0dHJzKSArCi0JCSAgICAgICAoMiAqIGRlZmF1bHRzLT5tYXhBdHRycyAqIDUpICogc2l6ZW9mKGNvbnN0IHhtbENoYXIgKikpOworICAgICAgICBuZXdTaXplID0gKGRlZmF1bHRzICE9IE5VTEwpID8gMiAqIGRlZmF1bHRzLT5tYXhBdHRycyA6IDQ7CisgICAgICAgIHRlbXAgPSB4bWxSZWFsbG9jKGRlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKmRlZmF1bHRzKSArIG5ld1NpemUgKiBzaXplb2YoeG1sRGVmQXR0cikpOwogCWlmICh0ZW1wID09IE5VTEwpCiAJICAgIGdvdG8gbWVtX2Vycm9yOwotCWRlZmF1bHRzID0gdGVtcDsKLQlkZWZhdWx0cy0+bWF4QXR0cnMgKj0gMjsKLQlpZiAoeG1sSGFzaFVwZGF0ZUVudHJ5MihjdHh0LT5hdHRzRGVmYXVsdCwgbmFtZSwgcHJlZml4LAorICAgICAgICBpZiAoZGVmYXVsdHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHRlbXAtPm5iQXR0cnMgPSAwOworCXRlbXAtPm1heEF0dHJzID0gbmV3U2l6ZTsKKyAgICAgICAgZGVmYXVsdHMgPSB0ZW1wOworCWlmICh4bWxIYXNoVXBkYXRlRW50cnkyKGN0eHQtPmF0dHNEZWZhdWx0LCBuYW1lLm5hbWUsIHByZWZpeC5uYW1lLAogCSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzLCBOVUxMKSA8IDApIHsKIAkgICAgeG1sRnJlZShkZWZhdWx0cyk7CiAJICAgIGdvdG8gbWVtX2Vycm9yOwpAQCAtMTMwOCwzMCArMTA4NSw0MCBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogU3BsaXQgdGhlIGVsZW1lbnQgbmFtZSBpbnRvIHByZWZpeDpsb2NhbG5hbWUgLCB0aGUgc3RyaW5nIGZvdW5kCisgICAgICogU3BsaXQgdGhlIGF0dHJpYnV0ZSBuYW1lIGludG8gcHJlZml4OmxvY2FsbmFtZSAsIHRoZSBzdHJpbmcgZm91bmQKICAgICAgKiBhcmUgd2l0aGluIHRoZSBEVEQgYW5kIGhlbiBub3QgYXNzb2NpYXRlZCB0byBuYW1lc3BhY2UgbmFtZXMuCiAgICAgICovCi0gICAgbmFtZSA9IHhtbFNwbGl0UU5hbWUzKGZ1bGxhdHRyLCAmbGVuKTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWUgPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIGZ1bGxhdHRyLCAtMSk7Ci0JcHJlZml4ID0gTlVMTDsKKyAgICBsb2NhbG5hbWUgPSB4bWxTcGxpdFFOYW1lMyhmdWxsYXR0ciwgJmxlbik7CisgICAgaWYgKGxvY2FsbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIG5hbWUgPSB4bWxEaWN0TG9va3VwSGFzaGVkKGN0eHQtPmRpY3QsIGZ1bGxhdHRyLCAtMSk7CisJcHJlZml4Lm5hbWUgPSBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hbWUgPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIG5hbWUsIC0xKTsKLQlwcmVmaXggPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIGZ1bGxhdHRyLCBsZW4pOworICAgICAgICBuYW1lID0geG1sRGljdExvb2t1cEhhc2hlZChjdHh0LT5kaWN0LCBsb2NhbG5hbWUsIC0xKTsKKwlwcmVmaXggPSB4bWxEaWN0TG9va3VwSGFzaGVkKGN0eHQtPmRpY3QsIGZ1bGxhdHRyLCBsZW4pOworICAgICAgICBpZiAocHJlZml4Lm5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gbWVtX2Vycm9yOwogICAgIH0KKyAgICBpZiAobmFtZS5uYW1lID09IE5VTEwpCisgICAgICAgIGdvdG8gbWVtX2Vycm9yOwogCi0gICAgZGVmYXVsdHMtPnZhbHVlc1s1ICogZGVmYXVsdHMtPm5iQXR0cnNdID0gbmFtZTsKLSAgICBkZWZhdWx0cy0+dmFsdWVzWzUgKiBkZWZhdWx0cy0+bmJBdHRycyArIDFdID0gcHJlZml4OwogICAgIC8qIGludGVybiB0aGUgc3RyaW5nIGFuZCBwcmVjb21wdXRlIHRoZSBlbmQgKi8KLSAgICBsZW4gPSB4bWxTdHJsZW4odmFsdWUpOwotICAgIHZhbHVlID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCB2YWx1ZSwgbGVuKTsKLSAgICBkZWZhdWx0cy0+dmFsdWVzWzUgKiBkZWZhdWx0cy0+bmJBdHRycyArIDJdID0gdmFsdWU7Ci0gICAgZGVmYXVsdHMtPnZhbHVlc1s1ICogZGVmYXVsdHMtPm5iQXR0cnMgKyAzXSA9IHZhbHVlICsgbGVuOwotICAgIGlmIChjdHh0LT5leHRlcm5hbCkKLSAgICAgICAgZGVmYXVsdHMtPnZhbHVlc1s1ICogZGVmYXVsdHMtPm5iQXR0cnMgKyA0XSA9IEJBRF9DQVNUICJleHRlcm5hbCI7Ci0gICAgZWxzZQotICAgICAgICBkZWZhdWx0cy0+dmFsdWVzWzUgKiBkZWZhdWx0cy0+bmJBdHRycyArIDRdID0gTlVMTDsKLSAgICBkZWZhdWx0cy0+bmJBdHRycysrOworICAgIGxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSB2YWx1ZSk7CisgICAgaHZhbHVlID0geG1sRGljdExvb2t1cEhhc2hlZChjdHh0LT5kaWN0LCB2YWx1ZSwgbGVuKTsKKyAgICBpZiAoaHZhbHVlLm5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBtZW1fZXJyb3I7CisKKyAgICBleHBhbmRlZFNpemUgPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbmFtZS5uYW1lKTsKKyAgICBpZiAocHJlZml4Lm5hbWUgIT0gTlVMTCkKKyAgICAgICAgZXhwYW5kZWRTaXplICs9IHN0cmxlbigoY29uc3QgY2hhciAqKSBwcmVmaXgubmFtZSk7CisgICAgZXhwYW5kZWRTaXplICs9IGxlbjsKKworICAgIGF0dHIgPSAmZGVmYXVsdHMtPmF0dHJzW2RlZmF1bHRzLT5uYkF0dHJzKytdOworICAgIGF0dHItPm5hbWUgPSBuYW1lOworICAgIGF0dHItPnByZWZpeCA9IHByZWZpeDsKKyAgICBhdHRyLT52YWx1ZSA9IGh2YWx1ZTsKKyAgICBhdHRyLT52YWx1ZUVuZCA9IGh2YWx1ZS5uYW1lICsgbGVuOworICAgIGF0dHItPmV4dGVybmFsID0gY3R4dC0+ZXh0ZXJuYWw7CisgICAgYXR0ci0+ZXhwYW5kZWRTaXplID0gZXhwYW5kZWRTaXplOwogCiAgICAgcmV0dXJuOwogCkBAIC0xNDE2LDYgKzEyMDMsOCBAQAogICogeG1sQ2hlY2tMYW5ndWFnZUlEOgogICogQGxhbmc6ICBwb2ludGVyIHRvIHRoZSBzdHJpbmcgdmFsdWUKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4KKyAqCiAgKiBDaGVja3MgdGhhdCB0aGUgdmFsdWUgY29uZm9ybXMgdG8gdGhlIExhbmd1YWdlSUQgcHJvZHVjdGlvbjoKICAqCiAgKiBOT1RFOiB0aGlzIGlzIHNvbWV3aGF0IGRlcHJlY2F0ZWQsIHRob3NlIHByb2R1Y3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tCkBAIC0xNjE1LDExNCArMTQwNCw0NzYgQEAKIHN0YXRpYyB4bWxFbnRpdHlQdHIgeG1sUGFyc2VTdHJpbmdFbnRpdHlSZWYoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICoqIHN0cik7CiAKLSNpZmRlZiBTQVgyCiAvKioKLSAqIG5zUHVzaDoKLSAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0Ci0gKiBAcHJlZml4OiAgdGhlIG5hbWVzcGFjZSBwcmVmaXggb3IgTlVMTAotICogQFVSTDogIHRoZSBuYW1lc3BhY2UgbmFtZQorICogeG1sUGFyc2VyTnNDcmVhdGU6CiAgKgotICogUHVzaGVzIGEgbmV3IHBhcnNlciBuYW1lc3BhY2Ugb24gdG9wIG9mIHRoZSBucyBzdGFjaworICogQ3JlYXRlIGEgbmV3IG5hbWVzcGFjZSBkYXRhYmFzZS4KICAqCi0gKiBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZXJyb3IsIC0yIGlmIHRoZSBuYW1lc3BhY2Ugc2hvdWxkIGJlIGRpc2NhcmRlZAotICoJICAgYW5kIHRoZSBpbmRleCBpbiB0aGUgc3RhY2sgb3RoZXJ3aXNlLgorICogUmV0dXJucyB0aGUgbmV3IG9iZWpjdC4KKyAqLworeG1sUGFyc2VyTnNEYXRhICoKK3htbFBhcnNlck5zQ3JlYXRlKHZvaWQpIHsKKyAgICB4bWxQYXJzZXJOc0RhdGEgKm5zZGIgPSB4bWxNYWxsb2Moc2l6ZW9mKCpuc2RiKSk7CisKKyAgICBpZiAobnNkYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgbWVtc2V0KG5zZGIsIDAsIHNpemVvZigqbnNkYikpOworICAgIG5zZGItPmRlZmF1bHROc0luZGV4ID0gSU5UX01BWDsKKworICAgIHJldHVybihuc2RiKTsKK30KKworLyoqCisgKiB4bWxQYXJzZXJOc0ZyZWU6CisgKiBAbnNkYjogbmFtZXNwYWNlIGRhdGFiYXNlCisgKgorICogRnJlZSBhIG5hbWVzcGFjZSBkYXRhYmFzZS4KKyAqLwordm9pZAoreG1sUGFyc2VyTnNGcmVlKHhtbFBhcnNlck5zRGF0YSAqbnNkYikgeworICAgIGlmIChuc2RiID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHhtbEZyZWUobnNkYi0+ZXh0cmEpOworICAgIHhtbEZyZWUobnNkYi0+aGFzaCk7CisgICAgeG1sRnJlZShuc2RiKTsKK30KKworLyoqCisgKiB4bWxQYXJzZXJOc1Jlc2V0OgorICogQG5zZGI6IG5hbWVzcGFjZSBkYXRhYmFzZQorICoKKyAqIFJlc2V0IGEgbmFtZXNwYWNlIGRhdGFiYXNlLgorICovCitzdGF0aWMgdm9pZAoreG1sUGFyc2VyTnNSZXNldCh4bWxQYXJzZXJOc0RhdGEgKm5zZGIpIHsKKyAgICBpZiAobnNkYiA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBuc2RiLT5oYXNoRWxlbXMgPSAwOworICAgIG5zZGItPmVsZW1lbnRJZCA9IDA7CisgICAgbnNkYi0+ZGVmYXVsdE5zSW5kZXggPSBJTlRfTUFYOworCisgICAgaWYgKG5zZGItPmhhc2gpCisgICAgICAgIG1lbXNldChuc2RiLT5oYXNoLCAwLCBuc2RiLT5oYXNoU2l6ZSAqIHNpemVvZihuc2RiLT5oYXNoWzBdKSk7Cit9CisKKy8qKgorICogeG1sUGFyc2VyU3RhcnRFbGVtZW50OgorICogQG5zZGI6IG5hbWVzcGFjZSBkYXRhYmFzZQorICoKKyAqIFNpZ25hbCB0aGF0IGEgbmV3IGVsZW1lbnQgaGFzIHN0YXJ0ZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBlbGVtZW50IGNvdW50ZXIgb3ZlcmZsb3dlZC4KICAqLwogc3RhdGljIGludAotbnNQdXNoKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqcHJlZml4LCBjb25zdCB4bWxDaGFyICpVUkwpCi17Ci0gICAgaWYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTlNDTEVBTikgewotICAgICAgICBpbnQgaTsKLQlmb3IgKGkgPSBjdHh0LT5uc05yIC0gMjtpID49IDA7aSAtPSAyKSB7Ci0JICAgIGlmIChjdHh0LT5uc1RhYltpXSA9PSBwcmVmaXgpIHsKLQkJLyogaW4gc2NvcGUgKi8KLQkgICAgICAgIGlmIChjdHh0LT5uc1RhYltpICsgMV0gPT0gVVJMKQotCQkgICAgcmV0dXJuKC0yKTsKLQkJLyogb3V0IG9mIHNjb3BlIGtlZXAgaXQgKi8KLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlmICgoY3R4dC0+bnNNYXggPT0gMCkgfHwgKGN0eHQtPm5zVGFiID09IE5VTEwpKSB7Ci0JY3R4dC0+bnNNYXggPSAxMDsKLQljdHh0LT5uc05yID0gMDsKLQljdHh0LT5uc1RhYiA9IChjb25zdCB4bWxDaGFyICoqKQotCSAgICAgICAgICAgICAgeG1sTWFsbG9jKGN0eHQtPm5zTWF4ICogc2l6ZW9mKHhtbENoYXIgKikpOwotCWlmIChjdHh0LT5uc1RhYiA9PSBOVUxMKSB7Ci0JICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKLQkgICAgY3R4dC0+bnNNYXggPSAwOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0JfQotICAgIH0gZWxzZSBpZiAoY3R4dC0+bnNOciA+PSBjdHh0LT5uc01heCkgewotICAgICAgICBjb25zdCB4bWxDaGFyICoqIHRtcDsKLSAgICAgICAgY3R4dC0+bnNNYXggKj0gMjsKLSAgICAgICAgdG1wID0gKGNvbnN0IHhtbENoYXIgKiopIHhtbFJlYWxsb2MoKGNoYXIgKikgY3R4dC0+bnNUYWIsCi0JCQkJICAgIGN0eHQtPm5zTWF4ICogc2l6ZW9mKGN0eHQtPm5zVGFiWzBdKSk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewotICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwotCSAgICBjdHh0LT5uc01heCAvPSAyOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLQljdHh0LT5uc1RhYiA9IHRtcDsKLSAgICB9Ci0gICAgY3R4dC0+bnNUYWJbY3R4dC0+bnNOcisrXSA9IHByZWZpeDsKLSAgICBjdHh0LT5uc1RhYltjdHh0LT5uc05yKytdID0gVVJMOwotICAgIHJldHVybiAoY3R4dC0+bnNOcik7Cit4bWxQYXJzZXJOc1N0YXJ0RWxlbWVudCh4bWxQYXJzZXJOc0RhdGEgKm5zZGIpIHsKKyAgICBpZiAobnNkYi0+ZWxlbWVudElkID09IFVJTlRfTUFYKQorICAgICAgICByZXR1cm4oLTEpOworICAgIG5zZGItPmVsZW1lbnRJZCsrOworCisgICAgcmV0dXJuKDApOwogfQorCiAvKioKLSAqIG5zUG9wOgorICogeG1sUGFyc2VyTnNMb29rdXA6CisgKiBAY3R4dDogcGFyc2VyIGNvbnRleHQKKyAqIEBwcmVmaXg6IG5hbWVzcGFjZSBwcmVmaXgKKyAqIEBidWNrZXRQdHI6IG9wdGlvbmFsIGJ1Y2tldCAocmV0dXJuIHZhbHVlKQorICoKKyAqIExvb2t1cCBuYW1lc3BhY2Ugd2l0aCBnaXZlbiBwcmVmaXguIElmIEBidWNrZXRQdHIgaXMgbm9uLU5VTEwsIGl0IHdpbGwKKyAqIGJlIHNldCB0byB0aGUgbWF0Y2hpbmcgYnVja2V0LCBvciB0aGUgZmlyc3QgZW1wdHkgYnVja2V0IGlmIG5vIG1hdGNoCisgKiB3YXMgZm91bmQuCisgKgorICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIGluZGV4IG9uIHN1Y2Nlc3MsIElOVF9NQVggaWYgbm8gbmFtZXNwYWNlIHdhcworICogZm91bmQuCisgKi8KK3N0YXRpYyBpbnQKK3htbFBhcnNlck5zTG9va3VwKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sSGFzaGVkU3RyaW5nICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICB4bWxQYXJzZXJOc0J1Y2tldCAqKmJ1Y2tldFB0cikgeworICAgIHhtbFBhcnNlck5zQnVja2V0ICpidWNrZXQ7CisgICAgdW5zaWduZWQgaW5kZXgsIGhhc2hWYWx1ZTsKKworICAgIGlmIChwcmVmaXgtPm5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKGN0eHQtPm5zZGItPmRlZmF1bHROc0luZGV4KTsKKworICAgIGlmIChjdHh0LT5uc2RiLT5oYXNoU2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4oSU5UX01BWCk7CisKKyAgICBoYXNoVmFsdWUgPSBwcmVmaXgtPmhhc2hWYWx1ZTsKKyAgICBpbmRleCA9IGhhc2hWYWx1ZSAmIChjdHh0LT5uc2RiLT5oYXNoU2l6ZSAtIDEpOworICAgIGJ1Y2tldCA9ICZjdHh0LT5uc2RiLT5oYXNoW2luZGV4XTsKKworICAgIHdoaWxlIChidWNrZXQtPmhhc2hWYWx1ZSkgeworICAgICAgICBpZiAoKGJ1Y2tldC0+aGFzaFZhbHVlID09IGhhc2hWYWx1ZSkgJiYKKyAgICAgICAgICAgIChidWNrZXQtPmluZGV4ICE9IElOVF9NQVgpKSB7CisgICAgICAgICAgICBpZiAoY3R4dC0+bnNUYWJbYnVja2V0LT5pbmRleCAqIDJdID09IHByZWZpeC0+bmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChidWNrZXRQdHIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgKmJ1Y2tldFB0ciA9IGJ1Y2tldDsKKyAgICAgICAgICAgICAgICByZXR1cm4oYnVja2V0LT5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbmRleCsrOworICAgICAgICBidWNrZXQrKzsKKyAgICAgICAgaWYgKGluZGV4ID09IGN0eHQtPm5zZGItPmhhc2hTaXplKSB7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgICAgICBidWNrZXQgPSBjdHh0LT5uc2RiLT5oYXNoOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1Y2tldFB0ciAhPSBOVUxMKQorICAgICAgICAqYnVja2V0UHRyID0gYnVja2V0OworICAgIHJldHVybihJTlRfTUFYKTsKK30KKworLyoqCisgKiB4bWxQYXJzZXJOc0xvb2t1cFVyaToKKyAqIEBjdHh0OiBwYXJzZXIgY29udGV4dAorICogQHByZWZpeDogbmFtZXNwYWNlIHByZWZpeAorICoKKyAqIExvb2t1cCBuYW1lc3BhY2UgVVJJIHdpdGggZ2l2ZW4gcHJlZml4LgorICoKKyAqIFJldHVybnMgdGhlIG5hbWVzcGFjZSBVUkkgb24gc3VjY2VzcywgTlVMTCBpZiBubyBuYW1lc3BhY2Ugd2FzIGZvdW5kLgorICovCitzdGF0aWMgY29uc3QgeG1sQ2hhciAqCit4bWxQYXJzZXJOc0xvb2t1cFVyaSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbEhhc2hlZFN0cmluZyAqcHJlZml4KSB7CisgICAgY29uc3QgeG1sQ2hhciAqcmV0OworICAgIGludCBuc0luZGV4OworCisgICAgaWYgKHByZWZpeC0+bmFtZSA9PSBjdHh0LT5zdHJfeG1sKQorICAgICAgICByZXR1cm4oY3R4dC0+c3RyX3htbF9ucyk7CisKKyAgICBuc0luZGV4ID0geG1sUGFyc2VyTnNMb29rdXAoY3R4dCwgcHJlZml4LCBOVUxMKTsKKyAgICBpZiAobnNJbmRleCA9PSBJTlRfTUFYKQorICAgICAgICByZXR1cm4oTlVMTCk7CisKKyAgICByZXQgPSBjdHh0LT5uc1RhYltuc0luZGV4ICogMiArIDFdOworICAgIGlmIChyZXRbMF0gPT0gMCkKKyAgICAgICAgcmV0ID0gTlVMTDsKKyAgICByZXR1cm4ocmV0KTsKK30KKworLyoqCisgKiB4bWxQYXJzZXJOc0xvb2t1cFNheDoKKyAqIEBjdHh0OiBwYXJzZXIgY29udGV4dAorICogQHByZWZpeDogbmFtZXNwYWNlIHByZWZpeAorICoKKyAqIExvb2t1cCBleHRyYSBkYXRhIGZvciB0aGUgZ2l2ZW4gcHJlZml4LiBUaGlzIHJldHVybnMgZGF0YSBzdG9yZWQKKyAqIHdpdGggeG1sUGFyc2VyTnNVZHBhdGVTYXguCisgKgorICogUmV0dXJucyB0aGUgZGF0YSBvbiBzdWNjZXNzLCBOVUxMIGlmIG5vIG5hbWVzcGFjZSB3YXMgZm91bmQuCisgKi8KK3ZvaWQgKgoreG1sUGFyc2VyTnNMb29rdXBTYXgoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpwcmVmaXgpIHsKKyAgICB4bWxIYXNoZWRTdHJpbmcgaHByZWZpeDsKKyAgICBpbnQgbnNJbmRleDsKKworICAgIGlmIChwcmVmaXggPT0gY3R4dC0+c3RyX3htbCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgaHByZWZpeC5uYW1lID0gcHJlZml4OworICAgIGlmIChwcmVmaXggIT0gTlVMTCkKKyAgICAgICAgaHByZWZpeC5oYXNoVmFsdWUgPSB4bWxEaWN0Q29tcHV0ZUhhc2goY3R4dC0+ZGljdCwgcHJlZml4KTsKKyAgICBlbHNlCisgICAgICAgIGhwcmVmaXguaGFzaFZhbHVlID0gMDsKKyAgICBuc0luZGV4ID0geG1sUGFyc2VyTnNMb29rdXAoY3R4dCwgJmhwcmVmaXgsIE5VTEwpOworICAgIGlmIChuc0luZGV4ID09IElOVF9NQVgpCisgICAgICAgIHJldHVybihOVUxMKTsKKworICAgIHJldHVybihjdHh0LT5uc2RiLT5leHRyYVtuc0luZGV4XS5zYXhEYXRhKTsKK30KKworLyoqCisgKiB4bWxQYXJzZXJOc1VwZGF0ZVNheDoKKyAqIEBjdHh0OiBwYXJzZXIgY29udGV4dAorICogQHByZWZpeDogbmFtZXNwYWNlIHByZWZpeAorICogQHNheERhdGE6IGV4dHJhIGRhdGEgZm9yIFNBWCBoYW5kbGVyCisgKgorICogU2V0cyBvciB1cGRhdGVzIGV4dHJhIGRhdGEgZm9yIHRoZSBnaXZlbiBwcmVmaXguIFRoaXMgdmFsdWUgd2lsbCBiZQorICogcmV0dXJuZWQgYnkgeG1sUGFyc2VyTnNMb29rdXBTYXggYXMgbG9uZyBhcyB0aGUgbmFtZXNwYWNlIHdpdGggdGhlCisgKiBnaXZlbiBwcmVmaXggaXMgaW4gc2NvcGUuCisgKgorICogUmV0dXJucyB0aGUgZGF0YSBvbiBzdWNjZXNzLCBOVUxMIGlmIG5vIG5hbWVzcGFjZSB3YXMgZm91bmQuCisgKi8KK2ludAoreG1sUGFyc2VyTnNVcGRhdGVTYXgoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpzYXhEYXRhKSB7CisgICAgeG1sSGFzaGVkU3RyaW5nIGhwcmVmaXg7CisgICAgaW50IG5zSW5kZXg7CisKKyAgICBpZiAocHJlZml4ID09IGN0eHQtPnN0cl94bWwpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBocHJlZml4Lm5hbWUgPSBwcmVmaXg7CisgICAgaWYgKHByZWZpeCAhPSBOVUxMKQorICAgICAgICBocHJlZml4Lmhhc2hWYWx1ZSA9IHhtbERpY3RDb21wdXRlSGFzaChjdHh0LT5kaWN0LCBwcmVmaXgpOworICAgIGVsc2UKKyAgICAgICAgaHByZWZpeC5oYXNoVmFsdWUgPSAwOworICAgIG5zSW5kZXggPSB4bWxQYXJzZXJOc0xvb2t1cChjdHh0LCAmaHByZWZpeCwgTlVMTCk7CisgICAgaWYgKG5zSW5kZXggPT0gSU5UX01BWCkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGN0eHQtPm5zZGItPmV4dHJhW25zSW5kZXhdLnNheERhdGEgPSBzYXhEYXRhOworICAgIHJldHVybigwKTsKK30KKworLyoqCisgKiB4bWxQYXJzZXJOc0dyb3c6CisgKiBAY3R4dDogcGFyc2VyIGNvbnRleHQKKyAqCisgKiBHcm93cyB0aGUgbmFtZXNwYWNlIHRhYmxlcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyBpbnQKK3htbFBhcnNlck5zR3Jvdyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICBjb25zdCB4bWxDaGFyICoqdGFibGU7CisgICAgeG1sUGFyc2VyTnNFeHRyYSAqZXh0cmE7CisgICAgaW50IG5ld1NpemU7CisKKyAgICBpZiAoY3R4dC0+bnNNYXggPiBJTlRfTUFYIC8gMikKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBuZXdTaXplID0gY3R4dC0+bnNNYXggPyBjdHh0LT5uc01heCAqIDIgOiAxNjsKKworICAgIHRhYmxlID0geG1sUmVhbGxvYyhjdHh0LT5uc1RhYiwgMiAqIG5ld1NpemUgKiBzaXplb2YodGFibGVbMF0pKTsKKyAgICBpZiAodGFibGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBjdHh0LT5uc1RhYiA9IHRhYmxlOworCisgICAgZXh0cmEgPSB4bWxSZWFsbG9jKGN0eHQtPm5zZGItPmV4dHJhLCBuZXdTaXplICogc2l6ZW9mKGV4dHJhWzBdKSk7CisgICAgaWYgKGV4dHJhID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgY3R4dC0+bnNkYi0+ZXh0cmEgPSBleHRyYTsKKworICAgIGN0eHQtPm5zTWF4ID0gbmV3U2l6ZTsKKyAgICByZXR1cm4oMCk7CisKK2Vycm9yOgorICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKKyAgICByZXR1cm4oLTEpOworfQorCisvKioKKyAqIHhtbFBhcnNlck5zUHVzaDoKKyAqIEBjdHh0OiBwYXJzZXIgY29udGV4dAorICogQHByZWZpeDogcHJlZml4IHdpdGggaGFzaCB2YWx1ZQorICogQHVyaTogdXJpIHdpdGggaGFzaCB2YWx1ZQorICogQHNheERhdGE6IGV4dHJhIGRhdGEgZm9yIFNBWCBoYW5kbGVyCisgKiBAZGVmQXR0cjogd2hldGhlciB0aGUgbmFtZXNwYWNlIGNvbWVzIGZyb20gYSBkZWZhdWx0IGF0dHJpYnV0ZQorICoKKyAqIFB1c2ggYSBuZXcgbmFtZXNwYWNlIG9uIHRoZSB0YWJsZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIG5hbWVzcGFjZSB3YXMgcHVzaGVkLCAwIGlmIHRoZSBuYW1lc3BhY2Ugd2FzIGlnbm9yZWQsCisgKiAtMSBpZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KKyAqLworc3RhdGljIGludAoreG1sUGFyc2VyTnNQdXNoKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sSGFzaGVkU3RyaW5nICpwcmVmaXgsCisgICAgICAgICAgICAgICAgY29uc3QgeG1sSGFzaGVkU3RyaW5nICp1cmksIHZvaWQgKnNheERhdGEsIGludCBkZWZBdHRyKSB7CisgICAgeG1sUGFyc2VyTnNCdWNrZXQgKmJ1Y2tldCA9IE5VTEw7CisgICAgeG1sUGFyc2VyTnNFeHRyYSAqZXh0cmE7CisgICAgY29uc3QgeG1sQ2hhciAqKm5zOworICAgIHVuc2lnbmVkIGhhc2hWYWx1ZSwgbnNJbmRleCwgb2xkSW5kZXg7CisKKyAgICBpZiAoKHByZWZpeCAhPSBOVUxMKSAmJiAocHJlZml4LT5uYW1lID09IGN0eHQtPnN0cl94bWwpKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoKGN0eHQtPm5zTnIgPj0gY3R4dC0+bnNNYXgpICYmICh4bWxQYXJzZXJOc0dyb3coY3R4dCkgPCAwKSkgeworICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBEZWZhdWx0IG5hbWVzcGFjZSBhbmQgJ3htbCcgbmFtZXNwYWNlCisgICAgICovCisgICAgaWYgKChwcmVmaXggPT0gTlVMTCkgfHwgKHByZWZpeC0+bmFtZSA9PSBOVUxMKSkgeworICAgICAgICBvbGRJbmRleCA9IGN0eHQtPm5zZGItPmRlZmF1bHROc0luZGV4OworCisgICAgICAgIGlmIChvbGRJbmRleCAhPSBJTlRfTUFYKSB7CisgICAgICAgICAgICBleHRyYSA9ICZjdHh0LT5uc2RiLT5leHRyYVtvbGRJbmRleF07CisKKyAgICAgICAgICAgIGlmIChleHRyYS0+ZWxlbWVudElkID09IGN0eHQtPm5zZGItPmVsZW1lbnRJZCkgeworICAgICAgICAgICAgICAgIGlmIChkZWZBdHRyID09IDApCisgICAgICAgICAgICAgICAgICAgIHhtbEVyckF0dHJpYnV0ZUR1cChjdHh0LCBOVUxMLCBCQURfQ0FTVCAieG1sbnMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9OU0NMRUFOKSAmJgorICAgICAgICAgICAgICAgICh1cmktPm5hbWUgPT0gY3R4dC0+bnNUYWJbb2xkSW5kZXggKiAyICsgMV0pKQorICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGN0eHQtPm5zZGItPmRlZmF1bHROc0luZGV4ID0gY3R4dC0+bnNOcjsKKyAgICAgICAgZ290byBwb3B1bGF0ZV9lbnRyeTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEhhc2ggdGFibGUgbG9va3VwCisgICAgICovCisgICAgb2xkSW5kZXggPSB4bWxQYXJzZXJOc0xvb2t1cChjdHh0LCBwcmVmaXgsICZidWNrZXQpOworICAgIGlmIChvbGRJbmRleCAhPSBJTlRfTUFYKSB7CisgICAgICAgIGV4dHJhID0gJmN0eHQtPm5zZGItPmV4dHJhW29sZEluZGV4XTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgZHVwbGljYXRlIGRlZmluaXRpb25zIG9uIHRoZSBzYW1lIGVsZW1lbnQuCisgICAgICAgICAqLworICAgICAgICBpZiAoZXh0cmEtPmVsZW1lbnRJZCA9PSBjdHh0LT5uc2RiLT5lbGVtZW50SWQpIHsKKyAgICAgICAgICAgIGlmIChkZWZBdHRyID09IDApCisgICAgICAgICAgICAgICAgeG1sRXJyQXR0cmlidXRlRHVwKGN0eHQsIEJBRF9DQVNUICJ4bWxucyIsIHByZWZpeC0+bmFtZSk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTlNDTEVBTikgJiYKKyAgICAgICAgICAgICh1cmktPm5hbWUgPT0gY3R4dC0+bnNUYWJbYnVja2V0LT5pbmRleCAqIDIgKyAxXSkpCisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgYnVja2V0LT5pbmRleCA9IGN0eHQtPm5zTnI7CisgICAgICAgIGdvdG8gcG9wdWxhdGVfZW50cnk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJbnNlcnQgbmV3IGJ1Y2tldAorICAgICAqLworCisgICAgaGFzaFZhbHVlID0gcHJlZml4LT5oYXNoVmFsdWU7CisKKyAgICAvKgorICAgICAqIEdyb3cgaGFzaCB0YWJsZSwgNTAlIGZpbGwgZmFjdG9yCisgICAgICovCisgICAgaWYgKGN0eHQtPm5zZGItPmhhc2hFbGVtcyArIDEgPiBjdHh0LT5uc2RiLT5oYXNoU2l6ZSAvIDIpIHsKKyAgICAgICAgeG1sUGFyc2VyTnNCdWNrZXQgKm5ld0hhc2g7CisgICAgICAgIHVuc2lnbmVkIG5ld1NpemUsIGksIGluZGV4OworCisgICAgICAgIGlmIChjdHh0LT5uc2RiLT5oYXNoU2l6ZSA+IFVJTlRfTUFYIC8gMikgeworICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBuZXdTaXplID0gY3R4dC0+bnNkYi0+aGFzaFNpemUgPyBjdHh0LT5uc2RiLT5oYXNoU2l6ZSAqIDIgOiAxNjsKKyAgICAgICAgbmV3SGFzaCA9IHhtbE1hbGxvYyhuZXdTaXplICogc2l6ZW9mKG5ld0hhc2hbMF0pKTsKKyAgICAgICAgaWYgKG5ld0hhc2ggPT0gTlVMTCkgeworICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQobmV3SGFzaCwgMCwgbmV3U2l6ZSAqIHNpemVvZihuZXdIYXNoWzBdKSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGN0eHQtPm5zZGItPmhhc2hTaXplOyBpKyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGh2ID0gY3R4dC0+bnNkYi0+aGFzaFtpXS5oYXNoVmFsdWU7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXdJbmRleDsKKworICAgICAgICAgICAgaWYgKGh2ID09IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBuZXdJbmRleCA9IGh2ICYgKG5ld1NpemUgLSAxKTsKKworICAgICAgICAgICAgd2hpbGUgKG5ld0hhc2hbbmV3SW5kZXhdLmhhc2hWYWx1ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmV3SW5kZXgrKzsKKyAgICAgICAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbmV3U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5kZXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXdIYXNoW25ld0luZGV4XSA9IGN0eHQtPm5zZGItPmhhc2hbaV07CisgICAgICAgIH0KKworICAgICAgICB4bWxGcmVlKGN0eHQtPm5zZGItPmhhc2gpOworICAgICAgICBjdHh0LT5uc2RiLT5oYXNoID0gbmV3SGFzaDsKKyAgICAgICAgY3R4dC0+bnNkYi0+aGFzaFNpemUgPSBuZXdTaXplOworCisgICAgICAgIC8qCisgICAgICAgICAqIFJlbG9va3VwCisgICAgICAgICAqLworICAgICAgICBpbmRleCA9IGhhc2hWYWx1ZSAmIChuZXdTaXplIC0gMSk7CisKKyAgICAgICAgd2hpbGUgKG5ld0hhc2hbaW5kZXhdLmhhc2hWYWx1ZSAhPSAwKSB7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgaWYgKGluZGV4ID09IG5ld1NpemUpCisgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAgICAgYnVja2V0ID0gJm5ld0hhc2hbaW5kZXhdOworICAgIH0KKworICAgIGJ1Y2tldC0+aGFzaFZhbHVlID0gaGFzaFZhbHVlOworICAgIGJ1Y2tldC0+aW5kZXggPSBjdHh0LT5uc05yOworICAgIGN0eHQtPm5zZGItPmhhc2hFbGVtcysrOworICAgIG9sZEluZGV4ID0gSU5UX01BWDsKKworcG9wdWxhdGVfZW50cnk6CisgICAgbnNJbmRleCA9IGN0eHQtPm5zTnI7CisKKyAgICBucyA9ICZjdHh0LT5uc1RhYltuc0luZGV4ICogMl07CisgICAgbnNbMF0gPSBwcmVmaXggPyBwcmVmaXgtPm5hbWUgOiBOVUxMOworICAgIG5zWzFdID0gdXJpLT5uYW1lOworCisgICAgZXh0cmEgPSAmY3R4dC0+bnNkYi0+ZXh0cmFbbnNJbmRleF07CisgICAgZXh0cmEtPnNheERhdGEgPSBzYXhEYXRhOworICAgIGV4dHJhLT5wcmVmaXhIYXNoVmFsdWUgPSBwcmVmaXggPyBwcmVmaXgtPmhhc2hWYWx1ZSA6IDA7CisgICAgZXh0cmEtPnVyaUhhc2hWYWx1ZSA9IHVyaS0+aGFzaFZhbHVlOworICAgIGV4dHJhLT5lbGVtZW50SWQgPSBjdHh0LT5uc2RiLT5lbGVtZW50SWQ7CisgICAgZXh0cmEtPm9sZEluZGV4ID0gb2xkSW5kZXg7CisKKyAgICBjdHh0LT5uc05yKys7CisKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qKgorICogeG1sUGFyc2VyTnNQb3A6CiAgKiBAY3R4dDogYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAbnI6ICB0aGUgbnVtYmVyIHRvIHBvcAogICoKLSAqIFBvcHMgdGhlIHRvcCBAbnIgcGFyc2VyIHByZWZpeC9uYW1lc3BhY2UgZnJvbSB0aGUgbnMgc3RhY2sKKyAqIFBvcHMgdGhlIHRvcCBAbnIgbmFtZXNwYWNlcyBhbmQgcmVzdG9yZXMgdGhlIGhhc2ggdGFibGUuCiAgKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5hbWVzcGFjZXMgcmVtb3ZlZAorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5hbWVzcGFjZXMgcG9wcGVkLgogICovCiBzdGF0aWMgaW50Ci1uc1BvcCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGludCBucikKK3htbFBhcnNlck5zUG9wKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IG5yKQogewogICAgIGludCBpOwogCi0gICAgaWYgKGN0eHQtPm5zVGFiID09IE5VTEwpIHJldHVybigwKTsKLSAgICBpZiAoY3R4dC0+bnNOciA8IG5yKSB7Ci0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUGJtIHBvcHBpbmcgJWQgTlNcbiIsIG5yKTsKLSAgICAgICAgbnIgPSBjdHh0LT5uc05yOwotICAgIH0KLSAgICBpZiAoY3R4dC0+bnNOciA8PSAwKQotICAgICAgICByZXR1cm4gKDApOworICAgIC8qIGFzc2VydChuciA8PSBjdHh0LT5uc05yKTsgKi8KIAotICAgIGZvciAoaSA9IDA7aSA8IG5yO2krKykgewotICAgICAgICAgY3R4dC0+bnNOci0tOwotCSBjdHh0LT5uc1RhYltjdHh0LT5uc05yXSA9IE5VTEw7CisgICAgZm9yIChpID0gY3R4dC0+bnNOciAtIDE7IGkgPj0gY3R4dC0+bnNOciAtIG5yOyBpLS0pIHsKKyAgICAgICAgY29uc3QgeG1sQ2hhciAqcHJlZml4ID0gY3R4dC0+bnNUYWJbaSAqIDJdOworICAgICAgICB4bWxQYXJzZXJOc0V4dHJhICpleHRyYSA9ICZjdHh0LT5uc2RiLT5leHRyYVtpXTsKKworICAgICAgICBpZiAocHJlZml4ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGN0eHQtPm5zZGItPmRlZmF1bHROc0luZGV4ID0gZXh0cmEtPm9sZEluZGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeG1sSGFzaGVkU3RyaW5nIGhwcmVmaXg7CisgICAgICAgICAgICB4bWxQYXJzZXJOc0J1Y2tldCAqYnVja2V0ID0gTlVMTDsKKworICAgICAgICAgICAgaHByZWZpeC5uYW1lID0gcHJlZml4OworICAgICAgICAgICAgaHByZWZpeC5oYXNoVmFsdWUgPSBleHRyYS0+cHJlZml4SGFzaFZhbHVlOworICAgICAgICAgICAgeG1sUGFyc2VyTnNMb29rdXAoY3R4dCwgJmhwcmVmaXgsICZidWNrZXQpOworICAgICAgICAgICAgLyogYXNzZXJ0KGJ1Y2tldCAmJiBidWNrZXQtPmhhc2hWYWx1ZSk7ICovCisgICAgICAgICAgICBidWNrZXQtPmluZGV4ID0gZXh0cmEtPm9sZEluZGV4OworICAgICAgICB9CiAgICAgfQorCisgICAgY3R4dC0+bnNOciAtPSBucjsKICAgICByZXR1cm4obnIpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQKIHhtbEN0eHRHcm93QXR0cnMoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBpbnQgbnIpIHsKICAgICBjb25zdCB4bWxDaGFyICoqYXR0czsKLSAgICBpbnQgKmF0dGFsbG9jczsKKyAgICB1bnNpZ25lZCAqYXR0YWxsb2NzOwogICAgIGludCBtYXhhdHRzOwogCi0gICAgaWYgKGN0eHQtPmF0dHMgPT0gTlVMTCkgewotCW1heGF0dHMgPSA1NTsgLyogYWxsb3cgZm9yIDEwIGF0dHJzIGJ5IGRlZmF1bHQgKi8KLQlhdHRzID0gKGNvbnN0IHhtbENoYXIgKiopCi0JICAgICAgIHhtbE1hbGxvYyhtYXhhdHRzICogc2l6ZW9mKHhtbENoYXIgKikpOwotCWlmIChhdHRzID09IE5VTEwpIGdvdG8gbWVtX2Vycm9yOwotCWN0eHQtPmF0dHMgPSBhdHRzOwotCWF0dGFsbG9jcyA9IChpbnQgKikgeG1sTWFsbG9jKChtYXhhdHRzIC8gNSkgKiBzaXplb2YoaW50KSk7Ci0JaWYgKGF0dGFsbG9jcyA9PSBOVUxMKSBnb3RvIG1lbV9lcnJvcjsKLQljdHh0LT5hdHRhbGxvY3MgPSBhdHRhbGxvY3M7Ci0JY3R4dC0+bWF4YXR0cyA9IG1heGF0dHM7Ci0gICAgfSBlbHNlIGlmIChuciArIDUgPiBjdHh0LT5tYXhhdHRzKSB7Ci0JbWF4YXR0cyA9IChuciArIDUpICogMjsKLQlhdHRzID0gKGNvbnN0IHhtbENoYXIgKiopIHhtbFJlYWxsb2MoKHZvaWQgKikgY3R4dC0+YXR0cywKKyAgICBpZiAobnIgKyA1ID4gY3R4dC0+bWF4YXR0cykgeworCW1heGF0dHMgPSBjdHh0LT5tYXhhdHRzID09IDAgPyA1NSA6IChuciArIDUpICogMjsKKwlhdHRzID0gKGNvbnN0IHhtbENoYXIgKiopIHhtbE1hbGxvYygKIAkJCQkgICAgIG1heGF0dHMgKiBzaXplb2YoY29uc3QgeG1sQ2hhciAqKSk7CiAJaWYgKGF0dHMgPT0gTlVMTCkgZ290byBtZW1fZXJyb3I7CisJYXR0YWxsb2NzID0geG1sUmVhbGxvYyhjdHh0LT5hdHRhbGxvY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heGF0dHMgLyA1KSAqIHNpemVvZihhdHRhbGxvY3NbMF0pKTsKKwlpZiAoYXR0YWxsb2NzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHhtbEZyZWUoYXR0cyk7CisgICAgICAgICAgICBnb3RvIG1lbV9lcnJvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3R4dC0+bWF4YXR0cyA+IDApCisgICAgICAgICAgICBtZW1jcHkoYXR0cywgY3R4dC0+YXR0cywgY3R4dC0+bWF4YXR0cyAqIHNpemVvZihjb25zdCB4bWxDaGFyICopKTsKKyAgICAgICAgeG1sRnJlZShjdHh0LT5hdHRzKTsKIAljdHh0LT5hdHRzID0gYXR0czsKLQlhdHRhbGxvY3MgPSAoaW50ICopIHhtbFJlYWxsb2MoKHZvaWQgKikgY3R4dC0+YXR0YWxsb2NzLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heGF0dHMgLyA1KSAqIHNpemVvZihpbnQpKTsKLQlpZiAoYXR0YWxsb2NzID09IE5VTEwpIGdvdG8gbWVtX2Vycm9yOwogCWN0eHQtPmF0dGFsbG9jcyA9IGF0dGFsbG9jczsKIAljdHh0LT5tYXhhdHRzID0gbWF4YXR0czsKICAgICB9CkBAIC0xNzQ3LDE2ICsxODk4LDE3IEBACiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8ICh2YWx1ZSA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICBpZiAoY3R4dC0+aW5wdXROciA+PSBjdHh0LT5pbnB1dE1heCkgewotICAgICAgICBjdHh0LT5pbnB1dE1heCAqPSAyOwotICAgICAgICBjdHh0LT5pbnB1dFRhYiA9Ci0gICAgICAgICAgICAoeG1sUGFyc2VySW5wdXRQdHIgKikgeG1sUmVhbGxvYyhjdHh0LT5pbnB1dFRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0TWF4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdHh0LT5pbnB1dFRhYlswXSkpOwotICAgICAgICBpZiAoY3R4dC0+aW5wdXRUYWIgPT0gTlVMTCkgeworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGN0eHQtPmlucHV0TWF4ICogMjsKKyAgICAgICAgeG1sUGFyc2VySW5wdXRQdHIgKnRtcDsKKworICAgICAgICB0bXAgPSAoeG1sUGFyc2VySW5wdXRQdHIgKikgeG1sUmVhbGxvYyhjdHh0LT5pbnB1dFRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2l6ZSAqIHNpemVvZigqdG1wKSk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwotCSAgICBjdHh0LT5pbnB1dE1heCAvPSAyOwogICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgIH0KKyAgICAgICAgY3R4dC0+aW5wdXRUYWIgPSB0bXA7CisgICAgICAgIGN0eHQtPmlucHV0TWF4ID0gbmV3U2l6ZTsKICAgICB9CiAgICAgY3R4dC0+aW5wdXRUYWJbY3R4dC0+aW5wdXROcl0gPSB2YWx1ZTsKICAgICBjdHh0LT5pbnB1dCA9IHZhbHVlOwpAQCAtMTc5Myw2ICsxOTQ1LDggQEAKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAdmFsdWU6ICB0aGUgZWxlbWVudCBub2RlCiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuCisgKgogICogUHVzaGVzIGEgbmV3IGVsZW1lbnQgbm9kZSBvbiB0b3Agb2YgdGhlIG5vZGUgc3RhY2sKICAqCiAgKiBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBpbmRleCBpbiB0aGUgc3RhY2sgb3RoZXJ3aXNlCkBAIC0xODMxLDYgKzE5ODUsOCBAQAogICogbm9kZVBvcDoKICAqIEBjdHh0OiBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4KKyAqCiAgKiBQb3BzIHRoZSB0b3AgZWxlbWVudCBub2RlIGZyb20gdGhlIG5vZGUgc3RhY2sKICAqCiAgKiBSZXR1cm5zIHRoZSBub2RlIGp1c3QgcmVtb3ZlZApAQCAtMTk0Miw2ICsyMDk4LDggQEAKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAdmFsdWU6ICB0aGUgZWxlbWVudCBuYW1lCiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuCisgKgogICogUHVzaGVzIGEgbmV3IGVsZW1lbnQgbmFtZSBvbiB0b3Agb2YgdGhlIG5hbWUgc3RhY2sKICAqCiAgKiBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBpbmRleCBpbiB0aGUgc3RhY2sgb3RoZXJ3aXNlCkBAIC0xOTY5LDEwICsyMTI3LDEzIEBACiAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogICAgIHJldHVybiAoLTEpOwogfQorCiAvKioKICAqIG5hbWVQb3A6CiAgKiBAY3R4dDogYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuCisgKgogICogUG9wcyB0aGUgdG9wIGVsZW1lbnQgbmFtZSBmcm9tIHRoZSBuYW1lIHN0YWNrCiAgKgogICogUmV0dXJucyB0aGUgbmFtZSBqdXN0IHJlbW92ZWQKQEAgLTIwODgsNyArMjI0OSw3IEBACiAjZGVmaW5lIFNLSVAodmFsKSBkbyB7CQkJCQkJCVwKICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9ICh2YWwpLGN0eHQtPmlucHV0LT5jb2wrPSh2YWwpOwkJCVwKICAgICBpZiAoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkJCQkJCQlcCi0gICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwkJCVwKKyAgICAgICAgeG1sUGFyc2VyR3JvdyhjdHh0KTsJCQkJCQlcCiAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0tJUEwodmFsKSBkbyB7CQkJCQkJCVwKQEAgLTIxMDAsNDcgKzIyNjEsMTggQEAKIAljdHh0LT5pbnB1dC0+Y3VyKys7CQkJCQkJXAogICAgIH0JCQkJCQkJCQlcCiAgICAgaWYgKCpjdHh0LT5pbnB1dC0+Y3VyID09IDApCQkJCQkJXAotICAgICAgICB4bWxQYXJzZXJJbnB1dEdyb3coY3R4dC0+aW5wdXQsIElOUFVUX0NIVU5LKTsJCQlcCisgICAgICAgIHhtbFBhcnNlckdyb3coY3R4dCk7CQkJCQkJXAogICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNIUklOSyBpZiAoKGN0eHQtPnByb2dyZXNzaXZlID09IDApICYmCQkJCVwKLQkJICAgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSA+IDIgKiBJTlBVVF9DSFVOSykgJiYgXAotCQkgICAoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIgPCAyICogSU5QVVRfQ0hVTkspKSBcCi0JeG1sU0hSSU5LIChjdHh0KTsKKy8qIERvbid0IHNocmluayBwdXNoIHBhcnNlciBidWZmZXIuICovCisjZGVmaW5lIFNIUklOSyBcCisgICAgaWYgKCgoY3R4dC0+cHJvZ3Jlc3NpdmUgPT0gMCkgfHwgKGN0eHQtPmlucHV0TnIgPiAxKSkgJiYgXAorICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlID4gMiAqIElOUFVUX0NIVU5LKSAmJiBcCisJKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyIDwgMiAqIElOUFVUX0NIVU5LKSkgXAorCXhtbFBhcnNlclNocmluayhjdHh0KTsKIAotc3RhdGljIHZvaWQgeG1sU0hSSU5LICh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKLSAgICB4bWxQYXJzZXJJbnB1dFNocmluayhjdHh0LT5pbnB1dCk7Ci0gICAgaWYgKCpjdHh0LT5pbnB1dC0+Y3VyID09IDApCi0gICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotfQotCi0jZGVmaW5lIEdST1cgaWYgKChjdHh0LT5wcm9ncmVzc2l2ZSA9PSAwKSAmJgkJCQlcCi0JCSAoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIgPCBJTlBVVF9DSFVOSykpCVwKLQl4bWxHUk9XIChjdHh0KTsKLQotc3RhdGljIHZvaWQgeG1sR1JPVyAoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7Ci0gICAgcHRyZGlmZl90IGN1ckVuZCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOwotICAgIHB0cmRpZmZfdCBjdXJCYXNlID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOwotCi0gICAgaWYgKCgoY3VyRW5kID4gWE1MX01BWF9MT09LVVBfTElNSVQpIHx8Ci0gICAgICAgICAoY3VyQmFzZSA+IFhNTF9NQVhfTE9PS1VQX0xJTUlUKSkgJiYKLSAgICAgICAgICgoY3R4dC0+aW5wdXQtPmJ1ZikgJiYKLSAgICAgICAgICAoY3R4dC0+aW5wdXQtPmJ1Zi0+cmVhZGNhbGxiYWNrICE9IHhtbElucHV0UmVhZENhbGxiYWNrTm9wKSkgJiYKLSAgICAgICAgKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID09IDApKSB7Ci0gICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsICJIdWdlIGlucHV0IGxvb2t1cCIpOwotICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOwotCXJldHVybjsKLSAgICB9Ci0gICAgeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSyk7Ci0gICAgaWYgKChjdHh0LT5pbnB1dC0+Y3VyID4gY3R4dC0+aW5wdXQtPmVuZCkgfHwKLSAgICAgICAgKGN0eHQtPmlucHV0LT5jdXIgPCBjdHh0LT5pbnB1dC0+YmFzZSkpIHsKLSAgICAgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKLSAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwgImN1ciBpbmRleCBvdXQgb2YgYm91bmQiKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmICgoY3R4dC0+aW5wdXQtPmN1ciAhPSBOVUxMKSAmJiAoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkpCi0gICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotfQorI2RlZmluZSBHUk9XIGlmIChjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1ciA8IElOUFVUX0NIVU5LKQlcCisJeG1sUGFyc2VyR3JvdyhjdHh0KTsKIAogI2RlZmluZSBTS0lQX0JMQU5LUyB4bWxTa2lwQmxhbmtDaGFycyhjdHh0KQogCkBAIC0yMTUwLDcgKzIyODIsNyBAQAogCWN0eHQtPmlucHV0LT5jb2wrKzsJCQkJCQlcCiAJY3R4dC0+aW5wdXQtPmN1cisrOwkJCQkJCVwKIAlpZiAoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkJCQkJCVwKLQkgICAgeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSyk7CQlcCisJICAgIHhtbFBhcnNlckdyb3coY3R4dCk7CQkJCQkJXAogICAgIH0KIAogI2RlZmluZSBORVhUTChsKSBkbyB7CQkJCQkJCVwKQEAgLTIxNjMsMTcgKzIyOTUsMTYgQEAKICNkZWZpbmUgQ1VSX0NIQVIobCkgeG1sQ3VycmVudENoYXIoY3R4dCwgJmwpCiAjZGVmaW5lIENVUl9TQ0hBUihzLCBsKSB4bWxTdHJpbmdDdXJyZW50Q2hhcihjdHh0LCBzLCAmbCkKIAotI2RlZmluZSBDT1BZX0JVRihsLGIsaSx2KQkJCQkJCVwKLSAgICBpZiAobCA9PSAxKSBiW2krK10gPSAoeG1sQ2hhcikgdjsJCQkJCVwKKyNkZWZpbmUgQ09QWV9CVUYoYiwgaSwgdikJCQkJCQlcCisgICAgaWYgKHYgPCAweDgwKSBiW2krK10gPSB2OwkJCQkJCVwKICAgICBlbHNlIGkgKz0geG1sQ29weUNoYXJNdWx0aUJ5dGUoJmJbaV0sdikKIAotI2RlZmluZSBDVVJfQ09OU1VNRUQgXAotICAgIChjdHh0LT5pbnB1dC0+Y29uc3VtZWQgKyAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKSkKLQogLyoqCiAgKiB4bWxTa2lwQmxhbmtDaGFyczoKICAqIEBjdHh0OiAgdGhlIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLgorICoKICAqIHNraXAgYWxsIGJsYW5rcyBjaGFyYWN0ZXIgZm91bmQgYXQgdGhhdCBwb2ludCBpbiB0aGUgaW5wdXQgc3RyZWFtcy4KICAqIEl0IHBvcHMgdXAgZmluaXNoZWQgZW50aXRpZXMgaW4gdGhlIHByb2Nlc3MgaWYgYWxsb3dhYmxlIGF0IHRoYXQgcG9pbnQuCiAgKgpAQCAtMjIwNiw3ICsyMzM3LDcgQEAKIAkJcmVzKys7CiAJICAgIGlmICgqY3VyID09IDApIHsKIAkJY3R4dC0+aW5wdXQtPmN1ciA9IGN1cjsKLQkJeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSyk7CisJCXhtbFBhcnNlckdyb3coY3R4dCk7CiAJCWN1ciA9IGN0eHQtPmlucHV0LT5jdXI7CiAJICAgIH0KIAl9CkBAIC0yMjE0LDcgKzIzNDUsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGludCBleHBhbmRQRSA9ICgoY3R4dC0+ZXh0ZXJuYWwgIT0gMCkgfHwgKGN0eHQtPmlucHV0TnIgIT0gMSkpOwogCi0Jd2hpbGUgKDEpIHsKKwl3aGlsZSAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikgewogICAgICAgICAgICAgaWYgKElTX0JMQU5LX0NIKENVUikpIHsgLyogQ0hFQ0tFRCB0c3RibGFua3MueG1sICovCiAJCU5FWFQ7CiAJICAgIH0gZWxzZSBpZiAoQ1VSID09ICclJykgewpAQCAtMjIyNSw4ICsyMzU2LDMwIEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCSAgICAgICAgeG1sUGFyc2VQRVJlZmVyZW5jZShjdHh0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoQ1VSID09IDApIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbnN1bWVkOworICAgICAgICAgICAgICAgIHhtbEVudGl0eVB0ciBlbnQ7CisKICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5wdXROciA8PSAxKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNvbnN1bWVkID0gY3R4dC0+aW5wdXQtPmNvbnN1bWVkOworICAgICAgICAgICAgICAgIHhtbFNhdHVyYXRlZEFkZFNpemVUKCZjb25zdW1lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2UpOworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBZGQgdG8gc2l6ZWVudGl0aWVzIHdoZW4gcGFyc2luZyBhbiBleHRlcm5hbCBlbnRpdHkKKyAgICAgICAgICAgICAgICAgKiBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZW50ID0gY3R4dC0+aW5wdXQtPmVudGl0eTsKKyAgICAgICAgICAgICAgICBpZiAoKGVudC0+ZXR5cGUgPT0gWE1MX0VYVEVSTkFMX1BBUkFNRVRFUl9FTlRJVFkpICYmCisgICAgICAgICAgICAgICAgICAgICgoZW50LT5mbGFncyAmIFhNTF9FTlRfUEFSU0VEKSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICBlbnQtPmZsYWdzIHw9IFhNTF9FTlRfUEFSU0VEOworCisgICAgICAgICAgICAgICAgICAgIHhtbFNhdHVyYXRlZEFkZCgmY3R4dC0+c2l6ZWVudGl0aWVzLCBjb25zdW1lZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgY29uc3VtZWQpOworCiAgICAgICAgICAgICAgICAgeG1sUG9wSW5wdXQoY3R4dCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI2Myw2ICsyNDE2LDggQEAKICAqLwogeG1sQ2hhcgogeG1sUG9wSW5wdXQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisKICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmlucHV0TnIgPD0gMSkpIHJldHVybigwKTsKICAgICBpZiAoeG1sUGFyc2VyRGVidWdFbnRpdGllcykKIAl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKQEAgLTIyNzEsOSArMjQyNiwxMiBAQAogICAgICAgICAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikpCiAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICJVbmZpbmlzaGVkIGVudGl0eSBvdXRzaWRlIHRoZSBEVEQiKTsKLSAgICB4bWxGcmVlSW5wdXRTdHJlYW0oaW5wdXRQb3AoY3R4dCkpOworICAgIGlucHV0ID0gaW5wdXRQb3AoY3R4dCk7CisgICAgaWYgKGlucHV0LT5lbnRpdHkgIT0gTlVMTCkKKyAgICAgICAgaW5wdXQtPmVudGl0eS0+ZmxhZ3MgJj0gflhNTF9FTlRfRVhQQU5ESU5HOworICAgIHhtbEZyZWVJbnB1dFN0cmVhbShpbnB1dCk7CiAgICAgaWYgKCpjdHh0LT5pbnB1dC0+Y3VyID09IDApCi0gICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOworICAgICAgICB4bWxQYXJzZXJHcm93KGN0eHQpOwogICAgIHJldHVybihDVVIpOwogfQogCkBAIC0yMzAwLDcgKzI0NTgsNyBAQAogCQkiUHVzaGluZyBpbnB1dCAlZCA6ICUuMzBzXG4iLCBjdHh0LT5pbnB1dE5yKzEsIGlucHV0LT5jdXIpOwogICAgIH0KICAgICBpZiAoKChjdHh0LT5pbnB1dE5yID4gNDApICYmICgoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9IVUdFKSA9PSAwKSkgfHwKLSAgICAgICAgKGN0eHQtPmlucHV0TnIgPiAxMDI0KSkgeworICAgICAgICAoY3R4dC0+aW5wdXROciA+IDEwMCkpIHsKICAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9FTlRJVFlfTE9PUCwgTlVMTCk7CiAgICAgICAgIHdoaWxlIChjdHh0LT5pbnB1dE5yID4gMSkKICAgICAgICAgICAgIHhtbEZyZWVJbnB1dFN0cmVhbShpbnB1dFBvcChjdHh0KSk7CkBAIC0yMzE3LDcgKzI0NzUsOSBAQAogICogeG1sUGFyc2VDaGFyUmVmOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCi0gKiBwYXJzZSBSZWZlcmVuY2UgZGVjbGFyYXRpb25zCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKKyAqIFBhcnNlIGEgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBBbHdheXMgY29uc3VtZXMgJyYnLgogICoKICAqIFs2Nl0gQ2hhclJlZiA6Oj0gJyYjJyBbMC05XSsgJzsnIHwKICAqICAgICAgICAgICAgICAgICAgJyYjeCcgWzAtOWEtZkEtRl0rICc7JwpAQCAtMjM5OCw2ICsyNTU4LDggQEAKIAkgICAgY3R4dC0+aW5wdXQtPmN1cisrOwogCX0KICAgICB9IGVsc2UgeworICAgICAgICBpZiAoUkFXID09ICcmJykKKyAgICAgICAgICAgIFNLSVAoMSk7CiAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSUkVGLCBOVUxMKTsKICAgICB9CiAKQEAgLTI1MTgsNiArMjY4MCw4IEBACiAgKiB4bWxQYXJzZXJIYW5kbGVQRVJlZmVyZW5jZToKICAqIEBjdHh0OiAgdGhlIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvIG5vdCB1c2UuCisgKgogICogWzY5XSBQRVJlZmVyZW5jZSA6Oj0gJyUnIE5hbWUgJzsnCiAgKgogICogWyBXRkM6IE5vIFJlY3Vyc2lvbiBdCkBAIC0yNTYyLDYgKzI3MjYsNyBAQAogCSAgICByZXR1cm47CiAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9QUk9MT0c6CiAJY2FzZSBYTUxfUEFSU0VSX1NUQVJUOgorCWNhc2UgWE1MX1BBUlNFUl9YTUxfREVDTDoKIAljYXNlIFhNTF9QQVJTRVJfTUlTQzoKIAkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9QRVJFRl9JTl9QUk9MT0csIE5VTEwpOwogCSAgICByZXR1cm47CkBAIC0yNjIxLDcgKzI3ODYsNyBAQAogfQogCiAvKioKLSAqIHhtbFN0cmluZ0xlbkRlY29kZUVudGl0aWVzOgorICogeG1sU3RyaW5nRGVjb2RlRW50aXRpZXNJbnQ6CiAgKiBAY3R4dDogIHRoZSBwYXJzZXIgY29udGV4dAogICogQHN0cjogIHRoZSBpbnB1dCBzdHJpbmcKICAqIEBsZW46IHRoZSBzdHJpbmcgbGVuZ3RoCkBAIC0yNjI5LDE5ICsyNzk0LDEyIEBACiAgKiBAZW5kOiAgYW4gZW5kIG1hcmtlciB4bWxDaGFyLCAwIGlmIG5vbmUKICAqIEBlbmQyOiAgYW4gZW5kIG1hcmtlciB4bWxDaGFyLCAwIGlmIG5vbmUKICAqIEBlbmQzOiAgYW4gZW5kIG1hcmtlciB4bWxDaGFyLCAwIGlmIG5vbmUKLSAqCi0gKiBUYWtlcyBhIGVudGl0eSBzdHJpbmcgY29udGVudCBhbmQgcHJvY2VzcyB0byBkbyB0aGUgYWRlcXVhdGUgc3Vic3RpdHV0aW9ucy4KLSAqCi0gKiBbNjddIFJlZmVyZW5jZSA6Oj0gRW50aXR5UmVmIHwgQ2hhclJlZgotICoKLSAqIFs2OV0gUEVSZWZlcmVuY2UgOjo9ICclJyBOYW1lICc7JwotICoKLSAqIFJldHVybnMgQSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhlIHN1YnN0aXR1dGlvbiBkb25lLiBUaGUgY2FsbGVyCi0gKiAgICAgIG11c3QgZGVhbGxvY2F0ZSBpdCAhCisgKiBAY2hlY2s6ICB3aGV0aGVyIHRvIHBlcmZvcm0gZW50aXR5IGNoZWNrcwogICovCi14bWxDaGFyICoKLXhtbFN0cmluZ0xlbkRlY29kZUVudGl0aWVzKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqc3RyLCBpbnQgbGVuLAotCQkgICAgICBpbnQgd2hhdCwgeG1sQ2hhciBlbmQsIHhtbENoYXIgIGVuZDIsIHhtbENoYXIgZW5kMykgeworc3RhdGljIHhtbENoYXIgKgoreG1sU3RyaW5nRGVjb2RlRW50aXRpZXNJbnQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4sCisJCSAgICAgICAgICAgaW50IHdoYXQsIHhtbENoYXIgZW5kLCB4bWxDaGFyICBlbmQyLCB4bWxDaGFyIGVuZDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hlY2spIHsKICAgICB4bWxDaGFyICpidWZmZXIgPSBOVUxMOwogICAgIHNpemVfdCBidWZmZXJfc2l6ZSA9IDA7CiAgICAgc2l6ZV90IG5iY2hhcnMgPSAwOwpAQCAtMjY1MiwxNCArMjgxMCwxNSBAQAogICAgIHhtbEVudGl0eVB0ciBlbnQ7CiAgICAgaW50IGMsbDsKIAotICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoc3RyID09IE5VTEwpIHx8IChsZW4gPCAwKSkKLQlyZXR1cm4oTlVMTCk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgbGFzdCA9IHN0ciArIGxlbjsKIAogICAgIGlmICgoKGN0eHQtPmRlcHRoID4gNDApICYmCiAgICAgICAgICAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfSFVHRSkgPT0gMCkpIHx8Ci0JKGN0eHQtPmRlcHRoID4gMTAyNCkpIHsKLQl4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VOVElUWV9MT09QLCBOVUxMKTsKKwkoY3R4dC0+ZGVwdGggPiAxMDApKSB7CisJeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9FTlRJVFlfTE9PUCwKKyAgICAgICAgICAgICAgICAgICAgICAgIk1heGltdW0gZW50aXR5IG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yNjg3LDcgKzI4NDYsNyBAQAogCSAgICBpbnQgdmFsID0geG1sUGFyc2VTdHJpbmdDaGFyUmVmKGN0eHQsICZzdHIpOwogCSAgICBpZiAodmFsID09IDApCiAgICAgICAgICAgICAgICAgZ290byBpbnRfZXJyb3I7Ci0JICAgIENPUFlfQlVGKDAsYnVmZmVyLG5iY2hhcnMsdmFsKTsKKwkgICAgQ09QWV9CVUYoYnVmZmVyLCBuYmNoYXJzLCB2YWwpOwogCSAgICBpZiAobmJjaGFycyArIFhNTF9QQVJTRVJfQlVGRkVSX1NJWkUgPiBidWZmZXJfc2l6ZSkgewogCSAgICAgICAgZ3Jvd0J1ZmZlcihidWZmZXIsIFhNTF9QQVJTRVJfQlVGRkVSX1NJWkUpOwogCSAgICB9CkBAIC0yNjk3LDEzICsyODU2LDEwIEBACiAJCQkiU3RyaW5nIGRlY29kaW5nIEVudGl0eSBSZWZlcmVuY2U6ICUuMzBzXG4iLAogCQkJc3RyKTsKIAkgICAgZW50ID0geG1sUGFyc2VTdHJpbmdFbnRpdHlSZWYoY3R4dCwgJnN0cik7Ci0JICAgIHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIDAsIGVudCwgMCk7Ci0JICAgIGlmIChlbnQgIT0gTlVMTCkKLQkgICAgICAgIGN0eHQtPm5iZW50aXRpZXMgKz0gZW50LT5jaGVja2VkIC8gMjsKIAkgICAgaWYgKChlbnQgIT0gTlVMTCkgJiYKIAkJKGVudC0+ZXR5cGUgPT0gWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZKSkgewogCQlpZiAoZW50LT5jb250ZW50ICE9IE5VTEwpIHsKLQkJICAgIENPUFlfQlVGKDAsYnVmZmVyLG5iY2hhcnMsZW50LT5jb250ZW50WzBdKTsKKwkJICAgIENPUFlfQlVGKGJ1ZmZlciwgbmJjaGFycywgZW50LT5jb250ZW50WzBdKTsKIAkJICAgIGlmIChuYmNoYXJzICsgWE1MX1BBUlNFUl9CVUZGRVJfU0laRSA+IGJ1ZmZlcl9zaXplKSB7CiAJCQlncm93QnVmZmVyKGJ1ZmZlciwgWE1MX1BBUlNFUl9CVUZGRVJfU0laRSk7CiAJCSAgICB9CkBAIC0yNzEzLDEwICsyODY5LDIzIEBACiAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50X2Vycm9yOwogCQl9CiAJICAgIH0gZWxzZSBpZiAoKGVudCAhPSBOVUxMKSAmJiAoZW50LT5jb250ZW50ICE9IE5VTEwpKSB7CisJICAgICAgICBpZiAoKGNoZWNrKSAmJiAoeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgZW50LT5sZW5ndGgpKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBpbnRfZXJyb3I7CisKKyAgICAgICAgICAgICAgICBpZiAoZW50LT5mbGFncyAmIFhNTF9FTlRfRVhQQU5ESU5HKSB7CisJICAgICAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9FTlRJVFlfTE9PUCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgIGVudC0+Y29udGVudFswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50X2Vycm9yOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9FWFBBTkRJTkc7CiAJCWN0eHQtPmRlcHRoKys7Ci0JCXJlcCA9IHhtbFN0cmluZ0RlY29kZUVudGl0aWVzKGN0eHQsIGVudC0+Y29udGVudCwgd2hhdCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKTsKKwkJcmVwID0geG1sU3RyaW5nRGVjb2RlRW50aXRpZXNJbnQoY3R4dCwgZW50LT5jb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgZW50LT5sZW5ndGgsIHdoYXQsIDAsIDAsIDAsIGNoZWNrKTsKIAkJY3R4dC0+ZGVwdGgtLTsKKyAgICAgICAgICAgICAgICBlbnQtPmZsYWdzICY9IH5YTUxfRU5UX0VYUEFORElORzsKKwogCQlpZiAocmVwID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgZW50LT5jb250ZW50WzBdID0gMDsKICAgICAgICAgICAgICAgICAgICAgZ290byBpbnRfZXJyb3I7CkBAIC0yNzI2LDggKzI4OTUsNiBAQAogICAgICAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCAhPSAwKSB7IC8qIG5vbiBpbnB1dCBjb25zdW1pbmcgbG9vcCAqLwogICAgICAgICAgICAgICAgICAgICBidWZmZXJbbmJjaGFycysrXSA9ICpjdXJyZW50Kys7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuYmNoYXJzICsgWE1MX1BBUlNFUl9CVUZGRVJfU0laRSA+IGJ1ZmZlcl9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgbmJjaGFycywgZW50LCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGludF9lcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3dCdWZmZXIoYnVmZmVyLCBYTUxfUEFSU0VSX0JVRkZFUl9TSVpFKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI3NTAsOSArMjkxNyw2IEBACiAJCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAogCQkJIlN0cmluZyBkZWNvZGluZyBQRSBSZWZlcmVuY2U6ICUuMzBzXG4iLCBzdHIpOwogCSAgICBlbnQgPSB4bWxQYXJzZVN0cmluZ1BFUmVmZXJlbmNlKGN0eHQsICZzdHIpOwotCSAgICB4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCAwLCBlbnQsIDApOwotCSAgICBpZiAoZW50ICE9IE5VTEwpCi0JICAgICAgICBjdHh0LT5uYmVudGl0aWVzICs9IGVudC0+Y2hlY2tlZCAvIDI7CiAJICAgIGlmIChlbnQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGlmIChlbnQtPmNvbnRlbnQgPT0gTlVMTCkgewogCQkgICAgLyoKQEAgLTI3NzEsMTAgKzI5MzUsMjUgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgIGVudC0+bmFtZSwgTlVMTCk7CiAJCSAgICB9CiAJCX0KKworCSAgICAgICAgaWYgKChjaGVjaykgJiYgKHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIGVudC0+bGVuZ3RoKSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50X2Vycm9yOworCisgICAgICAgICAgICAgICAgaWYgKGVudC0+ZmxhZ3MgJiBYTUxfRU5UX0VYUEFORElORykgeworCSAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRU5USVRZX0xPT1AsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoZW50LT5jb250ZW50ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnQtPmNvbnRlbnRbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICBnb3RvIGludF9lcnJvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBlbnQtPmZsYWdzIHw9IFhNTF9FTlRfRVhQQU5ESU5HOwogCQljdHh0LT5kZXB0aCsrOwotCQlyZXAgPSB4bWxTdHJpbmdEZWNvZGVFbnRpdGllcyhjdHh0LCBlbnQtPmNvbnRlbnQsIHdoYXQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCk7CisJCXJlcCA9IHhtbFN0cmluZ0RlY29kZUVudGl0aWVzSW50KGN0eHQsIGVudC0+Y29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+bGVuZ3RoLCB3aGF0LCAwLCAwLCAwLCBjaGVjayk7CiAJCWN0eHQtPmRlcHRoLS07CisgICAgICAgICAgICAgICAgZW50LT5mbGFncyAmPSB+WE1MX0VOVF9FWFBBTkRJTkc7CisKIAkJaWYgKHJlcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbnQtPmNvbnRlbnQgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+Y29udGVudFswXSA9IDA7CkBAIC0yNzg0LDggKzI5NjMsNiBAQAogICAgICAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCAhPSAwKSB7IC8qIG5vbiBpbnB1dCBjb25zdW1pbmcgbG9vcCAqLwogICAgICAgICAgICAgICAgICAgICBidWZmZXJbbmJjaGFycysrXSA9ICpjdXJyZW50Kys7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuYmNoYXJzICsgWE1MX1BBUlNFUl9CVUZGRVJfU0laRSA+IGJ1ZmZlcl9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgbmJjaGFycywgZW50LCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGludF9lcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3dCdWZmZXIoYnVmZmVyLCBYTUxfUEFSU0VSX0JVRkZFUl9TSVpFKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI3OTMsNyArMjk3MCw3IEBACiAgICAgICAgICAgICAgICAgcmVwID0gTlVMTDsKIAkgICAgfQogCX0gZWxzZSB7Ci0JICAgIENPUFlfQlVGKGwsYnVmZmVyLG5iY2hhcnMsYyk7CisJICAgIENPUFlfQlVGKGJ1ZmZlciwgbmJjaGFycywgYyk7CiAJICAgIHN0ciArPSBsOwogCSAgICBpZiAobmJjaGFycyArIFhNTF9QQVJTRVJfQlVGRkVSX1NJWkUgPiBidWZmZXJfc2l6ZSkgewogCSAgICAgICAgZ3Jvd0J1ZmZlcihidWZmZXIsIFhNTF9QQVJTRVJfQlVGRkVSX1NJWkUpOwpAQCAtMjgxOCw2ICsyOTk1LDM3IEBACiB9CiAKIC8qKgorICogeG1sU3RyaW5nTGVuRGVjb2RlRW50aXRpZXM6CisgKiBAY3R4dDogIHRoZSBwYXJzZXIgY29udGV4dAorICogQHN0cjogIHRoZSBpbnB1dCBzdHJpbmcKKyAqIEBsZW46IHRoZSBzdHJpbmcgbGVuZ3RoCisgKiBAd2hhdDogIGNvbWJpbmF0aW9uIG9mIFhNTF9TVUJTVElUVVRFX1JFRiBhbmQgWE1MX1NVQlNUSVRVVEVfUEVSRUYKKyAqIEBlbmQ6ICBhbiBlbmQgbWFya2VyIHhtbENoYXIsIDAgaWYgbm9uZQorICogQGVuZDI6ICBhbiBlbmQgbWFya2VyIHhtbENoYXIsIDAgaWYgbm9uZQorICogQGVuZDM6ICBhbiBlbmQgbWFya2VyIHhtbENoYXIsIDAgaWYgbm9uZQorICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgorICogVGFrZXMgYSBlbnRpdHkgc3RyaW5nIGNvbnRlbnQgYW5kIHByb2Nlc3MgdG8gZG8gdGhlIGFkZXF1YXRlIHN1YnN0aXR1dGlvbnMuCisgKgorICogWzY3XSBSZWZlcmVuY2UgOjo9IEVudGl0eVJlZiB8IENoYXJSZWYKKyAqCisgKiBbNjldIFBFUmVmZXJlbmNlIDo6PSAnJScgTmFtZSAnOycKKyAqCisgKiBSZXR1cm5zIEEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyB3aXRoIHRoZSBzdWJzdGl0dXRpb24gZG9uZS4gVGhlIGNhbGxlcgorICogICAgICBtdXN0IGRlYWxsb2NhdGUgaXQgIQorICovCit4bWxDaGFyICoKK3htbFN0cmluZ0xlbkRlY29kZUVudGl0aWVzKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqc3RyLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoYXQsIHhtbENoYXIgZW5kLCB4bWxDaGFyICBlbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhciBlbmQzKSB7CisgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChzdHIgPT0gTlVMTCkgfHwgKGxlbiA8IDApKQorICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgcmV0dXJuKHhtbFN0cmluZ0RlY29kZUVudGl0aWVzSW50KGN0eHQsIHN0ciwgbGVuLCB3aGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsIGVuZDIsIGVuZDMsIDApKTsKK30KKworLyoqCiAgKiB4bWxTdHJpbmdEZWNvZGVFbnRpdGllczoKICAqIEBjdHh0OiAgdGhlIHBhcnNlciBjb250ZXh0CiAgKiBAc3RyOiAgdGhlIGlucHV0IHN0cmluZwpAQCAtMjgyNiw2ICszMDM0LDggQEAKICAqIEBlbmQyOiAgYW4gZW5kIG1hcmtlciB4bWxDaGFyLCAwIGlmIG5vbmUKICAqIEBlbmQzOiAgYW4gZW5kIG1hcmtlciB4bWxDaGFyLCAwIGlmIG5vbmUKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIFRha2VzIGEgZW50aXR5IHN0cmluZyBjb250ZW50IGFuZCBwcm9jZXNzIHRvIGRvIHRoZSBhZGVxdWF0ZSBzdWJzdGl0dXRpb25zLgogICoKICAqIFs2N10gUmVmZXJlbmNlIDo6PSBFbnRpdHlSZWYgfCBDaGFyUmVmCkBAIC0yODM5LDggKzMwNDksOCBAQAogeG1sU3RyaW5nRGVjb2RlRW50aXRpZXMoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpzdHIsIGludCB3aGF0LAogCQkgICAgICAgIHhtbENoYXIgZW5kLCB4bWxDaGFyICBlbmQyLCB4bWxDaGFyIGVuZDMpIHsKICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKHN0ciA9PSBOVUxMKSkgcmV0dXJuKE5VTEwpOwotICAgIHJldHVybih4bWxTdHJpbmdMZW5EZWNvZGVFbnRpdGllcyhjdHh0LCBzdHIsIHhtbFN0cmxlbihzdHIpLCB3aGF0LAotICAgICAgICAgICBlbmQsIGVuZDIsIGVuZDMpKTsKKyAgICByZXR1cm4oeG1sU3RyaW5nRGVjb2RlRW50aXRpZXNJbnQoY3R4dCwgc3RyLCB4bWxTdHJsZW4oc3RyKSwgd2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLCBlbmQyLCBlbmQzLCAwKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5ODAsNyArMzE5MCw3IEBACiAJICovCiAJbWF4ID0gbGVuICogMjsKIAotCWJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhtYXggKiBzaXplb2YoeG1sQ2hhcikpOworCWJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhtYXgpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewogCSAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CiAJICAgIHJldHVybihOVUxMKTsKQEAgLTI5OTEsOCArMzIwMSw3IEBACiAJICAgICAgICB4bWxDaGFyICp0bXA7CiAKIAkJbWF4ICo9IDI7Ci0JCXRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmZmVyLAotCQkJCQkJbWF4ICogc2l6ZW9mKHhtbENoYXIpKTsKKwkJdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWZmZXIsIG1heCk7CiAJCWlmICh0bXAgPT0gTlVMTCkgewogCQkgICAgeG1sRnJlZShidWZmZXIpOwogCQkgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwpAQCAtMzA1OSw3ICszMjY4LDcgQEAKIAkgICAgICovCiAJICAgIG1heCA9IGxlbiAqIDI7CiAKLQkgICAgYnVmZmVyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKG1heCAqIHNpemVvZih4bWxDaGFyKSk7CisJICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhtYXgpOwogCSAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkgICAgICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAkJcmV0dXJuKE5VTEwpOwpAQCAtMzA3MCw4ICszMjc5LDcgQEAKIAkJICAgIHhtbENoYXIgKnRtcDsKIAogCQkgICAgbWF4ICo9IDI7Ci0JCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1ZmZlciwKLQkJCQkJCSAgICBtYXggKiBzaXplb2YoeG1sQ2hhcikpOworCQkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWZmZXIsIG1heCk7CiAJCSAgICBpZiAodG1wID09IE5VTEwpIHsKIAkJCXhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAkJCXhtbEZyZWUoYnVmZmVyKTsKQEAgLTMxMDcsMTQgKzMzMTUsNiBAQAogICoJUm91dGluZXMgdG8gcGFyc2UgTmFtZSwgTkNOYW1lIGFuZCBObVRva2VuCQkJKgogICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIERFQlVHCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBuYlBhcnNlTmFtZSA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBuYlBhcnNlTm1Ub2tlbiA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBuYlBhcnNlTkNOYW1lID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5iUGFyc2VOQ05hbWVDb21wbGV4ID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5iUGFyc2VOYW1lQ29tcGxleCA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBuYlBhcnNlU3RyaW5nTmFtZSA9IDA7Ci0jZW5kaWYKIAogLyoKICAqIFRoZSB0d28gZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcmVsYXRlZCB0byB0aGUgY2hhbmdlIG9mIGFjY2VwdGVkCkBAIC0zMjAzLDIxICszNDAzLDEzIEBACiB4bWxQYXJzZU5hbWVDb21wbGV4KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgewogICAgIGludCBsZW4gPSAwLCBsOwogICAgIGludCBjOwotICAgIGludCBjb3VudCA9IDA7CiAgICAgaW50IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9URVhUX0xFTkdUSCA6CiAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfTkFNRV9MRU5HVEg7CiAKLSNpZmRlZiBERUJVRwotICAgIG5iUGFyc2VOYW1lQ29tcGxleCsrOwotI2VuZGlmCi0KICAgICAvKgogICAgICAqIEhhbmRsZXIgZm9yIG1vcmUgY29tcGxleCBjYXNlcwogICAgICAqLwotICAgIEdST1c7Ci0gICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgIHJldHVybihOVUxMKTsKICAgICBjID0gQ1VSX0NIQVIobCk7CiAgICAgaWYgKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX09MRDEwKSA9PSAwKSB7CiAgICAgICAgIC8qCkBAIC0zMjY2LDEyICszNDU4LDYgQEAKIAkgICAgICAgICgoYyA+PSAweEZERjApICYmIChjIDw9IDB4RkZGRCkpIHx8CiAJICAgICAgICAoKGMgPj0gMHgxMDAwMCkgJiYgKGMgPD0gMHhFRkZGRikpCiAJCSkpIHsKLQkgICAgaWYgKGNvdW50KysgPiBYTUxfUEFSU0VSX0NIVU5LX1NJWkUpIHsKLQkJY291bnQgPSAwOwotCQlHUk9XOwotICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7Ci0JICAgIH0KICAgICAgICAgICAgIGlmIChsZW4gPD0gSU5UX01BWCAtIGwpCiAJICAgICAgICBsZW4gKz0gbDsKIAkgICAgTkVYVEwobCk7CkBAIC0zMjkzLDE4ICszNDc5LDE0IEBACiAJCShjID09ICdfJykgfHwgKGMgPT0gJzonKSB8fAogCQkoSVNfQ09NQklOSU5HKGMpKSB8fAogCQkoSVNfRVhURU5ERVIoYykpKSkgewotCSAgICBpZiAoY291bnQrKyA+IFhNTF9QQVJTRVJfQ0hVTktfU0laRSkgewotCQljb3VudCA9IDA7Ci0JCUdST1c7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKLQkgICAgfQogICAgICAgICAgICAgaWYgKGxlbiA8PSBJTlRfTUFYIC0gbCkKIAkgICAgICAgIGxlbiArPSBsOwogCSAgICBORVhUTChsKTsKIAkgICAgYyA9IENVUl9DSEFSKGwpOwogCX0KICAgICB9CisgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgIHJldHVybihOVUxMKTsKICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTkFNRV9UT09fTE9ORywgIk5hbWUiKTsKICAgICAgICAgcmV0dXJuKE5VTEwpOwpAQCAtMzMyOCw2ICszNTEwLDggQEAKICAqIHhtbFBhcnNlTmFtZToKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgbmFtZS4KICAqCiAgKiBbNF0gTmFtZUNoYXIgOjo9IExldHRlciB8IERpZ2l0IHwgJy4nIHwgJy0nIHwgJ18nIHwgJzonIHwKQEAgLTMzNTAsMTAgKzM1MzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICBYTUxfTUFYX05BTUVfTEVOR1RIOwogCiAgICAgR1JPVzsKLQotI2lmZGVmIERFQlVHCi0gICAgbmJQYXJzZU5hbWUrKzsKLSNlbmRpZgorICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICByZXR1cm4oTlVMTCk7CiAKICAgICAvKgogICAgICAqIEFjY2VsZXJhdG9yIGZvciBzaW1wbGUgQVNDSUkgbmFtZXMKQEAgLTMzODcsNjMgKzM1NjksNDQgQEAKICAgICByZXR1cm4oeG1sUGFyc2VOYW1lQ29tcGxleChjdHh0KSk7CiB9CiAKLXN0YXRpYyBjb25zdCB4bWxDaGFyICoKK3N0YXRpYyB4bWxIYXNoZWRTdHJpbmcKIHhtbFBhcnNlTkNOYW1lQ29tcGxleCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICB4bWxIYXNoZWRTdHJpbmcgcmV0OwogICAgIGludCBsZW4gPSAwLCBsOwogICAgIGludCBjOwotICAgIGludCBjb3VudCA9IDA7CiAgICAgaW50IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9URVhUX0xFTkdUSCA6CiAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfTkFNRV9MRU5HVEg7CiAgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24gPSAwOwogCi0jaWZkZWYgREVCVUcKLSAgICBuYlBhcnNlTkNOYW1lQ29tcGxleCsrOwotI2VuZGlmCisgICAgcmV0Lm5hbWUgPSBOVUxMOworICAgIHJldC5oYXNoVmFsdWUgPSAwOwogCiAgICAgLyoKICAgICAgKiBIYW5kbGVyIGZvciBtb3JlIGNvbXBsZXggY2FzZXMKICAgICAgKi8KLSAgICBHUk9XOwogICAgIHN0YXJ0UG9zaXRpb24gPSBDVVJfUFRSIC0gQkFTRV9QVFI7CiAgICAgYyA9IENVUl9DSEFSKGwpOwogICAgIGlmICgoYyA9PSAnICcpIHx8IChjID09ICc+JykgfHwgKGMgPT0gJy8nKSB8fCAvKiBhY2NlbGVyYXRvcnMgKi8KIAkoIXhtbElzTmFtZVN0YXJ0Q2hhcihjdHh0LCBjKSB8fCAoYyA9PSAnOicpKSkgewotCXJldHVybihOVUxMKTsKKwlyZXR1cm4ocmV0KTsKICAgICB9CiAKICAgICB3aGlsZSAoKGMgIT0gJyAnKSAmJiAoYyAhPSAnPicpICYmIChjICE9ICcvJykgJiYgLyogdGVzdCBiaWduYW1lLnhtbCAqLwogCSAgICh4bWxJc05hbWVDaGFyKGN0eHQsIGMpICYmIChjICE9ICc6JykpKSB7Ci0JaWYgKGNvdW50KysgPiBYTUxfUEFSU0VSX0NIVU5LX1NJWkUpIHsKLQkgICAgY291bnQgPSAwOwotCSAgICBHUk9XOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotCX0KICAgICAgICAgaWYgKGxlbiA8PSBJTlRfTUFYIC0gbCkKIAkgICAgbGVuICs9IGw7CiAJTkVYVEwobCk7CiAJYyA9IENVUl9DSEFSKGwpOwotCWlmIChjID09IDApIHsKLQkgICAgY291bnQgPSAwOwotCSAgICAvKgotCSAgICAgKiB3aGVuIHNocmlua2luZyB0byBleHRlbmQgdGhlIGJ1ZmZlciB3ZSByZWFsbHkgbmVlZCB0byBwcmVzZXJ2ZQotCSAgICAgKiB0aGUgcGFydCBvZiB0aGUgbmFtZSB3ZSBhbHJlYWR5IHBhcnNlZC4gSGVuY2Ugcm9sbGluZyBiYWNrCi0JICAgICAqIGJ5IGN1cnJlbnQgbGVuZ3RoLgotCSAgICAgKi8KLQkgICAgY3R4dC0+aW5wdXQtPmN1ciAtPSBsOwotCSAgICBHUk9XOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotCSAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IGw7Ci0JICAgIGMgPSBDVVJfQ0hBUihsKTsKLQl9CiAgICAgfQorICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICByZXR1cm4ocmV0KTsKICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTkFNRV9UT09fTE9ORywgIk5DTmFtZSIpOwotICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIHJldHVybihyZXQpOwogICAgIH0KLSAgICByZXR1cm4oeG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCAoQkFTRV9QVFIgKyBzdGFydFBvc2l0aW9uKSwgbGVuKSk7CisgICAgcmV0ID0geG1sRGljdExvb2t1cEhhc2hlZChjdHh0LT5kaWN0LCAoQkFTRV9QVFIgKyBzdGFydFBvc2l0aW9uKSwgbGVuKTsKKyAgICByZXR1cm4ocmV0KTsKIH0KIAogLyoqCkBAIC0zNDYxLDE4ICszNjI0LDE2IEBACiAgKiBSZXR1cm5zIHRoZSBOYW1lIHBhcnNlZCBvciBOVUxMCiAgKi8KIAotc3RhdGljIGNvbnN0IHhtbENoYXIgKgorc3RhdGljIHhtbEhhc2hlZFN0cmluZwogeG1sUGFyc2VOQ05hbWUoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CiAgICAgY29uc3QgeG1sQ2hhciAqaW4sICplOwotICAgIGNvbnN0IHhtbENoYXIgKnJldDsKKyAgICB4bWxIYXNoZWRTdHJpbmcgcmV0OwogICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgc2l6ZV90IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KICAgICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9URVhUX0xFTkdUSCA6CiAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfTkFNRV9MRU5HVEg7CiAKLSNpZmRlZiBERUJVRwotICAgIG5iUGFyc2VOQ05hbWUrKzsKLSNlbmRpZgorICAgIHJldC5uYW1lID0gTlVMTDsKIAogICAgIC8qCiAgICAgICogQWNjZWxlcmF0b3IgZm9yIHNpbXBsZSBBU0NJSSBuYW1lcwpAQCAtMzQ5NSwxMiArMzY1NiwxMiBAQAogCSAgICBjb3VudCA9IGluIC0gY3R4dC0+aW5wdXQtPmN1cjsKICAgICAgICAgICAgIGlmIChjb3VudCA+IG1heExlbmd0aCkgewogICAgICAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTkFNRV9UT09fTE9ORywgIk5DTmFtZSIpOwotICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgICAgICByZXR1cm4ocmV0KTsKICAgICAgICAgICAgIH0KLQkgICAgcmV0ID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCBjdHh0LT5pbnB1dC0+Y3VyLCBjb3VudCk7CisJICAgIHJldCA9IHhtbERpY3RMb29rdXBIYXNoZWQoY3R4dC0+ZGljdCwgY3R4dC0+aW5wdXQtPmN1ciwgY291bnQpOwogCSAgICBjdHh0LT5pbnB1dC0+Y3VyID0gaW47CiAJICAgIGN0eHQtPmlucHV0LT5jb2wgKz0gY291bnQ7Ci0JICAgIGlmIChyZXQgPT0gTlVMTCkgeworCSAgICBpZiAocmV0Lm5hbWUgPT0gTlVMTCkgewogCSAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogCSAgICB9CiAJICAgIHJldHVybihyZXQpOwpAQCAtMzU3OSwyMCArMzc0MCwxNiBAQAogICAgICAgICAgICAgICAgICAgICBYTUxfTUFYX1RFWFRfTEVOR1RIIDoKICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9OQU1FX0xFTkdUSDsKIAotI2lmZGVmIERFQlVHCi0gICAgbmJQYXJzZVN0cmluZ05hbWUrKzsKLSNlbmRpZgotCiAgICAgYyA9IENVUl9TQ0hBUihjdXIsIGwpOwogICAgIGlmICgheG1sSXNOYW1lU3RhcnRDaGFyKGN0eHQsIGMpKSB7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIAotICAgIENPUFlfQlVGKGwsYnVmLGxlbixjKTsKKyAgICBDT1BZX0JVRihidWYsIGxlbiwgYyk7CiAgICAgY3VyICs9IGw7CiAgICAgYyA9IENVUl9TQ0hBUihjdXIsIGwpOwogICAgIHdoaWxlICh4bWxJc05hbWVDaGFyKGN0eHQsIGMpKSB7Ci0JQ09QWV9CVUYobCxidWYsbGVuLGMpOworCUNPUFlfQlVGKGJ1ZiwgbGVuLCBjKTsKIAljdXIgKz0gbDsKIAljID0gQ1VSX1NDSEFSKGN1ciwgbCk7CiAJaWYgKGxlbiA+PSBYTUxfTUFYX05BTUVMRU4pIHsgLyogdGVzdCBiaWdlbnRuYW1lLnhtbCAqLwpAQCAtMzYwMyw3ICszNzYwLDcgQEAKIAkgICAgeG1sQ2hhciAqYnVmZmVyOwogCSAgICBpbnQgbWF4ID0gbGVuICogMjsKIAotCSAgICBidWZmZXIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMobWF4ICogc2l6ZW9mKHhtbENoYXIpKTsKKwkgICAgYnVmZmVyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKG1heCk7CiAJICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogCSAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogCQlyZXR1cm4oTlVMTCk7CkBAIC0zNjE0LDggKzM3NzEsNyBAQAogCQkgICAgeG1sQ2hhciAqdG1wOwogCiAJCSAgICBtYXggKj0gMjsKLQkJICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmZmVyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCAqIHNpemVvZih4bWxDaGFyKSk7CisJCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1ZmZlciwgbWF4KTsKIAkJICAgIGlmICh0bXAgPT0gTlVMTCkgewogCQkJeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogCQkJeG1sRnJlZShidWZmZXIpOwpAQCAtMzYyMyw3ICszNzc5LDcgQEAKIAkJICAgIH0KIAkJICAgIGJ1ZmZlciA9IHRtcDsKIAkJfQotCQlDT1BZX0JVRihsLGJ1ZmZlcixsZW4sYyk7CisJCUNPUFlfQlVGKGJ1ZmZlciwgbGVuLCBjKTsKIAkJY3VyICs9IGw7CiAJCWMgPSBDVVJfU0NIQVIoY3VyLCBsKTsKICAgICAgICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CkBAIC0zNjQ5LDYgKzM4MDUsOCBAQAogICogeG1sUGFyc2VObXRva2VuOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGFuIFhNTCBObXRva2VuLgogICoKICAqIFs3XSBObXRva2VuIDo6PSAoTmFtZUNoYXIpKwpAQCAtMzY2MywzNSArMzgyMSwxNiBAQAogICAgIHhtbENoYXIgYnVmW1hNTF9NQVhfTkFNRUxFTiArIDVdOwogICAgIGludCBsZW4gPSAwLCBsOwogICAgIGludCBjOwotICAgIGludCBjb3VudCA9IDA7CiAgICAgaW50IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9URVhUX0xFTkdUSCA6CiAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfTkFNRV9MRU5HVEg7CiAKLSNpZmRlZiBERUJVRwotICAgIG5iUGFyc2VObVRva2VuKys7Ci0jZW5kaWYKLQotICAgIEdST1c7Ci0gICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgIHJldHVybihOVUxMKTsKICAgICBjID0gQ1VSX0NIQVIobCk7CiAKICAgICB3aGlsZSAoeG1sSXNOYW1lQ2hhcihjdHh0LCBjKSkgewotCWlmIChjb3VudCsrID4gWE1MX1BBUlNFUl9DSFVOS19TSVpFKSB7Ci0JICAgIGNvdW50ID0gMDsKLQkgICAgR1JPVzsKLQl9Ci0JQ09QWV9CVUYobCxidWYsbGVuLGMpOworCUNPUFlfQlVGKGJ1ZiwgbGVuLCBjKTsKIAlORVhUTChsKTsKIAljID0gQ1VSX0NIQVIobCk7Ci0JaWYgKGMgPT0gMCkgewotCSAgICBjb3VudCA9IDA7Ci0JICAgIEdST1c7Ci0JICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQlyZXR1cm4oTlVMTCk7Ci0gICAgICAgICAgICBjID0gQ1VSX0NIQVIobCk7Ci0JfQogCWlmIChsZW4gPj0gWE1MX01BWF9OQU1FTEVOKSB7CiAJICAgIC8qCiAJICAgICAqIE9rYXkgc29tZW9uZSBtYW5hZ2VkIHRvIG1ha2UgYSBodWdlIHRva2VuLCBzbyBoZSdzIHJlYWR5IHRvIHBheQpAQCAtMzcwMCwyNyArMzgzOSwxOCBAQAogCSAgICB4bWxDaGFyICpidWZmZXI7CiAJICAgIGludCBtYXggPSBsZW4gKiAyOwogCi0JICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhtYXggKiBzaXplb2YoeG1sQ2hhcikpOworCSAgICBidWZmZXIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMobWF4KTsKIAkgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CiAJCXJldHVybihOVUxMKTsKIAkgICAgfQogCSAgICBtZW1jcHkoYnVmZmVyLCBidWYsIGxlbik7CiAJICAgIHdoaWxlICh4bWxJc05hbWVDaGFyKGN0eHQsIGMpKSB7Ci0JCWlmIChjb3VudCsrID4gWE1MX1BBUlNFUl9DSFVOS19TSVpFKSB7Ci0JCSAgICBjb3VudCA9IDA7Ci0JCSAgICBHUk9XOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikgewotICAgICAgICAgICAgICAgICAgICAgICAgeG1sRnJlZShidWZmZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0JCX0KIAkJaWYgKGxlbiArIDEwID4gbWF4KSB7CiAJCSAgICB4bWxDaGFyICp0bXA7CiAKIAkJICAgIG1heCAqPSAyOwotCQkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWZmZXIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICogc2l6ZW9mKHhtbENoYXIpKTsKKwkJICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmZmVyLCBtYXgpOwogCQkgICAgaWYgKHRtcCA9PSBOVUxMKSB7CiAJCQl4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CiAJCQl4bWxGcmVlKGJ1ZmZlcik7CkBAIC0zNzI4LDcgKzM4NTgsMTIgQEAKIAkJICAgIH0KIAkJICAgIGJ1ZmZlciA9IHRtcDsKIAkJfQotCQlDT1BZX0JVRihsLGJ1ZmZlcixsZW4sYyk7CisJCUNPUFlfQlVGKGJ1ZmZlciwgbGVuLCBjKTsKKyAgICAgICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTkFNRV9UT09fTE9ORywgIk5tVG9rZW4iKTsKKyAgICAgICAgICAgICAgICAgICAgeG1sRnJlZShidWZmZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICAgICAgfQogCQlORVhUTChsKTsKIAkJYyA9IENVUl9DSEFSKGwpOwogICAgICAgICAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKQEAgLTM3MzgsOSArMzg3MywxNSBAQAogICAgICAgICAgICAgICAgIH0KIAkgICAgfQogCSAgICBidWZmZXJbbGVuXSA9IDA7CisgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikgeworICAgICAgICAgICAgICAgIHhtbEZyZWUoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICB9CiAJICAgIHJldHVybihidWZmZXIpOwogCX0KICAgICB9CisgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgIHJldHVybihOVUxMKTsKICAgICBpZiAobGVuID09IDApCiAgICAgICAgIHJldHVybihOVUxMKTsKICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CkBAIC0zNzU1LDYgKzM4OTYsOCBAQAogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEBvcmlnOiAgaWYgbm9uLU5VTEwgc3RvcmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBlbnRpdHkgdmFsdWUKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGEgdmFsdWUgZm9yIEVOVElUWSBkZWNsYXJhdGlvbnMKICAqCiAgKiBbOV0gRW50aXR5VmFsdWUgOjo9ICciJyAoW14lJiJdIHwgUEVSZWZlcmVuY2UgfCBSZWZlcmVuY2UpKiAnIicgfApAQCAtMzc4Myw3ICszOTI2LDcgQEAKIAl4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VOVElUWV9OT1RfU1RBUlRFRCwgTlVMTCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogCXhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAlyZXR1cm4oTlVMTCk7CkBAIC0zODE1LDE0ICszOTU4LDE0IEBACiAJICAgIHhtbENoYXIgKnRtcDsKIAogCSAgICBzaXplICo9IDI7Ci0JICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKwkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUpOwogCSAgICBpZiAodG1wID09IE5VTEwpIHsKIAkJeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAJICAgIH0KIAkgICAgYnVmID0gdG1wOwogCX0KLQlDT1BZX0JVRihsLGJ1ZixsZW4sYyk7CisJQ09QWV9CVUYoYnVmLCBsZW4sIGMpOwogCU5FWFRMKGwpOwogCiAJR1JPVzsKQEAgLTM4OTEsOSArNDAzNCwxMCBAQAogICAgICAqIHNvIFhNTF9TVUJTVElUVVRFX1JFRiBpcyBub3Qgc2V0IGhlcmUuCiAgICAgICovCiAgICAgKytjdHh0LT5kZXB0aDsKLSAgICByZXQgPSB4bWxTdHJpbmdEZWNvZGVFbnRpdGllcyhjdHh0LCBidWYsIFhNTF9TVUJTVElUVVRFX1BFUkVGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApOworICAgIHJldCA9IHhtbFN0cmluZ0RlY29kZUVudGl0aWVzSW50KGN0eHQsIGJ1ZiwgbGVuLCBYTUxfU1VCU1RJVFVURV9QRVJFRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAvKiBjaGVjayAqLyAxKTsKICAgICAtLWN0eHQtPmRlcHRoOworCiAgICAgaWYgKG9yaWcgIT0gTlVMTCkgewogICAgICAgICAqb3JpZyA9IGJ1ZjsKICAgICAgICAgYnVmID0gTlVMTDsKQEAgLTM5OTEsOSArNDEzNSw2IEBACiAJCX0KIAkgICAgfSBlbHNlIHsKIAkJZW50ID0geG1sUGFyc2VFbnRpdHlSZWYoY3R4dCk7Ci0JCWN0eHQtPm5iZW50aXRpZXMrKzsKLQkJaWYgKGVudCAhPSBOVUxMKQotCQkgICAgY3R4dC0+bmJlbnRpdGllcyArPSBlbnQtPm93bmVyOwogCQlpZiAoKGVudCAhPSBOVUxMKSAmJgogCQkgICAgKGVudC0+ZXR5cGUgPT0gWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZKSkgewogCQkgICAgaWYgKGxlbiArIDEwID4gYnVmX3NpemUpIHsKQEAgLTQwMTIsMTAgKzQxNTMsMTMgQEAKIAkJfSBlbHNlIGlmICgoZW50ICE9IE5VTEwpICYmCiAJCSAgICAgICAgICAgKGN0eHQtPnJlcGxhY2VFbnRpdGllcyAhPSAwKSkgewogCQkgICAgaWYgKGVudC0+ZXR5cGUgIT0gWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgZW50LT5sZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKIAkJCSsrY3R4dC0+ZGVwdGg7Ci0JCQlyZXAgPSB4bWxTdHJpbmdEZWNvZGVFbnRpdGllcyhjdHh0LCBlbnQtPmNvbnRlbnQsCi0JCQkJCQkgICAgICBYTUxfU1VCU1RJVFVURV9SRUYsCi0JCQkJCQkgICAgICAwLCAwLCAwKTsKKwkJCXJlcCA9IHhtbFN0cmluZ0RlY29kZUVudGl0aWVzSW50KGN0eHQsIGVudC0+Y29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50LT5sZW5ndGgsIFhNTF9TVUJTVElUVVRFX1JFRiwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgKi8gMSk7CiAJCQktLWN0eHQtPmRlcHRoOwogCQkJaWYgKHJlcCAhPSBOVUxMKSB7CiAJCQkgICAgY3VycmVudCA9IHJlcDsKQEAgLTQwNDUsMjkgKzQxODksNDcgQEAKIAkJICAgIGNvbnN0IHhtbENoYXIgKmN1ciA9IGVudC0+bmFtZTsKIAogCQkgICAgLyoKLQkJICAgICAqIFRoaXMgbWF5IGxvb2sgYWJzdXJkIGJ1dCBpcyBuZWVkZWQgdG8gZGV0ZWN0Ci0JCSAgICAgKiBlbnRpdGllcyBwcm9ibGVtcworICAgICAgICAgICAgICAgICAgICAgKiBXZSBhbHNvIGNoZWNrIGZvciByZWN1cnNpb24gYW5kIGFtcGxpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICogd2hlbiBlbnRpdGllcyBhcmUgbm90IHN1YnN0aXR1dGVkLiBUaGV5J3JlCisgICAgICAgICAgICAgICAgICAgICAqIG9mdGVuIGV4cGFuZGVkIGxhdGVyLgogCQkgICAgICovCiAJCSAgICBpZiAoKGVudC0+ZXR5cGUgIT0gWE1MX0lOVEVSTkFMX1BSRURFRklORURfRU5USVRZKSAmJgotCQkJKGVudC0+Y29udGVudCAhPSBOVUxMKSAmJiAoZW50LT5jaGVja2VkID09IDApKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG9sZG5iZW50ID0gY3R4dC0+bmJlbnRpdGllcywgZGlmZjsKKwkJCShlbnQtPmNvbnRlbnQgIT0gTlVMTCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZW50LT5mbGFncyAmIFhNTF9FTlRfQ0hFQ0tFRCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkQ29weSA9IGN0eHQtPnNpemVlbnRjb3B5OwogCi0JCQkrK2N0eHQtPmRlcHRoOwotCQkJcmVwID0geG1sU3RyaW5nRGVjb2RlRW50aXRpZXMoY3R4dCwgZW50LT5jb250ZW50LAotCQkJCQkJICBYTUxfU1VCU1RJVFVURV9SRUYsIDAsIDAsIDApOwotCQkJLS1jdHh0LT5kZXB0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5zaXplZW50Y29weSA9IGVudC0+bGVuZ3RoOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gY3R4dC0+bmJlbnRpdGllcyAtIG9sZG5iZW50ICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWZmID4gSU5UX01BWCAvIDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IElOVF9NQVggLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAgZW50LT5jaGVja2VkID0gZGlmZiAqIDI7Ci0JCQlpZiAocmVwICE9IE5VTEwpIHsKLQkJCSAgICBpZiAoeG1sU3RyY2hyKHJlcCwgJzwnKSkKLQkJCSAgICAgICAgZW50LT5jaGVja2VkIHw9IDE7Ci0JCQkgICAgeG1sRnJlZShyZXApOwotCQkJICAgIHJlcCA9IE5VTEw7Ci0JCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+Y29udGVudFswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjdHh0LT5kZXB0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSB4bWxTdHJpbmdEZWNvZGVFbnRpdGllc0ludChjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50LT5jb250ZW50LCBlbnQtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TVUJTVElUVVRFX1JFRiwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrICovIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tY3R4dC0+ZGVwdGg7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIHdlJ3JlIHBhcnNpbmcgRFREIGNvbnRlbnQsIHRoZSBlbnRpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWdodCByZWZlcmVuY2Ugb3RoZXIgZW50aXRpZXMgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZXJlbid0IGRlZmluZWQgeWV0LCBzbyB0aGUgY2hlY2sgaXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZWxpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5TdWJzZXQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnQtPmZsYWdzIHw9IFhNTF9FTlRfQ0hFQ0tFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50LT5leHBhbmRlZFNpemUgPSBjdHh0LT5zaXplZW50Y29weTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sRnJlZShyZXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+Y29udGVudFswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIG9sZENvcHkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgZW50LT5leHBhbmRlZFNpemUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCQkgICAgfQogCkBAIC00MDg3LDcgKzQyNDksNyBAQAogCSAgICBpZiAoKGMgPT0gMHgyMCkgfHwgKGMgPT0gMHhEKSB8fCAoYyA9PSAweEEpIHx8IChjID09IDB4OSkpIHsKIAkgICAgICAgIGlmICgobGVuICE9IDApIHx8ICghbm9ybWFsaXplKSkgewogCQkgICAgaWYgKCghbm9ybWFsaXplKSB8fCAoIWluX3NwYWNlKSkgewotCQkJQ09QWV9CVUYobCxidWYsbGVuLDB4MjApOworCQkJQ09QWV9CVUYoYnVmLCBsZW4sIDB4MjApOwogCQkJd2hpbGUgKGxlbiArIDEwID4gYnVmX3NpemUpIHsKIAkJCSAgICBncm93QnVmZmVyKGJ1ZiwgMTApOwogCQkJfQpAQCAtNDA5Niw3ICs0MjU4LDcgQEAKIAkJfQogCSAgICB9IGVsc2UgewogCSAgICAgICAgaW5fc3BhY2UgPSAwOwotCQlDT1BZX0JVRihsLGJ1ZixsZW4sYyk7CisJCUNPUFlfQlVGKGJ1ZiwgbGVuLCBjKTsKIAkJaWYgKGxlbiArIDEwID4gYnVmX3NpemUpIHsKIAkJICAgIGdyb3dCdWZmZXIoYnVmLCAxMCk7CiAJCX0KQEAgLTQxMzEsNyArNDI5Myw3IEBACiAgICAgfSBlbHNlCiAJTkVYVDsKIAotICAgIGlmIChhdHRsZW4gIT0gTlVMTCkgKmF0dGxlbiA9IChpbnQpIGxlbjsKKyAgICBpZiAoYXR0bGVuICE9IE5VTEwpICphdHRsZW4gPSBsZW47CiAgICAgcmV0dXJuKGJ1Zik7CiAKIG1lbV9lcnJvcjoKQEAgLTQxNDgsNiArNDMxMCw4IEBACiAgKiB4bWxQYXJzZUF0dFZhbHVlOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGEgdmFsdWUgZm9yIGFuIGF0dHJpYnV0ZQogICogTm90ZTogdGhlIHBhcnNlciB3b24ndCBkbyBzdWJzdGl0dXRpb24gb2YgZW50aXRpZXMgaGVyZSwgdGhpcwogICogd2lsbCBiZSBoYW5kbGVkIGxhdGVyIGluIHhtbFN0cmluZ0dldE5vZGVMaXN0CkBAIC00MTg4LDYgKzQzNTIsOCBAQAogICogeG1sUGFyc2VTeXN0ZW1MaXRlcmFsOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGFuIFhNTCBMaXRlcmFsCiAgKgogICogWzExXSBTeXN0ZW1MaXRlcmFsIDo6PSAoJyInIFteIl0qICciJykgfCAoIiciIFteJ10qICInIikKQEAgLTQyMDYsOSArNDM3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfTkFNRV9MRU5HVEg7CiAgICAgeG1sQ2hhciBzdG9wOwogICAgIGludCBzdGF0ZSA9IGN0eHQtPmluc3RhdGU7Ci0gICAgaW50IGNvdW50ID0gMDsKIAotICAgIFNIUklOSzsKICAgICBpZiAoUkFXID09ICciJykgewogICAgICAgICBORVhUOwogCXN0b3AgPSAnIic7CkBAIC00MjIwLDcgKzQzODQsNyBAQAogCXJldHVybihOVUxMKTsKICAgICB9CiAKLSAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CiAJcmV0dXJuKE5VTEwpOwpAQCAtNDIzMiw3ICs0Mzk2LDcgQEAKIAkgICAgeG1sQ2hhciAqdG1wOwogCiAJICAgIHNpemUgKj0gMjsKLQkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1Ziwgc2l6ZSk7CiAJICAgIGlmICh0bXAgPT0gTlVMTCkgewogCSAgICAgICAgeG1sRnJlZShidWYpOwogCQl4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CkBAIC00MjQxLDMyICs0NDA1LDIxIEBACiAJICAgIH0KIAkgICAgYnVmID0gdG1wOwogCX0KLQljb3VudCsrOwotCWlmIChjb3VudCA+IDUwKSB7Ci0JICAgIFNIUklOSzsKLQkgICAgR1JPVzsKLQkgICAgY291bnQgPSAwOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLQkgICAgICAgIHhtbEZyZWUoYnVmKTsKLQkJcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgfQotCX0KLQlDT1BZX0JVRihsLGJ1ZixsZW4sY3VyKTsKLQlORVhUTChsKTsKLQljdXIgPSBDVVJfQ0hBUihsKTsKLQlpZiAoY3VyID09IDApIHsKLQkgICAgR1JPVzsKLQkgICAgU0hSSU5LOwotCSAgICBjdXIgPSBDVVJfQ0hBUihsKTsKLQl9CisJQ09QWV9CVUYoYnVmLCBsZW4sIGN1cik7CiAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKICAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTkFNRV9UT09fTE9ORywgIlN5c3RlbUxpdGVyYWwiKTsKICAgICAgICAgICAgIHhtbEZyZWUoYnVmKTsKICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSAoeG1sUGFyc2VySW5wdXRTdGF0ZSkgc3RhdGU7CiAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgICAgIH0KKwlORVhUTChsKTsKKwljdXIgPSBDVVJfQ0hBUihsKTsKICAgICB9CiAgICAgYnVmW2xlbl0gPSAwOworICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSB7CisgICAgICAgIHhtbEZyZWUoYnVmKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KICAgICBjdHh0LT5pbnN0YXRlID0gKHhtbFBhcnNlcklucHV0U3RhdGUpIHN0YXRlOwogICAgIGlmICghSVNfQ0hBUihjdXIpKSB7CiAJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9MSVRFUkFMX05PVF9GSU5JU0hFRCwgTlVMTCk7CkBAIC00MjgwLDYgKzQ0MzMsOCBAQAogICogeG1sUGFyc2VQdWJpZExpdGVyYWw6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgYW4gWE1MIHB1YmxpYyBsaXRlcmFsCiAgKgogICogWzEyXSBQdWJpZExpdGVyYWwgOjo9ICciJyBQdWJpZENoYXIqICciJyB8ICInIiAoUHViaWRDaGFyIC0gIiciKSogIiciCkBAIC00Mjk3LDEwICs0NDUyLDggQEAKICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9OQU1FX0xFTkdUSDsKICAgICB4bWxDaGFyIGN1cjsKICAgICB4bWxDaGFyIHN0b3A7Ci0gICAgaW50IGNvdW50ID0gMDsKICAgICB4bWxQYXJzZXJJbnB1dFN0YXRlIG9sZHN0YXRlID0gY3R4dC0+aW5zdGF0ZTsKIAotICAgIFNIUklOSzsKICAgICBpZiAoUkFXID09ICciJykgewogICAgICAgICBORVhUOwogCXN0b3AgPSAnIic7CkBAIC00MzExLDcgKzQ0NjQsNyBAQAogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTElURVJBTF9OT1RfU1RBUlRFRCwgTlVMTCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogCXhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAlyZXR1cm4oTlVMTCk7CkBAIC00MzIzLDcgKzQ0NzYsNyBAQAogCSAgICB4bWxDaGFyICp0bXA7CiAKIAkgICAgc2l6ZSAqPSAyOwotCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1Ziwgc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisJICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplKTsKIAkgICAgaWYgKHRtcCA9PSBOVUxMKSB7CiAJCXhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAkJeG1sRnJlZShidWYpOwpAQCAtNDMzMiw0MCArNDQ4NSwyOSBAQAogCSAgICBidWYgPSB0bXA7CiAJfQogCWJ1ZltsZW4rK10gPSBjdXI7Ci0JY291bnQrKzsKLQlpZiAoY291bnQgPiA1MCkgewotCSAgICBTSFJJTks7Ci0JICAgIEdST1c7Ci0JICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSB7Ci0JCXhtbEZyZWUoYnVmKTsKLQkJcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgfQotCX0KLQlORVhUOwotCWN1ciA9IENVUjsKLQlpZiAoY3VyID09IDApIHsKLQkgICAgR1JPVzsKLQkgICAgU0hSSU5LOwotCSAgICBjdXIgPSBDVVI7Ci0JfQogICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX05BTUVfVE9PX0xPTkcsICJQdWJsaWMgSUQiKTsKICAgICAgICAgICAgIHhtbEZyZWUoYnVmKTsKICAgICAgICAgICAgIHJldHVybihOVUxMKTsKICAgICAgICAgfQorCU5FWFQ7CisJY3VyID0gQ1VSOwogICAgIH0KICAgICBidWZbbGVuXSA9IDA7CisgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKKyAgICAgICAgeG1sRnJlZShidWYpOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQogICAgIGlmIChjdXIgIT0gc3RvcCkgewogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTElURVJBTF9OT1RfRklOSVNIRUQsIE5VTEwpOwogICAgIH0gZWxzZSB7Ci0JTkVYVDsKKwlORVhUTCgxKTsKICAgICB9CiAgICAgY3R4dC0+aW5zdGF0ZSA9IG9sZHN0YXRlOwogICAgIHJldHVybihidWYpOwogfQogCi1zdGF0aWMgdm9pZCB4bWxQYXJzZUNoYXJEYXRhQ29tcGxleCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGludCBjZGF0YSk7CitzdGF0aWMgdm9pZCB4bWxQYXJzZUNoYXJEYXRhQ29tcGxleCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGludCBwYXJ0aWFsKTsKIAogLyoKICAqIHVzZWQgZm9yIHRoZSB0ZXN0IGluIHRoZSBpbm5lciBsb29wIG9mIHRoZSBjaGFyIGRhdGEgdGVzdGluZwpAQCAtNDQwNiwxMiArNDU0OCwxMiBAQAogfTsKIAogLyoqCi0gKiB4bWxQYXJzZUNoYXJEYXRhOgorICogeG1sUGFyc2VDaGFyRGF0YUludGVybmFsOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKLSAqIEBjZGF0YTogIGludCBpbmRpY2F0aW5nIHdoZXRoZXIgd2UgYXJlIHdpdGhpbiBhIENEQVRBIHNlY3Rpb24KKyAqIEBwYXJ0aWFsOiAgYnVmZmVyIG1heSBjb250YWluIHBhcnRpYWwgVVRGLTggc2VxdWVuY2VzCiAgKgotICogcGFyc2UgYSBDaGFyRGF0YSBzZWN0aW9uLgotICogaWYgd2UgYXJlIHdpdGhpbiBhIENEQVRBIHNlY3Rpb24gJ11dPicgbWFya3MgYW4gZW5kIG9mIHNlY3Rpb24uCisgKiBQYXJzZSBjaGFyYWN0ZXIgZGF0YS4gQWx3YXlzIG1ha2VzIHByb2dyZXNzIGlmIHRoZSBmaXJzdCBjaGFyIGlzbid0CisgKiAnPCcgb3IgJyYnLgogICoKICAqIFRoZSByaWdodCBhbmdsZSBicmFja2V0ICg+KSBtYXkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHN0cmluZyAiJmd0OyIsCiAgKiBhbmQgbXVzdCwgZm9yIGNvbXBhdGliaWxpdHksIGJlIGVzY2FwZWQgdXNpbmcgIiZndDsiIG9yIGEgY2hhcmFjdGVyCkBAIC00NDIwLDE0NyArNDU2MiwxNDcgQEAKICAqCiAgKiBbMTRdIENoYXJEYXRhIDo6PSBbXjwmXSogLSAoW148Jl0qICddXT4nIFtePCZdKikKICAqLwotCi12b2lkCi14bWxQYXJzZUNoYXJEYXRhKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IGNkYXRhKSB7CitzdGF0aWMgdm9pZAoreG1sUGFyc2VDaGFyRGF0YUludGVybmFsKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IHBhcnRpYWwpIHsKICAgICBjb25zdCB4bWxDaGFyICppbjsKICAgICBpbnQgbmJjaGFyID0gMDsKICAgICBpbnQgbGluZSA9IGN0eHQtPmlucHV0LT5saW5lOwogICAgIGludCBjb2wgPSBjdHh0LT5pbnB1dC0+Y29sOwogICAgIGludCBjY29sOwogCi0gICAgU0hSSU5LOwogICAgIEdST1c7CiAgICAgLyoKICAgICAgKiBBY2NlbGVyYXRlZCBjb21tb24gY2FzZSB3aGVyZSBpbnB1dCBkb24ndCBuZWVkIHRvIGJlCiAgICAgICogbW9kaWZpZWQgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGhhbmRsZXIuCiAgICAgICovCi0gICAgaWYgKCFjZGF0YSkgewotCWluID0gY3R4dC0+aW5wdXQtPmN1cjsKLQlkbyB7CisgICAgaW4gPSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIGRvIHsKIGdldF9tb3JlX3NwYWNlOgotCSAgICB3aGlsZSAoKmluID09IDB4MjApIHsgaW4rKzsgY3R4dC0+aW5wdXQtPmNvbCsrOyB9Ci0JICAgIGlmICgqaW4gPT0gMHhBKSB7Ci0JCWRvIHsKLQkJICAgIGN0eHQtPmlucHV0LT5saW5lKys7IGN0eHQtPmlucHV0LT5jb2wgPSAxOwotCQkgICAgaW4rKzsKLQkJfSB3aGlsZSAoKmluID09IDB4QSk7Ci0JCWdvdG8gZ2V0X21vcmVfc3BhY2U7Ci0JICAgIH0KLQkgICAgaWYgKCppbiA9PSAnPCcpIHsKLQkJbmJjaGFyID0gaW4gLSBjdHh0LT5pbnB1dC0+Y3VyOwotCQlpZiAobmJjaGFyID4gMCkgewotCQkgICAgY29uc3QgeG1sQ2hhciAqdG1wID0gY3R4dC0+aW5wdXQtPmN1cjsKLQkJICAgIGN0eHQtPmlucHV0LT5jdXIgPSBpbjsKKyAgICAgICAgd2hpbGUgKCppbiA9PSAweDIwKSB7IGluKys7IGN0eHQtPmlucHV0LT5jb2wrKzsgfQorICAgICAgICBpZiAoKmluID09IDB4QSkgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5saW5lKys7IGN0eHQtPmlucHV0LT5jb2wgPSAxOworICAgICAgICAgICAgICAgIGluKys7CisgICAgICAgICAgICB9IHdoaWxlICgqaW4gPT0gMHhBKTsKKyAgICAgICAgICAgIGdvdG8gZ2V0X21vcmVfc3BhY2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCppbiA9PSAnPCcpIHsKKyAgICAgICAgICAgIG5iY2hhciA9IGluIC0gY3R4dC0+aW5wdXQtPmN1cjsKKyAgICAgICAgICAgIGlmIChuYmNoYXIgPiAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqdG1wID0gY3R4dC0+aW5wdXQtPmN1cjsKKyAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyID0gaW47CiAKLQkJICAgIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCi0JCSAgICAgICAgKGN0eHQtPnNheC0+aWdub3JhYmxlV2hpdGVzcGFjZSAhPQotCQkgICAgICAgICBjdHh0LT5zYXgtPmNoYXJhY3RlcnMpKSB7Ci0JCQlpZiAoYXJlQmxhbmtzKGN0eHQsIHRtcCwgbmJjaGFyLCAxKSkgewotCQkJICAgIGlmIChjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UgIT0gTlVMTCkKLQkJCQljdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UoY3R4dC0+dXNlckRhdGEsCi0JCQkJCQkgICAgICAgdG1wLCBuYmNoYXIpOwotCQkJfSBlbHNlIHsKLQkJCSAgICBpZiAoY3R4dC0+c2F4LT5jaGFyYWN0ZXJzICE9IE5VTEwpCi0JCQkJY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKGN0eHQtPnVzZXJEYXRhLAotCQkJCQkJICAgICAgdG1wLCBuYmNoYXIpOwotCQkJICAgIGlmICgqY3R4dC0+c3BhY2UgPT0gLTEpCi0JCQkgICAgICAgICpjdHh0LT5zcGFjZSA9IC0yOwotCQkJfQotCQkgICAgfSBlbHNlIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCi0JCSAgICAgICAgICAgICAgIChjdHh0LT5zYXgtPmNoYXJhY3RlcnMgIT0gTlVMTCkpIHsKLQkJCWN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwKLQkJCQkJICAgICAgdG1wLCBuYmNoYXIpOwotCQkgICAgfQotCQl9Ci0JCXJldHVybjsKLQkgICAgfQorICAgICAgICAgICAgICAgIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgIChjdHh0LT5kaXNhYmxlU0FYID09IDApICYmCisgICAgICAgICAgICAgICAgICAgIChjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UgIT0KKyAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZUJsYW5rcyhjdHh0LCB0bXAsIG5iY2hhciwgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UoY3R4dC0+dXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIG5iY2hhcik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+c2F4LT5jaGFyYWN0ZXJzICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKGN0eHQtPnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIG5iY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmN0eHQtPnNwYWNlID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjdHh0LT5zcGFjZSA9IC0yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+ZGlzYWJsZVNBWCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eHQtPnNheC0+Y2hhcmFjdGVycyAhPSBOVUxMKSkgeworICAgICAgICAgICAgICAgICAgICBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoY3R4dC0+dXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIG5iY2hhcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKIGdldF9tb3JlOgotICAgICAgICAgICAgY2NvbCA9IGN0eHQtPmlucHV0LT5jb2w7Ci0JICAgIHdoaWxlICh0ZXN0X2NoYXJfZGF0YVsqaW5dKSB7Ci0JCWluKys7Ci0JCWNjb2wrKzsKLQkgICAgfQotCSAgICBjdHh0LT5pbnB1dC0+Y29sID0gY2NvbDsKLQkgICAgaWYgKCppbiA9PSAweEEpIHsKLQkJZG8gewotCQkgICAgY3R4dC0+aW5wdXQtPmxpbmUrKzsgY3R4dC0+aW5wdXQtPmNvbCA9IDE7Ci0JCSAgICBpbisrOwotCQl9IHdoaWxlICgqaW4gPT0gMHhBKTsKLQkJZ290byBnZXRfbW9yZTsKLQkgICAgfQotCSAgICBpZiAoKmluID09ICddJykgewotCQlpZiAoKGluWzFdID09ICddJykgJiYgKGluWzJdID09ICc+JykpIHsKLQkJICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTUlTUExBQ0VEX0NEQVRBX0VORCwgTlVMTCk7Ci0JCSAgICBjdHh0LT5pbnB1dC0+Y3VyID0gaW4gKyAxOwotCQkgICAgcmV0dXJuOwotCQl9Ci0JCWluKys7Ci0JCWN0eHQtPmlucHV0LT5jb2wrKzsKLQkJZ290byBnZXRfbW9yZTsKLQkgICAgfQotCSAgICBuYmNoYXIgPSBpbiAtIGN0eHQtPmlucHV0LT5jdXI7Ci0JICAgIGlmIChuYmNoYXIgPiAwKSB7Ci0JCWlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCi0JCSAgICAoY3R4dC0+c2F4LT5pZ25vcmFibGVXaGl0ZXNwYWNlICE9Ci0JCSAgICAgY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKSAmJgotCQkgICAgKElTX0JMQU5LX0NIKCpjdHh0LT5pbnB1dC0+Y3VyKSkpIHsKLQkJICAgIGNvbnN0IHhtbENoYXIgKnRtcCA9IGN0eHQtPmlucHV0LT5jdXI7Ci0JCSAgICBjdHh0LT5pbnB1dC0+Y3VyID0gaW47CisgICAgICAgIGNjb2wgPSBjdHh0LT5pbnB1dC0+Y29sOworICAgICAgICB3aGlsZSAodGVzdF9jaGFyX2RhdGFbKmluXSkgeworICAgICAgICAgICAgaW4rKzsKKyAgICAgICAgICAgIGNjb2wrKzsKKyAgICAgICAgfQorICAgICAgICBjdHh0LT5pbnB1dC0+Y29sID0gY2NvbDsKKyAgICAgICAgaWYgKCppbiA9PSAweEEpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+bGluZSsrOyBjdHh0LT5pbnB1dC0+Y29sID0gMTsKKyAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAgfSB3aGlsZSAoKmluID09IDB4QSk7CisgICAgICAgICAgICBnb3RvIGdldF9tb3JlOworICAgICAgICB9CisgICAgICAgIGlmICgqaW4gPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoKGluWzFdID09ICddJykgJiYgKGluWzJdID09ICc+JykpIHsKKyAgICAgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX01JU1BMQUNFRF9DREFUQV9FTkQsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyID0gaW4gKyAxOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluKys7CisgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y29sKys7CisgICAgICAgICAgICBnb3RvIGdldF9tb3JlOworICAgICAgICB9CisgICAgICAgIG5iY2hhciA9IGluIC0gY3R4dC0+aW5wdXQtPmN1cjsKKyAgICAgICAgaWYgKG5iY2hhciA+IDApIHsKKyAgICAgICAgICAgIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgKGN0eHQtPmRpc2FibGVTQVggPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAoY3R4dC0+c2F4LT5pZ25vcmFibGVXaGl0ZXNwYWNlICE9CisgICAgICAgICAgICAgICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycykgJiYKKyAgICAgICAgICAgICAgICAoSVNfQkxBTktfQ0goKmN0eHQtPmlucHV0LT5jdXIpKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnRtcCA9IGN0eHQtPmlucHV0LT5jdXI7CisgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciA9IGluOwogCi0JCSAgICBpZiAoYXJlQmxhbmtzKGN0eHQsIHRtcCwgbmJjaGFyLCAwKSkgewotCQkgICAgICAgIGlmIChjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UgIT0gTlVMTCkKLQkJCSAgICBjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UoY3R4dC0+dXNlckRhdGEsCi0JCQkJCQkJICAgdG1wLCBuYmNoYXIpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgICAgICBpZiAoY3R4dC0+c2F4LT5jaGFyYWN0ZXJzICE9IE5VTEwpCi0JCQkgICAgY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKGN0eHQtPnVzZXJEYXRhLAotCQkJCQkJICB0bXAsIG5iY2hhcik7Ci0JCQlpZiAoKmN0eHQtPnNwYWNlID09IC0xKQotCQkJICAgICpjdHh0LT5zcGFjZSA9IC0yOwotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBsaW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbCA9IGN0eHQtPmlucHV0LT5jb2w7Ci0JCX0gZWxzZSBpZiAoY3R4dC0+c2F4ICE9IE5VTEwpIHsKLQkJICAgIGlmIChjdHh0LT5zYXgtPmNoYXJhY3RlcnMgIT0gTlVMTCkKLQkJCWN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwKLQkJCQkJICAgICAgY3R4dC0+aW5wdXQtPmN1ciwgbmJjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGN0eHQtPmlucHV0LT5saW5lOwotICAgICAgICAgICAgICAgICAgICBjb2wgPSBjdHh0LT5pbnB1dC0+Y29sOwotCQl9Ci0gICAgICAgICAgICAgICAgLyogc29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQgaW4gdGhlIFNBWCBjYWxsYmFjayAqLwotICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0JICAgIGN0eHQtPmlucHV0LT5jdXIgPSBpbjsKLQkgICAgaWYgKCppbiA9PSAweEQpIHsKLQkJaW4rKzsKLQkJaWYgKCppbiA9PSAweEEpIHsKLQkJICAgIGN0eHQtPmlucHV0LT5jdXIgPSBpbjsKLQkJICAgIGluKys7Ci0JCSAgICBjdHh0LT5pbnB1dC0+bGluZSsrOyBjdHh0LT5pbnB1dC0+Y29sID0gMTsKLQkJICAgIGNvbnRpbnVlOyAvKiB3aGlsZSAqLwotCQl9Ci0JCWluLS07Ci0JICAgIH0KLQkgICAgaWYgKCppbiA9PSAnPCcpIHsKLQkJcmV0dXJuOwotCSAgICB9Ci0JICAgIGlmICgqaW4gPT0gJyYnKSB7Ci0JCXJldHVybjsKLQkgICAgfQotCSAgICBTSFJJTks7Ci0JICAgIEdST1c7CisgICAgICAgICAgICAgICAgaWYgKGFyZUJsYW5rcyhjdHh0LCB0bXAsIG5iY2hhciwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPnNheC0+aWdub3JhYmxlV2hpdGVzcGFjZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+c2F4LT5pZ25vcmFibGVXaGl0ZXNwYWNlKGN0eHQtPnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgbmJjaGFyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+c2F4LT5jaGFyYWN0ZXJzICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoY3R4dC0+dXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCBuYmNoYXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmN0eHQtPnNwYWNlID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgKmN0eHQtPnNwYWNlID0gLTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUgPSBjdHh0LT5pbnB1dC0+bGluZTsKKyAgICAgICAgICAgICAgICBjb2wgPSBjdHh0LT5pbnB1dC0+Y29sOworICAgICAgICAgICAgfSBlbHNlIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgICAgIChjdHh0LT5kaXNhYmxlU0FYID09IDApKSB7CisgICAgICAgICAgICAgICAgaWYgKGN0eHQtPnNheC0+Y2hhcmFjdGVycyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoY3R4dC0+dXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyLCBuYmNoYXIpOworICAgICAgICAgICAgICAgIGxpbmUgPSBjdHh0LT5pbnB1dC0+bGluZTsKKyAgICAgICAgICAgICAgICBjb2wgPSBjdHh0LT5pbnB1dC0+Y29sOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0JCXJldHVybjsKLQkgICAgaW4gPSBjdHh0LT5pbnB1dC0+Y3VyOwotCX0gd2hpbGUgKCgoKmluID49IDB4MjApICYmICgqaW4gPD0gMHg3RikpIHx8ICgqaW4gPT0gMHgwOSkgfHwgKCppbiA9PSAweDBhKSk7Ci0JbmJjaGFyID0gMDsKLSAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN0eHQtPmlucHV0LT5jdXIgPSBpbjsKKyAgICAgICAgaWYgKCppbiA9PSAweEQpIHsKKyAgICAgICAgICAgIGluKys7CisgICAgICAgICAgICBpZiAoKmluID09IDB4QSkgeworICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXIgPSBpbjsKKyAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5saW5lKys7IGN0eHQtPmlucHV0LT5jb2wgPSAxOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiB3aGlsZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW4tLTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKmluID09ICc8JykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgqaW4gPT0gJyYnKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU0hSSU5LOworICAgICAgICBHUk9XOworICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaW4gPSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIH0gd2hpbGUgKCgoKmluID49IDB4MjApICYmICgqaW4gPD0gMHg3RikpIHx8CisgICAgICAgICAgICAgKCppbiA9PSAweDA5KSB8fCAoKmluID09IDB4MGEpKTsKICAgICBjdHh0LT5pbnB1dC0+bGluZSA9IGxpbmU7CiAgICAgY3R4dC0+aW5wdXQtPmNvbCA9IGNvbDsKLSAgICB4bWxQYXJzZUNoYXJEYXRhQ29tcGxleChjdHh0LCBjZGF0YSk7CisgICAgeG1sUGFyc2VDaGFyRGF0YUNvbXBsZXgoY3R4dCwgcGFydGlhbCk7CiB9CiAKIC8qKgpAQCAtNDU2OCwzNCArNDcxMCwyOCBAQAogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEBjZGF0YTogIGludCBpbmRpY2F0aW5nIHdoZXRoZXIgd2UgYXJlIHdpdGhpbiBhIENEQVRBIHNlY3Rpb24KICAqCisgKiBBbHdheXMgbWFrZXMgcHJvZ3Jlc3MgaWYgdGhlIGZpcnN0IGNoYXIgaXNuJ3QgJzwnIG9yICcmJy4KKyAqCiAgKiBwYXJzZSBhIENoYXJEYXRhIHNlY3Rpb24udGhpcyBpcyB0aGUgZmFsbGJhY2sgZnVuY3Rpb24KICAqIG9mIHhtbFBhcnNlQ2hhckRhdGEoKSB3aGVuIHRoZSBwYXJzaW5nIHJlcXVpcmVzIGhhbmRsaW5nCiAgKiBvZiBub24tQVNDSUkgY2hhcmFjdGVycy4KICAqLwogc3RhdGljIHZvaWQKLXhtbFBhcnNlQ2hhckRhdGFDb21wbGV4KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IGNkYXRhKSB7Cit4bWxQYXJzZUNoYXJEYXRhQ29tcGxleCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGludCBwYXJ0aWFsKSB7CiAgICAgeG1sQ2hhciBidWZbWE1MX1BBUlNFUl9CSUdfQlVGRkVSX1NJWkUgKyA1XTsKICAgICBpbnQgbmJjaGFyID0gMDsKICAgICBpbnQgY3VyLCBsOwotICAgIGludCBjb3VudCA9IDA7CiAKLSAgICBTSFJJTks7Ci0gICAgR1JPVzsKICAgICBjdXIgPSBDVVJfQ0hBUihsKTsKICAgICB3aGlsZSAoKGN1ciAhPSAnPCcpICYmIC8qIGNoZWNrZWQgKi8KICAgICAgICAgICAgKGN1ciAhPSAnJicpICYmCi0JICAgKElTX0NIQVIoY3VyKSkpIC8qIHRlc3QgYWxzbyBkb25lIGluIHhtbEN1cnJlbnRDaGFyKCkgKi8gewotCWlmICgoY3VyID09ICddJykgJiYgKE5YVCgxKSA9PSAnXScpICYmCi0JICAgIChOWFQoMikgPT0gJz4nKSkgewotCSAgICBpZiAoY2RhdGEpIGJyZWFrOwotCSAgICBlbHNlIHsKLQkJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9NSVNQTEFDRURfQ0RBVEFfRU5ELCBOVUxMKTsKLQkgICAgfQorCSAgIChJU19DSEFSKGN1cikpKSB7CisJaWYgKChjdXIgPT0gJ10nKSAmJiAoTlhUKDEpID09ICddJykgJiYgKE5YVCgyKSA9PSAnPicpKSB7CisJICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTUlTUExBQ0VEX0NEQVRBX0VORCwgTlVMTCk7CiAJfQotCUNPUFlfQlVGKGwsYnVmLG5iY2hhcixjdXIpOworCUNPUFlfQlVGKGJ1ZiwgbmJjaGFyLCBjdXIpOwogCS8qIG1vdmUgY3VycmVudCBwb3NpdGlvbiBiZWZvcmUgcG9zc2libGUgY2FsbGluZyBvZiBjdHh0LT5zYXgtPmNoYXJhY3RlcnMgKi8KIAlORVhUTChsKTsKLQljdXIgPSBDVVJfQ0hBUihsKTsKIAlpZiAobmJjaGFyID49IFhNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFKSB7CiAJICAgIGJ1ZltuYmNoYXJdID0gMDsKIApAQCAtNDYyMCwxNiArNDc1NiwxMiBAQAogICAgICAgICAgICAgLyogc29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQgaW4gdGhlIFNBWCBjYWxsYmFjayAqLwogICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9DT05URU5UKQogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFNIUklOSzsKIAl9Ci0JY291bnQrKzsKLQlpZiAoY291bnQgPiA1MCkgewotCSAgICBTSFJJTks7Ci0JICAgIEdST1c7Ci0JICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQlyZXR1cm47Ci0JfQorCWN1ciA9IENVUl9DSEFSKGwpOwogICAgIH0KKyAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChuYmNoYXIgIT0gMCkgewogICAgICAgICBidWZbbmJjaGFyXSA9IDA7CiAJLyoKQEAgLTQ2NDgsMjIgKzQ3ODAsNTEgQEAKIAkgICAgfQogCX0KICAgICB9Ci0gICAgaWYgKChjdXIgIT0gMCkgJiYgKCFJU19DSEFSKGN1cikpKSB7Ci0JLyogR2VuZXJhdGUgdGhlIGVycm9yIGFuZCBza2lwIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyICovCi0gICAgICAgIHhtbEZhdGFsRXJyTXNnSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiUENEQVRBIGludmFsaWQgQ2hhciB2YWx1ZSAlZFxuIiwKLQkgICAgICAgICAgICAgICAgICBjdXIpOwotCU5FWFRMKGwpOworICAgIC8qCisgICAgICogY3VyID09IDAgY2FuIG1lYW4KKyAgICAgKgorICAgICAqIC0gWE1MX1BBUlNFUl9FT0Ygb3IgbWVtb3J5IGVycm9yLiBUaGlzIGlzIGNoZWNrZWQgYWJvdmUuCisgICAgICogLSBBbiBhY3R1YWwgMCBjaGFyYWN0ZXIuCisgICAgICogLSBFbmQgb2YgYnVmZmVyLgorICAgICAqIC0gQW4gaW5jb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZS4gVGhpcyBpcyBhbGxvd2VkIGlmIHBhcnRpYWwgaXMgc2V0LgorICAgICAqLworICAgIGlmIChjdHh0LT5pbnB1dC0+Y3VyIDwgY3R4dC0+aW5wdXQtPmVuZCkgeworICAgICAgICBpZiAoKGN1ciA9PSAwKSAmJiAoQ1VSICE9IDApKSB7CisgICAgICAgICAgICBpZiAocGFydGlhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgeG1sRmF0YWxFcnJNc2dJbnQoY3R4dCwgWE1MX0VSUl9JTlZBTElEX0NIQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICUwMlhcbiIsIENVUik7CisgICAgICAgICAgICAgICAgTkVYVEwoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKGN1ciAhPSAnPCcpICYmIChjdXIgIT0gJyYnKSkgeworICAgICAgICAgICAgLyogR2VuZXJhdGUgdGhlIGVycm9yIGFuZCBza2lwIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyICovCisgICAgICAgICAgICB4bWxGYXRhbEVyck1zZ0ludChjdHh0LCBYTUxfRVJSX0lOVkFMSURfQ0hBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQ0RBVEEgaW52YWxpZCBDaGFyIHZhbHVlICVkXG4iLCBjdXIpOworICAgICAgICAgICAgTkVYVEwobCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKIC8qKgorICogeG1sUGFyc2VDaGFyRGF0YToKKyAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CisgKiBAY2RhdGE6ICB1bnVzZWQKKyAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICovCit2b2lkCit4bWxQYXJzZUNoYXJEYXRhKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgQVRUUklCVVRFX1VOVVNFRCBpbnQgY2RhdGEpIHsKKyAgICB4bWxQYXJzZUNoYXJEYXRhSW50ZXJuYWwoY3R4dCwgMCk7Cit9CisKKy8qKgogICogeG1sUGFyc2VFeHRlcm5hbElEOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEBwdWJsaWNJRDogIGEgeG1sQ2hhcioqIHJlY2VpdmluZyBQdWJpZExpdGVyYWwKICAqIEBzdHJpY3Q6IGluZGljYXRlIHdoZXRoZXIgd2Ugc2hvdWxkIHJlc3RyaWN0IHBhcnNpbmcgdG8gb25seQogICogICAgICAgICAgcHJvZHVjdGlvbiBbNzVdLCBzZWUgTk9URSBiZWxvdwogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogUGFyc2UgYW4gRXh0ZXJuYWwgSUQgb3IgYSBQdWJsaWMgSUQKICAqCiAgKiBOT1RFOiBQcm9kdWN0aW9ucyBbNzVdIGFuZCBbODNdIGludGVyYWN0IGJhZGx5IHNpbmNlIFs3NV0gY2FuIGdlbmVyYXRlCkBAIC00NjgzLDggKzQ4NDQsNiBAQAogeG1sUGFyc2VFeHRlcm5hbElEKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgeG1sQ2hhciAqKnB1YmxpY0lELCBpbnQgc3RyaWN0KSB7CiAgICAgeG1sQ2hhciAqVVJJID0gTlVMTDsKIAotICAgIFNIUklOSzsKLQogICAgICpwdWJsaWNJRCA9IE5VTEw7CiAgICAgaWYgKENNUDYoQ1VSX1BUUiwgJ1MnLCAnWScsICdTJywgJ1QnLCAnRScsICdNJykpIHsKICAgICAgICAgU0tJUCg2KTsKQEAgLTQ3NTIsNyArNDkxMSw2IEBACiAgICAgaW50IHEsIHFsOwogICAgIGludCByLCBybDsKICAgICBpbnQgY3VyLCBsOwotICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgc2l6ZV90IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KICAgICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9IVUdFX0xFTkdUSCA6CiAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfVEVYVF9MRU5HVEg7CkBAIC00NzYzLDEzICs0OTIxLDEyIEBACiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgIGxlbiA9IDA7CiAJc2l6ZSA9IFhNTF9QQVJTRVJfQlVGRkVSX1NJWkU7Ci0JYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworCWJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplKTsKIAlpZiAoYnVmID09IE5VTEwpIHsKIAkgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogCSAgICByZXR1cm47CiAJfQogICAgIH0KLSAgICBHUk9XOwkvKiBBc3N1cmUgdGhlcmUncyBlbm91Z2ggaW5wdXQgZGF0YSAqLwogICAgIHEgPSBDVVJfQ0hBUihxbCk7CiAgICAgaWYgKHEgPT0gMCkKICAgICAgICAgZ290byBub3RfdGVybWluYXRlZDsKQEAgLTQ3ODcsNyArNDk0NCw3IEBACiAgICAgaWYgKCFJU19DSEFSKHIpKSB7CiAgICAgICAgIHhtbEZhdGFsRXJyTXNnSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sUGFyc2VDb21tZW50OiBpbnZhbGlkIHhtbENoYXIgdmFsdWUgJWRcbiIsCi0JICAgICAgICAgICAgICAgICAgcSk7CisJICAgICAgICAgICAgICAgICAgcik7CiAJeG1sRnJlZSAoYnVmKTsKIAlyZXR1cm47CiAgICAgfQpAQCAtNDgxNSwzOCArNDk3MiwyOCBAQAogCSAgICBidWYgPSBuZXdfYnVmOwogICAgICAgICAgICAgc2l6ZSA9IG5ld19zaXplOwogCX0KLQlDT1BZX0JVRihxbCxidWYsbGVuLHEpOwotCXEgPSByOwotCXFsID0gcmw7Ci0JciA9IGN1cjsKLQlybCA9IGw7Ci0KLQljb3VudCsrOwotCWlmIChjb3VudCA+IDUwKSB7Ci0JICAgIFNIUklOSzsKLQkgICAgR1JPVzsKLQkgICAgY291bnQgPSAwOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLQkJeG1sRnJlZShidWYpOwotCQlyZXR1cm47Ci0gICAgICAgICAgICB9Ci0JfQotCU5FWFRMKGwpOwotCWN1ciA9IENVUl9DSEFSKGwpOwotCWlmIChjdXIgPT0gMCkgewotCSAgICBTSFJJTks7Ci0JICAgIEdST1c7Ci0JICAgIGN1ciA9IENVUl9DSEFSKGwpOwotCX0KLQorCUNPUFlfQlVGKGJ1ZiwgbGVuLCBxKTsKICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgewogICAgICAgICAgICAgeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9DT01NRU5UX05PVF9GSU5JU0hFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWVudCB0b28gYmlnIGZvdW5kIiwgTlVMTCk7CiAgICAgICAgICAgICB4bWxGcmVlIChidWYpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKwlxID0gcjsKKwlxbCA9IHJsOworCXIgPSBjdXI7CisJcmwgPSBsOworCisJTkVYVEwobCk7CisJY3VyID0gQ1VSX0NIQVIobCk7CisKICAgICB9CiAgICAgYnVmW2xlbl0gPSAwOworICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSB7CisgICAgICAgIHhtbEZyZWUoYnVmKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoY3VyID09IDApIHsKIAl4bWxGYXRhbEVyck1zZ1N0cihjdHh0LCBYTUxfRVJSX0NPTU1FTlRfTk9UX0ZJTklTSEVELAogCSAgICAgICAgICAgICAgICAgICAgICJDb21tZW50IG5vdCB0ZXJtaW5hdGVkIFxuPCEtLSUuNTBzXG4iLCBidWYpOwpAQCAtNDg3OCw3ICs1MDI1LDEwIEBACiAgKiB4bWxQYXJzZUNvbW1lbnQ6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKLSAqIFNraXAgYW4gWE1MIChTR01MKSBjb21tZW50IDwhLS0gLi4uLiAtLT4KKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgorICogUGFyc2UgYW4gWE1MIChTR01MKSBjb21tZW50LiBBbHdheXMgY29uc3VtZXMgJzwhJy4KKyAqCiAgKiAgVGhlIHNwZWMgc2F5cyB0aGF0ICJGb3IgY29tcGF0aWJpbGl0eSwgdGhlIHN0cmluZyAiLS0iIChkb3VibGUtaHlwaGVuKQogICogIG11c3Qgbm90IG9jY3VyIHdpdGhpbiBjb21tZW50cy4gIgogICoKQEAgLTQ5MDEsMTMgKzUwNTEsMTUgQEAKICAgICAvKgogICAgICAqIENoZWNrIHRoYXQgdGhlcmUgaXMgYSBjb21tZW50IHJpZ2h0IGhlcmUuCiAgICAgICovCi0gICAgaWYgKChSQVcgIT0gJzwnKSB8fCAoTlhUKDEpICE9ICchJykgfHwKLSAgICAgICAgKE5YVCgyKSAhPSAnLScpIHx8IChOWFQoMykgIT0gJy0nKSkgcmV0dXJuOworICAgIGlmICgoUkFXICE9ICc8JykgfHwgKE5YVCgxKSAhPSAnIScpKQorICAgICAgICByZXR1cm47CisgICAgU0tJUCgyKTsKKyAgICBpZiAoKFJBVyAhPSAnLScpIHx8IChOWFQoMSkgIT0gJy0nKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHN0YXRlID0gY3R4dC0+aW5zdGF0ZTsKICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT01NRU5UOwogICAgIGlucHV0aWQgPSBjdHh0LT5pbnB1dC0+aWQ7Ci0gICAgU0tJUCg0KTsKLSAgICBTSFJJTks7CisgICAgU0tJUCgyKTsKICAgICBHUk9XOwogCiAgICAgLyoKQEAgLTQ5NDMsMzcgKzUwOTUsMzMgQEAKIAkgKiBzYXZlIGN1cnJlbnQgc2V0IG9mIGRhdGEKIAkgKi8KIAlpZiAobmJjaGFyID4gMCkgewotCSAgICBpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJgotCQkoY3R4dC0+c2F4LT5jb21tZW50ICE9IE5VTEwpKSB7Ci0JCWlmIChidWYgPT0gTlVMTCkgewotCQkgICAgaWYgKCgqaW4gPT0gJy0nKSAmJiAoaW5bMV0gPT0gJy0nKSkKLQkJICAgICAgICBzaXplID0gbmJjaGFyICsgMTsKLQkJICAgIGVsc2UKLQkJICAgICAgICBzaXplID0gWE1MX1BBUlNFUl9CVUZGRVJfU0laRSArIG5iY2hhcjsKLQkJICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKLQkJICAgIGlmIChidWYgPT0gTlVMTCkgewotCQkgICAgICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKLQkJCWN0eHQtPmluc3RhdGUgPSBzdGF0ZTsKLQkJCXJldHVybjsKLQkJICAgIH0KLQkJICAgIGxlbiA9IDA7Ci0JCX0gZWxzZSBpZiAobGVuICsgbmJjaGFyICsgMSA+PSBzaXplKSB7Ci0JCSAgICB4bWxDaGFyICpuZXdfYnVmOwotCQkgICAgc2l6ZSAgKz0gbGVuICsgbmJjaGFyICsgWE1MX1BBUlNFUl9CVUZGRVJfU0laRTsKLQkJICAgIG5ld19idWYgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1ZiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXplb2YoeG1sQ2hhcikpOwotCQkgICAgaWYgKG5ld19idWYgPT0gTlVMTCkgewotCQkgICAgICAgIHhtbEZyZWUgKGJ1Zik7Ci0JCQl4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7Ci0JCQljdHh0LT5pbnN0YXRlID0gc3RhdGU7Ci0JCQlyZXR1cm47Ci0JCSAgICB9Ci0JCSAgICBidWYgPSBuZXdfYnVmOwotCQl9Ci0JCW1lbWNweSgmYnVmW2xlbl0sIGN0eHQtPmlucHV0LT5jdXIsIG5iY2hhcik7Ci0JCWxlbiArPSBuYmNoYXI7Ci0JCWJ1ZltsZW5dID0gMDsKLQkgICAgfQorICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqaW4gPT0gJy0nKSAmJiAoaW5bMV0gPT0gJy0nKSkKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5iY2hhciArIDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzaXplID0gWE1MX1BBUlNFUl9CVUZGRVJfU0laRSArIG5iY2hhcjsKKyAgICAgICAgICAgICAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiArIG5iY2hhciArIDEgPj0gc2l6ZSkgeworICAgICAgICAgICAgICAgIHhtbENoYXIgKm5ld19idWY7CisgICAgICAgICAgICAgICAgc2l6ZSAgKz0gbGVuICsgbmJjaGFyICsgWE1MX1BBUlNFUl9CVUZGRVJfU0laRTsKKyAgICAgICAgICAgICAgICBuZXdfYnVmID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUpOworICAgICAgICAgICAgICAgIGlmIChuZXdfYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgeG1sRnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmID0gbmV3X2J1ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweSgmYnVmW2xlbl0sIGN0eHQtPmlucHV0LT5jdXIsIG5iY2hhcik7CisgICAgICAgICAgICBsZW4gKz0gbmJjaGFyOworICAgICAgICAgICAgYnVmW2xlbl0gPSAwOwogCX0KICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgewogICAgICAgICAgICAgeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9DT01NRU5UX05PVF9GSU5JU0hFRCwKQEAgLTUwNTUsNiArNTIwMyw4IEBACiAgKiB4bWxQYXJzZVBJVGFyZ2V0OgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIHRoZSBuYW1lIG9mIGEgUEkKICAqCiAgKiBbMTddIFBJVGFyZ2V0IDo6PSBOYW1lIC0gKCgnWCcgfCAneCcpICgnTScgfCAnbScpICgnTCcgfCAnbCcpKQpAQCAtNTE2Myw2ICs1MzEzLDggQEAKICAqIHhtbFBhcnNlUEk6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgYW4gWE1MIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24uCiAgKgogICogWzE2XSBQSSA6Oj0gJzw/JyBQSVRhcmdldCAoUyAoQ2hhciogLSAoQ2hhciogJz8+JyBDaGFyKikpKT8gJz8+JwpAQCAtNTE4MSw3ICs1MzMzLDYgQEAKICAgICBpbnQgY3VyLCBsOwogICAgIGNvbnN0IHhtbENoYXIgKnRhcmdldDsKICAgICB4bWxQYXJzZXJJbnB1dFN0YXRlIHN0YXRlOwotICAgIGludCBjb3VudCA9IDA7CiAKICAgICBpZiAoKFJBVyA9PSAnPCcpICYmIChOWFQoMSkgPT0gJz8nKSkgewogCWludCBpbnB1dGlkID0gY3R4dC0+aW5wdXQtPmlkOwpAQCAtNTE5MSw3ICs1MzQyLDYgQEAKIAkgKiB0aGlzIGlzIGEgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbi4KIAkgKi8KIAlTS0lQKDIpOwotCVNIUklOSzsKIAogCS8qCiAJICogUGFyc2UgdGhlIHRhcmdldCBuYW1lIGFuZCBjaGVjayBmb3Igc3BlY2lhbCBzdXBwb3J0IGxpa2UKQEAgLTUyMTgsNyArNTM2OCw3IEBACiAJCSAgICBjdHh0LT5pbnN0YXRlID0gc3RhdGU7CiAJCXJldHVybjsKIAkgICAgfQotCSAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisJICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplKTsKIAkgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCXhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAkJY3R4dC0+aW5zdGF0ZSA9IHN0YXRlOwpAQCAtNTI0NCwyNCArNTM5NCw3IEBACiAJCSAgICBidWYgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuZXdfc2l6ZTsKIAkJfQotCQljb3VudCsrOwotCQlpZiAoY291bnQgPiA1MCkgewotCQkgICAgU0hSSU5LOwotCQkgICAgR1JPVzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCQkgICAgY291bnQgPSAwOwotCQl9Ci0JCUNPUFlfQlVGKGwsYnVmLGxlbixjdXIpOwotCQlORVhUTChsKTsKLQkJY3VyID0gQ1VSX0NIQVIobCk7Ci0JCWlmIChjdXIgPT0gMCkgewotCQkgICAgU0hSSU5LOwotCQkgICAgR1JPVzsKLQkJICAgIGN1ciA9IENVUl9DSEFSKGwpOwotCQl9CisJCUNPUFlfQlVGKGJ1ZiwgbGVuLCBjdXIpOwogICAgICAgICAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9QSV9OT1RfRklOSVNIRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQSSAlcyB0b28gYmlnIGZvdW5kIiwgdGFyZ2V0KTsKQEAgLTUyNjksOCArNTQwMiwxNCBAQAogICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CisJCU5FWFRMKGwpOworCQljdXIgPSBDVVJfQ0hBUihsKTsKIAkgICAgfQogCSAgICBidWZbbGVuXSA9IDA7CisgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikgeworICAgICAgICAgICAgICAgIHhtbEZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAJICAgIGlmIChjdXIgIT0gJz8nKSB7CiAJCXhtbEZhdGFsRXJyTXNnU3RyKGN0eHQsIFhNTF9FUlJfUElfTk9UX0ZJTklTSEVELAogCQkgICAgICAiUGFyc2VQSTogUEkgJXMgbmV2ZXIgZW5kIC4uLlxuIiwgdGFyZ2V0KTsKQEAgLTUzMTUsNyArNTQ1NCw5IEBACiAgKiB4bWxQYXJzZU5vdGF0aW9uRGVjbDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgotICogcGFyc2UgYSBub3RhdGlvbiBkZWNsYXJhdGlvbgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCisgKiBQYXJzZSBhIG5vdGF0aW9uIGRlY2xhcmF0aW9uLiBBbHdheXMgY29uc3VtZXMgJzwhJy4KICAqCiAgKiBbODJdIE5vdGF0aW9uRGVjbCA6Oj0gJzwhTk9UQVRJT04nIFMgTmFtZSBTIChFeHRlcm5hbElEIHwgIFB1YmxpY0lEKSBTPyAnPicKICAqCkBAIC01MzMzLDEwICs1NDc0LDEzIEBACiAgICAgeG1sQ2hhciAqUHViaWQ7CiAgICAgeG1sQ2hhciAqU3lzdGVtaWQ7CiAKLSAgICBpZiAoQ01QMTAoQ1VSX1BUUiwgJzwnLCAnIScsICdOJywgJ08nLCAnVCcsICdBJywgJ1QnLCAnSScsICdPJywgJ04nKSkgeworICAgIGlmICgoQ1VSICE9ICc8JykgfHwgKE5YVCgxKSAhPSAnIScpKQorICAgICAgICByZXR1cm47CisgICAgU0tJUCgyKTsKKworICAgIGlmIChDTVA4KENVUl9QVFIsICdOJywgJ08nLCAnVCcsICdBJywgJ1QnLCAnSScsICdPJywgJ04nKSkgewogCWludCBpbnB1dGlkID0gY3R4dC0+aW5wdXQtPmlkOwotCVNIUklOSzsKLQlTS0lQKDEwKTsKKwlTS0lQKDgpOwogCWlmIChTS0lQX0JMQU5LUyA9PSAwKSB7CiAJICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfU1BBQ0VfUkVRVUlSRUQsCiAJCQkgICAiU3BhY2UgcmVxdWlyZWQgYWZ0ZXIgJzwhTk9UQVRJT04nXG4iKTsKQEAgLTUzODcsNyArNTUzMSw5IEBACiAgKiB4bWxQYXJzZUVudGl0eURlY2w6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKLSAqIHBhcnNlIDwhRU5USVRZIGRlY2xhcmF0aW9ucworICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCisgKiBQYXJzZSBhbiBlbnRpdHkgZGVjbGFyYXRpb24uIEFsd2F5cyBjb25zdW1lcyAnPCEnLgogICoKICAqIFs3MF0gRW50aXR5RGVjbCA6Oj0gR0VEZWNsIHwgUEVEZWNsCiAgKgpAQCAtNTQxNCwxMSArNTU2MCwxNCBAQAogICAgIGludCBpc1BhcmFtZXRlciA9IDA7CiAgICAgeG1sQ2hhciAqb3JpZyA9IE5VTEw7CiAKKyAgICBpZiAoKENVUiAhPSAnPCcpIHx8IChOWFQoMSkgIT0gJyEnKSkKKyAgICAgICAgcmV0dXJuOworICAgIFNLSVAoMik7CisKICAgICAvKiBHUk9XOyBkb25lIGluIHRoZSBjYWxsZXIgKi8KLSAgICBpZiAoQ01QOChDVVJfUFRSLCAnPCcsICchJywgJ0UnLCAnTicsICdUJywgJ0knLCAnVCcsICdZJykpIHsKKyAgICBpZiAoQ01QNihDVVJfUFRSLCAnRScsICdOJywgJ1QnLCAnSScsICdUJywgJ1knKSkgewogCWludCBpbnB1dGlkID0gY3R4dC0+aW5wdXQtPmlkOwotCVNIUklOSzsKLQlTS0lQKDgpOworCVNLSVAoNik7CiAJaWYgKFNLSVBfQkxBTktTID09IDApIHsKIAkgICAgeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9TUEFDRV9SRVFVSVJFRCwKIAkJCSAgICJTcGFjZSByZXF1aXJlZCBhZnRlciAnPCFFTlRJVFknXG4iKTsKQEAgLTU1MTYsNyArNTY2NSw3IEBACiAJCQljdHh0LT5teURvYyA9IHhtbE5ld0RvYyhTQVhfQ09NUEFUX01PREUpOwogCQkJaWYgKGN0eHQtPm15RG9jID09IE5VTEwpIHsKIAkJCSAgICB4bWxFcnJNZW1vcnkoY3R4dCwgIk5ldyBEb2MgZmFpbGVkIik7Ci0JCQkgICAgcmV0dXJuOworCQkJICAgIGdvdG8gZG9uZTsKIAkJCX0KIAkJCWN0eHQtPm15RG9jLT5wcm9wZXJ0aWVzID0gWE1MX0RPQ19JTlRFUk5BTDsKIAkJICAgIH0KQEAgLTU1ODcsNyArNTczNiw3IEBACiAJCQkgICAgY3R4dC0+bXlEb2MgPSB4bWxOZXdEb2MoU0FYX0NPTVBBVF9NT0RFKTsKIAkJCSAgICBpZiAoY3R4dC0+bXlEb2MgPT0gTlVMTCkgewogCQkJICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgIk5ldyBEb2MgZmFpbGVkIik7Ci0JCQkJcmV0dXJuOworCQkJCWdvdG8gZG9uZTsKIAkJCSAgICB9CiAJCQkgICAgY3R4dC0+bXlEb2MtPnByb3BlcnRpZXMgPSBYTUxfRE9DX0lOVEVSTkFMOwogCQkJfQpAQCAtNTY1NCw2ICs1ODAzLDggQEAKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAdmFsdWU6ICBSZWNlaXZlIGEgcG9zc2libGUgZml4ZWQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZQogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogUGFyc2UgYW4gYXR0cmlidXRlIGRlZmF1bHQgZGVjbGFyYXRpb24KICAqCiAgKiBbNjBdIERlZmF1bHREZWNsIDo6PSAnI1JFUVVJUkVEJyB8ICcjSU1QTElFRCcgfCAoKCcjRklYRUQnIFMpPyBBdHRWYWx1ZSkKQEAgLTU3MTUsNiArNTg2Niw4IEBACiAgKiB4bWxQYXJzZU5vdGF0aW9uVHlwZToKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBOb3RhdGlvbiBhdHRyaWJ1dGUgdHlwZS4KICAqCiAgKiBOb3RlOiB0aGUgbGVhZGluZyAnTk9UQVRJT04nIFMgcGFydCBoYXMgYWxyZWFkeSBiZWluZyBwYXJzZWQuLi4KQEAgLTU3MzcsNyArNTg5MCw2IEBACiAJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9OT1RBVElPTl9OT1RfU1RBUlRFRCwgTlVMTCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBTSFJJTks7CiAgICAgZG8gewogICAgICAgICBORVhUOwogCVNLSVBfQkxBTktTOwpAQCAtNTc4Nyw2ICs1OTM5LDggQEAKICAqIHhtbFBhcnNlRW51bWVyYXRpb25UeXBlOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGFuIEVudW1lcmF0aW9uIGF0dHJpYnV0ZSB0eXBlLgogICoKICAqIFs1OV0gRW51bWVyYXRpb24gOjo9ICcoJyBTPyBObXRva2VuIChTPyAnfCcgUz8gTm10b2tlbikqIFM/ICcpJwpAQCAtNTgwNyw3ICs1OTYxLDYgQEAKIAl4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0FUVExJU1RfTk9UX1NUQVJURUQsIE5VTEwpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgU0hSSU5LOwogICAgIGRvIHsKICAgICAgICAgTkVYVDsKIAlTS0lQX0JMQU5LUzsKQEAgLTU4NTcsNiArNjAxMCw4IEBACiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICogQHRyZWU6ICB0aGUgZW51bWVyYXRpb24gdHJlZSBidWlsdCB3aGlsZSBwYXJzaW5nCiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBFbnVtZXJhdGVkIGF0dHJpYnV0ZSB0eXBlLgogICoKICAqIFs1N10gRW51bWVyYXRlZFR5cGUgOjo9IE5vdGF0aW9uVHlwZSB8IEVudW1lcmF0aW9uCkBAIC01ODkwLDYgKzYwNDUsOCBAQAogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEB0cmVlOiAgdGhlIGVudW1lcmF0aW9uIHRyZWUgYnVpbHQgd2hpbGUgcGFyc2luZwogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgdGhlIEF0dHJpYnV0ZSBsaXN0IGRlZiBmb3IgYW4gZWxlbWVudAogICoKICAqIFs1NF0gQXR0VHlwZSA6Oj0gU3RyaW5nVHlwZSB8IFRva2VuaXplZFR5cGUgfCBFbnVtZXJhdGVkVHlwZQpAQCAtNTkzMiw3ICs2MDg5LDYgQEAKICAqLwogaW50CiB4bWxQYXJzZUF0dHJpYnV0ZVR5cGUoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxFbnVtZXJhdGlvblB0ciAqdHJlZSkgewotICAgIFNIUklOSzsKICAgICBpZiAoQ01QNShDVVJfUFRSLCAnQycsICdEJywgJ0EnLCAnVCcsICdBJykpIHsKIAlTS0lQKDUpOwogCXJldHVybihYTUxfQVRUUklCVVRFX0NEQVRBKTsKQEAgLTU5NjUsNyArNjEyMSw5IEBACiAgKiB4bWxQYXJzZUF0dHJpYnV0ZUxpc3REZWNsOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCi0gKiA6IHBhcnNlIHRoZSBBdHRyaWJ1dGUgbGlzdCBkZWYgZm9yIGFuIGVsZW1lbnQKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgorICogUGFyc2UgYW4gYXR0cmlidXRlIGxpc3QgZGVjbGFyYXRpb24gZm9yIGFuIGVsZW1lbnQuIEFsd2F5cyBjb25zdW1lcyAnPCEnLgogICoKICAqIFs1Ml0gQXR0bGlzdERlY2wgOjo9ICc8IUFUVExJU1QnIFMgTmFtZSBBdHREZWYqIFM/ICc+JwogICoKQEAgLTU5NzgsMTAgKzYxMzYsMTQgQEAKICAgICBjb25zdCB4bWxDaGFyICphdHRyTmFtZTsKICAgICB4bWxFbnVtZXJhdGlvblB0ciB0cmVlOwogCi0gICAgaWYgKENNUDkoQ1VSX1BUUiwgJzwnLCAnIScsICdBJywgJ1QnLCAnVCcsICdMJywgJ0knLCAnUycsICdUJykpIHsKKyAgICBpZiAoKENVUiAhPSAnPCcpIHx8IChOWFQoMSkgIT0gJyEnKSkKKyAgICAgICAgcmV0dXJuOworICAgIFNLSVAoMik7CisKKyAgICBpZiAoQ01QNyhDVVJfUFRSLCAnQScsICdUJywgJ1QnLCAnTCcsICdJJywgJ1MnLCAnVCcpKSB7CiAJaW50IGlucHV0aWQgPSBjdHh0LT5pbnB1dC0+aWQ7CiAKLQlTS0lQKDkpOworCVNLSVAoNyk7CiAJaWYgKFNLSVBfQkxBTktTID09IDApIHsKIAkgICAgeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9TUEFDRV9SRVFVSVJFRCwKIAkJICAgICAgICAgICAgICAgICAiU3BhY2UgcmVxdWlyZWQgYWZ0ZXIgJzwhQVRUTElTVCdcbiIpOwpAQCAtNjA4Niw2ICs2MjQ4LDggQEAKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAaW5wdXRjaGs6ICB0aGUgaW5wdXQgdXNlZCBmb3IgdGhlIGN1cnJlbnQgZW50aXR5LCBuZWVkZWQgZm9yIGJvdW5kYXJ5IGNoZWNrcwogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgdGhlIGRlY2xhcmF0aW9uIGZvciBhIE1peGVkIEVsZW1lbnQgY29udGVudAogICogVGhlIGxlYWRpbmcgJygnIGFuZCBzcGFjZXMgaGF2ZSBiZWVuIHNraXBwZWQgaW4geG1sUGFyc2VFbGVtZW50Q29udGVudERlY2wKICAqCkBAIC02MTA5LDcgKzYyNzMsNiBAQAogICAgIGlmIChDTVA3KENVUl9QVFIsICcjJywgJ1AnLCAnQycsICdEJywgJ0EnLCAnVCcsICdBJykpIHsKIAlTS0lQKDcpOwogCVNLSVBfQkxBTktTOwotCVNIUklOSzsKIAlpZiAoUkFXID09ICcpJykgewogCSAgICBpZiAoY3R4dC0+aW5wdXQtPmlkICE9IGlucHV0Y2hrKSB7CiAJCXhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfRU5USVRZX0JPVU5EQVJZLApAQCAtNjI4MSw3ICs2NDQ0LDYgQEAKIAlHUk9XOwogICAgIH0KICAgICBTS0lQX0JMQU5LUzsKLSAgICBTSFJJTks7CiAgICAgd2hpbGUgKChSQVcgIT0gJyknKSAmJiAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikpIHsKICAgICAgICAgLyoKIAkgKiBFYWNoIGxvb3Agd2UgcGFyc2Ugb25lIHNlcGFyYXRvciBhbmQgb25lIGVsZW1lbnQuCkBAIC02NTA0LDYgKzY2NjYsOCBAQAogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEBpbnB1dGNoazogIHRoZSBpbnB1dCB1c2VkIGZvciB0aGUgY3VycmVudCBlbnRpdHksIG5lZWRlZCBmb3IgYm91bmRhcnkgY2hlY2tzCiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGEgTWl4ZWQgRWxlbWVudCBjb250ZW50CiAgKiBUaGUgbGVhZGluZyAnKCcgYW5kIHNwYWNlcyBoYXZlIGJlZW4gc2tpcHBlZCBpbiB4bWxQYXJzZUVsZW1lbnRDb250ZW50RGVjbAogICoKQEAgLTY1NDEsNiArNjcwNSw4IEBACiAgKiBAbmFtZTogIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IGJlaW5nIGRlZmluZWQuCiAgKiBAcmVzdWx0OiAgdGhlIEVsZW1lbnQgQ29udGVudCBwb2ludGVyIHdpbGwgYmUgc3RvcmVkIGhlcmUgaWYgYW55CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSB0aGUgZGVjbGFyYXRpb24gZm9yIGFuIEVsZW1lbnQgY29udGVudCBlaXRoZXIgTWl4ZWQgb3IgQ2hpbGRyZW4sCiAgKiB0aGUgY2FzZXMgRU1QVFkgYW5kIEFOWSBhcmUgaGFuZGxlZCBkaXJlY3RseSBpbiB4bWxQYXJzZUVsZW1lbnREZWNsCiAgKgpAQCAtNjU4NSw3ICs2NzUxLDkgQEAKICAqIHhtbFBhcnNlRWxlbWVudERlY2w6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKLSAqIHBhcnNlIGFuIEVsZW1lbnQgZGVjbGFyYXRpb24uCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKKyAqIFBhcnNlIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24uIEFsd2F5cyBjb25zdW1lcyAnPCEnLgogICoKICAqIFs0NV0gZWxlbWVudGRlY2wgOjo9ICc8IUVMRU1FTlQnIFMgTmFtZSBTIGNvbnRlbnRzcGVjIFM/ICc+JwogICoKQEAgLTY2MDAsMTEgKzY3NjgsMTUgQEAKICAgICBpbnQgcmV0ID0gLTE7CiAgICAgeG1sRWxlbWVudENvbnRlbnRQdHIgY29udGVudCAgPSBOVUxMOwogCisgICAgaWYgKChDVVIgIT0gJzwnKSB8fCAoTlhUKDEpICE9ICchJykpCisgICAgICAgIHJldHVybihyZXQpOworICAgIFNLSVAoMik7CisKICAgICAvKiBHUk9XOyBkb25lIGluIHRoZSBjYWxsZXIgKi8KLSAgICBpZiAoQ01QOShDVVJfUFRSLCAnPCcsICchJywgJ0UnLCAnTCcsICdFJywgJ00nLCAnRScsICdOJywgJ1QnKSkgeworICAgIGlmIChDTVA3KENVUl9QVFIsICdFJywgJ0wnLCAnRScsICdNJywgJ0UnLCAnTicsICdUJykpIHsKIAlpbnQgaW5wdXRpZCA9IGN0eHQtPmlucHV0LT5pZDsKIAotCVNLSVAoOSk7CisJU0tJUCg3KTsKIAlpZiAoU0tJUF9CTEFOS1MgPT0gMCkgewogCSAgICB4bWxGYXRhbEVyck1zZyhjdHh0LCBYTUxfRVJSX1NQQUNFX1JFUVVJUkVELAogCQkgICAgICAgICAgICJTcGFjZSByZXF1aXJlZCBhZnRlciAnRUxFTUVOVCdcbiIpOwpAQCAtNjY5Miw2ICs2ODY0LDggQEAKICAqIHhtbFBhcnNlQ29uZGl0aW9uYWxTZWN0aW9ucwogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBQYXJzZSBhIGNvbmRpdGlvbmFsIHNlY3Rpb24uIEFsd2F5cyBjb25zdW1lcyAnPCFbJy4KKyAqCiAgKiBbNjFdIGNvbmRpdGlvbmFsU2VjdCA6Oj0gaW5jbHVkZVNlY3QgfCBpZ25vcmVTZWN0CiAgKiBbNjJdIGluY2x1ZGVTZWN0IDo6PSAnPCFbJyBTPyAnSU5DTFVERScgUz8gJ1snIGV4dFN1YnNldERlY2wgJ11dPicKICAqIFs2M10gaWdub3JlU2VjdCA6Oj0gJzwhWycgUz8gJ0lHTk9SRScgUz8gJ1snIGlnbm9yZVNlY3RDb250ZW50cyogJ11dPicKQEAgLTY3NDIsOCArNjkxNiw2IEBACiAgICAgICAgICAgICAgICAgaW5wdXRJZHNbZGVwdGhdID0gaWQ7CiAgICAgICAgICAgICAgICAgZGVwdGgrKzsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoQ01QNihDVVJfUFRSLCAnSScsICdHJywgJ04nLCAnTycsICdSJywgJ0UnKSkgewotICAgICAgICAgICAgICAgIGludCBzdGF0ZTsKLSAgICAgICAgICAgICAgICB4bWxQYXJzZXJJbnB1dFN0YXRlIGluc3RhdGU7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGlnbm9yZURlcHRoID0gMDsKIAogICAgICAgICAgICAgICAgIFNLSVAoNik7CkBAIC02NzYwLDE1ICs2OTMyLDYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTkVYVDsKIAotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogUGFyc2UgdXAgdG8gdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uYWwgc2VjdGlvbiBidXQgZGlzYWJsZQotICAgICAgICAgICAgICAgICAqIFNBWCBldmVudCBnZW5lcmF0aW5nIERURCBidWlsZGluZyBpbiB0aGUgbWVhbnRpbWUKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBzdGF0ZSA9IGN0eHQtPmRpc2FibGVTQVg7Ci0gICAgICAgICAgICAgICAgaW5zdGF0ZSA9IGN0eHQtPmluc3RhdGU7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eHQtPnJlY292ZXJ5ID09IDApIGN0eHQtPmRpc2FibGVTQVggPSAxOwotICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0lHTk9SRTsKLQogICAgICAgICAgICAgICAgIHdoaWxlIChSQVcgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKFJBVyA9PSAnPCcpICYmIChOWFQoMSkgPT0gJyEnKSAmJiAoTlhUKDIpID09ICdbJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNLSVAoMyk7CkBAIC02Nzg5LDkgKzY5NTIsNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY3R4dC0+ZGlzYWJsZVNBWCA9IHN0YXRlOwotICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBpbnN0YXRlOwotCiAJCWlmIChSQVcgPT0gMCkgewogCQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9DT05EU0VDX05PVF9GSU5JU0hFRCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC02ODE2LDIzICs2OTc2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiB0aGUgc2FtZSBlbnRpdHlcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU0tJUCgzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBpZCA9IGN0eHQtPmlucHV0LT5pZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29ucyA9IENVUl9DT05TVU1FRDsKLQorICAgICAgICB9IGVsc2UgaWYgKChSQVcgPT0gJzwnKSAmJiAoKE5YVCgxKSA9PSAnIScpIHx8IChOWFQoMSkgPT0gJz8nKSkpIHsKICAgICAgICAgICAgIHhtbFBhcnNlTWFya3VwRGVjbChjdHh0KTsKLQotICAgICAgICAgICAgaWYgKChpZCA9PSBjdHh0LT5pbnB1dC0+aWQpICYmIChjb25zID09IENVUl9DT05TVU1FRCkpIHsKLSAgICAgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VYVF9TVUJTRVRfTk9UX0ZJTklTSEVELCBOVUxMKTsKLSAgICAgICAgICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VYVF9TVUJTRVRfTk9UX0ZJTklTSEVELCBOVUxMKTsKKyAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlcHRoID09IDApCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBTS0lQX0JMQU5LUzsKKyAgICAgICAgU0hSSU5LOwogICAgICAgICBHUk9XOwogICAgIH0KIApAQCAtNjg0NCw3ICs3MDAwLDkgQEAKICAqIHhtbFBhcnNlTWFya3VwRGVjbDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgotICogcGFyc2UgTWFya3VwIGRlY2xhcmF0aW9ucworICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCisgKiBQYXJzZSBtYXJrdXAgZGVjbGFyYXRpb25zLiBBbHdheXMgY29uc3VtZXMgJzwhJyBvciAnPD8nLgogICoKICAqIFsyOV0gbWFya3VwZGVjbCA6Oj0gZWxlbWVudGRlY2wgfCBBdHRsaXN0RGVjbCB8IEVudGl0eURlY2wgfAogICogICAgICAgICAgICAgICAgICAgICBOb3RhdGlvbkRlY2wgfCBQSSB8IENvbW1lbnQKQEAgLTY4NzMsNiArNzAzMSw4IEBACiAJCQl4bWxQYXJzZUVsZW1lbnREZWNsKGN0eHQpOwogCQkgICAgZWxzZSBpZiAoTlhUKDMpID09ICdOJykKIAkJCXhtbFBhcnNlRW50aXR5RGVjbChjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgU0tJUCgyKTsKIAkJICAgIGJyZWFrOwogCSAgICAgICAgY2FzZSAnQSc6CiAJCSAgICB4bWxQYXJzZUF0dHJpYnV0ZUxpc3REZWNsKGN0eHQpOwpAQCAtNjg4NSw2ICs3MDQ1LDcgQEAKIAkJICAgIGJyZWFrOwogCQlkZWZhdWx0OgogCQkgICAgLyogdGhlcmUgaXMgYW4gZXJyb3IgYnV0IGl0IHdpbGwgYmUgZGV0ZWN0ZWQgbGF0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgU0tJUCgyKTsKIAkJICAgIGJyZWFrOwogCSAgICB9CiAJfSBlbHNlIGlmIChOWFQoMSkgPT0gJz8nKSB7CkBAIC02OTA2LDYgKzcwNjcsOCBAQAogICogeG1sUGFyc2VUZXh0RGVjbDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgZGVjbGFyYXRpb24gaGVhZGVyIGZvciBleHRlcm5hbCBlbnRpdGllcwogICoKICAqIFs3N10gVGV4dERlY2wgOjo9ICc8P3htbCcgVmVyc2lvbkluZm8/IEVuY29kaW5nRGVjbCBTPyAnPz4nCkBAIC02OTE0LDcgKzcwNzcsNiBAQAogdm9pZAogeG1sUGFyc2VUZXh0RGVjbCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKICAgICB4bWxDaGFyICp2ZXJzaW9uOwotICAgIGNvbnN0IHhtbENoYXIgKmVuY29kaW5nOwogICAgIGludCBvbGRzdGF0ZTsKIAogICAgIC8qCkBAIC02OTUzLDcgKzcxMTUsOSBAQAogICAgIC8qCiAgICAgICogV2UgbXVzdCBoYXZlIHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbgogICAgICAqLwotICAgIGVuY29kaW5nID0geG1sUGFyc2VFbmNvZGluZ0RlY2woY3R4dCk7CisgICAgeG1sUGFyc2VFbmNvZGluZ0RlY2woY3R4dCk7CisgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoY3R4dC0+ZXJyTm8gPT0gWE1MX0VSUl9VTlNVUFBPUlRFRF9FTkNPRElORykgewogCS8qCiAJICogVGhlIFhNTCBSRUMgaW5zdHJ1Y3RzIHVzIHRvIHN0b3AgcGFyc2luZyByaWdodCBoZXJlCkBAIC02OTYxLDEwICs3MTI1LDYgQEAKICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IG9sZHN0YXRlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgoZW5jb2RpbmcgPT0gTlVMTCkgJiYgKGN0eHQtPmVyck5vID09IFhNTF9FUlJfT0spKSB7Ci0JeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9NSVNTSU5HX0VOQ09ESU5HLAotCQkgICAgICAgIk1pc3NpbmcgZW5jb2RpbmcgaW4gdGV4dCBkZWNsYXJhdGlvblxuIik7Ci0gICAgfQogCiAgICAgU0tJUF9CTEFOS1M7CiAgICAgaWYgKChSQVcgPT0gJz8nKSAmJiAoTlhUKDEpID09ICc+JykpIHsKQEAgLTY5NzQsMTIgKzcxMzQsMTggQEAKIAl4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX1hNTERFQ0xfTk9UX0ZJTklTSEVELCBOVUxMKTsKIAlORVhUOwogICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjOworCiAJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9YTUxERUNMX05PVF9GSU5JU0hFRCwgTlVMTCk7Ci0JTU9WRVRPX0VORFRBRyhDVVJfUFRSKTsKLQlORVhUOworICAgICAgICB3aGlsZSAoKGMgPSBDVVIpICE9IDApIHsKKyAgICAgICAgICAgIE5FWFQ7CisgICAgICAgICAgICBpZiAoYyA9PSAnPicpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBjdHh0LT5pbnN0YXRlID0gb2xkc3RhdGU7CisgICAgaWYgKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgIGN0eHQtPmluc3RhdGUgPSBvbGRzdGF0ZTsKIH0KIAogLyoqCkBAIC02OTk4LDIxICs3MTY0LDggQEAKIHhtbFBhcnNlRXh0ZXJuYWxTdWJzZXQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpFeHRlcm5hbElELAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpTeXN0ZW1JRCkgewogICAgIHhtbERldGVjdFNBWDIoY3R4dCk7Ci0gICAgR1JPVzsKIAotICAgIGlmICgoY3R4dC0+ZW5jb2RpbmcgPT0gTlVMTCkgJiYKLSAgICAgICAgKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyID49IDQpKSB7Ci0gICAgICAgIHhtbENoYXIgc3RhcnRbNF07Ci0JeG1sQ2hhckVuY29kaW5nIGVuYzsKLQotCXN0YXJ0WzBdID0gUkFXOwotCXN0YXJ0WzFdID0gTlhUKDEpOwotCXN0YXJ0WzJdID0gTlhUKDIpOwotCXN0YXJ0WzNdID0gTlhUKDMpOwotCWVuYyA9IHhtbERldGVjdENoYXJFbmNvZGluZyhzdGFydCwgNCk7Ci0JaWYgKGVuYyAhPSBYTUxfQ0hBUl9FTkNPRElOR19OT05FKQotCSAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBlbmMpOwotICAgIH0KKyAgICB4bWxEZXRlY3RFbmNvZGluZyhjdHh0KTsKIAogICAgIGlmIChDTVA1KENVUl9QVFIsICc8JywgJz8nLCAneCcsICdtJywgJ2wnKSkgewogCXhtbFBhcnNlVGV4dERlY2woY3R4dCk7CkBAIC03MDM4LDIzICs3MTkxLDE5IEBACiAgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRFREOwogICAgIGN0eHQtPmV4dGVybmFsID0gMTsKICAgICBTS0lQX0JMQU5LUzsKLSAgICB3aGlsZSAoKChSQVcgPT0gJzwnKSAmJiAoTlhUKDEpID09ICc/JykpIHx8Ci0gICAgICAgICAgICgoUkFXID09ICc8JykgJiYgKE5YVCgxKSA9PSAnIScpKSB8fAotCSAgIChSQVcgPT0gJyUnKSkgewotCWludCBpZCA9IGN0eHQtPmlucHV0LT5pZDsKLQl1bnNpZ25lZCBsb25nIGNvbnMgPSBDVVJfQ09OU1VNRUQ7Ci0KKyAgICB3aGlsZSAoKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpICYmIChSQVcgIT0gMCkpIHsKIAlHUk9XOwogICAgICAgICBpZiAoKFJBVyA9PSAnPCcpICYmIChOWFQoMSkgPT0gJyEnKSAmJiAoTlhUKDIpID09ICdbJykpIHsKLQkgICAgeG1sUGFyc2VDb25kaXRpb25hbFNlY3Rpb25zKGN0eHQpOwotCX0gZWxzZQotCSAgICB4bWxQYXJzZU1hcmt1cERlY2woY3R4dCk7CisgICAgICAgICAgICB4bWxQYXJzZUNvbmRpdGlvbmFsU2VjdGlvbnMoY3R4dCk7CisgICAgICAgIH0gZWxzZSBpZiAoKFJBVyA9PSAnPCcpICYmICgoTlhUKDEpID09ICchJykgfHwgKE5YVCgxKSA9PSAnPycpKSkgeworICAgICAgICAgICAgeG1sUGFyc2VNYXJrdXBEZWNsKGN0eHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9FWFRfU1VCU0VUX05PVF9GSU5JU0hFRCwgTlVMTCk7CisgICAgICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIFNLSVBfQkxBTktTOwotCi0JaWYgKChpZCA9PSBjdHh0LT5pbnB1dC0+aWQpICYmIChjb25zID09IENVUl9DT05TVU1FRCkpIHsKLQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9FWFRfU1VCU0VUX05PVF9GSU5JU0hFRCwgTlVMTCk7Ci0JICAgIGJyZWFrOwotCX0KKyAgICAgICAgU0hSSU5LOwogICAgIH0KIAogICAgIGlmIChSQVcgIT0gMCkgewpAQCAtNzA2NywxMSArNzIxNiwxNSBAQAogICogeG1sUGFyc2VSZWZlcmVuY2U6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgYW5kIGhhbmRsZSBlbnRpdHkgcmVmZXJlbmNlcyBpbiBjb250ZW50LCBkZXBlbmRpbmcgb24gdGhlIFNBWAogICogaW50ZXJmYWNlLCB0aGlzIG1heSBlbmQtdXAgaW4gYSBjYWxsIHRvIGNoYXJhY3RlcigpIGlmIHRoaXMgaXMgYQogICogQ2hhclJlZiwgYSBwcmVkZWZpbmVkIGVudGl0eSwgaWYgdGhlcmUgaXMgbm8gcmVmZXJlbmNlKCkgY2FsbGJhY2suCiAgKiBvciBpZiB0aGUgcGFyc2VyIHdhcyBhc2tlZCB0byBzd2l0Y2ggdG8gdGhhdCBtb2RlLgogICoKKyAqIEFsd2F5cyBjb25zdW1lcyAnJicuCisgKgogICogWzY3XSBSZWZlcmVuY2UgOjo9IEVudGl0eVJlZiB8IENoYXJSZWYKICAqLwogdm9pZApAQCAtNzA5Miw0MiArNzI0NSwxOSBAQAogICAgIGlmIChOWFQoMSkgPT0gJyMnKSB7CiAJaW50IGkgPSAwOwogCXhtbENoYXIgb3V0WzE2XTsKLQlpbnQgaGV4ID0gTlhUKDIpOwogCWludCB2YWx1ZSA9IHhtbFBhcnNlQ2hhclJlZihjdHh0KTsKIAogCWlmICh2YWx1ZSA9PSAwKQogCSAgICByZXR1cm47Ci0JaWYgKGN0eHQtPmNoYXJzZXQgIT0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGOCkgewotCSAgICAvKgotCSAgICAgKiBTbyB3ZSBhcmUgdXNpbmcgbm9uLVVURi04IGJ1ZmZlcnMKLQkgICAgICogQ2hlY2sgdGhhdCB0aGUgY2hhciBmaXQgb24gOGJpdHMsIGlmIG5vdAotCSAgICAgKiBnZW5lcmF0ZSBhIENoYXJSZWYuCi0JICAgICAqLwotCSAgICBpZiAodmFsdWUgPD0gMHhGRikgewotCQlvdXRbMF0gPSB2YWx1ZTsKLQkJb3V0WzFdID0gMDsKLQkJaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYgKGN0eHQtPnNheC0+Y2hhcmFjdGVycyAhPSBOVUxMKSAmJgotCQkgICAgKCFjdHh0LT5kaXNhYmxlU0FYKSkKLQkJICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwgb3V0LCAxKTsKLQkgICAgfSBlbHNlIHsKLQkJaWYgKChoZXggPT0gJ3gnKSB8fCAoaGV4ID09ICdYJykpCi0JCSAgICBzbnByaW50ZigoY2hhciAqKW91dCwgc2l6ZW9mKG91dCksICIjeCVYIiwgdmFsdWUpOwotCQllbHNlCi0JCSAgICBzbnByaW50ZigoY2hhciAqKW91dCwgc2l6ZW9mKG91dCksICIjJWQiLCB2YWx1ZSk7Ci0JCWlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmIChjdHh0LT5zYXgtPnJlZmVyZW5jZSAhPSBOVUxMKSAmJgotCQkgICAgKCFjdHh0LT5kaXNhYmxlU0FYKSkKLQkJICAgIGN0eHQtPnNheC0+cmVmZXJlbmNlKGN0eHQtPnVzZXJEYXRhLCBvdXQpOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgLyoKLQkgICAgICogSnVzdCBlbmNvZGUgdGhlIHZhbHVlIGluIFVURi04Ci0JICAgICAqLwotCSAgICBDT1BZX0JVRigwICxvdXQsIGksIHZhbHVlKTsKLQkgICAgb3V0W2ldID0gMDsKLQkgICAgaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYgKGN0eHQtPnNheC0+Y2hhcmFjdGVycyAhPSBOVUxMKSAmJgotCQkoIWN0eHQtPmRpc2FibGVTQVgpKQotCQljdHh0LT5zYXgtPmNoYXJhY3RlcnMoY3R4dC0+dXNlckRhdGEsIG91dCwgaSk7Ci0JfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEp1c3QgZW5jb2RlIHRoZSB2YWx1ZSBpbiBVVEYtOAorICAgICAgICAgKi8KKyAgICAgICAgQ09QWV9CVUYob3V0LCBpLCB2YWx1ZSk7CisgICAgICAgIG91dFtpXSA9IDA7CisgICAgICAgIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmIChjdHh0LT5zYXgtPmNoYXJhY3RlcnMgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICghY3R4dC0+ZGlzYWJsZVNBWCkpCisgICAgICAgICAgICBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoY3R4dC0+dXNlckRhdGEsIG91dCwgaSk7CiAJcmV0dXJuOwogICAgIH0KIApAQCAtNzEzOCw3ICs3MjY4LDcgQEAKICAgICBpZiAoZW50ID09IE5VTEwpIHJldHVybjsKICAgICBpZiAoIWN0eHQtPndlbGxGb3JtZWQpCiAJcmV0dXJuOwotICAgIHdhc19jaGVja2VkID0gZW50LT5jaGVja2VkOworICAgIHdhc19jaGVja2VkID0gZW50LT5mbGFncyAmIFhNTF9FTlRfUEFSU0VEOwogCiAgICAgLyogc3BlY2lhbCBjYXNlIG9mIHByZWRlZmluZWQgZW50aXRpZXMgKi8KICAgICBpZiAoKGVudC0+bmFtZSA9PSBOVUxMKSB8fApAQCAtNzE2MywxMiArNzI5Myw0NCBAQAogICAgICAqIG9mIHZhbGlkYXRpbmcsIG9yIHN1YnN0aXR1dGluZyBlbnRpdGllcyB3ZXJlIGdpdmVuLiBEb2luZyBzbyBpcwogICAgICAqIGZhciBtb3JlIHNlY3VyZSBhcyB0aGUgcGFyc2VyIHdpbGwgb25seSBwcm9jZXNzIGRhdGEgY29taW5nIGZyb20KICAgICAgKiB0aGUgZG9jdW1lbnQgZW50aXR5IGJ5IGRlZmF1bHQuCisgICAgICoKKyAgICAgKiBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHNpbmNlIGVudGl0aWVzIGNhbiBiZQorICAgICAqIGV4cGFuZGVkIHdpdGggZGlmZmVyZW50IG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgaW4gc2NvcGUuCisgICAgICogRm9yIGV4YW1wbGU6CisgICAgICoKKyAgICAgKiA8IURPQ1RZUEUgZG9jIFsKKyAgICAgKiAgIDwhRU5USVRZIGVudCAiPG5zOmVsZW0vPiI+CisgICAgICogXT4KKyAgICAgKiA8ZG9jPgorICAgICAqICAgPGRlY2wxIHhtbG5zOm5zPSJ1cm46bnMxIj4KKyAgICAgKiAgICAgJmVudDsKKyAgICAgKiAgIDwvZGVjbDE+CisgICAgICogICA8ZGVjbDIgeG1sbnM6bnM9InVybjpuczIiPgorICAgICAqICAgICAmZW50OworICAgICAqICAgPC9kZWNsMj4KKyAgICAgKiA8L2RvYz4KKyAgICAgKgorICAgICAqIFByb3Bvc2VkIGZpeDoKKyAgICAgKgorICAgICAqIC0gUmVtb3ZlIHRoZSBlbnQtPm93bmVyIG9wdGltaXphdGlvbiB3aGljaCB0cmllcyB0byBhdm9pZCB0aGUKKyAgICAgKiAgIGluaXRpYWwgY29weSBvZiB0aGUgZW50aXR5LiBBbHdheXMgbWFrZSBlbnRpdGllcyBvd24gdGhlCisgICAgICogICBzdWJ0cmVlLgorICAgICAqIC0gSWdub3JlIGN1cnJlbnQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB3aGVuIHBhcnNpbmcgdGhlCisgICAgICogICBlbnRpdHkuIElmIGEgcHJlZml4IGNhbid0IGJlIHJlc29sdmVkLCBkb24ndCByZXBvcnQgYW4gZXJyb3IKKyAgICAgKiAgIGJ1dCBtYXJrIGl0IGFzIHVucmVzb2x2ZWQuCisgICAgICogLSBUcnkgdG8gcmVzb2x2ZSB0aGVzZSBwcmVmaXhlcyB3aGVuIGV4cGFuZGluZyB0aGUgZW50aXR5LgorICAgICAqICAgVGhpcyB3aWxsIHJlcXVpcmUgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHhtbFN0YXRpY0NvcHlOb2RlCisgICAgICogICB3aGljaCBjYW4gYWxzbyBtYWtlIHVzZSBvZiB0aGUgbmFtZXNwYWNlIGhhc2ggdGFibGUgdG8gYXZvaWQKKyAgICAgKiAgIHF1YWRyYXRpYyBiZWhhdmlvci4KKyAgICAgKgorICAgICAqIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHNpbXBseSByZXBhcnNlIHRoZSBlbnRpdHkgb24gZWFjaAorICAgICAqIGV4cGFuc2lvbiBsaWtlIHdlIGFscmVhZHkgZG8gd2l0aCBjdXN0b20gU0FYIGNhbGxiYWNrcy4KKyAgICAgKiBFeHRlcm5hbCBlbnRpdHkgY29udGVudCBzaG91bGQgYmUgY2FjaGVkIGluIHRoaXMgY2FzZS4KICAgICAgKi8KLSAgICBpZiAoKChlbnQtPmNoZWNrZWQgPT0gMCkgfHwKLSAgICAgICAgICgoZW50LT5jaGlsZHJlbiA9PSBOVUxMKSAmJiAoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9OT0VOVCkpKSAmJgorICAgIGlmICgoKGVudC0+ZmxhZ3MgJiBYTUxfRU5UX1BBUlNFRCkgPT0gMCkgJiYKICAgICAgICAgKChlbnQtPmV0eXBlICE9IFhNTF9FWFRFUk5BTF9HRU5FUkFMX1BBUlNFRF9FTlRJVFkpIHx8CiAgICAgICAgICAoY3R4dC0+b3B0aW9ucyAmIChYTUxfUEFSU0VfTk9FTlQgfCBYTUxfUEFSU0VfRFREVkFMSUQpKSkpIHsKLQl1bnNpZ25lZCBsb25nIG9sZG5iZW50ID0gY3R4dC0+bmJlbnRpdGllcywgZGlmZjsKKwl1bnNpZ25lZCBsb25nIG9sZHNpemVlbnRjb3B5ID0gY3R4dC0+c2l6ZWVudGNvcHk7CiAKIAkvKgogCSAqIFRoaXMgaXMgYSBiaXQgaGFja2lzaCBidXQgdGhpcyBzZWVtcyB0aGUgYmVzdApAQCAtNzE4MSw2ICs3MzQzLDE3IEBACiAJZWxzZQogCSAgICB1c2VyX2RhdGEgPSBjdHh0LT51c2VyRGF0YTsKIAorICAgICAgICAvKiBBdm9pZCBvdmVyZmxvdyBhcyBtdWNoIGFzIHBvc3NpYmxlICovCisgICAgICAgIGN0eHQtPnNpemVlbnRjb3B5ID0gMDsKKworICAgICAgICBpZiAoZW50LT5mbGFncyAmIFhNTF9FTlRfRVhQQU5ESU5HKSB7CisgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VOVElUWV9MT09QLCBOVUxMKTsKKyAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnQtPmZsYWdzIHw9IFhNTF9FTlRfRVhQQU5ESU5HOworCiAJLyoKIAkgKiBDaGVjayB0aGF0IHRoaXMgZW50aXR5IGlzIHdlbGwgZm9ybWVkCiAJICogNC4zLjI6IEFuIGludGVybmFsIGdlbmVyYWwgcGFyc2VkIGVudGl0eSBpcyB3ZWxsLWZvcm1lZApAQCAtNzIwNSw4NyArNzM3OCw2NyBAQAogCQkJICJpbnZhbGlkIGVudGl0eSB0eXBlIGZvdW5kXG4iLCBOVUxMKTsKIAl9CiAKLQkvKgotCSAqIFN0b3JlIHRoZSBudW1iZXIgb2YgZW50aXRpZXMgbmVlZGluZyBwYXJzaW5nIGZvciB0aGlzIGVudGl0eQotCSAqIGNvbnRlbnQgYW5kIGRvIGNoZWNraW5ncwotCSAqLwotICAgICAgICBkaWZmID0gY3R4dC0+bmJlbnRpdGllcyAtIG9sZG5iZW50ICsgMTsKLSAgICAgICAgaWYgKGRpZmYgPiBJTlRfTUFYIC8gMikKLSAgICAgICAgICAgIGRpZmYgPSBJTlRfTUFYIC8gMjsKLSAgICAgICAgZW50LT5jaGVja2VkID0gZGlmZiAqIDI7Ci0JaWYgKChlbnQtPmNvbnRlbnQgIT0gTlVMTCkgJiYgKHhtbFN0cmNocihlbnQtPmNvbnRlbnQsICc8JykpKQotCSAgICBlbnQtPmNoZWNrZWQgfD0gMTsKKyAgICAgICAgZW50LT5mbGFncyAmPSB+WE1MX0VOVF9FWFBBTkRJTkc7CisgICAgICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9QQVJTRUQgfCBYTUxfRU5UX0NIRUNLRUQ7CisgICAgICAgIGVudC0+ZXhwYW5kZWRTaXplID0gY3R4dC0+c2l6ZWVudGNvcHk7CiAJaWYgKHJldCA9PSBYTUxfRVJSX0VOVElUWV9MT09QKSB7Ci0JICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRU5USVRZX0xPT1AsIE5VTEwpOwogICAgICAgICAgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKIAkgICAgeG1sRnJlZU5vZGVMaXN0KGxpc3QpOwogCSAgICByZXR1cm47CiAJfQotCWlmICh4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCAwLCBlbnQsIDApKSB7CisJaWYgKHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIG9sZHNpemVlbnRjb3B5KSkgewogCSAgICB4bWxGcmVlTm9kZUxpc3QobGlzdCk7CiAJICAgIHJldHVybjsKIAl9CiAKIAlpZiAoKHJldCA9PSBYTUxfRVJSX09LKSAmJiAobGlzdCAhPSBOVUxMKSkgewotCSAgICBpZiAoKChlbnQtPmV0eXBlID09IFhNTF9JTlRFUk5BTF9HRU5FUkFMX0VOVElUWSkgfHwKLQkgICAgIChlbnQtPmV0eXBlID09IFhNTF9FWFRFUk5BTF9HRU5FUkFMX1BBUlNFRF9FTlRJVFkpKSYmCi0JCShlbnQtPmNoaWxkcmVuID09IE5VTEwpKSB7Ci0JCWVudC0+Y2hpbGRyZW4gPSBsaXN0OwotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogUHJ1bmUgaXQgZGlyZWN0bHkgaW4gdGhlIGdlbmVyYXRlZCBkb2N1bWVudAotICAgICAgICAgICAgICAgICAqIGV4Y2VwdCBmb3Igc2luZ2xlIHRleHQgbm9kZXMuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKChjdHh0LT5yZXBsYWNlRW50aXRpZXMgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGN0eHQtPnBhcnNlTW9kZSA9PSBYTUxfUEFSU0VfUkVBREVSKSB8fAotICAgICAgICAgICAgICAgICAgICAoKGxpc3QtPnR5cGUgPT0gWE1MX1RFWFRfTk9ERSkgJiYKLSAgICAgICAgICAgICAgICAgICAgIChsaXN0LT5uZXh0ID09IE5VTEwpKSkgewotICAgICAgICAgICAgICAgICAgICBlbnQtPm93bmVyID0gMTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+cGFyZW50ID0gKHhtbE5vZGVQdHIpIGVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5kb2MgIT0gZW50LT5kb2MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sU2V0VHJlZURvYyhsaXN0LCBlbnQtPmRvYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC0+bmV4dCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+bGFzdCA9IGxpc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbnQtPm93bmVyID0gMDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+cGFyZW50ID0gKHhtbE5vZGVQdHIpIGN0eHQtPm5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5kb2MgPSBjdHh0LT5teURvYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5uZXh0ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50LT5sYXN0ID0gbGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBlbnQtPmNoaWxkcmVuOwotI2lmZGVmIExJQlhNTF9MRUdBQ1lfRU5BQkxFRAotICAgICAgICAgICAgICAgICAgICBpZiAoZW50LT5ldHlwZSA9PSBYTUxfRVhURVJOQUxfR0VORVJBTF9QQVJTRURfRU5USVRZKQotICAgICAgICAgICAgICAgICAgICAgICAgeG1sQWRkRW50aXR5UmVmZXJlbmNlKGVudCwgbGlzdCwgTlVMTCk7Ci0jZW5kaWYgLyogTElCWE1MX0xFR0FDWV9FTkFCTEVEICovCisgICAgICAgICAgICBlbnQtPmNoaWxkcmVuID0gbGlzdDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBQcnVuZSBpdCBkaXJlY3RseSBpbiB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50CisgICAgICAgICAgICAgKiBleGNlcHQgZm9yIHNpbmdsZSB0ZXh0IG5vZGVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKGN0eHQtPnJlcGxhY2VFbnRpdGllcyA9PSAwKSB8fAorICAgICAgICAgICAgICAgIChjdHh0LT5wYXJzZU1vZGUgPT0gWE1MX1BBUlNFX1JFQURFUikgfHwKKyAgICAgICAgICAgICAgICAoKGxpc3QtPnR5cGUgPT0gWE1MX1RFWFRfTk9ERSkgJiYKKyAgICAgICAgICAgICAgICAgKGxpc3QtPm5leHQgPT0gTlVMTCkpKSB7CisgICAgICAgICAgICAgICAgZW50LT5vd25lciA9IDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBsaXN0LT5wYXJlbnQgPSAoeG1sTm9kZVB0cikgZW50OworICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC0+ZG9jICE9IGVudC0+ZG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgeG1sU2V0VHJlZURvYyhsaXN0LCBlbnQtPmRvYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5uZXh0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnQtPmxhc3QgPSBsaXN0OworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKICAgICAgICAgICAgICAgICB9Ci0JICAgIH0gZWxzZSB7Ci0JCXhtbEZyZWVOb2RlTGlzdChsaXN0KTsKLQkJbGlzdCA9IE5VTEw7Ci0JICAgIH0KKyAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW50LT5vd25lciA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBsaXN0LT5wYXJlbnQgPSAoeG1sTm9kZVB0cikgY3R4dC0+bm9kZTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdC0+ZG9jID0gY3R4dC0+bXlEb2M7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LT5uZXh0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnQtPmxhc3QgPSBsaXN0OworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlzdCA9IGVudC0+Y2hpbGRyZW47CisjaWZkZWYgTElCWE1MX0xFR0FDWV9FTkFCTEVECisgICAgICAgICAgICAgICAgaWYgKGVudC0+ZXR5cGUgPT0gWE1MX0VYVEVSTkFMX0dFTkVSQUxfUEFSU0VEX0VOVElUWSkKKyAgICAgICAgICAgICAgICAgICAgeG1sQWRkRW50aXR5UmVmZXJlbmNlKGVudCwgbGlzdCwgTlVMTCk7CisjZW5kaWYgLyogTElCWE1MX0xFR0FDWV9FTkFCTEVEICovCisgICAgICAgICAgICB9CiAJfSBlbHNlIGlmICgocmV0ICE9IFhNTF9FUlJfT0spICYmCiAJCSAgIChyZXQgIT0gWE1MX1dBUl9VTkRFQ0xBUkVEX0VOVElUWSkpIHsKIAkgICAgeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9VTkRFQ0xBUkVEX0VOVElUWSwKIAkJICAgICAiRW50aXR5ICclcycgZmFpbGVkIHRvIHBhcnNlXG4iLCBlbnQtPm5hbWUpOwogICAgICAgICAgICAgaWYgKGVudC0+Y29udGVudCAhPSBOVUxMKQogICAgICAgICAgICAgICAgIGVudC0+Y29udGVudFswXSA9IDA7Ci0JICAgIHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIDAsIGVudCwgMCk7CiAJfSBlbHNlIGlmIChsaXN0ICE9IE5VTEwpIHsKIAkgICAgeG1sRnJlZU5vZGVMaXN0KGxpc3QpOwogCSAgICBsaXN0ID0gTlVMTDsKIAl9Ci0JaWYgKGVudC0+Y2hlY2tlZCA9PSAwKQotCSAgICBlbnQtPmNoZWNrZWQgPSAyOwogCiAgICAgICAgIC8qIFByZXZlbnQgZW50aXR5IGZyb20gYmVpbmcgcGFyc2VkIGFuZCBleHBhbmRlZCB0d2ljZSAoQnVnIDc2MDM2NykuICovCiAgICAgICAgIHdhc19jaGVja2VkID0gMDsKLSAgICB9IGVsc2UgaWYgKGVudC0+Y2hlY2tlZCAhPSAxKSB7Ci0JY3R4dC0+bmJlbnRpdGllcyArPSBlbnQtPmNoZWNrZWQgLyAyOwogICAgIH0KIAogICAgIC8qCkBAIC03MzE5LDExICs3NDcyLDE2IEBACiAJCWN0eHQtPmRlcHRoLS07CiAJICAgIH0gZWxzZSBpZiAoZW50LT5ldHlwZSA9PQogCQkgICAgICAgWE1MX0VYVEVSTkFMX0dFTkVSQUxfUEFSU0VEX0VOVElUWSkgeworCSAgICAgICAgdW5zaWduZWQgbG9uZyBvbGRzaXplZW50aXRpZXMgPSBjdHh0LT5zaXplZW50aXRpZXM7CisKIAkJY3R4dC0+ZGVwdGgrKzsKIAkJcmV0ID0geG1sUGFyc2VFeHRlcm5hbEVudGl0eVByaXZhdGUoY3R4dC0+bXlEb2MsIGN0eHQsCiAJCQkgICBjdHh0LT5zYXgsIHVzZXJfZGF0YSwgY3R4dC0+ZGVwdGgsCiAJCQkgICBlbnQtPlVSSSwgZW50LT5FeHRlcm5hbElELCBOVUxMKTsKIAkJY3R4dC0+ZGVwdGgtLTsKKworICAgICAgICAgICAgICAgIC8qIFVuZG8gdGhlIGNoYW5nZSB0byBzaXplZW50aXRpZXMgKi8KKyAgICAgICAgICAgICAgICBjdHh0LT5zaXplZW50aXRpZXMgPSBvbGRzaXplZW50aXRpZXM7CiAJICAgIH0gZWxzZSB7CiAJCXJldCA9IFhNTF9FUlJfRU5USVRZX1BFX0lOVEVSTkFMOwogCQl4bWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKQEAgLTczMzMsNiArNzQ5MSw4IEBACiAJCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRU5USVRZX0xPT1AsIE5VTEwpOwogCQlyZXR1cm47CiAJICAgIH0KKyAgICAgICAgICAgIGlmICh4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAJfQogCWlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmIChjdHh0LT5zYXgtPnJlZmVyZW5jZSAhPSBOVUxMKSAmJgogCSAgICAoY3R4dC0+cmVwbGFjZUVudGl0aWVzID09IDApICYmICghY3R4dC0+ZGlzYWJsZVNBWCkpIHsKQEAgLTczNDYsNiArNzUwNiwxNCBAQAogICAgIH0KIAogICAgIC8qCisgICAgICogV2UgYWxzbyBjaGVjayBmb3IgYW1wbGlmaWNhdGlvbiBpZiBlbnRpdGllcyBhcmVuJ3Qgc3Vic3RpdHV0ZWQuCisgICAgICogVGhleSBtaWdodCBiZSBleHBhbmRlZCBsYXRlci4KKyAgICAgKi8KKyAgICBpZiAoKHdhc19jaGVja2VkICE9IDApICYmCisgICAgICAgICh4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCBlbnQtPmV4cGFuZGVkU2l6ZSkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgogICAgICAqIElmIHdlIGRpZG4ndCBnZXQgYW55IGNoaWxkcmVuIGZvciB0aGUgZW50aXR5IGJlaW5nIGJ1aWx0CiAgICAgICovCiAgICAgaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYgKGN0eHQtPnNheC0+cmVmZXJlbmNlICE9IE5VTEwpICYmCkBAIC03MzU3LDcgKzc1MjUsNyBAQAogCXJldHVybjsKICAgICB9CiAKLSAgICBpZiAoKGN0eHQtPnJlcGxhY2VFbnRpdGllcykgfHwgKGVudC0+Y2hpbGRyZW4gPT0gTlVMTCkpICB7CisgICAgaWYgKGN0eHQtPnJlcGxhY2VFbnRpdGllcykgIHsKIAkvKgogCSAqIFRoZXJlIGlzIGEgcHJvYmxlbSBvbiB0aGUgaGFuZGxpbmcgb2YgX3ByaXZhdGUgZm9yIGVudGl0aWVzCiAJICogKGJ1ZyAxNTU4MTYpOiBTaG91bGQgd2UgY29weSB0aGUgY29udGVudCBvZiB0aGUgZmllbGQgZnJvbQpAQCAtNzM3MSw3ICs3NTM5LDcgQEAKIAkgKiBoYWNrIC0gbWF5YmUgd2Ugc2hvdWxkIGhhdmUgZnVydGhlciB0ZXN0cyB0byBkZXRlcm1pbmUKIAkgKiB3aGF0IHRvIGRvLgogCSAqLwotCWlmICgoY3R4dC0+bm9kZSAhPSBOVUxMKSAmJiAoZW50LT5jaGlsZHJlbiAhPSBOVUxMKSkgeworCWlmIChjdHh0LT5ub2RlICE9IE5VTEwpIHsKIAkgICAgLyoKIAkgICAgICogU2VlbXMgd2UgYXJlIGdlbmVyYXRpbmcgdGhlIERPTSBjb250ZW50LCBkbwogCSAgICAgKiBhIHNpbXBsZSB0cmVlIGNvcHkgZm9yIGFsbCByZWZlcmVuY2VzIGV4Y2VwdCB0aGUgZmlyc3QKQEAgLTczODIsMTMgKzc1NTAsNiBAQAogCQl4bWxOb2RlUHRyIG53ID0gTlVMTCwgY3VyLCBmaXJzdENoaWxkID0gTlVMTDsKIAogCQkvKgotCQkgKiBXZSBhcmUgY29weWluZyBoZXJlLCBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gYWJ1c2UKLQkJICovCi0JCWN0eHQtPnNpemVlbnRjb3B5ICs9IGVudC0+bGVuZ3RoICsgNTsKLQkJaWYgKHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIDAsIGVudCwgY3R4dC0+c2l6ZWVudGNvcHkpKQotCQkgICAgcmV0dXJuOwotCi0JCS8qCiAJCSAqIHdoZW4gb3BlcmF0aW5nIG9uIGEgcmVhZGVyLCB0aGUgZW50aXRpZXMgZGVmaW5pdGlvbnMKIAkJICogYXJlIGFsd2F5cyBvd25pbmcgdGhlIGVudGl0aWVzIHN1YnRyZWUuCiAJCWlmIChjdHh0LT5wYXJzZU1vZGUgPT0gWE1MX1BBUlNFX1JFQURFUikKQEAgLTc0MzAsMTMgKzc1OTEsNiBAQAogCQkJICAgZmlyc3RDaGlsZCA9IE5VTEw7CiAKIAkJLyoKLQkJICogV2UgYXJlIGNvcHlpbmcgaGVyZSwgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGFidXNlCi0JCSAqLwotCQljdHh0LT5zaXplZW50Y29weSArPSBlbnQtPmxlbmd0aCArIDU7Ci0JCWlmICh4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCAwLCBlbnQsIGN0eHQtPnNpemVlbnRjb3B5KSkKLQkJICAgIHJldHVybjsKLQotCQkvKgogCQkgKiBDb3B5IHRoZSBlbnRpdHkgY2hpbGQgbGlzdCBhbmQgbWFrZSBpdCB0aGUgbmV3CiAJCSAqIGVudGl0eSBjaGlsZCBsaXN0LiBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgYW55CiAJCSAqIElEIG9yIFJFRiByZWZlcmVuY2VkIHdpbGwgYmUgdGhlIG9uZSBmcm9tIHRoZQpAQCAtNzQ1OCw4ICs3NjEyLDggQEAKIAkJCSAgICBmaXJzdENoaWxkID0gY3VyOwogCQkJfQogCQkJeG1sQWRkQ2hpbGQoKHhtbE5vZGVQdHIpIGVudCwgbncpOwotCQkJeG1sQWRkQ2hpbGQoY3R4dC0+bm9kZSwgY3VyKTsKIAkJICAgIH0KKwkJICAgIHhtbEFkZENoaWxkKGN0eHQtPm5vZGUsIGN1cik7CiAJCSAgICBpZiAoY3VyID09IGxhc3QpCiAJCQlicmVhazsKIAkJICAgIGN1ciA9IG5leHQ7CkBAIC03NTAzLDcgKzc2NTcsOSBAQAogICogeG1sUGFyc2VFbnRpdHlSZWY6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKLSAqIHBhcnNlIEVOVElUWSByZWZlcmVuY2VzIGRlY2xhcmF0aW9ucworICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCisgKiBQYXJzZSBhbiBlbnRpdGl5IHJlZmVyZW5jZS4gQWx3YXlzIGNvbnN1bWVzICcmJy4KICAqCiAgKiBbNjhdIEVudGl0eVJlZiA6Oj0gJyYnIE5hbWUgJzsnCiAgKgpAQCAtNzU2MSwxMSArNzcxNyw2IEBACiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGVudGl0eSByZWZlcmVuY2VzIHBhcnNlZAotICAgICAqLwotICAgIGN0eHQtPm5iZW50aXRpZXMrKzsKLQotICAgIC8qCiAgICAgICogQXNrIGZpcnN0IFNBWCBmb3IgZW50aXR5IHJlc29sdXRpb24sIG90aGVyd2lzZSB0cnkgdGhlCiAgICAgICogZW50aXRpZXMgd2hpY2ggbWF5IGhhdmUgc3RvcmVkIGluIHRoZSBwYXJzZXIgY29udGV4dC4KICAgICAgKi8KQEAgLTc2MTQsMTEgKzc3NjUsMTEgQEAKIAkJICAgICAiRW50aXR5ICclcycgbm90IGRlZmluZWRcbiIsIG5hbWUpOwogCSAgICBpZiAoKGN0eHQtPmluU3Vic2V0ID09IDApICYmCiAJCShjdHh0LT5zYXggIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICAgICAoY3R4dC0+ZGlzYWJsZVNBWCA9PSAwKSAmJgogCQkoY3R4dC0+c2F4LT5yZWZlcmVuY2UgIT0gTlVMTCkpIHsKIAkJY3R4dC0+c2F4LT5yZWZlcmVuY2UoY3R4dC0+dXNlckRhdGEsIG5hbWUpOwogCSAgICB9CiAJfQotCXhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIDAsIGVudCwgMCk7CiAJY3R4dC0+dmFsaWQgPSAwOwogICAgIH0KIApAQCAtNzY0OSwxMyArNzgwMCwxNiBAQAogICAgICAqIG5vdCBjb250YWluIGEgPC4KICAgICAgKi8KICAgICBlbHNlIGlmICgoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0FUVFJJQlVURV9WQUxVRSkgJiYKLQkgICAgIChlbnQgIT0gTlVMTCkgJiYgCiAJICAgICAoZW50LT5ldHlwZSAhPSBYTUxfSU5URVJOQUxfUFJFREVGSU5FRF9FTlRJVFkpKSB7Ci0JaWYgKCgoZW50LT5jaGVja2VkICYgMSkgfHwgKGVudC0+Y2hlY2tlZCA9PSAwKSkgJiYKLQkgICAgIChlbnQtPmNvbnRlbnQgIT0gTlVMTCkgJiYgKHhtbFN0cmNocihlbnQtPmNvbnRlbnQsICc8JykpKSB7Ci0JICAgIHhtbEZhdGFsRXJyTXNnU3RyKGN0eHQsIFhNTF9FUlJfTFRfSU5fQVRUUklCVVRFLAotCSInPCcgaW4gZW50aXR5ICclcycgaXMgbm90IGFsbG93ZWQgaW4gYXR0cmlidXRlcyB2YWx1ZXNcbiIsIG5hbWUpOworCWlmICgoZW50LT5mbGFncyAmIFhNTF9FTlRfQ0hFQ0tFRF9MVCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKChlbnQtPmNvbnRlbnQgIT0gTlVMTCkgJiYgKHhtbFN0cmNocihlbnQtPmNvbnRlbnQsICc8JykpKQorICAgICAgICAgICAgICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9DT05UQUlOU19MVDsKKyAgICAgICAgICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9DSEVDS0VEX0xUOwogICAgICAgICB9CisgICAgICAgIGlmIChlbnQtPmZsYWdzICYgWE1MX0VOVF9DT05UQUlOU19MVCkKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyTXNnU3RyKGN0eHQsIFhNTF9FUlJfTFRfSU5fQVRUUklCVVRFLAorICAgICAgICAgICAgICAgICAgICAiJzwnIGluIGVudGl0eSAnJXMnIGlzIG5vdCBhbGxvd2VkIGluIGF0dHJpYnV0ZXMgIgorICAgICAgICAgICAgICAgICAgICAidmFsdWVzXG4iLCBuYW1lKTsKICAgICB9CiAKICAgICAvKgpAQCAtNzc1OCwxMSArNzkxMiw2IEBACiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGVudGl0eSByZWZlcmVuY2VzIHBhcnNlZAotICAgICAqLwotICAgIGN0eHQtPm5iZW50aXRpZXMrKzsKLQotICAgIC8qCiAgICAgICogQXNrIGZpcnN0IFNBWCBmb3IgZW50aXR5IHJlc29sdXRpb24sIG90aGVyd2lzZSB0cnkgdGhlCiAgICAgICogZW50aXRpZXMgd2hpY2ggbWF5IGhhdmUgc3RvcmVkIGluIHRoZSBwYXJzZXIgY29udGV4dC4KICAgICAgKi8KQEAgLTc4MTIsNyArNzk2MSw2IEBACiAJCQkgICJFbnRpdHkgJyVzJyBub3QgZGVmaW5lZFxuIiwKIAkJCSAgbmFtZSk7CiAJfQotCXhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIDAsIGVudCwgMCk7CiAJLyogVE9ETyA/IGNoZWNrIHJlZ3Jlc3Npb25zIGN0eHQtPnZhbGlkID0gMDsgKi8KICAgICB9CiAKQEAgLTc4NDMsMTIgKzc5OTEsMTYgQEAKICAgICAgKiBub3QgY29udGFpbiBhIDwuCiAgICAgICovCiAgICAgZWxzZSBpZiAoKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9BVFRSSUJVVEVfVkFMVUUpICYmCi0JICAgICAoZW50ICE9IE5VTEwpICYmIChlbnQtPmNvbnRlbnQgIT0gTlVMTCkgJiYKLQkgICAgIChlbnQtPmV0eXBlICE9IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSkgJiYKLQkgICAgICh4bWxTdHJjaHIoZW50LT5jb250ZW50LCAnPCcpKSkgewotCXhtbEZhdGFsRXJyTXNnU3RyKGN0eHQsIFhNTF9FUlJfTFRfSU5fQVRUUklCVVRFLAotICAgICAiJzwnIGluIGVudGl0eSAnJXMnIGlzIG5vdCBhbGxvd2VkIGluIGF0dHJpYnV0ZXMgdmFsdWVzXG4iLAotCQkJICBuYW1lKTsKKwkgICAgIChlbnQtPmV0eXBlICE9IFhNTF9JTlRFUk5BTF9QUkVERUZJTkVEX0VOVElUWSkpIHsKKwlpZiAoKGVudC0+ZmxhZ3MgJiBYTUxfRU5UX0NIRUNLRURfTFQpID09IDApIHsKKyAgICAgICAgICAgIGlmICgoZW50LT5jb250ZW50ICE9IE5VTEwpICYmICh4bWxTdHJjaHIoZW50LT5jb250ZW50LCAnPCcpKSkKKyAgICAgICAgICAgICAgICBlbnQtPmZsYWdzIHw9IFhNTF9FTlRfQ09OVEFJTlNfTFQ7CisgICAgICAgICAgICBlbnQtPmZsYWdzIHw9IFhNTF9FTlRfQ0hFQ0tFRF9MVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW50LT5mbGFncyAmIFhNTF9FTlRfQ09OVEFJTlNfTFQpCisgICAgICAgICAgICB4bWxGYXRhbEVyck1zZ1N0cihjdHh0LCBYTUxfRVJSX0xUX0lOX0FUVFJJQlVURSwKKyAgICAgICAgICAgICAgICAgICAgIic8JyBpbiBlbnRpdHkgJyVzJyBpcyBub3QgYWxsb3dlZCBpbiBhdHRyaWJ1dGVzICIKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlc1xuIiwgbmFtZSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTc4ODMsNyArODAzNSwxMCBAQAogICogeG1sUGFyc2VQRVJlZmVyZW5jZToKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgotICogcGFyc2UgUEVSZWZlcmVuY2UgZGVjbGFyYXRpb25zCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKKyAqIFBhcnNlIGEgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UuIEFsd2F5cyBjb25zdW1lcyAnJScuCisgKgogICogVGhlIGVudGl0eSBjb250ZW50IGlzIGhhbmRsZWQgZGlyZWN0bHkgYnkgcHVzaGluZyBpdCdzIGNvbnRlbnQgYXMKICAqIGEgbmV3IGlucHV0IHN0cmVhbS4KICAqCkBAIC03OTM0LDExICs4MDg5LDYgQEAKICAgICBORVhUOwogCiAgICAgLyoKLSAgICAgKiBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGVudGl0eSByZWZlcmVuY2VzIHBhcnNlZAotICAgICAqLwotICAgIGN0eHQtPm5iZW50aXRpZXMrKzsKLQotICAgIC8qCiAgICAgICogUmVxdWVzdCB0aGUgZW50aXR5IGZyb20gU0FYCiAgICAgICovCiAgICAgaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYKQEAgLTc5NzksNyArODEyOSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBOVUxMKTsKICAgICAgICAgICAgIGN0eHQtPnZhbGlkID0gMDsKIAl9Ci0JeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgMCwgTlVMTCwgMCk7CiAgICAgfSBlbHNlIHsKIAkvKgogCSAqIEludGVybmFsIGNoZWNraW5nIGluIGNhc2UgdGhlIGVudGl0eSBxdWVzdCBiYXJmZWQKQEAgLTc5OTAsMTEgKzgxMzksOCBAQAogCQkgICJJbnRlcm5hbDogJSUlczsgaXMgbm90IGEgcGFyYW1ldGVyIGVudGl0eVxuIiwKIAkJCSAgbmFtZSwgTlVMTCk7CiAJfSBlbHNlIHsKLSAgICAgICAgICAgIHhtbENoYXIgc3RhcnRbNF07Ci0gICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmcgZW5jOwotCi0JICAgIGlmICh4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCAwLCBlbnRpdHksIDApKQotCSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRDb25zdW1lZDsKKyAgICAgICAgICAgIHhtbEVudGl0eVB0ciBvbGRFbnQ7CiAKIAkgICAgaWYgKChlbnRpdHktPmV0eXBlID09IFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZKSAmJgogCSAgICAgICAgKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX05PRU5UKSA9PSAwKSAmJgpAQCAtODAwNSwzNSArODE1MSwzNSBAQAogCQkoY3R4dC0+dmFsaWRhdGUgPT0gMCkpCiAJCXJldHVybjsKIAorICAgICAgICAgICAgaWYgKGVudGl0eS0+ZmxhZ3MgJiBYTUxfRU5UX0VYUEFORElORykgeworICAgICAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRU5USVRZX0xPT1AsIE5VTEwpOworICAgICAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBNdXN0IGJlIGNvbXB1dGVkIGZyb20gb2xkIGlucHV0IGJlZm9yZSBwdXNoaW5nIG5ldyBpbnB1dC4gKi8KKyAgICAgICAgICAgIHBhcmVudENvbnN1bWVkID0gY3R4dC0+aW5wdXQtPnBhcmVudENvbnN1bWVkOworICAgICAgICAgICAgb2xkRW50ID0gY3R4dC0+aW5wdXQtPmVudGl0eTsKKyAgICAgICAgICAgIGlmICgob2xkRW50ID09IE5VTEwpIHx8CisgICAgICAgICAgICAgICAgKChvbGRFbnQtPmV0eXBlID09IFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZKSAmJgorICAgICAgICAgICAgICAgICAoKG9sZEVudC0+ZmxhZ3MgJiBYTUxfRU5UX1BBUlNFRCkgPT0gMCkpKSB7CisgICAgICAgICAgICAgICAgeG1sU2F0dXJhdGVkQWRkKCZwYXJlbnRDb25zdW1lZCwgY3R4dC0+aW5wdXQtPmNvbnN1bWVkKTsKKyAgICAgICAgICAgICAgICB4bWxTYXR1cmF0ZWRBZGRTaXplVCgmcGFyZW50Q29uc3VtZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKKyAgICAgICAgICAgIH0KKwogCSAgICBpbnB1dCA9IHhtbE5ld0VudGl0eUlucHV0U3RyZWFtKGN0eHQsIGVudGl0eSk7CiAJICAgIGlmICh4bWxQdXNoSW5wdXQoY3R4dCwgaW5wdXQpIDwgMCkgewogICAgICAgICAgICAgICAgIHhtbEZyZWVJbnB1dFN0cmVhbShpbnB1dCk7CiAJCXJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZW50aXR5LT5mbGFncyB8PSBYTUxfRU5UX0VYUEFORElORzsKKworICAgICAgICAgICAgaW5wdXQtPnBhcmVudENvbnN1bWVkID0gcGFyZW50Q29uc3VtZWQ7CisKIAkgICAgaWYgKGVudGl0eS0+ZXR5cGUgPT0gWE1MX0VYVEVSTkFMX1BBUkFNRVRFUl9FTlRJVFkpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIEdldCB0aGUgNCBmaXJzdCBieXRlcyBhbmQgZGVjb2RlIHRoZSBjaGFyc2V0Ci0gICAgICAgICAgICAgICAgICogaWYgZW5jICE9IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUKLSAgICAgICAgICAgICAgICAgKiBwbHVnIHNvbWUgZW5jb2RpbmcgY29udmVyc2lvbiByb3V0aW5lcy4KLSAgICAgICAgICAgICAgICAgKiBOb3RlIHRoYXQsIHNpbmNlIHdlIG1heSBoYXZlIHNvbWUgbm9uLVVURjgKLSAgICAgICAgICAgICAgICAgKiBlbmNvZGluZyAobGlrZSBVVEYxNiwgYnVnIDEzNTIyOSksIHRoZSAnbGVuZ3RoJwotICAgICAgICAgICAgICAgICAqIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBjYWxjdWxhdGUgYmFzZWQgdXBvbgotICAgICAgICAgICAgICAgICAqIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB0aGUgYnVmZmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIEdST1cKLSAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmICgoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIpPj00KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0WzBdID0gUkFXOwotICAgICAgICAgICAgICAgICAgICBzdGFydFsxXSA9IE5YVCgxKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRbMl0gPSBOWFQoMik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0WzNdID0gTlhUKDMpOwotICAgICAgICAgICAgICAgICAgICBlbmMgPSB4bWxEZXRlY3RDaGFyRW5jb2Rpbmcoc3RhcnQsIDQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5jICE9IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbFN3aXRjaEVuY29kaW5nKGN0eHQsIGVuYyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeG1sRGV0ZWN0RW5jb2RpbmcoY3R4dCk7CiAKICAgICAgICAgICAgICAgICBpZiAoKENNUDUoQ1VSX1BUUiwgJzwnLCAnPycsICd4JywgJ20nLCAnbCcpKSAmJgogICAgICAgICAgICAgICAgICAgICAoSVNfQkxBTktfQ0goTlhUKDUpKSkpIHsKQEAgLTgwNTgsMTAgKzgyMDQsMTQgQEAKICAqLwogc3RhdGljIGludAogeG1sTG9hZEVudGl0eUNvbnRlbnQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxFbnRpdHlQdHIgZW50aXR5KSB7Ci0gICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7Ci0gICAgeG1sQnVmZmVyUHRyIGJ1ZjsKLSAgICBpbnQgbCwgYzsKLSAgICBpbnQgY291bnQgPSAwOworICAgIHhtbFBhcnNlcklucHV0UHRyIG9sZGlucHV0LCBpbnB1dCA9IE5VTEw7CisgICAgeG1sUGFyc2VySW5wdXRQdHIgKm9sZGlucHV0VGFiOworICAgIGNvbnN0IHhtbENoYXIgKm9sZGVuY29kaW5nOworICAgIHhtbENoYXIgKmNvbnRlbnQgPSBOVUxMOworICAgIHNpemVfdCBsZW5ndGgsIGk7CisgICAgaW50IG9sZGlucHV0TnIsIG9sZGlucHV0TWF4LCBvbGRwcm9ncmVzc2l2ZTsKKyAgICBpbnQgcmV0ID0gLTE7CisgICAgaW50IHJlczsKIAogICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoZW50aXR5ID09IE5VTEwpIHx8CiAgICAgICAgICgoZW50aXR5LT5ldHlwZSAhPSBYTUxfRVhURVJOQUxfUEFSQU1FVEVSX0VOVElUWSkgJiYKQEAgLTgwNzYsNzIgKzgyMjYsMTE0IEBACiAJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAJCSJSZWFkaW5nICVzIGVudGl0eSBjb250ZW50IGlucHV0XG4iLCBlbnRpdHktPm5hbWUpOwogCi0gICAgYnVmID0geG1sQnVmZmVyQ3JlYXRlKCk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkgICAgICAgICAgICAieG1sTG9hZEVudGl0eUNvbnRlbnQgcGFyYW1ldGVyIGVycm9yIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHhtbEJ1ZmZlclNldEFsbG9jYXRpb25TY2hlbWUoYnVmLCBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUKTsKLQotICAgIGlucHV0ID0geG1sTmV3RW50aXR5SW5wdXRTdHJlYW0oY3R4dCwgZW50aXR5KTsKKyAgICBpbnB1dCA9IHhtbExvYWRFeHRlcm5hbEVudGl0eSgoY2hhciAqKSBlbnRpdHktPlVSSSwKKyAgICAgICAgICAgKGNoYXIgKikgZW50aXR5LT5FeHRlcm5hbElELCBjdHh0KTsKICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCiAJICAgICAgICAgICAgInhtbExvYWRFbnRpdHlDb250ZW50IGlucHV0IGVycm9yIik7Ci0JeG1sQnVmZmVyRnJlZShidWYpOwogICAgICAgICByZXR1cm4oLTEpOwogICAgIH0KIAorICAgIG9sZGlucHV0ID0gY3R4dC0+aW5wdXQ7CisgICAgb2xkaW5wdXROciA9IGN0eHQtPmlucHV0TnI7CisgICAgb2xkaW5wdXRNYXggPSBjdHh0LT5pbnB1dE1heDsKKyAgICBvbGRpbnB1dFRhYiA9IGN0eHQtPmlucHV0VGFiOworICAgIG9sZGVuY29kaW5nID0gY3R4dC0+ZW5jb2Rpbmc7CisgICAgb2xkcHJvZ3Jlc3NpdmUgPSBjdHh0LT5wcm9ncmVzc2l2ZTsKKworICAgIGN0eHQtPmlucHV0ID0gTlVMTDsKKyAgICBjdHh0LT5pbnB1dE5yID0gMDsKKyAgICBjdHh0LT5pbnB1dE1heCA9IDE7CisgICAgY3R4dC0+ZW5jb2RpbmcgPSBOVUxMOworICAgIGN0eHQtPnByb2dyZXNzaXZlID0gMDsKKyAgICBjdHh0LT5pbnB1dFRhYiA9IHhtbE1hbGxvYyhzaXplb2YoeG1sUGFyc2VySW5wdXRQdHIpKTsKKyAgICBpZiAoY3R4dC0+aW5wdXRUYWIgPT0gTlVMTCkgeworICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgIHhtbEZyZWVJbnB1dFN0cmVhbShpbnB1dCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgeG1sQnVmUmVzZXRJbnB1dChpbnB1dC0+YnVmLT5idWZmZXIsIGlucHV0KTsKKworICAgIGlucHV0UHVzaChjdHh0LCBpbnB1dCk7CisKKyAgICB4bWxEZXRlY3RFbmNvZGluZyhjdHh0KTsKKwogICAgIC8qCi0gICAgICogUHVzaCB0aGUgZW50aXR5IGFzIHRoZSBjdXJyZW50IGlucHV0LCByZWFkIGNoYXIgYnkgY2hhcgotICAgICAqIHNhdmluZyB0byB0aGUgYnVmZmVyIHVudGlsIHRoZSBlbmQgb2YgdGhlIGVudGl0eSBvciBhbiBlcnJvcgorICAgICAqIFBhcnNlIGEgcG9zc2libGUgdGV4dCBkZWNsYXJhdGlvbiBmaXJzdAogICAgICAqLwotICAgIGlmICh4bWxQdXNoSW5wdXQoY3R4dCwgaW5wdXQpIDwgMCkgewotICAgICAgICB4bWxCdWZmZXJGcmVlKGJ1Zik7Ci0JeG1sRnJlZUlucHV0U3RyZWFtKGlucHV0KTsKLQlyZXR1cm4oLTEpOworICAgIGlmICgoQ01QNShDVVJfUFRSLCAnPCcsICc/JywgJ3gnLCAnbScsICdsJykpICYmIChJU19CTEFOS19DSChOWFQoNSkpKSkgeworCXhtbFBhcnNlVGV4dERlY2woY3R4dCk7CisgICAgICAgIC8qCisgICAgICAgICAqIEFuIFhNTC0xLjAgZG9jdW1lbnQgY2FuJ3QgcmVmZXJlbmNlIGFuIGVudGl0eSBub3QgWE1MLTEuMAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCh4bWxTdHJFcXVhbChjdHh0LT52ZXJzaW9uLCBCQURfQ0FTVCAiMS4wIikpICYmCisgICAgICAgICAgICAoIXhtbFN0ckVxdWFsKGN0eHQtPmlucHV0LT52ZXJzaW9uLCBCQURfQ0FTVCAiMS4wIikpKSB7CisgICAgICAgICAgICB4bWxGYXRhbEVyck1zZyhjdHh0LCBYTUxfRVJSX1ZFUlNJT05fTUlTTUFUQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmVyc2lvbiBtaXNtYXRjaCBiZXR3ZWVuIGRvY3VtZW50IGFuZCBlbnRpdHlcbiIpOworICAgICAgICB9CiAgICAgfQogCi0gICAgR1JPVzsKLSAgICBjID0gQ1VSX0NIQVIobCk7Ci0gICAgd2hpbGUgKChjdHh0LT5pbnB1dCA9PSBpbnB1dCkgJiYgKGN0eHQtPmlucHV0LT5jdXIgPCBjdHh0LT5pbnB1dC0+ZW5kKSAmJgotICAgICAgICAgICAoSVNfQ0hBUihjKSkpIHsKLSAgICAgICAgeG1sQnVmZmVyQWRkKGJ1ZiwgY3R4dC0+aW5wdXQtPmN1ciwgbCk7Ci0JaWYgKGNvdW50KysgPiBYTUxfUEFSU0VSX0NIVU5LX1NJWkUpIHsKLQkgICAgY291bnQgPSAwOwotCSAgICBHUk9XOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLSAgICAgICAgICAgICAgICB4bWxCdWZmZXJGcmVlKGJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLQl9Ci0JTkVYVEwobCk7Ci0JYyA9IENVUl9DSEFSKGwpOwotCWlmIChjID09IDApIHsKLQkgICAgY291bnQgPSAwOwotCSAgICBHUk9XOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLSAgICAgICAgICAgICAgICB4bWxCdWZmZXJGcmVlKGJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLQkgICAgYyA9IENVUl9DSEFSKGwpOwotCX0KKyAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGxlbmd0aCA9IGlucHV0LT5jdXIgLSBpbnB1dC0+YmFzZTsKKyAgICB4bWxCdWZTaHJpbmsoaW5wdXQtPmJ1Zi0+YnVmZmVyLCBsZW5ndGgpOworICAgIHhtbFNhdHVyYXRlZEFkZCgmY3R4dC0+c2l6ZWVudGl0aWVzLCBsZW5ndGgpOworCisgICAgd2hpbGUgKChyZXMgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckdyb3coaW5wdXQtPmJ1ZiwgNDA5NikpID4gMCkKKyAgICAgICAgOworCisgICAgeG1sQnVmUmVzZXRJbnB1dChpbnB1dC0+YnVmLT5idWZmZXIsIGlucHV0KTsKKworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIGlucHV0LT5idWYtPmVycm9yLCBOVUxMKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBpZiAoKGN0eHQtPmlucHV0ID09IGlucHV0KSAmJiAoY3R4dC0+aW5wdXQtPmN1ciA+PSBjdHh0LT5pbnB1dC0+ZW5kKSkgewotICAgICAgICB4bWxQb3BJbnB1dChjdHh0KTsKLSAgICB9IGVsc2UgaWYgKCFJU19DSEFSKGMpKSB7Ci0gICAgICAgIHhtbEZhdGFsRXJyTXNnSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sTG9hZEVudGl0eUNvbnRlbnQ6IGludmFsaWQgY2hhciB2YWx1ZSAlZFxuIiwKLQkgICAgICAgICAgICAgICAgICBjKTsKLQl4bWxCdWZmZXJGcmVlKGJ1Zik7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZW50aXR5LT5jb250ZW50ID0gYnVmLT5jb250ZW50OwotICAgIGJ1Zi0+Y29udGVudCA9IE5VTEw7Ci0gICAgeG1sQnVmZmVyRnJlZShidWYpOworICAgIGxlbmd0aCA9IHhtbEJ1ZlVzZShpbnB1dC0+YnVmLT5idWZmZXIpOworICAgIGNvbnRlbnQgPSB4bWxCdWZEZXRhY2goaW5wdXQtPmJ1Zi0+YnVmZmVyKTsKIAotICAgIHJldHVybigwKTsKKyAgICBpZiAobGVuZ3RoID4gSU5UX01BWCkgeworICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKSB7CisgICAgICAgIGludCBjbGVuID0gbGVuZ3RoIC0gaTsKKyAgICAgICAgaW50IGMgPSB4bWxHZXRVVEY4Q2hhcihjb250ZW50ICsgaSwgJmNsZW4pOworCisgICAgICAgIGlmICgoYyA8IDApIHx8ICghSVNfQ0hBUihjKSkpIHsKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyTXNnSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbExvYWRFbnRpdHlDb250ZW50OiBpbnZhbGlkIGNoYXIgdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50W2ldKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaSArPSBjbGVuOworICAgIH0KKworICAgIHhtbFNhdHVyYXRlZEFkZCgmY3R4dC0+c2l6ZWVudGl0aWVzLCBsZW5ndGgpOworICAgIGVudGl0eS0+Y29udGVudCA9IGNvbnRlbnQ7CisgICAgZW50aXR5LT5sZW5ndGggPSBsZW5ndGg7CisgICAgY29udGVudCA9IE5VTEw7CisgICAgcmV0ID0gMDsKKworZXJyb3I6CisgICAgd2hpbGUgKGN0eHQtPmlucHV0TnIgPiAwKQorICAgICAgICB4bWxGcmVlSW5wdXRTdHJlYW0oaW5wdXRQb3AoY3R4dCkpOworICAgIHhtbEZyZWUoY3R4dC0+aW5wdXRUYWIpOworICAgIHhtbEZyZWUoKHhtbENoYXIgKikgY3R4dC0+ZW5jb2RpbmcpOworCisgICAgY3R4dC0+aW5wdXQgPSBvbGRpbnB1dDsKKyAgICBjdHh0LT5pbnB1dE5yID0gb2xkaW5wdXROcjsKKyAgICBjdHh0LT5pbnB1dE1heCA9IG9sZGlucHV0TWF4OworICAgIGN0eHQtPmlucHV0VGFiID0gb2xkaW5wdXRUYWI7CisgICAgY3R4dC0+ZW5jb2RpbmcgPSBvbGRlbmNvZGluZzsKKyAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IG9sZHByb2dyZXNzaXZlOworCisgICAgeG1sRnJlZShjb250ZW50KTsKKworICAgIHJldHVybihyZXQpOwogfQogCiAvKioKQEAgLTgyMDUsMTEgKzgzOTcsNiBAQAogICAgIHB0cisrOwogCiAgICAgLyoKLSAgICAgKiBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGVudGl0eSByZWZlcmVuY2VzIHBhcnNlZAotICAgICAqLwotICAgIGN0eHQtPm5iZW50aXRpZXMrKzsKLQotICAgIC8qCiAgICAgICogUmVxdWVzdCB0aGUgZW50aXR5IGZyb20gU0FYCiAgICAgICovCiAgICAgaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYKQEAgLTgyNDYsNyArODQzMyw2IEBACiAJCQkgIG5hbWUsIE5VTEwpOwogCSAgICBjdHh0LT52YWxpZCA9IDA7CiAJfQotCXhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIDAsIE5VTEwsIDApOwogICAgIH0gZWxzZSB7CiAJLyoKIAkgKiBJbnRlcm5hbCBjaGVja2luZyBpbiBjYXNlIHRoZSBlbnRpdHkgcXVlc3QgYmFyZmVkCkBAIC04MjY4LDYgKzg0NTQsOCBAQAogICogeG1sUGFyc2VEb2NUeXBlRGVjbDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhIERPQ1RZUEUgZGVjbGFyYXRpb24KICAqCiAgKiBbMjhdIGRvY3R5cGVkZWNsIDo6PSAnPCFET0NUWVBFJyBTIE5hbWUgKFMgRXh0ZXJuYWxJRCk/IFM/CkBAIC04MzY0LDE0ICs4NTUyLDkgQEAKIAkgKiBQRVJlZmVyZW5jZXMuCiAJICogU3Vic2VxdWVuY2UgKG1hcmt1cGRlY2wgfCBQRVJlZmVyZW5jZSB8IFMpKgogCSAqLworCVNLSVBfQkxBTktTOwogCXdoaWxlICgoKFJBVyAhPSAnXScpIHx8IChjdHh0LT5pbnB1dE5yID4gYmFzZUlucHV0TnIpKSAmJgogICAgICAgICAgICAgICAgKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpKSB7Ci0JICAgIGludCBpZCA9IGN0eHQtPmlucHV0LT5pZDsKLQkgICAgdW5zaWduZWQgbG9uZyBjb25zID0gQ1VSX0NPTlNVTUVEOwotCi0JICAgIFNLSVBfQkxBTktTOwotCSAgICB4bWxQYXJzZU1hcmt1cERlY2woY3R4dCk7Ci0JICAgIHhtbFBhcnNlUEVSZWZlcmVuY2UoY3R4dCk7CiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBDb25kaXRpb25hbCBzZWN0aW9ucyBhcmUgYWxsb3dlZCBmcm9tIGV4dGVybmFsIGVudGl0aWVzIGluY2x1ZGVkCkBAIC04MzgwLDE2ICs4NTYzLDIwIEBACiAgICAgICAgICAgICBpZiAoKGN0eHQtPmlucHV0TnIgPiAxKSAmJiAoY3R4dC0+aW5wdXQtPmZpbGVuYW1lICE9IE5VTEwpICYmCiAgICAgICAgICAgICAgICAgKFJBVyA9PSAnPCcpICYmIChOWFQoMSkgPT0gJyEnKSAmJiAoTlhUKDIpID09ICdbJykpIHsKICAgICAgICAgICAgICAgICB4bWxQYXJzZUNvbmRpdGlvbmFsU2VjdGlvbnMoY3R4dCk7Ci0gICAgICAgICAgICB9Ci0KLQkgICAgaWYgKChpZCA9PSBjdHh0LT5pbnB1dC0+aWQpICYmIChjb25zID09IENVUl9DT05TVU1FRCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKFJBVyA9PSAnPCcpICYmICgoTlhUKDEpID09ICchJykgfHwgKE5YVCgxKSA9PSAnPycpKSkgeworCSAgICAgICAgeG1sUGFyc2VNYXJrdXBEZWNsKGN0eHQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChSQVcgPT0gJyUnKSB7CisJICAgICAgICB4bWxQYXJzZVBFUmVmZXJlbmNlKGN0eHQpOworICAgICAgICAgICAgfSBlbHNlIHsKIAkJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkgICAgICJ4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb25cbiIpOwotICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnB1dE5yID4gYmFzZUlucHV0TnIpCi0gICAgICAgICAgICAgICAgICAgIHhtbFBvcElucHV0KGN0eHQpOwotICAgICAgICAgICAgICAgIGVsc2UKLQkJICAgIGJyZWFrOwotCSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAieG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4iCisgICAgICAgICAgICAgICAgICAgICAgICAiIE1hcmt1cCBkZWNsYXJhdGlvblxuIik7CisgICAgICAgICAgICAgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisJICAgIFNLSVBfQkxBTktTOworICAgICAgICAgICAgU0hSSU5LOworICAgICAgICAgICAgR1JPVzsKIAl9CiAJaWYgKFJBVyA9PSAnXScpIHsKIAkgICAgTkVYVDsKQEAgLTg0MTMsNiArODYwMCw4IEBACiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICogQHZhbHVlOiAgYSB4bWxDaGFyICoqIHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGFuIGF0dHJpYnV0ZQogICoKICAqIFs0MV0gQXR0cmlidXRlIDo6PSBOYW1lIEVxIEF0dFZhbHVlCkBAIC04NDY3LDcgKzg2NTYsNyBAQAogICAgIH0gZWxzZSB7CiAJeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9BVFRSSUJVVEVfV0lUSE9VVF9WQUxVRSwKIAkgICAgICAgIlNwZWNpZmljYXRpb24gbWFuZGF0ZXMgdmFsdWUgZm9yIGF0dHJpYnV0ZSAlc1xuIiwgbmFtZSk7Ci0JcmV0dXJuKE5VTEwpOworCXJldHVybihuYW1lKTsKICAgICB9CiAKICAgICAvKgpAQCAtODUwNiw4ICs4Njk1LDkgQEAKICAqIHhtbFBhcnNlU3RhcnRUYWc6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKLSAqIHBhcnNlIGEgc3RhcnQgb2YgdGFnIGVpdGhlciBmb3IgcnVsZSBlbGVtZW50IG9yCi0gKiBFbXB0eUVsZW1lbnQuIEluIGJvdGggY2FzZSB3ZSBkb24ndCBwYXJzZSB0aGUgdGFnIGNsb3NpbmcgY2hhcnMuCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKKyAqIFBhcnNlIGEgc3RhcnQgdGFnLiBBbHdheXMgY29uc3VtZXMgJzwnLgogICoKICAqIFs0MF0gU1RhZyA6Oj0gJzwnIE5hbWUgKFMgQXR0cmlidXRlKSogUz8gJz4nCiAgKgpAQCAtODU2MSwxMSArODc1MSwxMyBAQAogICAgIHdoaWxlICgoKFJBVyAhPSAnPicpICYmCiAJICAgKChSQVcgIT0gJy8nKSB8fCAoTlhUKDEpICE9ICc+JykpICYmCiAJICAgKElTX0JZVEVfQ0hBUihSQVcpKSkgJiYgKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpKSB7Ci0gICAgICAgIGludCBpZCA9IGN0eHQtPmlucHV0LT5pZDsKLQl1bnNpZ25lZCBsb25nIGNvbnMgPSBDVVJfQ09OU1VNRUQ7Ci0KIAlhdHRuYW1lID0geG1sUGFyc2VBdHRyaWJ1dGUoY3R4dCwgJmF0dHZhbHVlKTsKLSAgICAgICAgaWYgKChhdHRuYW1lICE9IE5VTEwpICYmIChhdHR2YWx1ZSAhPSBOVUxMKSkgeworICAgICAgICBpZiAoYXR0bmFtZSA9PSBOVUxMKSB7CisJICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCisJCQkgICAieG1sUGFyc2VTdGFydFRhZzogcHJvYmxlbSBwYXJzaW5nIGF0dHJpYnV0ZXNcbiIpOworCSAgICBicmVhazsKKwl9CisgICAgICAgIGlmIChhdHR2YWx1ZSAhPSBOVUxMKSB7CiAJICAgIC8qCiAJICAgICAqIFsgV0ZDOiBVbmlxdWUgQXR0IFNwZWMgXQogCSAgICAgKiBObyBhdHRyaWJ1dGUgbmFtZSBtYXkgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lCkBAIC04NjI3LDEyICs4ODE5LDYgQEAKIAkgICAgeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9TUEFDRV9SRVFVSVJFRCwKIAkJCSAgICJhdHRyaWJ1dGVzIGNvbnN0cnVjdCBlcnJvclxuIik7CiAJfQotICAgICAgICBpZiAoKGNvbnMgPT0gQ1VSX0NPTlNVTUVEKSAmJiAoaWQgPT0gY3R4dC0+aW5wdXQtPmlkKSAmJgotICAgICAgICAgICAgKGF0dG5hbWUgPT0gTlVMTCkgJiYgKGF0dHZhbHVlID09IE5VTEwpKSB7Ci0JICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCi0JCQkgICAieG1sUGFyc2VTdGFydFRhZzogcHJvYmxlbSBwYXJzaW5nIGF0dHJpYnV0ZXNcbiIpOwotCSAgICBicmVhazsKLQl9CiAJU0hSSU5LOwogICAgICAgICBHUk9XOwogICAgIH0KQEAgLTg2NjMsNyArODg0OSw3IEBACiAgKiBAbGluZTogIGxpbmUgb2YgdGhlIHN0YXJ0IHRhZwogICogQG5zTnI6ICBudW1iZXIgb2YgbmFtZXNwYWNlcyBvbiB0aGUgc3RhcnQgdGFnCiAgKgotICogcGFyc2UgYW4gZW5kIG9mIHRhZworICogUGFyc2UgYW4gZW5kIHRhZy4gQWx3YXlzIGNvbnN1bWVzICc8LycuCiAgKgogICogWzQyXSBFVGFnIDo6PSAnPC8nIE5hbWUgUz8gJz4nCiAgKgpAQCAtODcyNSw2ICs4OTExLDggQEAKICAqIHhtbFBhcnNlRW5kVGFnOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIGFuIGVuZCBvZiB0YWcKICAqCiAgKiBbNDJdIEVUYWcgOjo9ICc8LycgTmFtZSBTPyAnPicKQEAgLTg3NDYsMjggKzg5MzQsNjQgQEAKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIHhtbEdldE5hbWVzcGFjZToKKy8qKgorICogeG1sUGFyc2VRTmFtZUhhc2hlZDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0Ci0gKiBAcHJlZml4OiAgdGhlIHByZWZpeCB0byBsb29rdXAKKyAqIEBwcmVmaXg6ICBwb2ludGVyIHRvIHN0b3JlIHRoZSBwcmVmaXggcGFydAogICoKLSAqIExvb2t1cCB0aGUgbmFtZXNwYWNlIG5hbWUgZm9yIHRoZSBAcHJlZml4ICh3aGljaCBjYSBiZSBOVUxMKQotICogVGhlIHByZWZpeCBtdXN0IGNvbWUgZnJvbSB0aGUgQGN0eHQtPmRpY3QgZGljdGlvbmFyeQorICogcGFyc2UgYW4gWE1MIE5hbWVzcGFjZSBRTmFtZQogICoKLSAqIFJldHVybnMgdGhlIG5hbWVzcGFjZSBuYW1lIG9yIE5VTEwgaWYgbm90IGJvdW5kCisgKiBbNl0gIFFOYW1lICA6Oj0gKFByZWZpeCAnOicpPyBMb2NhbFBhcnQKKyAqIFs3XSAgUHJlZml4ICA6Oj0gTkNOYW1lCisgKiBbOF0gIExvY2FsUGFydCAgOjo9IE5DTmFtZQorICoKKyAqIFJldHVybnMgdGhlIE5hbWUgcGFyc2VkIG9yIE5VTEwKICAqLwotc3RhdGljIGNvbnN0IHhtbENoYXIgKgoteG1sR2V0TmFtZXNwYWNlKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqcHJlZml4KSB7Ci0gICAgaW50IGk7CiAKLSAgICBpZiAocHJlZml4ID09IGN0eHQtPnN0cl94bWwpIHJldHVybihjdHh0LT5zdHJfeG1sX25zKTsKLSAgICBmb3IgKGkgPSBjdHh0LT5uc05yIC0gMjtpID49IDA7aS09MikKLSAgICAgICAgaWYgKGN0eHQtPm5zVGFiW2ldID09IHByZWZpeCkgewotCSAgICBpZiAoKHByZWZpeCA9PSBOVUxMKSAmJiAoKmN0eHQtPm5zVGFiW2kgKyAxXSA9PSAwKSkKLQkgICAgICAgIHJldHVybihOVUxMKTsKLQkgICAgcmV0dXJuKGN0eHQtPm5zVGFiW2kgKyAxXSk7Ci0JfQotICAgIHJldHVybihOVUxMKTsKK3N0YXRpYyB4bWxIYXNoZWRTdHJpbmcKK3htbFBhcnNlUU5hbWVIYXNoZWQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxIYXNoZWRTdHJpbmcgKnByZWZpeCkgeworICAgIHhtbEhhc2hlZFN0cmluZyBsLCBwOworICAgIGludCBzdGFydCwgaXNOQ05hbWUgPSAwOworCisgICAgbC5uYW1lID0gTlVMTDsKKyAgICBwLm5hbWUgPSBOVUxMOworCisgICAgR1JPVzsKKyAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgcmV0dXJuKGwpOworICAgIHN0YXJ0ID0gQ1VSX1BUUiAtIEJBU0VfUFRSOworCisgICAgbCA9IHhtbFBhcnNlTkNOYW1lKGN0eHQpOworICAgIGlmIChsLm5hbWUgIT0gTlVMTCkgeworICAgICAgICBpc05DTmFtZSA9IDE7CisgICAgICAgIGlmIChDVVIgPT0gJzonKSB7CisgICAgICAgICAgICBORVhUOworICAgICAgICAgICAgcCA9IGw7CisgICAgICAgICAgICBsID0geG1sUGFyc2VOQ05hbWUoY3R4dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKChsLm5hbWUgPT0gTlVMTCkgfHwgKENVUiA9PSAnOicpKSB7CisgICAgICAgIHhtbENoYXIgKnRtcDsKKworICAgICAgICBsLm5hbWUgPSBOVUxMOworICAgICAgICBwLm5hbWUgPSBOVUxMOworICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgIHJldHVybihsKTsKKyAgICAgICAgaWYgKChpc05DTmFtZSA9PSAwKSAmJiAoQ1VSICE9ICc6JykpCisgICAgICAgICAgICByZXR1cm4obCk7CisgICAgICAgIHRtcCA9IHhtbFBhcnNlTm10b2tlbihjdHh0KTsKKyAgICAgICAgaWYgKHRtcCAhPSBOVUxMKQorICAgICAgICAgICAgeG1sRnJlZSh0bXApOworICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgIHJldHVybihsKTsKKyAgICAgICAgbCA9IHhtbERpY3RMb29rdXBIYXNoZWQoY3R4dC0+ZGljdCwgQkFTRV9QVFIgKyBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSX1BUUiAtIChCQVNFX1BUUiArIHN0YXJ0KSk7CisgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfUU5BTUUsCisgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcGFyc2UgUU5hbWUgJyVzJ1xuIiwgbC5uYW1lLCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgICAqcHJlZml4ID0gcDsKKyAgICByZXR1cm4obCk7CiB9CiAKIC8qKgpAQCAtODc4Niw3NCArOTAxMCwxMyBAQAogCiBzdGF0aWMgY29uc3QgeG1sQ2hhciAqCiB4bWxQYXJzZVFOYW1lKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqKnByZWZpeCkgewotICAgIGNvbnN0IHhtbENoYXIgKmwsICpwOworICAgIHhtbEhhc2hlZFN0cmluZyBuLCBwOwogCi0gICAgR1JPVzsKLQotICAgIGwgPSB4bWxQYXJzZU5DTmFtZShjdHh0KTsKLSAgICBpZiAobCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChDVVIgPT0gJzonKSB7Ci0JICAgIGwgPSB4bWxQYXJzZU5hbWUoY3R4dCk7Ci0JICAgIGlmIChsICE9IE5VTEwpIHsKLQkgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfUU5BTUUsCi0JCSAgICAgICAgICJGYWlsZWQgdG8gcGFyc2UgUU5hbWUgJyVzJ1xuIiwgbCwgTlVMTCwgTlVMTCk7Ci0JCSpwcmVmaXggPSBOVUxMOwotCQlyZXR1cm4obCk7Ci0JICAgIH0KLQl9CisgICAgbiA9IHhtbFBhcnNlUU5hbWVIYXNoZWQoY3R4dCwgJnApOworICAgIGlmIChuLm5hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAoQ1VSID09ICc6JykgewotICAgICAgICBORVhUOwotCXAgPSBsOwotCWwgPSB4bWxQYXJzZU5DTmFtZShjdHh0KTsKLQlpZiAobCA9PSBOVUxMKSB7Ci0JICAgIHhtbENoYXIgKnRtcDsKLQotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgeG1sTnNFcnIoY3R4dCwgWE1MX05TX0VSUl9RTkFNRSwKLQkgICAgICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBRTmFtZSAnJXM6J1xuIiwgcCwgTlVMTCwgTlVMTCk7Ci0JICAgIGwgPSB4bWxQYXJzZU5tdG9rZW4oY3R4dCk7Ci0JICAgIGlmIChsID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotCQl0bXAgPSB4bWxCdWlsZFFOYW1lKEJBRF9DQVNUICIiLCBwLCBOVUxMLCAwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXRtcCA9IHhtbEJ1aWxkUU5hbWUobCwgcCwgTlVMTCwgMCk7Ci0JCXhtbEZyZWUoKGNoYXIgKilsKTsKLQkgICAgfQotCSAgICBwID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCB0bXAsIC0xKTsKLQkgICAgaWYgKHRtcCAhPSBOVUxMKSB4bWxGcmVlKHRtcCk7Ci0JICAgICpwcmVmaXggPSBOVUxMOwotCSAgICByZXR1cm4ocCk7Ci0JfQotCWlmIChDVVIgPT0gJzonKSB7Ci0JICAgIHhtbENoYXIgKnRtcDsKLQotICAgICAgICAgICAgeG1sTnNFcnIoY3R4dCwgWE1MX05TX0VSUl9RTkFNRSwKLQkgICAgICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBRTmFtZSAnJXM6JXM6J1xuIiwgcCwgbCwgTlVMTCk7Ci0JICAgIE5FWFQ7Ci0JICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFBhcnNlTmFtZShjdHh0KTsKLQkgICAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0JICAgICAgICB0bXAgPSB4bWxCdWlsZFFOYW1lKHRtcCwgbCwgTlVMTCwgMCk7Ci0JCWwgPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIHRtcCwgLTEpOwotCQlpZiAodG1wICE9IE5VTEwpIHhtbEZyZWUodG1wKTsKLQkJKnByZWZpeCA9IHA7Ci0JCXJldHVybihsKTsKLQkgICAgfQotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotCSAgICB0bXAgPSB4bWxCdWlsZFFOYW1lKEJBRF9DQVNUICIiLCBsLCBOVUxMLCAwKTsKLQkgICAgbCA9IHhtbERpY3RMb29rdXAoY3R4dC0+ZGljdCwgdG1wLCAtMSk7Ci0JICAgIGlmICh0bXAgIT0gTlVMTCkgeG1sRnJlZSh0bXApOwotCSAgICAqcHJlZml4ID0gcDsKLQkgICAgcmV0dXJuKGwpOwotCX0KLQkqcHJlZml4ID0gcDsKLSAgICB9IGVsc2UKLSAgICAgICAgKnByZWZpeCA9IE5VTEw7Ci0gICAgcmV0dXJuKGwpOworICAgICpwcmVmaXggPSBwLm5hbWU7CisgICAgcmV0dXJuKG4ubmFtZSk7CiB9CiAKIC8qKgpAQCAtODkwNSw2ICs5MDY4LDggQEAKICAgICAgKiBhbGwgc3RyaW5ncyBjb21zIGZyb20gdGhlIGRpY3Rpb25hcnksIGVxdWFsaXR5IGNhbiBiZSBkb25lIGRpcmVjdGx5CiAgICAgICovCiAgICAgcmV0ID0geG1sUGFyc2VRTmFtZSAoY3R4dCwgJnByZWZpeDIpOworICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgIGlmICgocmV0ID09IG5hbWUpICYmIChwcmVmaXggPT0gcHJlZml4MikpCiAJcmV0dXJuKChjb25zdCB4bWxDaGFyKikgMSk7CiAgICAgcmV0dXJuIHJldDsKQEAgLTkwOTAsNiArOTI1NSw3IEBACiAgICAgaW4rKzsKICAgICBjb2wrKzsKICAgICBpZiAobGVuICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGFsbG9jKSAqYWxsb2MgPSAwOwogICAgICAgICAqbGVuID0gbGFzdCAtIHN0YXJ0OwogICAgICAgICByZXQgPSAoeG1sQ2hhciAqKSBzdGFydDsKICAgICB9IGVsc2UgewpAQCAtOTA5OSw3ICs5MjY1LDYgQEAKICAgICBDVVJfUFRSID0gaW47CiAgICAgY3R4dC0+aW5wdXQtPmxpbmUgPSBsaW5lOwogICAgIGN0eHQtPmlucHV0LT5jb2wgPSBjb2w7Ci0gICAgaWYgKGFsbG9jKSAqYWxsb2MgPSAwOwogICAgIHJldHVybiByZXQ7CiBuZWVkX2NvbXBsZXg6CiAgICAgaWYgKGFsbG9jKSAqYWxsb2MgPSAxOwpAQCAtOTEyMSwyNCArOTI4NiwzMCBAQAogICogUmV0dXJucyB0aGUgYXR0cmlidXRlIG5hbWUsIGFuZCB0aGUgdmFsdWUgaW4gKnZhbHVlLCAuCiAgKi8KIAotc3RhdGljIGNvbnN0IHhtbENoYXIgKgorc3RhdGljIHhtbEhhc2hlZFN0cmluZwogeG1sUGFyc2VBdHRyaWJ1dGUyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHJlZiwgY29uc3QgeG1sQ2hhciAqIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqKiBwcmVmaXgsIHhtbENoYXIgKiogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgeG1sSGFzaGVkU3RyaW5nICogaHByZWZpeCwgeG1sQ2hhciAqKiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwgaW50ICphbGxvYykKIHsKLSAgICBjb25zdCB4bWxDaGFyICpuYW1lOworICAgIHhtbEhhc2hlZFN0cmluZyBobmFtZTsKKyAgICBjb25zdCB4bWxDaGFyICpwcmVmaXgsICpuYW1lOwogICAgIHhtbENoYXIgKnZhbCwgKmludGVybmFsX3ZhbCA9IE5VTEw7CiAgICAgaW50IG5vcm1hbGl6ZSA9IDA7CiAKICAgICAqdmFsdWUgPSBOVUxMOwogICAgIEdST1c7Ci0gICAgbmFtZSA9IHhtbFBhcnNlUU5hbWUoY3R4dCwgcHJlZml4KTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgaG5hbWUgPSB4bWxQYXJzZVFOYW1lSGFzaGVkKGN0eHQsIGhwcmVmaXgpOworICAgIGlmIChobmFtZS5uYW1lID09IE5VTEwpIHsKICAgICAgICAgeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9OQU1FX1JFUVVJUkVELAogICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBhdHRyaWJ1dGUgbmFtZVxuIik7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7CisgICAgICAgIHJldHVybihobmFtZSk7CiAgICAgfQorICAgIG5hbWUgPSBobmFtZS5uYW1lOworICAgIGlmIChocHJlZml4LT5uYW1lICE9IE5VTEwpCisgICAgICAgIHByZWZpeCA9IGhwcmVmaXgtPm5hbWU7CisgICAgZWxzZQorICAgICAgICBwcmVmaXggPSBOVUxMOwogCiAgICAgLyoKICAgICAgKiBnZXQgdGhlIHR5cGUgaWYgbmVlZGVkCkBAIC05MTQ3LDcgKzkzMTgsOCBAQAogICAgICAgICBpbnQgdHlwZTsKIAogICAgICAgICB0eXBlID0gKGludCkgKHB0cmRpZmZfdCkgeG1sSGFzaFFMb29rdXAyKGN0eHQtPmF0dHNTcGVjaWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWYsIGVsZW0sICpwcmVmaXgsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWYsIGVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBuYW1lKTsKICAgICAgICAgaWYgKHR5cGUgIT0gMCkKICAgICAgICAgICAgIG5vcm1hbGl6ZSA9IDE7CiAgICAgfQpAQCAtOTE2MCw2ICs5MzMyLDEwIEBACiAgICAgICAgIE5FWFQ7CiAgICAgICAgIFNLSVBfQkxBTktTOwogICAgICAgICB2YWwgPSB4bWxQYXJzZUF0dFZhbHVlSW50ZXJuYWwoY3R4dCwgbGVuLCBhbGxvYywgbm9ybWFsaXplKTsKKyAgICAgICAgaWYgKHZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBobmFtZS5uYW1lID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybihobmFtZSk7CisgICAgICAgIH0KIAlpZiAobm9ybWFsaXplKSB7CiAJICAgIC8qCiAJICAgICAqIFNvbWV0aW1lcyBhIHNlY29uZCBub3JtYWxpc2F0aW9uIHBhc3MgZm9yIHNwYWNlcyBpcyBuZWVkZWQKQEAgLTkxODIsMTAgKzkzNTgsMTAgQEAKICAgICAgICAgeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9BVFRSSUJVVEVfV0lUSE9VVF9WQUxVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNwZWNpZmljYXRpb24gbWFuZGF0ZXMgdmFsdWUgZm9yIGF0dHJpYnV0ZSAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7CisgICAgICAgIHJldHVybihobmFtZSk7CiAgICAgfQogCi0gICAgaWYgKCpwcmVmaXggPT0gY3R4dC0+c3RyX3htbCkgeworICAgIGlmIChwcmVmaXggPT0gY3R4dC0+c3RyX3htbCkgewogICAgICAgICAvKgogICAgICAgICAgKiBDaGVjayB0aGF0IHhtbDpsYW5nIGNvbmZvcm1zIHRvIHRoZSBzcGVjaWZpY2F0aW9uCiAgICAgICAgICAqIE5vIG1vcmUgcmVnaXN0ZXJlZCBhcyBhbiBlcnJvciwganVzdCBnZW5lcmF0ZSBhIHdhcm5pbmcgbm93CkBAIC05MjIxLDE0ICs5Mzk3LDY0IEBACiAgICAgfQogCiAgICAgKnZhbHVlID0gdmFsOwotICAgIHJldHVybiAobmFtZSk7CisgICAgcmV0dXJuIChobmFtZSk7CiB9CisKKy8qKgorICogeG1sQXR0ckhhc2hJbnNlcnQ6CisgKiBAY3R4dDogcGFyc2VyIGNvbnRleHQKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBoYXNoIHRhYmxlCisgKiBAbmFtZTogYXR0cmlidXRlIG5hbWUKKyAqIEB1cmk6IG5hbWVzcGFjZSB1cmkKKyAqIEBoYXNoVmFsdWU6IGNvbWJpbmVkIGhhc2ggdmFsdWUgb2YgbmFtZSBhbmQgdXJpCisgKiBAYWluZGV4OiBhdHRyaWJ1dGUgaW5kZXggKHRoaXMgaXMgYSBtdWx0aXBsZSBvZiA1KQorICoKKyAqIEluc2VydHMgYSBuZXcgYXR0cmlidXRlIGludG8gdGhlIGhhc2ggdGFibGUuCisgKgorICogUmV0dXJucyBJTlRfTUFYIGlmIG5vIGV4aXN0aW5nIGF0dHJpYnV0ZSB3YXMgZm91bmQsIHRoZSBhdHRyaWJ1dGUKKyAqIGluZGV4IGlmIGFuIGF0dHJpYnV0ZSB3YXMgZm91bmQsIC0xIGlmIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgorICovCitzdGF0aWMgaW50Cit4bWxBdHRySGFzaEluc2VydCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHVuc2lnbmVkIHNpemUsIGNvbnN0IHhtbENoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICp1cmksIHVuc2lnbmVkIGhhc2hWYWx1ZSwgaW50IGFpbmRleCkgeworICAgIHhtbEF0dHJIYXNoQnVja2V0ICp0YWJsZSA9IGN0eHQtPmF0dHJIYXNoOworICAgIHhtbEF0dHJIYXNoQnVja2V0ICpidWNrZXQ7CisgICAgdW5zaWduZWQgaGluZGV4OworCisgICAgaGluZGV4ID0gaGFzaFZhbHVlICYgKHNpemUgLSAxKTsKKyAgICBidWNrZXQgPSAmdGFibGVbaGluZGV4XTsKKworICAgIHdoaWxlIChidWNrZXQtPmluZGV4ID49IDApIHsKKyAgICAgICAgY29uc3QgeG1sQ2hhciAqKmF0dHMgPSAmY3R4dC0+YXR0c1tidWNrZXQtPmluZGV4XTsKKworICAgICAgICBpZiAobmFtZSA9PSBhdHRzWzBdKSB7CisgICAgICAgICAgICBpbnQgbnNJbmRleCA9IChpbnQpIChwdHJkaWZmX3QpIGF0dHNbMl07CisKKyAgICAgICAgICAgIGlmICgobnNJbmRleCA9PSBOU19JTkRFWF9FTVBUWSkgPyAodXJpID09IE5VTEwpIDoKKyAgICAgICAgICAgICAgICAobnNJbmRleCA9PSBOU19JTkRFWF9YTUwpID8gKHVyaSA9PSBjdHh0LT5zdHJfeG1sKSA6CisgICAgICAgICAgICAgICAgKHVyaSA9PSBjdHh0LT5uc1RhYltuc0luZGV4ICogMiArIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4oYnVja2V0LT5pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBoaW5kZXgrKzsKKyAgICAgICAgYnVja2V0Kys7CisgICAgICAgIGlmIChoaW5kZXggPj0gc2l6ZSkgeworICAgICAgICAgICAgaGluZGV4ID0gMDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IHRhYmxlOworICAgICAgICB9CisgICAgfQorCisgICAgYnVja2V0LT5pbmRleCA9IGFpbmRleDsKKworICAgIHJldHVybihJTlRfTUFYKTsKK30KKwogLyoqCiAgKiB4bWxQYXJzZVN0YXJ0VGFnMjoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgotICogcGFyc2UgYSBzdGFydCBvZiB0YWcgZWl0aGVyIGZvciBydWxlIGVsZW1lbnQgb3IKLSAqIEVtcHR5RWxlbWVudC4gSW4gYm90aCBjYXNlIHdlIGRvbid0IHBhcnNlIHRoZSB0YWcgY2xvc2luZyBjaGFycy4KKyAqIFBhcnNlIGEgc3RhcnQgdGFnLiBBbHdheXMgY29uc3VtZXMgJzwnLgorICoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBydW5uaW5nIFNBWDIgcGFyc2luZwogICoKICAqIFs0MF0gU1RhZyA6Oj0gJzwnIE5hbWUgKFMgQXR0cmlidXRlKSogUz8gJz4nCkBAIC05MjU0LDQ4ICs5NDgwLDQ4IEBACiAKIHN0YXRpYyBjb25zdCB4bWxDaGFyICoKIHhtbFBhcnNlU3RhcnRUYWcyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqKnByZWYsCi0gICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICoqVVJJLCBpbnQgKnRsZW4pIHsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKipVUkksIGludCAqbmJOc1B0cikgeworICAgIHhtbEhhc2hlZFN0cmluZyBobG9jYWxuYW1lOworICAgIHhtbEhhc2hlZFN0cmluZyBocHJlZml4OworICAgIHhtbEhhc2hlZFN0cmluZyBoYXR0bmFtZTsKKyAgICB4bWxIYXNoZWRTdHJpbmcgaGFwcmVmaXg7CiAgICAgY29uc3QgeG1sQ2hhciAqbG9jYWxuYW1lOwogICAgIGNvbnN0IHhtbENoYXIgKnByZWZpeDsKICAgICBjb25zdCB4bWxDaGFyICphdHRuYW1lOwogICAgIGNvbnN0IHhtbENoYXIgKmFwcmVmaXg7Ci0gICAgY29uc3QgeG1sQ2hhciAqbnNuYW1lOwotICAgIHhtbENoYXIgKmF0dHZhbHVlOworICAgIGNvbnN0IHhtbENoYXIgKnVyaTsKKyAgICB4bWxDaGFyICphdHR2YWx1ZSA9IE5VTEw7CiAgICAgY29uc3QgeG1sQ2hhciAqKmF0dHMgPSBjdHh0LT5hdHRzOworICAgIHVuc2lnbmVkIGF0dHJIYXNoU2l6ZSA9IDA7CiAgICAgaW50IG1heGF0dHMgPSBjdHh0LT5tYXhhdHRzOwogICAgIGludCBucmF0dHMsIG5iYXR0cywgbmJkZWYsIGlucHV0aWQ7Ci0gICAgaW50IGksIGosIG5iTnMsIGF0dHZhbDsKLSAgICB1bnNpZ25lZCBsb25nIGN1cjsKLSAgICBpbnQgbnNOciA9IGN0eHQtPm5zTnI7CisgICAgaW50IGksIGosIG5iTnMsIG5iVG90YWxEZWYsIGF0dHZhbCwgbnNJbmRleCwgbWF4QXR0czsKKyAgICBpbnQgYWxsb2MgPSAwOwogCiAgICAgaWYgKFJBVyAhPSAnPCcpIHJldHVybihOVUxMKTsKICAgICBORVhUMTsKIAotICAgIC8qCi0gICAgICogTk9URTogaXQgaXMgY3J1Y2lhbCB3aXRoIHRoZSBTQVgyIEFQSSB0byBuZXZlciBjYWxsIFNIUklOSyBiZXlvbmQgdGhhdAotICAgICAqICAgICAgIHBvaW50IHNpbmNlIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIG1heSBiZSBzdG9yZWQgYXMgcG9pbnRlcnMgdG8KLSAgICAgKiAgICAgICB0aGUgYnVmZmVyIGFuZCBjYWxsaW5nIFNIUklOSyB3b3VsZCBkZXN0cm95IHRoZW0gIQotICAgICAqICAgICAgIFRoZSBTaHJpbmtpbmcgaXMgb25seSBwb3NzaWJsZSBvbmNlIHRoZSBmdWxsIHNldCBvZiBhdHRyaWJ1dGUKLSAgICAgKiAgICAgICBjYWxsYmFja3MgaGF2ZSBiZWVuIGRvbmUuCi0gICAgICovCi0gICAgU0hSSU5LOwotICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKICAgICBpbnB1dGlkID0gY3R4dC0+aW5wdXQtPmlkOwogICAgIG5iYXR0cyA9IDA7CiAgICAgbnJhdHRzID0gMDsKICAgICBuYmRlZiA9IDA7CiAgICAgbmJOcyA9IDA7CisgICAgbmJUb3RhbERlZiA9IDA7CiAgICAgYXR0dmFsID0gMDsKLSAgICAvKiBGb3JnZXQgYW55IG5hbWVzcGFjZXMgYWRkZWQgZHVyaW5nIGFuIGVhcmxpZXIgcGFyc2Ugb2YgdGhpcyBlbGVtZW50LiAqLwotICAgIGN0eHQtPm5zTnIgPSBuc05yOwogCi0gICAgbG9jYWxuYW1lID0geG1sUGFyc2VRTmFtZShjdHh0LCAmcHJlZml4KTsKLSAgICBpZiAobG9jYWxuYW1lID09IE5VTEwpIHsKKyAgICBpZiAoeG1sUGFyc2VyTnNTdGFydEVsZW1lbnQoY3R4dC0+bnNkYikgPCAwKSB7CisgICAgICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKworICAgIGhsb2NhbG5hbWUgPSB4bWxQYXJzZVFOYW1lSGFzaGVkKGN0eHQsICZocHJlZml4KTsKKyAgICBpZiAoaGxvY2FsbmFtZS5uYW1lID09IE5VTEwpIHsKIAl4bWxGYXRhbEVyck1zZyhjdHh0LCBYTUxfRVJSX05BTUVfUkVRVUlSRUQsCiAJCSAgICAgICAiU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lXG4iKTsKICAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICAqdGxlbiA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSAtIGN1cjsKKyAgICBsb2NhbG5hbWUgPSBobG9jYWxuYW1lLm5hbWU7CisgICAgcHJlZml4ID0gaHByZWZpeC5uYW1lOwogCiAgICAgLyoKICAgICAgKiBOb3cgcGFyc2UgdGhlIGF0dHJpYnV0ZXMsIGl0IGVuZHMgdXAgd2l0aCB0aGUgZW5kaW5nCkBAIC05MzA1LDQ1ICs5NTMxLDc0IEBACiAgICAgU0tJUF9CTEFOS1M7CiAgICAgR1JPVzsKIAorICAgIC8qCisgICAgICogVGhlIGN0eHQtPmF0dHMgYXJyYXkgd2lsbCBiZSB1bHRpbWF0ZWx5IHBhc3NlZCB0byB0aGUgU0FYIGNhbGxiYWNrCisgICAgICogY29udGFpbmluZyBmaXZlIHhtbENoYXIgcG9pbnRlcnMgZm9yIGVhY2ggYXR0cmlidXRlOgorICAgICAqCisgICAgICogWzBdIGF0dHJpYnV0ZSBuYW1lCisgICAgICogWzFdIGF0dHJpYnV0ZSBwcmVmaXgKKyAgICAgKiBbMl0gbmFtZXNwYWNlIFVSSQorICAgICAqIFszXSBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgKiBbNF0gZW5kIG9mIGF0dHJpYnV0ZSB2YWx1ZQorICAgICAqCisgICAgICogVG8gc2F2ZSBtZW1vcnksIHdlIHJldXNlIHRoaXMgYXJyYXkgdGVtcG9yYXJpbHkgYW5kIHN0b3JlIGludGVnZXJzCisgICAgICogaW4gdGhlc2UgcG9pbnRlciB2YXJpYWJsZXMuCisgICAgICoKKyAgICAgKiBbMF0gYXR0cmlidXRlIG5hbWUKKyAgICAgKiBbMV0gYXR0cmlidXRlIHByZWZpeAorICAgICAqIFsyXSBoYXNoIHZhbHVlIG9mIGF0dHJpYnV0ZSBwcmVmaXgsIGFuZCBsYXRlciBuYW1lc3BhY2UgaW5kZXgKKyAgICAgKiBbM10gZm9yIG5vbi1hbGxvY2F0ZWQgdmFsdWVzOiBwdHJkaWZmX3Qgb2Zmc2V0IGludG8gaW5wdXQgYnVmZmVyCisgICAgICogWzRdIGZvciBub24tYWxsb2NhdGVkIHZhbHVlczogcHRyZGlmZl90IG9mZnNldCBpbnRvIGlucHV0IGJ1ZmZlcgorICAgICAqCisgICAgICogVGhlIGN0eHQtPmF0dGFsbG9jcyBhcnJheSBjb250YWlucyBhbiBhZGRpdGlvbmFsIHVuc2lnbmVkIGludCBmb3IKKyAgICAgKiBlYWNoIGF0dHJpYnV0ZSwgY29udGFpbmluZyB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG5hbWUKKyAgICAgKiBhbmQgdGhlIGFsbG9jIGZsYWcgaW4gYml0IDMxLgorICAgICAqLworCiAgICAgd2hpbGUgKCgoUkFXICE9ICc+JykgJiYKIAkgICAoKFJBVyAhPSAnLycpIHx8IChOWFQoMSkgIT0gJz4nKSkgJiYKIAkgICAoSVNfQllURV9DSEFSKFJBVykpKSAmJiAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikpIHsKLQlpbnQgaWQgPSBjdHh0LT5pbnB1dC0+aWQ7Ci0JdW5zaWduZWQgbG9uZyBjb25zID0gQ1VSX0NPTlNVTUVEOwotCWludCBsZW4gPSAtMSwgYWxsb2MgPSAwOworCWludCBsZW4gPSAtMTsKIAotCWF0dG5hbWUgPSB4bWxQYXJzZUF0dHJpYnV0ZTIoY3R4dCwgcHJlZml4LCBsb2NhbG5hbWUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXByZWZpeCwgJmF0dHZhbHVlLCAmbGVuLCAmYWxsb2MpOwotICAgICAgICBpZiAoKGF0dG5hbWUgPT0gTlVMTCkgfHwgKGF0dHZhbHVlID09IE5VTEwpKQorCWhhdHRuYW1lID0geG1sUGFyc2VBdHRyaWJ1dGUyKGN0eHQsIHByZWZpeCwgbG9jYWxuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhcHJlZml4LCAmYXR0dmFsdWUsICZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWxsb2MpOworICAgICAgICBpZiAoaGF0dG5hbWUubmFtZSA9PSBOVUxMKSB7CisJICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfSU5URVJOQUxfRVJST1IsCisJICAgICAgICAgInhtbFBhcnNlU3RhcnRUYWc6IHByb2JsZW0gcGFyc2luZyBhdHRyaWJ1dGVzXG4iKTsKKwkgICAgYnJlYWs7CisJfQorICAgICAgICBpZiAoYXR0dmFsdWUgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gbmV4dF9hdHRyOworICAgICAgICBhdHRuYW1lID0gaGF0dG5hbWUubmFtZTsKKyAgICAgICAgYXByZWZpeCA9IGhhcHJlZml4Lm5hbWU7CiAJaWYgKGxlbiA8IDApIGxlbiA9IHhtbFN0cmxlbihhdHR2YWx1ZSk7CiAKICAgICAgICAgaWYgKChhdHRuYW1lID09IGN0eHQtPnN0cl94bWxucykgJiYgKGFwcmVmaXggPT0gTlVMTCkpIHsKLSAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKlVSTCA9IHhtbERpY3RMb29rdXAoY3R4dC0+ZGljdCwgYXR0dmFsdWUsIGxlbik7Ci0gICAgICAgICAgICB4bWxVUklQdHIgdXJpOworICAgICAgICAgICAgeG1sSGFzaGVkU3RyaW5nIGh1cmk7CisgICAgICAgICAgICB4bWxVUklQdHIgcGFyc2VkVXJpOwogCi0gICAgICAgICAgICBpZiAoVVJMID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgImRpY3Rpb25hcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7Ci0gICAgICAgICAgICAgICAgaWYgKChhdHR2YWx1ZSAhPSBOVUxMKSAmJiAoYWxsb2MgIT0gMCkpCi0gICAgICAgICAgICAgICAgICAgIHhtbEZyZWUoYXR0dmFsdWUpOwotICAgICAgICAgICAgICAgIGxvY2FsbmFtZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgaHVyaSA9IHhtbERpY3RMb29rdXBIYXNoZWQoY3R4dC0+ZGljdCwgYXR0dmFsdWUsIGxlbik7CisgICAgICAgICAgICB1cmkgPSBodXJpLm5hbWU7CisgICAgICAgICAgICBpZiAodXJpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgICAgICAgICAgZ290byBuZXh0X2F0dHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKlVSTCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdXJpID0geG1sUGFyc2VVUkkoKGNvbnN0IGNoYXIgKikgVVJMKTsKLSAgICAgICAgICAgICAgICBpZiAodXJpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqdXJpICE9IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZWRVcmkgPSB4bWxQYXJzZVVSSSgoY29uc3QgY2hhciAqKSB1cmkpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRVcmkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICB4bWxOc0VycihjdHh0LCBYTUxfV0FSX05TX1VSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbG5zOiAnJXMnIGlzIG5vdCBhIHZhbGlkIFVSSVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cmktPnNjaGVtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRVcmktPnNjaGVtZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxOc1dhcm4oY3R4dCwgWE1MX1dBUl9OU19VUklfUkVMQVRJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbG5zOiBVUkkgJXMgaXMgbm90IGFic29sdXRlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVlVVJJKHVyaSk7CisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWVVUkkocGFyc2VkVXJpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFVSTCA9PSBjdHh0LT5zdHJfeG1sX25zKSB7CisgICAgICAgICAgICAgICAgaWYgKHVyaSA9PSBjdHh0LT5zdHJfeG1sX25zKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRuYW1lICE9IGN0eHQtPnN0cl94bWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfWE1MX05BTUVTUEFDRSwKICAgICAgICAgICAgICAgICAgICAgICJ4bWwgbmFtZXNwYWNlIFVSSSBjYW5ub3QgYmUgdGhlIGRlZmF1bHQgbmFtZXNwYWNlXG4iLApAQCAtOTM1Miw3ICs5NjA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0X2F0dHI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgobGVuID09IDI5KSAmJgotICAgICAgICAgICAgICAgICAgICAoeG1sU3RyRXF1YWwoVVJMLAorICAgICAgICAgICAgICAgICAgICAoeG1sU3RyRXF1YWwodXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQURfQ0FTVCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iKSkpIHsKICAgICAgICAgICAgICAgICAgICAgeG1sTnNFcnIoY3R4dCwgWE1MX05TX0VSUl9YTUxfTkFNRVNQQUNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICJyZXVzZSBvZiB0aGUgeG1sbnMgbmFtZXNwYWNlIG5hbWUgaXMgZm9yYmlkZGVuXG4iLApAQCAtOTM2MCwyMyArOTYxNSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfYXR0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogY2hlY2sgdGhhdCBpdCdzIG5vdCBhIGRlZmluZWQgbmFtZXNwYWNlCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvciAoaiA9IDE7aiA8PSBuYk5zO2orKykKLSAgICAgICAgICAgICAgICBpZiAoY3R4dC0+bnNUYWJbY3R4dC0+bnNOciAtIDIgKiBqXSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChqIDw9IG5iTnMpCi0gICAgICAgICAgICAgICAgeG1sRXJyQXR0cmlidXRlRHVwKGN0eHQsIE5VTEwsIGF0dG5hbWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGlmIChuc1B1c2goY3R4dCwgTlVMTCwgVVJMKSA+IDApIG5iTnMrKzsKIAorICAgICAgICAgICAgaWYgKHhtbFBhcnNlck5zUHVzaChjdHh0LCBOVUxMLCAmaHVyaSwgTlVMTCwgMCkgPiAwKQorICAgICAgICAgICAgICAgIG5iTnMrKzsKICAgICAgICAgfSBlbHNlIGlmIChhcHJlZml4ID09IGN0eHQtPnN0cl94bWxucykgewotICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqVVJMID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCBhdHR2YWx1ZSwgbGVuKTsKLSAgICAgICAgICAgIHhtbFVSSVB0ciB1cmk7CisgICAgICAgICAgICB4bWxIYXNoZWRTdHJpbmcgaHVyaTsKKyAgICAgICAgICAgIHhtbFVSSVB0ciBwYXJzZWRVcmk7CisKKyAgICAgICAgICAgIGh1cmkgPSB4bWxEaWN0TG9va3VwSGFzaGVkKGN0eHQtPmRpY3QsIGF0dHZhbHVlLCBsZW4pOworICAgICAgICAgICAgdXJpID0gaHVyaS5uYW1lOworICAgICAgICAgICAgaWYgKHVyaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gbmV4dF9hdHRyOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYXR0bmFtZSA9PSBjdHh0LT5zdHJfeG1sKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFVSTCAhPSBjdHh0LT5zdHJfeG1sX25zKSB7CisgICAgICAgICAgICAgICAgaWYgKHVyaSAhPSBjdHh0LT5zdHJfeG1sX25zKSB7CiAgICAgICAgICAgICAgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfWE1MX05BTUVTUEFDRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbCBuYW1lc3BhY2UgcHJlZml4IG1hcHBlZCB0byB3cm9uZyBVUklcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwpAQCAtOTM4Niw3ICs5NjQwLDcgQEAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBnb3RvIG5leHRfYXR0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChVUkwgPT0gY3R4dC0+c3RyX3htbF9ucykgeworICAgICAgICAgICAgaWYgKHVyaSA9PSBjdHh0LT5zdHJfeG1sX25zKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF0dG5hbWUgIT0gY3R4dC0+c3RyX3htbCkgewogICAgICAgICAgICAgICAgICAgICB4bWxOc0VycihjdHh0LCBYTUxfTlNfRVJSX1hNTF9OQU1FU1BBQ0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWwgbmFtZXNwYWNlIFVSSSBtYXBwZWQgdG8gd3JvbmcgcHJlZml4XG4iLApAQCAtOTQwMSw0OCArOTY1NSw0MCBAQAogICAgICAgICAgICAgICAgIGdvdG8gbmV4dF9hdHRyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKChsZW4gPT0gMjkpICYmCi0gICAgICAgICAgICAgICAgKHhtbFN0ckVxdWFsKFVSTCwKKyAgICAgICAgICAgICAgICAoeG1sU3RyRXF1YWwodXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQURfQ0FTVCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iKSkpIHsKICAgICAgICAgICAgICAgICB4bWxOc0VycihjdHh0LCBYTUxfTlNfRVJSX1hNTF9OQU1FU1BBQ0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInJldXNlIG9mIHRoZSB4bWxucyBuYW1lc3BhY2UgbmFtZSBpcyBmb3JiaWRkZW5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgZ290byBuZXh0X2F0dHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKFVSTCA9PSBOVUxMKSB8fCAoVVJMWzBdID09IDApKSB7CisgICAgICAgICAgICBpZiAoKHVyaSA9PSBOVUxMKSB8fCAodXJpWzBdID09IDApKSB7CiAgICAgICAgICAgICAgICAgeG1sTnNFcnIoY3R4dCwgWE1MX05TX0VSUl9YTUxfTkFNRVNQQUNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxuczolczogRW1wdHkgWE1MIG5hbWVzcGFjZSBpcyBub3QgYWxsb3dlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dG5hbWUsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgIGdvdG8gbmV4dF9hdHRyOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1cmkgPSB4bWxQYXJzZVVSSSgoY29uc3QgY2hhciAqKSBVUkwpOwotICAgICAgICAgICAgICAgIGlmICh1cmkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHBhcnNlZFVyaSA9IHhtbFBhcnNlVVJJKChjb25zdCBjaGFyICopIHVyaSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVyaSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9XQVJfTlNfVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxuczolczogJyVzJyBpcyBub3QgYSB2YWxpZCBVUklcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRuYW1lLCBVUkwsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0bmFtZSwgdXJpLCBOVUxMKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGN0eHQtPnBlZGFudGljKSAmJiAodXJpLT5zY2hlbWUgPT0gTlVMTCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjdHh0LT5wZWRhbnRpYykgJiYgKHBhcnNlZFVyaS0+c2NoZW1lID09IE5VTEwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxOc1dhcm4oY3R4dCwgWE1MX1dBUl9OU19VUklfUkVMQVRJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbG5zOiVzOiBVUkkgJXMgaXMgbm90IGFic29sdXRlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dG5hbWUsIFVSTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0bmFtZSwgdXJpLCBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB4bWxGcmVlVVJJKHVyaSk7CisgICAgICAgICAgICAgICAgICAgIHhtbEZyZWVVUkkocGFyc2VkVXJpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBjaGVjayB0aGF0IGl0J3Mgbm90IGEgZGVmaW5lZCBuYW1lc3BhY2UKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZm9yIChqID0gMTtqIDw9IG5iTnM7aisrKQotICAgICAgICAgICAgICAgIGlmIChjdHh0LT5uc1RhYltjdHh0LT5uc05yIC0gMiAqIGpdID09IGF0dG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGogPD0gbmJOcykKLSAgICAgICAgICAgICAgICB4bWxFcnJBdHRyaWJ1dGVEdXAoY3R4dCwgYXByZWZpeCwgYXR0bmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWYgKG5zUHVzaChjdHh0LCBhdHRuYW1lLCBVUkwpID4gMCkgbmJOcysrOwotCisgICAgICAgICAgICBpZiAoeG1sUGFyc2VyTnNQdXNoKGN0eHQsICZoYXR0bmFtZSwgJmh1cmksIE5VTEwsIDApID4gMCkKKyAgICAgICAgICAgICAgICBuYk5zKys7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogQWRkIHRoZSBwYWlyIHRvIGF0dHMKKyAgICAgICAgICAgICAqIFBvcHVsYXRlIGF0dHJpYnV0ZXMgYXJyYXksIHNlZSBhYm92ZSBmb3IgcmVwdXJwb3NpbmcKKyAgICAgICAgICAgICAqIG9mIHhtbENoYXIgcG9pbnRlcnMuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICgoYXR0cyA9PSBOVUxMKSB8fCAobmJhdHRzICsgNSA+IG1heGF0dHMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHhtbEN0eHRHcm93QXR0cnMoY3R4dCwgbmJhdHRzICsgNSkgPCAwKSB7CkBAIC05NDUxLDIyICs5Njk3LDI1IEBACiAgICAgICAgICAgICAgICAgbWF4YXR0cyA9IGN0eHQtPm1heGF0dHM7CiAgICAgICAgICAgICAgICAgYXR0cyA9IGN0eHQtPmF0dHM7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHh0LT5hdHRhbGxvY3NbbnJhdHRzKytdID0gYWxsb2M7CisgICAgICAgICAgICBjdHh0LT5hdHRhbGxvY3NbbnJhdHRzKytdID0gKGhhdHRuYW1lLmhhc2hWYWx1ZSAmIDB4N0ZGRkZGRkYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkKSBhbGxvYyA8PCAzMSk7CiAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGF0dG5hbWU7CiAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGFwcmVmaXg7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhlIG5hbWVzcGFjZSBVUkkgZmllbGQgaXMgdXNlZCB0ZW1wb3JhcmlseSB0byBwb2ludCBhdCB0aGUKLSAgICAgICAgICAgICAqIGJhc2Ugb2YgdGhlIGN1cnJlbnQgaW5wdXQgYnVmZmVyIGZvciBub24tYWxsb2NlZCBhdHRyaWJ1dGVzLgotICAgICAgICAgICAgICogV2hlbiB0aGUgaW5wdXQgYnVmZmVyIGlzIHJlYWxsb2NhdGVkLCBhbGwgdGhlIHBvaW50ZXJzIGJlY29tZQotICAgICAgICAgICAgICogaW52YWxpZCwgYnV0IHRoZXkgY2FuIGJlIHJlY29uc3RydWN0ZWQgbGF0ZXIuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChhbGxvYykKLSAgICAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IE5VTEw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXR0c1tuYmF0dHMrK10gPSBjdHh0LT5pbnB1dC0+YmFzZTsKLSAgICAgICAgICAgIGF0dHNbbmJhdHRzKytdID0gYXR0dmFsdWU7Ci0gICAgICAgICAgICBhdHR2YWx1ZSArPSBsZW47Ci0gICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGF0dHZhbHVlOworICAgICAgICAgICAgYXR0c1tuYmF0dHMrK10gPSAoY29uc3QgeG1sQ2hhciAqKSAoc2l6ZV90KSBoYXByZWZpeC5oYXNoVmFsdWU7CisgICAgICAgICAgICBpZiAoYWxsb2MpIHsKKyAgICAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGF0dHZhbHVlOworICAgICAgICAgICAgICAgIGF0dHZhbHVlICs9IGxlbjsKKyAgICAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGF0dHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGF0dHZhbHVlIHBvaW50cyBpbnRvIHRoZSBpbnB1dCBidWZmZXIgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICogcmVhbGxvY2F0ZWQuIFN0b3JlIGRpZmZlcmVuY2VzIHRvIGlucHV0LT5iYXNlIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICogVGhlIHBvaW50ZXJzIHdpbGwgYmUgcmVjb25zdHJ1Y3RlZCBsYXRlci4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9ICh2b2lkICopIChhdHR2YWx1ZSAtIEJBU0VfUFRSKTsKKyAgICAgICAgICAgICAgICBhdHR2YWx1ZSArPSBsZW47CisgICAgICAgICAgICAgICAgYXR0c1tuYmF0dHMrK10gPSAodm9pZCAqKSAoYXR0dmFsdWUgLSBCQVNFX1BUUik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogdGFnIGlmIHNvbWUgZGVhbGxvY2F0aW9uIGlzIG5lZWRlZAogICAgICAgICAgICAgICovCkBAIC05NDkwLDEyICs5NzM5LDYgQEAKIAkJCSAgICJhdHRyaWJ1dGVzIGNvbnN0cnVjdCBlcnJvclxuIik7CiAJICAgIGJyZWFrOwogCX0KLSAgICAgICAgaWYgKChjb25zID09IENVUl9DT05TVU1FRCkgJiYgKGlkID09IGN0eHQtPmlucHV0LT5pZCkgJiYKLSAgICAgICAgICAgIChhdHRuYW1lID09IE5VTEwpICYmIChhdHR2YWx1ZSA9PSBOVUxMKSkgewotCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SLAotCSAgICAgICAgICJ4bWxQYXJzZVN0YXJ0VGFnOiBwcm9ibGVtIHBhcnNpbmcgYXR0cmlidXRlc1xuIik7Ci0JICAgIGJyZWFrOwotCX0KICAgICAgICAgR1JPVzsKICAgICB9CiAKQEAgLTk1MDYsMTc1ICs5NzQ5LDI4NiBAQAogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCi0gICAgLyogUmVjb25zdHJ1Y3QgYXR0cmlidXRlIHZhbHVlIHBvaW50ZXJzLiAqLwotICAgIGZvciAoaSA9IDAsIGogPSAwOyBqIDwgbnJhdHRzOyBpICs9IDUsIGorKykgewotICAgICAgICBpZiAoYXR0c1tpKzJdICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBBcml0aG1ldGljIG9uIGRhbmdsaW5nIHBvaW50ZXJzIGlzIHRlY2huaWNhbGx5IHVuZGVmaW5lZAotICAgICAgICAgICAgICogYmVoYXZpb3IsIGJ1dCB3ZWxsLi4uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBjdHh0LT5pbnB1dC0+YmFzZSAtIGF0dHNbaSsyXTsKLSAgICAgICAgICAgIGF0dHNbaSsyXSAgPSBOVUxMOyAgICAvKiBSZXNldCByZXB1cnBvc2VkIG5hbWVzcGFjZSBVUkkgKi8KLSAgICAgICAgICAgIGF0dHNbaSszXSArPSBvZmZzZXQ7ICAvKiB2YWx1ZSAqLwotICAgICAgICAgICAgYXR0c1tpKzRdICs9IG9mZnNldDsgIC8qIHZhbHVlbmQgKi8KLSAgICAgICAgfQotICAgIH0KLQogICAgIC8qCi0gICAgICogVGhlIGF0dHJpYnV0ZXMgZGVmYXVsdGluZworICAgICAqIE5hbWVzcGFjZXMgZnJvbSBkZWZhdWx0IGF0dHJpYnV0ZXMKICAgICAgKi8KICAgICBpZiAoY3R4dC0+YXR0c0RlZmF1bHQgIT0gTlVMTCkgewogICAgICAgICB4bWxEZWZBdHRyc1B0ciBkZWZhdWx0czsKIAogCWRlZmF1bHRzID0geG1sSGFzaExvb2t1cDIoY3R4dC0+YXR0c0RlZmF1bHQsIGxvY2FsbmFtZSwgcHJlZml4KTsKIAlpZiAoZGVmYXVsdHMgIT0gTlVMTCkgewotCSAgICBmb3IgKGkgPSAwO2kgPCBkZWZhdWx0cy0+bmJBdHRycztpKyspIHsKLQkgICAgICAgIGF0dG5hbWUgPSBkZWZhdWx0cy0+dmFsdWVzWzUgKiBpXTsKLQkJYXByZWZpeCA9IGRlZmF1bHRzLT52YWx1ZXNbNSAqIGkgKyAxXTsKKwkgICAgZm9yIChpID0gMDsgaSA8IGRlZmF1bHRzLT5uYkF0dHJzOyBpKyspIHsKKyAgICAgICAgICAgICAgICB4bWxEZWZBdHRyICphdHRyID0gJmRlZmF1bHRzLT5hdHRyc1tpXTsKIAotICAgICAgICAgICAgICAgIC8qCi0JCSAqIHNwZWNpYWwgd29yayBmb3IgbmFtZXNwYWNlcyBkZWZhdWx0ZWQgZGVmcwotCQkgKi8KKwkgICAgICAgIGF0dG5hbWUgPSBhdHRyLT5uYW1lLm5hbWU7CisJCWFwcmVmaXggPSBhdHRyLT5wcmVmaXgubmFtZTsKKwogCQlpZiAoKGF0dG5hbWUgPT0gY3R4dC0+c3RyX3htbG5zKSAmJiAoYXByZWZpeCA9PSBOVUxMKSkgewotCQkgICAgLyoKLQkJICAgICAqIGNoZWNrIHRoYXQgaXQncyBub3QgYSBkZWZpbmVkIG5hbWVzcGFjZQotCQkgICAgICovCi0JCSAgICBmb3IgKGogPSAxO2ogPD0gbmJOcztqKyspCi0JCSAgICAgICAgaWYgKGN0eHQtPm5zVGFiW2N0eHQtPm5zTnIgLSAyICogal0gPT0gTlVMTCkKLQkJCSAgICBicmVhazsKLQkgICAgICAgICAgICBpZiAoaiA8PSBuYk5zKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VyRW50aXR5Q2hlY2soY3R4dCwgYXR0ci0+ZXhwYW5kZWRTaXplKTsKIAotCQkgICAgbnNuYW1lID0geG1sR2V0TmFtZXNwYWNlKGN0eHQsIE5VTEwpOwotCQkgICAgaWYgKG5zbmFtZSAhPSBkZWZhdWx0cy0+dmFsdWVzWzUgKiBpICsgMl0pIHsKLQkJCWlmIChuc1B1c2goY3R4dCwgTlVMTCwKLQkJCSAgICAgICAgICAgZGVmYXVsdHMtPnZhbHVlc1s1ICogaSArIDJdKSA+IDApCi0JCQkgICAgbmJOcysrOwotCQkgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeG1sUGFyc2VyTnNQdXNoKGN0eHQsIE5VTEwsICZhdHRyLT52YWx1ZSwgTlVMTCwgMSkgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbmJOcysrOwogCQl9IGVsc2UgaWYgKGFwcmVmaXggPT0gY3R4dC0+c3RyX3htbG5zKSB7Ci0JCSAgICAvKgotCQkgICAgICogY2hlY2sgdGhhdCBpdCdzIG5vdCBhIGRlZmluZWQgbmFtZXNwYWNlCi0JCSAgICAgKi8KLQkJICAgIGZvciAoaiA9IDE7aiA8PSBuYk5zO2orKykKLQkJICAgICAgICBpZiAoY3R4dC0+bnNUYWJbY3R4dC0+bnNOciAtIDIgKiBqXSA9PSBhdHRuYW1lKQotCQkJICAgIGJyZWFrOwotCSAgICAgICAgICAgIGlmIChqIDw9IG5iTnMpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB4bWxQYXJzZXJFbnRpdHlDaGVjayhjdHh0LCBhdHRyLT5leHBhbmRlZFNpemUpOwogCi0JCSAgICBuc25hbWUgPSB4bWxHZXROYW1lc3BhY2UoY3R4dCwgYXR0bmFtZSk7Ci0JCSAgICBpZiAobnNuYW1lICE9IGRlZmF1bHRzLT52YWx1ZXNbMl0pIHsKLQkJCWlmIChuc1B1c2goY3R4dCwgYXR0bmFtZSwKLQkJCSAgICAgICAgICAgZGVmYXVsdHMtPnZhbHVlc1s1ICogaSArIDJdKSA+IDApCi0JCQkgICAgbmJOcysrOwotCQkgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeG1sUGFyc2VyTnNQdXNoKGN0eHQsICZhdHRyLT5uYW1lLCAmYXR0ci0+dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDEpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5iTnMrKzsKIAkJfSBlbHNlIHsKLQkJICAgIC8qCi0JCSAgICAgKiBjaGVjayB0aGF0IGl0J3Mgbm90IGEgZGVmaW5lZCBhdHRyaWJ1dGUKLQkJICAgICAqLwotCQkgICAgZm9yIChqID0gMDtqIDwgbmJhdHRzO2orPTUpIHsKLQkJCWlmICgoYXR0bmFtZSA9PSBhdHRzW2pdKSAmJiAoYXByZWZpeCA9PSBhdHRzW2orMV0pKQotCQkJICAgIGJyZWFrOwotCQkgICAgfQotCQkgICAgaWYgKGogPCBuYmF0dHMpIGNvbnRpbnVlOwotCi0JCSAgICBpZiAoKGF0dHMgPT0gTlVMTCkgfHwgKG5iYXR0cyArIDUgPiBtYXhhdHRzKSkgewotCQkJaWYgKHhtbEN0eHRHcm93QXR0cnMoY3R4dCwgbmJhdHRzICsgNSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxuYW1lID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0JCQl9Ci0JCQltYXhhdHRzID0gY3R4dC0+bWF4YXR0czsKLQkJCWF0dHMgPSBjdHh0LT5hdHRzOwotCQkgICAgfQotCQkgICAgYXR0c1tuYmF0dHMrK10gPSBhdHRuYW1lOwotCQkgICAgYXR0c1tuYmF0dHMrK10gPSBhcHJlZml4OwotCQkgICAgaWYgKGFwcmVmaXggPT0gTlVMTCkKLQkJCWF0dHNbbmJhdHRzKytdID0gTlVMTDsKLQkJICAgIGVsc2UKLQkJICAgICAgICBhdHRzW25iYXR0cysrXSA9IHhtbEdldE5hbWVzcGFjZShjdHh0LCBhcHJlZml4KTsKLQkJICAgIGF0dHNbbmJhdHRzKytdID0gZGVmYXVsdHMtPnZhbHVlc1s1ICogaSArIDJdOwotCQkgICAgYXR0c1tuYmF0dHMrK10gPSBkZWZhdWx0cy0+dmFsdWVzWzUgKiBpICsgM107Ci0JCSAgICBpZiAoKGN0eHQtPnN0YW5kYWxvbmUgPT0gMSkgJiYKLQkJICAgICAgICAoZGVmYXVsdHMtPnZhbHVlc1s1ICogaSArIDRdICE9IE5VTEwpKSB7Ci0JCQl4bWxWYWxpZGl0eUVycm9yKGN0eHQsIFhNTF9EVERfU1RBTkRBTE9ORV9ERUZBVUxURUQsCi0JICAic3RhbmRhbG9uZTogYXR0cmlidXRlICVzIG9uICVzIGRlZmF1bHRlZCBmcm9tIGV4dGVybmFsIHN1YnNldFxuIiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRuYW1lLCBsb2NhbG5hbWUpOwotCQkgICAgfQotCQkgICAgbmJkZWYrKzsKLQkJfQorICAgICAgICAgICAgICAgICAgICBuYlRvdGFsRGVmICs9IDE7CisgICAgICAgICAgICAgICAgfQogCSAgICB9CiAJfQogICAgIH0KIAogICAgIC8qCi0gICAgICogVGhlIGF0dHJpYnV0ZXMgY2hlY2tpbmdzCisgICAgICogUmVzb2x2ZSBhdHRyaWJ1dGUgbmFtZXNwYWNlcwogICAgICAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuYmF0dHM7aSArPSA1KSB7CisgICAgZm9yIChpID0gMDsgaSA8IG5iYXR0czsgaSArPSA1KSB7CisgICAgICAgIGF0dG5hbWUgPSBhdHRzW2ldOworICAgICAgICBhcHJlZml4ID0gYXR0c1tpKzFdOworCiAgICAgICAgIC8qCiAJKiBUaGUgZGVmYXVsdCBuYW1lc3BhY2UgZG9lcyBub3QgYXBwbHkgdG8gYXR0cmlidXRlIG5hbWVzLgogCSovCi0JaWYgKGF0dHNbaSArIDFdICE9IE5VTEwpIHsKLQkgICAgbnNuYW1lID0geG1sR2V0TmFtZXNwYWNlKGN0eHQsIGF0dHNbaSArIDFdKTsKLQkgICAgaWYgKG5zbmFtZSA9PSBOVUxMKSB7Ci0JCXhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfVU5ERUZJTkVEX05BTUVTUEFDRSwKKwlpZiAoYXByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICBuc0luZGV4ID0gTlNfSU5ERVhfRU1QVFk7CisgICAgICAgIH0gZWxzZSBpZiAoYXByZWZpeCA9PSBjdHh0LT5zdHJfeG1sKSB7CisgICAgICAgICAgICBuc0luZGV4ID0gTlNfSU5ERVhfWE1MOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGFwcmVmaXgubmFtZSA9IGFwcmVmaXg7CisgICAgICAgICAgICBoYXByZWZpeC5oYXNoVmFsdWUgPSAoc2l6ZV90KSBhdHRzW2krMl07CisgICAgICAgICAgICBuc0luZGV4ID0geG1sUGFyc2VyTnNMb29rdXAoY3R4dCwgJmhhcHJlZml4LCBOVUxMKTsKKwkgICAgaWYgKG5zSW5kZXggPT0gSU5UX01BWCkgeworICAgICAgICAgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfVU5ERUZJTkVEX05BTUVTUEFDRSwKIAkJICAgICJOYW1lc3BhY2UgcHJlZml4ICVzIGZvciAlcyBvbiAlcyBpcyBub3QgZGVmaW5lZFxuIiwKLQkJICAgIGF0dHNbaSArIDFdLCBhdHRzW2ldLCBsb2NhbG5hbWUpOwotCSAgICB9Ci0JICAgIGF0dHNbaSArIDJdID0gbnNuYW1lOwotCX0gZWxzZQotCSAgICBuc25hbWUgPSBOVUxMOwotCS8qCi0JICogWyBXRkM6IFVuaXF1ZSBBdHQgU3BlYyBdCi0JICogTm8gYXR0cmlidXRlIG5hbWUgbWF5IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZQotCSAqIHN0YXJ0LXRhZyBvciBlbXB0eS1lbGVtZW50IHRhZy4KLQkgKiBBcyBleHRlbmRlZCBieSB0aGUgTmFtZXNwYWNlIGluIFhNTCBSRUMuCi0JICovCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBpO2ogKz0gNSkgewotCSAgICBpZiAoYXR0c1tpXSA9PSBhdHRzW2pdKSB7Ci0JICAgICAgICBpZiAoYXR0c1tpKzFdID09IGF0dHNbaisxXSkgewotCQkgICAgeG1sRXJyQXR0cmlidXRlRHVwKGN0eHQsIGF0dHNbaSsxXSwgYXR0c1tpXSk7Ci0JCSAgICBicmVhazsKLQkJfQotCQlpZiAoKG5zbmFtZSAhPSBOVUxMKSAmJiAoYXR0c1tqICsgMl0gPT0gbnNuYW1lKSkgewotCQkgICAgeG1sTnNFcnIoY3R4dCwgWE1MX05TX0VSUl9BVFRSSUJVVEVfUkVERUZJTkVELAotCQkJICAgICAiTmFtZXNwYWNlZCBBdHRyaWJ1dGUgJXMgaW4gJyVzJyByZWRlZmluZWRcbiIsCi0JCQkgICAgIGF0dHNbaV0sIG5zbmFtZSwgTlVMTCk7Ci0JCSAgICBicmVhazsKLQkJfQorCQkgICAgYXByZWZpeCwgYXR0bmFtZSwgbG9jYWxuYW1lKTsKKyAgICAgICAgICAgICAgICBuc0luZGV4ID0gTlNfSU5ERVhfRU1QVFk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdHRzW2krMl0gPSAoY29uc3QgeG1sQ2hhciAqKSAocHRyZGlmZl90KSBuc0luZGV4OworICAgIH0KKworICAgIC8qCisgICAgICogTWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlcyBpbmNsdWRpbmcgZGVmYXVsdCBhdHRyaWJ1dGVzLgorICAgICAqLworICAgIG1heEF0dHMgPSBucmF0dHMgKyBuYlRvdGFsRGVmOworCisgICAgLyoKKyAgICAgKiBWZXJpZnkgdGhhdCBhdHRyaWJ1dGUgbmFtZXMgYXJlIHVuaXF1ZS4KKyAgICAgKi8KKyAgICBpZiAobWF4QXR0cyA+IDEpIHsKKyAgICAgICAgYXR0ckhhc2hTaXplID0gNDsKKyAgICAgICAgd2hpbGUgKGF0dHJIYXNoU2l6ZSAvIDIgPCAodW5zaWduZWQpIG1heEF0dHMpCisgICAgICAgICAgICBhdHRySGFzaFNpemUgKj0gMjsKKworICAgICAgICBpZiAoYXR0ckhhc2hTaXplID4gY3R4dC0+YXR0ckhhc2hNYXgpIHsKKyAgICAgICAgICAgIHhtbEF0dHJIYXNoQnVja2V0ICp0bXA7CisKKyAgICAgICAgICAgIHRtcCA9IHhtbFJlYWxsb2MoY3R4dC0+YXR0ckhhc2gsIGF0dHJIYXNoU2l6ZSAqIHNpemVvZih0bXBbMF0pKTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN0eHQtPmF0dHJIYXNoID0gdG1wOworICAgICAgICAgICAgY3R4dC0+YXR0ckhhc2hNYXggPSBhdHRySGFzaFNpemU7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoY3R4dC0+YXR0ckhhc2gsIC0xLCBhdHRySGFzaFNpemUgKiBzaXplb2YoY3R4dC0+YXR0ckhhc2hbMF0pKTsKKworICAgICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaiA8IG5yYXR0czsgaSArPSA1LCBqKyspIHsKKyAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5zdXJpOworICAgICAgICAgICAgdW5zaWduZWQgaGFzaFZhbHVlLCBuYW1lSGFzaFZhbHVlLCB1cmlIYXNoVmFsdWU7CisgICAgICAgICAgICBpbnQgcmVzOworCisgICAgICAgICAgICBhdHRuYW1lID0gYXR0c1tpXTsKKyAgICAgICAgICAgIGFwcmVmaXggPSBhdHRzW2krMV07CisgICAgICAgICAgICBuc0luZGV4ID0gKHB0cmRpZmZfdCkgYXR0c1tpKzJdOworICAgICAgICAgICAgLyogSGFzaCB2YWx1ZXMgYWx3YXlzIGhhdmUgYml0IDMxIHNldCwgc2VlIGRpY3QuYyAqLworICAgICAgICAgICAgbmFtZUhhc2hWYWx1ZSA9IGN0eHQtPmF0dGFsbG9jc1tqXSB8IDB4ODAwMDAwMDA7CisKKyAgICAgICAgICAgIGlmIChuc0luZGV4ID09IE5TX0lOREVYX0VNUFRZKSB7CisgICAgICAgICAgICAgICAgbnN1cmkgPSBOVUxMOworICAgICAgICAgICAgICAgIHVyaUhhc2hWYWx1ZSA9IFVSSV9IQVNIX0VNUFRZOworICAgICAgICAgICAgfSBlbHNlIGlmIChuc0luZGV4ID09IE5TX0lOREVYX1hNTCkgeworICAgICAgICAgICAgICAgIG5zdXJpID0gY3R4dC0+c3RyX3htbF9uczsKKyAgICAgICAgICAgICAgICB1cmlIYXNoVmFsdWUgPSBVUklfSEFTSF9YTUw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5zdXJpID0gY3R4dC0+bnNUYWJbbnNJbmRleCAqIDIgKyAxXTsKKyAgICAgICAgICAgICAgICB1cmlIYXNoVmFsdWUgPSBjdHh0LT5uc2RiLT5leHRyYVtuc0luZGV4XS51cmlIYXNoVmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhhc2hWYWx1ZSA9IHhtbERpY3RDb21iaW5lSGFzaChuYW1lSGFzaFZhbHVlLCB1cmlIYXNoVmFsdWUpOworICAgICAgICAgICAgcmVzID0geG1sQXR0ckhhc2hJbnNlcnQoY3R4dCwgYXR0ckhhc2hTaXplLCBhdHRuYW1lLCBuc3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hWYWx1ZSwgaSk7CisgICAgICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFsgV0ZDOiBVbmlxdWUgQXR0IFNwZWMgXQorICAgICAgICAgICAgICogTm8gYXR0cmlidXRlIG5hbWUgbWF5IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICogc3RhcnQtdGFnIG9yIGVtcHR5LWVsZW1lbnQgdGFnLgorICAgICAgICAgICAgICogQXMgZXh0ZW5kZWQgYnkgdGhlIE5hbWVzcGFjZSBpbiBYTUwgUkVDLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocmVzIDwgSU5UX01BWCkgeworICAgICAgICAgICAgICAgIGlmIChhcHJlZml4ID09IGF0dHNbcmVzKzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHhtbEVyckF0dHJpYnV0ZUR1cChjdHh0LCBhcHJlZml4LCBhdHRuYW1lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4bWxOc0VycihjdHh0LCBYTUxfTlNfRVJSX0FUVFJJQlVURV9SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lc3BhY2VkIEF0dHJpYnV0ZSAlcyBpbiAnJXMnIHJlZGVmaW5lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0bmFtZSwgbnN1cmksIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogRGVmYXVsdCBhdHRyaWJ1dGVzCisgICAgICovCisgICAgaWYgKGN0eHQtPmF0dHNEZWZhdWx0ICE9IE5VTEwpIHsKKyAgICAgICAgeG1sRGVmQXR0cnNQdHIgZGVmYXVsdHM7CisKKwlkZWZhdWx0cyA9IHhtbEhhc2hMb29rdXAyKGN0eHQtPmF0dHNEZWZhdWx0LCBsb2NhbG5hbWUsIHByZWZpeCk7CisJaWYgKGRlZmF1bHRzICE9IE5VTEwpIHsKKwkgICAgZm9yIChpID0gMDsgaSA8IGRlZmF1bHRzLT5uYkF0dHJzOyBpKyspIHsKKyAgICAgICAgICAgICAgICB4bWxEZWZBdHRyICphdHRyID0gJmRlZmF1bHRzLT5hdHRyc1tpXTsKKyAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuc3VyaTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoYXNoVmFsdWUsIHVyaUhhc2hWYWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzOworCisJICAgICAgICBhdHRuYW1lID0gYXR0ci0+bmFtZS5uYW1lOworCQlhcHJlZml4ID0gYXR0ci0+cHJlZml4Lm5hbWU7CisKKwkJaWYgKChhdHRuYW1lID09IGN0eHQtPnN0cl94bWxucykgJiYgKGFwcmVmaXggPT0gTlVMTCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQlpZiAoYXByZWZpeCA9PSBjdHh0LT5zdHJfeG1sbnMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKGFwcmVmaXggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBuc0luZGV4ID0gTlNfSU5ERVhfRU1QVFk7CisgICAgICAgICAgICAgICAgICAgIG5zdXJpID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgdXJpSGFzaFZhbHVlID0gVVJJX0hBU0hfRU1QVFk7CisgICAgICAgICAgICAgICAgfSBpZiAoYXByZWZpeCA9PSBjdHh0LT5zdHJfeG1sKSB7CisgICAgICAgICAgICAgICAgICAgIG5zSW5kZXggPSBOU19JTkRFWF9YTUw7CisgICAgICAgICAgICAgICAgICAgIG5zdXJpID0gY3R4dC0+c3RyX3htbF9uczsKKyAgICAgICAgICAgICAgICAgICAgdXJpSGFzaFZhbHVlID0gVVJJX0hBU0hfWE1MOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXByZWZpeCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIG5zSW5kZXggPSB4bWxQYXJzZXJOc0xvb2t1cChjdHh0LCAmYXR0ci0+cHJlZml4LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5zSW5kZXggPT0gSU5UX01BWCkgeworICAgICAgICAgICAgICAgICAgICAgICAgeG1sTnNFcnIoY3R4dCwgWE1MX05TX0VSUl9VTkRFRklORURfTkFNRVNQQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVzcGFjZSBwcmVmaXggJXMgZm9yICVzIG9uICVzIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcmVmaXgsIGF0dG5hbWUsIGxvY2FsbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuc0luZGV4ID0gTlNfSU5ERVhfRU1QVFk7CisgICAgICAgICAgICAgICAgICAgICAgICBuc3VyaSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmlIYXNoVmFsdWUgPSBVUklfSEFTSF9FTVBUWTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zdXJpID0gY3R4dC0+bnNUYWJbbnNJbmRleCAqIDIgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyaUhhc2hWYWx1ZSA9IGN0eHQtPm5zZGItPmV4dHJhW25zSW5kZXhdLnVyaUhhc2hWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQ2hlY2sgd2hldGhlciB0aGUgYXR0cmlidXRlIGV4aXN0cworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChtYXhBdHRzID4gMSkgeworICAgICAgICAgICAgICAgICAgICBoYXNoVmFsdWUgPSB4bWxEaWN0Q29tYmluZUhhc2goYXR0ci0+bmFtZS5oYXNoVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlIYXNoVmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXMgPSB4bWxBdHRySGFzaEluc2VydChjdHh0LCBhdHRySGFzaFNpemUsIGF0dG5hbWUsIG5zdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoVmFsdWUsIG5iYXR0cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgPCBJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXByZWZpeCA9PSBhdHRzW3JlcysxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfQVRUUklCVVRFX1JFREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lc3BhY2VkIEF0dHJpYnV0ZSAlcyBpbiAnJXMnIHJlZGVmaW5lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dG5hbWUsIG5zdXJpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHhtbFBhcnNlckVudGl0eUNoZWNrKGN0eHQsIGF0dHItPmV4cGFuZGVkU2l6ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoKGF0dHMgPT0gTlVMTCkgfHwgKG5iYXR0cyArIDUgPiBtYXhhdHRzKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeG1sQ3R4dEdyb3dBdHRycyhjdHh0LCBuYmF0dHMgKyA1KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsbmFtZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWF4YXR0cyA9IGN0eHQtPm1heGF0dHM7CisgICAgICAgICAgICAgICAgICAgIGF0dHMgPSBjdHh0LT5hdHRzOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGF0dHNbbmJhdHRzKytdID0gYXR0bmFtZTsKKyAgICAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGFwcmVmaXg7CisgICAgICAgICAgICAgICAgYXR0c1tuYmF0dHMrK10gPSAoY29uc3QgeG1sQ2hhciAqKSAocHRyZGlmZl90KSBuc0luZGV4OworICAgICAgICAgICAgICAgIGF0dHNbbmJhdHRzKytdID0gYXR0ci0+dmFsdWUubmFtZTsKKyAgICAgICAgICAgICAgICBhdHRzW25iYXR0cysrXSA9IGF0dHItPnZhbHVlRW5kOworICAgICAgICAgICAgICAgIGlmICgoY3R4dC0+c3RhbmRhbG9uZSA9PSAxKSAmJiAoYXR0ci0+ZXh0ZXJuYWwgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeG1sVmFsaWRpdHlFcnJvcihjdHh0LCBYTUxfRFREX1NUQU5EQUxPTkVfREVGQVVMVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFuZGFsb25lOiBhdHRyaWJ1dGUgJXMgb24gJXMgZGVmYXVsdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSBleHRlcm5hbCBzdWJzZXRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0bmFtZSwgbG9jYWxuYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmJkZWYrKzsKIAkgICAgfQogCX0KICAgICB9CiAKLSAgICBuc25hbWUgPSB4bWxHZXROYW1lc3BhY2UoY3R4dCwgcHJlZml4KTsKLSAgICBpZiAoKHByZWZpeCAhPSBOVUxMKSAmJiAobnNuYW1lID09IE5VTEwpKSB7CisgICAgLyoKKyAgICAgKiBSZWNvbnN0cnVjdCBhdHRyaWJ1dGUgcG9pbnRlcnMKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG5iYXR0czsgaSArPSA1LCBqKyspIHsKKyAgICAgICAgLyogbmFtZXNwYWNlIFVSSSAqLworICAgICAgICBuc0luZGV4ID0gKHB0cmRpZmZfdCkgYXR0c1tpKzJdOworICAgICAgICBpZiAobnNJbmRleCA9PSBJTlRfTUFYKQorICAgICAgICAgICAgYXR0c1tpKzJdID0gTlVMTDsKKyAgICAgICAgZWxzZSBpZiAobnNJbmRleCA9PSBJTlRfTUFYIC0gMSkKKyAgICAgICAgICAgIGF0dHNbaSsyXSA9IGN0eHQtPnN0cl94bWxfbnM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGF0dHNbaSsyXSA9IGN0eHQtPm5zVGFiW25zSW5kZXggKiAyICsgMV07CisKKyAgICAgICAgaWYgKChqIDwgbnJhdHRzKSAmJiAoY3R4dC0+YXR0YWxsb2NzW2pdICYgMHg4MDAwMDAwMCkgPT0gMCkgeworICAgICAgICAgICAgYXR0c1tpKzNdID0gQkFTRV9QVFIgKyAocHRyZGlmZl90KSBhdHRzW2krM107ICAvKiB2YWx1ZSAqLworICAgICAgICAgICAgYXR0c1tpKzRdID0gQkFTRV9QVFIgKyAocHRyZGlmZl90KSBhdHRzW2krNF07ICAvKiB2YWx1ZW5kICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICB1cmkgPSB4bWxQYXJzZXJOc0xvb2t1cFVyaShjdHh0LCAmaHByZWZpeCk7CisgICAgaWYgKChwcmVmaXggIT0gTlVMTCkgJiYgKHVyaSA9PSBOVUxMKSkgewogCXhtbE5zRXJyKGN0eHQsIFhNTF9OU19FUlJfVU5ERUZJTkVEX05BTUVTUEFDRSwKIAkgICAgICAgICAiTmFtZXNwYWNlIHByZWZpeCAlcyBvbiAlcyBpcyBub3QgZGVmaW5lZFxuIiwKIAkJIHByZWZpeCwgbG9jYWxuYW1lLCBOVUxMKTsKICAgICB9CiAgICAgKnByZWYgPSBwcmVmaXg7Ci0gICAgKlVSSSA9IG5zbmFtZTsKKyAgICAqVVJJID0gdXJpOwogCiAgICAgLyoKLSAgICAgKiBTQVg6IFN0YXJ0IG9mIEVsZW1lbnQgIQorICAgICAqIFNBWCBjYWxsYmFjawogICAgICAqLwogICAgIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmIChjdHh0LT5zYXgtPnN0YXJ0RWxlbWVudE5zICE9IE5VTEwpICYmCiAJKCFjdHh0LT5kaXNhYmxlU0FYKSkgewogCWlmIChuYk5zID4gMCkKLQkgICAgY3R4dC0+c2F4LT5zdGFydEVsZW1lbnROcyhjdHh0LT51c2VyRGF0YSwgbG9jYWxuYW1lLCBwcmVmaXgsCi0JCQkgIG5zbmFtZSwgbmJOcywgJmN0eHQtPm5zVGFiW2N0eHQtPm5zTnIgLSAyICogbmJOc10sCisJICAgIGN0eHQtPnNheC0+c3RhcnRFbGVtZW50TnMoY3R4dC0+dXNlckRhdGEsIGxvY2FsbmFtZSwgcHJlZml4LCB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5iTnMsIGN0eHQtPm5zVGFiICsgMiAqIChjdHh0LT5uc05yIC0gbmJOcyksCiAJCQkgIG5iYXR0cyAvIDUsIG5iZGVmLCBhdHRzKTsKIAllbHNlCi0JICAgIGN0eHQtPnNheC0+c3RhcnRFbGVtZW50TnMoY3R4dC0+dXNlckRhdGEsIGxvY2FsbmFtZSwgcHJlZml4LAotCSAgICAgICAgICAgICAgICAgIG5zbmFtZSwgMCwgTlVMTCwgbmJhdHRzIC8gNSwgbmJkZWYsIGF0dHMpOworCSAgICBjdHh0LT5zYXgtPnN0YXJ0RWxlbWVudE5zKGN0eHQtPnVzZXJEYXRhLCBsb2NhbG5hbWUsIHByZWZpeCwgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCBuYmF0dHMgLyA1LCBuYmRlZiwgYXR0cyk7CiAgICAgfQogCiBkb25lOgogICAgIC8qCi0gICAgICogRnJlZSB1cCBhdHRyaWJ1dGUgYWxsb2NhdGVkIHN0cmluZ3MgaWYgbmVlZGVkCisgICAgICogRnJlZSBhbGxvY2F0ZWQgYXR0cmlidXRlIHZhbHVlcwogICAgICAqLwogICAgIGlmIChhdHR2YWwgIT0gMCkgewotCWZvciAoaSA9IDMsaiA9IDA7IGogPCBucmF0dHM7aSArPSA1LGorKykKLQkgICAgaWYgKChjdHh0LT5hdHRhbGxvY3Nbal0gIT0gMCkgJiYgKGF0dHNbaV0gIT0gTlVMTCkpCi0JICAgICAgICB4bWxGcmVlKCh4bWxDaGFyICopIGF0dHNbaV0pOworCWZvciAoaSA9IDAsIGogPSAwOyBqIDwgbnJhdHRzOyBpICs9IDUsIGorKykKKwkgICAgaWYgKGN0eHQtPmF0dGFsbG9jc1tqXSAmIDB4ODAwMDAwMDApCisJICAgICAgICB4bWxGcmVlKCh4bWxDaGFyICopIGF0dHNbaSszXSk7CiAgICAgfQogCisgICAgKm5iTnNQdHIgPSBuYk5zOwogICAgIHJldHVybihsb2NhbG5hbWUpOwogfQogCkBAIC05Njg0LDcgKzEwMDM4LDcgQEAKICAqIEBsaW5lOiAgbGluZSBvZiB0aGUgc3RhcnQgdGFnCiAgKiBAbnNOcjogIG51bWJlciBvZiBuYW1lc3BhY2VzIG9uIHRoZSBzdGFydCB0YWcKICAqCi0gKiBwYXJzZSBhbiBlbmQgb2YgdGFnCisgKiBQYXJzZSBhbiBlbmQgdGFnLiBBbHdheXMgY29uc3VtZXMgJzwvJy4KICAqCiAgKiBbNDJdIEVUYWcgOjo9ICc8LycgTmFtZSBTPyAnPicKICAqCkBAIC05NzQ0LDE0ICsxMDA5OCwxNiBAQAogCiAgICAgc3BhY2VQb3AoY3R4dCk7CiAgICAgaWYgKHRhZy0+bnNOciAhPSAwKQotCW5zUG9wKGN0eHQsIHRhZy0+bnNOcik7CisJeG1sUGFyc2VyTnNQb3AoY3R4dCwgdGFnLT5uc05yKTsKIH0KIAogLyoqCiAgKiB4bWxQYXJzZUNEU2VjdDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgotICogUGFyc2UgZXNjYXBlZCBwdXJlIHJhdyBjb250ZW50LgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCisgKiBQYXJzZSBlc2NhcGVkIHB1cmUgcmF3IGNvbnRlbnQuIEFsd2F5cyBjb25zdW1lcyAnPCFbJy4KICAqCiAgKiBbMThdIENEU2VjdCA6Oj0gQ0RTdGFydCBDRGF0YSBDREVuZAogICoKQEAgLTk3NjksNjcgKzEwMTI1LDYwIEBACiAgICAgaW50IHIsIHJsOwogICAgIGludAlzLCBzbDsKICAgICBpbnQgY3VyLCBsOwotICAgIGludCBjb3VudCA9IDA7CiAgICAgaW50IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KICAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9IVUdFX0xFTkdUSCA6CiAgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfVEVYVF9MRU5HVEg7CiAKLSAgICAvKiBDaGVjayAyLjYuMCB3YXMgTlhUKDApIG5vdCBSQVcgKi8KLSAgICBpZiAoQ01QOShDVVJfUFRSLCAnPCcsICchJywgJ1snLCAnQycsICdEJywgJ0EnLCAnVCcsICdBJywgJ1snKSkgewotCVNLSVAoOSk7Ci0gICAgfSBlbHNlCisgICAgaWYgKChDVVIgIT0gJzwnKSB8fCAoTlhUKDEpICE9ICchJykgfHwgKE5YVCgyKSAhPSAnWycpKQogICAgICAgICByZXR1cm47CisgICAgU0tJUCgzKTsKKworICAgIGlmICghQ01QNihDVVJfUFRSLCAnQycsICdEJywgJ0EnLCAnVCcsICdBJywgJ1snKSkKKyAgICAgICAgcmV0dXJuOworICAgIFNLSVAoNik7CiAKICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DREFUQV9TRUNUSU9OOwogICAgIHIgPSBDVVJfQ0hBUihybCk7CiAgICAgaWYgKCFJU19DSEFSKHIpKSB7CiAJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9DREFUQV9OT1RfRklOSVNIRUQsIE5VTEwpOwotCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBvdXQ7CiAgICAgfQogICAgIE5FWFRMKHJsKTsKICAgICBzID0gQ1VSX0NIQVIoc2wpOwogICAgIGlmICghSVNfQ0hBUihzKSkgewogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfQ0RBVEFfTk9UX0ZJTklTSEVELCBOVUxMKTsKLQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gb3V0OwogICAgIH0KICAgICBORVhUTChzbCk7CiAgICAgY3VyID0gQ1VSX0NIQVIobCk7Ci0gICAgYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhzaXplKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKIAl4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7Ci0JcmV0dXJuOworICAgICAgICBnb3RvIG91dDsKICAgICB9CiAgICAgd2hpbGUgKElTX0NIQVIoY3VyKSAmJgogICAgICAgICAgICAoKHIgIT0gJ10nKSB8fCAocyAhPSAnXScpIHx8IChjdXIgIT0gJz4nKSkpIHsKIAlpZiAobGVuICsgNSA+PSBzaXplKSB7CiAJICAgIHhtbENoYXIgKnRtcDsKIAotCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1Ziwgc2l6ZSAqIDIgKiBzaXplb2YoeG1sQ2hhcikpOworCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1Ziwgc2l6ZSAqIDIpOwogCSAgICBpZiAodG1wID09IE5VTEwpIHsKLQkgICAgICAgIHhtbEZyZWUoYnVmKTsKIAkJeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwotCQlyZXR1cm47CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAJICAgIH0KIAkgICAgYnVmID0gdG1wOwogCSAgICBzaXplICo9IDI7CiAJfQotCUNPUFlfQlVGKHJsLGJ1ZixsZW4scik7CisJQ09QWV9CVUYoYnVmLCBsZW4sIHIpOworICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICB4bWxGYXRhbEVyck1zZyhjdHh0LCBYTUxfRVJSX0NEQVRBX05PVF9GSU5JU0hFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRGF0YSBzZWN0aW9uIHRvbyBiaWcgZm91bmRcbiIpOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KIAlyID0gczsKIAlybCA9IHNsOwogCXMgPSBjdXI7CiAJc2wgPSBsOwotCWNvdW50Kys7Ci0JaWYgKGNvdW50ID4gNTApIHsKLQkgICAgU0hSSU5LOwotCSAgICBHUk9XOwotICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLQkJeG1sRnJlZShidWYpOwotCQlyZXR1cm47Ci0gICAgICAgICAgICB9Ci0JICAgIGNvdW50ID0gMDsKLQl9CiAJTkVYVEwobCk7CiAJY3VyID0gQ1VSX0NIQVIobCk7CiAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKQEAgLTk4NDAsMTIgKzEwMTg5LDE0IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgYnVmW2xlbl0gPSAwOwotICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7CisgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKKyAgICAgICAgeG1sRnJlZShidWYpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChjdXIgIT0gJz4nKSB7CiAJeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9DREFUQV9OT1RfRklOSVNIRUQsCiAJICAgICAgICAgICAgICAgICAgICAgIkNEYXRhIHNlY3Rpb24gbm90IGZpbmlzaGVkXG4lLjUwc1xuIiwgYnVmKTsKLQl4bWxGcmVlKGJ1Zik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBvdXQ7CiAgICAgfQogICAgIE5FWFRMKGwpOwogCkBAIC05ODU4LDYgKzEwMjA5LDEwIEBACiAJZWxzZSBpZiAoY3R4dC0+c2F4LT5jaGFyYWN0ZXJzICE9IE5VTEwpCiAJICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwgYnVmLCBsZW4pOwogICAgIH0KKworb3V0OgorICAgIGlmIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwogICAgIHhtbEZyZWUoYnVmKTsKIH0KIApAQCAtOTg3NCwxMCArMTAyMjksOCBAQAogICAgIGludCBuYW1lTnIgPSBjdHh0LT5uYW1lTnI7CiAKICAgICBHUk9XOwotICAgIHdoaWxlICgoUkFXICE9IDApICYmCisgICAgd2hpbGUgKChjdHh0LT5pbnB1dC0+Y3VyIDwgY3R4dC0+aW5wdXQtPmVuZCkgJiYKIAkgICAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikpIHsKLSAgICAgICAgaW50IGlkID0gY3R4dC0+aW5wdXQtPmlkOwotCXVuc2lnbmVkIGxvbmcgY29ucyA9IENVUl9DT05TVU1FRDsKIAljb25zdCB4bWxDaGFyICpjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyOwogCiAJLyoKQEAgLTk5MzAsMTggKzEwMjgzLDExIEBACiAJICogTGFzdCBjYXNlLCB0ZXh0LiBOb3RlIHRoYXQgUmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBkaXJlY3RseS4KIAkgKi8KIAllbHNlIHsKLQkgICAgeG1sUGFyc2VDaGFyRGF0YShjdHh0LCAwKTsKKwkgICAgeG1sUGFyc2VDaGFyRGF0YUludGVybmFsKGN0eHQsIDApOwogCX0KIAotCUdST1c7CiAJU0hSSU5LOwotCi0JaWYgKChjb25zID09IENVUl9DT05TVU1FRCkgJiYgKGlkID09IGN0eHQtPmlucHV0LT5pZCkpIHsKLQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkgICAgICAgICAgICAgICAgImRldGVjdGVkIGFuIGVycm9yIGluIGVsZW1lbnQgY29udGVudFxuIik7Ci0JICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7Ci0gICAgICAgICAgICBicmVhazsKLQl9CisJR1JPVzsKICAgICB9CiB9CiAKQEAgLTk5NjAsNyArMTAzMDYsOSBAQAogCiAgICAgeG1sUGFyc2VDb250ZW50SW50ZXJuYWwoY3R4dCk7CiAKLSAgICBpZiAoKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpICYmIChjdHh0LT5uYW1lTnIgPiBuYW1lTnIpKSB7CisgICAgaWYgKChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSAmJgorICAgICAgICAoY3R4dC0+ZXJyTm8gPT0gWE1MX0VSUl9PSykgJiYKKyAgICAgICAgKGN0eHQtPm5hbWVOciA+IG5hbWVOcikpIHsKICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSA9IGN0eHQtPm5hbWVUYWJbY3R4dC0+bmFtZU5yIC0gMV07CiAgICAgICAgIGludCBsaW5lID0gY3R4dC0+cHVzaFRhYltjdHh0LT5uYW1lTnIgLSAxXS5saW5lOwogICAgICAgICB4bWxGYXRhbEVyck1zZ1N0ckludFN0cihjdHh0LCBYTUxfRVJSX1RBR19OT1RfRklOSVNIRUQsCkBAIC05OTczLDYgKzEwMzIxLDggQEAKICAqIHhtbFBhcnNlRWxlbWVudDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgZWxlbWVudAogICoKICAqIFszOV0gZWxlbWVudCA6Oj0gRW1wdHlFbGVtVGFnIHwgU1RhZyBjb250ZW50IEVUYWcKQEAgLTk5OTIsMTIgKzEwMzQyLDE0IEBACiAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCiAJcmV0dXJuOwogCi0gICAgaWYgKENVUiA9PSAwKSB7Ci0gICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUgPSBjdHh0LT5uYW1lVGFiW2N0eHQtPm5hbWVOciAtIDFdOwotICAgICAgICBpbnQgbGluZSA9IGN0eHQtPnB1c2hUYWJbY3R4dC0+bmFtZU5yIC0gMV0ubGluZTsKLSAgICAgICAgeG1sRmF0YWxFcnJNc2dTdHJJbnRTdHIoY3R4dCwgWE1MX0VSUl9UQUdfTk9UX0ZJTklTSEVELAotICAgICAgICAgICAgICAgICJQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnICVzIGxpbmUgJWRcbiIsCi0JCW5hbWUsIGxpbmUsIE5VTEwpOworICAgIGlmIChjdHh0LT5pbnB1dC0+Y3VyID49IGN0eHQtPmlucHV0LT5lbmQpIHsKKyAgICAgICAgaWYgKGN0eHQtPmVyck5vID09IFhNTF9FUlJfT0spIHsKKyAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKm5hbWUgPSBjdHh0LT5uYW1lVGFiW2N0eHQtPm5hbWVOciAtIDFdOworICAgICAgICAgICAgaW50IGxpbmUgPSBjdHh0LT5wdXNoVGFiW2N0eHQtPm5hbWVOciAtIDFdLmxpbmU7CisgICAgICAgICAgICB4bWxGYXRhbEVyck1zZ1N0ckludFN0cihjdHh0LCBYTUxfRVJSX1RBR19OT1RfRklOSVNIRUQsCisgICAgICAgICAgICAgICAgICAgICJQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnICVzIGxpbmUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxpbmUsIE5VTEwpOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMDEwLDYgKzEwMzYyLDggQEAKICAqCiAgKiBQYXJzZSB0aGUgc3RhcnQgb2YgYW4gWE1MIGVsZW1lbnQuIFJldHVybnMgLTEgaW4gY2FzZSBvZiBlcnJvciwgMCBpZiBhbgogICogb3BlbmluZyB0YWcgd2FzIHBhcnNlZCwgMSBpZiBhbiBlbXB0eSBlbGVtZW50IHdhcyBwYXJzZWQuCisgKgorICogQWx3YXlzIGNvbnN1bWVzICc8Jy4KICAqLwogc3RhdGljIGludAogeG1sUGFyc2VFbGVtZW50U3RhcnQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CkBAIC0xMDAxNyw5ICsxMDM3MSw5IEBACiAgICAgY29uc3QgeG1sQ2hhciAqcHJlZml4ID0gTlVMTDsKICAgICBjb25zdCB4bWxDaGFyICpVUkkgPSBOVUxMOwogICAgIHhtbFBhcnNlck5vZGVJbmZvIG5vZGVfaW5mbzsKLSAgICBpbnQgbGluZSwgdGxlbiA9IDA7Ci0gICAgeG1sTm9kZVB0ciByZXQ7Ci0gICAgaW50IG5zTnIgPSBjdHh0LT5uc05yOworICAgIGludCBsaW5lOworICAgIHhtbE5vZGVQdHIgY3VyOworICAgIGludCBuYk5zID0gMDsKIAogICAgIGlmICgoKHVuc2lnbmVkIGludCkgY3R4dC0+bmFtZU5yID4geG1sUGFyc2VyTWF4RGVwdGgpICYmCiAgICAgICAgICgoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9IVUdFKSA9PSAwKSkgewpAQCAtMTAwNDgsNyArMTA0MDIsNyBAQAogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKICAgICBpZiAoY3R4dC0+c2F4MikKICNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCi0gICAgICAgIG5hbWUgPSB4bWxQYXJzZVN0YXJ0VGFnMihjdHh0LCAmcHJlZml4LCAmVVJJLCAmdGxlbik7CisgICAgICAgIG5hbWUgPSB4bWxQYXJzZVN0YXJ0VGFnMihjdHh0LCAmcHJlZml4LCAmVVJJLCAmbmJOcyk7CiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogICAgIGVsc2UKIAluYW1lID0geG1sUGFyc2VTdGFydFRhZyhjdHh0KTsKQEAgLTEwMDU5LDggKzEwNDEzLDggQEAKIAlzcGFjZVBvcChjdHh0KTsKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICB9Ci0gICAgbmFtZU5zUHVzaChjdHh0LCBuYW1lLCBwcmVmaXgsIFVSSSwgbGluZSwgY3R4dC0+bnNOciAtIG5zTnIpOwotICAgIHJldCA9IGN0eHQtPm5vZGU7CisgICAgbmFtZU5zUHVzaChjdHh0LCBuYW1lLCBwcmVmaXgsIFVSSSwgbGluZSwgbmJOcyk7CisgICAgY3VyID0gY3R4dC0+bm9kZTsKIAogI2lmZGVmIExJQlhNTF9WQUxJRF9FTkFCTEVECiAgICAgLyoKQEAgLTEwMDkxLDE5ICsxMDQ0NSwyNSBAQAogCX0KIAluYW1lUG9wKGN0eHQpOwogCXNwYWNlUG9wKGN0eHQpOwotCWlmIChuc05yICE9IGN0eHQtPm5zTnIpCi0JICAgIG5zUG9wKGN0eHQsIGN0eHQtPm5zTnIgLSBuc05yKTsKLQlpZiAoIHJldCAhPSBOVUxMICYmIGN0eHQtPnJlY29yZF9pbmZvICkgewotCSAgIG5vZGVfaW5mby5lbmRfcG9zID0gY3R4dC0+aW5wdXQtPmNvbnN1bWVkICsKLQkJCSAgICAgIChDVVJfUFRSIC0gY3R4dC0+aW5wdXQtPmJhc2UpOwotCSAgIG5vZGVfaW5mby5lbmRfbGluZSA9IGN0eHQtPmlucHV0LT5saW5lOwotCSAgIG5vZGVfaW5mby5ub2RlID0gcmV0OwotCSAgIHhtbFBhcnNlckFkZE5vZGVJbmZvKGN0eHQsICZub2RlX2luZm8pOworCWlmIChuYk5zID4gMCkKKwkgICAgeG1sUGFyc2VyTnNQb3AoY3R4dCwgbmJOcyk7CisJaWYgKGN1ciAhPSBOVUxMICYmIGN0eHQtPnJlY29yZF9pbmZvKSB7CisgICAgICAgICAgICBub2RlX2luZm8ubm9kZSA9IGN1cjsKKyAgICAgICAgICAgIG5vZGVfaW5mby5lbmRfcG9zID0gY3R4dC0+aW5wdXQtPmNvbnN1bWVkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENVUl9QVFIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7CisgICAgICAgICAgICBub2RlX2luZm8uZW5kX2xpbmUgPSBjdHh0LT5pbnB1dC0+bGluZTsKKyAgICAgICAgICAgIHhtbFBhcnNlckFkZE5vZGVJbmZvKGN0eHQsICZub2RlX2luZm8pOwogCX0KIAlyZXR1cm4oMSk7CiAgICAgfQogICAgIGlmIChSQVcgPT0gJz4nKSB7CiAgICAgICAgIE5FWFQxOworICAgICAgICBpZiAoY3VyICE9IE5VTEwgJiYgY3R4dC0+cmVjb3JkX2luZm8pIHsKKyAgICAgICAgICAgIG5vZGVfaW5mby5ub2RlID0gY3VyOworICAgICAgICAgICAgbm9kZV9pbmZvLmVuZF9wb3MgPSAwOworICAgICAgICAgICAgbm9kZV9pbmZvLmVuZF9saW5lID0gMDsKKyAgICAgICAgICAgIHhtbFBhcnNlckFkZE5vZGVJbmZvKGN0eHQsICZub2RlX2luZm8pOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgeG1sRmF0YWxFcnJNc2dTdHJJbnRTdHIoY3R4dCwgWE1MX0VSUl9HVF9SRVFVSVJFRCwKIAkJICAgICAiQ291bGRuJ3QgZmluZCBlbmQgb2YgU3RhcnQgVGFnICVzIGxpbmUgJWRcbiIsCkBAIC0xMDExNSwxOSArMTA0NzUsOCBAQAogCW5vZGVQb3AoY3R4dCk7CiAJbmFtZVBvcChjdHh0KTsKIAlzcGFjZVBvcChjdHh0KTsKLQlpZiAobnNOciAhPSBjdHh0LT5uc05yKQotCSAgICBuc1BvcChjdHh0LCBjdHh0LT5uc05yIC0gbnNOcik7Ci0KLQkvKgotCSAqIENhcHR1cmUgZW5kIHBvc2l0aW9uIGFuZCBhZGQgbm9kZQotCSAqLwotCWlmICggcmV0ICE9IE5VTEwgJiYgY3R4dC0+cmVjb3JkX2luZm8gKSB7Ci0JICAgbm9kZV9pbmZvLmVuZF9wb3MgPSBjdHh0LT5pbnB1dC0+Y29uc3VtZWQgKwotCQkJICAgICAgKENVUl9QVFIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7Ci0JICAgbm9kZV9pbmZvLmVuZF9saW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7Ci0JICAgbm9kZV9pbmZvLm5vZGUgPSByZXQ7Ci0JICAgeG1sUGFyc2VyQWRkTm9kZUluZm8oY3R4dCwgJm5vZGVfaW5mbyk7Ci0JfQorCWlmIChuYk5zID4gMCkKKwkgICAgeG1sUGFyc2VyTnNQb3AoY3R4dCwgbmJOcyk7CiAJcmV0dXJuKC0xKTsKICAgICB9CiAKQEAgLTEwMTM4LDE1ICsxMDQ4NywxNyBAQAogICogeG1sUGFyc2VFbGVtZW50RW5kOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCi0gKiBQYXJzZSB0aGUgZW5kIG9mIGFuIFhNTCBlbGVtZW50LgorICogUGFyc2UgdGhlIGVuZCBvZiBhbiBYTUwgZWxlbWVudC4gQWx3YXlzIGNvbnN1bWVzICc8LycuCiAgKi8KIHN0YXRpYyB2b2lkCiB4bWxQYXJzZUVsZW1lbnRFbmQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7Ci0gICAgeG1sUGFyc2VyTm9kZUluZm8gbm9kZV9pbmZvOwotICAgIHhtbE5vZGVQdHIgcmV0ID0gY3R4dC0+bm9kZTsKKyAgICB4bWxOb2RlUHRyIGN1ciA9IGN0eHQtPm5vZGU7CiAKLSAgICBpZiAoY3R4dC0+bmFtZU5yIDw9IDApCisgICAgaWYgKGN0eHQtPm5hbWVOciA8PSAwKSB7CisgICAgICAgIGlmICgoUkFXID09ICc8JykgJiYgKE5YVCgxKSA9PSAnLycpKQorICAgICAgICAgICAgU0tJUCgyKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8qCiAgICAgICogcGFyc2UgdGhlIGVuZCBvZiB0YWc6ICc8Lycgc2hvdWxkIGJlIGhlcmUuCkBAIC0xMDE2MSwxNCArMTA1MTIsMTcgQEAKICNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCiAKICAgICAvKgotICAgICAqIENhcHR1cmUgZW5kIHBvc2l0aW9uIGFuZCBhZGQgbm9kZQorICAgICAqIENhcHR1cmUgZW5kIHBvc2l0aW9uCiAgICAgICovCi0gICAgaWYgKCByZXQgIT0gTlVMTCAmJiBjdHh0LT5yZWNvcmRfaW5mbyApIHsKLSAgICAgICBub2RlX2luZm8uZW5kX3BvcyA9IGN0eHQtPmlucHV0LT5jb25zdW1lZCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChDVVJfUFRSIC0gY3R4dC0+aW5wdXQtPmJhc2UpOwotICAgICAgIG5vZGVfaW5mby5lbmRfbGluZSA9IGN0eHQtPmlucHV0LT5saW5lOwotICAgICAgIG5vZGVfaW5mby5ub2RlID0gcmV0OwotICAgICAgIHhtbFBhcnNlckFkZE5vZGVJbmZvKGN0eHQsICZub2RlX2luZm8pOworICAgIGlmIChjdXIgIT0gTlVMTCAmJiBjdHh0LT5yZWNvcmRfaW5mbykgeworICAgICAgICB4bWxQYXJzZXJOb2RlSW5mb1B0ciBub2RlX2luZm87CisKKyAgICAgICAgbm9kZV9pbmZvID0gKHhtbFBhcnNlck5vZGVJbmZvUHRyKSB4bWxQYXJzZXJGaW5kTm9kZUluZm8oY3R4dCwgY3VyKTsKKyAgICAgICAgaWYgKG5vZGVfaW5mbyAhPSBOVUxMKSB7CisgICAgICAgICAgICBub2RlX2luZm8tPmVuZF9wb3MgPSBjdHh0LT5pbnB1dC0+Y29uc3VtZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENVUl9QVFIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7CisgICAgICAgICAgICBub2RlX2luZm8tPmVuZF9saW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTEwMTc2LDYgKzEwNTMwLDggQEAKICAqIHhtbFBhcnNlVmVyc2lvbk51bToKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSB0aGUgWE1MIHZlcnNpb24gdmFsdWUuCiAgKgogICogWzI2XSBWZXJzaW9uTnVtIDo6PSAnMS4nIFswLTldKwpAQCAtMTAxOTEsNyArMTA1NDcsNyBAQAogICAgIGludCBzaXplID0gMTA7CiAgICAgeG1sQ2hhciBjdXI7CiAKLSAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogCXhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAlyZXR1cm4oTlVMTCk7CkBAIC0xMDIxNiw3ICsxMDU3Miw3IEBACiAJICAgIHhtbENoYXIgKnRtcDsKIAogCSAgICBzaXplICo9IDI7Ci0JICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKwkgICAgdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUpOwogCSAgICBpZiAodG1wID09IE5VTEwpIHsKIAkgICAgICAgIHhtbEZyZWUoYnVmKTsKIAkJeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwpAQCAtMTAyMzYsNiArMTA1OTIsOCBAQAogICogeG1sUGFyc2VWZXJzaW9uSW5mbzoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSB0aGUgWE1MIHZlcnNpb24uCiAgKgogICogWzI0XSBWZXJzaW9uSW5mbyA6Oj0gUyAndmVyc2lvbicgRXEgKCcgVmVyc2lvbk51bSAnIHwgIiBWZXJzaW9uTnVtICIpCkBAIC0xMDI4Myw2ICsxMDY0MSw4IEBACiAgKiB4bWxQYXJzZUVuY05hbWU6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgdGhlIFhNTCBlbmNvZGluZyBuYW1lCiAgKgogICogWzgxXSBFbmNOYW1lIDo6PSBbQS1aYS16XSAoW0EtWmEtejAtOS5fXSB8ICctJykqCkBAIC0xMDI5NCwxMiArMTA2NTQsMTUgQEAKICAgICB4bWxDaGFyICpidWYgPSBOVUxMOwogICAgIGludCBsZW4gPSAwOwogICAgIGludCBzaXplID0gMTA7CisgICAgaW50IG1heExlbmd0aCA9IChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID8KKyAgICAgICAgICAgICAgICAgICAgWE1MX01BWF9URVhUX0xFTkdUSCA6CisgICAgICAgICAgICAgICAgICAgIFhNTF9NQVhfTkFNRV9MRU5HVEg7CiAgICAgeG1sQ2hhciBjdXI7CiAKICAgICBjdXIgPSBDVVI7CiAgICAgaWYgKCgoY3VyID49ICdhJykgJiYgKGN1ciA8PSAneicpKSB8fAogICAgICAgICAoKGN1ciA+PSAnQScpICYmIChjdXIgPD0gJ1onKSkpIHsKLQlidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisJYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHNpemUpOwogCWlmIChidWYgPT0gTlVMTCkgewogCSAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CiAJICAgIHJldHVybihOVUxMKTsKQEAgLTEwMzE3LDcgKzEwNjgwLDcgQEAKIAkgICAgICAgIHhtbENoYXIgKnRtcDsKIAogCQlzaXplICo9IDI7Ci0JCXRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmLCBzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKKwkJdG1wID0gKHhtbENoYXIgKikgeG1sUmVhbGxvYyhidWYsIHNpemUpOwogCQlpZiAodG1wID09IE5VTEwpIHsKIAkJICAgIHhtbEVyck1lbW9yeShjdHh0LCBOVUxMKTsKIAkJICAgIHhtbEZyZWUoYnVmKTsKQEAgLTEwMzI2LDEzICsxMDY4OSwxMyBAQAogCQlidWYgPSB0bXA7CiAJICAgIH0KIAkgICAgYnVmW2xlbisrXSA9IGN1cjsKKyAgICAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX05BTUVfVE9PX0xPTkcsICJFbmNOYW1lIik7CisgICAgICAgICAgICAgICAgeG1sRnJlZShidWYpOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KIAkgICAgTkVYVDsKIAkgICAgY3VyID0gQ1VSOwotCSAgICBpZiAoY3VyID09IDApIHsKLQkgICAgICAgIFNIUklOSzsKLQkJR1JPVzsKLQkJY3VyID0gQ1VSOwotCSAgICB9CiAgICAgICAgIH0KIAlidWZbbGVuXSA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTEwMzQ1LDYgKzEwNzA4LDggQEAKICAqIHhtbFBhcnNlRW5jb2RpbmdEZWNsOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlLgorICoKICAqIHBhcnNlIHRoZSBYTUwgZW5jb2RpbmcgZGVjbGFyYXRpb24KICAqCiAgKiBbODBdIEVuY29kaW5nRGVjbCA6Oj0gUyAnZW5jb2RpbmcnIEVxICgnIicgRW5jTmFtZSAnIicgfCAgIiciIEVuY05hbWUgIiciKQpAQCAtMTAzNTksMTA2ICsxMDcyNCw1MyBAQAogICAgIHhtbENoYXIgKmVuY29kaW5nID0gTlVMTDsKIAogICAgIFNLSVBfQkxBTktTOwotICAgIGlmIChDTVA4KENVUl9QVFIsICdlJywgJ24nLCAnYycsICdvJywgJ2QnLCAnaScsICduJywgJ2cnKSkgewotCVNLSVAoOCk7Ci0JU0tJUF9CTEFOS1M7Ci0JaWYgKFJBVyAhPSAnPScpIHsKLQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9FUVVBTF9SRVFVSVJFRCwgTlVMTCk7Ci0JICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgfQotCU5FWFQ7Ci0JU0tJUF9CTEFOS1M7Ci0JaWYgKFJBVyA9PSAnIicpIHsKLQkgICAgTkVYVDsKLQkgICAgZW5jb2RpbmcgPSB4bWxQYXJzZUVuY05hbWUoY3R4dCk7Ci0JICAgIGlmIChSQVcgIT0gJyInKSB7Ci0JCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfU1RSSU5HX05PVF9DTE9TRUQsIE5VTEwpOwotCQl4bWxGcmVlKCh4bWxDaGFyICopIGVuY29kaW5nKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9IGVsc2UKLQkgICAgICAgIE5FWFQ7Ci0JfSBlbHNlIGlmIChSQVcgPT0gJ1wnJyl7Ci0JICAgIE5FWFQ7Ci0JICAgIGVuY29kaW5nID0geG1sUGFyc2VFbmNOYW1lKGN0eHQpOwotCSAgICBpZiAoUkFXICE9ICdcJycpIHsKLQkJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9TVFJJTkdfTk9UX0NMT1NFRCwgTlVMTCk7Ci0JCXhtbEZyZWUoKHhtbENoYXIgKikgZW5jb2RpbmcpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0gZWxzZQotCSAgICAgICAgTkVYVDsKLQl9IGVsc2UgewotCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX1NUUklOR19OT1RfU1RBUlRFRCwgTlVMTCk7Ci0JfQorICAgIGlmIChDTVA4KENVUl9QVFIsICdlJywgJ24nLCAnYycsICdvJywgJ2QnLCAnaScsICduJywgJ2cnKSA9PSAwKQorICAgICAgICByZXR1cm4oTlVMTCk7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogTm9uIHN0YW5kYXJkIHBhcnNpbmcsIGFsbG93aW5nIHRoZSB1c2VyIHRvIGlnbm9yZSBlbmNvZGluZwotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfSUdOT1JFX0VOQykgewotCSAgICB4bWxGcmVlKCh4bWxDaGFyICopIGVuY29kaW5nKTsKLSAgICAgICAgICAgIHJldHVybihOVUxMKTsKLQl9Ci0KLQkvKgotCSAqIFVURi0xNiBlbmNvZGluZyBzd2l0Y2ggaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UgYXQgdGhpcyBzdGFnZSwKLQkgKiBtb3JlIG92ZXIgdGhlIGxpdHRsZS1lbmRpYW4vYmlnLWVuZGlhbiBzZWxlY3Rpb24gaXMgYWxyZWFkeSBkb25lCi0JICovCi0gICAgICAgIGlmICgoZW5jb2RpbmcgIT0gTlVMTCkgJiYKLQkgICAgKCgheG1sU3RyY2FzZWNtcChlbmNvZGluZywgQkFEX0NBU1QgIlVURi0xNiIpKSB8fAotCSAgICAgKCF4bWxTdHJjYXNlY21wKGVuY29kaW5nLCBCQURfQ0FTVCAiVVRGMTYiKSkpKSB7Ci0JICAgIC8qCi0JICAgICAqIElmIG5vIGVuY29kaW5nIHdhcyBwYXNzZWQgdG8gdGhlIHBhcnNlciwgdGhhdCB3ZSBhcmUKLQkgICAgICogdXNpbmcgVVRGLTE2IGFuZCBubyBkZWNvZGVyIGlzIHByZXNlbnQgaS5lLiB0aGUKLQkgICAgICogZG9jdW1lbnQgaXMgYXBwYXJlbnRseSBVVEYtOCBjb21wYXRpYmxlLCB0aGVuIHJhaXNlIGFuCi0JICAgICAqIGVuY29kaW5nIG1pc21hdGNoIGZhdGFsIGVycm9yCi0JICAgICAqLwotCSAgICBpZiAoKGN0eHQtPmVuY29kaW5nID09IE5VTEwpICYmCi0JICAgICAgICAoY3R4dC0+aW5wdXQtPmJ1ZiAhPSBOVUxMKSAmJgotCSAgICAgICAgKGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXIgPT0gTlVMTCkpIHsKLQkJeG1sRmF0YWxFcnJNc2coY3R4dCwgWE1MX0VSUl9JTlZBTElEX0VOQ09ESU5HLAotCQkgICJEb2N1bWVudCBsYWJlbGxlZCBVVEYtMTYgYnV0IGhhcyBVVEYtOCBjb250ZW50XG4iKTsKLQkgICAgfQotCSAgICBpZiAoY3R4dC0+ZW5jb2RpbmcgIT0gTlVMTCkKLQkJeG1sRnJlZSgoeG1sQ2hhciAqKSBjdHh0LT5lbmNvZGluZyk7Ci0JICAgIGN0eHQtPmVuY29kaW5nID0gZW5jb2Rpbmc7Ci0JfQotCS8qCi0JICogVVRGLTggZW5jb2RpbmcgaXMgaGFuZGxlZCBuYXRpdmVseQotCSAqLwotICAgICAgICBlbHNlIGlmICgoZW5jb2RpbmcgIT0gTlVMTCkgJiYKLQkgICAgKCgheG1sU3RyY2FzZWNtcChlbmNvZGluZywgQkFEX0NBU1QgIlVURi04IikpIHx8Ci0JICAgICAoIXhtbFN0cmNhc2VjbXAoZW5jb2RpbmcsIEJBRF9DQVNUICJVVEY4IikpKSkgewotCSAgICBpZiAoY3R4dC0+ZW5jb2RpbmcgIT0gTlVMTCkKLQkJeG1sRnJlZSgoeG1sQ2hhciAqKSBjdHh0LT5lbmNvZGluZyk7Ci0JICAgIGN0eHQtPmVuY29kaW5nID0gZW5jb2Rpbmc7Ci0JfQotCWVsc2UgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKLQkgICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoYW5kbGVyOwotCi0JICAgIGlmIChjdHh0LT5pbnB1dC0+ZW5jb2RpbmcgIT0gTlVMTCkKLQkJeG1sRnJlZSgoeG1sQ2hhciAqKSBjdHh0LT5pbnB1dC0+ZW5jb2RpbmcpOwotCSAgICBjdHh0LT5pbnB1dC0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKLQotICAgICAgICAgICAgaGFuZGxlciA9IHhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyKChjb25zdCBjaGFyICopIGVuY29kaW5nKTsKLQkgICAgaWYgKGhhbmRsZXIgIT0gTlVMTCkgewotCQlpZiAoeG1sU3dpdGNoVG9FbmNvZGluZyhjdHh0LCBoYW5kbGVyKSA8IDApIHsKLQkJICAgIC8qIGZhaWxlZCB0byBjb252ZXJ0ICovCi0JCSAgICBjdHh0LT5lcnJObyA9IFhNTF9FUlJfVU5TVVBQT1JURURfRU5DT0RJTkc7Ci0JCSAgICByZXR1cm4oTlVMTCk7Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9VTlNVUFBPUlRFRF9FTkNPRElORywKLQkJCSJVbnN1cHBvcnRlZCBlbmNvZGluZyAlc1xuIiwgZW5jb2RpbmcpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQl9CisgICAgU0tJUCg4KTsKKyAgICBTS0lQX0JMQU5LUzsKKyAgICBpZiAoUkFXICE9ICc9JykgeworICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VRVUFMX1JFUVVJUkVELCBOVUxMKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICByZXR1cm4oZW5jb2RpbmcpOworICAgIE5FWFQ7CisgICAgU0tJUF9CTEFOS1M7CisgICAgaWYgKFJBVyA9PSAnIicpIHsKKyAgICAgICAgTkVYVDsKKyAgICAgICAgZW5jb2RpbmcgPSB4bWxQYXJzZUVuY05hbWUoY3R4dCk7CisgICAgICAgIGlmIChSQVcgIT0gJyInKSB7CisgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX1NUUklOR19OT1RfQ0xPU0VELCBOVUxMKTsKKyAgICAgICAgICAgIHhtbEZyZWUoKHhtbENoYXIgKikgZW5jb2RpbmcpOworICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIE5FWFQ7CisgICAgfSBlbHNlIGlmIChSQVcgPT0gJ1wnJyl7CisgICAgICAgIE5FWFQ7CisgICAgICAgIGVuY29kaW5nID0geG1sUGFyc2VFbmNOYW1lKGN0eHQpOworICAgICAgICBpZiAoUkFXICE9ICdcJycpIHsKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfU1RSSU5HX05PVF9DTE9TRUQsIE5VTEwpOworICAgICAgICAgICAgeG1sRnJlZSgoeG1sQ2hhciAqKSBlbmNvZGluZyk7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgTkVYVDsKKyAgICB9IGVsc2UgeworICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX1NUUklOR19OT1RfU1RBUlRFRCwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKGVuY29kaW5nID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKworICAgIHhtbFNldERlY2xhcmVkRW5jb2RpbmcoY3R4dCwgZW5jb2RpbmcpOworCisgICAgcmV0dXJuKGN0eHQtPmVuY29kaW5nKTsKIH0KIAogLyoqCiAgKiB4bWxQYXJzZVNERGVjbDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSB0aGUgWE1MIHN0YW5kYWxvbmUgZGVjbGFyYXRpb24KICAqCiAgKiBbMzJdIFNERGVjbCA6Oj0gUyAnc3RhbmRhbG9uZScgRXEKQEAgLTEwNTQzLDYgKzEwODU1LDggQEAKICAqIHhtbFBhcnNlWE1MRGVjbDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgorICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgZGVjbGFyYXRpb24gaGVhZGVyCiAgKgogICogWzIzXSBYTUxEZWNsIDo6PSAnPD94bWwnIFZlcnNpb25JbmZvIEVuY29kaW5nRGVjbD8gU0REZWNsPyBTPyAnPz4nCkBAIC0xMDU1Nyw3ICsxMDg3MSw4IEBACiAgICAgICogWE1MIGRlY2xhcmF0aW9uIGJ1dCBpdCBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhbG9uZSBhdHRyaWJ1dGUuCiAgICAgICogSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlciBpZiBhIHN0YW5kYWxvbmUgYXR0cmlidXRlIGlzIGZvdW5kLgogICAgICAqLwotICAgIGN0eHQtPmlucHV0LT5zdGFuZGFsb25lID0gLTI7CisKKyAgICBjdHh0LT5zdGFuZGFsb25lID0gLTI7CiAKICAgICAvKgogICAgICAqIFdlIGtub3cgdGhhdCAnPD94bWwnIGlzIGhlcmUuCkBAIC0xMDYyNCw3ICsxMDkzOSw3IEBACiAgICAgLyoKICAgICAgKiBXZSBtYXkgaGF2ZSB0aGUgc3RhbmRhbG9uZSBzdGF0dXMuCiAgICAgICovCi0gICAgaWYgKChjdHh0LT5pbnB1dC0+ZW5jb2RpbmcgIT0gTlVMTCkgJiYgKCFJU19CTEFOS19DSChSQVcpKSkgeworICAgIGlmICgoY3R4dC0+ZW5jb2RpbmcgIT0gTlVMTCkgJiYgKCFJU19CTEFOS19DSChSQVcpKSkgewogICAgICAgICBpZiAoKFJBVyA9PSAnPycpICYmIChOWFQoMSkgPT0gJz4nKSkgewogCSAgICBTS0lQKDIpOwogCSAgICByZXR1cm47CkBAIC0xMDYzOCw3ICsxMDk1Myw3IEBACiAgICAgR1JPVzsKIAogICAgIFNLSVBfQkxBTktTOwotICAgIGN0eHQtPmlucHV0LT5zdGFuZGFsb25lID0geG1sUGFyc2VTRERlY2woY3R4dCk7CisgICAgY3R4dC0+c3RhbmRhbG9uZSA9IHhtbFBhcnNlU0REZWNsKGN0eHQpOwogCiAgICAgU0tJUF9CTEFOS1M7CiAgICAgaWYgKChSQVcgPT0gJz8nKSAmJiAoTlhUKDEpID09ICc+JykpIHsKQEAgLTEwNjQ4LDkgKzEwOTYzLDE0IEBACiAJeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9YTUxERUNMX05PVF9GSU5JU0hFRCwgTlVMTCk7CiAJTkVYVDsKICAgICB9IGVsc2UgeworICAgICAgICBpbnQgYzsKKwogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfWE1MREVDTF9OT1RfRklOSVNIRUQsIE5VTEwpOwotCU1PVkVUT19FTkRUQUcoQ1VSX1BUUik7Ci0JTkVYVDsKKyAgICAgICAgd2hpbGUgKChjID0gQ1VSKSAhPSAwKSB7CisgICAgICAgICAgICBORVhUOworICAgICAgICAgICAgaWYgKGMgPT0gJz4nKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xMDY1OCw2ICsxMDk3OCw4IEBACiAgKiB4bWxQYXJzZU1pc2M6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UuCisgKgogICogcGFyc2UgYW4gWE1MIE1pc2MqIG9wdGlvbmFsIGZpZWxkLgogICoKICAqIFsyN10gTWlzYyA6Oj0gQ29tbWVudCB8IFBJIHwgIFMKQEAgLTEwNjk1LDkgKzExMDE3LDYgQEAKIAogaW50CiB4bWxQYXJzZURvY3VtZW50KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgewotICAgIHhtbENoYXIgc3RhcnRbNF07Ci0gICAgeG1sQ2hhckVuY29kaW5nIGVuYzsKLQogICAgIHhtbEluaXRQYXJzZXIoKTsKIAogICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoY3R4dC0+aW5wdXQgPT0gTlVMTCkpCkBAIC0xMDcxOCwzOCArMTEwMzcsMTQgQEAKICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKIAlyZXR1cm4oLTEpOwogCi0gICAgaWYgKChjdHh0LT5lbmNvZGluZyA9PSBOVUxMKSAmJgotICAgICAgICAoKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyKSA+PSA0KSkgewotCS8qCi0JICogR2V0IHRoZSA0IGZpcnN0IGJ5dGVzIGFuZCBkZWNvZGUgdGhlIGNoYXJzZXQKLQkgKiBpZiBlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORQotCSAqIHBsdWcgc29tZSBlbmNvZGluZyBjb252ZXJzaW9uIHJvdXRpbmVzLgotCSAqLwotCXN0YXJ0WzBdID0gUkFXOwotCXN0YXJ0WzFdID0gTlhUKDEpOwotCXN0YXJ0WzJdID0gTlhUKDIpOwotCXN0YXJ0WzNdID0gTlhUKDMpOwotCWVuYyA9IHhtbERldGVjdENoYXJFbmNvZGluZygmc3RhcnRbMF0sIDQpOwotCWlmIChlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSkgewotCSAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBlbmMpOwotCX0KLSAgICB9Ci0KKyAgICB4bWxEZXRlY3RFbmNvZGluZyhjdHh0KTsKIAogICAgIGlmIChDVVIgPT0gMCkgewogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRE9DVU1FTlRfRU1QVFksIE5VTEwpOwogCXJldHVybigtMSk7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBDaGVjayBmb3IgdGhlIFhNTERlY2wgaW4gdGhlIFByb2xvZy4KLSAgICAgKiBkbyBub3QgR1JPVyBoZXJlIHRvIGF2b2lkIHRoZSBkZXRlY3RlZCBlbmNvZGVyIHRvIGRlY29kZSBtb3JlCi0gICAgICogdGhhbiBqdXN0IHRoZSBmaXJzdCBsaW5lLCB1bmxlc3MgdGhlIGFtb3VudCBvZiBkYXRhIGlzIHJlYWxseQotICAgICAqIHRvbyBzbWFsbCB0byBob2xkICI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJmb28iCi0gICAgICovCi0gICAgaWYgKChjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1cikgPCAzNSkgewotICAgICAgIEdST1c7Ci0gICAgfQorICAgIEdST1c7CiAgICAgaWYgKChDTVA1KENVUl9QVFIsICc8JywgJz8nLCAneCcsICdtJywgJ2wnKSkgJiYgKElTX0JMQU5LX0NIKE5YVCg1KSkpKSB7CiAKIAkvKgpAQCAtMTA3NjMsNyArMTEwNTgsNiBAQAogCSAgICAgKi8KIAkgICAgcmV0dXJuKC0xKTsKIAl9Ci0JY3R4dC0+c3RhbmRhbG9uZSA9IGN0eHQtPmlucHV0LT5zdGFuZGFsb25lOwogCVNLSVBfQkxBTktTOwogICAgIH0gZWxzZSB7CiAJY3R4dC0+dmVyc2lvbiA9IHhtbENoYXJTdHJkdXAoWE1MX0RFRkFVTFRfVkVSU0lPTik7CkBAIC0xMDgzNCw5ICsxMTEyOCwxNSBAQAogCSAqLwogCXhtbFBhcnNlTWlzYyhjdHh0KTsKIAotCWlmIChSQVcgIT0gMCkgewotCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0RPQ1VNRU5UX0VORCwgTlVMTCk7Ci0JfQorICAgICAgICBpZiAoY3R4dC0+aW5wdXQtPmN1ciA8IGN0eHQtPmlucHV0LT5lbmQpIHsKKyAgICAgICAgICAgIGlmIChjdHh0LT5lcnJObyA9PSBYTUxfRVJSX09LKQorCSAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9ET0NVTUVOVF9FTkQsIE5VTEwpOworICAgICAgICB9IGVsc2UgaWYgKChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXIgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICAgICAgICAoIXhtbEJ1ZklzRW1wdHkoY3R4dC0+aW5wdXQtPmJ1Zi0+cmF3KSkpIHsKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRydW5jYXRlZCBtdWx0aS1ieXRlIHNlcXVlbmNlIGF0IEVPRlxuIik7CisgICAgICAgIH0KIAljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9FT0Y7CiAgICAgfQogCkBAIC0xMDg4NywzOCArMTExODcsMTggQEAKIAogaW50CiB4bWxQYXJzZUV4dFBhcnNlZEVudCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKLSAgICB4bWxDaGFyIHN0YXJ0WzRdOwotICAgIHhtbENoYXJFbmNvZGluZyBlbmM7Ci0KICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmlucHV0ID09IE5VTEwpKQogICAgICAgICByZXR1cm4oLTEpOwogCiAgICAgeG1sRGV0ZWN0U0FYMihjdHh0KTsKIAotICAgIEdST1c7Ci0KICAgICAvKgogICAgICAqIFNBWDogYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nLgogICAgICAqLwogICAgIGlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5zZXREb2N1bWVudExvY2F0b3IpKQogICAgICAgICBjdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcihjdHh0LT51c2VyRGF0YSwgJnhtbERlZmF1bHRTQVhMb2NhdG9yKTsKIAotICAgIC8qCi0gICAgICogR2V0IHRoZSA0IGZpcnN0IGJ5dGVzIGFuZCBkZWNvZGUgdGhlIGNoYXJzZXQKLSAgICAgKiBpZiBlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORQotICAgICAqIHBsdWcgc29tZSBlbmNvZGluZyBjb252ZXJzaW9uIHJvdXRpbmVzLgotICAgICAqLwotICAgIGlmICgoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIpID49IDQpIHsKLQlzdGFydFswXSA9IFJBVzsKLQlzdGFydFsxXSA9IE5YVCgxKTsKLQlzdGFydFsyXSA9IE5YVCgyKTsKLQlzdGFydFszXSA9IE5YVCgzKTsKLQllbmMgPSB4bWxEZXRlY3RDaGFyRW5jb2Rpbmcoc3RhcnQsIDQpOwotCWlmIChlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSkgewotCSAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBlbmMpOwotCX0KLSAgICB9Ci0KKyAgICB4bWxEZXRlY3RFbmNvZGluZyhjdHh0KTsKIAogICAgIGlmIChDVVIgPT0gMCkgewogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRE9DVU1FTlRfRU1QVFksIE5VTEwpOwpAQCAtMTA5ODUsMTQyICsxMTI2NSwyNjMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgotICogeG1sUGFyc2VMb29rdXBTZXF1ZW5jZToKKyAqIHhtbFBhcnNlTG9va3VwQ2hhcjoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0Ci0gKiBAZmlyc3Q6ICB0aGUgZmlyc3QgY2hhciB0byBsb29rdXAKLSAqIEBuZXh0OiAgdGhlIG5leHQgY2hhciB0byBsb29rdXAgb3IgemVybwotICogQHRoaXJkOiAgdGhlIG5leHQgY2hhciB0byBsb29rdXAgb3IgemVybworICogQGM6ICBjaGFyYWN0ZXIKICAqCi0gKiBUcnkgdG8gZmluZCBpZiBhIHNlcXVlbmNlIChmaXJzdCwgbmV4dCwgdGhpcmQpIG9yICBqdXN0IChmaXJzdCBuZXh0KSBvcgotICogKGZpcnN0KSBpcyBhdmFpbGFibGUgaW4gdGhlIGlucHV0IHN0cmVhbS4KLSAqIFRoaXMgZnVuY3Rpb24gaGFzIGEgc2lkZSBlZmZlY3Qgb2YgKHBvc3NpYmx5KSBpbmNyZW1lbnRpbmcgY3R4dC0+Y2hlY2tJbmRleAotICogdG8gYXZvaWQgcmVzY2FubmluZyBzZXF1ZW5jZXMgb2YgYnl0ZXMsIGl0IERPRVMgY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUKLSAqIHBhcnNlciwgZG8gbm90IHVzZSBsaWJlcmFsbHkuCi0gKgotICogUmV0dXJucyB0aGUgaW5kZXggdG8gdGhlIGN1cnJlbnQgcGFyc2luZyBwb2ludCBpZiB0aGUgZnVsbCBzZXF1ZW5jZQotICogICAgICBpcyBhdmFpbGFibGUsIC0xIG90aGVyd2lzZS4KKyAqIENoZWNrIHdoZXRoZXIgdGhlIGlucHV0IGJ1ZmZlciBjb250YWlucyBhIGNoYXJhY3Rlci4KICAqLwogc3RhdGljIGludAoteG1sUGFyc2VMb29rdXBTZXF1ZW5jZSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbENoYXIgZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIHhtbENoYXIgbmV4dCwgeG1sQ2hhciB0aGlyZCkgewotICAgIGludCBiYXNlLCBsZW47Ci0gICAgeG1sUGFyc2VySW5wdXRQdHIgaW47Ci0gICAgY29uc3QgeG1sQ2hhciAqYnVmOworeG1sUGFyc2VMb29rdXBDaGFyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IGMpIHsKKyAgICBjb25zdCB4bWxDaGFyICpjdXI7CiAKLSAgICBpbiA9IGN0eHQtPmlucHV0OwotICAgIGlmIChpbiA9PSBOVUxMKSByZXR1cm4oLTEpOwotICAgIGJhc2UgPSBpbi0+Y3VyIC0gaW4tPmJhc2U7Ci0gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChjdHh0LT5jaGVja0luZGV4ID4gYmFzZSkKLSAgICAgICAgYmFzZSA9IGN0eHQtPmNoZWNrSW5kZXg7Ci0gICAgaWYgKGluLT5idWYgPT0gTlVMTCkgewotCWJ1ZiA9IGluLT5iYXNlOwotCWxlbiA9IGluLT5sZW5ndGg7CisgICAgaWYgKGN0eHQtPmNoZWNrSW5kZXggPT0gMCkgeworICAgICAgICBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyICsgMTsKICAgICB9IGVsc2UgewotCWJ1ZiA9IHhtbEJ1ZkNvbnRlbnQoaW4tPmJ1Zi0+YnVmZmVyKTsKLQlsZW4gPSB4bWxCdWZVc2UoaW4tPmJ1Zi0+YnVmZmVyKTsKKyAgICAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1ciArIGN0eHQtPmNoZWNrSW5kZXg7CiAgICAgfQotICAgIC8qIHRha2UgaW50byBhY2NvdW50IHRoZSBzZXF1ZW5jZSBsZW5ndGggKi8KLSAgICBpZiAodGhpcmQpIGxlbiAtPSAyOwotICAgIGVsc2UgaWYgKG5leHQpIGxlbiAtLTsKLSAgICBmb3IgKDtiYXNlIDwgbGVuO2Jhc2UrKykgewotICAgICAgICBpZiAoYnVmW2Jhc2VdID09IGZpcnN0KSB7Ci0JICAgIGlmICh0aGlyZCAhPSAwKSB7Ci0JCWlmICgoYnVmW2Jhc2UgKyAxXSAhPSBuZXh0KSB8fAotCQkgICAgKGJ1ZltiYXNlICsgMl0gIT0gdGhpcmQpKSBjb250aW51ZTsKLQkgICAgfSBlbHNlIGlmIChuZXh0ICE9IDApIHsKLQkJaWYgKGJ1ZltiYXNlICsgMV0gIT0gbmV4dCkgY29udGludWU7Ci0JICAgIH0KLQkgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0jaWZkZWYgREVCVUdfUFVTSAotCSAgICBpZiAobmV4dCA9PSAwKQotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJQUDogbG9va3VwICclYycgZm91bmQgYXQgJWRcbiIsCi0JCQlmaXJzdCwgYmFzZSk7Ci0JICAgIGVsc2UgaWYgKHRoaXJkID09IDApCi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBsb29rdXAgJyVjJWMnIGZvdW5kIGF0ICVkXG4iLAotCQkJZmlyc3QsIG5leHQsIGJhc2UpOwotCSAgICBlbHNlCi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBsb29rdXAgJyVjJWMlYycgZm91bmQgYXQgJWRcbiIsCi0JCQlmaXJzdCwgbmV4dCwgdGhpcmQsIGJhc2UpOwotI2VuZGlmCi0JICAgIHJldHVybihiYXNlIC0gKGluLT5jdXIgLSBpbi0+YmFzZSkpOwotCX0KKworICAgIGlmIChtZW1jaHIoY3VyLCBjLCBjdHh0LT5pbnB1dC0+ZW5kIC0gY3VyKSA9PSBOVUxMKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOworCisgICAgICAgIGlmIChpbmRleCA+IExPTkdfTUFYKSB7CisgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gaW5kZXg7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgcmV0dXJuKDEpOwogICAgIH0KLSAgICBjdHh0LT5jaGVja0luZGV4ID0gYmFzZTsKLSNpZmRlZiBERUJVR19QVVNICi0gICAgaWYgKG5leHQgPT0gMCkKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJIlBQOiBsb29rdXAgJyVjJyBmYWlsZWRcbiIsIGZpcnN0KTsKLSAgICBlbHNlIGlmICh0aGlyZCA9PSAwKQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiUFA6IGxvb2t1cCAnJWMlYycgZmFpbGVkXG4iLCBmaXJzdCwgbmV4dCk7Ci0gICAgZWxzZQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiUFA6IGxvb2t1cCAnJWMlYyVjJyBmYWlsZWRcbiIsIGZpcnN0LCBuZXh0LCB0aGlyZCk7Ci0jZW5kaWYKLSAgICByZXR1cm4oLTEpOwogfQogCiAvKioKLSAqIHhtbFBhcnNlR2V0TGFzdHM6CisgKiB4bWxQYXJzZUxvb2t1cFN0cmluZzoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0Ci0gKiBAbGFzdGx0OiAgcG9pbnRlciB0byBzdG9yZSB0aGUgbGFzdCAnPCcgZnJvbSB0aGUgaW5wdXQKLSAqIEBsYXN0Z3Q6ICBwb2ludGVyIHRvIHN0b3JlIHRoZSBsYXN0ICc+JyBmcm9tIHRoZSBpbnB1dAorICogQHN0YXJ0RGVsdGE6IGRlbHRhIHRvIGFwcGx5IGF0IHRoZSBzdGFydAorICogQHN0cjogIHN0cmluZworICogQHN0ckxlbjogIGxlbmd0aCBvZiBzdHJpbmcKICAqCi0gKiBMb29rdXAgdGhlIGxhc3QgPCBhbmQgPiBpbiB0aGUgY3VycmVudCBjaHVuaworICogQ2hlY2sgd2hldGhlciB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGEgc3RyaW5nLgogICovCi1zdGF0aWMgdm9pZAoteG1sUGFyc2VHZXRMYXN0cyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKipsYXN0bHQsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKipsYXN0Z3QpIHsKLSAgICBjb25zdCB4bWxDaGFyICp0bXA7CitzdGF0aWMgY29uc3QgeG1sQ2hhciAqCit4bWxQYXJzZUxvb2t1cFN0cmluZyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHNpemVfdCBzdGFydERlbHRhLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgc3RyTGVuKSB7CisgICAgY29uc3QgeG1sQ2hhciAqY3VyLCAqdGVybTsKIAotICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAobGFzdGx0ID09IE5VTEwpIHx8IChsYXN0Z3QgPT0gTlVMTCkpIHsKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJJbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VHZXRMYXN0c1xuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKGN0eHQtPnByb2dyZXNzaXZlICE9IDApICYmIChjdHh0LT5pbnB1dE5yID09IDEpKSB7Ci0gICAgICAgIHRtcCA9IGN0eHQtPmlucHV0LT5lbmQ7Ci0JdG1wLS07Ci0Jd2hpbGUgKCh0bXAgPj0gY3R4dC0+aW5wdXQtPmJhc2UpICYmICgqdG1wICE9ICc8JykpIHRtcC0tOwotCWlmICh0bXAgPCBjdHh0LT5pbnB1dC0+YmFzZSkgewotCSAgICAqbGFzdGx0ID0gTlVMTDsKLQkgICAgKmxhc3RndCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkgICAgKmxhc3RsdCA9IHRtcDsKLQkgICAgdG1wKys7Ci0JICAgIHdoaWxlICgodG1wIDwgY3R4dC0+aW5wdXQtPmVuZCkgJiYgKCp0bXAgIT0gJz4nKSkgewotCSAgICAgICAgaWYgKCp0bXAgPT0gJ1wnJykgewotCQkgICAgdG1wKys7Ci0JCSAgICB3aGlsZSAoKHRtcCA8IGN0eHQtPmlucHV0LT5lbmQpICYmICgqdG1wICE9ICdcJycpKSB0bXArKzsKLQkJICAgIGlmICh0bXAgPCBjdHh0LT5pbnB1dC0+ZW5kKSB0bXArKzsKLQkJfSBlbHNlIGlmICgqdG1wID09ICciJykgewotCQkgICAgdG1wKys7Ci0JCSAgICB3aGlsZSAoKHRtcCA8IGN0eHQtPmlucHV0LT5lbmQpICYmICgqdG1wICE9ICciJykpIHRtcCsrOwotCQkgICAgaWYgKHRtcCA8IGN0eHQtPmlucHV0LT5lbmQpIHRtcCsrOwotCQl9IGVsc2UKLQkJICAgIHRtcCsrOwotCSAgICB9Ci0JICAgIGlmICh0bXAgPCBjdHh0LT5pbnB1dC0+ZW5kKQotCSAgICAgICAgKmxhc3RndCA9IHRtcDsKLQkgICAgZWxzZSB7Ci0JICAgICAgICB0bXAgPSAqbGFzdGx0OwotCQl0bXAtLTsKLQkJd2hpbGUgKCh0bXAgPj0gY3R4dC0+aW5wdXQtPmJhc2UpICYmICgqdG1wICE9ICc+JykpIHRtcC0tOwotCQlpZiAodG1wID49IGN0eHQtPmlucHV0LT5iYXNlKQotCQkgICAgKmxhc3RndCA9IHRtcDsKLQkJZWxzZQotCQkgICAgKmxhc3RndCA9IE5VTEw7Ci0JICAgIH0KLQl9CisgICAgaWYgKGN0eHQtPmNoZWNrSW5kZXggPT0gMCkgeworICAgICAgICBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyICsgc3RhcnREZWx0YTsKICAgICB9IGVsc2UgewotICAgICAgICAqbGFzdGx0ID0gTlVMTDsKLQkqbGFzdGd0ID0gTlVMTDsKKyAgICAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1ciArIGN0eHQtPmNoZWNrSW5kZXg7CiAgICAgfQorCisgICAgdGVybSA9IEJBRF9DQVNUIHN0cnN0cigoY29uc3QgY2hhciAqKSBjdXIsIHN0cik7CisgICAgaWYgKHRlcm0gPT0gTlVMTCkgeworICAgICAgICBjb25zdCB4bWxDaGFyICplbmQgPSBjdHh0LT5pbnB1dC0+ZW5kOworICAgICAgICBzaXplX3QgaW5kZXg7CisKKyAgICAgICAgLyogUmVzY2FuIChzdHJMZW4gLSAxKSBjaGFyYWN0ZXJzLiAqLworICAgICAgICBpZiAoKHNpemVfdCkgKGVuZCAtIGN1cikgPCBzdHJMZW4pCisgICAgICAgICAgICBlbmQgPSBjdXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZCAtPSBzdHJMZW4gLSAxOworICAgICAgICBpbmRleCA9IGVuZCAtIGN0eHQtPmlucHV0LT5jdXI7CisgICAgICAgIGlmIChpbmRleCA+IExPTkdfTUFYKSB7CisgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgICAgIHJldHVybihjdHh0LT5pbnB1dC0+ZW5kIC0gc3RyTGVuKTsKKyAgICAgICAgfQorICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gaW5kZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuKHRlcm0pOwogfQorCisvKioKKyAqIHhtbFBhcnNlTG9va3VwQ2hhckRhdGE6CisgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGlucHV0IGJ1ZmZlciBjb250YWlucyB0ZXJtaW5hdGVkIGNoYXIgZGF0YS4KKyAqLworc3RhdGljIGludAoreG1sUGFyc2VMb29rdXBDaGFyRGF0YSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICBjb25zdCB4bWxDaGFyICpjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyICsgY3R4dC0+Y2hlY2tJbmRleDsKKyAgICBjb25zdCB4bWxDaGFyICplbmQgPSBjdHh0LT5pbnB1dC0+ZW5kOworICAgIHNpemVfdCBpbmRleDsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKKyAgICAgICAgaWYgKCgqY3VyID09ICc8JykgfHwgKCpjdXIgPT0gJyYnKSkgeworICAgICAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICAgICAgY3VyKys7CisgICAgfQorCisgICAgaW5kZXggPSBjdXIgLSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIGlmIChpbmRleCA+IExPTkdfTUFYKSB7CisgICAgICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIGN0eHQtPmNoZWNrSW5kZXggPSBpbmRleDsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qKgorICogeG1sUGFyc2VMb29rdXBHdDoKKyAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CisgKgorICogQ2hlY2sgd2hldGhlciB0aGVyZSdzIGVub3VnaCBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgdG8gZmluaXNoIHBhcnNpbmcKKyAqIGEgc3RhcnQgdGFnLiBUaGlzIGhhcyB0byB0YWtlIHF1b3RlcyBpbnRvIGFjY291bnQuCisgKi8KK3N0YXRpYyBpbnQKK3htbFBhcnNlTG9va3VwR3QoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgY29uc3QgeG1sQ2hhciAqY3VyOworICAgIGNvbnN0IHhtbENoYXIgKmVuZCA9IGN0eHQtPmlucHV0LT5lbmQ7CisgICAgaW50IHN0YXRlID0gY3R4dC0+ZW5kQ2hlY2tTdGF0ZTsKKyAgICBzaXplX3QgaW5kZXg7CisKKyAgICBpZiAoY3R4dC0+Y2hlY2tJbmRleCA9PSAwKQorICAgICAgICBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyICsgMTsKKyAgICBlbHNlCisgICAgICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXIgKyBjdHh0LT5jaGVja0luZGV4OworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkgeworICAgICAgICBpZiAoc3RhdGUpIHsKKyAgICAgICAgICAgIGlmICgqY3VyID09IHN0YXRlKQorICAgICAgICAgICAgICAgIHN0YXRlID0gMDsKKyAgICAgICAgfSBlbHNlIGlmICgqY3VyID09ICdcJycgfHwgKmN1ciA9PSAnIicpIHsKKyAgICAgICAgICAgIHN0YXRlID0gKmN1cjsKKyAgICAgICAgfSBlbHNlIGlmICgqY3VyID09ICc+JykgeworICAgICAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgICAgICAgICBjdHh0LT5lbmRDaGVja1N0YXRlID0gMDsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBjdXIrKzsKKyAgICB9CisKKyAgICBpbmRleCA9IGN1ciAtIGN0eHQtPmlucHV0LT5jdXI7CisgICAgaWYgKGluZGV4ID4gTE9OR19NQVgpIHsKKyAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgICAgIGN0eHQtPmVuZENoZWNrU3RhdGUgPSAwOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIGN0eHQtPmNoZWNrSW5kZXggPSBpbmRleDsKKyAgICBjdHh0LT5lbmRDaGVja1N0YXRlID0gc3RhdGU7CisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIHhtbFBhcnNlTG9va3VwSW50ZXJuYWxTdWJzZXQ6CisgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVyIHRvIGZpbmlzaCBwYXJzaW5nCisgKiB0aGUgaW50ZXJuYWwgc3Vic2V0LgorICovCitzdGF0aWMgaW50Cit4bWxQYXJzZUxvb2t1cEludGVybmFsU3Vic2V0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgeworICAgIC8qCisgICAgICogU29ycnksIGJ1dCBwcm9ncmVzc2l2ZSBwYXJzaW5nIG9mIHRoZSBpbnRlcm5hbCBzdWJzZXQgaXMgbm90CisgICAgICogc3VwcG9ydGVkLiBXZSBmaXJzdCBjaGVjayB0aGF0IHRoZSBmdWxsIGNvbnRlbnQgb2YgdGhlIGludGVybmFsCisgICAgICogc3Vic2V0IGlzIGF2YWlsYWJsZSBhbmQgcGFyc2luZyBpcyBsYXVuY2hlZCBvbmx5IGF0IHRoYXQgcG9pbnQuCisgICAgICogSW50ZXJuYWwgc3Vic2V0IGVuZHMgd2l0aCAiJ10nIFM/ICc+JyIgaW4gYW4gdW5lc2NhcGVkIHNlY3Rpb24gYW5kCisgICAgICogbm90IGluIGEgJ11dPicgc2VxdWVuY2Ugd2hpY2ggYXJlIGNvbmRpdGlvbmFsIHNlY3Rpb25zLgorICAgICAqLworICAgIGNvbnN0IHhtbENoYXIgKmN1ciwgKnN0YXJ0OworICAgIGNvbnN0IHhtbENoYXIgKmVuZCA9IGN0eHQtPmlucHV0LT5lbmQ7CisgICAgaW50IHN0YXRlID0gY3R4dC0+ZW5kQ2hlY2tTdGF0ZTsKKyAgICBzaXplX3QgaW5kZXg7CisKKyAgICBpZiAoY3R4dC0+Y2hlY2tJbmRleCA9PSAwKSB7CisgICAgICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXIgKyAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXIgKyBjdHh0LT5jaGVja0luZGV4OworICAgIH0KKyAgICBzdGFydCA9IGN1cjsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKKyAgICAgICAgaWYgKHN0YXRlID09ICctJykgeworICAgICAgICAgICAgaWYgKCgqY3VyID09ICctJykgJiYKKyAgICAgICAgICAgICAgICAoY3VyWzFdID09ICctJykgJiYKKyAgICAgICAgICAgICAgICAoY3VyWzJdID09ICc+JykpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgY3VyICs9IDM7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBjdXI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoKmN1ciA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBjdHh0LT5lbmRDaGVja1N0YXRlID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoSVNfQkxBTktfQ0goKmN1cikpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICcgJzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmN1ciAhPSAnXScpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBjdXI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gJyAnKSB7CisgICAgICAgICAgICBpZiAoKmN1ciA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBjdHh0LT5lbmRDaGVja1N0YXRlID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUlTX0JMQU5LX0NIKCpjdXIpKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAwOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gY3VyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0YXRlICE9IDApIHsKKyAgICAgICAgICAgIGlmICgqY3VyID09IHN0YXRlKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAwOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gY3VyICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgqY3VyID09ICc8JykgeworICAgICAgICAgICAgaWYgKChjdXJbMV0gPT0gJyEnKSAmJgorICAgICAgICAgICAgICAgIChjdXJbMl0gPT0gJy0nKSAmJgorICAgICAgICAgICAgICAgIChjdXJbM10gPT0gJy0nKSkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gJy0nOworICAgICAgICAgICAgICAgIGN1ciArPSA0OworICAgICAgICAgICAgICAgIC8qIERvbid0IHRyZWF0IDwhLS0+IGFzIGNvbW1lbnQgKi8KKyAgICAgICAgICAgICAgICBzdGFydCA9IGN1cjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoKmN1ciA9PSAnIicpIHx8ICgqY3VyID09ICdcJycpIHx8ICgqY3VyID09ICddJykpIHsKKyAgICAgICAgICAgIHN0YXRlID0gKmN1cjsKKyAgICAgICAgfQorCisgICAgICAgIGN1cisrOworICAgIH0KKworICAgIC8qCisgICAgICogUmVzY2FuIHRoZSB0aHJlZSBsYXN0IGNoYXJhY3RlcnMgdG8gZGV0ZWN0ICI8IS0tIiBhbmQgIi0tPiIKKyAgICAgKiBzcGxpdCBhY3Jvc3MgY2h1bmtzLgorICAgICAqLworICAgIGlmICgoc3RhdGUgPT0gMCkgfHwgKHN0YXRlID09ICctJykpIHsKKyAgICAgICAgaWYgKGN1ciAtIHN0YXJ0IDwgMykKKyAgICAgICAgICAgIGN1ciA9IHN0YXJ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXIgLT0gMzsKKyAgICB9CisgICAgaW5kZXggPSBjdXIgLSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIGlmIChpbmRleCA+IExPTkdfTUFYKSB7CisgICAgICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOworICAgICAgICBjdHh0LT5lbmRDaGVja1N0YXRlID0gMDsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICBjdHh0LT5jaGVja0luZGV4ID0gaW5kZXg7CisgICAgY3R4dC0+ZW5kQ2hlY2tTdGF0ZSA9IHN0YXRlOworICAgIHJldHVybigwKTsKK30KKwogLyoqCiAgKiB4bWxDaGVja0NkYXRhUHVzaDoKICAqIEBjdXI6IHBvaW50ZXIgdG8gdGhlIGJsb2NrIG9mIGNoYXJhY3RlcnMKQEAgLTExMjAxLDEwMyArMTE2MDIsMjIgQEAKIHN0YXRpYyBpbnQKIHhtbFBhcnNlVHJ5T3JGaW5pc2goeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBpbnQgdGVybWluYXRlKSB7CiAgICAgaW50IHJldCA9IDA7Ci0gICAgaW50IGF2YWlsLCB0bGVuOworICAgIHNpemVfdCBhdmFpbDsKICAgICB4bWxDaGFyIGN1ciwgbmV4dDsKLSAgICBjb25zdCB4bWxDaGFyICpsYXN0bHQsICpsYXN0Z3Q7CiAKICAgICBpZiAoY3R4dC0+aW5wdXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKDApOwogCi0jaWZkZWYgREVCVUdfUFVTSAotICAgIHN3aXRjaCAoY3R4dC0+aW5zdGF0ZSkgewotCWNhc2UgWE1MX1BBUlNFUl9FT0Y6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgRU9GXG4iKTsgYnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX1NUQVJUOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJQUDogdHJ5IFNUQVJUXG4iKTsgYnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX01JU0M6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgTUlTQ1xuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX0NPTU1FTlQ6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgQ09NTUVOVFxuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX1BST0xPRzoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiUFA6IHRyeSBQUk9MT0dcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9TVEFSVF9UQUc6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgU1RBUlRfVEFHXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfQ09OVEVOVDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiUFA6IHRyeSBDT05URU5UXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfQ0RBVEFfU0VDVElPTjoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiUFA6IHRyeSBDREFUQV9TRUNUSU9OXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfRU5EX1RBRzoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiUFA6IHRyeSBFTkRfVEFHXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfRU5USVRZX0RFQ0w6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgRU5USVRZX0RFQ0xcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9FTlRJVFlfVkFMVUU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgRU5USVRZX1ZBTFVFXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfQVRUUklCVVRFX1ZBTFVFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJQUDogdHJ5IEFUVFJJQlVURV9WQUxVRVxuIik7YnJlYWs7Ci0JY2FzZSBYTUxfUEFSU0VSX0RURDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiUFA6IHRyeSBEVERcbiIpO2JyZWFrOwotCWNhc2UgWE1MX1BBUlNFUl9FUElMT0c6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgRVBJTE9HXG4iKTticmVhazsKLQljYXNlIFhNTF9QQVJTRVJfUEk6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBQOiB0cnkgUElcbiIpO2JyZWFrOwotICAgICAgICBjYXNlIFhNTF9QQVJTRVJfSUdOT1JFOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiUFA6IHRyeSBJR05PUkVcbiIpO2JyZWFrOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKChjdHh0LT5pbnB1dCAhPSBOVUxMKSAmJgogICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlID4gNDA5NikpIHsKLQl4bWxTSFJJTksoY3R4dCk7Ci0JY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgICAgIHhtbFBhcnNlclNocmluayhjdHh0KTsKICAgICB9Ci0gICAgeG1sUGFyc2VHZXRMYXN0cyhjdHh0LCAmbGFzdGx0LCAmbGFzdGd0KTsKIAogICAgIHdoaWxlIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSB7CiAJaWYgKChjdHh0LT5lcnJObyAhPSBYTUxfRVJSX09LKSAmJiAoY3R4dC0+ZGlzYWJsZVNBWCA9PSAxKSkKIAkgICAgcmV0dXJuKDApOwogCi0JaWYgKGN0eHQtPmlucHV0ID09IE5VTEwpIGJyZWFrOwotCWlmIChjdHh0LT5pbnB1dC0+YnVmID09IE5VTEwpCi0JICAgIGF2YWlsID0gY3R4dC0+aW5wdXQtPmxlbmd0aCAtCi0JICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7Ci0JZWxzZSB7Ci0JICAgIC8qCi0JICAgICAqIElmIHdlIGFyZSBvcGVyYXRpbmcgb24gY29udmVydGVkIGlucHV0LCB0cnkgdG8gZmx1c2gKLQkgICAgICogcmVtYWluaW5nIGNoYXJzIHRvIGF2b2lkIHRoZW0gc3RhbGxpbmcgaW4gdGhlIG5vbi1jb252ZXJ0ZWQKLQkgICAgICogYnVmZmVyLiBCdXQgZG8gbm90IGRvIHRoaXMgaW4gZG9jdW1lbnQgc3RhcnQgd2hlcmUKLQkgICAgICogZW5jb2Rpbmc9Ii4uLiIgbWF5IG5vdCBoYXZlIGJlZW4gcmVhZCBhbmQgd2Ugd29yayBvbiBhCi0JICAgICAqIGd1ZXNzZWQgZW5jb2RpbmcuCi0JICAgICAqLwotCSAgICBpZiAoKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9TVEFSVCkgJiYKLQkgICAgICAgIChjdHh0LT5pbnB1dC0+YnVmLT5yYXcgIT0gTlVMTCkgJiYKLQkJKHhtbEJ1ZklzRW1wdHkoY3R4dC0+aW5wdXQtPmJ1Zi0+cmF3KSA9PSAwKSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBiYXNlID0geG1sQnVmR2V0SW5wdXRCYXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dCk7Ci0JCXNpemVfdCBjdXJyZW50ID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOwotCi0JCXhtbFBhcnNlcklucHV0QnVmZmVyUHVzaChjdHh0LT5pbnB1dC0+YnVmLCAwLCAiIik7Ci0gICAgICAgICAgICAgICAgeG1sQnVmU2V0SW5wdXRCYXNlQ3VyKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwgY3R4dC0+aW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGN1cnJlbnQpOwotCSAgICB9Ci0JICAgIGF2YWlsID0geG1sQnVmVXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlcikgLQotCQkgICAgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7Ci0JfQorICAgICAgICBhdmFpbCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOwogICAgICAgICBpZiAoYXZhaWwgPCAxKQogCSAgICBnb3RvIGRvbmU7CiAgICAgICAgIHN3aXRjaCAoY3R4dC0+aW5zdGF0ZSkgewpAQCAtMTEzMDcsNjggKzExNjI3LDQxIEBACiAJCSAqLwogCSAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX1NUQVJUOgotCQlpZiAoY3R4dC0+Y2hhcnNldCA9PSBYTUxfQ0hBUl9FTkNPRElOR19OT05FKSB7Ci0JCSAgICB4bWxDaGFyIHN0YXJ0WzRdOwotCQkgICAgeG1sQ2hhckVuY29kaW5nIGVuYzsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFZlcnkgZmlyc3QgY2hhcnMgcmVhZCBmcm9tIHRoZSBkb2N1bWVudCBmbG93LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYgKGF2YWlsIDwgNCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAotCQkgICAgLyoKLQkJICAgICAqIFZlcnkgZmlyc3QgY2hhcnMgcmVhZCBmcm9tIHRoZSBkb2N1bWVudCBmbG93LgotCQkgICAgICovCi0JCSAgICBpZiAoYXZhaWwgPCA0KQotCQkJZ290byBkb25lOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogV2UgbmVlZCBtb3JlIGJ5dGVzIHRvIGRldGVjdCBFQkNESUMgY29kZSBwYWdlcy4KKyAgICAgICAgICAgICAgICAgKiBTZWUgeG1sRGV0ZWN0RUJDRElDLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICgoQ01QNChDVVJfUFRSLCAweDRDLCAweDZGLCAweEE3LCAweDk0KSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCF0ZXJtaW5hdGUpICYmIChhdmFpbCA8IDIwMCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAotCQkgICAgLyoKLQkJICAgICAqIEdldCB0aGUgNCBmaXJzdCBieXRlcyBhbmQgZGVjb2RlIHRoZSBjaGFyc2V0Ci0JCSAgICAgKiBpZiBlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORQotCQkgICAgICogcGx1ZyBzb21lIGVuY29kaW5nIGNvbnZlcnNpb24gcm91dGluZXMsCi0JCSAgICAgKiBlbHNlIHhtbFN3aXRjaEVuY29kaW5nIHdpbGwgc2V0IHRvIChkZWZhdWx0KQotCQkgICAgICogVVRGOC4KLQkJICAgICAqLwotCQkgICAgc3RhcnRbMF0gPSBSQVc7Ci0JCSAgICBzdGFydFsxXSA9IE5YVCgxKTsKLQkJICAgIHN0YXJ0WzJdID0gTlhUKDIpOwotCQkgICAgc3RhcnRbM10gPSBOWFQoMyk7Ci0JCSAgICBlbmMgPSB4bWxEZXRlY3RDaGFyRW5jb2Rpbmcoc3RhcnQsIDQpOwotCQkgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKLQkJICAgIGJyZWFrOwotCQl9CisgICAgICAgICAgICAgICAgeG1sRGV0ZWN0RW5jb2RpbmcoY3R4dCk7CisgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9YTUxfREVDTDsKKwkJYnJlYWs7CiAKLQkJaWYgKGF2YWlsIDwgMikKKyAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9YTUxfREVDTDoKKwkJaWYgKCghdGVybWluYXRlKSAmJiAoYXZhaWwgPCAyKSkKIAkJICAgIGdvdG8gZG9uZTsKIAkJY3VyID0gY3R4dC0+aW5wdXQtPmN1clswXTsKIAkJbmV4dCA9IGN0eHQtPmlucHV0LT5jdXJbMV07Ci0JCWlmIChjdXIgPT0gMCkgewotCQkgICAgaWYgKChjdHh0LT5zYXgpICYmIChjdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcikpCi0JCQljdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcihjdHh0LT51c2VyRGF0YSwKLQkJCQkJCSAgICAgICZ4bWxEZWZhdWx0U0FYTG9jYXRvcik7Ci0JCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0RPQ1VNRU5UX0VNUFRZLCBOVUxMKTsKLQkJICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBlbnRlcmluZyBFT0ZcbiIpOwotI2VuZGlmCi0JCSAgICBpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+ZW5kRG9jdW1lbnQgIT0gTlVMTCkpCi0JCQljdHh0LT5zYXgtPmVuZERvY3VtZW50KGN0eHQtPnVzZXJEYXRhKTsKLQkJICAgIGdvdG8gZG9uZTsKLQkJfQogCSAgICAgICAgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnPycpKSB7CiAJCSAgICAvKiBQSSBvciBYTUwgZGVjbCAqLwotCQkgICAgaWYgKGF2YWlsIDwgNSkgcmV0dXJuKHJldCk7CiAJCSAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCi0JCSAgICAgICAgKHhtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJz8nLCAnPicsIDApIDwgMCkpCi0JCQlyZXR1cm4ocmV0KTsKLQkJICAgIGlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5zZXREb2N1bWVudExvY2F0b3IpKQotCQkJY3R4dC0+c2F4LT5zZXREb2N1bWVudExvY2F0b3IoY3R4dC0+dXNlckRhdGEsCi0JCQkJCQkgICAgICAmeG1sRGVmYXVsdFNBWExvY2F0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgKCF4bWxQYXJzZUxvb2t1cFN0cmluZyhjdHh0LCAyLCAiPz4iLCAyKSkpCisJCQlnb3RvIGRvbmU7CiAJCSAgICBpZiAoKGN0eHQtPmlucHV0LT5jdXJbMl0gPT0gJ3gnKSAmJgogCQkJKGN0eHQtPmlucHV0LT5jdXJbM10gPT0gJ20nKSAmJgogCQkJKGN0eHQtPmlucHV0LT5jdXJbNF0gPT0gJ2wnKSAmJgogCQkJKElTX0JMQU5LX0NIKGN0eHQtPmlucHV0LT5jdXJbNV0pKSkgewogCQkJcmV0ICs9IDU7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkJIlBQOiBQYXJzaW5nIFhNTCBEZWNsXG4iKTsKLSNlbmRpZgogCQkJeG1sUGFyc2VYTUxEZWNsKGN0eHQpOwogCQkJaWYgKGN0eHQtPmVyck5vID09IFhNTF9FUlJfVU5TVVBQT1JURURfRU5DT0RJTkcpIHsKIAkJCSAgICAvKgpAQCAtMTEzNzgsNzQgKzExNjcxLDQ2IEBACiAJCQkgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKIAkJCSAgICByZXR1cm4oMCk7CiAJCQl9Ci0JCQljdHh0LT5zdGFuZGFsb25lID0gY3R4dC0+aW5wdXQtPnN0YW5kYWxvbmU7Ci0JCQlpZiAoKGN0eHQtPmVuY29kaW5nID09IE5VTEwpICYmCi0JCQkgICAgKGN0eHQtPmlucHV0LT5lbmNvZGluZyAhPSBOVUxMKSkKLQkJCSAgICBjdHh0LT5lbmNvZGluZyA9IHhtbFN0cmR1cChjdHh0LT5pbnB1dC0+ZW5jb2RpbmcpOwotCQkJaWYgKChjdHh0LT5zYXgpICYmIChjdHh0LT5zYXgtPnN0YXJ0RG9jdW1lbnQpICYmCi0JCQkgICAgKCFjdHh0LT5kaXNhYmxlU0FYKSkKLQkJCSAgICBjdHh0LT5zYXgtPnN0YXJ0RG9jdW1lbnQoY3R4dC0+dXNlckRhdGEpOwotCQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfTUlTQzsKLSNpZmRlZiBERUJVR19QVVNICi0JCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCQkiUFA6IGVudGVyaW5nIE1JU0NcbiIpOwotI2VuZGlmCiAJCSAgICB9IGVsc2UgewogCQkJY3R4dC0+dmVyc2lvbiA9IHhtbENoYXJTdHJkdXAoWE1MX0RFRkFVTFRfVkVSU0lPTik7Ci0JCQlpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+c3RhcnREb2N1bWVudCkgJiYKLQkJCSAgICAoIWN0eHQtPmRpc2FibGVTQVgpKQotCQkJICAgIGN0eHQtPnNheC0+c3RhcnREb2N1bWVudChjdHh0LT51c2VyRGF0YSk7Ci0JCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9NSVNDOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJCSJQUDogZW50ZXJpbmcgTUlTQ1xuIik7Ci0jZW5kaWYKIAkJICAgIH0KIAkJfSBlbHNlIHsKLQkJICAgIGlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5zZXREb2N1bWVudExvY2F0b3IpKQotCQkJY3R4dC0+c2F4LT5zZXREb2N1bWVudExvY2F0b3IoY3R4dC0+dXNlckRhdGEsCi0JCQkJCQkgICAgICAmeG1sRGVmYXVsdFNBWExvY2F0b3IpOwogCQkgICAgY3R4dC0+dmVyc2lvbiA9IHhtbENoYXJTdHJkdXAoWE1MX0RFRkFVTFRfVkVSU0lPTik7CiAJCSAgICBpZiAoY3R4dC0+dmVyc2lvbiA9PSBOVUxMKSB7CiAJCSAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogCQkJYnJlYWs7CiAJCSAgICB9Ci0JCSAgICBpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+c3RhcnREb2N1bWVudCkgJiYKLQkJICAgICAgICAoIWN0eHQtPmRpc2FibGVTQVgpKQotCQkJY3R4dC0+c2F4LT5zdGFydERvY3VtZW50KGN0eHQtPnVzZXJEYXRhKTsKLQkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX01JU0M7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBlbnRlcmluZyBNSVNDXG4iKTsKLSNlbmRpZgogCQl9CisgICAgICAgICAgICAgICAgaWYgKChjdHh0LT5zYXgpICYmIChjdHh0LT5zYXgtPnNldERvY3VtZW50TG9jYXRvcikpCisgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNheC0+c2V0RG9jdW1lbnRMb2NhdG9yKGN0eHQtPnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeG1sRGVmYXVsdFNBWExvY2F0b3IpOworICAgICAgICAgICAgICAgIGlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5zdGFydERvY3VtZW50KSAmJgorICAgICAgICAgICAgICAgICAgICAoIWN0eHQtPmRpc2FibGVTQVgpKQorICAgICAgICAgICAgICAgICAgICBjdHh0LT5zYXgtPnN0YXJ0RG9jdW1lbnQoY3R4dC0+dXNlckRhdGEpOworICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfTUlTQzsKIAkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfU1RBUlRfVEFHOiB7CiAJICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lOwogCQljb25zdCB4bWxDaGFyICpwcmVmaXggPSBOVUxMOwogCQljb25zdCB4bWxDaGFyICpVUkkgPSBOVUxMOwogICAgICAgICAgICAgICAgIGludCBsaW5lID0gY3R4dC0+aW5wdXQtPmxpbmU7Ci0JCWludCBuc05yID0gY3R4dC0+bnNOcjsKKwkJaW50IG5iTnMgPSAwOwogCi0JCWlmICgoYXZhaWwgPCAyKSAmJiAoY3R4dC0+aW5wdXROciA9PSAxKSkKKwkJaWYgKCghdGVybWluYXRlKSAmJiAoYXZhaWwgPCAyKSkKIAkJICAgIGdvdG8gZG9uZTsKIAkJY3VyID0gY3R4dC0+aW5wdXQtPmN1clswXTsKIAkgICAgICAgIGlmIChjdXIgIT0gJzwnKSB7Ci0JCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0RPQ1VNRU5UX0VNUFRZLCBOVUxMKTsKKwkJICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfRE9DVU1FTlRfRU1QVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQiKTsKIAkJICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CiAJCSAgICBpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+ZW5kRG9jdW1lbnQgIT0gTlVMTCkpCiAJCQljdHh0LT5zYXgtPmVuZERvY3VtZW50KGN0eHQtPnVzZXJEYXRhKTsKIAkJICAgIGdvdG8gZG9uZTsKIAkJfQotCQlpZiAoIXRlcm1pbmF0ZSkgewotCQkgICAgaWYgKGN0eHQtPnByb2dyZXNzaXZlKSB7Ci0JCSAgICAgICAgLyogPiBjYW4gYmUgZm91bmQgdW5lc2NhcGVkIGluIGF0dHJpYnV0ZSB2YWx1ZXMgKi8KLQkJICAgICAgICBpZiAoKGxhc3RndCA9PSBOVUxMKSB8fCAoY3R4dC0+aW5wdXQtPmN1ciA+PSBsYXN0Z3QpKQotCQkJICAgIGdvdG8gZG9uZTsKLQkJICAgIH0gZWxzZSBpZiAoeG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnPicsIDAsIDApIDwgMCkgewotCQkJZ290byBkb25lOwotCQkgICAgfQotCQl9CisJCWlmICgoIXRlcm1pbmF0ZSkgJiYgKCF4bWxQYXJzZUxvb2t1cEd0KGN0eHQpKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogCQlpZiAoY3R4dC0+c3BhY2VOciA9PSAwKQogCQkgICAgc3BhY2VQdXNoKGN0eHQsIC0xKTsKIAkJZWxzZSBpZiAoKmN0eHQtPnNwYWNlID09IC0yKQpAQCAtMTE0NTUsNyArMTE3MjAsNyBAQAogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKIAkJaWYgKGN0eHQtPnNheDIpCiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwotCQkgICAgbmFtZSA9IHhtbFBhcnNlU3RhcnRUYWcyKGN0eHQsICZwcmVmaXgsICZVUkksICZ0bGVuKTsKKwkJICAgIG5hbWUgPSB4bWxQYXJzZVN0YXJ0VGFnMihjdHh0LCAmcHJlZml4LCAmVVJJLCAmbmJOcyk7CiAjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogCQllbHNlCiAJCSAgICBuYW1lID0geG1sUGFyc2VTdGFydFRhZyhjdHh0KTsKQEAgLTExNDkyLDggKzExNzU3LDggQEAKIAkJCSAgICAoIWN0eHQtPmRpc2FibGVTQVgpKQogCQkJICAgIGN0eHQtPnNheC0+ZW5kRWxlbWVudE5zKGN0eHQtPnVzZXJEYXRhLCBuYW1lLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgVVJJKTsKLQkJCWlmIChjdHh0LT5uc05yIC0gbnNOciA+IDApCi0JCQkgICAgbnNQb3AoY3R4dCwgY3R4dC0+bnNOciAtIG5zTnIpOworCQkJaWYgKG5iTnMgPiAwKQorCQkJICAgIHhtbFBhcnNlck5zUG9wKGN0eHQsIG5iTnMpOwogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKIAkJICAgIH0gZWxzZSB7CiAJCQlpZiAoKGN0eHQtPnNheCAhPSBOVUxMKSAmJgpAQCAtMTE1MDIsOTMgKzExNzY3LDg3IEBACiAJCQkgICAgY3R4dC0+c2F4LT5lbmRFbGVtZW50KGN0eHQtPnVzZXJEYXRhLCBuYW1lKTsKICNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCiAJCSAgICB9Ci0JCSAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKLQkJCWdvdG8gZG9uZTsKIAkJICAgIHNwYWNlUG9wKGN0eHQpOwotCQkgICAgaWYgKGN0eHQtPm5hbWVOciA9PSAwKSB7Ci0JCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9FUElMT0c7Ci0JCSAgICB9IGVsc2UgewotCQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAxOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJaWYgKFJBVyA9PSAnPicpIHsKKwkJfSBlbHNlIGlmIChSQVcgPT0gJz4nKSB7CiAJCSAgICBORVhUOworICAgICAgICAgICAgICAgICAgICBuYW1lTnNQdXNoKGN0eHQsIG5hbWUsIHByZWZpeCwgVVJJLCBsaW5lLCBuYk5zKTsKIAkJfSBlbHNlIHsKIAkJICAgIHhtbEZhdGFsRXJyTXNnU3RyKGN0eHQsIFhNTF9FUlJfR1RfUkVRVUlSRUQsCiAJCQkJCSAiQ291bGRuJ3QgZmluZCBlbmQgb2YgU3RhcnQgVGFnICVzXG4iLAogCQkJCQkgbmFtZSk7CiAJCSAgICBub2RlUG9wKGN0eHQpOwogCQkgICAgc3BhY2VQb3AoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYk5zID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlck5zUG9wKGN0eHQsIG5iTnMpOwogCQl9Ci0gICAgICAgICAgICAgICAgbmFtZU5zUHVzaChjdHh0LCBuYW1lLCBwcmVmaXgsIFVSSSwgbGluZSwgY3R4dC0+bnNOciAtIG5zTnIpOwogCi0JCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0gICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAxOworICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgaWYgKGN0eHQtPm5hbWVOciA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9FUElMT0c7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCSAgICB9CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfQ09OVEVOVDogewotCQlpbnQgaWQ7Ci0JCXVuc2lnbmVkIGxvbmcgY29uczsKLQkJaWYgKChhdmFpbCA8IDIpICYmIChjdHh0LT5pbnB1dE5yID09IDEpKQotCQkgICAgZ290byBkb25lOwogCQljdXIgPSBjdHh0LT5pbnB1dC0+Y3VyWzBdOwotCQluZXh0ID0gY3R4dC0+aW5wdXQtPmN1clsxXTsKIAotCQlpZCA9IGN0eHQtPmlucHV0LT5pZDsKLQkgICAgICAgIGNvbnMgPSBDVVJfQ09OU1VNRUQ7Ci0JCWlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJy8nKSkgewotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRU5EX1RBRzsKLQkJICAgIGJyZWFrOwotCSAgICAgICAgfSBlbHNlIGlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJz8nKSkgewotCQkgICAgaWYgKCghdGVybWluYXRlKSAmJgotCQkgICAgICAgICh4bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICc/JywgJz4nLCAwKSA8IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IFhNTF9QQVJTRVJfUEk7Ci0JCQlnb3RvIGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQkJICAgIHhtbFBhcnNlUEkoY3R4dCk7Ci0JCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IDE7Ci0JCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ICE9ICchJykpIHsKLQkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1NUQVJUX1RBRzsKLQkJICAgIGJyZWFrOwotCQl9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnIScpICYmCi0JCSAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXJbMl0gPT0gJy0nKSAmJgotCQkJICAgKGN0eHQtPmlucHV0LT5jdXJbM10gPT0gJy0nKSkgewotCQkgICAgaW50IHRlcm07CisJCWlmIChjdXIgPT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYgKGF2YWlsIDwgMikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJCSAgICBuZXh0ID0gY3R4dC0+aW5wdXQtPmN1clsxXTsKIAotCSAgICAgICAgICAgIGlmIChhdmFpbCA8IDQpCi0JCSAgICAgICAgZ290byBkb25lOwotCQkgICAgY3R4dC0+aW5wdXQtPmN1ciArPSA0OwotCQkgICAgdGVybSA9IHhtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJy0nLCAnLScsICc+Jyk7Ci0JCSAgICBjdHh0LT5pbnB1dC0+Y3VyIC09IDQ7Ci0JCSAgICBpZiAoKCF0ZXJtaW5hdGUpICYmICh0ZXJtIDwgMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnByb2dyZXNzaXZlID0gWE1MX1BBUlNFUl9DT01NRU5UOwotCQkJZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VORF9UQUc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09ICc/JykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgheG1sUGFyc2VMb29rdXBTdHJpbmcoY3R4dCwgMiwgIj8+IiwgMikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlUEkoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAnIScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYgKGF2YWlsIDwgMykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGN0eHQtPmlucHV0LT5jdXJbMl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYgKGF2YWlsIDwgNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5wdXQtPmN1clszXSA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF4bWxQYXJzZUxvb2t1cFN0cmluZyhjdHh0LCA0LCAiLS0+IiwgMykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxQYXJzZUNvbW1lbnQoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHQgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJiAoYXZhaWwgPCA5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY3R4dC0+aW5wdXQtPmN1clsyXSA9PSAnWycpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyWzNdID09ICdDJykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXJbNF0gPT0gJ0QnKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1cls1XSA9PSAnQScpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyWzZdID09ICdUJykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXJbN10gPT0gJ0EnKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1cls4XSA9PSAnWycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNLSVAoOSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NEQVRBX1NFQ1RJT047CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotCQkgICAgeG1sUGFyc2VDb21tZW50KGN0eHQpOwotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLSAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAxOwotCQl9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAoY3R4dC0+aW5wdXQtPmN1clsxXSA9PSAnIScpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1clsyXSA9PSAnWycpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1clszXSA9PSAnQycpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1cls0XSA9PSAnRCcpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1cls1XSA9PSAnQScpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1cls2XSA9PSAnVCcpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1cls3XSA9PSAnQScpICYmCi0JCSAgICAoY3R4dC0+aW5wdXQtPmN1cls4XSA9PSAnWycpKSB7Ci0JCSAgICBTS0lQKDkpOwotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ0RBVEFfU0VDVElPTjsKLQkJICAgIGJyZWFrOwotCQl9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnIScpICYmCi0JCSAgICAgICAgICAgKGF2YWlsIDwgOSkpIHsKLQkJICAgIGdvdG8gZG9uZTsKIAkJfSBlbHNlIGlmIChjdXIgPT0gJyYnKSB7Ci0JCSAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCi0JCSAgICAgICAgKHhtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJzsnLCAwLCAwKSA8IDApKQorCQkgICAgaWYgKCghdGVybWluYXRlKSAmJiAoIXhtbFBhcnNlTG9va3VwQ2hhcihjdHh0LCAnOycpKSkKIAkJCWdvdG8gZG9uZTsKIAkJICAgIHhtbFBhcnNlUmVmZXJlbmNlKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJfSBlbHNlIHsKIAkJICAgIC8qIFRPRE8gQXZvaWQgdGhlIGV4dHJhIGNvcHksIGhhbmRsZSBkaXJlY3RseSAhISEgKi8KIAkJICAgIC8qCkBAIC0xMTYwMiw0MiArMTE4NjEsMjEgQEAKIAkJICAgICAqICAgIGNhbGxiYWNrcyBiZXR3ZWVuIHRoZSBwdXNoIGFuZCBwdWxsIHZlcnNpb25zCiAJCSAgICAgKiAgICBvZiB0aGUgcGFyc2VyLgogCQkgICAgICovCi0JCSAgICBpZiAoKGN0eHQtPmlucHV0TnIgPT0gMSkgJiYKLQkJICAgICAgICAoYXZhaWwgPCBYTUxfUEFSU0VSX0JJR19CVUZGRVJfU0laRSkpIHsKLQkJCWlmICghdGVybWluYXRlKSB7Ci0JCQkgICAgaWYgKGN0eHQtPnByb2dyZXNzaXZlKSB7Ci0JCQkJaWYgKChsYXN0bHQgPT0gTlVMTCkgfHwKLQkJCQkgICAgKGN0eHQtPmlucHV0LT5jdXIgPiBsYXN0bHQpKQotCQkJCSAgICBnb3RvIGRvbmU7Ci0JCQkgICAgfSBlbHNlIGlmICh4bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8JywgMCwgMCkgPCAwKSB7Ci0JCQkJZ290byBkb25lOwotCQkJICAgIH0KLQkJCX0KKwkJICAgIGlmIChhdmFpbCA8IFhNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFKSB7CisJCQlpZiAoKCF0ZXJtaW5hdGUpICYmICgheG1sUGFyc2VMb29rdXBDaGFyRGF0YShjdHh0KSkpCisJCQkgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgICAgICB9Ci0JCSAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKLQkJICAgIHhtbFBhcnNlQ2hhckRhdGEoY3R4dCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOworCQkgICAgeG1sUGFyc2VDaGFyRGF0YUludGVybmFsKGN0eHQsICF0ZXJtaW5hdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJfQotCQlpZiAoKGNvbnMgPT0gQ1VSX0NPTlNVTUVEKSAmJiAoaWQgPT0gY3R4dC0+aW5wdXQtPmlkKSkgewotCQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKLQkJICAgICAgICAgICAgICAgICJkZXRlY3RlZCBhbiBlcnJvciBpbiBlbGVtZW50IGNvbnRlbnRcbiIpOwotCQkgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKLQkJICAgIGJyZWFrOwotCQl9CisKKyAgICAgICAgICAgICAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9TVEFSVF9UQUc7CiAJCWJyZWFrOwogCSAgICB9CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfRU5EX1RBRzoKLQkJaWYgKGF2YWlsIDwgMikKKwkJaWYgKCghdGVybWluYXRlKSAmJiAoIXhtbFBhcnNlTG9va3VwQ2hhcihjdHh0LCAnPicpKSkKIAkJICAgIGdvdG8gZG9uZTsKLQkJaWYgKCF0ZXJtaW5hdGUpIHsKLQkJICAgIGlmIChjdHh0LT5wcm9ncmVzc2l2ZSkgewotCQkgICAgICAgIC8qID4gY2FuIGJlIGZvdW5kIHVuZXNjYXBlZCBpbiBhdHRyaWJ1dGUgdmFsdWVzICovCi0JCSAgICAgICAgaWYgKChsYXN0Z3QgPT0gTlVMTCkgfHwgKGN0eHQtPmlucHV0LT5jdXIgPj0gbGFzdGd0KSkKLQkJCSAgICBnb3RvIGRvbmU7Ci0JCSAgICB9IGVsc2UgaWYgKHhtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJz4nLCAwLCAwKSA8IDApIHsKLQkJCWdvdG8gZG9uZTsKLQkJICAgIH0KLQkJfQogCQlpZiAoY3R4dC0+c2F4MikgewogCSAgICAgICAgICAgIHhtbFBhcnNlRW5kVGFnMihjdHh0LCAmY3R4dC0+cHVzaFRhYltjdHh0LT5uYW1lTnIgLSAxXSk7CiAJCSAgICBuYW1lTnNQb3AoY3R4dCk7CkBAIC0xMTY0Niw5ICsxMTg4NCw5IEBACiAJCSAgZWxzZQogCQkgICAgeG1sUGFyc2VFbmRUYWcxKGN0eHQsIDApOwogI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLQkJaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpIHsKLQkJICAgIC8qIE5vdGhpbmcgKi8KLQkJfSBlbHNlIGlmIChjdHh0LT5uYW1lTnIgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJCWlmIChjdHh0LT5uYW1lTnIgPT0gMCkgewogCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRVBJTE9HOwogCQl9IGVsc2UgewogCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKQEAgLTExNjU5LDM1ICsxMTg5Nyw1MSBAQAogCQkgKiBUaGUgUHVzaCBtb2RlIG5lZWQgdG8gaGF2ZSB0aGUgU0FYIGNhbGxiYWNrIGZvcgogCQkgKiBjZGF0YUJsb2NrIG1lcmdlIGJhY2sgY29udGlndW91cyBjYWxsYmFja3MuCiAJCSAqLwotCQlpbnQgYmFzZTsKKwkJY29uc3QgeG1sQ2hhciAqdGVybTsKIAotCQliYXNlID0geG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnXScsICddJywgJz4nKTsKLQkJaWYgKGJhc2UgPCAwKSB7Ci0JCSAgICBpZiAoYXZhaWwgPj0gWE1MX1BBUlNFUl9CSUdfQlVGRkVSX1NJWkUgKyAyKSB7Ci0JCSAgICAgICAgaW50IHRtcDsKKyAgICAgICAgICAgICAgICBpZiAodGVybWluYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIERvbid0IGNhbGwgeG1sUGFyc2VMb29rdXBTdHJpbmcuIElmICd0ZXJtaW5hdGUnCisgICAgICAgICAgICAgICAgICAgICAqIGlzIHNldCwgY2hlY2tJbmRleCBpcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgdGVybSA9IEJBRF9DQVNUIHN0cnN0cigoY29uc3QgY2hhciAqKSBjdHh0LT5pbnB1dC0+Y3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJdXT4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgdGVybSA9IHhtbFBhcnNlTG9va3VwU3RyaW5nKGN0eHQsIDAsICJdXT4iLCAzKTsKKyAgICAgICAgICAgICAgICB9CiAKLQkJCXRtcCA9IHhtbENoZWNrQ2RhdGFQdXNoKGN0eHQtPmlucHV0LT5jdXIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBYTUxfUEFSU0VSX0JJR19CVUZGRVJfU0laRSwgMCk7Ci0JCQlpZiAodG1wIDwgMCkgewotCQkJICAgIHRtcCA9IC10bXA7Ci0JCQkgICAgY3R4dC0+aW5wdXQtPmN1ciArPSB0bXA7Ci0JCQkgICAgZ290byBlbmNvZGluZ19lcnJvcjsKLQkJCX0KLQkJCWlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmICghY3R4dC0+ZGlzYWJsZVNBWCkpIHsKLQkJCSAgICBpZiAoY3R4dC0+c2F4LT5jZGF0YUJsb2NrICE9IE5VTEwpCi0JCQkJY3R4dC0+c2F4LT5jZGF0YUJsb2NrKGN0eHQtPnVzZXJEYXRhLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyLCB0bXApOwotCQkJICAgIGVsc2UgaWYgKGN0eHQtPnNheC0+Y2hhcmFjdGVycyAhPSBOVUxMKQotCQkJCWN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciwgdG1wKTsKLQkJCX0KLQkJCWlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQkJICAgIGdvdG8gZG9uZTsKLQkJCVNLSVBMKHRtcCk7Ci0JCQljdHh0LT5jaGVja0luZGV4ID0gMDsKLQkJICAgIH0KLQkJICAgIGdvdG8gZG9uZTsKKwkJaWYgKHRlcm0gPT0gTlVMTCkgeworCQkgICAgaW50IHRtcCwgc2l6ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGVybWluYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmZpbmlzaGVkIENEQVRBIHNlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1cjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbCA8IFhNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFICsgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogV2h5IGRvbid0IHdlIHBhc3MgdGhlIGZ1bGwgYnVmZmVyPyAqLworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFhNTF9QQVJTRVJfQklHX0JVRkZFUl9TSVpFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IHhtbENoZWNrQ2RhdGFQdXNoKGN0eHQtPmlucHV0LT5jdXIsIHNpemUsIDApOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IC10bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYgKCFjdHh0LT5kaXNhYmxlU0FYKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPnNheC0+Y2RhdGFCbG9jayAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNheC0+Y2RhdGFCbG9jayhjdHh0LT51c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciwgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN0eHQtPnNheC0+Y2hhcmFjdGVycyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycyhjdHh0LT51c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciwgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgU0tJUEwodG1wKTsKIAkJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGJhc2UgPSB0ZXJtIC0gQ1VSX1BUUjsKIAkJICAgIGludCB0bXA7CiAKIAkJICAgIHRtcCA9IHhtbENoZWNrQ2RhdGFQdXNoKGN0eHQtPmlucHV0LT5jdXIsIGJhc2UsIDEpOwpAQCAtMTE3MjEsMzQ2ICsxMTk3NSwxMDEgQEAKIAkJICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQogCQkJZ290byBkb25lOwogCQkgICAgU0tJUEwoYmFzZSArIDMpOwotCQkgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CiAJCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJQUDogZW50ZXJpbmcgQ09OVEVOVFxuIik7Ci0jZW5kaWYKIAkJfQogCQlicmVhazsKIAkgICAgfQogICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX01JU0M6Ci0JCVNLSVBfQkxBTktTOwotCQlpZiAoY3R4dC0+aW5wdXQtPmJ1ZiA9PSBOVUxMKQotCQkgICAgYXZhaWwgPSBjdHh0LT5pbnB1dC0+bGVuZ3RoIC0KLQkJICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7Ci0JCWVsc2UKLQkJICAgIGF2YWlsID0geG1sQnVmVXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlcikgLQotCQkgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKLQkJaWYgKGF2YWlsIDwgMikKLQkJICAgIGdvdG8gZG9uZTsKLQkJY3VyID0gY3R4dC0+aW5wdXQtPmN1clswXTsKLQkJbmV4dCA9IGN0eHQtPmlucHV0LT5jdXJbMV07Ci0JICAgICAgICBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICc/JykpIHsKLQkJICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYKLQkJICAgICAgICAoeG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnPycsICc+JywgMCkgPCAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSBYTUxfUEFSU0VSX1BJOwotCQkJZ290byBkb25lOwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBQYXJzaW5nIFBJXG4iKTsKLSNlbmRpZgotCQkgICAgeG1sUGFyc2VQSShjdHh0KTsKLQkJICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQkJZ290byBkb25lOwotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfTUlTQzsKLSAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAxOwotCQkgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7Ci0JCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykgJiYKLQkJICAgIChjdHh0LT5pbnB1dC0+Y3VyWzJdID09ICctJykgJiYKLQkJICAgIChjdHh0LT5pbnB1dC0+Y3VyWzNdID09ICctJykpIHsKLQkJICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYKLQkJICAgICAgICAoeG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnLScsICctJywgJz4nKSA8IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IFhNTF9QQVJTRVJfQ09NTUVOVDsKLQkJCWdvdG8gZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJQUDogUGFyc2luZyBDb21tZW50XG4iKTsKLSNlbmRpZgotCQkgICAgeG1sUGFyc2VDb21tZW50KGN0eHQpOwotCQkgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0JCQlnb3RvIGRvbmU7Ci0JCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9NSVNDOwotICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IDE7Ci0JCSAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKLQkJfSBlbHNlIGlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJyEnKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbMl0gPT0gJ0QnKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbM10gPT0gJ08nKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbNF0gPT0gJ0MnKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbNV0gPT0gJ1QnKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbNl0gPT0gJ1knKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbN10gPT0gJ1AnKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbOF0gPT0gJ0UnKSkgewotCQkgICAgaWYgKCghdGVybWluYXRlKSAmJgotCQkgICAgICAgICh4bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICc+JywgMCwgMCkgPCAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSBYTUxfUEFSU0VSX0RURDsKLQkJCWdvdG8gZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIERFQlVHX1BVU0gKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJQUDogUGFyc2luZyBpbnRlcm5hbCBzdWJzZXRcbiIpOwotI2VuZGlmCi0JCSAgICBjdHh0LT5pblN1YnNldCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGN0eHQtPnByb2dyZXNzaXZlID0gMDsKLQkJICAgIGN0eHQtPmNoZWNrSW5kZXggPSAwOwotCQkgICAgeG1sUGFyc2VEb2NUeXBlRGVjbChjdHh0KTsKLQkJICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQkJZ290byBkb25lOwotCQkgICAgaWYgKFJBVyA9PSAnWycpIHsKLQkJCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0RURDsKLSNpZmRlZiBERUJVR19QVVNICi0JCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCQkiUFA6IGVudGVyaW5nIERURFxuIik7Ci0jZW5kaWYKLQkJICAgIH0gZWxzZSB7Ci0JCQkvKgotCQkJICogQ3JlYXRlIGFuZCB1cGRhdGUgdGhlIGV4dGVybmFsIHN1YnNldC4KLQkJCSAqLwotCQkJY3R4dC0+aW5TdWJzZXQgPSAyOwotCQkJaWYgKChjdHh0LT5zYXggIT0gTlVMTCkgJiYgKCFjdHh0LT5kaXNhYmxlU0FYKSAmJgotCQkJICAgIChjdHh0LT5zYXgtPmV4dGVybmFsU3Vic2V0ICE9IE5VTEwpKQotCQkJICAgIGN0eHQtPnNheC0+ZXh0ZXJuYWxTdWJzZXQoY3R4dC0+dXNlckRhdGEsCi0JCQkJICAgIGN0eHQtPmludFN1Yk5hbWUsIGN0eHQtPmV4dFN1YlN5c3RlbSwKLQkJCQkgICAgY3R4dC0+ZXh0U3ViVVJJKTsKLQkJCWN0eHQtPmluU3Vic2V0ID0gMDsKLQkJCXhtbENsZWFuU3BlY2lhbEF0dHIoY3R4dCk7Ci0JCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9QUk9MT0c7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkJIlBQOiBlbnRlcmluZyBQUk9MT0dcbiIpOwotI2VuZGlmCi0JCSAgICB9Ci0JCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykgJiYKLQkJICAgICAgICAgICAoYXZhaWwgPCA5KSkgewotCQkgICAgZ290byBkb25lOwotCQl9IGVsc2UgewotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfU1RBUlRfVEFHOwotCQkgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSBYTUxfUEFSU0VSX1NUQVJUX1RBRzsKLQkJICAgIHhtbFBhcnNlR2V0TGFzdHMoY3R4dCwgJmxhc3RsdCwgJmxhc3RndCk7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCi0JCX0KLQkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfUFJPTE9HOgotCQlTS0lQX0JMQU5LUzsKLQkJaWYgKGN0eHQtPmlucHV0LT5idWYgPT0gTlVMTCkKLQkJICAgIGF2YWlsID0gY3R4dC0+aW5wdXQtPmxlbmd0aCAtIChjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2UpOwotCQllbHNlCi0JCSAgICBhdmFpbCA9IHhtbEJ1ZlVzZShjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIpIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKLQkJaWYgKGF2YWlsIDwgMikKLQkJICAgIGdvdG8gZG9uZTsKLQkJY3VyID0gY3R4dC0+aW5wdXQtPmN1clswXTsKLQkJbmV4dCA9IGN0eHQtPmlucHV0LT5jdXJbMV07Ci0JICAgICAgICBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICc/JykpIHsKLQkJICAgIGlmICgoIXRlcm1pbmF0ZSkgJiYKLQkJICAgICAgICAoeG1sUGFyc2VMb29rdXBTZXF1ZW5jZShjdHh0LCAnPycsICc+JywgMCkgPCAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSBYTUxfUEFSU0VSX1BJOwotCQkJZ290byBkb25lOwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBQYXJzaW5nIFBJXG4iKTsKLSNlbmRpZgotCQkgICAgeG1sUGFyc2VQSShjdHh0KTsKLQkJICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQkJZ290byBkb25lOwotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfUFJPTE9HOwotICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IDE7Ci0JCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykgJiYKLQkJICAgIChjdHh0LT5pbnB1dC0+Y3VyWzJdID09ICctJykgJiYgKGN0eHQtPmlucHV0LT5jdXJbM10gPT0gJy0nKSkgewotCQkgICAgaWYgKCghdGVybWluYXRlKSAmJgotCQkgICAgICAgICh4bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICctJywgJy0nLCAnPicpIDwgMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnByb2dyZXNzaXZlID0gWE1MX1BBUlNFUl9DT01NRU5UOwotCQkJZ290byBkb25lOwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBQYXJzaW5nIENvbW1lbnRcbiIpOwotI2VuZGlmCi0JCSAgICB4bWxQYXJzZUNvbW1lbnQoY3R4dCk7Ci0JCSAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikKLQkJCWdvdG8gZG9uZTsKLQkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1BST0xPRzsKLSAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAxOwotCQl9IGVsc2UgaWYgKChjdXIgPT0gJzwnKSAmJiAobmV4dCA9PSAnIScpICYmCi0JCSAgICAgICAgICAgKGF2YWlsIDwgNCkpIHsKLQkJICAgIGdvdG8gZG9uZTsKLQkJfSBlbHNlIHsKLQkJICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1NUQVJUX1RBRzsKLQkJICAgIGlmIChjdHh0LT5wcm9ncmVzc2l2ZSA9PSAwKQotCQkJY3R4dC0+cHJvZ3Jlc3NpdmUgPSBYTUxfUEFSU0VSX1NUQVJUX1RBRzsKLQkJICAgIHhtbFBhcnNlR2V0TGFzdHMoY3R4dCwgJmxhc3RsdCwgJmxhc3RndCk7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCi0JCX0KLQkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfRVBJTE9HOgogCQlTS0lQX0JMQU5LUzsKLQkJaWYgKGN0eHQtPmlucHV0LT5idWYgPT0gTlVMTCkKLQkJICAgIGF2YWlsID0gY3R4dC0+aW5wdXQtPmxlbmd0aCAtIChjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2UpOwotCQllbHNlCi0JCSAgICBhdmFpbCA9IHhtbEJ1ZlVzZShjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIpIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKLQkJaWYgKGF2YWlsIDwgMikKKyAgICAgICAgICAgICAgICBhdmFpbCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOworCQlpZiAoYXZhaWwgPCAxKQogCQkgICAgZ290byBkb25lOwotCQljdXIgPSBjdHh0LT5pbnB1dC0+Y3VyWzBdOwotCQluZXh0ID0gY3R4dC0+aW5wdXQtPmN1clsxXTsKLQkgICAgICAgIGlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJz8nKSkgewotCQkgICAgaWYgKCghdGVybWluYXRlKSAmJgotCQkgICAgICAgICh4bWxQYXJzZUxvb2t1cFNlcXVlbmNlKGN0eHQsICc/JywgJz4nLCAwKSA8IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IFhNTF9QQVJTRVJfUEk7Ci0JCQlnb3RvIGRvbmU7CisJCWlmIChjdHh0LT5pbnB1dC0+Y3VyWzBdID09ICc8JykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCF0ZXJtaW5hdGUpICYmIChhdmFpbCA8IDIpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3R4dC0+aW5wdXQtPmN1clsxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gJz8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF4bWxQYXJzZUxvb2t1cFN0cmluZyhjdHh0LCAyLCAiPz4iLCAyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VQSShjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHQgPT0gJyEnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCF0ZXJtaW5hdGUpICYmIChhdmFpbCA8IDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmlucHV0LT5jdXJbMl0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJiAoYXZhaWwgPCA0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnB1dC0+Y3VyWzNdID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXhtbFBhcnNlTG9va3VwU3RyaW5nKGN0eHQsIDQsICItLT4iLCAzKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlQ29tbWVudChjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX01JU0MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCF0ZXJtaW5hdGUpICYmIChhdmFpbCA8IDkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjdHh0LT5pbnB1dC0+Y3VyWzJdID09ICdEJykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXJbM10gPT0gJ08nKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1cls0XSA9PSAnQycpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyWzVdID09ICdUJykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXJbNl0gPT0gJ1knKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1cls3XSA9PSAnUCcpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyWzhdID09ICdFJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJiAoIXhtbFBhcnNlTG9va3VwR3QoY3R4dCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pblN1YnNldCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlRG9jVHlwZURlY2woY3R4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkFXID09ICdbJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRFREOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZSBhbmQgdXBkYXRlIHRoZSBleHRlcm5hbCBzdWJzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluU3Vic2V0ID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY3R4dC0+c2F4ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjdHh0LT5kaXNhYmxlU0FYKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHh0LT5zYXgtPmV4dGVybmFsU3Vic2V0ICE9IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNheC0+ZXh0ZXJuYWxTdWJzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT51c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmludFN1Yk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5leHRTdWJTeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5leHRTdWJVUkkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5TdWJzZXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2xlYW5TcGVjaWFsQXR0cihjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1BST0xPRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiUFA6IFBhcnNpbmcgUElcbiIpOwotI2VuZGlmCi0JCSAgICB4bWxQYXJzZVBJKGN0eHQpOwotCQkgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCi0JCQlnb3RvIGRvbmU7Ci0JCSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9FUElMT0c7Ci0gICAgICAgICAgICAgICAgICAgIGN0eHQtPnByb2dyZXNzaXZlID0gMTsKLQkJfSBlbHNlIGlmICgoY3VyID09ICc8JykgJiYgKG5leHQgPT0gJyEnKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5jdXJbMl0gPT0gJy0nKSAmJiAoY3R4dC0+aW5wdXQtPmN1clszXSA9PSAnLScpKSB7Ci0JCSAgICBpZiAoKCF0ZXJtaW5hdGUpICYmCi0JCSAgICAgICAgKHhtbFBhcnNlTG9va3VwU2VxdWVuY2UoY3R4dCwgJy0nLCAnLScsICc+JykgPCAwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSBYTUxfUEFSU0VSX0NPTU1FTlQ7Ci0JCQlnb3RvIGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiUFA6IFBhcnNpbmcgQ29tbWVudFxuIik7Ci0jZW5kaWYKLQkJICAgIHhtbFBhcnNlQ29tbWVudChjdHh0KTsKLQkJICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQotCQkJZ290byBkb25lOwotCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRVBJTE9HOwotICAgICAgICAgICAgICAgICAgICBjdHh0LT5wcm9ncmVzc2l2ZSA9IDE7Ci0JCX0gZWxzZSBpZiAoKGN1ciA9PSAnPCcpICYmIChuZXh0ID09ICchJykgJiYKLQkJICAgICAgICAgICAoYXZhaWwgPCA0KSkgewotCQkgICAgZ290byBkb25lOwotCQl9IGVsc2UgewotCQkgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9ET0NVTUVOVF9FTkQsIE5VTEwpOwotCQkgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiUFA6IGVudGVyaW5nIEVPRlxuIik7Ci0jZW5kaWYKLQkJICAgIGlmICgoY3R4dC0+c2F4KSAmJiAoY3R4dC0+c2F4LT5lbmREb2N1bWVudCAhPSBOVUxMKSkKLQkJCWN0eHQtPnNheC0+ZW5kRG9jdW1lbnQoY3R4dC0+dXNlckRhdGEpOwotCQkgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRVBJTE9HKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5lcnJObyA9PSBYTUxfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgWE1MX0VSUl9ET0NVTUVOVF9FTkQsIE5VTEwpOworCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfRU9GOworICAgICAgICAgICAgICAgICAgICBpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+ZW5kRG9jdW1lbnQgIT0gTlVMTCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5zYXgtPmVuZERvY3VtZW50KGN0eHQtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfU1RBUlRfVEFHOwogCQl9CiAJCWJyZWFrOwogICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX0RURDogewotCSAgICAgICAgLyoKLQkJICogU29ycnkgYnV0IHByb2dyZXNzaXZlIHBhcnNpbmcgb2YgdGhlIGludGVybmFsIHN1YnNldAotCQkgKiBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc3VwcG9ydGVkLiBXZSBmaXJzdCBjaGVjayB0aGF0Ci0JCSAqIHRoZSBmdWxsIGNvbnRlbnQgb2YgdGhlIGludGVybmFsIHN1YnNldCBpcyBhdmFpbGFibGUgYW5kCi0JCSAqIHRoZSBwYXJzaW5nIGlzIGxhdW5jaGVkIG9ubHkgYXQgdGhhdCBwb2ludC4KLQkJICogSW50ZXJuYWwgc3Vic2V0IGVuZHMgdXAgd2l0aCAiJ10nIFM/ICc+JyIgaW4gYW4gdW5lc2NhcGVkCi0JCSAqIHNlY3Rpb24gYW5kIG5vdCBpbiBhICddXT4nIHNlcXVlbmNlIHdoaWNoIGFyZSBjb25kaXRpb25hbAotCQkgKiBzZWN0aW9ucyAod2hvZXZlciBhcmd1ZWQgdG8ga2VlcCB0aGF0IGNyYXAgaW4gWE1MIGRlc2VydmUKLQkJICogYSBwbGFjZSBpbiBoZWxsICEpLgotCQkgKi8KLQkJaW50IGJhc2UsIGk7Ci0JCXhtbENoYXIgKmJ1ZjsKLQkgICAgICAgIHhtbENoYXIgcXVvdGUgPSAwOwotICAgICAgICAgICAgICAgIHNpemVfdCB1c2U7Ci0KLQkJYmFzZSA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKLQkJaWYgKGJhc2UgPCAwKSByZXR1cm4oMCk7Ci0JCWlmIChjdHh0LT5jaGVja0luZGV4ID4gYmFzZSkKLQkJICAgIGJhc2UgPSBjdHh0LT5jaGVja0luZGV4OwotCQlidWYgPSB4bWxCdWZDb250ZW50KGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgdXNlID0geG1sQnVmVXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlcik7Ci0JCWZvciAoOyh1bnNpZ25lZCBpbnQpIGJhc2UgPCB1c2U7IGJhc2UrKykgewotCQkgICAgaWYgKHF1b3RlICE9IDApIHsKLQkJICAgICAgICBpZiAoYnVmW2Jhc2VdID09IHF1b3RlKQotCQkJICAgIHF1b3RlID0gMDsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQkgICAgaWYgKChxdW90ZSA9PSAwKSAmJiAoYnVmW2Jhc2VdID09ICc8JykpIHsKLQkJICAgICAgICBpbnQgZm91bmQgID0gMDsKLQkJCS8qIHNwZWNpYWwgaGFuZGxpbmcgb2YgY29tbWVudHMgKi8KLQkJICAgICAgICBpZiAoKCh1bnNpZ25lZCBpbnQpIGJhc2UgKyA0IDwgdXNlKSAmJgotCQkJICAgIChidWZbYmFzZSArIDFdID09ICchJykgJiYKLQkJCSAgICAoYnVmW2Jhc2UgKyAyXSA9PSAnLScpICYmCi0JCQkgICAgKGJ1ZltiYXNlICsgM10gPT0gJy0nKSkgewotCQkJICAgIGZvciAoOyh1bnNpZ25lZCBpbnQpIGJhc2UgKyAzIDwgdXNlOyBiYXNlKyspIHsKLQkJCQlpZiAoKGJ1ZltiYXNlXSA9PSAnLScpICYmCi0JCQkJICAgIChidWZbYmFzZSArIDFdID09ICctJykgJiYKLQkJCQkgICAgKGJ1ZltiYXNlICsgMl0gPT0gJz4nKSkgewotCQkJCSAgICBmb3VuZCA9IDE7Ci0JCQkJICAgIGJhc2UgKz0gMjsKLQkJCQkgICAgYnJlYWs7Ci0JCQkJfQotCQkgICAgICAgICAgICB9Ci0JCQkgICAgaWYgKCFmb3VuZCkgewotI2lmIDAKLQkJCSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmZpbmlzaGVkIGNvbW1lbnRcbiIpOwotI2VuZGlmCi0JCQkgICAgICAgIGJyZWFrOyAvKiBmb3IgKi8KLQkJICAgICAgICAgICAgfQotCQkgICAgICAgICAgICBjb250aW51ZTsKLQkJCX0KLQkJICAgIH0KLQkJICAgIGlmIChidWZbYmFzZV0gPT0gJyInKSB7Ci0JCSAgICAgICAgcXVvdGUgPSAnIic7Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJICAgIGlmIChidWZbYmFzZV0gPT0gJ1wnJykgewotCQkgICAgICAgIHF1b3RlID0gJ1wnJzsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQkgICAgaWYgKGJ1ZltiYXNlXSA9PSAnXScpIHsKLSNpZiAwCi0JCSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlYyVjJWMlYzogIiwgYnVmW2Jhc2VdLAotCQkJICAgICAgICBidWZbYmFzZSArIDFdLCBidWZbYmFzZSArIDJdLCBidWZbYmFzZSArIDNdKTsKLSNlbmRpZgotCQkgICAgICAgIGlmICgodW5zaWduZWQgaW50KSBiYXNlICsxID49IHVzZSkKLQkJCSAgICBicmVhazsKLQkJCWlmIChidWZbYmFzZSArIDFdID09ICddJykgewotCQkJICAgIC8qIGNvbmRpdGlvbmFsIGNyYXAsIHNraXAgYm90aCAnXScgISAqLwotCQkJICAgIGJhc2UrKzsKLQkJCSAgICBjb250aW51ZTsKLQkJCX0KLQkJICAgICAgICBmb3IgKGkgPSAxOyAodW5zaWduZWQgaW50KSBiYXNlICsgaSA8IHVzZTsgaSsrKSB7Ci0JCQkgICAgaWYgKGJ1ZltiYXNlICsgaV0gPT0gJz4nKSB7Ci0jaWYgMAotCQkJICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZvdW5kXG4iKTsKLSNlbmRpZgotCQkJICAgICAgICBnb3RvIGZvdW5kX2VuZF9pbnRfc3Vic2V0OwotCQkJICAgIH0KLQkJCSAgICBpZiAoIUlTX0JMQU5LX0NIKGJ1ZltiYXNlICsgaV0pKSB7Ci0jaWYgMAotCQkJICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vdCBmb3VuZFxuIik7Ci0jZW5kaWYKLQkJCSAgICAgICAgZ290byBub3RfZW5kX29mX2ludF9zdWJzZXQ7Ci0JCQkgICAgfQotCQkJfQotI2lmIDAKLQkJCWZwcmludGYoc3RkZXJyLCAiZW5kIG9mIHN0cmVhbVxuIik7Ci0jZW5kaWYKLQkJICAgICAgICBicmVhazsKLQotCQkgICAgfQotbm90X2VuZF9vZl9pbnRfc3Vic2V0OgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZm9yICovCi0JCX0KLQkJLyoKLQkJICogV2UgZGlkbid0IGZvdW5kIHRoZSBlbmQgb2YgdGhlIEludGVybmFsIHN1YnNldAotCQkgKi8KLSAgICAgICAgICAgICAgICBpZiAocXVvdGUgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjdHh0LT5jaGVja0luZGV4ID0gMDsKLSNpZmRlZiBERUJVR19QVVNICi0JCWlmIChuZXh0ID09IDApCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiUFA6IGxvb2t1cCBvZiBpbnQgc3Vic2V0IGVuZCBmaWxlZFxuIik7Ci0jZW5kaWYKLQkgICAgICAgIGdvdG8gZG9uZTsKLQotZm91bmRfZW5kX2ludF9zdWJzZXQ6Ci0gICAgICAgICAgICAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCghdGVybWluYXRlKSAmJiAoIXhtbFBhcnNlTG9va3VwSW50ZXJuYWxTdWJzZXQoY3R4dCkpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAJCXhtbFBhcnNlSW50ZXJuYWxTdWJzZXQoY3R4dCk7CiAJCWlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQogCQkgICAgZ290byBkb25lOwpAQCAtMTIwNzQsOTQgKzEyMDgzLDIzIEBACiAJCWlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQogCQkgICAgZ290byBkb25lOwogCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9QUk9MT0c7Ci0JCWN0eHQtPmNoZWNrSW5kZXggPSAwOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGVudGVyaW5nIFBST0xPR1xuIik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBicmVhazsKIAkgICAgfQotICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX0NPTU1FTlQ6CisgICAgICAgICAgICBkZWZhdWx0OgogCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJQUDogaW50ZXJuYWwgZXJyb3IsIHN0YXRlID09IENPTU1FTlRcbiIpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9DT05URU5UOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGVudGVyaW5nIENPTlRFTlRcbiIpOwotI2VuZGlmCi0JCWJyZWFrOwotICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX0lHTk9SRToKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBJR05PUkUiKTsKLQkgICAgICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0RURDsKLSNpZmRlZiBERUJVR19QVVNICi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBlbnRlcmluZyBEVERcbiIpOwotI2VuZGlmCi0JICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9QSToKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBQSVxuIik7Ci0JCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJQUDogZW50ZXJpbmcgQ09OVEVOVFxuIik7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhNTF9QQVJTRVJfRU5USVRZX0RFQ0w6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBpbnRlcm5hbCBlcnJvciwgc3RhdGUgPT0gRU5USVRZX0RFQ0xcbiIpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9EVEQ7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJQUDogZW50ZXJpbmcgRFREXG4iKTsKLSNlbmRpZgotCQlicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9FTlRJVFlfVkFMVUU6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBpbnRlcm5hbCBlcnJvciwgc3RhdGUgPT0gRU5USVRZX1ZBTFVFXG4iKTsKLQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfQ09OVEVOVDsKLSNpZmRlZiBERUJVR19QVVNICi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBlbnRlcmluZyBEVERcbiIpOwotI2VuZGlmCi0JCWJyZWFrOwotICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX0FUVFJJQlVURV9WQUxVRToKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBBVFRSSUJVVEVfVkFMVUVcbiIpOwotCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9TVEFSVF9UQUc7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJQUDogZW50ZXJpbmcgU1RBUlRfVEFHXG4iKTsKLSNlbmRpZgotCQlicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX1BBUlNFUl9TWVNURU1fTElURVJBTDoKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGludGVybmFsIGVycm9yLCBzdGF0ZSA9PSBTWVNURU1fTElURVJBTFxuIik7Ci0JCWN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX1NUQVJUX1RBRzsKLSNpZmRlZiBERUJVR19QVVNICi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlBQOiBlbnRlcmluZyBTVEFSVF9UQUdcbiIpOwotI2VuZGlmCi0JCWJyZWFrOwotICAgICAgICAgICAgY2FzZSBYTUxfUEFSU0VSX1BVQkxJQ19MSVRFUkFMOgotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJQUDogaW50ZXJuYWwgZXJyb3IsIHN0YXRlID09IFBVQkxJQ19MSVRFUkFMXG4iKTsKLQkJY3R4dC0+aW5zdGF0ZSA9IFhNTF9QQVJTRVJfU1RBUlRfVEFHOwotI2lmZGVmIERFQlVHX1BVU0gKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUFA6IGVudGVyaW5nIFNUQVJUX1RBR1xuIik7Ci0jZW5kaWYKKwkJCSJQUDogaW50ZXJuYWwgZXJyb3JcbiIpOworCQljdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9FT0Y7CiAJCWJyZWFrOwogCX0KICAgICB9CiBkb25lOgotI2lmZGVmIERFQlVHX1BVU0gKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlBQOiBkb25lICVkXG4iLCByZXQpOwotI2VuZGlmCiAgICAgcmV0dXJuKHJldCk7CiBlbmNvZGluZ19lcnJvcjoKLSAgICB7CisgICAgaWYgKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyIDwgNCkgeworCV9feG1sRXJyRW5jb2RpbmcoY3R4dCwgWE1MX0VSUl9JTlZBTElEX0NIQVIsCisJCSAgICAgIklucHV0IGlzIG5vdCBwcm9wZXIgVVRGLTgsIGluZGljYXRlIGVuY29kaW5nICFcbiIsCisJCSAgICAgTlVMTCwgTlVMTCk7CisgICAgfSBlbHNlIHsKICAgICAgICAgY2hhciBidWZmZXJbMTUwXTsKIAogCXNucHJpbnRmKGJ1ZmZlciwgMTQ5LCAiQnl0ZXM6IDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKQEAgLTEyMTc1LDU1ICsxMjExMyw2IEBACiB9CiAKIC8qKgotICogeG1sUGFyc2VDaGVja1RyYW5zaXRpb246Ci0gKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAotICogQGNodW5rOiAgYSBjaGFyIGFycmF5Ci0gKiBAc2l6ZTogIHRoZSBzaXplIGluIGJ5dGUgb2YgdGhlIGNodW5rCi0gKgotICogQ2hlY2sgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHBhcnNlciBzdGF0ZSBpZiB0aGUgY2h1bmsgZ2l2ZW4gbXVzdCBiZQotICogcHJvY2Vzc2VkIGltbWVkaWF0ZWx5IG9yIG9uZSBuZWVkIG1vcmUgZGF0YSB0byBhZHZhbmNlIG9uIHBhcnNpbmcuCi0gKgotICogUmV0dXJucyAtMSBpbiBjYXNlIG9mIGVycm9yLCAwIGlmIHRoZSBwdXNoIGlzIG5vdCBuZWVkZWQgYW5kIDEgaWYgbmVlZGVkCi0gKi8KLXN0YXRpYyBpbnQKLXhtbFBhcnNlQ2hlY2tUcmFuc2l0aW9uKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgY2hhciAqY2h1bmssIGludCBzaXplKSB7Ci0gICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjaHVuayA9PSBOVUxMKSB8fCAoc2l6ZSA8IDApKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfU1RBUlRfVEFHKSB7Ci0gICAgICAgIGlmIChtZW1jaHIoY2h1bmssICc+Jywgc2l6ZSkgIT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoY3R4dC0+cHJvZ3Jlc3NpdmUgPT0gWE1MX1BBUlNFUl9DT01NRU5UKSB7Ci0gICAgICAgIGlmIChtZW1jaHIoY2h1bmssICc+Jywgc2l6ZSkgIT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0NEQVRBX1NFQ1RJT04pIHsKLSAgICAgICAgaWYgKG1lbWNocihjaHVuaywgJz4nLCBzaXplKSAhPSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChjdHh0LT5wcm9ncmVzc2l2ZSA9PSBYTUxfUEFSU0VSX1BJKSB7Ci0gICAgICAgIGlmIChtZW1jaHIoY2h1bmssICc+Jywgc2l6ZSkgIT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VORF9UQUcpIHsKLSAgICAgICAgaWYgKG1lbWNocihjaHVuaywgJz4nLCBzaXplKSAhPSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICgoY3R4dC0+cHJvZ3Jlc3NpdmUgPT0gWE1MX1BBUlNFUl9EVEQpIHx8Ci0gICAgICAgIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRFREKSkgewotICAgICAgICBpZiAobWVtY2hyKGNodW5rLCAnPicsIHNpemUpICE9IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotCi0vKioKICAqIHhtbFBhcnNlQ2h1bms6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICogQGNodW5rOiAgYW4gY2hhciBhcnJheQpAQCAtMTIyMzgsOSArMTIxMjcsNiBAQAogeG1sUGFyc2VDaHVuayh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IGNoYXIgKmNodW5rLCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgaW50IHRlcm1pbmF0ZSkgewogICAgIGludCBlbmRfaW5fbGYgPSAwOwotICAgIGludCByZW1haW4gPSAwOwotICAgIHNpemVfdCBvbGRfYXZhaWwgPSAwOwotICAgIHNpemVfdCBhdmFpbCA9IDA7CiAKICAgICBpZiAoY3R4dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4oWE1MX0VSUl9JTlRFUk5BTF9FUlJPUik7CkBAIC0xMjI0OCw2ICsxMjEzNCwxMCBAQAogICAgICAgICByZXR1cm4oY3R4dC0+ZXJyTm8pOwogICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQogICAgICAgICByZXR1cm4oLTEpOworICAgIGlmIChjdHh0LT5pbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgY3R4dC0+cHJvZ3Jlc3NpdmUgPSAxOwogICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfU1RBUlQpCiAgICAgICAgIHhtbERldGVjdFNBWDIoY3R4dCk7CiAgICAgaWYgKChzaXplID4gMCkgJiYgKGNodW5rICE9IE5VTEwpICYmICghdGVybWluYXRlKSAmJgpAQCAtMTIyNTYsMTAwICsxMjE0NiwyMSBAQAogCXNpemUtLTsKICAgICB9CiAKLXhtbGRlY2xfZG9uZToKLQogICAgIGlmICgoc2l6ZSA+IDApICYmIChjaHVuayAhPSBOVUxMKSAmJiAoY3R4dC0+aW5wdXQgIT0gTlVMTCkgJiYKICAgICAgICAgKGN0eHQtPmlucHV0LT5idWYgIT0gTlVMTCkgJiYgKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpKSAgewotCXNpemVfdCBiYXNlID0geG1sQnVmR2V0SW5wdXRCYXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwgY3R4dC0+aW5wdXQpOwotCXNpemVfdCBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7CisJc2l6ZV90IHBvcyA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKIAlpbnQgcmVzOwogCi0gICAgICAgIG9sZF9hdmFpbCA9IHhtbEJ1ZlVzZShjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIpOwotICAgICAgICAvKgotICAgICAgICAgKiBTcGVjaWZpYyBoYW5kbGluZyBpZiB3ZSBhdXRvZGV0ZWN0ZWQgYW4gZW5jb2RpbmcsIHdlIHNob3VsZCBub3QKLSAgICAgICAgICogcHVzaCBtb3JlIHRoYW4gdGhlIGZpcnN0IGxpbmUgLi4uIHdoaWNoIGRlcGVuZCBvbiB0aGUgZW5jb2RpbmcKLSAgICAgICAgICogQW5kIG9ubHkgcHVzaCB0aGUgcmVzdCBvbmNlIHRoZSBmaW5hbCBlbmNvZGluZyB3YXMgZGV0ZWN0ZWQKLSAgICAgICAgICovCi0gICAgICAgIGlmICgoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX1NUQVJUKSAmJiAoY3R4dC0+aW5wdXQgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpICYmIChjdHh0LT5pbnB1dC0+YnVmLT5lbmNvZGVyICE9IE5VTEwpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuID0gNDU7Ci0KLSAgICAgICAgICAgIGlmICgoeG1sU3RyY2FzZXN0cihCQURfQ0FTVCBjdHh0LT5pbnB1dC0+YnVmLT5lbmNvZGVyLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBRF9DQVNUICJVVEYtMTYiKSkgfHwKLSAgICAgICAgICAgICAgICAoeG1sU3RyY2FzZXN0cihCQURfQ0FTVCBjdHh0LT5pbnB1dC0+YnVmLT5lbmNvZGVyLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBRF9DQVNUICJVVEYxNiIpKSkKLSAgICAgICAgICAgICAgICBsZW4gPSA5MDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCh4bWxTdHJjYXNlc3RyKEJBRF9DQVNUIGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXItPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQURfQ0FTVCAiVUNTLTQiKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICh4bWxTdHJjYXNlc3RyKEJBRF9DQVNUIGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXItPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQURfQ0FTVCAiVUNTNCIpKSkKLSAgICAgICAgICAgICAgICBsZW4gPSAxODA7Ci0KLSAgICAgICAgICAgIGlmIChjdHh0LT5pbnB1dC0+YnVmLT5yYXdjb25zdW1lZCA8IGxlbikKLSAgICAgICAgICAgICAgICBsZW4gLT0gY3R4dC0+aW5wdXQtPmJ1Zi0+cmF3Y29uc3VtZWQ7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDaGFuZ2Ugc2l6ZSBmb3IgcmVhZGluZyB0aGUgaW5pdGlhbCBkZWNsYXJhdGlvbiBvbmx5Ci0gICAgICAgICAgICAgKiBpZiBzaXplIGlzIGdyZWF0ZXIgdGhhbiBsZW4uIE90aGVyd2lzZSwgbWVtbW92ZSBpbiB4bWxCdWZmZXJBZGQKLSAgICAgICAgICAgICAqIHdpbGwgYmxpbmRseSBjb3B5IGV4dHJhIGJ5dGVzIGZyb20gbWVtb3J5LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGludCkgc2l6ZSA+IGxlbikgewotICAgICAgICAgICAgICAgIHJlbWFpbiA9IHNpemUgLSBsZW47Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGxlbjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVtYWluID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogCXJlcyA9IHhtbFBhcnNlcklucHV0QnVmZmVyUHVzaChjdHh0LT5pbnB1dC0+YnVmLCBzaXplLCBjaHVuayk7Ci0gICAgICAgIHhtbEJ1ZlNldElucHV0QmFzZUN1cihjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0LCBiYXNlLCBjdXIpOworICAgICAgICB4bWxCdWZVcGRhdGVJbnB1dChjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0LCBwb3MpOwogCWlmIChyZXMgPCAwKSB7Ci0JICAgIGN0eHQtPmVyck5vID0gWE1MX1BBUlNFUl9FT0Y7CisgICAgICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBjdHh0LT5pbnB1dC0+YnVmLT5lcnJvciwgTlVMTCk7CiAJICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7Ci0JICAgIHJldHVybiAoWE1MX1BBUlNFUl9FT0YpOwotCX0KLSNpZmRlZiBERUJVR19QVVNICi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJQUDogcHVzaGVkICVkXG4iLCBzaXplKTsKLSNlbmRpZgotCi0gICAgfSBlbHNlIGlmIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRU9GKSB7Ci0JaWYgKChjdHh0LT5pbnB1dCAhPSBOVUxMKSAmJiBjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpIHsKLQkgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW4gPSBjdHh0LT5pbnB1dC0+YnVmOwotCSAgICBpZiAoKGluLT5lbmNvZGVyICE9IE5VTEwpICYmIChpbi0+YnVmZmVyICE9IE5VTEwpICYmCi0JCSAgICAoaW4tPnJhdyAhPSBOVUxMKSkgewotCQlpbnQgbmJjaGFyczsKLQkJc2l6ZV90IGJhc2UgPSB4bWxCdWZHZXRJbnB1dEJhc2UoaW4tPmJ1ZmZlciwgY3R4dC0+aW5wdXQpOwotCQlzaXplX3QgY3VycmVudCA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKLQotCQluYmNoYXJzID0geG1sQ2hhckVuY0lucHV0KGluLCB0ZXJtaW5hdGUpOwotCQl4bWxCdWZTZXRJbnB1dEJhc2VDdXIoaW4tPmJ1ZmZlciwgY3R4dC0+aW5wdXQsIGJhc2UsIGN1cnJlbnQpOwotCQlpZiAobmJjaGFycyA8IDApIHsKLQkJICAgIC8qIFRPRE8gMi42LjAgKi8KLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJCSAgICAieG1sUGFyc2VDaHVuazogZW5jb2RlciBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7Ci0JCSAgICByZXR1cm4oWE1MX0VSUl9JTlZBTElEX0VOQ09ESU5HKTsKLQkJfQotCSAgICB9CisJICAgIHJldHVybihjdHh0LT5lcnJObyk7CiAJfQogICAgIH0KLSAgICBpZiAocmVtYWluICE9IDApIHsKLSAgICAgICAgeG1sUGFyc2VUcnlPckZpbmlzaChjdHh0LCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmIChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpKQotICAgICAgICAgICAgYXZhaWwgPSB4bWxCdWZVc2UoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogRGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlIGl0IG1heSBub3QgYmUgc3VjaAotICAgICAgICAgKiBhIGdvb2QgaWRlYSB0byB0cnkgcGFyc2luZyBpZiB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSBjaHVuawotICAgICAgICAgKiB3aGljaCB3b3VsZCBiZSB3b3J0aCBkb2luZyBhIHBhcnNlciBzdGF0ZSB0cmFuc2l0aW9uIGFuZCB3ZQotICAgICAgICAgKiBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YQotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCh0ZXJtaW5hdGUpIHx8IChhdmFpbCA+IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHx8Ci0gICAgICAgICAgICAob2xkX2F2YWlsID09IDApIHx8IChhdmFpbCA9PSAwKSB8fAotICAgICAgICAgICAgKHhtbFBhcnNlQ2hlY2tUcmFuc2l0aW9uKGN0eHQsCi0gICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopJmN0eHQtPmlucHV0LT5iYXNlW29sZF9hdmFpbF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWwgLSBvbGRfYXZhaWwpKSkKLSAgICAgICAgICAgIHhtbFBhcnNlVHJ5T3JGaW5pc2goY3R4dCwgdGVybWluYXRlKTsKLSAgICB9CisKKyAgICB4bWxQYXJzZVRyeU9yRmluaXNoKGN0eHQsIHRlcm1pbmF0ZSk7CiAgICAgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpCiAgICAgICAgIHJldHVybihjdHh0LT5lcnJObyk7CiAKQEAgLTEyMzYzLDQ1ICsxMjE3NCw0MyBAQAogICAgIGlmICgoY3R4dC0+ZXJyTm8gIT0gWE1MX0VSUl9PSykgJiYgKGN0eHQtPmRpc2FibGVTQVggPT0gMSkpCiAgICAgICAgIHJldHVybihjdHh0LT5lcnJObyk7CiAKLSAgICBpZiAocmVtYWluICE9IDApIHsKLSAgICAgICAgY2h1bmsgKz0gc2l6ZTsKLSAgICAgICAgc2l6ZSA9IHJlbWFpbjsKLSAgICAgICAgcmVtYWluID0gMDsKLSAgICAgICAgZ290byB4bWxkZWNsX2RvbmU7Ci0gICAgfQogICAgIGlmICgoZW5kX2luX2xmID09IDEpICYmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSAmJgogICAgICAgICAoY3R4dC0+aW5wdXQtPmJ1ZiAhPSBOVUxMKSkgewotCXNpemVfdCBiYXNlID0geG1sQnVmR2V0SW5wdXRCYXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwKLQkJCQkJIGN0eHQtPmlucHV0KTsKLQlzaXplX3QgY3VycmVudCA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKKwlzaXplX3QgcG9zID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOworICAgICAgICBpbnQgcmVzOwogCi0JeG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoKGN0eHQtPmlucHV0LT5idWYsIDEsICJcciIpOwotCi0JeG1sQnVmU2V0SW5wdXRCYXNlQ3VyKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwgY3R4dC0+aW5wdXQsCi0JCQkgICAgICBiYXNlLCBjdXJyZW50KTsKKwlyZXMgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB1c2goY3R4dC0+aW5wdXQtPmJ1ZiwgMSwgIlxyIik7CisJeG1sQnVmVXBkYXRlSW5wdXQoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyLCBjdHh0LT5pbnB1dCwgcG9zKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIGN0eHQtPmlucHV0LT5idWYtPmVycm9yLCBOVUxMKTsKKyAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgICAgICByZXR1cm4oY3R4dC0+ZXJyTm8pOworICAgICAgICB9CiAgICAgfQogICAgIGlmICh0ZXJtaW5hdGUpIHsKIAkvKgogCSAqIENoZWNrIGZvciB0ZXJtaW5hdGlvbgogCSAqLwotCWludCBjdXJfYXZhaWwgPSAwOwotCi0JaWYgKGN0eHQtPmlucHV0ICE9IE5VTEwpIHsKLQkgICAgaWYgKGN0eHQtPmlucHV0LT5idWYgPT0gTlVMTCkKLQkJY3VyX2F2YWlsID0gY3R4dC0+aW5wdXQtPmxlbmd0aCAtCi0JCQkgICAgKGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7Ci0JICAgIGVsc2UKLQkJY3VyX2F2YWlsID0geG1sQnVmVXNlKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlcikgLQotCQkJICAgICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKLQl9Ci0KLQlpZiAoKGN0eHQtPmluc3RhdGUgIT0gWE1MX1BBUlNFUl9FT0YpICYmCi0JICAgIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRVBJTE9HKSkgewotCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0RPQ1VNRU5UX0VORCwgTlVMTCk7Ci0JfQotCWlmICgoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VQSUxPRykgJiYgKGN1cl9hdmFpbCA+IDApKSB7Ci0JICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRE9DVU1FTlRfRU5ELCBOVUxMKTsKLQl9CisgICAgICAgIGlmICgoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikgJiYKKyAgICAgICAgICAgIChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRVBJTE9HKSkgeworICAgICAgICAgICAgaWYgKGN0eHQtPm5hbWVOciA+IDApIHsKKyAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lID0gY3R4dC0+bmFtZVRhYltjdHh0LT5uYW1lTnIgLSAxXTsKKyAgICAgICAgICAgICAgICBpbnQgbGluZSA9IGN0eHQtPnB1c2hUYWJbY3R4dC0+bmFtZU5yIC0gMV0ubGluZTsKKyAgICAgICAgICAgICAgICB4bWxGYXRhbEVyck1zZ1N0ckludFN0cihjdHh0LCBYTUxfRVJSX1RBR19OT1RfRklOSVNIRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHJlbWF0dXJlIGVuZCBvZiBkYXRhIGluIHRhZyAlcyBsaW5lICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGluZSwgTlVMTCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9TVEFSVCkgeworICAgICAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfRE9DVU1FTlRfRU1QVFksIE5VTEwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB4bWxGYXRhbEVyck1zZyhjdHh0LCBYTUxfRVJSX0RPQ1VNRU5UX0VNUFRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmRcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5idWYtPmVuY29kZXIgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICAgICAgICAoIXhtbEJ1ZklzRW1wdHkoY3R4dC0+aW5wdXQtPmJ1Zi0+cmF3KSkpIHsKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyTXNnKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRydW5jYXRlZCBtdWx0aS1ieXRlIHNlcXVlbmNlIGF0IEVPRlxuIik7CisgICAgICAgIH0KIAlpZiAoY3R4dC0+aW5zdGF0ZSAhPSBYTUxfUEFSU0VSX0VPRikgewogCSAgICBpZiAoKGN0eHQtPnNheCkgJiYgKGN0eHQtPnNheC0+ZW5kRG9jdW1lbnQgIT0gTlVMTCkpCiAJCWN0eHQtPnNheC0+ZW5kRG9jdW1lbnQoY3R4dC0+dXNlckRhdGEpOwpAQCAtMTI0NDUsNDQgKzEyMjU0LDE3IEBACiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OwogICAgIHhtbFBhcnNlcklucHV0UHRyIGlucHV0U3RyZWFtOwogICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGJ1ZjsKLSAgICB4bWxDaGFyRW5jb2RpbmcgZW5jID0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORTsKIAotICAgIC8qCi0gICAgICogcGx1ZyBzb21lIGVuY29kaW5nIGNvbnZlcnNpb24gcm91dGluZXMKLSAgICAgKi8KLSAgICBpZiAoKGNodW5rICE9IE5VTEwpICYmIChzaXplID49IDQpKQotCWVuYyA9IHhtbERldGVjdENoYXJFbmNvZGluZygoY29uc3QgeG1sQ2hhciAqKSBjaHVuaywgc2l6ZSk7Ci0KLSAgICBidWYgPSB4bWxBbGxvY1BhcnNlcklucHV0QnVmZmVyKGVuYyk7CisgICAgYnVmID0geG1sQWxsb2NQYXJzZXJJbnB1dEJ1ZmZlcihYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHJldHVybihOVUxMKTsKIAotICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgY3R4dCA9IHhtbE5ld1NBWFBhcnNlckN0eHQoc2F4LCB1c2VyX2RhdGEpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKICAgICAgICAgeG1sRXJyTWVtb3J5KE5VTEwsICJjcmVhdGluZyBwYXJzZXI6IG91dCBvZiBtZW1vcnlcbiIpOwogCXhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOwogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgY3R4dC0+ZGljdE5hbWVzID0gMTsKLSAgICBpZiAoc2F4ICE9IE5VTEwpIHsKLSNpZmRlZiBMSUJYTUxfU0FYMV9FTkFCTEVECi0JaWYgKGN0eHQtPnNheCAhPSAoeG1sU0FYSGFuZGxlclB0cikgJnhtbERlZmF1bHRTQVhIYW5kbGVyKQotI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLQkgICAgeG1sRnJlZShjdHh0LT5zYXgpOwotCWN0eHQtPnNheCA9ICh4bWxTQVhIYW5kbGVyUHRyKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKLQlpZiAoY3R4dC0+c2F4ID09IE5VTEwpIHsKLQkgICAgeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwotCSAgICB4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoYnVmKTsKLQkgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0JbWVtc2V0KGN0eHQtPnNheCwgMCwgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKLQlpZiAoc2F4LT5pbml0aWFsaXplZCA9PSBYTUxfU0FYMl9NQUdJQykKLQkgICAgbWVtY3B5KGN0eHQtPnNheCwgc2F4LCBzaXplb2YoeG1sU0FYSGFuZGxlcikpOwotCWVsc2UKLQkgICAgbWVtY3B5KGN0eHQtPnNheCwgc2F4LCBzaXplb2YoeG1sU0FYSGFuZGxlclYxKSk7Ci0JaWYgKHVzZXJfZGF0YSAhPSBOVUxMKQotCSAgICBjdHh0LT51c2VyRGF0YSA9IHVzZXJfZGF0YTsKLSAgICB9CiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKIAljdHh0LT5kaXJlY3RvcnkgPSBOVUxMOwogICAgIH0gZWxzZSB7CkBAIC0xMjUwMiw2ICsxMjI4NCw3IEBACiAJaW5wdXRTdHJlYW0tPmZpbGVuYW1lID0gKGNoYXIgKikKIAkgICAgeG1sQ2Fub25pY1BhdGgoKGNvbnN0IHhtbENoYXIgKikgZmlsZW5hbWUpOwogCWlmIChpbnB1dFN0cmVhbS0+ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgeG1sRnJlZUlucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKIAkgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOwogCSAgICByZXR1cm4oTlVMTCk7CkBAIC0xMjUxMSwyNyArMTIyOTQsMTcgQEAKICAgICB4bWxCdWZSZXNldElucHV0KGlucHV0U3RyZWFtLT5idWYtPmJ1ZmZlciwgaW5wdXRTdHJlYW0pOwogICAgIGlucHV0UHVzaChjdHh0LCBpbnB1dFN0cmVhbSk7CiAKLSAgICAvKgotICAgICAqIElmIHRoZSBjYWxsZXIgZGlkbid0IHByb3ZpZGUgYW4gaW5pdGlhbCAnY2h1bmsnIGZvciBkZXRlcm1pbmluZwotICAgICAqIHRoZSBlbmNvZGluZywgd2Ugc2V0IHRoZSBjb250ZXh0IHRvIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUgc28KLSAgICAgKiB0aGF0IGl0IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgbGF0ZXIKLSAgICAgKi8KLSAgICBpZiAoKHNpemUgPT0gMCkgfHwgKGNodW5rID09IE5VTEwpKSB7Ci0JY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HX05PTkU7Ci0gICAgfSBlbHNlIGlmICgoY3R4dC0+aW5wdXQgIT0gTlVMTCkgJiYgKGN0eHQtPmlucHV0LT5idWYgIT0gTlVMTCkpIHsKLQlzaXplX3QgYmFzZSA9IHhtbEJ1ZkdldElucHV0QmFzZShjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0KTsKLQlzaXplX3QgY3VyID0gY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlOworICAgIGlmICgoc2l6ZSAhPSAwKSAmJiAoY2h1bmsgIT0gTlVMTCkgJiYKKyAgICAgICAgKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmIChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpKSB7CisJc2l6ZV90IHBvcyA9IGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZTsKKyAgICAgICAgaW50IHJlczsKIAotCXhtbFBhcnNlcklucHV0QnVmZmVyUHVzaChjdHh0LT5pbnB1dC0+YnVmLCBzaXplLCBjaHVuayk7Ci0KLSAgICAgICAgeG1sQnVmU2V0SW5wdXRCYXNlQ3VyKGN0eHQtPmlucHV0LT5idWYtPmJ1ZmZlciwgY3R4dC0+aW5wdXQsIGJhc2UsIGN1cik7Ci0jaWZkZWYgREVCVUdfUFVTSAotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUFA6IHB1c2hlZCAlZFxuIiwgc2l6ZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoZW5jICE9IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpIHsKLSAgICAgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKKwlyZXMgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB1c2goY3R4dC0+aW5wdXQtPmJ1Ziwgc2l6ZSwgY2h1bmspOworICAgICAgICB4bWxCdWZVcGRhdGVJbnB1dChjdHh0LT5pbnB1dC0+YnVmLT5idWZmZXIsIGN0eHQtPmlucHV0LCBwb3MpOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgeG1sRmF0YWxFcnIoY3R4dCwgY3R4dC0+aW5wdXQtPmJ1Zi0+ZXJyb3IsIE5VTEwpOworICAgICAgICAgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybihjdHh0KTsKQEAgLTEyNTM5LDQxICsxMjMxMiw2IEBACiAjZW5kaWYgLyogTElCWE1MX1BVU0hfRU5BQkxFRCAqLwogCiAvKioKLSAqIHhtbEhhbHRQYXJzZXI6Ci0gKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAotICoKLSAqIEJsb2NrcyBmdXJ0aGVyIHBhcnNlciBwcm9jZXNzaW5nIGRvbid0IG92ZXJyaWRlIGVycm9yCi0gKiBmb3IgaW50ZXJuYWwgdXNlCi0gKi8KLXN0YXRpYyB2b2lkCi14bWxIYWx0UGFyc2VyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgewotICAgIGlmIChjdHh0ID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSAgICBjdHh0LT5pbnN0YXRlID0gWE1MX1BBUlNFUl9FT0Y7Ci0gICAgY3R4dC0+ZGlzYWJsZVNBWCA9IDE7Ci0gICAgd2hpbGUgKGN0eHQtPmlucHV0TnIgPiAxKQotICAgICAgICB4bWxGcmVlSW5wdXRTdHJlYW0oaW5wdXRQb3AoY3R4dCkpOwotICAgIGlmIChjdHh0LT5pbnB1dCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qCi0JICogaW4gY2FzZSB0aGVyZSB3YXMgYSBzcGVjaWZpYyBhbGxvY2F0aW9uIGRlYWxsb2NhdGUgYmVmb3JlCi0JICogb3ZlcnJpZGluZyBiYXNlCi0JICovCi0gICAgICAgIGlmIChjdHh0LT5pbnB1dC0+ZnJlZSAhPSBOVUxMKSB7Ci0JICAgIGN0eHQtPmlucHV0LT5mcmVlKCh4bWxDaGFyICopIGN0eHQtPmlucHV0LT5iYXNlKTsKLQkgICAgY3R4dC0+aW5wdXQtPmZyZWUgPSBOVUxMOwotCX0KLSAgICAgICAgaWYgKGN0eHQtPmlucHV0LT5idWYgIT0gTlVMTCkgewotICAgICAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGN0eHQtPmlucHV0LT5idWYpOwotICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmJ1ZiA9IE5VTEw7Ci0gICAgICAgIH0KLQljdHh0LT5pbnB1dC0+Y3VyID0gQkFEX0NBU1QiIjsKLSAgICAgICAgY3R4dC0+aW5wdXQtPmxlbmd0aCA9IDA7Ci0JY3R4dC0+aW5wdXQtPmJhc2UgPSBjdHh0LT5pbnB1dC0+Y3VyOwotICAgICAgICBjdHh0LT5pbnB1dC0+ZW5kID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICB9Ci19Ci0KLS8qKgogICogeG1sU3RvcFBhcnNlcjoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgpAQCAtMTI2MTgsMzEgKzEyMzU2LDExIEBACiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgfQogCi0gICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICBjdHh0ID0geG1sTmV3U0FYUGFyc2VyQ3R4dChzYXgsIHVzZXJfZGF0YSk7CiAgICAgaWYgKGN0eHQgPT0gTlVMTCkgewogCXhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgaWYgKHNheCAhPSBOVUxMKSB7Ci0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotCWlmIChjdHh0LT5zYXggIT0gKHhtbFNBWEhhbmRsZXJQdHIpICZ4bWxEZWZhdWx0U0FYSGFuZGxlcikKLSNlbmRpZiAvKiBMSUJYTUxfU0FYMV9FTkFCTEVEICovCi0JICAgIHhtbEZyZWUoY3R4dC0+c2F4KTsKLQljdHh0LT5zYXggPSAoeG1sU0FYSGFuZGxlclB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxTQVhIYW5kbGVyKSk7Ci0JaWYgKGN0eHQtPnNheCA9PSBOVUxMKSB7Ci0JICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOwotCSAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7Ci0JICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQotCW1lbXNldChjdHh0LT5zYXgsIDAsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7Ci0JaWYgKHNheC0+aW5pdGlhbGl6ZWQgPT0gWE1MX1NBWDJfTUFHSUMpCi0JICAgIG1lbWNweShjdHh0LT5zYXgsIHNheCwgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKLQllbHNlCi0JICAgIG1lbWNweShjdHh0LT5zYXgsIHNheCwgc2l6ZW9mKHhtbFNBWEhhbmRsZXJWMSkpOwotCWlmICh1c2VyX2RhdGEgIT0gTlVMTCkKLQkgICAgY3R4dC0+dXNlckRhdGEgPSB1c2VyX2RhdGE7Ci0gICAgfQogCiAgICAgaW5wdXRTdHJlYW0gPSB4bWxOZXdJT0lucHV0U3RyZWFtKGN0eHQsIGJ1ZiwgZW5jKTsKICAgICBpZiAoaW5wdXRTdHJlYW0gPT0gTlVMTCkgewpAQCAtMTI2NzksMTIgKzEyMzk3LDExIEBACiAgICAgeG1sRHRkUHRyIHJldCA9IE5VTEw7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OwogICAgIHhtbFBhcnNlcklucHV0UHRyIHBpbnB1dCA9IE5VTEw7Ci0gICAgeG1sQ2hhciBzdGFydFs0XTsKIAogICAgIGlmIChpbnB1dCA9PSBOVUxMKQogCXJldHVybihOVUxMKTsKIAotICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgY3R4dCA9IHhtbE5ld1NBWFBhcnNlckN0eHQoc2F4LCBOVUxMKTsKICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihpbnB1dCk7CiAJcmV0dXJuKE5VTEwpOwpAQCAtMTI2OTMsMTUgKzEyNDEwLDYgQEAKICAgICAvKiBXZSBhcmUgbG9hZGluZyBhIERURCAqLwogICAgIGN0eHQtPm9wdGlvbnMgfD0gWE1MX1BBUlNFX0RURExPQUQ7CiAKLSAgICAvKgotICAgICAqIFNldC11cCB0aGUgU0FYIGNvbnRleHQKLSAgICAgKi8KLSAgICBpZiAoc2F4ICE9IE5VTEwpIHsKLQlpZiAoY3R4dC0+c2F4ICE9IE5VTEwpCi0JICAgIHhtbEZyZWUoY3R4dC0+c2F4KTsKLSAgICAgICAgY3R4dC0+c2F4ID0gc2F4OwotICAgICAgICBjdHh0LT51c2VyRGF0YSA9IGN0eHQ7Ci0gICAgfQogICAgIHhtbERldGVjdFNBWDIoY3R4dCk7CiAKICAgICAvKgpAQCAtMTI3MTAsNyArMTI0MTgsNiBAQAogCiAgICAgcGlucHV0ID0geG1sTmV3SU9JbnB1dFN0cmVhbShjdHh0LCBpbnB1dCwgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CiAgICAgaWYgKHBpbnB1dCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzYXggIT0gTlVMTCkgY3R4dC0+c2F4ID0gTlVMTDsKICAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGlucHV0KTsKIAl4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKIAlyZXR1cm4oTlVMTCk7CkBAIC0xMjcyMCw3ICsxMjQyNyw2IEBACiAgICAgICogcGx1ZyBzb21lIGVuY29kaW5nIGNvbnZlcnNpb24gcm91dGluZXMgaGVyZS4KICAgICAgKi8KICAgICBpZiAoeG1sUHVzaElucHV0KGN0eHQsIHBpbnB1dCkgPCAwKSB7Ci0gICAgICAgIGlmIChzYXggIT0gTlVMTCkgY3R4dC0+c2F4ID0gTlVMTDsKIAl4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQpAQCAtMTI3MjgsMTMgKzEyNDM0LDYgQEAKICAgICAgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKICAgICB9CiAKLSAgICBwaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKLSAgICBwaW5wdXQtPmxpbmUgPSAxOwotICAgIHBpbnB1dC0+Y29sID0gMTsKLSAgICBwaW5wdXQtPmJhc2UgPSBjdHh0LT5pbnB1dC0+Y3VyOwotICAgIHBpbnB1dC0+Y3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICBwaW5wdXQtPmZyZWUgPSBOVUxMOwotCiAgICAgLyoKICAgICAgKiBsZXQncyBwYXJzZSB0aGF0IGVudGl0eSBrbm93aW5nIGl0J3MgYW4gZXh0ZXJuYWwgc3Vic2V0LgogICAgICAqLwpAQCAtMTI3NDgsMjIgKzEyNDQ3LDcgQEAKICAgICBjdHh0LT5teURvYy0+ZXh0U3Vic2V0ID0geG1sTmV3RHRkKGN0eHQtPm15RG9jLCBCQURfQ0FTVCAibm9uZSIsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBRF9DQVNUICJub25lIiwgQkFEX0NBU1QgIm5vbmUiKTsKIAotICAgIGlmICgoZW5jID09IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpICYmCi0gICAgICAgICgoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIpID49IDQpKSB7Ci0JLyoKLQkgKiBHZXQgdGhlIDQgZmlyc3QgYnl0ZXMgYW5kIGRlY29kZSB0aGUgY2hhcnNldAotCSAqIGlmIGVuYyAhPSBYTUxfQ0hBUl9FTkNPRElOR19OT05FCi0JICogcGx1ZyBzb21lIGVuY29kaW5nIGNvbnZlcnNpb24gcm91dGluZXMuCi0JICovCi0Jc3RhcnRbMF0gPSBSQVc7Ci0Jc3RhcnRbMV0gPSBOWFQoMSk7Ci0Jc3RhcnRbMl0gPSBOWFQoMik7Ci0Jc3RhcnRbM10gPSBOWFQoMyk7Ci0JZW5jID0geG1sRGV0ZWN0Q2hhckVuY29kaW5nKHN0YXJ0LCA0KTsKLQlpZiAoZW5jICE9IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpIHsKLQkgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKLQl9Ci0gICAgfQorICAgIHhtbERldGVjdEVuY29kaW5nKGN0eHQpOwogCiAgICAgeG1sUGFyc2VFeHRlcm5hbFN1YnNldChjdHh0LCBCQURfQ0FTVCAibm9uZSIsIEJBRF9DQVNUICJub25lIik7CiAKQEAgLTEyNzg3LDcgKzEyNDcxLDYgQEAKICAgICAgICAgeG1sRnJlZURvYyhjdHh0LT5teURvYyk7CiAgICAgICAgIGN0eHQtPm15RG9jID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKHNheCAhPSBOVUxMKSBjdHh0LT5zYXggPSBOVUxMOwogICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogCiAgICAgcmV0dXJuKHJldCk7CkBAIC0xMjc5OSw2ICsxMjQ4Miw4IEBACiAgKiBARXh0ZXJuYWxJRDogIGEgTkFNRSogY29udGFpbmluZyB0aGUgRXh0ZXJuYWwgSUQgb2YgdGhlIERURAogICogQFN5c3RlbUlEOiAgYSBOQU1FKiBjb250YWluaW5nIHRoZSBVUkwgdG8gdGhlIERURAogICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZS4KKyAqCiAgKiBMb2FkIGFuZCBwYXJzZSBhbiBleHRlcm5hbCBzdWJzZXQuCiAgKgogICogUmV0dXJucyB0aGUgcmVzdWx0aW5nIHhtbER0ZFB0ciBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCkBAIC0xMjgxMCwxMiArMTI0OTUsMTEgQEAKICAgICB4bWxEdGRQdHIgcmV0ID0gTlVMTDsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQgPSBOVUxMOwotICAgIHhtbENoYXJFbmNvZGluZyBlbmM7CiAgICAgeG1sQ2hhciogc3lzdGVtSWRDYW5vbmljOwogCiAgICAgaWYgKChFeHRlcm5hbElEID09IE5VTEwpICYmIChTeXN0ZW1JRCA9PSBOVUxMKSkgcmV0dXJuKE5VTEwpOwogCi0gICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICBjdHh0ID0geG1sTmV3U0FYUGFyc2VyQ3R4dChzYXgsIE5VTEwpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQpAQCAtMTI4MjQsMTYgKzEyNTA4LDYgQEAKICAgICBjdHh0LT5vcHRpb25zIHw9IFhNTF9QQVJTRV9EVERMT0FEOwogCiAgICAgLyoKLSAgICAgKiBTZXQtdXAgdGhlIFNBWCBjb250ZXh0Ci0gICAgICovCi0gICAgaWYgKHNheCAhPSBOVUxMKSB7Ci0JaWYgKGN0eHQtPnNheCAhPSBOVUxMKQotCSAgICB4bWxGcmVlKGN0eHQtPnNheCk7Ci0gICAgICAgIGN0eHQtPnNheCA9IHNheDsKLSAgICAgICAgY3R4dC0+dXNlckRhdGEgPSBjdHh0OwotICAgIH0KLQotICAgIC8qCiAgICAgICogQ2Fub25pY2FsaXNlIHRoZSBzeXN0ZW0gSUQKICAgICAgKi8KICAgICBzeXN0ZW1JZENhbm9uaWMgPSB4bWxDYW5vbmljUGF0aChTeXN0ZW1JRCk7CkBAIC0xMjg1MCw3ICsxMjUyNCw2IEBACiAJaW5wdXQgPSBjdHh0LT5zYXgtPnJlc29sdmVFbnRpdHkoY3R4dC0+dXNlckRhdGEsIEV4dGVybmFsSUQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWRDYW5vbmljKTsKICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgICBpZiAoc2F4ICE9IE5VTEwpIGN0eHQtPnNheCA9IE5VTEw7CiAJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJaWYgKHN5c3RlbUlkQ2Fub25pYyAhPSBOVUxMKQogCSAgICB4bWxGcmVlKHN5c3RlbUlkQ2Fub25pYyk7CkBAIC0xMjg2MSwyNiArMTI1MzQsMTggQEAKICAgICAgKiBwbHVnIHNvbWUgZW5jb2RpbmcgY29udmVyc2lvbiByb3V0aW5lcyBoZXJlLgogICAgICAqLwogICAgIGlmICh4bWxQdXNoSW5wdXQoY3R4dCwgaW5wdXQpIDwgMCkgewotICAgICAgICBpZiAoc2F4ICE9IE5VTEwpIGN0eHQtPnNheCA9IE5VTEw7CiAJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJaWYgKHN5c3RlbUlkQ2Fub25pYyAhPSBOVUxMKQogCSAgICB4bWxGcmVlKHN5c3RlbUlkQ2Fub25pYyk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBpZiAoKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyKSA+PSA0KSB7Ci0JZW5jID0geG1sRGV0ZWN0Q2hhckVuY29kaW5nKGN0eHQtPmlucHV0LT5jdXIsIDQpOwotCXhtbFN3aXRjaEVuY29kaW5nKGN0eHQsIGVuYyk7Ci0gICAgfQorCisgICAgeG1sRGV0ZWN0RW5jb2RpbmcoY3R4dCk7CiAKICAgICBpZiAoaW5wdXQtPmZpbGVuYW1lID09IE5VTEwpCiAJaW5wdXQtPmZpbGVuYW1lID0gKGNoYXIgKikgc3lzdGVtSWRDYW5vbmljOwogICAgIGVsc2UKIAl4bWxGcmVlKHN5c3RlbUlkQ2Fub25pYyk7Ci0gICAgaW5wdXQtPmxpbmUgPSAxOwotICAgIGlucHV0LT5jb2wgPSAxOwotICAgIGlucHV0LT5iYXNlID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICBpbnB1dC0+Y3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICBpbnB1dC0+ZnJlZSA9IE5VTEw7CiAKICAgICAvKgogICAgICAqIGxldCdzIHBhcnNlIHRoYXQgZW50aXR5IGtub3dpbmcgaXQncyBhbiBleHRlcm5hbCBzdWJzZXQuCkBAIC0xMjg4OSw3ICsxMjU1NCw2IEBACiAgICAgY3R4dC0+bXlEb2MgPSB4bWxOZXdEb2MoQkFEX0NBU1QgIjEuMCIpOwogICAgIGlmIChjdHh0LT5teURvYyA9PSBOVUxMKSB7CiAJeG1sRXJyTWVtb3J5KGN0eHQsICJOZXcgRG9jIGZhaWxlZCIpOwotICAgICAgICBpZiAoc2F4ICE9IE5VTEwpIGN0eHQtPnNheCA9IE5VTEw7CiAJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KQEAgLTEyOTE4LDcgKzEyNTgyLDYgQEAKICAgICAgICAgeG1sRnJlZURvYyhjdHh0LT5teURvYyk7CiAgICAgICAgIGN0eHQtPm15RG9jID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKHNheCAhPSBOVUxMKSBjdHh0LT5zYXggPSBOVUxMOwogICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogCiAgICAgcmV0dXJuKHJldCk7CkBAIC0xMzAwOSwxNSArMTI2NzIsMTQgQEAKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAgICAgeG1sRG9jUHRyIG5ld0RvYzsKICAgICB4bWxOb2RlUHRyIG5ld1Jvb3Q7Ci0gICAgeG1sU0FYSGFuZGxlclB0ciBvbGRzYXggPSBOVUxMOwogICAgIHhtbFBhcnNlckVycm9ycyByZXQgPSBYTUxfRVJSX09LOwotICAgIHhtbENoYXIgc3RhcnRbNF07Ci0gICAgeG1sQ2hhckVuY29kaW5nIGVuYzsKIAogICAgIGlmICgoKGRlcHRoID4gNDApICYmCiAJKChvbGRjdHh0ID09IE5VTEwpIHx8IChvbGRjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID09IDApKSB8fAotCShkZXB0aCA+IDEwMjQpKSB7Ci0JcmV0dXJuKFhNTF9FUlJfRU5USVRZX0xPT1ApOworCShkZXB0aCA+IDEwMCkpIHsKKwl4bWxGYXRhbEVyck1zZyhvbGRjdHh0LCBYTUxfRVJSX0VOVElUWV9MT09QLAorICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW11bSBlbnRpdHkgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOworICAgICAgICByZXR1cm4oWE1MX0VSUl9FTlRJVFlfTE9PUCk7CiAgICAgfQogCiAgICAgaWYgKGxpc3QgIT0gTlVMTCkKQEAgLTEzMDI3LDE3ICsxMjY4OSwxNSBAQAogICAgIGlmIChkb2MgPT0gTlVMTCkKIAlyZXR1cm4oWE1MX0VSUl9JTlRFUk5BTF9FUlJPUik7CiAKLQotICAgIGN0eHQgPSB4bWxDcmVhdGVFbnRpdHlQYXJzZXJDdHh0SW50ZXJuYWwoVVJMLCBJRCwgTlVMTCwgb2xkY3R4dCk7CisgICAgY3R4dCA9IHhtbENyZWF0ZUVudGl0eVBhcnNlckN0eHRJbnRlcm5hbChzYXgsIHVzZXJfZGF0YSwgVVJMLCBJRCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGN0eHQpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHJldHVybihYTUxfV0FSX1VOREVDTEFSRURfRU5USVRZKTsKLSAgICBjdHh0LT51c2VyRGF0YSA9IGN0eHQ7Ci0gICAgaWYgKHNheCAhPSBOVUxMKSB7Ci0Jb2xkc2F4ID0gY3R4dC0+c2F4OwotICAgICAgICBjdHh0LT5zYXggPSBzYXg7Ci0JaWYgKHVzZXJfZGF0YSAhPSBOVUxMKQotCSAgICBjdHh0LT51c2VyRGF0YSA9IHVzZXJfZGF0YTsKKyAgICBpZiAob2xkY3R4dCAhPSBOVUxMKSB7CisgICAgICAgIGN0eHQtPm5iRXJyb3JzID0gb2xkY3R4dC0+bmJFcnJvcnM7CisgICAgICAgIGN0eHQtPm5iV2FybmluZ3MgPSBvbGRjdHh0LT5uYldhcm5pbmdzOwogICAgIH0KICAgICB4bWxEZXRlY3RTQVgyKGN0eHQpOworCiAgICAgbmV3RG9jID0geG1sTmV3RG9jKEJBRF9DQVNUICIxLjAiKTsKICAgICBpZiAobmV3RG9jID09IE5VTEwpIHsKIAl4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKQEAgLTEzMDU4LDcgKzEyNzE4LDYgQEAKICAgICBuZXdSb290ID0geG1sTmV3RG9jTm9kZShuZXdEb2MsIE5VTEwsIEJBRF9DQVNUICJwc2V1ZG9yb290IiwgTlVMTCk7CiAgICAgaWYgKG5ld1Jvb3QgPT0gTlVMTCkgewogCWlmIChzYXggIT0gTlVMTCkKLQkgICAgY3R4dC0+c2F4ID0gb2xkc2F4OwogCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogCW5ld0RvYy0+aW50U3Vic2V0ID0gTlVMTDsKIAluZXdEb2MtPmV4dFN1YnNldCA9IE5VTEw7CkBAIC0xMzA3NCwyMiArMTI3MzMsNyBAQAogICAgICAgICBuZXdSb290LT5kb2MgPSBkb2M7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBHZXQgdGhlIDQgZmlyc3QgYnl0ZXMgYW5kIGRlY29kZSB0aGUgY2hhcnNldAotICAgICAqIGlmIGVuYyAhPSBYTUxfQ0hBUl9FTkNPRElOR19OT05FCi0gICAgICogcGx1ZyBzb21lIGVuY29kaW5nIGNvbnZlcnNpb24gcm91dGluZXMuCi0gICAgICovCi0gICAgR1JPVzsKLSAgICBpZiAoKGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyKSA+PSA0KSB7Ci0Jc3RhcnRbMF0gPSBSQVc7Ci0Jc3RhcnRbMV0gPSBOWFQoMSk7Ci0Jc3RhcnRbMl0gPSBOWFQoMik7Ci0Jc3RhcnRbM10gPSBOWFQoMyk7Ci0JZW5jID0geG1sRGV0ZWN0Q2hhckVuY29kaW5nKHN0YXJ0LCA0KTsKLQlpZiAoZW5jICE9IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpIHsKLQkgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKLQl9Ci0gICAgfQorICAgIHhtbERldGVjdEVuY29kaW5nKGN0eHQpOwogCiAgICAgLyoKICAgICAgKiBQYXJzZSBhIHBvc3NpYmxlIHRleHQgZGVjbGFyYXRpb24gZmlyc3QKQEAgLTEzMTE4LDYgKzEyNzYyLDcgQEAKICAgICAgICAgICAgIGN0eHQtPnZjdHh0LmVycm9yID0gb2xkY3R4dC0+dmN0eHQuZXJyb3I7CiAgICAgICAgICAgICBjdHh0LT52Y3R4dC53YXJuaW5nID0gb2xkY3R4dC0+dmN0eHQud2FybmluZzsKICAgICAgICAgICAgIGN0eHQtPnZjdHh0LnVzZXJEYXRhID0gb2xkY3R4dC0+dmN0eHQudXNlckRhdGE7CisgICAgICAgICAgICBjdHh0LT52Y3R4dC5mbGFncyA9IG9sZGN0eHQtPnZjdHh0LmZsYWdzOwogICAgICAgICB9CiAJY3R4dC0+ZXh0ZXJuYWwgPSBvbGRjdHh0LT5leHRlcm5hbDsKICAgICAgICAgaWYgKGN0eHQtPmRpY3QpIHhtbERpY3RGcmVlKGN0eHQtPmRpY3QpOwpAQCAtMTMxNTYsMTAgKzEyODAxLDEyIEBACiAgICAgfQogCiAgICAgaWYgKCFjdHh0LT53ZWxsRm9ybWVkKSB7Ci0gICAgICAgIGlmIChjdHh0LT5lcnJObyA9PSAwKQotCSAgICByZXQgPSBYTUxfRVJSX0lOVEVSTkFMX0VSUk9SOwotCWVsc2UKLQkgICAgcmV0ID0gKHhtbFBhcnNlckVycm9ycyljdHh0LT5lcnJObzsKKwlyZXQgPSAoeG1sUGFyc2VyRXJyb3JzKWN0eHQtPmVyck5vOworICAgICAgICBpZiAob2xkY3R4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICBvbGRjdHh0LT5lcnJObyA9IGN0eHQtPmVyck5vOworICAgICAgICAgICAgb2xkY3R4dC0+d2VsbEZvcm1lZCA9IDA7CisgICAgICAgICAgICB4bWxDb3B5RXJyb3IoJmN0eHQtPmxhc3RFcnJvciwgJm9sZGN0eHQtPmxhc3RFcnJvcik7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogCWlmIChsaXN0ICE9IE5VTEwpIHsKIAkgICAgeG1sTm9kZVB0ciBjdXI7CkBAIC0xMzE4MCwzMSArMTI4MjcsMjYgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqIFJlY29yZCBpbiB0aGUgcGFyZW50IGNvbnRleHQgdGhlIG51bWJlciBvZiBlbnRpdGllcyByZXBsYWNlbWVudAotICAgICAqIGRvbmUgd2hlbiBwYXJzaW5nIHRoYXQgcmVmZXJlbmNlLgotICAgICAqLwotICAgIGlmIChvbGRjdHh0ICE9IE5VTEwpCi0gICAgICAgIG9sZGN0eHQtPm5iZW50aXRpZXMgKz0gY3R4dC0+bmJlbnRpdGllczsKLQotICAgIC8qCiAgICAgICogQWxzbyByZWNvcmQgdGhlIHNpemUgb2YgdGhlIGVudGl0eSBwYXJzZWQKICAgICAgKi8KICAgICBpZiAoY3R4dC0+aW5wdXQgIT0gTlVMTCAmJiBvbGRjdHh0ICE9IE5VTEwpIHsKLQlvbGRjdHh0LT5zaXplZW50aXRpZXMgKz0gY3R4dC0+aW5wdXQtPmNvbnN1bWVkOwotCW9sZGN0eHQtPnNpemVlbnRpdGllcyArPSAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKLSAgICB9Ci0gICAgLyoKLSAgICAgKiBBbmQgcmVjb3JkIHRoZSBsYXN0IGVycm9yIGlmIGFueQotICAgICAqLwotICAgIGlmICgob2xkY3R4dCAhPSBOVUxMKSAmJiAoY3R4dC0+bGFzdEVycm9yLmNvZGUgIT0gWE1MX0VSUl9PSykpCi0gICAgICAgIHhtbENvcHlFcnJvcigmY3R4dC0+bGFzdEVycm9yLCAmb2xkY3R4dC0+bGFzdEVycm9yKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjb25zdW1lZCA9IGN0eHQtPmlucHV0LT5jb25zdW1lZDsKIAotICAgIGlmIChzYXggIT0gTlVMTCkKLQljdHh0LT5zYXggPSBvbGRzYXg7CisgICAgICAgIHhtbFNhdHVyYXRlZEFkZFNpemVUKCZjb25zdW1lZCwgY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKKworICAgICAgICB4bWxTYXR1cmF0ZWRBZGQoJm9sZGN0eHQtPnNpemVlbnRpdGllcywgY29uc3VtZWQpOworICAgICAgICB4bWxTYXR1cmF0ZWRBZGQoJm9sZGN0eHQtPnNpemVlbnRpdGllcywgY3R4dC0+c2l6ZWVudGl0aWVzKTsKKworICAgICAgICB4bWxTYXR1cmF0ZWRBZGQoJm9sZGN0eHQtPnNpemVlbnRjb3B5LCBjb25zdW1lZCk7CisgICAgICAgIHhtbFNhdHVyYXRlZEFkZCgmb2xkY3R4dC0+c2l6ZWVudGNvcHksIGN0eHQtPnNpemVlbnRjb3B5KTsKKyAgICB9CisKICAgICBpZiAob2xkY3R4dCAhPSBOVUxMKSB7CiAgICAgICAgIGN0eHQtPmRpY3QgPSBOVUxMOwogICAgICAgICBjdHh0LT5hdHRzRGVmYXVsdCA9IE5VTEw7CiAgICAgICAgIGN0eHQtPmF0dHNTcGVjaWFsID0gTlVMTDsKKyAgICAgICAgb2xkY3R4dC0+bmJFcnJvcnMgPSBjdHh0LT5uYkVycm9yczsKKyAgICAgICAgb2xkY3R4dC0+bmJXYXJuaW5ncyA9IGN0eHQtPm5iV2FybmluZ3M7CiAgICAgICAgIG9sZGN0eHQtPnZhbGlkYXRlID0gY3R4dC0+dmFsaWRhdGU7CiAgICAgICAgIG9sZGN0eHQtPnZhbGlkID0gY3R4dC0+dmFsaWQ7CiAgICAgICAgIG9sZGN0eHQtPm5vZGVfc2VxLm1heGltdW0gPSBjdHh0LT5ub2RlX3NlcS5tYXhpbXVtOwpAQCAtMTMzMDgsMTQgKzEyOTUwLDE0IEBACiAgICAgeG1sU0FYSGFuZGxlclB0ciBvbGRzYXggPSBOVUxMOwogICAgIHhtbE5vZGVQdHIgY29udGVudCA9IE5VTEw7CiAgICAgeG1sTm9kZVB0ciBsYXN0ID0gTlVMTDsKLSAgICBpbnQgc2l6ZTsKICAgICB4bWxQYXJzZXJFcnJvcnMgcmV0ID0gWE1MX0VSUl9PSzsKLSNpZmRlZiBTQVgyCi0gICAgaW50IGk7Ci0jZW5kaWYKKyAgICB4bWxIYXNoZWRTdHJpbmcgaHByZWZpeCwgaHVyaTsKKyAgICB1bnNpZ25lZCBpOwogCiAgICAgaWYgKCgob2xkY3R4dC0+ZGVwdGggPiA0MCkgJiYgKChvbGRjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0hVR0UpID09IDApKSB8fAotICAgICAgICAob2xkY3R4dC0+ZGVwdGggPiAgMTAyNCkpIHsKKyAgICAgICAgKG9sZGN0eHQtPmRlcHRoID4gIDEwMCkpIHsKKwl4bWxGYXRhbEVyck1zZyhvbGRjdHh0LCBYTUxfRVJSX0VOVElUWV9MT09QLAorICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW11bSBlbnRpdHkgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOwogCXJldHVybihYTUxfRVJSX0VOVElUWV9MT09QKTsKICAgICB9CiAKQEAgLTEzMzI1LDI3ICsxMjk2Nyw1OSBAQAogICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKFhNTF9FUlJfSU5URVJOQUxfRVJST1IpOwogCi0gICAgc2l6ZSA9IHhtbFN0cmxlbihzdHJpbmcpOwotCi0gICAgY3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoKGNoYXIgKikgc3RyaW5nLCBzaXplKTsKKyAgICBjdHh0ID0geG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dChzdHJpbmcpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHJldHVybihYTUxfV0FSX1VOREVDTEFSRURfRU5USVRZKTsKKyAgICBjdHh0LT5uYkVycm9ycyA9IG9sZGN0eHQtPm5iRXJyb3JzOworICAgIGN0eHQtPm5iV2FybmluZ3MgPSBvbGRjdHh0LT5uYldhcm5pbmdzOwogICAgIGlmICh1c2VyX2RhdGEgIT0gTlVMTCkKIAljdHh0LT51c2VyRGF0YSA9IHVzZXJfZGF0YTsKICAgICBlbHNlCiAJY3R4dC0+dXNlckRhdGEgPSBjdHh0OwogICAgIGlmIChjdHh0LT5kaWN0ICE9IE5VTEwpIHhtbERpY3RGcmVlKGN0eHQtPmRpY3QpOwogICAgIGN0eHQtPmRpY3QgPSBvbGRjdHh0LT5kaWN0OwotICAgIGN0eHQtPmlucHV0X2lkID0gb2xkY3R4dC0+aW5wdXRfaWQgKyAxOworICAgIGN0eHQtPmlucHV0X2lkID0gb2xkY3R4dC0+aW5wdXRfaWQ7CiAgICAgY3R4dC0+c3RyX3htbCA9IHhtbERpY3RMb29rdXAoY3R4dC0+ZGljdCwgQkFEX0NBU1QgInhtbCIsIDMpOwogICAgIGN0eHQtPnN0cl94bWxucyA9IHhtbERpY3RMb29rdXAoY3R4dC0+ZGljdCwgQkFEX0NBU1QgInhtbG5zIiwgNSk7CiAgICAgY3R4dC0+c3RyX3htbF9ucyA9IHhtbERpY3RMb29rdXAoY3R4dC0+ZGljdCwgWE1MX1hNTF9OQU1FU1BBQ0UsIDM2KTsKIAotI2lmZGVmIFNBWDIKLSAgICAvKiBwcm9wYWdhdGUgbmFtZXNwYWNlcyBkb3duIHRoZSBlbnRpdHkgKi8KLSAgICBmb3IgKGkgPSAwO2kgPCBvbGRjdHh0LT5uc05yO2kgKz0gMikgewotICAgICAgICBuc1B1c2goY3R4dCwgb2xkY3R4dC0+bnNUYWJbaV0sIG9sZGN0eHQtPm5zVGFiW2krMV0pOworICAgIC8qCisgICAgICogUHJvcGFnYXRlIG5hbWVzcGFjZXMgZG93biB0aGUgZW50aXR5CisgICAgICoKKyAgICAgKiBNYWtpbmcgZW50aXRpZXMgYW5kIG5hbWVzcGFjZXMgd29yayBjb3JyZWN0bHkgcmVxdWlyZXMgYWRkaXRpb25hbAorICAgICAqIGNoYW5nZXMsIHNlZSB4bWxQYXJzZVJlZmVyZW5jZS4KKyAgICAgKi8KKworICAgIC8qIERlZmF1bHQgbmFtZXNwYWNlICovCisgICAgaHByZWZpeC5uYW1lID0gTlVMTDsKKyAgICBocHJlZml4Lmhhc2hWYWx1ZSA9IDA7CisgICAgaHVyaS5uYW1lID0geG1sUGFyc2VyTnNMb29rdXBVcmkob2xkY3R4dCwgJmhwcmVmaXgpOworICAgIGh1cmkuaGFzaFZhbHVlID0gMDsKKyAgICBpZiAoaHVyaS5uYW1lICE9IE5VTEwpCisgICAgICAgIHhtbFBhcnNlck5zUHVzaChjdHh0LCBOVUxMLCAmaHVyaSwgTlVMTCwgMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgb2xkY3R4dC0+bnNkYi0+aGFzaFNpemU7IGkrKykgeworICAgICAgICB4bWxQYXJzZXJOc0J1Y2tldCAqYnVja2V0ID0gJm9sZGN0eHQtPm5zZGItPmhhc2hbaV07CisgICAgICAgIGNvbnN0IHhtbENoYXIgKipuczsKKyAgICAgICAgeG1sUGFyc2VyTnNFeHRyYSAqZXh0cmE7CisgICAgICAgIHVuc2lnbmVkIG5zSW5kZXg7CisKKyAgICAgICAgaWYgKChidWNrZXQtPmhhc2hWYWx1ZSAhPSAwKSAmJgorICAgICAgICAgICAgKGJ1Y2tldC0+aW5kZXggIT0gSU5UX01BWCkpIHsKKyAgICAgICAgICAgIG5zSW5kZXggPSBidWNrZXQtPmluZGV4OworICAgICAgICAgICAgbnMgPSAmb2xkY3R4dC0+bnNUYWJbbnNJbmRleCAqIDJdOworICAgICAgICAgICAgZXh0cmEgPSAmb2xkY3R4dC0+bnNkYi0+ZXh0cmFbbnNJbmRleF07CisKKyAgICAgICAgICAgIGhwcmVmaXgubmFtZSA9IG5zWzBdOworICAgICAgICAgICAgaHByZWZpeC5oYXNoVmFsdWUgPSBidWNrZXQtPmhhc2hWYWx1ZTsKKyAgICAgICAgICAgIGh1cmkubmFtZSA9IG5zWzFdOworICAgICAgICAgICAgaHVyaS5oYXNoVmFsdWUgPSBleHRyYS0+dXJpSGFzaFZhbHVlOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIERvbid0IGNvcHkgU0FYIGRhdGEgdG8gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSB3aXRoIFhNTCByZWFkZXIuCisgICAgICAgICAgICAgKiBUaGlzIG1hdGNoZXMgdGhlIHByZS0yLjEyIGJlaGF2aW9yLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB4bWxQYXJzZXJOc1B1c2goY3R4dCwgJmhwcmVmaXgsICZodXJpLCBOVUxMLCAwKTsKKyAgICAgICAgfQogICAgIH0KLSNlbmRpZgogCiAgICAgb2xkc2F4ID0gY3R4dC0+c2F4OwogICAgIGN0eHQtPnNheCA9IG9sZGN0eHQtPnNheDsKQEAgLTEzMzU3LDEwICsxMzAzMSw4IEBACiAgICAgaWYgKG9sZGN0eHQtPm15RG9jID09IE5VTEwpIHsKIAluZXdEb2MgPSB4bWxOZXdEb2MoQkFEX0NBU1QgIjEuMCIpOwogCWlmIChuZXdEb2MgPT0gTlVMTCkgewotCSAgICBjdHh0LT5zYXggPSBvbGRzYXg7Ci0JICAgIGN0eHQtPmRpY3QgPSBOVUxMOwotCSAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKLQkgICAgcmV0dXJuKFhNTF9FUlJfSU5URVJOQUxfRVJST1IpOworICAgICAgICAgICAgcmV0ID0gWE1MX0VSUl9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAJfQogCW5ld0RvYy0+cHJvcGVydGllcyA9IFhNTF9ET0NfSU5URVJOQUw7CiAJbmV3RG9jLT5kaWN0ID0gY3R4dC0+ZGljdDsKQEAgLTEzMzczLDIwICsxMzA0NSwxNSBAQAogICAgIH0KICAgICBuZXdSb290ID0geG1sTmV3RG9jTm9kZShjdHh0LT5teURvYywgTlVMTCwgQkFEX0NBU1QgInBzZXVkb3Jvb3QiLCBOVUxMKTsKICAgICBpZiAobmV3Um9vdCA9PSBOVUxMKSB7Ci0JY3R4dC0+c2F4ID0gb2xkc2F4OwotCWN0eHQtPmRpY3QgPSBOVUxMOwotCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwotCWlmIChuZXdEb2MgIT0gTlVMTCkgewotCSAgICB4bWxGcmVlRG9jKG5ld0RvYyk7Ci0JfQotCXJldHVybihYTUxfRVJSX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgcmV0ID0gWE1MX0VSUl9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgY3R4dC0+bXlEb2MtPmNoaWxkcmVuID0gTlVMTDsKICAgICBjdHh0LT5teURvYy0+bGFzdCA9IE5VTEw7CiAgICAgeG1sQWRkQ2hpbGQoKHhtbE5vZGVQdHIpIGN0eHQtPm15RG9jLCBuZXdSb290KTsKICAgICBub2RlUHVzaChjdHh0LCBjdHh0LT5teURvYy0+Y2hpbGRyZW4pOwogICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7Ci0gICAgY3R4dC0+ZGVwdGggPSBvbGRjdHh0LT5kZXB0aCArIDE7CisgICAgY3R4dC0+ZGVwdGggPSBvbGRjdHh0LT5kZXB0aDsKIAogICAgIGN0eHQtPnZhbGlkYXRlID0gMDsKICAgICBjdHh0LT5sb2Fkc3Vic2V0ID0gb2xkY3R4dC0+bG9hZHN1YnNldDsKQEAgLTEzNDExLDEyICsxMzA3OCwxMiBAQAogICAgIH0KIAogICAgIGlmICghY3R4dC0+d2VsbEZvcm1lZCkgewotICAgICAgICBpZiAoY3R4dC0+ZXJyTm8gPT0gMCkKLQkgICAgcmV0ID0gWE1MX0VSUl9JTlRFUk5BTF9FUlJPUjsKLQllbHNlCi0JICAgIHJldCA9ICh4bWxQYXJzZXJFcnJvcnMpY3R4dC0+ZXJyTm87CisJcmV0ID0gKHhtbFBhcnNlckVycm9ycyljdHh0LT5lcnJObzsKKyAgICAgICAgb2xkY3R4dC0+ZXJyTm8gPSBjdHh0LT5lcnJObzsKKyAgICAgICAgb2xkY3R4dC0+d2VsbEZvcm1lZCA9IDA7CisgICAgICAgIHhtbENvcHlFcnJvcigmY3R4dC0+bGFzdEVycm9yLCAmb2xkY3R4dC0+bGFzdEVycm9yKTsKICAgICB9IGVsc2UgewotICAgICAgcmV0ID0gWE1MX0VSUl9PSzsKKyAgICAgICAgcmV0ID0gWE1MX0VSUl9PSzsKICAgICB9CiAKICAgICBpZiAoKGxzdCAhPSBOVUxMKSAmJiAocmV0ID09IFhNTF9FUlJfT0spKSB7CkBAIC0xMzQ0OSwxOCArMTMxMTYsMjEgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqIFJlY29yZCBpbiB0aGUgcGFyZW50IGNvbnRleHQgdGhlIG51bWJlciBvZiBlbnRpdGllcyByZXBsYWNlbWVudAotICAgICAqIGRvbmUgd2hlbiBwYXJzaW5nIHRoYXQgcmVmZXJlbmNlLgorICAgICAqIEFsc28gcmVjb3JkIHRoZSBzaXplIG9mIHRoZSBlbnRpdHkgcGFyc2VkCiAgICAgICovCi0gICAgaWYgKG9sZGN0eHQgIT0gTlVMTCkKLSAgICAgICAgb2xkY3R4dC0+bmJlbnRpdGllcyArPSBjdHh0LT5uYmVudGl0aWVzOworICAgIGlmIChjdHh0LT5pbnB1dCAhPSBOVUxMICYmIG9sZGN0eHQgIT0gTlVMTCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbnN1bWVkID0gY3R4dC0+aW5wdXQtPmNvbnN1bWVkOwogCi0gICAgLyoKLSAgICAgKiBBbHNvIHJlY29yZCB0aGUgbGFzdCBlcnJvciBpZiBhbnkKLSAgICAgKi8KLSAgICBpZiAoY3R4dC0+bGFzdEVycm9yLmNvZGUgIT0gWE1MX0VSUl9PSykKLSAgICAgICAgeG1sQ29weUVycm9yKCZjdHh0LT5sYXN0RXJyb3IsICZvbGRjdHh0LT5sYXN0RXJyb3IpOworICAgICAgICB4bWxTYXR1cmF0ZWRBZGRTaXplVCgmY29uc3VtZWQsIGN0eHQtPmlucHV0LT5jdXIgLSBjdHh0LT5pbnB1dC0+YmFzZSk7CiAKKyAgICAgICAgeG1sU2F0dXJhdGVkQWRkKCZvbGRjdHh0LT5zaXplZW50Y29weSwgY29uc3VtZWQpOworICAgICAgICB4bWxTYXR1cmF0ZWRBZGQoJm9sZGN0eHQtPnNpemVlbnRjb3B5LCBjdHh0LT5zaXplZW50Y29weSk7CisgICAgfQorCisgICAgb2xkY3R4dC0+bmJFcnJvcnMgPSBjdHh0LT5uYkVycm9yczsKKyAgICBvbGRjdHh0LT5uYldhcm5pbmdzID0gY3R4dC0+bmJXYXJuaW5nczsKKworZXJyb3I6CiAgICAgY3R4dC0+c2F4ID0gb2xkc2F4OwogICAgIGN0eHQtPmRpY3QgPSBOVUxMOwogICAgIGN0eHQtPmF0dHNEZWZhdWx0ID0gTlVMTDsKQEAgLTEzNDk1LDcgKzEzMTY1LDYgQEAKIHhtbFBhcnNlckVycm9ycwogeG1sUGFyc2VJbk5vZGVDb250ZXh0KHhtbE5vZGVQdHIgbm9kZSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGRhdGFsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMsIHhtbE5vZGVQdHIgKmxzdCkgewotI2lmZGVmIFNBWDIKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAgICAgeG1sRG9jUHRyIGRvYyA9IE5VTEw7CiAgICAgeG1sTm9kZVB0ciBmYWtlLCBjdXI7CkBAIC0xMzU3MywxMCArMTMyNDIsNiBAQAogICAgIGlmIChkb2MtPmVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoZGxyOwogCi0gICAgICAgIGlmIChjdHh0LT5lbmNvZGluZyAhPSBOVUxMKQotCSAgICB4bWxGcmVlKCh4bWxDaGFyICopIGN0eHQtPmVuY29kaW5nKTsKLSAgICAgICAgY3R4dC0+ZW5jb2RpbmcgPSB4bWxTdHJkdXAoKGNvbnN0IHhtbENoYXIgKikgZG9jLT5lbmNvZGluZyk7Ci0KICAgICAgICAgaGRsciA9IHhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyKChjb25zdCBjaGFyICopIGRvYy0+ZW5jb2RpbmcpOwogICAgICAgICBpZiAoaGRsciAhPSBOVUxMKSB7CiAgICAgICAgICAgICB4bWxTd2l0Y2hUb0VuY29kaW5nKGN0eHQsIGhkbHIpOwpAQCAtMTM1ODUsNyArMTMyNTAsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgeG1sQ3R4dFVzZU9wdGlvbnNJbnRlcm5hbChjdHh0LCBvcHRpb25zLCBOVUxMKTsKKyAgICB4bWxDdHh0VXNlT3B0aW9uc0ludGVybmFsKGN0eHQsIG9wdGlvbnMpOwogICAgIHhtbERldGVjdFNBWDIoY3R4dCk7CiAgICAgY3R4dC0+bXlEb2MgPSBkb2M7CiAgICAgLyogcGFyc2luZyBpbiBjb250ZXh0LCBpLmUuIGFzIHdpdGhpbiBleGlzdGluZyBjb250ZW50ICovCkBAIC0xMzU5OSwyOSArMTMyNjQsMjMgQEAKICAgICB9CiAgICAgeG1sQWRkQ2hpbGQobm9kZSwgZmFrZSk7CiAKLSAgICBpZiAobm9kZS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7CisgICAgaWYgKG5vZGUtPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkKIAlub2RlUHVzaChjdHh0LCBub2RlKTsKKworICAgIGlmICgoY3R4dC0+aHRtbCA9PSAwKSAmJiAobm9kZS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSkgewogCS8qCiAJICogaW5pdGlhbGl6ZSB0aGUgU0FYMiBuYW1lc3BhY2VzIHN0YWNrCiAJICovCiAJY3VyID0gbm9kZTsKIAl3aGlsZSAoKGN1ciAhPSBOVUxMKSAmJiAoY3VyLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpKSB7CiAJICAgIHhtbE5zUHRyIG5zID0gY3VyLT5uc0RlZjsKLQkgICAgY29uc3QgeG1sQ2hhciAqaXByZWZpeCwgKmlocmVmOworICAgICAgICAgICAgeG1sSGFzaGVkU3RyaW5nIGhwcmVmaXgsIGh1cmk7CiAKIAkgICAgd2hpbGUgKG5zICE9IE5VTEwpIHsKLQkJaWYgKGN0eHQtPmRpY3QpIHsKLQkJICAgIGlwcmVmaXggPSB4bWxEaWN0TG9va3VwKGN0eHQtPmRpY3QsIG5zLT5wcmVmaXgsIC0xKTsKLQkJICAgIGlocmVmID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCBucy0+aHJlZiwgLTEpOwotCQl9IGVsc2UgewotCQkgICAgaXByZWZpeCA9IG5zLT5wcmVmaXg7Ci0JCSAgICBpaHJlZiA9IG5zLT5ocmVmOwotCQl9Ci0KLQkgICAgICAgIGlmICh4bWxHZXROYW1lc3BhY2UoY3R4dCwgaXByZWZpeCkgPT0gTlVMTCkgewotCQkgICAgbnNQdXNoKGN0eHQsIGlwcmVmaXgsIGlocmVmKTsKLQkJICAgIG5zbnIrKzsKLQkJfQorICAgICAgICAgICAgICAgIGhwcmVmaXggPSB4bWxEaWN0TG9va3VwSGFzaGVkKGN0eHQtPmRpY3QsIG5zLT5wcmVmaXgsIC0xKTsKKyAgICAgICAgICAgICAgICBodXJpID0geG1sRGljdExvb2t1cEhhc2hlZChjdHh0LT5kaWN0LCBucy0+aHJlZiwgLTEpOworICAgICAgICAgICAgICAgIGlmICh4bWxQYXJzZXJOc1B1c2goY3R4dCwgJmhwcmVmaXgsICZodXJpLCBucywgMSkgPiAwKQorICAgICAgICAgICAgICAgICAgICBuc25yKys7CiAJCW5zID0gbnMtPm5leHQ7CiAJICAgIH0KIAkgICAgY3VyID0gY3VyLT5wYXJlbnQ7CkBAIC0xMzY0Miw3ICsxMzMwMSw3IEBACiAjZW5kaWYKIAl4bWxQYXJzZUNvbnRlbnQoY3R4dCk7CiAKLSAgICBuc1BvcChjdHh0LCBuc25yKTsKKyAgICB4bWxQYXJzZXJOc1BvcChjdHh0LCBuc25yKTsKICAgICBpZiAoKFJBVyA9PSAnPCcpICYmIChOWFQoMSkgPT0gJy8nKSkgewogCXhtbEZhdGFsRXJyKGN0eHQsIFhNTF9FUlJfTk9UX1dFTExfQkFMQU5DRUQsIE5VTEwpOwogICAgIH0gZWxzZSBpZiAoUkFXICE9IDApIHsKQEAgLTEzNjk2LDkgKzEzMzU1LDYgQEAKICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKIAogICAgIHJldHVybihyZXQpOwotI2Vsc2UgLyogIVNBWDIgKi8KLSAgICByZXR1cm4oWE1MX0VSUl9JTlRFUk5BTF9FUlJPUik7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKQEAgLTEzNzM1LDcgKzEzMzkxLDYgQEAKICAgICB4bWxEb2NQdHIgbmV3RG9jOwogICAgIHhtbFNBWEhhbmRsZXJQdHIgb2xkc2F4ID0gTlVMTDsKICAgICB4bWxOb2RlUHRyIGNvbnRlbnQsIG5ld1Jvb3Q7Ci0gICAgaW50IHNpemU7CiAgICAgaW50IHJldCA9IDA7CiAKICAgICBpZiAoZGVwdGggPiA0MCkgewpAQCAtMTM3NDgsOSArMTM0MDMsNyBAQAogICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKC0xKTsKIAotICAgIHNpemUgPSB4bWxTdHJsZW4oc3RyaW5nKTsKLQotICAgIGN0eHQgPSB4bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KChjaGFyICopIHN0cmluZywgc2l6ZSk7CisgICAgY3R4dCA9IHhtbENyZWF0ZURvY1BhcnNlckN0eHQoc3RyaW5nKTsKICAgICBpZiAoY3R4dCA9PSBOVUxMKSByZXR1cm4oLTEpOwogICAgIGN0eHQtPnVzZXJEYXRhID0gY3R4dDsKICAgICBpZiAoc2F4ICE9IE5VTEwpIHsKQEAgLTEzNzczLDggKzEzNDI2LDEwIEBACiAJY3R4dC0+c3RyX3htbG5zID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCBCQURfQ0FTVCAieG1sbnMiLCA1KTsKIAljdHh0LT5zdHJfeG1sX25zID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCBYTUxfWE1MX05BTUVTUEFDRSwgMzYpOwogCWN0eHQtPmRpY3ROYW1lcyA9IDE7CisgICAgICAgIG5ld0RvYy0+ZGljdCA9IGN0eHQtPmRpY3Q7CisgICAgICAgIHhtbERpY3RSZWZlcmVuY2UobmV3RG9jLT5kaWN0KTsKICAgICB9IGVsc2UgewotCXhtbEN0eHRVc2VPcHRpb25zSW50ZXJuYWwoY3R4dCwgWE1MX1BBUlNFX05PRElDVCwgTlVMTCk7CisJeG1sQ3R4dFVzZU9wdGlvbnNJbnRlcm5hbChjdHh0LCBYTUxfUEFSU0VfTk9ESUNUKTsKICAgICB9CiAgICAgLyogZG9jID09IE5VTEwgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGhpc3RvcmljIHJlYXNvbnMgKi8KICAgICBpZiAoZG9jICE9IE5VTEwpIHsKQEAgLTEzNzk4LDcgKzEzNDUzLDYgQEAKIAljdHh0LT5teURvYyA9IG5ld0RvYzsKICAgICB9IGVsc2UgewogCWN0eHQtPm15RG9jID0gbmV3RG9jOwotCW5ld0RvYy0+Y2hpbGRyZW4tPmRvYyA9IGRvYzsKIAkvKiBFbnN1cmUgdGhhdCBkb2MgaGFzIFhNTCBzcGVjIG5hbWVzcGFjZSAqLwogCXhtbFNlYXJjaE5zQnlIcmVmKGRvYywgKHhtbE5vZGVQdHIpZG9jLCBYTUxfWE1MX05BTUVTUEFDRSk7CiAJbmV3RG9jLT5vbGROcyA9IGRvYy0+b2xkTnM7CkBAIC0xMzg3NSw2ICsxMzUyOSw4IEBACiAgKiBAc2F4OiAgdGhlIFNBWCBoYW5kbGVyIGJsb2NrCiAgKiBAZmlsZW5hbWU6ICB0aGUgZmlsZW5hbWUKICAqCisgKiBERVBSRUNBVEVEOiBEb24ndCB1c2UuCisgKgogICogcGFyc2UgYW4gWE1MIGV4dGVybmFsIGVudGl0eSBvdXQgb2YgY29udGV4dCBhbmQgYnVpbGQgYSB0cmVlLgogICogSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLgogICogSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLgpAQCAtMTM5NTEsMTQgKzEzNjA3LDE1IEBACiAgKiBSZXR1cm5zIHRoZSBuZXcgcGFyc2VyIGNvbnRleHQgb3IgTlVMTAogICovCiBzdGF0aWMgeG1sUGFyc2VyQ3R4dFB0cgoteG1sQ3JlYXRlRW50aXR5UGFyc2VyQ3R4dEludGVybmFsKGNvbnN0IHhtbENoYXIgKlVSTCwgY29uc3QgeG1sQ2hhciAqSUQsCi0JICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqYmFzZSwgeG1sUGFyc2VyQ3R4dFB0ciBwY3R4KSB7Cit4bWxDcmVhdGVFbnRpdHlQYXJzZXJDdHh0SW50ZXJuYWwoeG1sU0FYSGFuZGxlclB0ciBzYXgsIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICBjb25zdCB4bWxDaGFyICpVUkwsIGNvbnN0IHhtbENoYXIgKklELCBjb25zdCB4bWxDaGFyICpiYXNlLAorICAgICAgICB4bWxQYXJzZXJDdHh0UHRyIHBjdHgpIHsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXRTdHJlYW07CiAgICAgY2hhciAqZGlyZWN0b3J5ID0gTlVMTDsKICAgICB4bWxDaGFyICp1cmk7CiAKLSAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgIGN0eHQgPSB4bWxOZXdTQVhQYXJzZXJDdHh0KHNheCwgdXNlckRhdGEpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQpAQCAtMTM5NjYsMTEgKzEzNjIzLDcgQEAKICAgICBpZiAocGN0eCAhPSBOVUxMKSB7CiAgICAgICAgIGN0eHQtPm9wdGlvbnMgPSBwY3R4LT5vcHRpb25zOwogICAgICAgICBjdHh0LT5fcHJpdmF0ZSA9IHBjdHgtPl9wcml2YXRlOwotCS8qCi0JICogdGhpcyBpcyBhIHN1YnBhcnNlciBvZiBwY3R4LCBzbyB0aGUgaW5wdXRfaWQgc2hvdWxkIGJlCi0JICogaW5jcmVtZW50ZWQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBtYWluIGVudGl0eQotCSAqLwotCWN0eHQtPmlucHV0X2lkID0gcGN0eC0+aW5wdXRfaWQgKyAxOworCWN0eHQtPmlucHV0X2lkID0gcGN0eC0+aW5wdXRfaWQ7CiAgICAgfQogCiAgICAgLyogRG9uJ3QgcmVhZCBmcm9tIHN0ZGluLiAqLwpAQCAtMTQwMjYsNyArMTM2NzksNyBAQAogeG1sUGFyc2VyQ3R4dFB0cgogeG1sQ3JlYXRlRW50aXR5UGFyc2VyQ3R4dChjb25zdCB4bWxDaGFyICpVUkwsIGNvbnN0IHhtbENoYXIgKklELAogCSAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmJhc2UpIHsKLSAgICByZXR1cm4geG1sQ3JlYXRlRW50aXR5UGFyc2VyQ3R4dEludGVybmFsKFVSTCwgSUQsIGJhc2UsIE5VTEwpOworICAgIHJldHVybiB4bWxDcmVhdGVFbnRpdHlQYXJzZXJDdHh0SW50ZXJuYWwoTlVMTCwgTlVMTCwgVVJMLCBJRCwgYmFzZSwgTlVMTCk7CiAKIH0KIApAQCAtMTQwNjEsNyArMTM3MTQsNyBAQAogICAgIH0KIAogICAgIGlmIChvcHRpb25zKQotCXhtbEN0eHRVc2VPcHRpb25zSW50ZXJuYWwoY3R4dCwgb3B0aW9ucywgTlVMTCk7CisJeG1sQ3R4dFVzZU9wdGlvbnNJbnRlcm5hbChjdHh0LCBvcHRpb25zKTsKICAgICBjdHh0LT5saW5lbnVtYmVycyA9IDE7CiAKICAgICBpbnB1dFN0cmVhbSA9IHhtbExvYWRFeHRlcm5hbEVudGl0eShmaWxlbmFtZSwgTlVMTCwgY3R4dCk7CkBAIC0xNDEwNCw2ICsxMzc1Nyw4IEBACiAgKiAgICAgICAgICAgICBkb2N1bWVudHMKICAqIEBkYXRhOiAgdGhlIHVzZXJkYXRhCiAgKgorICogREVQUkVDQVRFRDogVXNlIHhtbE5ld1NBWFBhcnNlckN0eHQgYW5kIHhtbEN0eHRSZWFkRmlsZS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcwogICogY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4KICAqIEl0IHVzZSB0aGUgZ2l2ZW4gU0FYIGZ1bmN0aW9uIGJsb2NrIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4KQEAgLTE0MTcyLDYgKzEzODI3LDggQEAKICAqIEByZWNvdmVyeTogIHdvcmsgaW4gcmVjb3ZlcnkgbW9kZSwgaS5lLiB0cmllcyB0byByZWFkIG5vIFdlbGwgRm9ybWVkCiAgKiAgICAgICAgICAgICBkb2N1bWVudHMKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sTmV3U0FYUGFyc2VyQ3R4dCBhbmQgeG1sQ3R4dFJlYWRGaWxlLgorICoKICAqIHBhcnNlIGFuIFhNTCBmaWxlIGFuZCBidWlsZCBhIHRyZWUuIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzCiAgKiBjb21wcmVzc2VkIGRvY3VtZW50IGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgaWYgZm91bmQgYXQgY29tcGlsZS10aW1lLgogICogSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLgpAQCAtMTQxOTAsNiArMTM4NDcsOCBAQAogICogeG1sUmVjb3ZlckRvYzoKICAqIEBjdXI6ICBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgeG1sQ2hhcgogICoKKyAqIERFUFJFQ0FURUQ6IFVzZSB4bWxSZWFkRG9jIHdpdGggWE1MX1BBUlNFX1JFQ09WRVIuCisgKgogICogcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLgogICogSW4gdGhlIGNhc2UgdGhlIGRvY3VtZW50IGlzIG5vdCBXZWxsIEZvcm1lZCwgYSBhdHRlbXB0IHRvIGJ1aWxkIGEKICAqIHRyZWUgaXMgdHJpZWQgYW55d2F5CkBAIC0xNDIwNiw2ICsxMzg2NSw4IEBACiAgKiB4bWxQYXJzZUZpbGU6CiAgKiBAZmlsZW5hbWU6ICB0aGUgZmlsZW5hbWUKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sUmVhZEZpbGUuCisgKgogICogcGFyc2UgYW4gWE1MIGZpbGUgYW5kIGJ1aWxkIGEgdHJlZS4gQXV0b21hdGljIHN1cHBvcnQgZm9yIFpMSUIvQ29tcHJlc3MKICAqIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQgYnkgZGVmYXVsdCBpZiBmb3VuZCBhdCBjb21waWxlLXRpbWUuCiAgKgpAQCAtMTQyMjIsNiArMTM4ODMsOCBAQAogICogeG1sUmVjb3ZlckZpbGU6CiAgKiBAZmlsZW5hbWU6ICB0aGUgZmlsZW5hbWUKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sUmVhZEZpbGUgd2l0aCBYTUxfUEFSU0VfUkVDT1ZFUi4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgZmlsZSBhbmQgYnVpbGQgYSB0cmVlLiBBdXRvbWF0aWMgc3VwcG9ydCBmb3IgWkxJQi9Db21wcmVzcwogICogY29tcHJlc3NlZCBkb2N1bWVudCBpcyBwcm92aWRlZCBieSBkZWZhdWx0IGlmIGZvdW5kIGF0IGNvbXBpbGUtdGltZS4KICAqIEluIHRoZSBjYXNlIHRoZSBkb2N1bWVudCBpcyBub3QgV2VsbCBGb3JtZWQsIGl0IGF0dGVtcHRzIHRvIGJ1aWxkCkBAIC0xNDI0Miw2ICsxMzkwNSw4IEBACiAgKiBAYnVmZmVyOiAgYSB4bWxDaGFyICogYnVmZmVyCiAgKiBAZmlsZW5hbWU6ICBhIGZpbGUgbmFtZQogICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZS4KKyAqCiAgKiBTZXR1cCB0aGUgcGFyc2VyIGNvbnRleHQgdG8gcGFyc2UgYSBuZXcgYnVmZmVyOyBDbGVhcnMgYW55IHByaW9yCiAgKiBjb250ZW50cyBmcm9tIHRoZSBwYXJzZXIgY29udGV4dC4gVGhlIGJ1ZmZlciBwYXJhbWV0ZXIgbXVzdCBub3QgYmUKICAqIE5VTEwsIGJ1dCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyIGNhbiBiZQpAQCAtMTQyNzcsNiArMTM5NDIsOCBAQAogICogQHVzZXJfZGF0YTogIFRoZSB1c2VyIGRhdGEgcmV0dXJuZWQgb24gU0FYIGNhbGxiYWNrcwogICogQGZpbGVuYW1lOiAgYSBmaWxlIG5hbWUKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sTmV3U0FYUGFyc2VyQ3R4dCBhbmQgeG1sQ3R4dFJlYWRGaWxlLgorICoKICAqIHBhcnNlIGFuIFhNTCBmaWxlIGFuZCBjYWxsIHRoZSBnaXZlbiBTQVggaGFuZGxlciByb3V0aW5lcy4KICAqIEF1dG9tYXRpYyBzdXBwb3J0IGZvciBaTElCL0NvbXByZXNzIGNvbXByZXNzZWQgZG9jdW1lbnQgaXMgcHJvdmlkZWQKICAqCkBAIC0xNDM1MCw3ICsxNDAxNyw2IEBACiAgICAgaWYgKGN0eHQgPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7CiAKLSAgICAvKiBUT0RPOiB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYywgcmVxdWlyZXMgc29tZSBzZXJpb3VzIGNoYW5nZXMgKi8KICAgICBidWYgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbShidWZmZXIsIHNpemUsIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwpAQCAtMTQzODIsNiArMTQwNDgsOCBAQAogICogICAgICAgICAgICAgZG9jdW1lbnRzCiAgKiBAZGF0YTogIHRoZSB1c2VyZGF0YQogICoKKyAqIERFUFJFQ0FURUQ6IFVzZSB4bWxOZXdTQVhQYXJzZXJDdHh0IGFuZCB4bWxDdHh0UmVhZE1lbW9yeS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCB1c2UgdGhlIGdpdmVuIFNBWCBmdW5jdGlvbiBibG9jawogICogdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLiBJZiBzYXggaXMgTlVMTCwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAqIERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLgpAQCAtMTQ0MzcsNiArMTQxMDUsOCBAQAogICogQHJlY292ZXJ5OiAgd29yayBpbiByZWNvdmVyeSBtb2RlLCBpLmUuIHRyaWVzIHRvIHJlYWQgbm90IFdlbGwgRm9ybWVkCiAgKiAgICAgICAgICAgICBkb2N1bWVudHMKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sTmV3U0FYUGFyc2VyQ3R4dCBhbmQgeG1sQ3R4dFJlYWRNZW1vcnkuCisgKgogICogcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBibG9jayBhbmQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sKICAqIHRvIGhhbmRsZSB0aGUgcGFyc2luZyBjYWxsYmFjay4gSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgKiBET00gdHJlZSBidWlsZGluZyByb3V0aW5lcy4KQEAgLTE0NDU0LDYgKzE0MTI0LDggQEAKICAqIEBidWZmZXI6ICBhbiBwb2ludGVyIHRvIGEgY2hhciBhcnJheQogICogQHNpemU6ICB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sUmVhZE1lbW9yeS4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGJsb2NrIGFuZCBidWlsZCBhIHRyZWUuCiAgKgogICogUmV0dXJucyB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUKQEAgLTE0NDY4LDYgKzE0MTQwLDggQEAKICAqIEBidWZmZXI6ICBhbiBwb2ludGVyIHRvIGEgY2hhciBhcnJheQogICogQHNpemU6ICB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sUmVhZE1lbW9yeSB3aXRoIFhNTF9QQVJTRV9SRUNPVkVSLgorICoKICAqIHBhcnNlIGFuIFhNTCBpbi1tZW1vcnkgYmxvY2sgYW5kIGJ1aWxkIGEgdHJlZS4KICAqIEluIHRoZSBjYXNlIHRoZSBkb2N1bWVudCBpcyBub3QgV2VsbCBGb3JtZWQsIGFuIGF0dGVtcHQgdG8KICAqIGJ1aWxkIGEgdHJlZSBpcyB0cmllZCBhbnl3YXkKQEAgLTE0NDg2LDcgKzE0MTYwLDggQEAKICAqIEBidWZmZXI6ICBhbiBpbi1tZW1vcnkgWE1MIGRvY3VtZW50IGlucHV0CiAgKiBAc2l6ZTogIHRoZSBsZW5ndGggb2YgdGhlIFhNTCBkb2N1bWVudCBpbiBieXRlcwogICoKLSAqIEEgYmV0dGVyIFNBWCBwYXJzaW5nIHJvdXRpbmUuCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sTmV3U0FYUGFyc2VyQ3R4dCBhbmQgeG1sQ3R4dFJlYWRNZW1vcnkuCisgKgogICogcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBidWZmZXIgYW5kIGNhbGwgdGhlIGdpdmVuIFNBWCBoYW5kbGVyIHJvdXRpbmVzLgogICoKICAqIFJldHVybnMgMCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlCkBAIC0xNDUzMiwyMCArMTQyMDcsNDQgQEAKIAogLyoqCiAgKiB4bWxDcmVhdGVEb2NQYXJzZXJDdHh0OgotICogQGN1cjogIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB4bWxDaGFyCisgKiBAc3RyOiAgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHhtbENoYXIKICAqCiAgKiBDcmVhdGVzIGEgcGFyc2VyIGNvbnRleHQgZm9yIGFuIFhNTCBpbi1tZW1vcnkgZG9jdW1lbnQuCiAgKgogICogUmV0dXJucyB0aGUgbmV3IHBhcnNlciBjb250ZXh0IG9yIE5VTEwKICAqLwogeG1sUGFyc2VyQ3R4dFB0cgoteG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dChjb25zdCB4bWxDaGFyICpjdXIpIHsKLSAgICBpbnQgbGVuOworeG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dChjb25zdCB4bWxDaGFyICpzdHIpIHsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmOwogCi0gICAgaWYgKGN1ciA9PSBOVUxMKQorICAgIGlmIChzdHIgPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7Ci0gICAgbGVuID0geG1sU3RybGVuKGN1cik7Ci0gICAgcmV0dXJuKHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoKGNvbnN0IGNoYXIgKiljdXIsIGxlbikpOworCisgICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICBpZiAoY3R4dCA9PSBOVUxMKQorCXJldHVybihOVUxMKTsKKworICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RyaW5nKHN0cik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKworICAgIGlucHV0ID0geG1sTmV3SW5wdXRTdHJlYW0oY3R4dCk7CisgICAgaWYgKGlucHV0ID09IE5VTEwpIHsKKwl4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoYnVmKTsKKwl4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKKyAgICBpbnB1dC0+YnVmID0gYnVmOworICAgIHhtbEJ1ZlJlc2V0SW5wdXQoaW5wdXQtPmJ1Zi0+YnVmZmVyLCBpbnB1dCk7CisKKyAgICBpbnB1dFB1c2goY3R4dCwgaW5wdXQpOworICAgIHJldHVybihjdHh0KTsKIH0KIAogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKQEAgLTE0NTU2LDYgKzE0MjU1LDggQEAKICAqIEByZWNvdmVyeTogIHdvcmsgaW4gcmVjb3ZlcnkgbW9kZSwgaS5lLiB0cmllcyB0byByZWFkIG5vIFdlbGwgRm9ybWVkCiAgKiAgICAgICAgICAgICBkb2N1bWVudHMKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sTmV3U0FYUGFyc2VyQ3R4dCBhbmQgeG1sQ3R4dFJlYWREb2MuCisgKgogICogcGFyc2UgYW4gWE1MIGluLW1lbW9yeSBkb2N1bWVudCBhbmQgYnVpbGQgYSB0cmVlLgogICogSXQgdXNlIHRoZSBnaXZlbiBTQVggZnVuY3Rpb24gYmxvY2sgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIGNhbGxiYWNrLgogICogSWYgc2F4IGlzIE5VTEwsIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IERPTSB0cmVlIGJ1aWxkaW5nIHJvdXRpbmVzLgpAQCAtMTQ1OTksNiArMTQzMDAsOCBAQAogICogeG1sUGFyc2VEb2M6CiAgKiBAY3VyOiAgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHhtbENoYXIKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgeG1sUmVhZERvYy4KKyAqCiAgKiBwYXJzZSBhbiBYTUwgaW4tbWVtb3J5IGRvY3VtZW50IGFuZCBidWlsZCBhIHRyZWUuCiAgKgogICogUmV0dXJucyB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRyZWUKQEAgLTE0NjUzLDEyOCArMTQzNTYsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJCQkJCSoKLSAqCQkJCU1pc2NlbGxhbmVvdXMJCQkJKgotICoJCQkJCQkJCQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLSNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KLSNlbmRpZgotCi1leHRlcm4gdm9pZCBYTUxDREVDTCB4bWxHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKTsKLXN0YXRpYyBpbnQgeG1sUGFyc2VySW5pdGlhbGl6ZWQgPSAwOwotCi0vKioKLSAqIHhtbEluaXRQYXJzZXI6Ci0gKgotICogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBYTUwgcGFyc2VyLgotICogVGhpcyBpcyBub3QgcmVlbnRyYW50LiBDYWxsIG9uY2UgYmVmb3JlIHByb2Nlc3NpbmcgaW4gY2FzZSBvZgotICogdXNlIGluIG11bHRpdGhyZWFkZWQgcHJvZ3JhbXMuCi0gKi8KLQotdm9pZAoteG1sSW5pdFBhcnNlcih2b2lkKSB7Ci0gICAgaWYgKHhtbFBhcnNlckluaXRpYWxpemVkICE9IDApCi0JcmV0dXJuOwotCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICghZGVmaW5lZChMSUJYTUxfU1RBVElDKSB8fCBkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkpCi0gICAgaWYgKHhtbEZyZWUgPT0gZnJlZSkKLSAgICAgICAgYXRleGl0KHhtbENsZWFudXBQYXJzZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSAgICBfX3htbEdsb2JhbEluaXRNdXRleExvY2soKTsKLSAgICBpZiAoeG1sUGFyc2VySW5pdGlhbGl6ZWQgPT0gMCkgewotI2VuZGlmCi0JeG1sSW5pdFRocmVhZHMoKTsKLQl4bWxJbml0R2xvYmFscygpOwotCWlmICgoeG1sR2VuZXJpY0Vycm9yID09IHhtbEdlbmVyaWNFcnJvckRlZmF1bHRGdW5jKSB8fAotCSAgICAoeG1sR2VuZXJpY0Vycm9yID09IE5VTEwpKQotCSAgICBpbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMoTlVMTCk7Ci0JeG1sSW5pdE1lbW9yeSgpOwotICAgICAgICB4bWxJbml0aWFsaXplRGljdCgpOwotCXhtbEluaXRDaGFyRW5jb2RpbmdIYW5kbGVycygpOwotCXhtbERlZmF1bHRTQVhIYW5kbGVySW5pdCgpOwotCXhtbFJlZ2lzdGVyRGVmYXVsdElucHV0Q2FsbGJhY2tzKCk7Ci0jaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi0JeG1sUmVnaXN0ZXJEZWZhdWx0T3V0cHV0Q2FsbGJhY2tzKCk7Ci0jZW5kaWYgLyogTElCWE1MX09VVFBVVF9FTkFCTEVEICovCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotCWh0bWxJbml0QXV0b0Nsb3NlKCk7Ci0JaHRtbERlZmF1bHRTQVhIYW5kbGVySW5pdCgpOwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLQl4bWxYUGF0aEluaXQoKTsKLSNlbmRpZgotCXhtbFBhcnNlckluaXRpYWxpemVkID0gMTsKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLSAgICB9Ci0gICAgX194bWxHbG9iYWxJbml0TXV0ZXhVbmxvY2soKTsKLSNlbmRpZgotfQotCi0vKioKLSAqIHhtbENsZWFudXBQYXJzZXI6Ci0gKgotICogVGhpcyBmdW5jdGlvbiBuYW1lIGlzIHNvbWV3aGF0IG1pc2xlYWRpbmcuIEl0IGRvZXMgbm90IGNsZWFuIHVwCi0gKiBwYXJzZXIgc3RhdGUsIGl0IGNsZWFucyB1cCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBsaWJyYXJ5IGl0c2VsZi4KLSAqIEl0IGlzIGEgY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIFhNTCBsaWJyYXJ5LiBJdCB0cmllcyB0byByZWNsYWltIGFsbAotICogcmVsYXRlZCBnbG9iYWwgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGxpYnJhcnkgcHJvY2Vzc2luZy4KLSAqIEl0IGRvZXNuJ3QgZGVhbGxvY2F0ZSBhbnkgZG9jdW1lbnQgcmVsYXRlZCBtZW1vcnkuIE9uZSBzaG91bGQKLSAqIGNhbGwgeG1sQ2xlYW51cFBhcnNlcigpIG9ubHkgd2hlbiB0aGUgcHJvY2VzcyBoYXMgZmluaXNoZWQgdXNpbmcKLSAqIHRoZSBsaWJyYXJ5IGFuZCBhbGwgWE1ML0hUTUwgZG9jdW1lbnRzIGJ1aWx0IHdpdGggaXQuCi0gKiBTZWUgYWxzbyB4bWxJbml0UGFyc2VyKCkgd2hpY2ggaGFzIHRoZSBvcHBvc2l0ZSBmdW5jdGlvbiBvZiBwcmVwYXJpbmcKLSAqIHRoZSBsaWJyYXJ5IGZvciBvcGVyYXRpb25zLgotICoKLSAqIFdBUk5JTkc6IGlmIHlvdXIgYXBwbGljYXRpb24gaXMgbXVsdGl0aHJlYWRlZCBvciBoYXMgcGx1Z2luIHN1cHBvcnQKLSAqICAgICAgICAgIGNhbGxpbmcgdGhpcyBtYXkgY3Jhc2ggdGhlIGFwcGxpY2F0aW9uIGlmIGFub3RoZXIgdGhyZWFkIG9yCi0gKiAgICAgICAgICBhIHBsdWdpbiBpcyBzdGlsbCB1c2luZyBsaWJ4bWwyLiBJdCdzIHNvbWV0aW1lcyB2ZXJ5IGhhcmQgdG8KLSAqICAgICAgICAgIGd1ZXNzIGlmIGxpYnhtbDIgaXMgaW4gdXNlIGluIHRoZSBhcHBsaWNhdGlvbiwgc29tZSBsaWJyYXJpZXMKLSAqICAgICAgICAgIG9yIHBsdWdpbnMgbWF5IHVzZSBpdCB3aXRob3V0IG5vdGljZS4gSW4gY2FzZSBvZiBkb3VidCBhYnN0YWluCi0gKiAgICAgICAgICBmcm9tIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvciBkbyBpdCBqdXN0IGJlZm9yZSBjYWxsaW5nIGV4aXQoKQotICogICAgICAgICAgdG8gYXZvaWQgbGVhayByZXBvcnRzIGZyb20gdmFsZ3JpbmQgIQotICovCi0KLXZvaWQKLXhtbENsZWFudXBQYXJzZXIodm9pZCkgewotICAgIGlmICgheG1sUGFyc2VySW5pdGlhbGl6ZWQpCi0JcmV0dXJuOwotCi0gICAgeG1sQ2xlYW51cENoYXJFbmNvZGluZ0hhbmRsZXJzKCk7Ci0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAotICAgIHhtbENhdGFsb2dDbGVhbnVwKCk7Ci0jZW5kaWYKLSAgICB4bWxEaWN0Q2xlYW51cCgpOwotICAgIHhtbENsZWFudXBJbnB1dENhbGxiYWNrcygpOwotI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAotICAgIHhtbENsZWFudXBPdXRwdXRDYWxsYmFja3MoKTsKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLSAgICB4bWxTY2hlbWFDbGVhbnVwVHlwZXMoKTsKLSAgICB4bWxSZWxheE5HQ2xlYW51cFR5cGVzKCk7Ci0jZW5kaWYKLSAgICB4bWxDbGVhbnVwR2xvYmFscygpOwotICAgIHhtbENsZWFudXBUaHJlYWRzKCk7IC8qIG11c3QgYmUgbGFzdCBpZiBjYWxsZWQgbm90IGZyb20gdGhlIG1haW4gdGhyZWFkICovCi0gICAgeG1sQ2xlYW51cE1lbW9yeSgpOwotICAgIHhtbFBhcnNlckluaXRpYWxpemVkID0gMDsKLX0KLQotI2lmIGRlZmluZWQoSEFWRV9BVFRSSUJVVEVfREVTVFJVQ1RPUikgJiYgIWRlZmluZWQoTElCWE1MX1NUQVRJQykgJiYgXAotICAgICFkZWZpbmVkKF9XSU4zMikKLXN0YXRpYyB2b2lkCi1BVFRSSUJVVEVfREVTVFJVQ1RPUgoteG1sRGVzdHJ1Y3Rvcih2b2lkKSB7Ci0gICAgLyoKLSAgICAgKiBDYWxsaW5nIGN1c3RvbSBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIGluIGEgZGVzdHJ1Y3RvciBjYW4gY2F1c2UKLSAgICAgKiBwcm9ibGVtcywgZm9yIGV4YW1wbGUgd2l0aCBOb2tvZ2lyaS4KLSAgICAgKi8KLSAgICBpZiAoeG1sRnJlZSA9PSBmcmVlKQotICAgICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCiAgKglOZXcgc2V0ICgyLjYuMCkgb2Ygc2ltcGxlciBhbmQgbW9yZSBmbGV4aWJsZSBBUElzCQkqCiAgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDgzMCw2ICsxNDQxMSw3IEBACiAgICAgY3R4dC0+bmFtZSA9IE5VTEw7CiAKICAgICBjdHh0LT5uc05yID0gMDsKKyAgICB4bWxQYXJzZXJOc1Jlc2V0KGN0eHQtPm5zZGIpOwogCiAgICAgRElDVF9GUkVFKGN0eHQtPnZlcnNpb24pOwogICAgIGN0eHQtPnZlcnNpb24gPSBOVUxMOwpAQCAtMTQ4NjQsMTIgKzE0NDQ2LDExIEBACiAjZW5kaWYKICAgICBjdHh0LT5yZWNvcmRfaW5mbyA9IDA7CiAgICAgY3R4dC0+Y2hlY2tJbmRleCA9IDA7CisgICAgY3R4dC0+ZW5kQ2hlY2tTdGF0ZSA9IDA7CiAgICAgY3R4dC0+aW5TdWJzZXQgPSAwOwogICAgIGN0eHQtPmVyck5vID0gWE1MX0VSUl9PSzsKICAgICBjdHh0LT5kZXB0aCA9IDA7Ci0gICAgY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HX1VURjg7CiAgICAgY3R4dC0+Y2F0YWxvZ3MgPSBOVUxMOwotICAgIGN0eHQtPm5iZW50aXRpZXMgPSAwOwogICAgIGN0eHQtPnNpemVlbnRpdGllcyA9IDA7CiAgICAgY3R4dC0+c2l6ZWVudGNvcHkgPSAwOwogICAgIHhtbEluaXROb2RlSW5mb1NlcSgmY3R4dC0+bm9kZV9zZXEpOwpAQCAtMTQ4ODcsNiArMTQ0NjgsOCBAQAogICAgIGlmIChjdHh0LT5jYXRhbG9ncyAhPSBOVUxMKQogCXhtbENhdGFsb2dGcmVlTG9jYWwoY3R4dC0+Y2F0YWxvZ3MpOwogI2VuZGlmCisgICAgY3R4dC0+bmJFcnJvcnMgPSAwOworICAgIGN0eHQtPm5iV2FybmluZ3MgPSAwOwogICAgIGlmIChjdHh0LT5sYXN0RXJyb3IuY29kZSAhPSBYTUxfRVJSX09LKQogICAgICAgICB4bWxSZXNldEVycm9yKCZjdHh0LT5sYXN0RXJyb3IpOwogfQpAQCAtMTQ5MDksMTUgKzE0NDkyLDExIEBACiB7CiAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXRTdHJlYW07CiAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmOwotICAgIHhtbENoYXJFbmNvZGluZyBlbmMgPSBYTUxfQ0hBUl9FTkNPRElOR19OT05FOwogCiAgICAgaWYgKGN0eHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKDEpOwogCi0gICAgaWYgKChlbmNvZGluZyA9PSBOVUxMKSAmJiAoY2h1bmsgIT0gTlVMTCkgJiYgKHNpemUgPj0gNCkpCi0gICAgICAgIGVuYyA9IHhtbERldGVjdENoYXJFbmNvZGluZygoY29uc3QgeG1sQ2hhciAqKSBjaHVuaywgc2l6ZSk7Ci0KLSAgICBidWYgPSB4bWxBbGxvY1BhcnNlcklucHV0QnVmZmVyKGVuYyk7CisgICAgYnVmID0geG1sQWxsb2NQYXJzZXJJbnB1dEJ1ZmZlcihYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgIHJldHVybigxKTsKIApAQCAtMTQ5NTIsMjQgKzE0NTMxLDIxIEBACiAKICAgICBpZiAoKHNpemUgPiAwKSAmJiAoY2h1bmsgIT0gTlVMTCkgJiYgKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmCiAgICAgICAgIChjdHh0LT5pbnB1dC0+YnVmICE9IE5VTEwpKSB7Ci0Jc2l6ZV90IGJhc2UgPSB4bWxCdWZHZXRJbnB1dEJhc2UoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyLCBjdHh0LT5pbnB1dCk7Ci0gICAgICAgIHNpemVfdCBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7CisgICAgICAgIHNpemVfdCBwb3MgPSBjdHh0LT5pbnB1dC0+Y3VyIC0gY3R4dC0+aW5wdXQtPmJhc2U7CisgICAgICAgIGludCByZXM7CiAKLSAgICAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoKGN0eHQtPmlucHV0LT5idWYsIHNpemUsIGNodW5rKTsKLQotICAgICAgICB4bWxCdWZTZXRJbnB1dEJhc2VDdXIoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyLCBjdHh0LT5pbnB1dCwgYmFzZSwgY3VyKTsKLSNpZmRlZiBERUJVR19QVVNICi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUFA6IHB1c2hlZCAlZFxuIiwgc2l6ZSk7Ci0jZW5kaWYKKyAgICAgICAgcmVzID0geG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoKGN0eHQtPmlucHV0LT5idWYsIHNpemUsIGNodW5rKTsKKyAgICAgICAgeG1sQnVmVXBkYXRlSW5wdXQoY3R4dC0+aW5wdXQtPmJ1Zi0+YnVmZmVyLCBjdHh0LT5pbnB1dCwgcG9zKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIHhtbEZhdGFsRXJyKGN0eHQsIGN0eHQtPmlucHV0LT5idWYtPmVycm9yLCBOVUxMKTsKKyAgICAgICAgICAgIHhtbEhhbHRQYXJzZXIoY3R4dCk7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoZW5jb2RpbmcgIT0gTlVMTCkgewogICAgICAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhkbHI7CiAKLSAgICAgICAgaWYgKGN0eHQtPmVuY29kaW5nICE9IE5VTEwpCi0JICAgIHhtbEZyZWUoKHhtbENoYXIgKikgY3R4dC0+ZW5jb2RpbmcpOwotICAgICAgICBjdHh0LT5lbmNvZGluZyA9IHhtbFN0cmR1cCgoY29uc3QgeG1sQ2hhciAqKSBlbmNvZGluZyk7Ci0KICAgICAgICAgaGRsciA9IHhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyKGVuY29kaW5nKTsKICAgICAgICAgaWYgKGhkbHIgIT0gTlVMTCkgewogICAgICAgICAgICAgeG1sU3dpdGNoVG9FbmNvZGluZyhjdHh0LCBoZGxyKTsKQEAgLTE0OTc3LDggKzE0NTUzLDYgQEAKIAkgICAgeG1sRmF0YWxFcnJNc2dTdHIoY3R4dCwgWE1MX0VSUl9VTlNVUFBPUlRFRF9FTkNPRElORywKIAkJCSAgICAgICJVbnN1cHBvcnRlZCBlbmNvZGluZyAlc1xuIiwgQkFEX0NBU1QgZW5jb2RpbmcpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChlbmMgIT0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSkgewotICAgICAgICB4bWxTd2l0Y2hFbmNvZGluZyhjdHh0LCBlbmMpOwogICAgIH0KIAogICAgIHJldHVybigwKTsKQEAgLTE0OTk3LDE1ICsxNDU3MSwxMCBAQAogICogICAgICAgICBpbiBjYXNlIG9mIGVycm9yLgogICovCiBzdGF0aWMgaW50Ci14bWxDdHh0VXNlT3B0aW9uc0ludGVybmFsKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IG9wdGlvbnMsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreG1sQ3R4dFVzZU9wdGlvbnNJbnRlcm5hbCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGludCBvcHRpb25zKQogewogICAgIGlmIChjdHh0ID09IE5VTEwpCiAgICAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGN0eHQtPmVuY29kaW5nICE9IE5VTEwpCi0JICAgIHhtbEZyZWUoKHhtbENoYXIgKikgY3R4dC0+ZW5jb2RpbmcpOwotICAgICAgICBjdHh0LT5lbmNvZGluZyA9IHhtbFN0cmR1cCgoY29uc3QgeG1sQ2hhciAqKSBlbmNvZGluZyk7Ci0gICAgfQogICAgIGlmIChvcHRpb25zICYgWE1MX1BBUlNFX1JFQ09WRVIpIHsKICAgICAgICAgY3R4dC0+cmVjb3ZlcnkgPSAxOwogICAgICAgICBvcHRpb25zIC09IFhNTF9QQVJTRV9SRUNPVkVSOwpAQCAtMTUwNjQsOCArMTQ2MzMsNiBAQAogICAgIH0KICNpZmRlZiBMSUJYTUxfU0FYMV9FTkFCTEVECiAgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfU0FYMSkgewotICAgICAgICBjdHh0LT5zYXgtPnN0YXJ0RWxlbWVudCA9IHhtbFNBWDJTdGFydEVsZW1lbnQ7Ci0gICAgICAgIGN0eHQtPnNheC0+ZW5kRWxlbWVudCA9IHhtbFNBWDJFbmRFbGVtZW50OwogICAgICAgICBjdHh0LT5zYXgtPnN0YXJ0RWxlbWVudE5zID0gTlVMTDsKICAgICAgICAgY3R4dC0+c2F4LT5lbmRFbGVtZW50TnMgPSBOVUxMOwogICAgICAgICBjdHh0LT5zYXgtPmluaXRpYWxpemVkID0gMTsKQEAgLTE1MTQwLDcgKzE0NzA3LDI2IEBACiBpbnQKIHhtbEN0eHRVc2VPcHRpb25zKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50IG9wdGlvbnMpCiB7Ci0gICByZXR1cm4oeG1sQ3R4dFVzZU9wdGlvbnNJbnRlcm5hbChjdHh0LCBvcHRpb25zLCBOVUxMKSk7CisgICByZXR1cm4oeG1sQ3R4dFVzZU9wdGlvbnNJbnRlcm5hbChjdHh0LCBvcHRpb25zKSk7Cit9CisKKy8qKgorICogeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb246CisgKiBAY3R4dDogYW4gWE1MIHBhcnNlciBjb250ZXh0CisgKiBAbWF4QW1wbDogIG1heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3IKKyAqCisgKiBUbyBwcm90ZWN0IGFnYWluc3QgZXhwb25lbnRpYWwgZW50aXR5IGV4cGFuc2lvbiAoImJpbGxpb24gbGF1Z2hzIiksIHRoZQorICogc2l6ZSBvZiBzZXJpYWxpemVkIG91dHB1dCBpcyAocm91Z2hseSkgbGltaXRlZCB0byB0aGUgaW5wdXQgc2l6ZQorICogbXVsdGlwbGllZCBieSB0aGlzIGZhY3Rvci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4KKyAqCisgKiBXaGVuIHdvcmtpbmcgd2l0aCBkb2N1bWVudHMgbWFraW5nIGhlYXZ5IHVzZSBvZiBlbnRpdHkgZXhwYW5zaW9uLCBpdCBjYW4KKyAqIGJlIG5lY2Vzc2FyeSB0byBpbmNyZWFzZSB0aGUgdmFsdWUuIEZvciBzZWN1cml0eSByZWFzb25zLCB0aGlzIHNob3VsZCBvbmx5CisgKiBiZSBjb25zaWRlcmVkIHdoZW4gcHJvY2Vzc2luZyB0cnVzdGVkIGlucHV0LgorICovCit2b2lkCit4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHVuc2lnbmVkIG1heEFtcGwpCit7CisgICAgY3R4dC0+bWF4QW1wbCA9IG1heEFtcGw7CiB9CiAKIC8qKgpAQCAtMTUxNjEsMTAgKzE0NzQ3LDE2IEBACiB7CiAgICAgeG1sRG9jUHRyIHJldDsKIAotICAgIHhtbEN0eHRVc2VPcHRpb25zSW50ZXJuYWwoY3R4dCwgb3B0aW9ucywgZW5jb2RpbmcpOworICAgIHhtbEN0eHRVc2VPcHRpb25zSW50ZXJuYWwoY3R4dCwgb3B0aW9ucyk7CiAgICAgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoZGxyOwogCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86IFdlIHNob3VsZCBjb25zaWRlciB0byBzZXQgWE1MX1BBUlNFX0lHTk9SRV9FTkMgaWYgdGhlCisgICAgICAgICAqIGNhbGxlciBwcm92aWRlZCBhbiBlbmNvZGluZy4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBzd2l0Y2ggdG8KKyAgICAgICAgICogdGhlIGVuY29kaW5nIGZyb20gdGhlIFhNTCBkZWNsYXJhdGlvbiB3aGljaCBpcyBsaWtlbHkgdG8KKyAgICAgICAgICogYnJlYWsgdGhpbmdzLiBBbHNvIHNlZSB4bWxTd2l0Y2hJbnB1dEVuY29kaW5nLgorICAgICAgICAgKi8KIAloZGxyID0geG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIoZW5jb2RpbmcpOwogCWlmIChoZGxyICE9IE5VTEwpCiAJICAgIHhtbFN3aXRjaFRvRW5jb2RpbmcoY3R4dCwgaGRscik7CkBAIC0xNTM1NCw3ICsxNDk0Niw3IEBACiAvKioKICAqIHhtbEN0eHRSZWFkRG9jOgogICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKLSAqIEBjdXI6ICBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nCisgKiBAc3RyOiAgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZwogICogQFVSTDogIHRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIHRoZSBkb2N1bWVudAogICogQGVuY29kaW5nOiAgdGhlIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMCiAgKiBAb3B0aW9uczogIGEgY29tYmluYXRpb24gb2YgeG1sUGFyc2VyT3B0aW9uCkBAIC0xNTM2NSwxMyArMTQ5NTcsMzMgQEAKICAqIFJldHVybnMgdGhlIHJlc3VsdGluZyBkb2N1bWVudCB0cmVlCiAgKi8KIHhtbERvY1B0cgoteG1sQ3R4dFJlYWREb2MoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICogY3VyLAoreG1sQ3R4dFJlYWREb2MoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpzdHIsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpVUkwsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQgb3B0aW9ucykKIHsKLSAgICBpZiAoY3VyID09IE5VTEwpCisgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQ7CisgICAgeG1sUGFyc2VySW5wdXRQdHIgc3RyZWFtOworCisgICAgaWYgKGN0eHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICByZXR1cm4gKHhtbEN0eHRSZWFkTWVtb3J5KGN0eHQsIChjb25zdCBjaGFyICopIGN1ciwgeG1sU3RybGVuKGN1ciksIFVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBvcHRpb25zKSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKE5VTEwpOworICAgIHhtbEluaXRQYXJzZXIoKTsKKworICAgIHhtbEN0eHRSZXNldChjdHh0KTsKKworICAgIGlucHV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdHJpbmcoc3RyKTsKKyAgICBpZiAoaW5wdXQgPT0gTlVMTCkgeworCXJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBzdHJlYW0gPSB4bWxOZXdJT0lucHV0U3RyZWFtKGN0eHQsIGlucHV0LCBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKwl4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoaW5wdXQpOworCXJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBpbnB1dFB1c2goY3R4dCwgc3RyZWFtKTsKKyAgICByZXR1cm4gKHhtbERvUmVhZChjdHh0LCBVUkwsIGVuY29kaW5nLCBvcHRpb25zLCAxKSk7CiB9CiAKIC8qKgpAQCAtMTU0MzcsNyArMTUwNDksOCBAQAogCiAgICAgeG1sQ3R4dFJlc2V0KGN0eHQpOwogCi0gICAgaW5wdXQgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbShidWZmZXIsIHNpemUsIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOworICAgIGlucHV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMoYnVmZmVyLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CiAgICAgaWYgKGlucHV0ID09IE5VTEwpIHsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFyc2VySW50ZXJuYWxzLmMgYi9wYXJzZXJJbnRlcm5hbHMuYwppbmRleCAzMWQ5NDY4Li5lNmI0Y2IxIDEwMDY0NAotLS0gYS9wYXJzZXJJbnRlcm5hbHMuYworKysgYi9wYXJzZXJJbnRlcm5hbHMuYwpAQCAtMjQsMjcgKzI0LDMyIEBACiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgotI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC9lbnRpdGllcy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgogI2luY2x1ZGUgPGxpYnhtbC9lbmNvZGluZy5oPgotI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxJTy5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZGljdC5oPgotI2luY2x1ZGUgPGxpYnhtbC9TQVguaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sc2F2ZS5oPgogI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKICNpbmNsdWRlIDxsaWJ4bWwvY2F0YWxvZy5oPgogI2VuZGlmCi0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwvY2h2YWxpZC5oPgogCiAjZGVmaW5lIENVUihjdHh0KSBjdHh0LT5pbnB1dC0+Y3VyCiAjZGVmaW5lIEVORChjdHh0KSBjdHh0LT5pbnB1dC0+ZW5kCi0jZGVmaW5lIFZBTElEX0NUWFQoY3R4dCkgKENVUihjdHh0KSA8PSBFTkQoY3R4dCkpCiAKLSNpbmNsdWRlICJidWYuaCIKLSNpbmNsdWRlICJlbmMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZW5jLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgorI2luY2x1ZGUgInByaXZhdGUvaW8uaCIKKyNpbmNsdWRlICJwcml2YXRlL3BhcnNlci5oIgorCisvKgorICogWE1MX01BWF9BTVBMSUZJQ0FUSU9OX0RFRkFVTFQgaXMgdGhlIGRlZmF1bHQgbWF4aW11bSBhbGxvd2VkIGFtcGxpZmljYXRpb24KKyAqIGZhY3RvciBvZiBzZXJpYWxpemVkIG91dHB1dCBhZnRlciBlbnRpdHkgZXhwYW5zaW9uLgorICovCisjZGVmaW5lIFhNTF9NQVhfQU1QTElGSUNBVElPTl9ERUZBVUxUIDUKIAogLyoKICAqIFZhcmlvdXMgZ2xvYmFsIGRlZmF1bHRzIGZvciBwYXJzaW5nCkBAIC01OSw3ICs2NCw3IEBACiAgKi8KIHZvaWQKIHhtbENoZWNrVmVyc2lvbihpbnQgdmVyc2lvbikgewotICAgIGludCBteXZlcnNpb24gPSAoaW50KSBMSUJYTUxfVkVSU0lPTjsKKyAgICBpbnQgbXl2ZXJzaW9uID0gTElCWE1MX1ZFUlNJT047CiAKICAgICB4bWxJbml0UGFyc2VyKCk7CiAKQEAgLTE3Myw2ICsxNzgsMjI4IEBACiB9CiAKIC8qKgorICogeG1sRmF0YWxFcnI6CisgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAorICogQGVycm9yOiAgdGhlIGVycm9yIG51bWJlcgorICogQGluZm86ICBleHRyYSBpbmZvcm1hdGlvbiBzdHJpbmcKKyAqCisgKiBIYW5kbGUgYSBmYXRhbCBwYXJzZXIgZXJyb3IsIGkuZS4gdmlvbGF0aW5nIFdlbGwtRm9ybWVkbmVzcyBjb25zdHJhaW50cworICovCit2b2lkCit4bWxGYXRhbEVycih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbFBhcnNlckVycm9ycyBlcnJvciwgY29uc3QgY2hhciAqaW5mbykKK3sKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisKKyAgICBpZiAoKGN0eHQgIT0gTlVMTCkgJiYgKGN0eHQtPmRpc2FibGVTQVggIT0gMCkgJiYKKyAgICAgICAgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FT0YpKQorCXJldHVybjsKKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgIGNhc2UgWE1MX0VSUl9JTlZBTElEX0hFWF9DSEFSUkVGOgorICAgICAgICAgICAgZXJybXNnID0gIkNoYXJSZWY6IGludmFsaWQgaGV4YWRlY2ltYWwgdmFsdWUiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9JTlZBTElEX0RFQ19DSEFSUkVGOgorICAgICAgICAgICAgZXJybXNnID0gIkNoYXJSZWY6IGludmFsaWQgZGVjaW1hbCB2YWx1ZSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX0lOVkFMSURfQ0hBUlJFRjoKKyAgICAgICAgICAgIGVycm1zZyA9ICJDaGFyUmVmOiBpbnZhbGlkIHZhbHVlIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfSU5URVJOQUxfRVJST1I6CisgICAgICAgICAgICBlcnJtc2cgPSAiaW50ZXJuYWwgZXJyb3IiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9QRVJFRl9BVF9FT0Y6CisgICAgICAgICAgICBlcnJtc2cgPSAiUEVSZWZlcmVuY2UgYXQgZW5kIG9mIGRvY3VtZW50IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfUEVSRUZfSU5fUFJPTE9HOgorICAgICAgICAgICAgZXJybXNnID0gIlBFUmVmZXJlbmNlIGluIHByb2xvZyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX1BFUkVGX0lOX0VQSUxPRzoKKyAgICAgICAgICAgIGVycm1zZyA9ICJQRVJlZmVyZW5jZSBpbiBlcGlsb2ciOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9QRVJFRl9OT19OQU1FOgorICAgICAgICAgICAgZXJybXNnID0gIlBFUmVmZXJlbmNlOiBubyBuYW1lIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfUEVSRUZfU0VNSUNPTF9NSVNTSU5HOgorICAgICAgICAgICAgZXJybXNnID0gIlBFUmVmZXJlbmNlOiBleHBlY3RpbmcgJzsnIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRU5USVRZX0xPT1A6CisgICAgICAgICAgICBlcnJtc2cgPSAiRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRU5USVRZX05PVF9TVEFSVEVEOgorICAgICAgICAgICAgZXJybXNnID0gIkVudGl0eVZhbHVlOiBcIiBvciAnIGV4cGVjdGVkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRU5USVRZX1BFX0lOVEVSTkFMOgorICAgICAgICAgICAgZXJybXNnID0gIlBFUmVmZXJlbmNlcyBmb3JiaWRkZW4gaW4gaW50ZXJuYWwgc3Vic2V0IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRU5USVRZX05PVF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJFbnRpdHlWYWx1ZTogXCIgb3IgJyBleHBlY3RlZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX0FUVFJJQlVURV9OT1RfU1RBUlRFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJBdHRWYWx1ZTogXCIgb3IgJyBleHBlY3RlZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX0xUX0lOX0FUVFJJQlVURToKKyAgICAgICAgICAgIGVycm1zZyA9ICJVbmVzY2FwZWQgJzwnIG5vdCBhbGxvd2VkIGluIGF0dHJpYnV0ZXMgdmFsdWVzIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfTElURVJBTF9OT1RfU1RBUlRFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJTeXN0ZW1MaXRlcmFsIFwiIG9yICcgZXhwZWN0ZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9MSVRFUkFMX05PVF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJVbmZpbmlzaGVkIFN5c3RlbSBvciBQdWJsaWMgSUQgXCIgb3IgJyBleHBlY3RlZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX01JU1BMQUNFRF9DREFUQV9FTkQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiU2VxdWVuY2UgJ11dPicgbm90IGFsbG93ZWQgaW4gY29udGVudCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX1VSSV9SRVFVSVJFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJTWVNURU0gb3IgUFVCTElDLCB0aGUgVVJJIGlzIG1pc3NpbmciOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9QVUJJRF9SRVFVSVJFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJQVUJMSUMsIHRoZSBQdWJsaWMgSWRlbnRpZmllciBpcyBtaXNzaW5nIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfSFlQSEVOX0lOX0NPTU1FTlQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiQ29tbWVudCBtdXN0IG5vdCBjb250YWluICctLScgKGRvdWJsZS1oeXBoZW4pIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfUElfTk9UX1NUQVJURUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAieG1sUGFyc2VQSSA6IG5vIHRhcmdldCBuYW1lIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfUkVTRVJWRURfWE1MX05BTUU6CisgICAgICAgICAgICBlcnJtc2cgPSAiSW52YWxpZCBQSSBuYW1lIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfTk9UQVRJT05fTk9UX1NUQVJURUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiTk9UQVRJT046IE5hbWUgZXhwZWN0ZWQgaGVyZSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX05PVEFUSU9OX05PVF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICInPicgcmVxdWlyZWQgdG8gY2xvc2UgTk9UQVRJT04gZGVjbGFyYXRpb24iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9WQUxVRV9SRVFVSVJFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJFbnRpdHkgdmFsdWUgcmVxdWlyZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9VUklfRlJBR01FTlQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiRnJhZ21lbnQgbm90IGFsbG93ZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9BVFRMSVNUX05PVF9TVEFSVEVEOgorICAgICAgICAgICAgZXJybXNnID0gIicoJyByZXF1aXJlZCB0byBzdGFydCBBVFRMSVNUIGVudW1lcmF0aW9uIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfTk1UT0tFTl9SRVFVSVJFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJObVRva2VuIGV4cGVjdGVkIGluIEFUVExJU1QgZW51bWVyYXRpb24iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9BVFRMSVNUX05PVF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICInKScgcmVxdWlyZWQgdG8gZmluaXNoIEFUVExJU1QgZW51bWVyYXRpb24iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9NSVhFRF9OT1RfU1RBUlRFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJNaXhlZENvbnRlbnREZWNsIDogJ3wnIG9yICcpKicgZXhwZWN0ZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9QQ0RBVEFfUkVRVUlSRUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiTWl4ZWRDb250ZW50RGVjbCA6ICcjUENEQVRBJyBleHBlY3RlZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX0VMRU1DT05URU5UX05PVF9TVEFSVEVEOgorICAgICAgICAgICAgZXJybXNnID0gIkNvbnRlbnREZWNsIDogTmFtZSBvciAnKCcgZXhwZWN0ZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9FTEVNQ09OVEVOVF9OT1RfRklOSVNIRUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiQ29udGVudERlY2wgOiAnLCcgJ3wnIG9yICcpJyBleHBlY3RlZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX1BFUkVGX0lOX0lOVF9TVUJTRVQ6CisgICAgICAgICAgICBlcnJtc2cgPQorICAgICAgICAgICAgICAgICJQRVJlZmVyZW5jZTogZm9yYmlkZGVuIHdpdGhpbiBtYXJrdXAgZGVjbCBpbiBpbnRlcm5hbCBzdWJzZXQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9HVF9SRVFVSVJFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJleHBlY3RlZCAnPiciOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9DT05EU0VDX0lOVkFMSUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiWE1MIGNvbmRpdGlvbmFsIHNlY3Rpb24gJ1snIGV4cGVjdGVkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRVhUX1NVQlNFVF9OT1RfRklOSVNIRUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiQ29udGVudCBlcnJvciBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfQ09ORFNFQ19JTlZBTElEX0tFWVdPUkQ6CisgICAgICAgICAgICBlcnJtc2cgPQorICAgICAgICAgICAgICAgICJjb25kaXRpb25hbCBzZWN0aW9uIElOQ0xVREUgb3IgSUdOT1JFIGtleXdvcmQgZXhwZWN0ZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9DT05EU0VDX05PVF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJYTUwgY29uZGl0aW9uYWwgc2VjdGlvbiBub3QgY2xvc2VkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfWE1MREVDTF9OT1RfU1RBUlRFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJUZXh0IGRlY2xhcmF0aW9uICc8P3htbCcgcmVxdWlyZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9YTUxERUNMX05PVF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJwYXJzaW5nIFhNTCBkZWNsYXJhdGlvbjogJz8+JyBleHBlY3RlZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX0VYVF9FTlRJVFlfU1RBTkRBTE9ORToKKyAgICAgICAgICAgIGVycm1zZyA9ICJleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgY2Fubm90IGJlIHN0YW5kYWxvbmUiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9FTlRJVFlSRUZfU0VNSUNPTF9NSVNTSU5HOgorICAgICAgICAgICAgZXJybXNnID0gIkVudGl0eVJlZjogZXhwZWN0aW5nICc7JyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX0RPQ1RZUEVfTk9UX0ZJTklTSEVEOgorICAgICAgICAgICAgZXJybXNnID0gIkRPQ1RZUEUgaW1wcm9wZXJseSB0ZXJtaW5hdGVkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfTFRTTEFTSF9SRVFVSVJFRDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJFbmRUYWc6ICc8Lycgbm90IGZvdW5kIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRVFVQUxfUkVRVUlSRUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiZXhwZWN0ZWQgJz0nIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfU1RSSU5HX05PVF9DTE9TRUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiU3RyaW5nIG5vdCBjbG9zZWQgZXhwZWN0aW5nIFwiIG9yICciOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9TVFJJTkdfTk9UX1NUQVJURUQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiU3RyaW5nIG5vdCBzdGFydGVkIGV4cGVjdGluZyAnIG9yIFwiIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRU5DT0RJTkdfTkFNRToKKyAgICAgICAgICAgIGVycm1zZyA9ICJJbnZhbGlkIFhNTCBlbmNvZGluZyBuYW1lIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfU1RBTkRBTE9ORV9WQUxVRToKKyAgICAgICAgICAgIGVycm1zZyA9ICJzdGFuZGFsb25lIGFjY2VwdHMgb25seSAneWVzJyBvciAnbm8nIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRE9DVU1FTlRfRU1QVFk6CisgICAgICAgICAgICBlcnJtc2cgPSAiRG9jdW1lbnQgaXMgZW1wdHkiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9ET0NVTUVOVF9FTkQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX05PVF9XRUxMX0JBTEFOQ0VEOgorICAgICAgICAgICAgZXJybXNnID0gImNodW5rIGlzIG5vdCB3ZWxsIGJhbGFuY2VkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfRVhUUkFfQ09OVEVOVDoKKyAgICAgICAgICAgIGVycm1zZyA9ICJleHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2Ygd2VsbCBiYWxhbmNlZCBjaHVuayI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfRVJSX1ZFUlNJT05fTUlTU0lORzoKKyAgICAgICAgICAgIGVycm1zZyA9ICJNYWxmb3JtZWQgZGVjbGFyYXRpb24gZXhwZWN0aW5nIHZlcnNpb24iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9OQU1FX1RPT19MT05HOgorICAgICAgICAgICAgZXJybXNnID0gIk5hbWUgdG9vIGxvbmciOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE1MX0VSUl9JTlZBTElEX0VOQ09ESU5HOgorICAgICAgICAgICAgZXJybXNnID0gIkludmFsaWQgYnl0ZXMgaW4gY2hhcmFjdGVyIGVuY29kaW5nIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9JT19VTktOT1dOOgorICAgICAgICAgICAgZXJybXNnID0gIkkvTyBlcnJvciI7CisgICAgICAgICAgICBicmVhazsKKyNpZiAwCisgICAgICAgIGNhc2U6CisgICAgICAgICAgICBlcnJtc2cgPSAiIjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJtc2cgPSAiVW5yZWdpc3RlcmVkIGVycm9yIG1lc3NhZ2UiOworICAgIH0KKyAgICBpZiAoY3R4dCAhPSBOVUxMKQorCWN0eHQtPmVyck5vID0gZXJyb3I7CisgICAgaWYgKGluZm8gPT0gTlVMTCkgeworICAgICAgICBfX3htbFJhaXNlRXJyb3IoTlVMTCwgTlVMTCwgTlVMTCwgY3R4dCwgTlVMTCwgWE1MX0ZST01fUEFSU0VSLCBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FUlJfRkFUQUwsIE5VTEwsIDAsIGluZm8sIE5VTEwsIE5VTEwsIDAsIDAsICIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX194bWxSYWlzZUVycm9yKE5VTEwsIE5VTEwsIE5VTEwsIGN0eHQsIE5VTEwsIFhNTF9GUk9NX1BBUlNFUiwgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRVJSX0ZBVEFMLCBOVUxMLCAwLCBpbmZvLCBOVUxMLCBOVUxMLCAwLCAwLCAiJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnLCBpbmZvKTsKKyAgICB9CisgICAgaWYgKGN0eHQgIT0gTlVMTCkgeworCWN0eHQtPndlbGxGb3JtZWQgPSAwOworCWlmIChjdHh0LT5yZWNvdmVyeSA9PSAwKQorCSAgICBjdHh0LT5kaXNhYmxlU0FYID0gMTsKKyAgICB9Cit9CisKKy8qKgogICogeG1sRXJyRW5jb2RpbmdJbnQ6CiAgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAogICogQGVycm9yOiAgdGhlIGVycm9yIG51bWJlcgpAQCAtMjIwLDQ3ICs0NDcsNTAgQEAKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogI2RlZmluZSBERUJVR19JTlBVVCAqLwotLyogI2RlZmluZSBERUJVR19TVEFDSyAqLwotLyogI2RlZmluZSBERUJVR19QVVNIICovCi0KLQogLyogd2UgbmVlZCB0byBrZWVwIGVub3VnaCBpbnB1dCB0byBzaG93IGVycm9ycyBpbiBjb250ZXh0ICovCiAjZGVmaW5lIExJTkVfTEVOICAgICAgICA4MAogCi0jaWZkZWYgREVCVUdfSU5QVVQKLSNkZWZpbmUgQ0hFQ0tfQlVGRkVSKGluKSBjaGVja19idWZmZXIoaW4pCi0KLXN0YXRpYwotdm9pZCBjaGVja19idWZmZXIoeG1sUGFyc2VySW5wdXRQdHIgaW4pIHsKLSAgICBpZiAoaW4tPmJhc2UgIT0geG1sQnVmQ29udGVudChpbi0+YnVmLT5idWZmZXIpKSB7Ci0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sUGFyc2VySW5wdXQ6IGJhc2UgbWlzbWF0Y2ggcHJvYmxlbVxuIik7CisvKioKKyAqIHhtbEhhbHRQYXJzZXI6CisgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAorICoKKyAqIEJsb2NrcyBmdXJ0aGVyIHBhcnNlciBwcm9jZXNzaW5nIGRvbid0IG92ZXJyaWRlIGVycm9yCisgKiBmb3IgaW50ZXJuYWwgdXNlCisgKi8KK3ZvaWQKK3htbEhhbHRQYXJzZXIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgaWYgKGN0eHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIGN0eHQtPmluc3RhdGUgPSBYTUxfUEFSU0VSX0VPRjsKKyAgICBjdHh0LT5kaXNhYmxlU0FYID0gMTsKKyAgICB3aGlsZSAoY3R4dC0+aW5wdXROciA+IDEpCisgICAgICAgIHhtbEZyZWVJbnB1dFN0cmVhbShpbnB1dFBvcChjdHh0KSk7CisgICAgaWYgKGN0eHQtPmlucHV0ICE9IE5VTEwpIHsKKyAgICAgICAgLyoKKwkgKiBpbiBjYXNlIHRoZXJlIHdhcyBhIHNwZWNpZmljIGFsbG9jYXRpb24gZGVhbGxvY2F0ZSBiZWZvcmUKKwkgKiBvdmVycmlkaW5nIGJhc2UKKwkgKi8KKyAgICAgICAgaWYgKGN0eHQtPmlucHV0LT5mcmVlICE9IE5VTEwpIHsKKwkgICAgY3R4dC0+aW5wdXQtPmZyZWUoKHhtbENoYXIgKikgY3R4dC0+aW5wdXQtPmJhc2UpOworCSAgICBjdHh0LT5pbnB1dC0+ZnJlZSA9IE5VTEw7CisJfQorICAgICAgICBpZiAoY3R4dC0+aW5wdXQtPmJ1ZiAhPSBOVUxMKSB7CisgICAgICAgICAgICB4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoY3R4dC0+aW5wdXQtPmJ1Zik7CisgICAgICAgICAgICBjdHh0LT5pbnB1dC0+YnVmID0gTlVMTDsKKyAgICAgICAgfQorCWN0eHQtPmlucHV0LT5jdXIgPSBCQURfQ0FTVCIiOworICAgICAgICBjdHh0LT5pbnB1dC0+bGVuZ3RoID0gMDsKKwljdHh0LT5pbnB1dC0+YmFzZSA9IGN0eHQtPmlucHV0LT5jdXI7CisgICAgICAgIGN0eHQtPmlucHV0LT5lbmQgPSBjdHh0LT5pbnB1dC0+Y3VyOwogICAgIH0KLSAgICBpZiAoaW4tPmN1ciA8IGluLT5iYXNlKSB7Ci0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sUGFyc2VySW5wdXQ6IGN1ciA8IGJhc2UgcHJvYmxlbVxuIik7Ci0gICAgfQotICAgIGlmIChpbi0+Y3VyID4gaW4tPmJhc2UgKyB4bWxCdWZVc2UoaW4tPmJ1Zi0+YnVmZmVyKSkgewotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbFBhcnNlcklucHV0OiBjdXIgPiBiYXNlICsgdXNlIHByb2JsZW1cbiIpOwotICAgIH0KLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwiYnVmZmVyICV4IDogY29udGVudCAleCwgY3VyICVkLCB1c2UgJWRcbiIsCi0gICAgICAgICAgICAoaW50KSBpbiwgKGludCkgeG1sQnVmQ29udGVudChpbi0+YnVmLT5idWZmZXIpLCBpbi0+Y3VyIC0gaW4tPmJhc2UsCi0JICAgIHhtbEJ1ZlVzZShpbi0+YnVmLT5idWZmZXIpKTsKIH0KIAotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfQlVGRkVSKGluKQotI2VuZGlmCi0KLQogLyoqCiAgKiB4bWxQYXJzZXJJbnB1dFJlYWQ6CiAgKiBAaW46ICBhbiBYTUwgcGFyc2VyIGlucHV0CiAgKiBAbGVuOiAgYW4gaW5kaWNhdGl2ZSBzaXplIGZvciB0aGUgbG9va2FoZWFkCiAgKgotICogVGhpcyBmdW5jdGlvbiB3YXMgaW50ZXJuYWwgYW5kIGlzIGRlcHJlY2F0ZWQuCisgKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdhcyBpbnRlcm5hbCBhbmQgaXMgZGVwcmVjYXRlZC4KICAqCiAgKiBSZXR1cm5zIC0xIGFzIHRoaXMgaXMgYW4gZXJyb3IgdG8gdXNlIGl0LgogICovCkBAIC0yNzAsMTAgKzUwMCw2MyBAQAogfQogCiAvKioKKyAqIHhtbFBhcnNlckdyb3c6CisgKiBAY3R4dDogIGFuIFhNTCBwYXJzZXIgY29udGV4dAorICoKKyAqIEdyb3cgdGhlIGlucHV0IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgorICovCitpbnQKK3htbFBhcnNlckdyb3coeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgeG1sUGFyc2VySW5wdXRQdHIgaW4gPSBjdHh0LT5pbnB1dDsKKyAgICB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBidWYgPSBpbi0+YnVmOworICAgIHB0cmRpZmZfdCBjdXJFbmQgPSBpbi0+ZW5kIC0gaW4tPmN1cjsKKyAgICBwdHJkaWZmX3QgY3VyQmFzZSA9IGluLT5jdXIgLSBpbi0+YmFzZTsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4oMCk7CisgICAgLyogRG9uJ3QgZ3JvdyBwdXNoIHBhcnNlciBidWZmZXIuICovCisgICAgaWYgKChjdHh0LT5wcm9ncmVzc2l2ZSkgJiYgKGN0eHQtPmlucHV0TnIgPD0gMSkpCisgICAgICAgIHJldHVybigwKTsKKyAgICAvKiBEb24ndCBncm93IG1lbW9yeSBidWZmZXJzLiAqLworICAgIGlmICgoYnVmLT5lbmNvZGVyID09IE5VTEwpICYmIChidWYtPnJlYWRjYWxsYmFjayA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKDApOworICAgIGlmIChidWYtPmVycm9yICE9IDApCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoKChjdXJFbmQgPiBYTUxfTUFYX0xPT0tVUF9MSU1JVCkgfHwKKyAgICAgICAgIChjdXJCYXNlID4gWE1MX01BWF9MT09LVVBfTElNSVQpKSAmJgorICAgICAgICAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfSFVHRSkgPT0gMCkpIHsKKyAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsICJIdWdlIGlucHV0IGxvb2t1cCIpOworICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOworCXJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKGN1ckVuZCA+PSBJTlBVVF9DSFVOSykKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgcmV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJHcm93KGJ1ZiwgSU5QVVRfQ0hVTkspOworICAgIHhtbEJ1ZlVwZGF0ZUlucHV0KGJ1Zi0+YnVmZmVyLCBpbiwgY3VyQmFzZSk7CisKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICB4bWxGYXRhbEVycihjdHh0LCBidWYtPmVycm9yLCBOVUxMKTsKKyAgICAgICAgLyogQnVmZmVyIGNvbnRlbnRzIG1heSBiZSBsb3N0IGluIGNhc2Ugb2YgbWVtb3J5IGVycm9ycy4gKi8KKyAgICAgICAgaWYgKGJ1Zi0+ZXJyb3IgPT0gWE1MX0VSUl9OT19NRU1PUlkpCisgICAgICAgICAgICB4bWxIYWx0UGFyc2VyKGN0eHQpOworICAgIH0KKworICAgIHJldHVybihyZXQpOworfQorCisvKioKICAqIHhtbFBhcnNlcklucHV0R3JvdzoKICAqIEBpbjogIGFuIFhNTCBwYXJzZXIgaW5wdXQKICAqIEBsZW46ICBhbiBpbmRpY2F0aXZlIHNpemUgZm9yIHRoZSBsb29rYWhlYWQKICAqCisgKiBERVBSRUNBVEVEOiBEb24ndCB1c2UuCisgKgogICogVGhpcyBmdW5jdGlvbiBpbmNyZWFzZSB0aGUgaW5wdXQgZm9yIHRoZSBwYXJzZXIuIEl0IHRyaWVzIHRvCiAgKiBwcmVzZXJ2ZSBwb2ludGVycyB0byB0aGUgaW5wdXQgYnVmZmVyLCBhbmQga2VlcCBhbHJlYWR5IHJlYWQgZGF0YQogICoKQEAgLTI4Niw0MSArNTY5LDgxIEBACiAgICAgc2l6ZV90IGluZHg7CiAKICAgICBpZiAoKGluID09IE5VTEwpIHx8IChsZW4gPCAwKSkgcmV0dXJuKC0xKTsKLSNpZmRlZiBERUJVR19JTlBVVAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiR3Jvd1xuIik7Ci0jZW5kaWYKICAgICBpZiAoaW4tPmJ1ZiA9PSBOVUxMKSByZXR1cm4oLTEpOwogICAgIGlmIChpbi0+YmFzZSA9PSBOVUxMKSByZXR1cm4oLTEpOwogICAgIGlmIChpbi0+Y3VyID09IE5VTEwpIHJldHVybigtMSk7CiAgICAgaWYgKGluLT5idWYtPmJ1ZmZlciA9PSBOVUxMKSByZXR1cm4oLTEpOwogCi0gICAgQ0hFQ0tfQlVGRkVSKGluKTsKKyAgICAvKiBEb24ndCBncm93IG1lbW9yeSBidWZmZXJzLiAqLworICAgIGlmICgoaW4tPmJ1Zi0+ZW5jb2RlciA9PSBOVUxMKSAmJiAoaW4tPmJ1Zi0+cmVhZGNhbGxiYWNrID09IE5VTEwpKQorICAgICAgICByZXR1cm4oMCk7CiAKICAgICBpbmR4ID0gaW4tPmN1ciAtIGluLT5iYXNlOwogICAgIGlmICh4bWxCdWZVc2UoaW4tPmJ1Zi0+YnVmZmVyKSA+ICh1bnNpZ25lZCBpbnQpIGluZHggKyBJTlBVVF9DSFVOSykgewotCi0JQ0hFQ0tfQlVGRkVSKGluKTsKLQogICAgICAgICByZXR1cm4oMCk7CiAgICAgfQotICAgIGlmIChpbi0+YnVmLT5yZWFkY2FsbGJhY2sgIT0gTlVMTCkgewotCXJldCA9IHhtbFBhcnNlcklucHV0QnVmZmVyR3Jvdyhpbi0+YnVmLCBsZW4pOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4oMCk7CisgICAgcmV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJHcm93KGluLT5idWYsIGxlbik7CiAKICAgICBpbi0+YmFzZSA9IHhtbEJ1ZkNvbnRlbnQoaW4tPmJ1Zi0+YnVmZmVyKTsKKyAgICBpZiAoaW4tPmJhc2UgPT0gTlVMTCkgeworICAgICAgICBpbi0+YmFzZSA9IEJBRF9DQVNUICIiOworICAgICAgICBpbi0+Y3VyID0gaW4tPmJhc2U7CisgICAgICAgIGluLT5lbmQgPSBpbi0+YmFzZTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CiAgICAgaW4tPmN1ciA9IGluLT5iYXNlICsgaW5keDsKICAgICBpbi0+ZW5kID0geG1sQnVmRW5kKGluLT5idWYtPmJ1ZmZlcik7CiAKLSAgICBDSEVDS19CVUZGRVIoaW4pOwotCiAgICAgcmV0dXJuKHJldCk7CiB9CiAKIC8qKgorICogeG1sUGFyc2VyU2hyaW5rOgorICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKKyAqCisgKiBTaHJpbmsgdGhlIGlucHV0IGJ1ZmZlci4KKyAqLwordm9pZAoreG1sUGFyc2VyU2hyaW5rKHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgeworICAgIHhtbFBhcnNlcklucHV0UHRyIGluID0gY3R4dC0+aW5wdXQ7CisgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmID0gaW4tPmJ1ZjsKKyAgICBzaXplX3QgdXNlZDsKKworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIERvbid0IHNocmluayBwdWxsIHBhcnNlciBtZW1vcnkgYnVmZmVycy4gKi8KKyAgICBpZiAoKChjdHh0LT5wcm9ncmVzc2l2ZSA9PSAwKSB8fCAoY3R4dC0+aW5wdXROciA+IDEpKSAmJgorICAgICAgICAoYnVmLT5lbmNvZGVyID09IE5VTEwpICYmCisgICAgICAgIChidWYtPnJlYWRjYWxsYmFjayA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXNlZCA9IGluLT5jdXIgLSBpbi0+YmFzZTsKKyAgICAvKgorICAgICAqIERvIG5vdCBzaHJpbmsgb24gbGFyZ2UgYnVmZmVycyB3aG9zZSBvbmx5IGEgdGlueSBmcmFjdGlvbgorICAgICAqIHdhcyBjb25zdW1lZAorICAgICAqLworICAgIGlmICh1c2VkID4gSU5QVVRfQ0hVTkspIHsKKwlzaXplX3QgcmVzID0geG1sQnVmU2hyaW5rKGJ1Zi0+YnVmZmVyLCB1c2VkIC0gTElORV9MRU4pOworCisJaWYgKHJlcyA+IDApIHsKKyAgICAgICAgICAgIHVzZWQgLT0gcmVzOworICAgICAgICAgICAgaWYgKChyZXMgPiBVTE9OR19NQVgpIHx8CisgICAgICAgICAgICAgICAgKGluLT5jb25zdW1lZCA+IFVMT05HX01BWCAtICh1bnNpZ25lZCBsb25nKXJlcykpCisgICAgICAgICAgICAgICAgaW4tPmNvbnN1bWVkID0gVUxPTkdfTUFYOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluLT5jb25zdW1lZCArPSByZXM7CisJfQorICAgIH0KKworICAgIHhtbEJ1ZlVwZGF0ZUlucHV0KGJ1Zi0+YnVmZmVyLCBpbiwgdXNlZCk7Cit9CisKKy8qKgogICogeG1sUGFyc2VySW5wdXRTaHJpbms6CiAgKiBAaW46ICBhbiBYTUwgcGFyc2VyIGlucHV0CiAgKgorICogREVQUkVDQVRFRDogRG9uJ3QgdXNlLgorICoKICAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB1c2VkIGlucHV0IGZvciB0aGUgcGFyc2VyLgogICovCiB2b2lkCkBAIC0zMjgsMTcgKzY1MSwxMiBAQAogICAgIHNpemVfdCB1c2VkOwogICAgIHNpemVfdCByZXQ7CiAKLSNpZmRlZiBERUJVR19JTlBVVAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiU2hyaW5rXG4iKTsKLSNlbmRpZgogICAgIGlmIChpbiA9PSBOVUxMKSByZXR1cm47CiAgICAgaWYgKGluLT5idWYgPT0gTlVMTCkgcmV0dXJuOwogICAgIGlmIChpbi0+YmFzZSA9PSBOVUxMKSByZXR1cm47CiAgICAgaWYgKGluLT5jdXIgPT0gTlVMTCkgcmV0dXJuOwogICAgIGlmIChpbi0+YnVmLT5idWZmZXIgPT0gTlVMTCkgcmV0dXJuOwogCi0gICAgQ0hFQ0tfQlVGRkVSKGluKTsKLQogICAgIHVzZWQgPSBpbi0+Y3VyIC0gaW4tPmJhc2U7CiAgICAgLyoKICAgICAgKiBEbyBub3Qgc2hyaW5rIG9uIGxhcmdlIGJ1ZmZlcnMgd2hvc2Ugb25seSBhIHRpbnkgZnJhY3Rpb24KQEAgLTM0OCw3ICs2NjYsMTEgQEAKIAlyZXQgPSB4bWxCdWZTaHJpbmsoaW4tPmJ1Zi0+YnVmZmVyLCB1c2VkIC0gTElORV9MRU4pOwogCWlmIChyZXQgPiAwKSB7CiAgICAgICAgICAgICB1c2VkIC09IHJldDsKLQkgICAgaW4tPmNvbnN1bWVkICs9IHJldDsKKyAgICAgICAgICAgIGlmICgocmV0ID4gVUxPTkdfTUFYKSB8fAorICAgICAgICAgICAgICAgIChpbi0+Y29uc3VtZWQgPiBVTE9OR19NQVggLSAodW5zaWduZWQgbG9uZylyZXQpKQorICAgICAgICAgICAgICAgIGluLT5jb25zdW1lZCA9IFVMT05HX01BWDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbi0+Y29uc3VtZWQgKz0gcmV0OwogCX0KICAgICB9CiAKQEAgLTM1NywxMCArNjc5LDE1IEBACiAgICAgfQogCiAgICAgaW4tPmJhc2UgPSB4bWxCdWZDb250ZW50KGluLT5idWYtPmJ1ZmZlcik7CisgICAgaWYgKGluLT5iYXNlID09IE5VTEwpIHsKKyAgICAgICAgLyogVE9ETzogcmFpc2UgZXJyb3IgKi8KKyAgICAgICAgaW4tPmJhc2UgPSBCQURfQ0FTVCAiIjsKKyAgICAgICAgaW4tPmN1ciA9IGluLT5iYXNlOworICAgICAgICBpbi0+ZW5kID0gaW4tPmJhc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaW4tPmN1ciA9IGluLT5iYXNlICsgdXNlZDsKICAgICBpbi0+ZW5kID0geG1sQnVmRW5kKGluLT5idWYtPmJ1ZmZlcik7Ci0KLSAgICBDSEVDS19CVUZGRVIoaW4pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzMsMTQ5ICs3MDAsMTExIEBACiAgKiB4bWxOZXh0Q2hhcjoKICAqIEBjdHh0OiAgdGhlIFhNTCBwYXJzZXIgY29udGV4dAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLgorICoKICAqIFNraXAgdG8gdGhlIG5leHQgY2hhciBpbnB1dCBjaGFyLgogICovCiAKIHZvaWQKIHhtbE5leHRDaGFyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCkKIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXI7CisgICAgc2l6ZV90IGF2YWlsOworICAgIGludCBjOworCiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKSB8fAogICAgICAgICAoY3R4dC0+aW5wdXQgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghKFZBTElEX0NUWFQoY3R4dCkpKSB7Ci0gICAgICAgIHhtbEVyckludGVybmFsKGN0eHQsICJQYXJzZXIgaW5wdXQgZGF0YSBtZW1vcnkgZXJyb3JcbiIsIE5VTEwpOwotCWN0eHQtPmVyck5vID0gWE1MX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSAgICAgICAgeG1sU3RvcFBhcnNlcihjdHh0KTsKLQlyZXR1cm47CisgICAgYXZhaWwgPSBjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1cjsKKworICAgIGlmIChhdmFpbCA8IElOUFVUX0NIVU5LKSB7CisgICAgICAgIHhtbFBhcnNlckdyb3coY3R4dCk7CisgICAgICAgIGlmICgoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0VPRikgfHwKKyAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyID49IGN0eHQtPmlucHV0LT5lbmQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdmFpbCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOwogICAgIH0KIAotICAgIGlmICgoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkgJiYKLSAgICAgICAgKHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspIDw9IDApKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKKyAgICBjID0gKmN1cjsKIAotICAgIGlmIChjdHh0LT5jaGFyc2V0ID09IFhNTF9DSEFSX0VOQ09ESU5HX1VURjgpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VyOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogICAyLjExIEVuZC1vZi1MaW5lIEhhbmRsaW5nCi0gICAgICAgICAqICAgdGhlIGxpdGVyYWwgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSAiI3hEI3hBIiBvciBhIHN0YW5kYWxvbmUKLSAgICAgICAgICogICBsaXRlcmFsICN4RCwgYW4gWE1MIHByb2Nlc3NvciBtdXN0IHBhc3MgdG8gdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgICAqICAgdGhlIHNpbmdsZSBjaGFyYWN0ZXIgI3hBLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCooY3R4dC0+aW5wdXQtPmN1cikgPT0gJ1xuJykgewotICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmxpbmUrKzsgY3R4dC0+aW5wdXQtPmNvbCA9IDE7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmNvbCsrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdlIGFyZSBzdXBwb3NlZCB0byBoYW5kbGUgVVRGOCwgY2hlY2sgaXQncyB2YWxpZAotICAgICAgICAgKiBGcm9tIHJmYzIwNDQ6IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHZhbHVlcyBvbiBVVEYtODoKLSAgICAgICAgICoKLSAgICAgICAgICogVUNTLTQgcmFuZ2UgKGhleC4pICAgICAgICAgICBVVEYtOCBvY3RldCBzZXF1ZW5jZSAoYmluYXJ5KQotICAgICAgICAgKiAwMDAwIDAwMDAtMDAwMCAwMDdGICAgMHh4eHh4eHgKLSAgICAgICAgICogMDAwMCAwMDgwLTAwMDAgMDdGRiAgIDExMHh4eHh4IDEweHh4eHh4Ci0gICAgICAgICAqIDAwMDAgMDgwMC0wMDAwIEZGRkYgICAxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4eAotICAgICAgICAgKgotICAgICAgICAgKiBDaGVjayBmb3IgdGhlIDB4MTEwMDAwIGxpbWl0IHRvbwotICAgICAgICAgKi8KLSAgICAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLQotICAgICAgICBjID0gKmN1cjsKLSAgICAgICAgaWYgKGMgJiAweDgwKSB7Ci0gICAgICAgICAgICBpZiAoYyA9PSAweEMwKQotCSAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKLSAgICAgICAgICAgIGlmIChjdXJbMV0gPT0gMCkgewotICAgICAgICAgICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGN1clsxXSAmIDB4YzApICE9IDB4ODApCi0gICAgICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKLSAgICAgICAgICAgIGlmICgoYyAmIDB4ZTApID09IDB4ZTApIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGN1clsyXSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGN1clsyXSAmIDB4YzApICE9IDB4ODApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKChjICYgMHhmMCkgPT0gMHhmMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyWzNdID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKChjICYgMHhmOCkgIT0gMHhmMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoY3VyWzNdICYgMHhjMCkgIT0gMHg4MCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuY29kaW5nX2Vycm9yOwotICAgICAgICAgICAgICAgICAgICAvKiA0LWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IDQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IChjdXJbMF0gJiAweDcpIDw8IDE4OwotICAgICAgICAgICAgICAgICAgICB2YWwgfD0gKGN1clsxXSAmIDB4M2YpIDw8IDEyOwotICAgICAgICAgICAgICAgICAgICB2YWwgfD0gKGN1clsyXSAmIDB4M2YpIDw8IDY7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCB8PSBjdXJbM10gJiAweDNmOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDMtYnl0ZSBjb2RlICovCi0gICAgICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXIgKz0gMzsKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gKGN1clswXSAmIDB4ZikgPDwgMTI7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCB8PSAoY3VyWzFdICYgMHgzZikgPDwgNjsKLSAgICAgICAgICAgICAgICAgICAgdmFsIHw9IGN1clsyXSAmIDB4M2Y7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoKHZhbCA+IDB4ZDdmZikgJiYgKHZhbCA8IDB4ZTAwMCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICgodmFsID4gMHhmZmZkKSAmJiAodmFsIDwgMHgxMDAwMCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICh2YWwgPj0gMHgxMTAwMDApKSB7Ci0JCXhtbEVyckVuY29kaW5nSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotCQkJCSAgIkNoYXIgMHglWCBvdXQgb2YgYWxsb3dlZCByYW5nZVxuIiwKLQkJCQkgIHZhbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgLyogMi1ieXRlIGNvZGUgKi8KLSAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IDI7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgLyogMS1ieXRlIGNvZGUgKi8KKyAgICBpZiAoYyA8IDB4ODApIHsKKyAgICAgICAgaWYgKGMgPT0gJ1xuJykgewogICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1cisrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEFzc3VtZSBpdCdzIGEgZml4ZWQgbGVuZ3RoIGVuY29kaW5nICgxKSB3aXRoCi0gICAgICAgICAqIGEgY29tcGF0aWJsZSBlbmNvZGluZyBmb3IgdGhlIEFTQ0lJIHNldCwgc2luY2UKLSAgICAgICAgICogWE1MIGNvbnN0cnVjdHMgb25seSB1c2UgPCAxMjggY2hhcnMKLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKCooY3R4dC0+aW5wdXQtPmN1cikgPT0gJ1xuJykgewotICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmxpbmUrKzsgY3R4dC0+aW5wdXQtPmNvbCA9IDE7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmxpbmUrKzsKKyAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jb2wgPSAxOworICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqICAgMi4xMSBFbmQtb2YtTGluZSBIYW5kbGluZworICAgICAgICAgICAgICogICB0aGUgbGl0ZXJhbCB0d28tY2hhcmFjdGVyIHNlcXVlbmNlICIjeEQjeEEiIG9yIGEgc3RhbmRhbG9uZQorICAgICAgICAgICAgICogICBsaXRlcmFsICN4RCwgYW4gWE1MIHByb2Nlc3NvciBtdXN0IHBhc3MgdG8gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgKiAgIHRoZSBzaW5nbGUgY2hhcmFjdGVyICN4QS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciArPSAoKGN1clsxXSA9PSAnXG4nKSA/IDIgOiAxKTsKKyAgICAgICAgICAgIGN0eHQtPmlucHV0LT5saW5lKys7CisgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y29sID0gMTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXIrKzsKICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jb2wrKzsKLSAgICAgICAgY3R4dC0+aW5wdXQtPmN1cisrOwotICAgIH0KLSAgICBpZiAoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkKLSAgICAgICAgeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSyk7Ci0gICAgcmV0dXJuOwotZW5jb2RpbmdfZXJyb3I6Ci0gICAgLyoKLSAgICAgKiBJZiB3ZSBkZXRlY3QgYW4gVVRGOCBlcnJvciB0aGF0IHByb2JhYmx5IG1lYW4gdGhhdCB0aGUKLSAgICAgKiBpbnB1dCBlbmNvZGluZyBkaWRuJ3QgZ2V0IHByb3Blcmx5IGFkdmVydGlzZWQgaW4gdGhlCi0gICAgICogZGVjbGFyYXRpb24gaGVhZGVyLiBSZXBvcnQgdGhlIGVycm9yIGFuZCBzd2l0Y2ggdGhlIGVuY29kaW5nCi0gICAgICogdG8gSVNPLUxhdGluLTEgKGlmIHlvdSBkb24ndCBsaWtlIHRoaXMgcG9saWN5LCBqdXN0IGRlY2xhcmUgdGhlCi0gICAgICogZW5jb2RpbmcgISkKLSAgICAgKi8KLSAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmlucHV0ID09IE5VTEwpIHx8Ci0gICAgICAgIChjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1ciA8IDQpKSB7Ci0JX194bWxFcnJFbmNvZGluZyhjdHh0LCBYTUxfRVJSX0lOVkFMSURfQ0hBUiwKLQkJICAgICAiSW5wdXQgaXMgbm90IHByb3BlciBVVEYtOCwgaW5kaWNhdGUgZW5jb2RpbmcgIVxuIiwKLQkJICAgICBOVUxMLCBOVUxMKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgYnVmZmVyWzE1MF07CisgICAgICAgIGN0eHQtPmlucHV0LT5jb2wrKzsKIAotCXNucHJpbnRmKGJ1ZmZlciwgMTQ5LCAiQnl0ZXM6IDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKLQkJCWN0eHQtPmlucHV0LT5jdXJbMF0sIGN0eHQtPmlucHV0LT5jdXJbMV0sCi0JCQljdHh0LT5pbnB1dC0+Y3VyWzJdLCBjdHh0LT5pbnB1dC0+Y3VyWzNdKTsKLQlfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotCQkgICAgICJJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhXG4lcyIsCi0JCSAgICAgQkFEX0NBU1QgYnVmZmVyLCBOVUxMKTsKKyAgICAgICAgaWYgKChhdmFpbCA8IDIpIHx8IChjdXJbMV0gJiAweGMwKSAhPSAweDgwKQorICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKKworICAgICAgICBpZiAoYyA8IDB4ZTApIHsKKyAgICAgICAgICAgIC8qIDItYnl0ZSBjb2RlICovCisgICAgICAgICAgICBpZiAoYyA8IDB4YzIpCisgICAgICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKKyAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXIgKz0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB2YWwgPSAoYyA8PCA4KSB8IGN1clsxXTsKKworICAgICAgICAgICAgaWYgKChhdmFpbCA8IDMpIHx8IChjdXJbMl0gJiAweGMwKSAhPSAweDgwKQorICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CisKKyAgICAgICAgICAgIGlmIChjIDwgMHhmMCkgeworICAgICAgICAgICAgICAgIC8qIDMtYnl0ZSBjb2RlICovCisgICAgICAgICAgICAgICAgaWYgKCh2YWwgPCAweGUwYTApIHx8ICgodmFsID49IDB4ZWRhMCkgJiYgKHZhbCA8IDB4ZWUwMCkpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVuY29kaW5nX2Vycm9yOworICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXIgKz0gMzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKChhdmFpbCA8IDQpIHx8ICgoY3VyWzNdICYgMHhjMCkgIT0gMHg4MCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CisKKyAgICAgICAgICAgICAgICAvKiA0LWJ5dGUgY29kZSAqLworICAgICAgICAgICAgICAgIGlmICgodmFsIDwgMHhmMDkwKSB8fCAodmFsID49IDB4ZjQ5MCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CisgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1ciArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIGN0eHQtPmNoYXJzZXQgPSBYTUxfQ0hBUl9FTkNPRElOR184ODU5XzE7CisKKyAgICByZXR1cm47CisKK2VuY29kaW5nX2Vycm9yOgorICAgIC8qIE9ubHkgcmVwb3J0IHRoZSBmaXJzdCBlcnJvciAqLworICAgIGlmICgoY3R4dC0+aW5wdXQtPmZsYWdzICYgWE1MX0lOUFVUX0VOQ09ESU5HX0VSUk9SKSA9PSAwKSB7CisgICAgICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoY3R4dC0+aW5wdXQgPT0gTlVMTCkgfHwKKyAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1ciA8IDQpKSB7CisgICAgICAgICAgICBfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hhciBidWZmZXJbMTUwXTsKKworICAgICAgICAgICAgc25wcmludGYoYnVmZmVyLCAxNDksICJCeXRlczogMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXJbMF0sIGN0eHQtPmlucHV0LT5jdXJbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1clsyXSwgY3R4dC0+aW5wdXQtPmN1clszXSk7CisgICAgICAgICAgICBfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhXG4lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQkFEX0NBU1QgYnVmZmVyLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBjdHh0LT5pbnB1dC0+ZmxhZ3MgfD0gWE1MX0lOUFVUX0VOQ09ESU5HX0VSUk9SOworICAgIH0KICAgICBjdHh0LT5pbnB1dC0+Y3VyKys7CiAgICAgcmV0dXJuOwogfQpAQCAtNTI1LDYgKzgxNCw4IEBACiAgKiBAY3R4dDogIHRoZSBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEBsZW46ICBwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNoYXIgcmVhZAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLgorICoKICAqIFRoZSBjdXJyZW50IGNoYXIgdmFsdWUsIGlmIHVzaW5nIFVURi04IHRoaXMgbWF5IGFjdHVhbGx5IHNwYW4gbXVsdGlwbGUKICAqIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuIEltcGxlbWVudCB0aGUgZW5kIG9mIGxpbmUgbm9ybWFsaXphdGlvbjoKICAqIDIuMTEgRW5kLW9mLUxpbmUgSGFuZGxpbmcKQEAgLTU0MCwxNDggKzgzMSwxNDUgQEAKIAogaW50CiB4bWxDdXJyZW50Q2hhcih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGludCAqbGVuKSB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VyOworICAgIHNpemVfdCBhdmFpbDsKKyAgICBpbnQgYzsKKwogICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAobGVuID09IE5VTEwpIHx8IChjdHh0LT5pbnB1dCA9PSBOVUxMKSkgcmV0dXJuKDApOwogICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQogCXJldHVybigwKTsKIAotICAgIGlmICgoKmN0eHQtPmlucHV0LT5jdXIgPj0gMHgyMCkgJiYgKCpjdHh0LT5pbnB1dC0+Y3VyIDw9IDB4N0YpKSB7Ci0JICAgICpsZW4gPSAxOwotCSAgICByZXR1cm4oKGludCkgKmN0eHQtPmlucHV0LT5jdXIpOwotICAgIH0KLSAgICBpZiAoY3R4dC0+Y2hhcnNldCA9PSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4KSB7Ci0JLyoKLQkgKiBXZSBhcmUgc3VwcG9zZWQgdG8gaGFuZGxlIFVURjgsIGNoZWNrIGl0J3MgdmFsaWQKLQkgKiBGcm9tIHJmYzIwNDQ6IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHZhbHVlcyBvbiBVVEYtODoKLQkgKgotCSAqIFVDUy00IHJhbmdlIChoZXguKSAgICAgICAgICAgVVRGLTggb2N0ZXQgc2VxdWVuY2UgKGJpbmFyeSkKLQkgKiAwMDAwIDAwMDAtMDAwMCAwMDdGICAgMHh4eHh4eHgKLQkgKiAwMDAwIDAwODAtMDAwMCAwN0ZGICAgMTEweHh4eHggMTB4eHh4eHgKLQkgKiAwMDAwIDA4MDAtMDAwMCBGRkZGICAgMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHgKLQkgKgotCSAqIENoZWNrIGZvciB0aGUgMHgxMTAwMDAgbGltaXQgdG9vCi0JICovCi0JY29uc3QgdW5zaWduZWQgY2hhciAqY3VyID0gY3R4dC0+aW5wdXQtPmN1cjsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0JdW5zaWduZWQgaW50IHZhbDsKKyAgICBhdmFpbCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOwogCi0JYyA9ICpjdXI7Ci0JaWYgKGMgJiAweDgwKSB7Ci0JICAgIGlmICgoKGMgJiAweDQwKSA9PSAwKSB8fCAoYyA9PSAweEMwKSkKLQkJZ290byBlbmNvZGluZ19lcnJvcjsKLQkgICAgaWYgKGN1clsxXSA9PSAwKSB7Ci0JCXhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXI7Ci0gICAgICAgICAgICB9Ci0JICAgIGlmICgoY3VyWzFdICYgMHhjMCkgIT0gMHg4MCkKLQkJZ290byBlbmNvZGluZ19lcnJvcjsKLQkgICAgaWYgKChjICYgMHhlMCkgPT0gMHhlMCkgewotCQlpZiAoY3VyWzJdID09IDApIHsKLQkJICAgIHhtbFBhcnNlcklucHV0R3JvdyhjdHh0LT5pbnB1dCwgSU5QVVRfQ0hVTkspOwotICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIGlmIChhdmFpbCA8IElOUFVUX0NIVU5LKSB7CisgICAgICAgIHhtbFBhcnNlckdyb3coY3R4dCk7CisgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfRU9GKQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICBhdmFpbCA9IGN0eHQtPmlucHV0LT5lbmQgLSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIH0KKworICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXI7CisgICAgYyA9ICpjdXI7CisKKyAgICBpZiAoYyA8IDB4ODApIHsKKwkvKiAxLWJ5dGUgY29kZSAqLworICAgICAgICBpZiAoYyA8IDB4MjApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiAgIDIuMTEgRW5kLW9mLUxpbmUgSGFuZGxpbmcKKyAgICAgICAgICAgICAqICAgdGhlIGxpdGVyYWwgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSAiI3hEI3hBIiBvciBhIHN0YW5kYWxvbmUKKyAgICAgICAgICAgICAqICAgbGl0ZXJhbCAjeEQsIGFuIFhNTCBwcm9jZXNzb3IgbXVzdCBwYXNzIHRvIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICogICB0aGUgc2luZ2xlIGNoYXJhY3RlciAjeEEuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0IGNoYW5nZSB0aGUgJ2N1cicgcG9pbnRlcgorICAgICAgICAgICAgICAgICAqIGFzIHNpZGUgZWZmZWN0LCBidXQgdGhlIE5FWFRMIG1hY3JvIGluIHBhcnNlci5jIHJlbGllcworICAgICAgICAgICAgICAgICAqIG9uIHRoaXMgYmVoYXZpb3Igd2hlbiBpbmNyZW1lbnRpbmcgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChjdXJbMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgY3R4dC0+aW5wdXQtPmN1cisrOworICAgICAgICAgICAgICAgICpsZW4gPSAxOworICAgICAgICAgICAgICAgIGMgPSAnXG4nOworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY3R4dC0+aW5wdXQtPmN1ciA+PSBjdHh0LT5pbnB1dC0+ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICpsZW4gPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpsZW4gPSAxOworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBUT0RPOiBOdWxsIGJ5dGVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IGNhbGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAqIGJ1dCB0aGlzIGNhbiBiZSB0cmlja3kuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICB4bWxFcnJFbmNvZGluZ0ludChjdHh0LCBYTUxfRVJSX0lOVkFMSURfQ0hBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhciAweDAgb3V0IG9mIGFsbG93ZWQgcmFuZ2VcbiIsIGMpOwogICAgICAgICAgICAgICAgIH0KLQkJaWYgKChjdXJbMl0gJiAweGMwKSAhPSAweDgwKQotCQkgICAgZ290byBlbmNvZGluZ19lcnJvcjsKLQkJaWYgKChjICYgMHhmMCkgPT0gMHhmMCkgewotCQkgICAgaWYgKGN1clszXSA9PSAwKSB7Ci0JCQl4bWxQYXJzZXJJbnB1dEdyb3coY3R4dC0+aW5wdXQsIElOUFVUX0NIVU5LKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN0eHQtPmlucHV0LT5jdXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQkJICAgIGlmICgoKGMgJiAweGY4KSAhPSAweGYwKSB8fAotCQkJKChjdXJbM10gJiAweGMwKSAhPSAweDgwKSkKLQkJCWdvdG8gZW5jb2RpbmdfZXJyb3I7Ci0JCSAgICAvKiA0LWJ5dGUgY29kZSAqLwotCQkgICAgKmxlbiA9IDQ7Ci0JCSAgICB2YWwgPSAoY3VyWzBdICYgMHg3KSA8PCAxODsKLQkJICAgIHZhbCB8PSAoY3VyWzFdICYgMHgzZikgPDwgMTI7Ci0JCSAgICB2YWwgfD0gKGN1clsyXSAmIDB4M2YpIDw8IDY7Ci0JCSAgICB2YWwgfD0gY3VyWzNdICYgMHgzZjsKLQkJICAgIGlmICh2YWwgPCAweDEwMDAwKQotCQkJZ290byBlbmNvZGluZ19lcnJvcjsKLQkJfSBlbHNlIHsKLQkJICAvKiAzLWJ5dGUgY29kZSAqLwotCQkgICAgKmxlbiA9IDM7Ci0JCSAgICB2YWwgPSAoY3VyWzBdICYgMHhmKSA8PCAxMjsKLQkJICAgIHZhbCB8PSAoY3VyWzFdICYgMHgzZikgPDwgNjsKLQkJICAgIHZhbCB8PSBjdXJbMl0gJiAweDNmOwotCQkgICAgaWYgKHZhbCA8IDB4ODAwKQotCQkJZ290byBlbmNvZGluZ19lcnJvcjsKLQkJfQotCSAgICB9IGVsc2UgewotCSAgICAgIC8qIDItYnl0ZSBjb2RlICovCi0JCSpsZW4gPSAyOwotCQl2YWwgPSAoY3VyWzBdICYgMHgxZikgPDwgNjsKLQkJdmFsIHw9IGN1clsxXSAmIDB4M2Y7Ci0JCWlmICh2YWwgPCAweDgwKQotCQkgICAgZ290byBlbmNvZGluZ19lcnJvcjsKLQkgICAgfQotCSAgICBpZiAoIUlTX0NIQVIodmFsKSkgewotCSAgICAgICAgeG1sRXJyRW5jb2RpbmdJbnQoY3R4dCwgWE1MX0VSUl9JTlZBTElEX0NIQVIsCi0JCQkJICAiQ2hhciAweCVYIG91dCBvZiBhbGxvd2VkIHJhbmdlXG4iLCB2YWwpOwotCSAgICB9Ci0JICAgIHJldHVybih2YWwpOwotCX0gZWxzZSB7Ci0JICAgIC8qIDEtYnl0ZSBjb2RlICovCi0JICAgICpsZW4gPSAxOwotCSAgICBpZiAoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkKLQkJeG1sUGFyc2VySW5wdXRHcm93KGN0eHQtPmlucHV0LCBJTlBVVF9DSFVOSyk7Ci0JICAgIGlmICgoKmN0eHQtPmlucHV0LT5jdXIgPT0gMCkgJiYKLQkgICAgICAgIChjdHh0LT5pbnB1dC0+ZW5kID4gY3R4dC0+aW5wdXQtPmN1cikpIHsKLQkgICAgICAgIHhtbEVyckVuY29kaW5nSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotCQkJCSAgIkNoYXIgMHgwIG91dCBvZiBhbGxvd2VkIHJhbmdlXG4iLCAwKTsKLQkgICAgfQotCSAgICBpZiAoKmN0eHQtPmlucHV0LT5jdXIgPT0gMHhEKSB7Ci0JCWlmIChjdHh0LT5pbnB1dC0+Y3VyWzFdID09IDB4QSkgewotCQkgICAgY3R4dC0+aW5wdXQtPmN1cisrOwotCQl9Ci0JCXJldHVybigweEEpOwotCSAgICB9Ci0JICAgIHJldHVybigoaW50KSAqY3R4dC0+aW5wdXQtPmN1cik7Ci0JfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqbGVuID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpsZW4gPSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKGMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCB2YWw7CisKKyAgICAgICAgaWYgKGF2YWlsIDwgMikKKyAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZV9zZXF1ZW5jZTsKKyAgICAgICAgaWYgKChjdXJbMV0gJiAweGMwKSAhPSAweDgwKQorICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKKworICAgICAgICBpZiAoYyA8IDB4ZTApIHsKKyAgICAgICAgICAgIC8qIDItYnl0ZSBjb2RlICovCisgICAgICAgICAgICBpZiAoYyA8IDB4YzIpCisgICAgICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKKyAgICAgICAgICAgIHZhbCA9IChjICYgMHgxZikgPDwgNjsKKyAgICAgICAgICAgIHZhbCB8PSBjdXJbMV0gJiAweDNmOworICAgICAgICAgICAgKmxlbiA9IDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXZhaWwgPCAzKQorICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZV9zZXF1ZW5jZTsKKyAgICAgICAgICAgIGlmICgoY3VyWzJdICYgMHhjMCkgIT0gMHg4MCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuY29kaW5nX2Vycm9yOworCisgICAgICAgICAgICBpZiAoYyA8IDB4ZjApIHsKKyAgICAgICAgICAgICAgICAvKiAzLWJ5dGUgY29kZSAqLworICAgICAgICAgICAgICAgIHZhbCA9IChjICYgMHhmKSA8PCAxMjsKKyAgICAgICAgICAgICAgICB2YWwgfD0gKGN1clsxXSAmIDB4M2YpIDw8IDY7CisgICAgICAgICAgICAgICAgdmFsIHw9IGN1clsyXSAmIDB4M2Y7CisgICAgICAgICAgICAgICAgaWYgKCh2YWwgPCAweDgwMCkgfHwgKCh2YWwgPj0gMHhkODAwKSAmJiAodmFsIDwgMHhlMDAwKSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CisgICAgICAgICAgICAgICAgKmxlbiA9IDM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhdmFpbCA8IDQpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5jb21wbGV0ZV9zZXF1ZW5jZTsKKyAgICAgICAgICAgICAgICBpZiAoKGN1clszXSAmIDB4YzApICE9IDB4ODApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7CisKKyAgICAgICAgICAgICAgICAvKiA0LWJ5dGUgY29kZSAqLworICAgICAgICAgICAgICAgIHZhbCA9IChjICYgMHgwZikgPDwgMTg7CisgICAgICAgICAgICAgICAgdmFsIHw9IChjdXJbMV0gJiAweDNmKSA8PCAxMjsKKyAgICAgICAgICAgICAgICB2YWwgfD0gKGN1clsyXSAmIDB4M2YpIDw8IDY7CisgICAgICAgICAgICAgICAgdmFsIHw9IGN1clszXSAmIDB4M2Y7CisgICAgICAgICAgICAgICAgaWYgKCh2YWwgPCAweDEwMDAwKSB8fCAodmFsID49IDB4MTEwMDAwKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKKyAgICAgICAgICAgICAgICAqbGVuID0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybih2YWwpOwogICAgIH0KLSAgICAvKgotICAgICAqIEFzc3VtZSBpdCdzIGEgZml4ZWQgbGVuZ3RoIGVuY29kaW5nICgxKSB3aXRoCi0gICAgICogYSBjb21wYXRpYmxlIGVuY29kaW5nIGZvciB0aGUgQVNDSUkgc2V0LCBzaW5jZQotICAgICAqIFhNTCBjb25zdHJ1Y3RzIG9ubHkgdXNlIDwgMTI4IGNoYXJzCi0gICAgICovCi0gICAgKmxlbiA9IDE7Ci0gICAgaWYgKCpjdHh0LT5pbnB1dC0+Y3VyID09IDB4RCkgewotCWlmIChjdHh0LT5pbnB1dC0+Y3VyWzFdID09IDB4QSkgewotCSAgICBjdHh0LT5pbnB1dC0+Y3VyKys7Ci0JfQotCXJldHVybigweEEpOwotICAgIH0KLSAgICByZXR1cm4oKGludCkgKmN0eHQtPmlucHV0LT5jdXIpOworCiBlbmNvZGluZ19lcnJvcjoKKyAgICAvKiBPbmx5IHJlcG9ydCB0aGUgZmlyc3QgZXJyb3IgKi8KKyAgICBpZiAoKGN0eHQtPmlucHV0LT5mbGFncyAmIFhNTF9JTlBVVF9FTkNPRElOR19FUlJPUikgPT0gMCkgeworICAgICAgICBpZiAoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIgPCA0KSB7CisgICAgICAgICAgICBfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hhciBidWZmZXJbMTUwXTsKKworICAgICAgICAgICAgc25wcmludGYoJmJ1ZmZlclswXSwgMTQ5LCAiQnl0ZXM6IDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyWzBdLCBjdHh0LT5pbnB1dC0+Y3VyWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmlucHV0LT5jdXJbMl0sIGN0eHQtPmlucHV0LT5jdXJbM10pOworICAgICAgICAgICAgX194bWxFcnJFbmNvZGluZyhjdHh0LCBYTUxfRVJSX0lOVkFMSURfQ0hBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSW5wdXQgaXMgbm90IHByb3BlciBVVEYtOCwgaW5kaWNhdGUgZW5jb2RpbmcgIVxuJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEJBRF9DQVNUIGJ1ZmZlciwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgY3R4dC0+aW5wdXQtPmZsYWdzIHw9IFhNTF9JTlBVVF9FTkNPRElOR19FUlJPUjsKKyAgICB9CisgICAgKmxlbiA9IDE7CisgICAgcmV0dXJuKDB4RkZGRCk7IC8qIFUrRkZGRCBSZXBsYWNlbWVudCBDaGFyYWN0ZXIgKi8KKworaW5jb21wbGV0ZV9zZXF1ZW5jZToKICAgICAvKgogICAgICAqIEFuIGVuY29kaW5nIHByb2JsZW0gbWF5IGFyaXNlIGZyb20gYSB0cnVuY2F0ZWQgaW5wdXQgYnVmZmVyCiAgICAgICogc3BsaXR0aW5nIGEgY2hhcmFjdGVyIGluIHRoZSBtaWRkbGUuIEluIHRoYXQgY2FzZSBkbyBub3QgcmFpc2UKLSAgICAgKiBhbiBlcnJvciBidXQgcmV0dXJuIDAgdG8gaW5kaWNhdGUgYW4gZW5kIG9mIHN0cmVhbSBwcm9ibGVtCisgICAgICogYW4gZXJyb3IgYnV0IHJldHVybiAwLiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiB3aGVuIHB1c2ggcGFyc2luZworICAgICAqIGNoYXIgZGF0YS4KICAgICAgKi8KLSAgICBpZiAoY3R4dC0+aW5wdXQtPmVuZCAtIGN0eHQtPmlucHV0LT5jdXIgPCA0KSB7Ci0JKmxlbiA9IDA7Ci0JcmV0dXJuKDApOwotICAgIH0KLQotICAgIC8qCi0gICAgICogSWYgd2UgZGV0ZWN0IGFuIFVURjggZXJyb3IgdGhhdCBwcm9iYWJseSBtZWFuIHRoYXQgdGhlCi0gICAgICogaW5wdXQgZW5jb2RpbmcgZGlkbid0IGdldCBwcm9wZXJseSBhZHZlcnRpc2VkIGluIHRoZQotICAgICAqIGRlY2xhcmF0aW9uIGhlYWRlci4gUmVwb3J0IHRoZSBlcnJvciBhbmQgc3dpdGNoIHRoZSBlbmNvZGluZwotICAgICAqIHRvIElTTy1MYXRpbi0xIChpZiB5b3UgZG9uJ3QgbGlrZSB0aGlzIHBvbGljeSwganVzdCBkZWNsYXJlIHRoZQotICAgICAqIGVuY29kaW5nICEpCi0gICAgICovCi0gICAgewotICAgICAgICBjaGFyIGJ1ZmZlclsxNTBdOwotCi0Jc25wcmludGYoJmJ1ZmZlclswXSwgMTQ5LCAiQnl0ZXM6IDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKLQkJCWN0eHQtPmlucHV0LT5jdXJbMF0sIGN0eHQtPmlucHV0LT5jdXJbMV0sCi0JCQljdHh0LT5pbnB1dC0+Y3VyWzJdLCBjdHh0LT5pbnB1dC0+Y3VyWzNdKTsKLQlfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotCQkgICAgICJJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhXG4lcyIsCi0JCSAgICAgQkFEX0NBU1QgYnVmZmVyLCBOVUxMKTsKLSAgICB9Ci0gICAgY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HXzg4NTlfMTsKLSAgICAqbGVuID0gMTsKLSAgICByZXR1cm4oKGludCkgKmN0eHQtPmlucHV0LT5jdXIpOworICAgICpsZW4gPSAwOworICAgIHJldHVybigwKTsKIH0KIAogLyoqCkBAIC02OTAsNiArOTc4LDggQEAKICAqIEBjdXI6ICBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNoYXIKICAqIEBsZW46ICBwb2ludGVyIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNoYXIgcmVhZAogICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLgorICoKICAqIFRoZSBjdXJyZW50IGNoYXIgdmFsdWUsIGlmIHVzaW5nIFVURi04IHRoaXMgbWF5IGFjdHVhbGx5IHNwYW4gbXVsdGlwbGUKICAqIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIuCiAgKgpAQCAtNjk3LDEwMyArOTg3LDE4IEBACiAgKi8KIAogaW50Ci14bWxTdHJpbmdDdXJyZW50Q2hhcih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKiBjdXIsIGludCAqbGVuKQotewotICAgIGlmICgobGVuID09IE5VTEwpIHx8IChjdXIgPT0gTlVMTCkpIHJldHVybigwKTsKLSAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmNoYXJzZXQgPT0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGOCkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogV2UgYXJlIHN1cHBvc2VkIHRvIGhhbmRsZSBVVEY4LCBjaGVjayBpdCdzIHZhbGlkCi0gICAgICAgICAqIEZyb20gcmZjMjA0NDogZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgdmFsdWVzIG9uIFVURi04OgotICAgICAgICAgKgotICAgICAgICAgKiBVQ1MtNCByYW5nZSAoaGV4LikgICAgICAgICAgIFVURi04IG9jdGV0IHNlcXVlbmNlIChiaW5hcnkpCi0gICAgICAgICAqIDAwMDAgMDAwMC0wMDAwIDAwN0YgICAweHh4eHh4eAotICAgICAgICAgKiAwMDAwIDAwODAtMDAwMCAwN0ZGICAgMTEweHh4eHggMTB4eHh4eHgKLSAgICAgICAgICogMDAwMCAwODAwLTAwMDAgRkZGRiAgIDExMTB4eHh4IDEweHh4eHh4IDEweHh4eHh4Ci0gICAgICAgICAqCi0gICAgICAgICAqIENoZWNrIGZvciB0aGUgMHgxMTAwMDAgbGltaXQgdG9vCi0gICAgICAgICAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyIGM7Ci0gICAgICAgIHVuc2lnbmVkIGludCB2YWw7Cit4bWxTdHJpbmdDdXJyZW50Q2hhcih4bWxQYXJzZXJDdHh0UHRyIGN0eHQgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmN1ciwgaW50ICpsZW4pIHsKKyAgICBpbnQgYzsKIAotICAgICAgICBjID0gKmN1cjsKLSAgICAgICAgaWYgKGMgJiAweDgwKSB7Ci0gICAgICAgICAgICBpZiAoKGN1clsxXSAmIDB4YzApICE9IDB4ODApCi0gICAgICAgICAgICAgICAgZ290byBlbmNvZGluZ19lcnJvcjsKLSAgICAgICAgICAgIGlmICgoYyAmIDB4ZTApID09IDB4ZTApIHsKKyAgICBpZiAoKGN1ciA9PSBOVUxMKSB8fCAobGVuID09IE5VTEwpKQorICAgICAgICByZXR1cm4oMCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoKGN1clsyXSAmIDB4YzApICE9IDB4ODApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKChjICYgMHhmMCkgPT0gMHhmMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKChjICYgMHhmOCkgIT0gMHhmMCkgfHwgKChjdXJbM10gJiAweGMwKSAhPSAweDgwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RpbmdfZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDQtYnl0ZSBjb2RlICovCi0gICAgICAgICAgICAgICAgICAgICpsZW4gPSA0OwotICAgICAgICAgICAgICAgICAgICB2YWwgPSAoY3VyWzBdICYgMHg3KSA8PCAxODsKLSAgICAgICAgICAgICAgICAgICAgdmFsIHw9IChjdXJbMV0gJiAweDNmKSA8PCAxMjsKLSAgICAgICAgICAgICAgICAgICAgdmFsIHw9IChjdXJbMl0gJiAweDNmKSA8PCA2OwotICAgICAgICAgICAgICAgICAgICB2YWwgfD0gY3VyWzNdICYgMHgzZjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiAzLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgICAgICAgICAqbGVuID0gMzsKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gKGN1clswXSAmIDB4ZikgPDwgMTI7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCB8PSAoY3VyWzFdICYgMHgzZikgPDwgNjsKLSAgICAgICAgICAgICAgICAgICAgdmFsIHw9IGN1clsyXSAmIDB4M2Y7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiAyLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgICAgICpsZW4gPSAyOwotICAgICAgICAgICAgICAgIHZhbCA9IChjdXJbMF0gJiAweDFmKSA8PCA2OwotICAgICAgICAgICAgICAgIHZhbCB8PSBjdXJbMV0gJiAweDNmOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFJU19DSEFSKHZhbCkpIHsKLQkgICAgICAgIHhtbEVyckVuY29kaW5nSW50KGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotCQkJCSAgIkNoYXIgMHglWCBvdXQgb2YgYWxsb3dlZCByYW5nZVxuIiwgdmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAodmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIDEtYnl0ZSBjb2RlICovCi0gICAgICAgICAgICAqbGVuID0gMTsKLSAgICAgICAgICAgIHJldHVybiAoKGludCkgKmN1cik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoKLSAgICAgKiBBc3N1bWUgaXQncyBhIGZpeGVkIGxlbmd0aCBlbmNvZGluZyAoMSkgd2l0aAotICAgICAqIGEgY29tcGF0aWJsZSBlbmNvZGluZyBmb3IgdGhlIEFTQ0lJIHNldCwgc2luY2UKLSAgICAgKiBYTUwgY29uc3RydWN0cyBvbmx5IHVzZSA8IDEyOCBjaGFycwotICAgICAqLwotICAgICpsZW4gPSAxOwotICAgIHJldHVybiAoKGludCkgKmN1cik7Ci1lbmNvZGluZ19lcnJvcjoKKyAgICAvKiBjdXIgaXMgemVyby10ZXJtaW5hdGVkLCBzbyB3ZSBjYW4gbGllIGFib3V0IGl0cyBsZW5ndGguICovCisgICAgKmxlbiA9IDQ7CisgICAgYyA9IHhtbEdldFVURjhDaGFyKGN1ciwgbGVuKTsKIAotICAgIC8qCi0gICAgICogQW4gZW5jb2RpbmcgcHJvYmxlbSBtYXkgYXJpc2UgZnJvbSBhIHRydW5jYXRlZCBpbnB1dCBidWZmZXIKLSAgICAgKiBzcGxpdHRpbmcgYSBjaGFyYWN0ZXIgaW4gdGhlIG1pZGRsZS4gSW4gdGhhdCBjYXNlIGRvIG5vdCByYWlzZQotICAgICAqIGFuIGVycm9yIGJ1dCByZXR1cm4gMCB0byBpbmRpY2F0ZSBhbiBlbmQgb2Ygc3RyZWFtIHByb2JsZW0KLSAgICAgKi8KLSAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmlucHV0ID09IE5VTEwpIHx8Ci0gICAgICAgIChjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1ciA8IDQpKSB7Ci0JKmxlbiA9IDA7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICAvKgotICAgICAqIElmIHdlIGRldGVjdCBhbiBVVEY4IGVycm9yIHRoYXQgcHJvYmFibHkgbWVhbiB0aGF0IHRoZQotICAgICAqIGlucHV0IGVuY29kaW5nIGRpZG4ndCBnZXQgcHJvcGVybHkgYWR2ZXJ0aXNlZCBpbiB0aGUKLSAgICAgKiBkZWNsYXJhdGlvbiBoZWFkZXIuIFJlcG9ydCB0aGUgZXJyb3IgYW5kIHN3aXRjaCB0aGUgZW5jb2RpbmcKLSAgICAgKiB0byBJU08tTGF0aW4tMSAoaWYgeW91IGRvbid0IGxpa2UgdGhpcyBwb2xpY3ksIGp1c3QgZGVjbGFyZSB0aGUKLSAgICAgKiBlbmNvZGluZyAhKQotICAgICAqLwotICAgIHsKLSAgICAgICAgY2hhciBidWZmZXJbMTUwXTsKLQotCXNucHJpbnRmKGJ1ZmZlciwgMTQ5LCAiQnl0ZXM6IDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKLQkJCWN0eHQtPmlucHV0LT5jdXJbMF0sIGN0eHQtPmlucHV0LT5jdXJbMV0sCi0JCQljdHh0LT5pbnB1dC0+Y3VyWzJdLCBjdHh0LT5pbnB1dC0+Y3VyWzNdKTsKLQlfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfSU5WQUxJRF9DSEFSLAotCQkgICAgICJJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhXG4lcyIsCi0JCSAgICAgQkFEX0NBU1QgYnVmZmVyLCBOVUxMKTsKLSAgICB9Ci0gICAgKmxlbiA9IDE7Ci0gICAgcmV0dXJuICgoaW50KSAqY3VyKTsKKyAgICByZXR1cm4oKGMgPCAwKSA/IDAgOiBjKTsKIH0KIAogLyoqCkBAIC04MDcsNyArMTAxMiw3IEBACiAgKi8KIGludAogeG1sQ29weUNoYXJNdWx0aUJ5dGUoeG1sQ2hhciAqb3V0LCBpbnQgdmFsKSB7Ci0gICAgaWYgKG91dCA9PSBOVUxMKSByZXR1cm4oMCk7CisgICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKHZhbCA8IDApKSByZXR1cm4oMCk7CiAgICAgLyoKICAgICAgKiBXZSBhcmUgc3VwcG9zZWQgdG8gaGFuZGxlIFVURjgsIGNoZWNrIGl0J3MgdmFsaWQKICAgICAgKiBGcm9tIHJmYzIwNDQ6IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHZhbHVlcyBvbiBVVEYtODoKQEAgLTgzMyw3ICsxMDM4LDcgQEAKIAkgICAgKm91dCsrPSAoKHZhbCA+PiBiaXRzKSAmIDB4M0YpIHwgMHg4MCA7CiAJcmV0dXJuIChvdXQgLSBzYXZlZG91dCk7CiAgICAgfQotICAgICpvdXQgPSAoeG1sQ2hhcikgdmFsOworICAgICpvdXQgPSB2YWw7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTg1MCwxMiArMTA1NSwxMiBAQAogCiBpbnQKIHhtbENvcHlDaGFyKGludCBsZW4gQVRUUklCVVRFX1VOVVNFRCwgeG1sQ2hhciAqb3V0LCBpbnQgdmFsKSB7Ci0gICAgaWYgKG91dCA9PSBOVUxMKSByZXR1cm4oMCk7CisgICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKHZhbCA8IDApKSByZXR1cm4oMCk7CiAgICAgLyogdGhlIGxlbiBwYXJhbWV0ZXIgaXMgaWdub3JlZCAqLwogICAgIGlmICAodmFsID49IDB4ODApIHsKIAlyZXR1cm4oeG1sQ29weUNoYXJNdWx0aUJ5dGUgKG91dCwgdmFsKSk7CiAgICAgfQotICAgICpvdXQgPSAoeG1sQ2hhcikgdmFsOworICAgICpvdXQgPSB2YWw7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTg2NSwyOTcgKzEwNzAsMjExIEBACiAgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQKLXhtbFN3aXRjaElucHV0RW5jb2RpbmdJbnQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoYW5kbGVyLCBpbnQgbGVuKTsKK3N0YXRpYyB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyCit4bWxEZXRlY3RFQkNESUMoeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQpIHsKKyAgICB4bWxDaGFyIG91dFsyMDBdOworICAgIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgaGFuZGxlcjsKKyAgICBpbnQgaW5sZW4sIG91dGxlbiwgcmVzLCBpOworCisgICAgLyoKKyAgICAgKiBUbyBkZXRlY3QgdGhlIEVCQ0RJQyBjb2RlIHBhZ2UsIHdlIGNvbnZlcnQgdGhlIGZpcnN0IDIwMCBieXRlcworICAgICAqIHRvIEVCQ0RJQy1VUyBhbmQgdHJ5IHRvIGZpbmQgdGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uLgorICAgICAqLworICAgIGhhbmRsZXIgPSB4bWxHZXRDaGFyRW5jb2RpbmdIYW5kbGVyKFhNTF9DSEFSX0VOQ09ESU5HX0VCQ0RJQyk7CisgICAgaWYgKGhhbmRsZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIG91dGxlbiA9IHNpemVvZihvdXQpIC0gMTsKKyAgICBpbmxlbiA9IGlucHV0LT5lbmQgLSBpbnB1dC0+Y3VyOworICAgIHJlcyA9IHhtbEVuY0lucHV0Q2h1bmsoaGFuZGxlciwgb3V0LCAmb3V0bGVuLCBpbnB1dC0+Y3VyLCAmaW5sZW4pOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4oaGFuZGxlcik7CisgICAgb3V0W291dGxlbl0gPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IG91dGxlbjsgaSsrKSB7CisgICAgICAgIGlmIChvdXRbaV0gPT0gJz4nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgob3V0W2ldID09ICdlJykgJiYKKyAgICAgICAgICAgICh4bWxTdHJuY21wKG91dCArIGksIEJBRF9DQVNUICJlbmNvZGluZyIsIDgpID09IDApKSB7CisgICAgICAgICAgICBpbnQgc3RhcnQsIGN1ciwgcXVvdGU7CisKKyAgICAgICAgICAgIGkgKz0gODsKKyAgICAgICAgICAgIHdoaWxlIChJU19CTEFOS19DSChvdXRbaV0pKQorICAgICAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAgIGlmIChvdXRbaSsrXSAhPSAnPScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3aGlsZSAoSVNfQkxBTktfQ0gob3V0W2ldKSkKKyAgICAgICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICBxdW90ZSA9IG91dFtpKytdOworICAgICAgICAgICAgaWYgKChxdW90ZSAhPSAnXCcnKSAmJiAocXVvdGUgIT0gJyInKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHN0YXJ0ID0gaTsKKyAgICAgICAgICAgIGN1ciA9IG91dFtpXTsKKyAgICAgICAgICAgIHdoaWxlICgoKGN1ciA+PSAnYScpICYmIChjdXIgPD0gJ3onKSkgfHwKKyAgICAgICAgICAgICAgICAgICAoKGN1ciA+PSAnQScpICYmIChjdXIgPD0gJ1onKSkgfHwKKyAgICAgICAgICAgICAgICAgICAoKGN1ciA+PSAnMCcpICYmIChjdXIgPD0gJzknKSkgfHwKKyAgICAgICAgICAgICAgICAgICAoY3VyID09ICcuJykgfHwgKGN1ciA9PSAnXycpIHx8CisgICAgICAgICAgICAgICAgICAgKGN1ciA9PSAnLScpKQorICAgICAgICAgICAgICAgIGN1ciA9IG91dFsrK2ldOworICAgICAgICAgICAgaWYgKGN1ciAhPSBxdW90ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFtpXSA9IDA7CisgICAgICAgICAgICB4bWxDaGFyRW5jQ2xvc2VGdW5jKGhhbmRsZXIpOworICAgICAgICAgICAgcmV0dXJuKHhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyKChjaGFyICopIG91dCArIHN0YXJ0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIElDVSBoYW5kbGVycyBhcmUgc3RhdGVmdWwsIHNvIHdlIGhhdmUgdG8gcmVjcmVhdGUgdGhlbS4KKyAgICAgKi8KKyAgICB4bWxDaGFyRW5jQ2xvc2VGdW5jKGhhbmRsZXIpOworICAgIHJldHVybih4bWxHZXRDaGFyRW5jb2RpbmdIYW5kbGVyKFhNTF9DSEFSX0VOQ09ESU5HX0VCQ0RJQykpOworfQorCiAvKioKICAqIHhtbFN3aXRjaEVuY29kaW5nOgogICogQGN0eHQ6ICB0aGUgcGFyc2VyIGNvbnRleHQKICAqIEBlbmM6ICB0aGUgZW5jb2RpbmcgdmFsdWUgKG51bWJlcikKICAqCi0gKiBjaGFuZ2UgdGhlIGlucHV0IGZ1bmN0aW9ucyB3aGVuIGRpc2NvdmVyaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcKLSAqIG9mIGEgZ2l2ZW4gZW50aXR5LgorICogVXNlIGVuY29kaW5nIHNwZWNpZmllZCBieSBlbnVtIHRvIGRlY29kZSBpbnB1dCBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW5mb3JjZSB0aGUgZW5jb2Rpbmcgb2YgY2h1bmtzIHBhc3NlZAorICogdG8geG1sUGFyc2VDaHVuay4KICAqCiAgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBvdGhlcndpc2UKICAqLwogaW50CiB4bWxTd2l0Y2hFbmNvZGluZyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbENoYXJFbmNvZGluZyBlbmMpCiB7Ci0gICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoYW5kbGVyOwotICAgIGludCBsZW4gPSAtMTsKKyAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXIgPSBOVUxMOworICAgIGludCBjaGVjayA9IDE7CiAgICAgaW50IHJldDsKIAotICAgIGlmIChjdHh0ID09IE5VTEwpIHJldHVybigtMSk7CisgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5pbnB1dCA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKC0xKTsKKwogICAgIHN3aXRjaCAoZW5jKSB7Ci0JY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19FUlJPUjoKLQkgICAgX194bWxFcnJFbmNvZGluZyhjdHh0LCBYTUxfRVJSX1VOS05PV05fRU5DT0RJTkcsCi0JICAgICAgICAgICAgICAgICAgICJlbmNvZGluZyB1bmtub3duXG4iLCBOVUxMLCBOVUxMKTsKLQkgICAgcmV0dXJuKC0xKTsKIAljYXNlIFhNTF9DSEFSX0VOQ09ESU5HX05PTkU6Ci0JICAgIC8qIGxldCdzIGFzc3VtZSBpdCdzIFVURi04IHdpdGhvdXQgdGhlIFhNTCBkZWNsICovCi0JICAgIGN0eHQtPmNoYXJzZXQgPSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4OwotCSAgICByZXR1cm4oMCk7CiAJY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4OgotCSAgICAvKiBkZWZhdWx0IGVuY29kaW5nLCBubyBjb252ZXJzaW9uIHNob3VsZCBiZSBuZWVkZWQgKi8KLQkgICAgY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HX1VURjg7CisgICAgICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfQVNDSUk6CisgICAgICAgICAgICBjaGVjayA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19FQkNESUM6CisgICAgICAgICAgICBoYW5kbGVyID0geG1sRGV0ZWN0RUJDRElDKGN0eHQtPmlucHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaGFuZGxlciA9IHhtbEdldENoYXJFbmNvZGluZ0hhbmRsZXIoZW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KIAotCSAgICAvKgotCSAgICAgKiBFcnJhdGEgb24gWE1MLTEuMCBKdW5lIDIwIDIwMDEKLQkgICAgICogU3BlY2lmaWMgaGFuZGxpbmcgb2YgdGhlIEJ5dGUgT3JkZXIgTWFyayBmb3IKLQkgICAgICogVVRGLTgKLQkgICAgICovCi0JICAgIGlmICgoY3R4dC0+aW5wdXQgIT0gTlVMTCkgJiYKLQkJKGN0eHQtPmlucHV0LT5jdXJbMF0gPT0gMHhFRikgJiYKLQkJKGN0eHQtPmlucHV0LT5jdXJbMV0gPT0gMHhCQikgJiYKLQkJKGN0eHQtPmlucHV0LT5jdXJbMl0gPT0gMHhCRikpIHsKLQkJY3R4dC0+aW5wdXQtPmN1ciArPSAzOwotCSAgICB9Ci0JICAgIHJldHVybigwKTsKLSAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX1VURjE2TEU6Ci0gICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkJFOgotICAgICAgICAvKlRoZSByYXcgaW5wdXQgY2hhcmFjdGVycyBhcmUgZW5jb2RlZAotICAgICAgICAgKmluIFVURi0xNi4gQXMgd2UgZXhwZWN0IHRoaXMgZnVuY3Rpb24KLSAgICAgICAgICp0byBiZSBjYWxsZWQgYWZ0ZXIgeG1sQ2hhckVuY0luRnVuYywgd2UgZXhwZWN0Ci0gICAgICAgICAqY3R4dC0+aW5wdXQtPmN1ciB0byBjb250YWluIFVURi04IGVuY29kZWQgY2hhcmFjdGVycy4KLSAgICAgICAgICpTbyB0aGUgcmF3IFVURjE2IEJ5dGUgT3JkZXIgTWFyawotICAgICAgICAgKmhhcyBhbHNvIGJlZW4gY29udmVydGVkIGludG8KLSAgICAgICAgICphbiBVVEYtOCBCT00uIExldCdzIHNraXAgdGhhdCBCT00uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmIChjdHh0LT5pbnB1dC0+Y3VyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoY3R4dC0+aW5wdXQtPmN1clswXSA9PSAweEVGKSAmJgotICAgICAgICAgICAgKGN0eHQtPmlucHV0LT5jdXJbMV0gPT0gMHhCQikgJiYKLSAgICAgICAgICAgIChjdHh0LT5pbnB1dC0+Y3VyWzJdID09IDB4QkYpKSB7Ci0gICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IDM7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gOTA7Ci0JYnJlYWs7Ci0gICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR19VQ1MyOgotICAgICAgICBsZW4gPSA5MDsKLQlicmVhazsKLSAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX1VDUzRCRToKLSAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX1VDUzRMRToKLSAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX1VDUzRfMjE0MzoKLSAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HX1VDUzRfMzQxMjoKLSAgICAgICAgbGVuID0gMTgwOwotCWJyZWFrOwotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfRUJDRElDOgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV8xOgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV8yOgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV8zOgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV80OgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV81OgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV82OgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV83OgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV84OgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfODg1OV85OgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfQVNDSUk6Ci0gICAgY2FzZSBYTUxfQ0hBUl9FTkNPRElOR18yMDIyX0pQOgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfU0hJRlRfSklTOgotICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfRVVDX0pQOgotICAgICAgICBsZW4gPSA0NTsKLQlicmVhazsKLSAgICB9Ci0gICAgaGFuZGxlciA9IHhtbEdldENoYXJFbmNvZGluZ0hhbmRsZXIoZW5jKTsKLSAgICBpZiAoaGFuZGxlciA9PSBOVUxMKSB7Ci0JLyoKLQkgKiBEZWZhdWx0IGhhbmRsZXJzLgotCSAqLwotCXN3aXRjaCAoZW5jKSB7Ci0JICAgIGNhc2UgWE1MX0NIQVJfRU5DT0RJTkdfQVNDSUk6Ci0JCS8qIGRlZmF1bHQgZW5jb2RpbmcsIG5vIGNvbnZlcnNpb24gc2hvdWxkIGJlIG5lZWRlZCAqLwotCQljdHh0LT5jaGFyc2V0ID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGODsKLQkJcmV0dXJuKDApOwotCSAgICBjYXNlIFhNTF9DSEFSX0VOQ09ESU5HXzg4NTlfMToKLQkJaWYgKChjdHh0LT5pbnB1dE5yID09IDEpICYmCi0JCSAgICAoY3R4dC0+ZW5jb2RpbmcgPT0gTlVMTCkgJiYKLQkJICAgIChjdHh0LT5pbnB1dCAhPSBOVUxMKSAmJgotCQkgICAgKGN0eHQtPmlucHV0LT5lbmNvZGluZyAhPSBOVUxMKSkgewotCQkgICAgY3R4dC0+ZW5jb2RpbmcgPSB4bWxTdHJkdXAoY3R4dC0+aW5wdXQtPmVuY29kaW5nKTsKLQkJfQotCQljdHh0LT5jaGFyc2V0ID0gZW5jOwotCQlyZXR1cm4oMCk7Ci0JICAgIGRlZmF1bHQ6Ci0JCV9feG1sRXJyRW5jb2RpbmcoY3R4dCwgWE1MX0VSUl9VTlNVUFBPUlRFRF9FTkNPRElORywKLSAgICAgICAgICAgICAgICAgICAgICAgICJlbmNvZGluZyBub3Qgc3VwcG9ydGVkOiAlc1xuIiwKLQkJCUJBRF9DQVNUIHhtbEdldENoYXJFbmNvZGluZ05hbWUoZW5jKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBUT0RPOiBXZSBjb3VsZCByZWNvdmVyIGZyb20gZXJyb3JzIGluIGV4dGVybmFsIGVudGl0aWVzCi0gICAgICAgICAgICAgICAgICogaWYgd2UgZGlkbid0IHN0b3AgdGhlIHBhcnNlci4gQnV0IG1vc3QgY2FsbGVycyBvZiB0aGlzCi0gICAgICAgICAgICAgICAgICogZnVuY3Rpb24gZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICB4bWxTdG9wUGFyc2VyKGN0eHQpOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0ID0geG1sU3dpdGNoSW5wdXRFbmNvZGluZ0ludChjdHh0LCBjdHh0LT5pbnB1dCwgaGFuZGxlciwgbGVuKTsKLSAgICBpZiAoKHJldCA8IDApIHx8IChjdHh0LT5lcnJObyA9PSBYTUxfSTE4Tl9DT05WX0ZBSUxFRCkpIHsKKyAgICBpZiAoKGNoZWNrKSAmJiAoaGFuZGxlciA9PSBOVUxMKSkgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lID0geG1sR2V0Q2hhckVuY29kaW5nTmFtZShlbmMpOworCisgICAgICAgIF9feG1sRXJyRW5jb2RpbmcoY3R4dCwgWE1MX0VSUl9VTlNVUFBPUlRFRF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAiZW5jb2Rpbmcgbm90IHN1cHBvcnRlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgQkFEX0NBU1QgKG5hbWUgPyBuYW1lIDogIjxudWxsPiIpLCBOVUxMKTsKICAgICAgICAgLyoKLQkgKiBvbiBlbmNvZGluZyBjb252ZXJzaW9uIGVycm9ycywgc3RvcCB0aGUgcGFyc2VyCi0JICovCisgICAgICAgICAqIFRPRE86IFdlIGNvdWxkIHJlY292ZXIgZnJvbSBlcnJvcnMgaW4gZXh0ZXJuYWwgZW50aXRpZXMKKyAgICAgICAgICogaWYgd2UgZGlkbid0IHN0b3AgdGhlIHBhcnNlci4gQnV0IG1vc3QgY2FsbGVycyBvZiB0aGlzCisgICAgICAgICAqIGZ1bmN0aW9uIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgICAqLwogICAgICAgICB4bWxTdG9wUGFyc2VyKGN0eHQpOwotCWN0eHQtPmVyck5vID0gWE1MX0kxOE5fQ09OVl9GQUlMRUQ7CisgICAgICAgIHJldHVybigtMSk7CiAgICAgfQorCisgICAgcmV0ID0geG1sU3dpdGNoSW5wdXRFbmNvZGluZyhjdHh0LCBjdHh0LT5pbnB1dCwgaGFuZGxlcik7CisKKyAgICBpZiAoKHJldCA+PSAwKSAmJiAoZW5jID09IFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpKSB7CisgICAgICAgIGN0eHQtPmlucHV0LT5mbGFncyAmPSB+WE1MX0lOUFVUX0hBU19FTkNPRElORzsKKyAgICB9CisKICAgICByZXR1cm4ocmV0KTsKIH0KIAogLyoqCi0gKiB4bWxTd2l0Y2hJbnB1dEVuY29kaW5nSW50OgotICogQGN0eHQ6ICB0aGUgcGFyc2VyIGNvbnRleHQKLSAqIEBpbnB1dDogIHRoZSBpbnB1dCBzdHJlYW0KLSAqIEBoYW5kbGVyOiAgdGhlIGVuY29kaW5nIGhhbmRsZXIKLSAqIEBsZW46ICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnZlcnQgZm9yIHRoZSBmaXJzdCBsaW5lIG9yIC0xCi0gKgotICogY2hhbmdlIHRoZSBpbnB1dCBmdW5jdGlvbnMgd2hlbiBkaXNjb3ZlcmluZyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nCi0gKiBvZiBhIGdpdmVuIGVudGl0eS4KLSAqCi0gKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludAoteG1sU3dpdGNoSW5wdXRFbmNvZGluZ0ludCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbFBhcnNlcklucHV0UHRyIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXIsIGludCBsZW4pCi17Ci0gICAgaW50IG5iY2hhcnM7Ci0KLSAgICBpZiAoaGFuZGxlciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gKC0xKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgaWYgKGlucHV0LT5idWYgIT0gTlVMTCkgewotCWN0eHQtPmNoYXJzZXQgPSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4OwotCi0gICAgICAgIGlmIChpbnB1dC0+YnVmLT5lbmNvZGVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDaGVjayBpbiBjYXNlIHRoZSBhdXRvIGVuY29kaW5nIGRldGVjdGlvbiB0cmlnZ2VyZWQKLSAgICAgICAgICAgICAqIGluIGFscmVhZHkuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChpbnB1dC0+YnVmLT5lbmNvZGVyID09IGhhbmRsZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqICJVVEYtMTYiIGNhbiBiZSB1c2VkIGZvciBib3RoIExFIGFuZCBCRQotICAgICAgICAgICAgIGlmICgoIXhtbFN0cm5jbXAoQkFEX0NBU1QgaW5wdXQtPmJ1Zi0+ZW5jb2Rlci0+bmFtZSwKLSAgICAgICAgICAgICBCQURfQ0FTVCAiVVRGLTE2IiwgNikpICYmCi0gICAgICAgICAgICAgKCF4bWxTdHJuY21wKEJBRF9DQVNUIGhhbmRsZXItPm5hbWUsCi0gICAgICAgICAgICAgQkFEX0NBU1QgIlVURi0xNiIsIDYpKSkgewotICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE5vdGU6IHRoaXMgaXMgYSBiaXQgZGFuZ2Vyb3VzLCBidXQgdGhhdCdzIHdoYXQgaXQKLSAgICAgICAgICAgICAqIHRha2VzIHRvIHVzZSBuZWFybHkgY29tcGF0aWJsZSBzaWduYXR1cmUgZm9yIGRpZmZlcmVudAotICAgICAgICAgICAgICogZW5jb2RpbmdzLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEZJWE1FOiBFbmNvZGVycyBtaWdodCBidWZmZXIgcGFydGlhbCBieXRlIHNlcXVlbmNlcywgc28KLSAgICAgICAgICAgICAqIHRoaXMgcHJvYmFibHkgY2FuJ3Qgd29yay4gV2Ugc2hvdWxkIHJldHVybiBhbiBlcnJvciBhbmQKLSAgICAgICAgICAgICAqIG1ha2Ugc3VyZSB0aGF0IGNhbGxlcnMgbmV2ZXIgdHJ5IHRvIHN3aXRjaCB0aGUgZW5jb2RpbmcKLSAgICAgICAgICAgICAqIHR3aWNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB4bWxDaGFyRW5jQ2xvc2VGdW5jKGlucHV0LT5idWYtPmVuY29kZXIpOwotICAgICAgICAgICAgaW5wdXQtPmJ1Zi0+ZW5jb2RlciA9IGhhbmRsZXI7Ci0gICAgICAgICAgICByZXR1cm4gKDApOwotICAgICAgICB9Ci0gICAgICAgIGlucHV0LT5idWYtPmVuY29kZXIgPSBoYW5kbGVyOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIElzIHRoZXJlIGFscmVhZHkgc29tZSBjb250ZW50IGRvd24gdGhlIHBpcGUgdG8gY29udmVydCA/Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoeG1sQnVmSXNFbXB0eShpbnB1dC0+YnVmLT5idWZmZXIpID09IDApIHsKLSAgICAgICAgICAgIGludCBwcm9jZXNzZWQ7Ci0JICAgIHVuc2lnbmVkIGludCB1c2U7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBTcGVjaWZpYyBoYW5kbGluZyBvZiB0aGUgQnl0ZSBPcmRlciBNYXJrIGZvcgotICAgICAgICAgICAgICogVVRGLTE2Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgoaGFuZGxlci0+bmFtZSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgICAgICghc3RyY21wKGhhbmRsZXItPm5hbWUsICJVVEYtMTZMRSIpIHx8Ci0gICAgICAgICAgICAgICAgICFzdHJjbXAoaGFuZGxlci0+bmFtZSwgIlVURi0xNiIpKSAmJgotICAgICAgICAgICAgICAgIChpbnB1dC0+Y3VyWzBdID09IDB4RkYpICYmIChpbnB1dC0+Y3VyWzFdID09IDB4RkUpKSB7Ci0gICAgICAgICAgICAgICAgaW5wdXQtPmN1ciArPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChoYW5kbGVyLT5uYW1lICE9IE5VTEwpICYmCi0gICAgICAgICAgICAgICAgKCFzdHJjbXAoaGFuZGxlci0+bmFtZSwgIlVURi0xNkJFIikpICYmCi0gICAgICAgICAgICAgICAgKGlucHV0LT5jdXJbMF0gPT0gMHhGRSkgJiYgKGlucHV0LT5jdXJbMV0gPT0gMHhGRikpIHsKLSAgICAgICAgICAgICAgICBpbnB1dC0+Y3VyICs9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRXJyYXRhIG9uIFhNTC0xLjAgSnVuZSAyMCAyMDAxCi0gICAgICAgICAgICAgKiBTcGVjaWZpYyBoYW5kbGluZyBvZiB0aGUgQnl0ZSBPcmRlciBNYXJrIGZvcgotICAgICAgICAgICAgICogVVRGLTgKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKChoYW5kbGVyLT5uYW1lICE9IE5VTEwpICYmCi0gICAgICAgICAgICAgICAgKCFzdHJjbXAoaGFuZGxlci0+bmFtZSwgIlVURi04IikpICYmCi0gICAgICAgICAgICAgICAgKGlucHV0LT5jdXJbMF0gPT0gMHhFRikgJiYKLSAgICAgICAgICAgICAgICAoaW5wdXQtPmN1clsxXSA9PSAweEJCKSAmJiAoaW5wdXQtPmN1clsyXSA9PSAweEJGKSkgewotICAgICAgICAgICAgICAgIGlucHV0LT5jdXIgKz0gMzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNocmluayB0aGUgY3VycmVudCBpbnB1dCBidWZmZXIuCi0gICAgICAgICAgICAgKiBNb3ZlIGl0IGFzIHRoZSByYXcgYnVmZmVyIGFuZCBjcmVhdGUgYSBuZXcgaW5wdXQgYnVmZmVyCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb2Nlc3NlZCA9IGlucHV0LT5jdXIgLSBpbnB1dC0+YmFzZTsKLSAgICAgICAgICAgIHhtbEJ1ZlNocmluayhpbnB1dC0+YnVmLT5idWZmZXIsIHByb2Nlc3NlZCk7Ci0gICAgICAgICAgICBpbnB1dC0+YnVmLT5yYXcgPSBpbnB1dC0+YnVmLT5idWZmZXI7Ci0gICAgICAgICAgICBpbnB1dC0+YnVmLT5idWZmZXIgPSB4bWxCdWZDcmVhdGUoKTsKLQkgICAgaW5wdXQtPmJ1Zi0+cmF3Y29uc3VtZWQgPSBwcm9jZXNzZWQ7Ci0JICAgIHVzZSA9IHhtbEJ1ZlVzZShpbnB1dC0+YnVmLT5yYXcpOwotCi0gICAgICAgICAgICBpZiAoY3R4dC0+aHRtbCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogY29udmVydCBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIHRoZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBuYmNoYXJzID0geG1sQ2hhckVuY0lucHV0KGlucHV0LT5idWYsIDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIGNvbnZlcnQganVzdCBlbm91Z2ggdG8gZ2V0Ci0gICAgICAgICAgICAgICAgICogJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Inh4eCI/PicKLSAgICAgICAgICAgICAgICAgKiBwYXJzZWQgd2l0aCB0aGUgYXV0b2RldGVjdGVkIGVuY29kaW5nCi0gICAgICAgICAgICAgICAgICogaW50byB0aGUgcGFyc2VyIHJlYWRpbmcgYnVmZmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG5iY2hhcnMgPSB4bWxDaGFyRW5jRmlyc3RMaW5lSW5wdXQoaW5wdXQtPmJ1ZiwgbGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhtbEJ1ZlJlc2V0SW5wdXQoaW5wdXQtPmJ1Zi0+YnVmZmVyLCBpbnB1dCk7Ci0gICAgICAgICAgICBpZiAobmJjaGFycyA8IDApIHsKLSAgICAgICAgICAgICAgICB4bWxFcnJJbnRlcm5hbChjdHh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzd2l0Y2hpbmcgZW5jb2Rpbmc6IGVuY29kZXIgZXJyb3JcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgICAgICB9Ci0JICAgIGlucHV0LT5idWYtPnJhd2NvbnN1bWVkICs9IHVzZSAtIHhtbEJ1ZlVzZShpbnB1dC0+YnVmLT5yYXcpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIHsKLQl4bWxFcnJJbnRlcm5hbChjdHh0LAotICAgICAgICAgICAgICAgICJzdGF0aWMgbWVtb3J5IGJ1ZmZlciBkb2Vzbid0IHN1cHBvcnQgZW5jb2RpbmdcbiIsIE5VTEwpOwotICAgICAgICAvKgotICAgICAgICAgKiBDYWxsZXJzIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBidWZmZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZQotICAgICAgICAgKiBlbmNvZGluZyBoYW5kbGVyLiB4bWxDaGFyRW5jQ2xvc2VGdW5jIGZyZWVzIHVucmVnaXN0ZXJlZAotICAgICAgICAgKiBoYW5kbGVycyBhbmQgYXZvaWRzIGEgbWVtb3J5IGxlYWsuCi0gICAgICAgICAqLwotICAgICAgICB4bWxDaGFyRW5jQ2xvc2VGdW5jKGhhbmRsZXIpOwotCXJldHVybiAoLTEpOwotICAgIH0KLX0KLQotLyoqCiAgKiB4bWxTd2l0Y2hJbnB1dEVuY29kaW5nOgogICogQGN0eHQ6ICB0aGUgcGFyc2VyIGNvbnRleHQKICAqIEBpbnB1dDogIHRoZSBpbnB1dCBzdHJlYW0KICAqIEBoYW5kbGVyOiAgdGhlIGVuY29kaW5nIGhhbmRsZXIKICAqCi0gKiBERVBSRUNBVEVEOiBVc2UgeG1sU3dpdGNoVG9FbmNvZGluZworICogREVQUkVDQVRFRDogSW50ZXJuYWwgZnVuY3Rpb24sIGRvbid0IHVzZS4KICAqCi0gKiBjaGFuZ2UgdGhlIGlucHV0IGZ1bmN0aW9ucyB3aGVuIGRpc2NvdmVyaW5nIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcKLSAqIG9mIGEgZ2l2ZW4gZW50aXR5LgorICogVXNlIGVuY29kaW5nIGhhbmRsZXIgdG8gZGVjb2RlIGlucHV0IGRhdGEuCiAgKgogICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgb3RoZXJ3aXNlCiAgKi8KIGludAogeG1sU3dpdGNoSW5wdXRFbmNvZGluZyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIHhtbFBhcnNlcklucHV0UHRyIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXIpIHsKLSAgICByZXR1cm4oeG1sU3dpdGNoSW5wdXRFbmNvZGluZ0ludChjdHh0LCBpbnB1dCwgaGFuZGxlciwgLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBoYW5kbGVyKQoreworICAgIGludCBuYmNoYXJzOworICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGluOworCisgICAgaWYgKChpbnB1dCA9PSBOVUxMKSB8fCAoaW5wdXQtPmJ1ZiA9PSBOVUxMKSkgeworICAgICAgICB4bWxDaGFyRW5jQ2xvc2VGdW5jKGhhbmRsZXIpOworCXJldHVybiAoLTEpOworICAgIH0KKyAgICBpbiA9IGlucHV0LT5idWY7CisKKyAgICBpbnB1dC0+ZmxhZ3MgfD0gWE1MX0lOUFVUX0hBU19FTkNPRElORzsKKworICAgIC8qCisgICAgICogVVRGLTggcmVxdWlyZXMgbm8gZW5jb2RpbmcgaGFuZGxlci4KKyAgICAgKi8KKyAgICBpZiAoKGhhbmRsZXIgIT0gTlVMTCkgJiYKKyAgICAgICAgKHhtbFN0cmNhc2VjbXAoQkFEX0NBU1QgaGFuZGxlci0+bmFtZSwgQkFEX0NBU1QgIlVURi04IikgPT0gMCkpIHsKKyAgICAgICAgeG1sQ2hhckVuY0Nsb3NlRnVuYyhoYW5kbGVyKTsKKyAgICAgICAgaGFuZGxlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKGluLT5lbmNvZGVyID09IGhhbmRsZXIpCisgICAgICAgIHJldHVybiAoMCk7CisKKyAgICBpZiAoaW4tPmVuY29kZXIgIT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBTd2l0Y2hpbmcgZW5jb2RpbmdzIGR1cmluZyBwYXJzaW5nIGlzIGEgcmVhbGx5IGJhZCBpZGVhLAorICAgICAgICAgKiBidXQgQ2hyb21pdW0gY2FuIHN3aXRjaCBiZXR3ZWVuIElTTy04ODU5LTEgYW5kIFVURi0xNiBiZWZvcmUKKyAgICAgICAgICogc2VwYXJhdGUgY2FsbHMgdG8geG1sUGFyc2VDaHVuay4KKyAgICAgICAgICoKKyAgICAgICAgICogVE9ETzogV2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgdGhlICJyYXciIGlucHV0IGJ1ZmZlciBpcyBlbXB0eSBhbmQKKyAgICAgICAgICogY29udmVydCB0aGUgb2xkIGNvbnRlbnQgdXNpbmcgdGhlIG9sZCBlbmNvZGVyLgorICAgICAgICAgKi8KKworICAgICAgICB4bWxDaGFyRW5jQ2xvc2VGdW5jKGluLT5lbmNvZGVyKTsKKyAgICAgICAgaW4tPmVuY29kZXIgPSBoYW5kbGVyOworICAgICAgICByZXR1cm4gKDApOworICAgIH0KKworICAgIGluLT5lbmNvZGVyID0gaGFuZGxlcjsKKworICAgIC8qCisgICAgICogSXMgdGhlcmUgYWxyZWFkeSBzb21lIGNvbnRlbnQgZG93biB0aGUgcGlwZSB0byBjb252ZXJ0ID8KKyAgICAgKi8KKyAgICBpZiAoeG1sQnVmSXNFbXB0eShpbi0+YnVmZmVyKSA9PSAwKSB7CisgICAgICAgIHNpemVfdCBwcm9jZXNzZWQ7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2hyaW5rIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlci4KKyAgICAgICAgICogTW92ZSBpdCBhcyB0aGUgcmF3IGJ1ZmZlciBhbmQgY3JlYXRlIGEgbmV3IGlucHV0IGJ1ZmZlcgorICAgICAgICAgKi8KKyAgICAgICAgcHJvY2Vzc2VkID0gaW5wdXQtPmN1ciAtIGlucHV0LT5iYXNlOworICAgICAgICB4bWxCdWZTaHJpbmsoaW4tPmJ1ZmZlciwgcHJvY2Vzc2VkKTsKKyAgICAgICAgaW5wdXQtPmNvbnN1bWVkICs9IHByb2Nlc3NlZDsKKyAgICAgICAgaW4tPnJhdyA9IGluLT5idWZmZXI7CisgICAgICAgIGluLT5idWZmZXIgPSB4bWxCdWZDcmVhdGUoKTsKKyAgICAgICAgaW4tPnJhd2NvbnN1bWVkID0gcHJvY2Vzc2VkOworCisgICAgICAgIG5iY2hhcnMgPSB4bWxDaGFyRW5jSW5wdXQoaW4pOworICAgICAgICB4bWxCdWZSZXNldElucHV0KGluLT5idWZmZXIsIGlucHV0KTsKKyAgICAgICAgaWYgKG5iY2hhcnMgPCAwKSB7CisgICAgICAgICAgICAvKiBUT0RPOiBUaGlzIGNvdWxkIGJlIGFuIG91dCBvZiBtZW1vcnkgb3IgYW4gZW5jb2RpbmcgZXJyb3IuICovCisgICAgICAgICAgICB4bWxFcnJJbnRlcm5hbChjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInN3aXRjaGluZyBlbmNvZGluZzogZW5jb2RlciBlcnJvclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgeG1sSGFsdFBhcnNlcihjdHh0KTsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAoMCk7CiB9CiAKIC8qKgpAQCAtMTE2Myw4ICsxMjgyLDEwIEBACiAgKiBAY3R4dDogIHRoZSBwYXJzZXIgY29udGV4dAogICogQGhhbmRsZXI6ICB0aGUgZW5jb2RpbmcgaGFuZGxlcgogICoKLSAqIGNoYW5nZSB0aGUgaW5wdXQgZnVuY3Rpb25zIHdoZW4gZGlzY292ZXJpbmcgdGhlIGNoYXJhY3RlciBlbmNvZGluZwotICogb2YgYSBnaXZlbiBlbnRpdHkuCisgKiBVc2UgZW5jb2RpbmcgaGFuZGxlciB0byBkZWNvZGUgaW5wdXQgZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVuZm9yY2UgdGhlIGVuY29kaW5nIG9mIGNodW5rcyBwYXNzZWQKKyAqIHRvIHhtbFBhcnNlQ2h1bmsuCiAgKgogICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgb3RoZXJ3aXNlCiAgKi8KQEAgLTExNzMsNyArMTI5NCwxODkgQEAKIHsKICAgICBpZiAoY3R4dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybih4bWxTd2l0Y2hJbnB1dEVuY29kaW5nSW50KGN0eHQsIGN0eHQtPmlucHV0LCBoYW5kbGVyLCAtMSkpOworICAgIHJldHVybih4bWxTd2l0Y2hJbnB1dEVuY29kaW5nKGN0eHQsIGN0eHQtPmlucHV0LCBoYW5kbGVyKSk7Cit9CisKKy8qKgorICogeG1sRGV0ZWN0RW5jb2Rpbmc6CisgKiBAY3R4dDogIHRoZSBwYXJzZXIgY29udGV4dAorICoKKyAqIEhhbmRsZSBvcHRpb25hbCBCT00sIGRldGVjdCBhbmQgc3dpdGNoIHRvIGVuY29kaW5nLgorICoKKyAqIEFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgYXQgbGVhc3QgZm91ciBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyLgorICovCit2b2lkCit4bWxEZXRlY3RFbmNvZGluZyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICBjb25zdCB4bWxDaGFyICppbjsKKyAgICB4bWxDaGFyRW5jb2RpbmcgZW5jOworICAgIGludCBib21TaXplOworICAgIGludCBhdXRvRmxhZyA9IDA7CisKKyAgICBpZiAoeG1sUGFyc2VyR3JvdyhjdHh0KSA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBpbiA9IGN0eHQtPmlucHV0LT5jdXI7CisgICAgaWYgKGN0eHQtPmlucHV0LT5lbmQgLSBpbiA8IDQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjdHh0LT5pbnB1dC0+ZmxhZ3MgJiBYTUxfSU5QVVRfSEFTX0VOQ09ESU5HKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHRoZSBlbmNvZGluZyB3YXMgYWxyZWFkeSBzZXQsIG9ubHkgc2tpcCB0aGUgQk9NIHdoaWNoIHdhcworICAgICAgICAgKiBwb3NzaWJseSBkZWNvZGVkIHRvIFVURi04LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChpblswXSA9PSAweEVGKSAmJiAoaW5bMV0gPT0gMHhCQikgJiYgKGluWzJdID09IDB4QkYpKSB7CisgICAgICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IDM7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jID0gWE1MX0NIQVJfRU5DT0RJTkdfTk9ORTsKKyAgICBib21TaXplID0gMDsKKworICAgIHN3aXRjaCAoaW5bMF0pIHsKKyAgICAgICAgY2FzZSAweDAwOgorICAgICAgICAgICAgaWYgKChpblsxXSA9PSAweDAwKSAmJiAoaW5bMl0gPT0gMHgwMCkgJiYgKGluWzNdID09IDB4M0MpKSB7CisgICAgICAgICAgICAgICAgZW5jID0gWE1MX0NIQVJfRU5DT0RJTkdfVUNTNEJFOworICAgICAgICAgICAgICAgIGF1dG9GbGFnID0gWE1MX0lOUFVUX0FVVE9fT1RIRVI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChpblsxXSA9PSAweDNDKSAmJiAoaW5bMl0gPT0gMHgwMCkgJiYgKGluWzNdID09IDB4M0YpKSB7CisgICAgICAgICAgICAgICAgZW5jID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZCRTsKKyAgICAgICAgICAgICAgICBhdXRvRmxhZyA9IFhNTF9JTlBVVF9BVVRPX1VURjE2QkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4M0M6CisgICAgICAgICAgICBpZiAoaW5bMV0gPT0gMHgwMCkgeworICAgICAgICAgICAgICAgIGlmICgoaW5bMl0gPT0gMHgwMCkgJiYgKGluWzNdID09IDB4MDApKSB7CisgICAgICAgICAgICAgICAgICAgIGVuYyA9IFhNTF9DSEFSX0VOQ09ESU5HX1VDUzRMRTsKKyAgICAgICAgICAgICAgICAgICAgYXV0b0ZsYWcgPSBYTUxfSU5QVVRfQVVUT19PVEhFUjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChpblsyXSA9PSAweDNGKSAmJiAoaW5bM10gPT0gMHgwMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZMRTsKKyAgICAgICAgICAgICAgICAgICAgYXV0b0ZsYWcgPSBYTUxfSU5QVVRfQVVUT19VVEYxNkxFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg0QzoKKwkgICAgaWYgKChpblsxXSA9PSAweDZGKSAmJiAoaW5bMl0gPT0gMHhBNykgJiYgKGluWzNdID09IDB4OTQpKSB7CisJICAgICAgICBlbmMgPSBYTUxfQ0hBUl9FTkNPRElOR19FQkNESUM7CisgICAgICAgICAgICAgICAgYXV0b0ZsYWcgPSBYTUxfSU5QVVRfQVVUT19PVEhFUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHhFRjoKKyAgICAgICAgICAgIGlmICgoaW5bMV0gPT0gMHhCQikgJiYgKGluWzJdID09IDB4QkYpKSB7CisgICAgICAgICAgICAgICAgZW5jID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGODsKKyAgICAgICAgICAgICAgICBhdXRvRmxhZyA9IFhNTF9JTlBVVF9BVVRPX1VURjg7CisgICAgICAgICAgICAgICAgYm9tU2l6ZSA9IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDB4RkU6CisgICAgICAgICAgICBpZiAoaW5bMV0gPT0gMHhGRikgeworICAgICAgICAgICAgICAgIGVuYyA9IFhNTF9DSEFSX0VOQ09ESU5HX1VURjE2QkU7CisgICAgICAgICAgICAgICAgYXV0b0ZsYWcgPSBYTUxfSU5QVVRfQVVUT19VVEYxNkJFOworICAgICAgICAgICAgICAgIGJvbVNpemUgPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweEZGOgorICAgICAgICAgICAgaWYgKGluWzFdID09IDB4RkUpIHsKKyAgICAgICAgICAgICAgICBlbmMgPSBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFOworICAgICAgICAgICAgICAgIGF1dG9GbGFnID0gWE1MX0lOUFVUX0FVVE9fVVRGMTZMRTsKKyAgICAgICAgICAgICAgICBib21TaXplID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChib21TaXplID4gMCkgeworICAgICAgICBjdHh0LT5pbnB1dC0+Y3VyICs9IGJvbVNpemU7CisgICAgfQorCisgICAgaWYgKGVuYyAhPSBYTUxfQ0hBUl9FTkNPRElOR19OT05FKSB7CisgICAgICAgIGN0eHQtPmlucHV0LT5mbGFncyB8PSBhdXRvRmxhZzsKKyAgICAgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgZW5jKTsKKyAgICB9Cit9CisKKy8qKgorICogeG1sU2V0RGVjbGFyZWRFbmNvZGluZzoKKyAqIEBjdHh0OiAgdGhlIHBhcnNlciBjb250ZXh0CisgKiBAZW5jb2Rpbmc6ICBkZWNsYXJlZCBlbmNvZGluZworICoKKyAqIFNldCB0aGUgZW5jb2RpbmcgZnJvbSBhIGRlY2xhcmF0aW9uIGluIHRoZSBkb2N1bWVudC4KKyAqCisgKiBJZiBubyBlbmNvZGluZyB3YXMgc2V0IHlldCwgc3dpdGNoIHRoZSBlbmNvZGluZy4gT3RoZXJ3aXNlLCBvbmx5IHdhcm4KKyAqIGFib3V0IGVuY29kaW5nIG1pc21hdGNoZXMuCisgKgorICogVGFrZXMgb3duZXJzaGlwIG9mICdlbmNvZGluZycuCisgKi8KK3ZvaWQKK3htbFNldERlY2xhcmVkRW5jb2RpbmcoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxDaGFyICplbmNvZGluZykgeworICAgIGlmIChjdHh0LT5lbmNvZGluZyAhPSBOVUxMKQorICAgICAgICB4bWxGcmVlKCh4bWxDaGFyICopIGN0eHQtPmVuY29kaW5nKTsKKyAgICBjdHh0LT5lbmNvZGluZyA9IGVuY29kaW5nOworCisgICAgaWYgKCgoY3R4dC0+aW5wdXQtPmZsYWdzICYgWE1MX0lOUFVUX0hBU19FTkNPRElORykgPT0gMCkgJiYKKyAgICAgICAgKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0lHTk9SRV9FTkMpID09IDApKSB7CisgICAgICAgIHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgaGFuZGxlcjsKKworICAgICAgICBoYW5kbGVyID0geG1sRmluZENoYXJFbmNvZGluZ0hhbmRsZXIoKGNvbnN0IGNoYXIgKikgZW5jb2RpbmcpOworICAgICAgICBpZiAoaGFuZGxlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBfX3htbEVyckVuY29kaW5nKGN0eHQsIFhNTF9FUlJfVU5TVVBQT1JURURfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBlbmNvZGluZzogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHhtbFN3aXRjaFRvRW5jb2RpbmcoY3R4dCwgaGFuZGxlcik7CisgICAgICAgIGN0eHQtPmlucHV0LT5mbGFncyB8PSBYTUxfSU5QVVRfVVNFU19FTkNfREVDTDsKKyAgICB9IGVsc2UgaWYgKGN0eHQtPmlucHV0LT5mbGFncyAmIFhNTF9JTlBVVF9BVVRPX0VOQ09ESU5HKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICphbGxvd2VkVVRGOFtdID0geworICAgICAgICAgICAgIlVURi04IiwgIlVURjgiLCBOVUxMCisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICphbGxvd2VkVVRGMTZMRVtdID0geworICAgICAgICAgICAgIlVURi0xNiIsICJVVEYtMTZMRSIsICJVVEYxNiIsIE5VTEwKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmFsbG93ZWRVVEYxNkJFW10gPSB7CisgICAgICAgICAgICAiVVRGLTE2IiwgIlVURi0xNkJFIiwgIlVURjE2IiwgTlVMTAorICAgICAgICB9OworICAgICAgICBjb25zdCBjaGFyICoqYWxsb3dlZCA9IE5VTEw7CisgICAgICAgIGNvbnN0IGNoYXIgKmF1dG9FbmMgPSBOVUxMOworCisgICAgICAgIHN3aXRjaCAoY3R4dC0+aW5wdXQtPmZsYWdzICYgWE1MX0lOUFVUX0FVVE9fRU5DT0RJTkcpIHsKKyAgICAgICAgICAgIGNhc2UgWE1MX0lOUFVUX0FVVE9fVVRGODoKKyAgICAgICAgICAgICAgICBhbGxvd2VkID0gYWxsb3dlZFVURjg7CisgICAgICAgICAgICAgICAgYXV0b0VuYyA9ICJVVEYtOCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFhNTF9JTlBVVF9BVVRPX1VURjE2TEU6CisgICAgICAgICAgICAgICAgYWxsb3dlZCA9IGFsbG93ZWRVVEYxNkxFOworICAgICAgICAgICAgICAgIGF1dG9FbmMgPSAiVVRGLTE2TEUiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYTUxfSU5QVVRfQVVUT19VVEYxNkJFOgorICAgICAgICAgICAgICAgIGFsbG93ZWQgPSBhbGxvd2VkVVRGMTZCRTsKKyAgICAgICAgICAgICAgICBhdXRvRW5jID0gIlVURi0xNkJFIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvd2VkICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKipwOworICAgICAgICAgICAgaW50IG1hdGNoID0gMDsKKworICAgICAgICAgICAgZm9yIChwID0gYWxsb3dlZDsgKnAgIT0gTlVMTDsgcCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHhtbFN0cmNhc2VjbXAoZW5jb2RpbmcsIEJBRF9DQVNUICpwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobWF0Y2ggPT0gMCkgeworICAgICAgICAgICAgICAgIHhtbFdhcm5pbmdNc2coY3R4dCwgWE1MX1dBUl9FTkNPRElOR19NSVNNQVRDSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmNvZGluZyAnJXMnIGRvZXNuJ3QgbWF0Y2ggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG8tZGV0ZWN0ZWQgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBCQURfQ0FTVCBhdXRvRW5jKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE5NCw3ICsxNDk3LDYgQEAKIAogICAgIGlmIChpbnB1dC0+ZmlsZW5hbWUgIT0gTlVMTCkgeG1sRnJlZSgoY2hhciAqKSBpbnB1dC0+ZmlsZW5hbWUpOwogICAgIGlmIChpbnB1dC0+ZGlyZWN0b3J5ICE9IE5VTEwpIHhtbEZyZWUoKGNoYXIgKikgaW5wdXQtPmRpcmVjdG9yeSk7Ci0gICAgaWYgKGlucHV0LT5lbmNvZGluZyAhPSBOVUxMKSB4bWxGcmVlKChjaGFyICopIGlucHV0LT5lbmNvZGluZyk7CiAgICAgaWYgKGlucHV0LT52ZXJzaW9uICE9IE5VTEwpIHhtbEZyZWUoKGNoYXIgKikgaW5wdXQtPnZlcnNpb24pOwogICAgIGlmICgoaW5wdXQtPmZyZWUgIT0gTlVMTCkgJiYgKGlucHV0LT5iYXNlICE9IE5VTEwpKQogICAgICAgICBpbnB1dC0+ZnJlZSgoeG1sQ2hhciAqKSBpbnB1dC0+YmFzZSk7CkBAIC0xMjIzLDE1ICsxNTI1LDE5IEBACiAgICAgbWVtc2V0KGlucHV0LCAwLCBzaXplb2YoeG1sUGFyc2VySW5wdXQpKTsKICAgICBpbnB1dC0+bGluZSA9IDE7CiAgICAgaW5wdXQtPmNvbCA9IDE7Ci0gICAgaW5wdXQtPnN0YW5kYWxvbmUgPSAtMTsKIAogICAgIC8qCiAgICAgICogSWYgdGhlIGNvbnRleHQgaXMgTlVMTCB0aGUgaWQgY2Fubm90IGJlIGluaXRpYWxpemVkLCBidXQgdGhhdAogICAgICAqIHNob3VsZCBub3QgaGFwcGVuIHdoaWxlIHBhcnNpbmcgd2hpY2ggaXMgdGhlIHNpdHVhdGlvbiB3aGVyZQogICAgICAqIHRoZSBpZCBpcyBhY3R1YWxseSBuZWVkZWQuCiAgICAgICovCi0gICAgaWYgKGN0eHQgIT0gTlVMTCkKKyAgICBpZiAoY3R4dCAhPSBOVUxMKSB7CisgICAgICAgIGlmIChpbnB1dC0+aWQgPj0gSU5UX01BWCkgeworICAgICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsICJJbnB1dCBJRCBvdmVyZmxvd1xuIik7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KICAgICAgICAgaW5wdXQtPmlkID0gY3R4dC0+aW5wdXRfaWQrKzsKKyAgICB9CiAKICAgICByZXR1cm4oaW5wdXQpOwogfQpAQCAtMTI3NSw2ICsxNTgxLDggQEAKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAZW50aXR5OiAgYW4gRW50aXR5IHBvaW50ZXIKICAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiwgZG8gbm90IHVzZS4KKyAqCiAgKiBDcmVhdGUgYSBuZXcgaW5wdXQgc3RyZWFtIGJhc2VkIG9uIGFuIHhtbEVudGl0eVB0cgogICoKICAqIFJldHVybnMgdGhlIG5ldyBpbnB1dCBzdHJlYW0gb3IgTlVMTApAQCAtMTI5OSw4ICsxNjA3LDExIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFhNTF9FWFRFUk5BTF9HRU5FUkFMX1BBUlNFRF9FTlRJVFk6CiAgICAgICAgICAgICBjYXNlIFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZOgotCQlyZXR1cm4oeG1sTG9hZEV4dGVybmFsRW50aXR5KChjaGFyICopIGVudGl0eS0+VVJJLAotCQkgICAgICAgKGNoYXIgKikgZW50aXR5LT5FeHRlcm5hbElELCBjdHh0KSk7CisJCWlucHV0ID0geG1sTG9hZEV4dGVybmFsRW50aXR5KChjaGFyICopIGVudGl0eS0+VVJJLAorCQkgICAgICAgKGNoYXIgKikgZW50aXR5LT5FeHRlcm5hbElELCBjdHh0KTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmVudGl0eSA9IGVudGl0eTsKKyAgICAgICAgICAgICAgICByZXR1cm4oaW5wdXQpOwogICAgICAgICAgICAgY2FzZSBYTUxfSU5URVJOQUxfR0VORVJBTF9FTlRJVFk6CiAJICAgICAgICB4bWxFcnJJbnRlcm5hbChjdHh0LAogCQkgICAgICAiSW50ZXJuYWwgZW50aXR5ICVzIHdpdGhvdXQgY29udGVudCAhXG4iLApAQCAtMTMzMSw2ICsxNjQyLDcgQEAKICAgICBpbnB1dC0+Y3VyID0gZW50aXR5LT5jb250ZW50OwogICAgIGlucHV0LT5sZW5ndGggPSBlbnRpdHktPmxlbmd0aDsKICAgICBpbnB1dC0+ZW5kID0gJmVudGl0eS0+Y29udGVudFtpbnB1dC0+bGVuZ3RoXTsKKyAgICBpbnB1dC0+ZW50aXR5ID0gZW50aXR5OwogICAgIHJldHVybihpbnB1dCk7CiB9CiAKQEAgLTEzNDUsNiArMTY1Nyw3IEBACiB4bWxQYXJzZXJJbnB1dFB0cgogeG1sTmV3U3RyaW5nSW5wdXRTdHJlYW0oeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpidWZmZXIpIHsKICAgICB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dDsKKyAgICB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBidWY7CiAKICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgeG1sRXJySW50ZXJuYWwoY3R4dCwgInhtbE5ld1N0cmluZ0lucHV0U3RyZWFtIHN0cmluZyA9IE5VTExcbiIsCkBAIC0xMzU0LDE1ICsxNjY3LDE5IEBACiAgICAgaWYgKHhtbFBhcnNlckRlYnVnRW50aXRpZXMpCiAJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAJCSJuZXcgZml4ZWQgaW5wdXQ6ICUuMzBzXG4iLCBidWZmZXIpOworICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RyaW5nKGJ1ZmZlcik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisJeG1sRXJyTWVtb3J5KGN0eHQsIE5VTEwpOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQogICAgIGlucHV0ID0geG1sTmV3SW5wdXRTdHJlYW0oY3R4dCk7CiAgICAgaWYgKGlucHV0ID09IE5VTEwpIHsKICAgICAgICAgeG1sRXJyTWVtb3J5KGN0eHQsICAiY291bGRuJ3QgYWxsb2NhdGUgYSBuZXcgaW5wdXQgc3RyZWFtXG4iKTsKKwl4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoYnVmKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIGlucHV0LT5iYXNlID0gYnVmZmVyOwotICAgIGlucHV0LT5jdXIgPSBidWZmZXI7Ci0gICAgaW5wdXQtPmxlbmd0aCA9IHhtbFN0cmxlbihidWZmZXIpOwotICAgIGlucHV0LT5lbmQgPSAmYnVmZmVyW2lucHV0LT5sZW5ndGhdOworICAgIGlucHV0LT5idWYgPSBidWY7CisgICAgeG1sQnVmUmVzZXRJbnB1dChpbnB1dC0+YnVmLT5idWZmZXIsIGlucHV0KTsKICAgICByZXR1cm4oaW5wdXQpOwogfQogCkBAIC0xNDMyLDE2ICsxNzQ5LDE5IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKioKLSAqIHhtbEluaXRQYXJzZXJDdHh0OgotICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKKyAqIHhtbEluaXRTQVhQYXJzZXJDdHh0OgorICogQGN0eHQ6ICBYTUwgcGFyc2VyIGNvbnRleHQKKyAqIEBzYXg6ICBTQVggaGFuZGxlcnQKKyAqIEB1c2VyRGF0YTogIHVzZXIgZGF0YQogICoKLSAqIEluaXRpYWxpemUgYSBwYXJzZXIgY29udGV4dAorICogSW5pdGlhbGl6ZSBhIFNBWCBwYXJzZXIgY29udGV4dAogICoKICAqIFJldHVybnMgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwogCi1pbnQKLXhtbEluaXRQYXJzZXJDdHh0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCkKK3N0YXRpYyBpbnQKK3htbEluaXRTQVhQYXJzZXJDdHh0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY29uc3QgeG1sU0FYSGFuZGxlciAqc2F4LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCiB7CiAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CiAKQEAgLTE0NjYsOCArMTc4NiwxOSBAQAogICAgICAgICB4bWxFcnJNZW1vcnkoTlVMTCwgImNhbm5vdCBpbml0aWFsaXplIHBhcnNlciBjb250ZXh0XG4iKTsKIAlyZXR1cm4oLTEpOwogICAgIH0KLSAgICBlbHNlCisgICAgaWYgKHNheCA9PSBOVUxMKSB7CisJbWVtc2V0KGN0eHQtPnNheCwgMCwgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKICAgICAgICAgeG1sU0FYVmVyc2lvbihjdHh0LT5zYXgsIDIpOworICAgICAgICBjdHh0LT51c2VyRGF0YSA9IGN0eHQ7CisgICAgfSBlbHNlIHsKKwlpZiAoc2F4LT5pbml0aWFsaXplZCA9PSBYTUxfU0FYMl9NQUdJQykgeworCSAgICBtZW1jcHkoY3R4dC0+c2F4LCBzYXgsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisgICAgICAgIH0gZWxzZSB7CisJICAgIG1lbXNldChjdHh0LT5zYXgsIDAsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisJICAgIG1lbWNweShjdHh0LT5zYXgsIHNheCwgc2l6ZW9mKHhtbFNBWEhhbmRsZXJWMSkpOworICAgICAgICB9CisgICAgICAgIGN0eHQtPnVzZXJEYXRhID0gdXNlckRhdGEgPyB1c2VyRGF0YSA6IGN0eHQ7CisgICAgfQogCiAgICAgY3R4dC0+bWF4YXR0cyA9IDA7CiAgICAgY3R4dC0+YXR0cyA9IE5VTEw7CkBAIC0xNTY1LDcgKzE4OTYsNiBAQAogICAgIGN0eHQtPnNwYWNlTWF4ID0gMTA7CiAgICAgY3R4dC0+c3BhY2VUYWJbMF0gPSAtMTsKICAgICBjdHh0LT5zcGFjZSA9ICZjdHh0LT5zcGFjZVRhYlswXTsKLSAgICBjdHh0LT51c2VyRGF0YSA9IGN0eHQ7CiAgICAgY3R4dC0+bXlEb2MgPSBOVUxMOwogICAgIGN0eHQtPndlbGxGb3JtZWQgPSAxOwogICAgIGN0eHQtPm5zV2VsbEZvcm1lZCA9IDE7CkBAIC0xNjA3LDE3ICsxOTM3LDQzIEBACiAgICAgY3R4dC0+aW5TdWJzZXQgPSAwOwogICAgIGN0eHQtPmVyck5vID0gWE1MX0VSUl9PSzsKICAgICBjdHh0LT5kZXB0aCA9IDA7Ci0gICAgY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HX1VURjg7CiAgICAgY3R4dC0+Y2F0YWxvZ3MgPSBOVUxMOwotICAgIGN0eHQtPm5iZW50aXRpZXMgPSAwOwogICAgIGN0eHQtPnNpemVlbnRpdGllcyA9IDA7CiAgICAgY3R4dC0+c2l6ZWVudGNvcHkgPSAwOwogICAgIGN0eHQtPmlucHV0X2lkID0gMTsKKyAgICBjdHh0LT5tYXhBbXBsID0gWE1MX01BWF9BTVBMSUZJQ0FUSU9OX0RFRkFVTFQ7CiAgICAgeG1sSW5pdE5vZGVJbmZvU2VxKCZjdHh0LT5ub2RlX3NlcSk7CisKKyAgICBpZiAoY3R4dC0+bnNkYiA9PSBOVUxMKSB7CisgICAgICAgIGN0eHQtPm5zZGIgPSB4bWxQYXJzZXJOc0NyZWF0ZSgpOworICAgICAgICBpZiAoY3R4dC0+bnNkYiA9PSBOVUxMKSB7CisgICAgICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuKDApOwogfQogCiAvKioKKyAqIHhtbEluaXRQYXJzZXJDdHh0OgorICogQGN0eHQ6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKKyAqCisgKiBERVBSRUNBVEVEOiBJbnRlcm5hbCBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIG1hZGUgcHJpdmF0ZSBpbiBhIGZ1dHVyZQorICogdmVyc2lvbi4KKyAqCisgKiBJbml0aWFsaXplIGEgcGFyc2VyIGNvbnRleHQKKyAqCisgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yCisgKi8KKworaW50Cit4bWxJbml0UGFyc2VyQ3R4dCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpCit7CisgICAgcmV0dXJuKHhtbEluaXRTQVhQYXJzZXJDdHh0KGN0eHQsIE5VTEwsIE5VTEwpKTsKK30KKworLyoqCiAgKiB4bWxGcmVlUGFyc2VyQ3R4dDoKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKgpAQCAtMTY1NSw3ICsyMDExLDkgQEAKICAgICBpZiAoY3R4dC0+dmN0eHQubm9kZVRhYiAhPSBOVUxMKSB4bWxGcmVlKGN0eHQtPnZjdHh0Lm5vZGVUYWIpOwogICAgIGlmIChjdHh0LT5hdHRzICE9IE5VTEwpIHhtbEZyZWUoKHhtbENoYXIgKiAqKWN0eHQtPmF0dHMpOwogICAgIGlmIChjdHh0LT5kaWN0ICE9IE5VTEwpIHhtbERpY3RGcmVlKGN0eHQtPmRpY3QpOwotICAgIGlmIChjdHh0LT5uc1RhYiAhPSBOVUxMKSB4bWxGcmVlKChjaGFyICopIGN0eHQtPm5zVGFiKTsKKyAgICBpZiAoY3R4dC0+bnNUYWIgIT0gTlVMTCkgeG1sRnJlZShjdHh0LT5uc1RhYik7CisgICAgaWYgKGN0eHQtPm5zZGIgIT0gTlVMTCkgeG1sUGFyc2VyTnNGcmVlKGN0eHQtPm5zZGIpOworICAgIGlmIChjdHh0LT5hdHRySGFzaCAhPSBOVUxMKSB4bWxGcmVlKGN0eHQtPmF0dHJIYXNoKTsKICAgICBpZiAoY3R4dC0+cHVzaFRhYiAhPSBOVUxMKSB4bWxGcmVlKGN0eHQtPnB1c2hUYWIpOwogICAgIGlmIChjdHh0LT5hdHRhbGxvY3MgIT0gTlVMTCkgeG1sRnJlZShjdHh0LT5hdHRhbGxvY3MpOwogICAgIGlmIChjdHh0LT5hdHRzRGVmYXVsdCAhPSBOVUxMKQpAQCAtMTcxNCw2ICsyMDcyLDIzIEBACiB4bWxQYXJzZXJDdHh0UHRyCiB4bWxOZXdQYXJzZXJDdHh0KHZvaWQpCiB7CisgICAgcmV0dXJuKHhtbE5ld1NBWFBhcnNlckN0eHQoTlVMTCwgTlVMTCkpOworfQorCisvKioKKyAqIHhtbE5ld1NBWFBhcnNlckN0eHQ6CisgKiBAc2F4OiAgU0FYIGhhbmRsZXIKKyAqIEB1c2VyRGF0YTogIHVzZXIgZGF0YQorICoKKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFNBWCBwYXJzZXIgY29udGV4dC4gSWYgdXNlckRhdGEgaXMgTlVMTCwKKyAqIHRoZSBwYXJzZXIgY29udGV4dCB3aWxsIGJlIHBhc3NlZCBhcyB1c2VyIGRhdGEuCisgKgorICogUmV0dXJucyB0aGUgeG1sUGFyc2VyQ3R4dFB0ciBvciBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KKyAqLworCit4bWxQYXJzZXJDdHh0UHRyCit4bWxOZXdTQVhQYXJzZXJDdHh0KGNvbnN0IHhtbFNBWEhhbmRsZXIgKnNheCwgdm9pZCAqdXNlckRhdGEpCit7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OwogCiAgICAgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFBhcnNlckN0eHQpKTsKQEAgLTE3MjIsNyArMjA5Nyw3IEBACiAJcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICBtZW1zZXQoY3R4dCwgMCwgc2l6ZW9mKHhtbFBhcnNlckN0eHQpKTsKLSAgICBpZiAoeG1sSW5pdFBhcnNlckN0eHQoY3R4dCkgPCAwKSB7CisgICAgaWYgKHhtbEluaXRTQVhQYXJzZXJDdHh0KGN0eHQsIHNheCwgdXNlckRhdGEpIDwgMCkgewogICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQpAQCAtMTc1Nyw2ICsyMTMyLDggQEAKICAqIEBjdHg6ICBhbiBYTUwgcGFyc2VyIGNvbnRleHQKICAqIEBub2RlOiAgYW4gWE1MIG5vZGUgd2l0aGluIHRoZSB0cmVlCiAgKgorICogREVQUkVDQVRFRDogRG9uJ3QgdXNlLgorICoKICAqIEZpbmQgdGhlIHBhcnNlciBub2RlIGluZm8gc3RydWN0IGZvciBhIGdpdmVuIG5vZGUKICAqCiAgKiBSZXR1cm5zIGFuIHhtbFBhcnNlck5vZGVJbmZvIGJsb2NrIHBvaW50ZXIgb3IgTlVMTApAQCAtMTc4Miw2ICsyMTU5LDggQEAKICAqIHhtbEluaXROb2RlSW5mb1NlcToKICAqIEBzZXE6ICBhIG5vZGUgaW5mbyBzZXF1ZW5jZSBwb2ludGVyCiAgKgorICogREVQUkVDQVRFRDogRG9uJ3QgdXNlLgorICoKICAqIC0tIEluaXRpYWxpemUgKHNldCB0byBpbml0aWFsIHN0YXRlKSBub2RlIGluZm8gc2VxdWVuY2UKICAqLwogdm9pZApAQCAtMTc5OCw2ICsyMTc3LDggQEAKICAqIHhtbENsZWFyTm9kZUluZm9TZXE6CiAgKiBAc2VxOiAgYSBub2RlIGluZm8gc2VxdWVuY2UgcG9pbnRlcgogICoKKyAqIERFUFJFQ0FURUQ6IERvbid0IHVzZS4KKyAqCiAgKiAtLSBDbGVhciAocmVsZWFzZSBtZW1vcnkgYW5kIHJlaW5pdGlhbGl6ZSkgbm9kZQogICogICBpbmZvIHNlcXVlbmNlCiAgKi8KQEAgLTE4MTYsNiArMjE5Nyw3IEBACiAgKiBAc2VxOiAgYSBub2RlIGluZm8gc2VxdWVuY2UgcG9pbnRlcgogICogQG5vZGU6ICBhbiBYTUwgbm9kZSBwb2ludGVyCiAgKgorICogREVQUkVDQVRFRDogRG9uJ3QgdXNlLgogICoKICAqIHhtbFBhcnNlckZpbmROb2RlSW5mb0luZGV4IDogRmluZCB0aGUgaW5kZXggdGhhdCB0aGUgaW5mbyByZWNvcmQgZm9yCiAgKiAgIHRoZSBnaXZlbiBub2RlIGlzIG9yIHNob3VsZCBiZSBhdCBpbiBhIHNvcnRlZCBzZXF1ZW5jZQpAQCAtMTg1OSw2ICsyMjQxLDggQEAKICAqIEBjdHh0OiAgYW4gWE1MIHBhcnNlciBjb250ZXh0CiAgKiBAaW5mbzogIGEgbm9kZSBpbmZvIHNlcXVlbmNlIHBvaW50ZXIKICAqCisgKiBERVBSRUNBVEVEOiBEb24ndCB1c2UuCisgKgogICogSW5zZXJ0IG5vZGUgaW5mbyByZWNvcmQgaW50byB0aGUgc29ydGVkIHNlcXVlbmNlCiAgKi8KIHZvaWQKQEAgLTE5MjksNiArMjMxMyw4IEBACiAgKiB4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHQ6CiAgKiBAdmFsOiAgaW50IDAgb3IgMQogICoKKyAqIERFUFJFQ0FURUQ6IFVzZSB0aGUgbW9kZXJuIG9wdGlvbnMgQVBJIHdpdGggWE1MX1BBUlNFX1BFREFOVElDLgorICoKICAqIFNldCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgZW5hYmxpbmcgcGVkYW50aWMgd2FybmluZ3MuCiAgKgogICogUmV0dXJucyB0aGUgbGFzdCB2YWx1ZSBmb3IgMCBmb3Igbm8gc3Vic3RpdHV0aW9uLCAxIGZvciBzdWJzdGl0dXRpb24uCkBAIC0xOTQ2LDYgKzIzMzIsOCBAQAogICogeG1sTGluZU51bWJlcnNEZWZhdWx0OgogICogQHZhbDogIGludCAwIG9yIDEKICAqCisgKiBERVBSRUNBVEVEOiBUaGUgbW9kZXJuIG9wdGlvbnMgQVBJIGFsd2F5cyBlbmFibGVzIGxpbmUgbnVtYmVycy4KKyAqCiAgKiBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGVuYWJsaW5nIGxpbmUgbnVtYmVycyBpbiBlbGVtZW50cwogICogY29udGVudHMuIFRoaXMgbWF5IGJyZWFrIG9uIG9sZCBhcHBsaWNhdGlvbiBhbmQgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgogICoKQEAgLTE5NjQsNiArMjM1Miw4IEBACiAgKiB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0OgogICogQHZhbDogIGludCAwIG9yIDEKICAqCisgKiBERVBSRUNBVEVEOiBVc2UgdGhlIG1vZGVybiBvcHRpb25zIEFQSSB3aXRoIFhNTF9QQVJTRV9OT0VOVC4KKyAqCiAgKiBTZXQgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIGRlZmF1bHQgZW50aXR5IHN1cHBvcnQuCiAgKiBJbml0aWFsbHkgdGhlIHBhcnNlciBhbHdheXMga2VlcCBlbnRpdHkgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHN1YnN0aXR1dGluZwogICogZW50aXR5IHZhbHVlcyBpbiB0aGUgb3V0cHV0LiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSB1c2VkIHRvIGNoYW5nZSB0aGUKQEAgLTE5ODYsNiArMjM3Niw4IEBACiAgKiB4bWxLZWVwQmxhbmtzRGVmYXVsdDoKICAqIEB2YWw6ICBpbnQgMCBvciAxCiAgKgorICogREVQUkVDQVRFRDogVXNlIHRoZSBtb2Rlcm4gb3B0aW9ucyBBUEkgd2l0aCBYTUxfUEFSU0VfTk9CTEFOS1MuCisgKgogICogU2V0IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIGZvciBkZWZhdWx0IGJsYW5rcyB0ZXh0IG5vZGVzIHN1cHBvcnQuCiAgKiBUaGUgMS54IHZlcnNpb24gb2YgdGhlIHBhcnNlciB1c2VkIGFuIGhldXJpc3RpYyB0byB0cnkgdG8gZGV0ZWN0CiAgKiBpZ25vcmFibGUgd2hpdGUgc3BhY2VzLiBBcyBhIHJlc3VsdCB0aGUgU0FYIGNhbGxiYWNrIHdhcyBnZW5lcmF0aW5nCkBAIC0yMDExLDcgKzI0MDMsMTAgQEAKICAgICBpbnQgb2xkID0geG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZTsKIAogICAgIHhtbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUgPSB2YWw7Ci0gICAgaWYgKCF2YWwpIHhtbEluZGVudFRyZWVPdXRwdXQgPSAxOworI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAorICAgIGlmICghdmFsKQorICAgICAgICB4bWxJbmRlbnRUcmVlT3V0cHV0ID0gMTsKKyNlbmRpZgogICAgIHJldHVybihvbGQpOwogfQogCmRpZmYgLS1naXQgYS9wYXR0ZXJuLmMgYi9wYXR0ZXJuLmMKaW5kZXggY2ZmNDQ2OS4uNTVhZTJkMyAxMDA2NDQKLS0tIGEvcGF0dGVybi5jCisrKyBiL3BhdHRlcm4uYwpAQCAtMjcsMTggKzI3LDE1IEBACiAjaW5jbHVkZSAibGlieG1sLmgiCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGF0dGVybi5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC9oYXNoLmg+CiAjaW5jbHVkZSA8bGlieG1sL2RpY3QuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3BhdHRlcm4uaD4KIAogI2lmZGVmIExJQlhNTF9QQVRURVJOX0VOQUJMRUQKIAotLyogI2RlZmluZSBERUJVR19TVFJFQU1JTkcgKi8KLQogI2lmZGVmIEVSUk9SCiAjdW5kZWYgRVJST1IKICNlbmRpZgpAQCAtOTM1LDcgKzkzMiw2IEBACiAKIAlpZiAoSVNfQkxBTktfQ0goQ1VSKSkgewogCSAgICBFUlJPUjUoTlVMTCwgTlVMTCwgTlVMTCwgIkludmFsaWQgUU5hbWUuXG4iLCBOVUxMKTsKLQkgICAgWE1MX1BBVF9GUkVFX1NUUklORyhjdHh0LCBwcmVmaXgpOwogCSAgICBjdHh0LT5lcnJvciA9IDE7CiAJICAgIGdvdG8gZXJyb3I7CiAJfQpAQCAtOTYwLDEyICs5NTYsMTIgQEAKIAkJRVJST1I1KE5VTEwsIE5VTEwsIE5VTEwsCiAJCSAgICAieG1sQ29tcGlsZUF0dHJpYnV0ZVRlc3QgOiBubyBuYW1lc3BhY2UgYm91bmQgdG8gcHJlZml4ICVzXG4iLAogCQkgICAgcHJlZml4KTsKLQkgICAgICAgIFhNTF9QQVRfRlJFRV9TVFJJTkcoY3R4dCwgcHJlZml4KTsKIAkJY3R4dC0+ZXJyb3IgPSAxOwogCQlnb3RvIGVycm9yOwogCSAgICB9CiAJfQotCVhNTF9QQVRfRlJFRV9TVFJJTkcoY3R4dCwgcHJlZml4KTsKKyAgICAgICAgWE1MX1BBVF9GUkVFX1NUUklORyhjdHh0LCBuYW1lKTsKKyAgICAgICAgbmFtZSA9IE5VTEw7CiAJaWYgKHRva2VuID09IE5VTEwpIHsKIAkgICAgaWYgKENVUiA9PSAnKicpIHsKIAkJTkVYVDsKQEAgLTk4NCw2ICs5ODAsOCBAQAogICAgIH0KICAgICByZXR1cm47CiBlcnJvcjoKKyAgICBpZiAobmFtZSAhPSBOVUxMKQorCVhNTF9QQVRfRlJFRV9TVFJJTkcoY3R4dCwgbmFtZSk7CiAgICAgaWYgKFVSTCAhPSBOVUxMKQogCVhNTF9QQVRfRlJFRV9TVFJJTkcoY3R4dCwgVVJMKQogICAgIGlmICh0b2tlbiAhPSBOVUxMKQpAQCAtMTQxNSw2MiArMTQxMyw2IEBACiAgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBERUJVR19TVFJFQU1JTkcKLXN0YXRpYyB2b2lkCi14bWxEZWJ1Z1N0cmVhbUNvbXAoeG1sU3RyZWFtQ29tcFB0ciBzdHJlYW0pIHsKLSAgICBpbnQgaTsKLQotICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgewotICAgICAgICBwcmludGYoIlN0cmVhbTogTlVMTFxuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBwcmludGYoIlN0cmVhbTogJWQgc3RlcHNcbiIsIHN0cmVhbS0+bmJTdGVwKTsKLSAgICBmb3IgKGkgPSAwO2kgPCBzdHJlYW0tPm5iU3RlcDtpKyspIHsKLQlpZiAoc3RyZWFtLT5zdGVwc1tpXS5ucyAhPSBOVUxMKSB7Ci0JICAgIHByaW50ZigieyVzfSIsIHN0cmVhbS0+c3RlcHNbaV0ubnMpOwotCX0KLSAgICAgICAgaWYgKHN0cmVhbS0+c3RlcHNbaV0ubmFtZSA9PSBOVUxMKSB7Ci0JICAgIHByaW50ZigiKiAiKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIiVzICIsIHN0cmVhbS0+c3RlcHNbaV0ubmFtZSk7Ci0JfQotCWlmIChzdHJlYW0tPnN0ZXBzW2ldLmZsYWdzICYgWE1MX1NUUkVBTV9TVEVQX1JPT1QpCi0JICAgIHByaW50Zigicm9vdCAiKTsKLQlpZiAoc3RyZWFtLT5zdGVwc1tpXS5mbGFncyAmIFhNTF9TVFJFQU1fU1RFUF9ERVNDKQotCSAgICBwcmludGYoIi8vICIpOwotCWlmIChzdHJlYW0tPnN0ZXBzW2ldLmZsYWdzICYgWE1MX1NUUkVBTV9TVEVQX0ZJTkFMKQotCSAgICBwcmludGYoImZpbmFsICIpOwotCXByaW50ZigiXG4iKTsKLSAgICB9Ci19Ci1zdGF0aWMgdm9pZAoteG1sRGVidWdTdHJlYW1DdHh0KHhtbFN0cmVhbUN0eHRQdHIgY3R4dCwgaW50IG1hdGNoKSB7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoY3R4dCA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiU3RyZWFtOiBOVUxMXG4iKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIHByaW50ZigiU3RyZWFtOiBsZXZlbCAlZCwgJWQgc3RhdGVzOiAiLCBjdHh0LT5sZXZlbCwgY3R4dC0+bmJTdGF0ZSk7Ci0gICAgaWYgKG1hdGNoKQotICAgICAgICBwcmludGYoIm1hdGNoZXNcbiIpOwotICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIGZvciAoaSA9IDA7aSA8IGN0eHQtPm5iU3RhdGU7aSsrKSB7Ci0gICAgICAgIGlmIChjdHh0LT5zdGF0ZXNbMiAqIGldIDwgMCkKLQkgICAgcHJpbnRmKCIgJWQ6IGZyZWVcbiIsIGkpOwotCWVsc2UgewotCSAgICBwcmludGYoIiAlZDogc3RlcCAlZCwgbGV2ZWwgJWQiLCBpLCBjdHh0LT5zdGF0ZXNbMiAqIGldLAotCSAgICAgICAgICAgY3R4dC0+c3RhdGVzWygyICogaSkgKyAxXSk7Ci0gICAgICAgICAgICBpZiAoY3R4dC0+Y29tcC0+c3RlcHNbY3R4dC0+c3RhdGVzWzIgKiBpXV0uZmxhZ3MgJgotCSAgICAgICAgWE1MX1NUUkVBTV9TVEVQX0RFU0MpCi0JICAgICAgICBwcmludGYoIiAvL1xuIik7Ci0JICAgIGVsc2UKLQkgICAgICAgIHByaW50ZigiXG4iKTsKLQl9Ci0gICAgfQotfQotI2VuZGlmCiAvKioKICAqIHhtbE5ld1N0cmVhbUNvbXA6CiAgKiBAc2l6ZTogdGhlIG51bWJlciBvZiBleHBlY3RlZCBzdGVwcwpAQCAtMTcyOSw5ICsxNjcxLDYgQEAKICAgICBzdHJlYW0tPnN0ZXBzW3NdLmZsYWdzIHw9IFhNTF9TVFJFQU1fU1RFUF9GSU5BTDsKICAgICBpZiAocm9vdCkKIAlzdHJlYW0tPnN0ZXBzWzBdLmZsYWdzIHw9IFhNTF9TVFJFQU1fU1RFUF9ST09UOwotI2lmZGVmIERFQlVHX1NUUkVBTUlORwotICAgIHhtbERlYnVnU3RyZWFtQ29tcChzdHJlYW0pOwotI2VuZGlmCiAgICAgY29tcC0+c3RyZWFtID0gc3RyZWFtOwogICAgIHJldHVybigwKTsKIGVycm9yOgpAQCAtMTg1Miw5ICsxNzkxLDYgQEAKICAgICBpbnQgcmV0ID0gMCwgZXJyID0gMCwgZmluYWwgPSAwLCB0bXAsIGksIG0sIG1hdGNoLCBzdGVwTnIsIGRlc2M7CiAgICAgeG1sU3RyZWFtQ29tcFB0ciBjb21wOwogICAgIHhtbFN0cmVhbVN0ZXAgc3RlcDsKLSNpZmRlZiBERUJVR19TVFJFQU1JTkcKLSAgICB4bWxTdHJlYW1DdHh0UHRyIG9yaWcgPSBzdHJlYW07Ci0jZW5kaWYKIAogICAgIGlmICgoc3RyZWFtID09IE5VTEwpIHx8IChzdHJlYW0tPm5iU3RhdGUgPCAwKSkKICAgICAgICAgcmV0dXJuKC0xKTsKQEAgLTIwMzksMjIgKzE5NzUsMTIgQEAKICNlbmRpZiAvKiBpZiAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkgICAgaWYgKG1hdGNoKSB7CiAJCWZpbmFsID0gc3RlcC5mbGFncyAmIFhNTF9TVFJFQU1fU1RFUF9GSU5BTDsKLQkJaWYgKGRlc2MpIHsKLQkJICAgIGlmIChmaW5hbCkgewotCQkJcmV0ID0gMTsKLQkJICAgIH0gZWxzZSB7Ci0JCQkvKiBkZXNjZW5kaW5nIG1hdGNoIGNyZWF0ZSBhIG5ldyBzdGF0ZSAqLwotCQkJeG1sU3RyZWFtQ3R4dEFkZFN0YXRlKHN0cmVhbSwgc3RlcE5yICsgMSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmxldmVsICsgMSk7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7Ci0JCSAgICBpZiAoZmluYWwpIHsKLQkJCXJldCA9IDE7Ci0JCSAgICB9IGVsc2UgewotCQkJeG1sU3RyZWFtQ3R4dEFkZFN0YXRlKHN0cmVhbSwgc3RlcE5yICsgMSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmxldmVsICsgMSk7Ci0JCSAgICB9Ci0JCX0KKyAgICAgICAgICAgICAgICBpZiAoZmluYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4bWxTdHJlYW1DdHh0QWRkU3RhdGUoc3RyZWFtLCBzdGVwTnIgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5sZXZlbCArIDEpOworICAgICAgICAgICAgICAgIH0KIAkJaWYgKChyZXQgIT0gMSkgJiYgKHN0ZXAuZmxhZ3MgJiBYTUxfU1RSRUFNX1NURVBfSU5fU0VUKSkgewogCQkgICAgLyoKIAkJICAgICogQ2hlY2sgaWYgd2UgaGF2ZSBhIHNwZWNpYWwgY2FzZSBsaWtlICJmb28vYmFyLy8uIiwgd2hlcmUKQEAgLTIxODIsOSArMjEwOCw2IEBACiAKICAgICBpZiAoZXJyID4gMCkKICAgICAgICAgcmV0ID0gLTE7Ci0jaWZkZWYgREVCVUdfU1RSRUFNSU5HCi0gICAgeG1sRGVidWdTdHJlYW1DdHh0KG9yaWcsIHJldCk7Ci0jZW5kaWYKICAgICByZXR1cm4ocmV0KTsKIH0KIApAQCAtMjIwNyw3ICsyMTMwLDcgQEAKIGludAogeG1sU3RyZWFtUHVzaCh4bWxTdHJlYW1DdHh0UHRyIHN0cmVhbSwKICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSwgY29uc3QgeG1sQ2hhciAqbnMpIHsKLSAgICByZXR1cm4gKHhtbFN0cmVhbVB1c2hJbnRlcm5hbChzdHJlYW0sIG5hbWUsIG5zLCAoaW50KSBYTUxfRUxFTUVOVF9OT0RFKSk7CisgICAgcmV0dXJuICh4bWxTdHJlYW1QdXNoSW50ZXJuYWwoc3RyZWFtLCBuYW1lLCBucywgWE1MX0VMRU1FTlRfTk9ERSkpOwogfQogCiAvKioKQEAgLTIyNTcsNyArMjE4MCw3IEBACiBpbnQKIHhtbFN0cmVhbVB1c2hBdHRyKHhtbFN0cmVhbUN0eHRQdHIgc3RyZWFtLAogCQkgIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKm5zKSB7Ci0gICAgcmV0dXJuICh4bWxTdHJlYW1QdXNoSW50ZXJuYWwoc3RyZWFtLCBuYW1lLCBucywgKGludCkgWE1MX0FUVFJJQlVURV9OT0RFKSk7CisgICAgcmV0dXJuICh4bWxTdHJlYW1QdXNoSW50ZXJuYWwoc3RyZWFtLCBuYW1lLCBucywgWE1MX0FUVFJJQlVURV9OT0RFKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvcHl0aG9uLy5naXRpZ25vcmUgYi9weXRob24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhkNmVhCi0tLSAvZGV2L251bGwKKysrIGIvcHl0aG9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSw5IEBACisvZ2VuX3Byb2cKKy9saWJ4bWwyLWV4cG9ydC5jCisvbGlieG1sMi1weS5jCisvbGlieG1sMi1weS5oCisvbGlieG1sMi5weQorL2xpYnhtbDJjbGFzcy5weQorL2xpYnhtbDJjbGFzcy50eHQKKy9zZXR1cC5weQorL3Rlc3RzL3RtcC54bWwKZGlmZiAtLWdpdCBhL3B5dGhvbi9NYWtlZmlsZS5hbSBiL3B5dGhvbi9NYWtlZmlsZS5hbQppbmRleCBjYzE0MTlhLi4wNWQxNjdiIDEwMDY0NAotLS0gYS9weXRob24vTWFrZWZpbGUuYW0KKysrIGIvcHl0aG9uL01ha2VmaWxlLmFtCkBAIC0xLDE0ICsxLDE2IEBACiAjIE1ha2VmaWxlIGZvciBsaWJ4bWwyIHB5dGhvbiBsaWJyYXJ5CiAKLVNVQkRJUlMgPSAuIHRlc3RzCisjIFdlIHVzZSBhIHJ1bGUgd2l0aCBtdWx0aXBsZSBvdXRwdXQgZmlsZXMgd2hpY2ggY3JlYXRlcyBwcm9ibGVtcyB3aXRoCisjIHBhcmFsbGVsIGJ1aWxkcy4KKy5OT1RQQVJBTExFTDoKIAotZG9jc2RpciA9ICQoZG9jZGlyKS9weXRob24KLWRpc3RfZG9jc19EQVRBID0gVE9ETworU1VCRElSUyA9IC4gdGVzdHMKIAogRVhUUkFfRElTVCA9IAkJCVwKIAlnZW5lcmF0b3IucHkJCVwKIAlsaWJ4bWwucHkJCVwKLQlsaWJ4bWwyLXB5dGhvbi1hcGkueG1sCisJbGlieG1sMi1weXRob24tYXBpLnhtbCAgXAorCXB5cHJvamVjdC50b21sCiAKIGlmIFdJVEhfUFlUSE9OCiBBTV9DUFBGTEFHUyA9IFwKQEAgLTIwLDggKzIyLDggQEAKIAogbGlieG1sMm1vZF9sYV9TT1VSQ0VTID0gbGlieG1sLmMgbGlieG1sX3dyYXAuaCB0eXBlcy5jCiBub2Rpc3RfbGlieG1sMm1vZF9sYV9TT1VSQ0VTID0gbGlieG1sMi1weS5oIGxpYnhtbDItcHkuYwotbGlieG1sMm1vZF9sYV9MREZMQUdTID0gJChDWUdXSU5fRVhUUkFfTERGTEFHUykgJChXSU4zMl9FWFRSQV9MREZMQUdTKSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uCi1saWJ4bWwybW9kX2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJ4bWwyLmxhICQoQ1lHV0lOX0VYVFJBX1BZVEhPTl9MSUJBREQpICQoV0lOMzJfRVhUUkFfUFlUSE9OX0xJQkFERCkgJChQWVRIT05fTElCUykKK2xpYnhtbDJtb2RfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgJChQWVRIT05fTERGTEFHUykgLW1vZHVsZSAtYXZvaWQtdmVyc2lvbgorbGlieG1sMm1vZF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvbGlieG1sMi5sYSAkKFBZVEhPTl9MSUJTKQogCiBCVUlMVF9TT1VSQ0VTID0gbGlieG1sMi1leHBvcnQuYyBsaWJ4bWwyLXB5LmggbGlieG1sMi1weS5jCiAKQEAgLTQ0LDYgKzQ2LDYgQEAKIAljYXQgJChzcmNkaXIpL2xpYnhtbC5weSBgdGVzdCAtZiBsaWJ4bWwyY2xhc3MucHkgfHwgZWNobyAkKHNyY2RpcikvYGxpYnhtbDJjbGFzcy5weSA+ICRACiAKIGNsZWFuLWxvY2FsOgotCXJtIC1yZiBfX3B5Y2FjaGVfXworCXJtIC1yZiBfX3B5Y2FjaGVfXyAqLnB5YwogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvcHl0aG9uL1RPRE8gYi9weXRob24vVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhMWViMS4uMDAwMDAwMAotLS0gYS9weXRob24vVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSAgICAgICAgICAgICBUT0RPIGZvciB0aGUgbGlieG1sMiBQeXRob24gd3JhcHBlcnMKLQotVGhpbmdzIHRvIGRvOgotLS0tLS0tLS0tLS0tLQotCi0tIFNBWCBpbnRlcmZhY2VzCi0gIC0gcHVzaCBpcyBkb25lIGJ1dCBubyBnZW5lcmljIGludGVyZmFjZQotICAtIGVsZW1lbnREZWNsIG5lZWQgc29tZSB3b3JrCi0gIC0gbmVlZCBtb3JlIHRlc3RpbmcgYW5kIGNoZWNrIGZ1bGwgY2FsbGJhY2tzIGZvciB4bWxsaWIvc2dtbG9wIHJlcGxhY2VtZW50Ci0tIGVudW1zIC0+IGxpYnhtbC5weQotLSBhY2Nlc3MgdG8gWFBhdGggdmFyaWFibGVzCi0tIHhtbEJ1ZmZlciBleHBvc3VyZQotLSB4cGF0aENvbnRleHQsIGJlaW5nIGFibGUgdG8gc2V0L2dldCBpbmZvIGFuZCBjbGVhbiBpdCB1cAotLSBtb3JlIHdvcmsgbmVlZGVkIG9uIGNvbnRleHQgaGFuZGxpbmcgZm9yIGZ1bmN0aW9uIGxvb2t1cAotICBhbmQgdXNlIG9mIGFuIGhhc2ggdGFibGUuCi0tIGFkZCByZWdyZXNzaW9uIHRlc3RzCi0gICAtIFNBWCBmbG93Ci0tIERURCBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzIGNvbnRlbnQgYWNjZXNzZXMKLSAgIC0gYXR0cmlidXRlIGhhbmRsZWQgaW4gU0FYCi0gICAtIGVsZW1lbnQgbmVlZGVkIGluIGJvdGgKLQotCi1Eb25lOgotLS0tLS0KLS0gY2xhc3MgaGllcmFyY2h5OgotICArIG1ha2Ugc3BlY2lmaWMgbm9kZSB0eXBlIGluaGVyaXQgZnJvbSB4bWxOb2RlCi0gICAgZG9uZSwgaGFkIHRvIHNvcnQgdGhlIGNsYXNzZXMgaW4gdGhlIG91dHB1dAotICArIGdldCB0aGUgZ2VuZXJhdG9yIHRvIG91dHB1dCBhIGNsYXNzZXMudHh0IGRlc2NyaXB0aW9uCi0gICAgZG9uZSBsaWJ4bWwyY2xhc3MudHh0Ci0tIGFkZCByZWdyZXNzaW9uIHRlc3RzCi0gICAtIHRlc3RzL01ha2VmaWxlLmFtOiBleHBvcnQgdGhlIFB5dGhvbiBjbGFzcyBwYXRoCi0gICAtIHhwYXRoIHF1ZXJpZXMKLSAgIC0geHBhdGggZXh0ZW5zaW9uCi0gICAtIGNoZWNrIG1lbW9yeQotICAgLSBidWlsZCB0cmVlCi0gICAtIHNhdmluZwotLSBleHRlbnNpb25zIGJhc2VkIG9uIGEgcHl0aG9uLnhtbCBkZXNjcmlwdGlvbiBvZiB0aGUgbmV3IHNwZWNpZmljCi0gIGludGVyZmFjZXMKLSAgIGZpbGUgbGlieG1sMi1weXRob24tYXBpLnhtbCAsIGZpcnN0IGVudHJ5IGlzIHhtbFJlZ2lzdGVyWFBhdGhGdW5jdGlvbgotLSBzcGVjIGZpbGU6IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgZm9yIHB5dGhvblguWSBpZiBmb3VuZAotICBEb25lLCBhIGJpdCB1Z2x5IGJ5IHJ1bm5pbmcgbmV3IG1ha2VzIGluICVpbnN0YWxsIGZvciBlYWNoIGxldmVsCi0gIGZvdW5kLgotLSBlcnJvciByZWRpcmVjdGlvbnMgYW5kIHByZWZvcm1hdAotLSBoYW5kbGluZyBvZiBub2RlLmNvbnRlbnQKLS0gYWNjZXNzIHRvIHhtbFBhcnNlckN0eHQgYW5kIHB1c2ggbW9kZQotICAgLSBuZWVkZWQgZm9yIFNBWCB0b28KLSAgIC0gZW50cnkgcG9pbnRzCi0gICAtIHdyYXBwZXJzCi0gICAtIGRlY2VudCBpbnRlcmZhY2UgZm9yIHNldHRpbmcvZ2V0dGluZyBiZWhhdmlvdXIKLS0gbWVtb3J5IGRlYnVnIGludGVyZmFjZXMKLS0gU0FYIGludGVyZmFjZXMKLSAgIC0gYmFzaWMgc3R1ZmYgd2l0aCBwdXNoIGlzIGF2YWlsYWJsZQotICAgLSBiYXNpYyB4bWxsaWIgcmVwbGFjZW1lbnQKLQotRGFuaWVsIFZlaWxsYXJkCmRpZmYgLS1naXQgYS9weXRob24vZ2VuZXJhdG9yLnB5IGIvcHl0aG9uL2dlbmVyYXRvci5weQppbmRleCAwOTQ3NGZjLi45OTVjZGIxIDEwMDc1NQotLS0gYS9weXRob24vZ2VuZXJhdG9yLnB5CisrKyBiL3B5dGhvbi9nZW5lcmF0b3IucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgZ2VuZXJhdGUgcHl0aG9uIHdyYXBwZXJzIGZyb20gdGhlIFhNTCBBUEkgZGVzY3JpcHRpb24KICMKQEAgLTI0MCw2ICsyNDAsNyBAQAogICAgICd4bWxDYXRhbG9nUHRyJzogKCdPJywgImNhdGFsb2ciLCAieG1sQ2F0YWxvZ1B0ciIsICJ4bWxDYXRhbG9nUHRyIiksCiAgICAgJ0ZJTEUgKic6ICgnTycsICJGaWxlIiwgIkZJTEVQdHIiLCAiRklMRSAqIiksCiAgICAgJ3htbFVSSVB0cic6ICgnTycsICJVUkkiLCAieG1sVVJJUHRyIiwgInhtbFVSSVB0ciIpLAorICAgICdjb25zdCB4bWxFcnJvciAqJzogKCdPJywgIkVycm9yIiwgInhtbEVycm9yUHRyIiwgImNvbnN0IHhtbEVycm9yICoiKSwKICAgICAneG1sRXJyb3JQdHInOiAoJ08nLCAiRXJyb3IiLCAieG1sRXJyb3JQdHIiLCAieG1sRXJyb3JQdHIiKSwKICAgICAneG1sT3V0cHV0QnVmZmVyUHRyJzogKCdPJywgIm91dHB1dEJ1ZmZlciIsICJ4bWxPdXRwdXRCdWZmZXJQdHIiLCAieG1sT3V0cHV0QnVmZmVyUHRyIiksCiAgICAgJ3htbFBhcnNlcklucHV0QnVmZmVyUHRyJzogKCdPJywgImlucHV0QnVmZmVyIiwgInhtbFBhcnNlcklucHV0QnVmZmVyUHRyIiwgInhtbFBhcnNlcklucHV0QnVmZmVyUHRyIiksCkBAIC0yOTEsNiArMjkyLDEzIEBACiBkZXByZWNhdGVkX2Z1bmNzID0gewogICAgICdodG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0JzogVHJ1ZSwKICAgICAnaHRtbEluaXRBdXRvQ2xvc2UnOiBUcnVlLAorICAgICdodG1sUGFyc2VDaGFyUmVmJzogVHJ1ZSwKKyAgICAnaHRtbFBhcnNlRWxlbWVudCc6IFRydWUsCisgICAgJ25hbWVQb3AnOiBUcnVlLAorICAgICduYW1lUHVzaCc6IFRydWUsCisgICAgJ25vZGVQb3AnOiBUcnVlLAorICAgICdub2RlUHVzaCc6IFRydWUsCisgICAgJ3htbENoZWNrTGFuZ3VhZ2VJRCc6IFRydWUsCiAgICAgJ3htbENsZWFudXBDaGFyRW5jb2RpbmdIYW5kbGVycyc6IFRydWUsCiAgICAgJ3htbENsZWFudXBHbG9iYWxzJzogVHJ1ZSwKICAgICAneG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0JzogVHJ1ZSwKQEAgLTMwMyw2ICszMTEsOCBAQAogICAgICd4bWxJbml0aWFsaXplRGljdCc6IFRydWUsCiAgICAgJ3htbEluaXRpYWxpemVQcmVkZWZpbmVkRW50aXRpZXMnOiBUcnVlLAogICAgICd4bWxJc1JlZic6IFRydWUsCisgICAgJ3htbEtlZXBCbGFua3NEZWZhdWx0JzogVHJ1ZSwKKyAgICAneG1sTGluZU51bWJlcnNEZWZhdWx0JzogVHJ1ZSwKICAgICAneG1sTmFtZXNwYWNlUGFyc2VOQ05hbWUnOiBUcnVlLAogICAgICd4bWxOYW1lc3BhY2VQYXJzZU5TRGVmJzogVHJ1ZSwKICAgICAneG1sTmFub0ZUUENsZWFudXAnOiBUcnVlLApAQCAtMzEwLDE1ICszMjAsNjggQEAKICAgICAneG1sTmFub0ZUUFByb3h5JzogVHJ1ZSwKICAgICAneG1sTmFub0ZUUFNjYW5Qcm94eSc6IFRydWUsCiAgICAgJ3htbE5ld0dsb2JhbE5zJzogVHJ1ZSwKKyAgICAneG1sTmV4dENoYXInOiBUcnVlLAorICAgICd4bWxQYXJzZUF0dFZhbHVlJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VBdHRyaWJ1dGVMaXN0RGVjbCc6IFRydWUsCisgICAgJ3htbFBhcnNlQ0RTZWN0JzogVHJ1ZSwKKyAgICAneG1sUGFyc2VDaGFyRGF0YSc6IFRydWUsCisgICAgJ3htbFBhcnNlQ2hhclJlZic6IFRydWUsCisgICAgJ3htbFBhcnNlQ29tbWVudCc6IFRydWUsCisgICAgJ3htbFBhcnNlRG9jVHlwZURlY2wnOiBUcnVlLAorICAgICd4bWxQYXJzZUVsZW1lbnQnOiBUcnVlLAorICAgICd4bWxQYXJzZUVsZW1lbnREZWNsJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VFbmNOYW1lJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VFbmNvZGluZ0RlY2wnOiBUcnVlLAorICAgICd4bWxQYXJzZUVuZFRhZyc6IFRydWUsCisgICAgJ3htbFBhcnNlRW50aXR5JzogVHJ1ZSwKKyAgICAneG1sUGFyc2VFbnRpdHlEZWNsJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VFbnRpdHlSZWYnOiBUcnVlLAorICAgICd4bWxQYXJzZU1hcmt1cERlY2wnOiBUcnVlLAorICAgICd4bWxQYXJzZU1pc2MnOiBUcnVlLAorICAgICd4bWxQYXJzZU5hbWUnOiBUcnVlLAogICAgICd4bWxQYXJzZU5hbWVzcGFjZSc6IFRydWUsCisgICAgJ3htbFBhcnNlTm10b2tlbic6IFRydWUsCisgICAgJ3htbFBhcnNlTm90YXRpb25EZWNsJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VQRVJlZmVyZW5jZSc6IFRydWUsCisgICAgJ3htbFBhcnNlUEknOiBUcnVlLAorICAgICd4bWxQYXJzZVBJVGFyZ2V0JzogVHJ1ZSwKKyAgICAneG1sUGFyc2VQdWJpZExpdGVyYWwnOiBUcnVlLAogICAgICd4bWxQYXJzZVF1b3RlZFN0cmluZyc6IFRydWUsCisgICAgJ3htbFBhcnNlUmVmZXJlbmNlJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VTRERlY2wnOiBUcnVlLAorICAgICd4bWxQYXJzZVN0YXJ0VGFnJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VTeXN0ZW1MaXRlcmFsJzogVHJ1ZSwKKyAgICAneG1sUGFyc2VUZXh0RGVjbCc6IFRydWUsCisgICAgJ3htbFBhcnNlVmVyc2lvbkluZm8nOiBUcnVlLAorICAgICd4bWxQYXJzZVZlcnNpb25OdW0nOiBUcnVlLAorICAgICd4bWxQYXJzZVhNTERlY2wnOiBUcnVlLAorICAgICd4bWxQYXJzZXJIYW5kbGVQRVJlZmVyZW5jZSc6IFRydWUsCiAgICAgJ3htbFBhcnNlckhhbmRsZVJlZmVyZW5jZSc6IFRydWUsCisgICAgJ3htbFBlZGFudGljUGFyc2VyRGVmYXVsdCc6IFRydWUsCisgICAgJ3htbFJlY292ZXJEb2MnOiBUcnVlLAorICAgICd4bWxSZWNvdmVyRmlsZSc6IFRydWUsCisgICAgJ3htbFJlY292ZXJNZW1vcnknOiBUcnVlLAogICAgICd4bWxSZWxheE5HQ2xlYW51cFR5cGVzJzogVHJ1ZSwKICAgICAneG1sUmVsYXhOR0luaXRUeXBlcyc6IFRydWUsCiAgICAgJ3htbFJlbW92ZVJlZic6IFRydWUsCisgICAgJ3htbFNBWERlZmF1bHRWZXJzaW9uJzogVHJ1ZSwKICAgICAneG1sU2Nhbk5hbWUnOiBUcnVlLAogICAgICd4bWxTY2hlbWFDbGVhbnVwVHlwZXMnOiBUcnVlLAogICAgICd4bWxTY2hlbWFJbml0VHlwZXMnOiBUcnVlLAorICAgICd4bWxTZXR1cFBhcnNlckZvckJ1ZmZlcic6IFRydWUsCisgICAgJ3htbFNraXBCbGFua0NoYXJzJzogVHJ1ZSwKKyAgICAneG1sU3RyaW5nRGVjb2RlRW50aXRpZXMnOiBUcnVlLAorICAgICd4bWxTdHJpbmdMZW5EZWNvZGVFbnRpdGllcyc6IFRydWUsCisgICAgJ3htbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQnOiBUcnVlLAorICAgICd4bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSc6IFRydWUsCisgICAgJ3htbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSc6IFRydWUsCisgICAgJ3htbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlJzogVHJ1ZSwKKyAgICAneG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSc6IFRydWUsCisgICAgJ3htbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlJzogVHJ1ZSwKKyAgICAneG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSc6IFRydWUsCisgICAgJ3htbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXMnOiBUcnVlLAorICAgICd4bWxUaHJEZWZQZWRhbnRpY1BhcnNlckRlZmF1bHRWYWx1ZSc6IFRydWUsCisgICAgJ3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSc6IFRydWUsCiAgICAgJ3htbFhQYXRoSW5pdCc6IFRydWUsCiAgICAgJ3htbFhQdHJFdmFsUmFuZ2VQcmVkaWNhdGUnOiBUcnVlLAogICAgICd4bWxYUHRyTmV3Q29sbGFwc2VkUmFuZ2UnOiBUcnVlLApAQCAtNjI3LDEyICs2OTAsMTIgQEAKICAgICBleHBvcnQuY2xvc2UoKQogICAgIHdyYXBwZXIuY2xvc2UoKQogCi0gICAgcHJpbnQoIkdlbmVyYXRlZCAlZCB3cmFwcGVyIGZ1bmN0aW9ucywgJWQgZmFpbGVkLCAlZCBza2lwcGVkXG4iICUgKG5iX3dyYXAsCisgICAgcHJpbnQoIkdlbmVyYXRlZCAlZCB3cmFwcGVyIGZ1bmN0aW9ucywgJWQgZmFpbGVkLCAlZCBza2lwcGVkIiAlIChuYl93cmFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQsIHNraXBwZWQpKQotICAgIHByaW50KCJNaXNzaW5nIHR5cGUgY29udmVydGVyczogIikKLSAgICBmb3IgdHlwZSBpbiBsaXN0KHVua25vd25fdHlwZXMua2V5cygpKToKLSAgICAgICAgcHJpbnQoIiVzOiVkICIgJSAodHlwZSwgbGVuKHVua25vd25fdHlwZXNbdHlwZV0pKSkKLSAgICBwcmludCgpCisjICAgIHByaW50KCJNaXNzaW5nIHR5cGUgY29udmVydGVyczogIikKKyMgICAgZm9yIHR5cGUgaW4gbGlzdCh1bmtub3duX3R5cGVzLmtleXMoKSk6CisjICAgICAgICBwcmludCgiJXM6JWQgIiAlICh0eXBlLCBsZW4odW5rbm93bl90eXBlc1t0eXBlXSkpKQorIyAgICBwcmludCgpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCkBAIC02NzUsNiArNzM4LDcgQEAKICAgICAieG1sVmFsaWRDdHh0UHRyIjogKCIuX28iLCAiVmFsaWRDdHh0KF9vYmo9JXMpIiwgIlZhbGlkQ3R4dCIpLAogICAgICJ4bWxDYXRhbG9nUHRyIjogKCIuX28iLCAiY2F0YWxvZyhfb2JqPSVzKSIsICJjYXRhbG9nIiksCiAgICAgInhtbFVSSVB0ciI6ICgiLl9vIiwgIlVSSShfb2JqPSVzKSIsICJVUkkiKSwKKyAgICAiY29uc3QgeG1sRXJyb3IgKiI6ICgiLl9vIiwgIkVycm9yKF9vYmo9JXMpIiwgIkVycm9yIiksCiAgICAgInhtbEVycm9yUHRyIjogKCIuX28iLCAiRXJyb3IoX29iaj0lcykiLCAiRXJyb3IiKSwKICAgICAieG1sT3V0cHV0QnVmZmVyUHRyIjogKCIuX28iLCAib3V0cHV0QnVmZmVyKF9vYmo9JXMpIiwgIm91dHB1dEJ1ZmZlciIpLAogICAgICJ4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciI6ICgiLl9vIiwgImlucHV0QnVmZmVyKF9vYmo9JXMpIiwgImlucHV0QnVmZmVyIiksCmRpZmYgLS1naXQgYS9weXRob24vbGlieG1sLmMgYi9weXRob24vbGlieG1sLmMKaW5kZXggZTA3MWU4Mi4uYmYwNDgwMCAxMDA2NDQKLS0tIGEvcHl0aG9uL2xpYnhtbC5jCisrKyBiL3B5dGhvbi9saWJ4bWwuYwpAQCAtMzQsMTQgKzM0LDYgQEAKICNkZWZpbmUgdnNucHJpbnRmIHRyaW9fdnNucHJpbnRmCiAjZW5kaWYKIAotLyogI2RlZmluZSBERUJVRyAqLwotLyogI2RlZmluZSBERUJVR19TQVggKi8KLS8qICNkZWZpbmUgREVCVUdfWFBBVEggKi8KLS8qICNkZWZpbmUgREVCVUdfRVJST1IgKi8KLS8qICNkZWZpbmUgREVCVUdfTUVNT1JZICovCi0vKiAjZGVmaW5lIERFQlVHX0ZJTEVTICovCi0vKiAjZGVmaW5lIERFQlVHX0xPQURFUiAqLwotCiAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCiBQeU9iamVjdCAqUHlJbml0X2xpYnhtbDJtb2Qodm9pZCk7CiAKQEAgLTEyOCwxMCArMTIwLDYgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKikgImk6eG1sRGVidWdNZW1vcnkiLCAmYWN0aXZhdGUpKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogCi0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sRGVidWdNZW1vcnkoJWQpIGNhbGxlZFxuIiwgYWN0aXZhdGUpOwotI2VuZGlmCi0KICAgICBpZiAoYWN0aXZhdGUgIT0gMCkgewogICAgICAgICBpZiAobGlieG1sTWVtb3J5RGVidWcgPT0gMCkgewogICAgICAgICAgICAgLyoKQEAgLTE0NSwyMyArMTMzLDEzIEBACiAgICAgICAgICAgICBpZiAoKGZyZWVGdW5jID09IHhtbE1lbUZyZWUpICYmIChtYWxsb2NGdW5jID09IHhtbE1lbU1hbGxvYykgJiYKICAgICAgICAgICAgICAgICAocmVhbGxvY0Z1bmMgPT0geG1sTWVtUmVhbGxvYykgJiYKICAgICAgICAgICAgICAgICAoc3RyZHVwRnVuYyA9PSB4bWxNZW1vcnlTdHJkdXApKSB7Ci0gICAgICAgICAgICAgICAgbGlieG1sTWVtb3J5QWxsb2NhdGVkQmFzZSA9IHhtbE1lbVVzZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgICAgICogY2xlYW51cCBmaXJzdCwgYmVjYXVzZSBzb21lIG1lbW9yeSBoYXMgYmVlbgotICAgICAgICAgICAgICAgICAqIGFsbG9jYXRlZCB3aXRoIHRoZSBub24tZGVidWcgbWFsbG9jIGluIHhtbEluaXRQYXJzZXIKLSAgICAgICAgICAgICAgICAgKiB3aGVuIHRoZSBweXRob24gbW9kdWxlIHdhcyBpbXBvcnRlZAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKICAgICAgICAgICAgICAgICByZXQgPSAobG9uZykgeG1sTWVtU2V0dXAoeG1sTWVtRnJlZSwgeG1sTWVtTWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxNZW1SZWFsbG9jLCB4bWxNZW1vcnlTdHJkdXApOwogICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIGxpYnhtbE1lbW9yeUFsbG9jYXRlZEJhc2UgPSB4bWxNZW1Vc2VkKCk7Ci0gICAgICAgICAgICAgICAgLyogcmVpbml0aWFsaXplICovCi0gICAgICAgICAgICAgICAgeG1sSW5pdFBhcnNlcigpOwotICAgICAgICAgICAgICAgIGxpYnhtbF94bWxFcnJvckluaXRpYWxpemUoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpYnhtbE1lbW9yeUFsbG9jYXRlZEJhc2UgPSB4bWxNZW1Vc2VkKCk7CiAgICAgICAgICAgICByZXQgPSAwOwogICAgICAgICB9IGVsc2UgaWYgKGxpYnhtbE1lbW9yeURlYnVnQWN0aXZhdGVkID09IDApIHsKICAgICAgICAgICAgIGxpYnhtbE1lbW9yeUFsbG9jYXRlZEJhc2UgPSB4bWxNZW1Vc2VkKCk7CkBAIC0xODgsMTMgKzE2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncyBBVFRSSUJVVEVfVU5VU0VEKSB7CiAKICAgICBpbnQgaXg7Ci0gICAgbG9uZyBmcmVlZCA9IC0xOwogCi0gICAgaWYgKGxpYnhtbE1lbW9yeURlYnVnKSB7Ci0gICAgICAgIGZyZWVkID0geG1sTWVtVXNlZCgpOwotICAgIH0KLQotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKICAgICAvKgogICAgICAqIE5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlIHJlYWxseSB3YW50IHRvIGRvIHRoaXMgKHJlcXVpcmVkIGZvcgogICAgICAqIG1lbWNoZWNrKSBpbiBhbGwgY2FzZXMuLi4KQEAgLTIxMiwxMiArMTg0LDcgQEAKIAlsaWJ4bWxfeHBhdGhDYWxsYmFja3MgPSBOVUxMOwogICAgIH0KIAotICAgIGlmIChsaWJ4bWxNZW1vcnlEZWJ1ZykgewotICAgICAgICBmcmVlZCAtPSB4bWxNZW1Vc2VkKCk7Ci0JbGlieG1sTWVtb3J5QWxsb2NhdGVkQmFzZSAtPSBmcmVlZDsKLQlpZiAobGlieG1sTWVtb3J5QWxsb2NhdGVkQmFzZSA8IDApCi0JICAgIGxpYnhtbE1lbW9yeUFsbG9jYXRlZEJhc2UgPSAwOwotICAgIH0KKyAgICB4bWxDbGVhbnVwUGFyc2VyKCk7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuKFB5X05vbmUpOwpAQCAtMjUyLDEyICsyMTksOSBAQAogeG1sUHl0aG9uRmlsZUNsb3NlUmF3ICh2b2lkICogY29udGV4dCkgewogICAgIFB5T2JqZWN0ICpmaWxlLCAqcmV0OwogCi0jaWZkZWYgREVCVUdfRklMRVMKLSAgICBwcmludGYoInhtbFB5dGhvbkZpbGVDbG9zZVVucmVmXG4iKTsKLSNlbmRpZgogICAgIGZpbGUgPSAoUHlPYmplY3QgKikgY29udGV4dDsKICAgICBpZiAoZmlsZSA9PSBOVUxMKSByZXR1cm4oLTEpOwotICAgIHJldCA9IFB5RXZhbF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJjbG9zZSIsIChjaGFyICopICIoKSIpOworICAgIHJldCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZmlsZSwgKGNoYXIgKikgImNsb3NlIiwgKGNoYXIgKikgIigpIik7CiAgICAgaWYgKHJldCAhPSBOVUxMKSB7CiAJUHlfREVDUkVGKHJldCk7CiAgICAgfQpAQCAtMjgyLDEyICsyNDYsOSBAQAogICAgIGludCBsZW5yZWFkID0gLTE7CiAgICAgY2hhciAqZGF0YTsKIAotI2lmZGVmIERFQlVHX0ZJTEVTCi0gICAgcHJpbnRmKCJ4bWxQeXRob25GaWxlUmVhZFJhdzogJWRcbiIsIGxlbik7Ci0jZW5kaWYKICAgICBmaWxlID0gKFB5T2JqZWN0ICopIGNvbnRleHQ7CiAgICAgaWYgKGZpbGUgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLSAgICByZXQgPSBQeUV2YWxfQ2FsbE1ldGhvZChmaWxlLCAoY2hhciAqKSAicmVhZCIsIChjaGFyICopICIoaSkiLCBsZW4pOworICAgIHJldCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZmlsZSwgKGNoYXIgKikgInJlYWQiLCAoY2hhciAqKSAiKGkpIiwgbGVuKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKIAlwcmludGYoInhtbFB5dGhvbkZpbGVSZWFkUmF3OiByZXN1bHQgaXMgTlVMTFxuIik7CiAJcmV0dXJuKC0xKTsKQEAgLTM0NywxMiArMzA4LDkgQEAKICAgICBpbnQgbGVucmVhZCA9IC0xOwogICAgIGNoYXIgKmRhdGE7CiAKLSNpZmRlZiBERUJVR19GSUxFUwotICAgIHByaW50ZigieG1sUHl0aG9uRmlsZVJlYWQ6ICVkXG4iLCBsZW4pOwotI2VuZGlmCiAgICAgZmlsZSA9IChQeU9iamVjdCAqKSBjb250ZXh0OwogICAgIGlmIChmaWxlID09IE5VTEwpIHJldHVybigtMSk7Ci0gICAgcmV0ID0gUHlFdmFsX0NhbGxNZXRob2QoZmlsZSwgKGNoYXIgKikgImlvX3JlYWQiLCAoY2hhciAqKSAiKGkpIiwgbGVuKTsKKyAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJpb19yZWFkIiwgKGNoYXIgKikgIihpKSIsIGxlbik7CiAgICAgaWYgKHJldCA9PSBOVUxMKSB7CiAJcHJpbnRmKCJ4bWxQeXRob25GaWxlUmVhZDogcmVzdWx0IGlzIE5VTExcbiIpOwogCXJldHVybigtMSk7CkBAIC00MTIsMTggKzM3MCwxNSBAQAogICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIGludCB3cml0dGVuID0gLTE7CiAKLSNpZmRlZiBERUJVR19GSUxFUwotICAgIHByaW50ZigieG1sUHl0aG9uRmlsZVdyaXRlOiAlZFxuIiwgbGVuKTsKLSNlbmRpZgogICAgIGZpbGUgPSAoUHlPYmplY3QgKikgY29udGV4dDsKICAgICBpZiAoZmlsZSA9PSBOVUxMKSByZXR1cm4oLTEpOwogICAgIHN0cmluZyA9IFBZX0lNUE9SVF9TVFJJTkdfU0laRShidWZmZXIsIGxlbik7CiAgICAgaWYgKHN0cmluZyA9PSBOVUxMKSByZXR1cm4oLTEpOwogICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGZpbGUsIChjaGFyICopICJpb193cml0ZSIpKSB7Ci0gICAgICAgIHJldCA9IFB5RXZhbF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJpb193cml0ZSIsIChjaGFyICopICIoTykiLAorICAgICAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJpb193cml0ZSIsIChjaGFyICopICIoTykiLAogCSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CiAgICAgfSBlbHNlIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGZpbGUsIChjaGFyICopICJ3cml0ZSIpKSB7Ci0gICAgICAgIHJldCA9IFB5RXZhbF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJ3cml0ZSIsIChjaGFyICopICIoTykiLAorICAgICAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJ3cml0ZSIsIChjaGFyICopICIoTykiLAogCSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CiAgICAgfQogICAgIFB5X0RFQ1JFRihzdHJpbmcpOwpAQCAtNDUzLDE1ICs0MDgsMTIgQEAKIHhtbFB5dGhvbkZpbGVDbG9zZSAodm9pZCAqIGNvbnRleHQpIHsKICAgICBQeU9iamVjdCAqZmlsZSwgKnJldCA9IE5VTEw7CiAKLSNpZmRlZiBERUJVR19GSUxFUwotICAgIHByaW50ZigieG1sUHl0aG9uRmlsZUNsb3NlXG4iKTsKLSNlbmRpZgogICAgIGZpbGUgPSAoUHlPYmplY3QgKikgY29udGV4dDsKICAgICBpZiAoZmlsZSA9PSBOVUxMKSByZXR1cm4oLTEpOwogICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGZpbGUsIChjaGFyICopICJpb19jbG9zZSIpKSB7Ci0gICAgICAgIHJldCA9IFB5RXZhbF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJpb19jbG9zZSIsIChjaGFyICopICIoKSIpOworICAgICAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsIChjaGFyICopICJpb19jbG9zZSIsIChjaGFyICopICIoKSIpOwogICAgIH0gZWxzZSBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhmaWxlLCAoY2hhciAqKSAiZmx1c2giKSkgewotICAgICAgICByZXQgPSBQeUV2YWxfQ2FsbE1ldGhvZChmaWxlLCAoY2hhciAqKSAiZmx1c2giLCAoY2hhciAqKSAiKCkiKTsKKyAgICAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChmaWxlLCAoY2hhciAqKSAiZmx1c2giLCAoY2hhciAqKSAiKCkiKTsKICAgICB9CiAgICAgaWYgKHJldCAhPSBOVUxMKSB7CiAJUHlfREVDUkVGKHJldCk7CkBAIC03MTUsMTggKzY2NywxMCBAQAogCVB5T2JqZWN0ICpjdHh0b2JqOwogCiAJY3R4dG9iaiA9IGxpYnhtbF94bWxQYXJzZXJDdHh0UHRyV3JhcChjdHh0KTsKLSNpZmRlZiBERUJVR19MT0FERVIKLQlwcmludGYoInB5dGhvbkV4dGVybmFsRW50aXR5TG9hZGVyOiByZWFkeSB0byBjYWxsXG4iKTsKLSNlbmRpZgogCiAJcmV0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHB5dGhvbkV4dGVybmFsRW50aXR5TG9hZGVyT2JqZXh0LAogCQkgICAgICAoY2hhciAqKSAiKHNzTykiLCBVUkwsIElELCBjdHh0b2JqKTsKIAlQeV9YREVDUkVGKGN0eHRvYmopOwotI2lmZGVmIERFQlVHX0xPQURFUgotCXByaW50ZigicHl0aG9uRXh0ZXJuYWxFbnRpdHlMb2FkZXI6IHJlc3VsdCAiKTsKLQlQeU9iamVjdF9QcmludChyZXQsIHN0ZG91dCwgMCk7Ci0JcHJpbnRmKCJcbiIpOwotI2VuZGlmCiAKIAlpZiAocmV0ICE9IE5VTEwpIHsKIAkgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocmV0LCAoY2hhciAqKSAicmVhZCIpKSB7CkBAIC03NzUsOSArNzE5LDYgQEAKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCi0jaWZkZWYgREVCVUdfTE9BREVSCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sU2V0RW50aXR5TG9hZGVyXG4iKTsKLSNlbmRpZgogICAgIGlmIChkZWZhdWx0RXh0ZXJuYWxFbnRpdHlMb2FkZXIgPT0gTlVMTCkgCiAJZGVmYXVsdEV4dGVybmFsRW50aXR5TG9hZGVyID0geG1sR2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoKTsKIApAQCAtODk3LDkgKzgzOCw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IHR5cGUgPSAwOwogCi0jaWZkZWYgREVCVUdfU0FYCi0gICAgcHJpbnRmKCJweXRob25TdGFydEVsZW1lbnQoJXMpIGNhbGxlZFxuIiwgbmFtZSk7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAic3RhcnRFbGVtZW50IikpCiAgICAgICAgIHR5cGUgPSAxOwpAQCAtOTUxLDkgKzg4OSw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uU3RhcnREb2N1bWVudCgpIGNhbGxlZFxuIik7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAic3RhcnREb2N1bWVudCIpKSB7CiAgICAgICAgIHJlc3VsdCA9CkBAIC05NzAsOSArOTA1LDYgQEAKICAgICBQeU9iamVjdCAqaGFuZGxlcjsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCi0jaWZkZWYgREVCVUdfU0FYCi0gICAgcHJpbnRmKCJweXRob25FbmREb2N1bWVudCgpIGNhbGxlZFxuIik7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAiZW5kRG9jdW1lbnQiKSkgewogICAgICAgICByZXN1bHQgPQpAQCAtOTkzLDkgKzkyNSw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uRW5kRWxlbWVudCglcykgY2FsbGVkXG4iLCBuYW1lKTsKLSNlbmRpZgogICAgIGhhbmRsZXIgPSAoUHlPYmplY3QgKikgdXNlcl9kYXRhOwogICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGhhbmRsZXIsIChjaGFyICopICJlbmRFbGVtZW50IikpIHsKICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChoYW5kbGVyLCAoY2hhciAqKSAiZW5kRWxlbWVudCIsCkBAIC0xMDE4LDkgKzk0Nyw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uUmVmZXJlbmNlKCVzKSBjYWxsZWRcbiIsIG5hbWUpOwotI2VuZGlmCiAgICAgaGFuZGxlciA9IChQeU9iamVjdCAqKSB1c2VyX2RhdGE7CiAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaGFuZGxlciwgKGNoYXIgKikgInJlZmVyZW5jZSIpKSB7CiAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaGFuZGxlciwgKGNoYXIgKikgInJlZmVyZW5jZSIsCkBAIC0xMDM4LDkgKzk2NCw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IHR5cGUgPSAwOwogCi0jaWZkZWYgREVCVUdfU0FYCi0gICAgcHJpbnRmKCJweXRob25DaGFyYWN0ZXJzKCVzLCAlZCkgY2FsbGVkXG4iLCBjaCwgbGVuKTsKLSNlbmRpZgogICAgIGhhbmRsZXIgPSAoUHlPYmplY3QgKikgdXNlcl9kYXRhOwogICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGhhbmRsZXIsIChjaGFyICopICJjaGFyYWN0ZXJzIikpCiAgICAgICAgIHR5cGUgPSAxOwpAQCAtMTA2Niw5ICs5ODksNiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGludCB0eXBlID0gMDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uSWdub3JhYmxlV2hpdGVzcGFjZSglcywgJWQpIGNhbGxlZFxuIiwgY2gsIGxlbik7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAiaWdub3JhYmxlV2hpdGVzcGFjZSIpKQogICAgICAgICB0eXBlID0gMTsKQEAgLTEwOTUsOSArMTAxNSw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uUHJvY2Vzc2luZ0luc3RydWN0aW9uKCVzLCAlcykgY2FsbGVkXG4iLCB0YXJnZXQsIGRhdGEpOwotI2VuZGlmCiAgICAgaGFuZGxlciA9IChQeU9iamVjdCAqKSB1c2VyX2RhdGE7CiAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaGFuZGxlciwgKGNoYXIgKikgInByb2Nlc3NpbmdJbnN0cnVjdGlvbiIpKSB7CiAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaGFuZGxlciwgKGNoYXIgKikKQEAgLTExMTMsOSArMTAzMCw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uQ29tbWVudCglcykgY2FsbGVkXG4iLCB2YWx1ZSk7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAiY29tbWVudCIpKSB7CiAgICAgICAgIHJlc3VsdCA9CkBAIC0xMTM1LDkgKzEwNDksNiBAQAogICAgIHZhX2xpc3QgYXJnczsKICAgICBjaGFyIGJ1ZlsxMDI0XTsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uV2FybmluZyglcykgY2FsbGVkXG4iLCBtc2cpOwotI2VuZGlmCiAgICAgaGFuZGxlciA9IChQeU9iamVjdCAqKSB1c2VyX2RhdGE7CiAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaGFuZGxlciwgKGNoYXIgKikgIndhcm5pbmciKSkgewogICAgICAgICB2YV9zdGFydChhcmdzLCBtc2cpOwpAQCAtMTE2MSw5ICsxMDcyLDYgQEAKICAgICB2YV9saXN0IGFyZ3M7CiAgICAgY2hhciBidWZbMTAyNF07CiAKLSNpZmRlZiBERUJVR19TQVgKLSAgICBwcmludGYoInB5dGhvbkVycm9yKCVzKSBjYWxsZWRcbiIsIG1zZyk7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAiZXJyb3IiKSkgewogICAgICAgICB2YV9zdGFydChhcmdzLCBtc2cpOwpAQCAtMTE4Nyw5ICsxMDk1LDYgQEAKICAgICB2YV9saXN0IGFyZ3M7CiAgICAgY2hhciBidWZbMTAyNF07CiAKLSNpZmRlZiBERUJVR19TQVgKLSAgICBwcmludGYoInB5dGhvbkZhdGFsRXJyb3IoJXMpIGNhbGxlZFxuIiwgbXNnKTsKLSNlbmRpZgogICAgIGhhbmRsZXIgPSAoUHlPYmplY3QgKikgdXNlcl9kYXRhOwogICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGhhbmRsZXIsIChjaGFyICopICJmYXRhbEVycm9yIikpIHsKICAgICAgICAgdmFfc3RhcnQoYXJncywgbXNnKTsKQEAgLTEyMTIsOSArMTExNyw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IHR5cGUgPSAwOwogCi0jaWZkZWYgREVCVUdfU0FYCi0gICAgcHJpbnRmKCJweXRob25DZGF0YUJsb2NrKCVzLCAlZCkgY2FsbGVkXG4iLCBjaCwgbGVuKTsKLSNlbmRpZgogICAgIGhhbmRsZXIgPSAoUHlPYmplY3QgKikgdXNlcl9kYXRhOwogICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGhhbmRsZXIsIChjaGFyICopICJjZGF0YUJsb2NrIikpCiAgICAgICAgIHR5cGUgPSAxOwpAQCAtMTI0MywxMCArMTE0NSw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uRXh0ZXJuYWxTdWJzZXQoJXMsICVzLCAlcykgY2FsbGVkXG4iLAotICAgICAgICAgICBuYW1lLCBleHRlcm5hbElELCBzeXN0ZW1JRCk7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAiZXh0ZXJuYWxTdWJzZXQiKSkgewogICAgICAgICByZXN1bHQgPQpAQCAtMTM5MiwxMCArMTI5MCw2IEBACiAgICAgUHlPYmplY3QgKmhhbmRsZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIERFQlVHX1NBWAotICAgIHByaW50ZigicHl0aG9uSW50ZXJuYWxTdWJzZXQoJXMsICVzLCAlcykgY2FsbGVkXG4iLAotICAgICAgICAgICBuYW1lLCBFeHRlcm5hbElELCBTeXN0ZW1JRCk7Ci0jZW5kaWYKICAgICBoYW5kbGVyID0gKFB5T2JqZWN0ICopIHVzZXJfZGF0YTsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhoYW5kbGVyLCAoY2hhciAqKSAiaW50ZXJuYWxTdWJzZXQiKSkgewogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGhhbmRsZXIsIChjaGFyICopICJpbnRlcm5hbFN1YnNldCIsCkBAIC0xNDY1LDEwICsxMzU5LDYgQEAKICAgICAgICAgICZzaXplLCAmVVJJKSkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sQ3JlYXRlUHVzaFBhcnNlciglcCwgJXMsICVkLCAlcykgY2FsbGVkXG4iLAotICAgICAgICAgICBweW9ial9TQVgsIGNodW5rLCBzaXplLCBVUkkpOwotI2VuZGlmCiAgICAgaWYgKHB5b2JqX1NBWCAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFNBWCA9ICZweXRob25TYXhIYW5kbGVyOwogICAgICAgICBQeV9JTkNSRUYocHlvYmpfU0FYKTsKQEAgLTE0OTcsMTAgKzEzODcsNiBAQAogICAgICAgICAgJnNpemUsICZVUkkpKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9odG1sQ3JlYXRlUHVzaFBhcnNlciglcCwgJXMsICVkLCAlcykgY2FsbGVkXG4iLAotICAgICAgICAgICBweW9ial9TQVgsIGNodW5rLCBzaXplLCBVUkkpOwotI2VuZGlmCiAgICAgaWYgKHB5b2JqX1NBWCAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFNBWCA9ICZweXRob25TYXhIYW5kbGVyOwogICAgICAgICBQeV9JTkNSRUYocHlvYmpfU0FYKTsKQEAgLTE1MjQsMTUgKzE0MTAsMTIgQEAKICAgICBjb25zdCBjaGFyICpVUkk7CiAgICAgUHlPYmplY3QgKnB5b2JqX1NBWCA9IE5VTEw7CiAgICAgeG1sU0FYSGFuZGxlclB0ciBTQVggPSBOVUxMOworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAoY2hhciAqKSAiT3NpOnhtbFNBWFBhcnNlRmlsZSIsICZweW9ial9TQVgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZVUkksICZyZWNvdmVyKSkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sU0FYUGFyc2VGaWxlKCVwLCAlcywgJWQpIGNhbGxlZFxuIiwKLSAgICAgICAgICAgcHlvYmpfU0FYLCBVUkksIHJlY292ZXIpOwotI2VuZGlmCiAgICAgaWYgKHB5b2JqX1NBWCA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTE1NDAsNyArMTQyMyw5IEBACiAgICAgU0FYID0gJnB5dGhvblNheEhhbmRsZXI7CiAgICAgUHlfSU5DUkVGKHB5b2JqX1NBWCk7CiAgICAgLyogVGhlIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBpbiBweXRob25FbmREb2N1bWVudCgpICovCi0gICAgeG1sU0FYVXNlclBhcnNlRmlsZShTQVgsIHB5b2JqX1NBWCwgVVJJKTsKKyAgICBjdHh0ID0geG1sTmV3U0FYUGFyc2VyQ3R4dChTQVgsIHB5b2JqX1NBWCk7CisgICAgeG1sQ3R4dFJlYWRGaWxlKGN0eHQsIFVSSSwgTlVMTCwgMCk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAjZW5kaWYgLyogTElCWE1MX1NBWDFfRU5BQkxFRCAqLwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtMTU1NCwxNiArMTQzOSwxMyBAQAogICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogICAgIFB5T2JqZWN0ICpweW9ial9TQVggPSBOVUxMOwogICAgIHhtbFNBWEhhbmRsZXJQdHIgU0FYID0gTlVMTDsKKyAgICBodG1sUGFyc2VyQ3R4dFB0ciBjdHh0OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlCiAgICAgICAgIChhcmdzLCAoY2hhciAqKSAiT3N6Omh0bWxTQVhQYXJzZUZpbGUiLCAmcHlvYmpfU0FYLCAmVVJJLAogICAgICAgICAgJmVuY29kaW5nKSkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfaHRtbFNBWFBhcnNlRmlsZSglcCwgJXMsICVzKSBjYWxsZWRcbiIsCi0gICAgICAgICAgIHB5b2JqX1NBWCwgVVJJLCBlbmNvZGluZyk7Ci0jZW5kaWYKICAgICBpZiAocHlvYmpfU0FYID09IFB5X05vbmUpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtMTU3MSw3ICsxNDUzLDkgQEAKICAgICBTQVggPSAmcHl0aG9uU2F4SGFuZGxlcjsKICAgICBQeV9JTkNSRUYocHlvYmpfU0FYKTsKICAgICAvKiBUaGUgcmVmZXJlbmNlIGlzIHJlbGVhc2VkIGluIHB5dGhvbkVuZERvY3VtZW50KCkgKi8KLSAgICBodG1sU0FYUGFyc2VGaWxlKFVSSSwgZW5jb2RpbmcsIFNBWCwgcHlvYmpfU0FYKTsKKyAgICBjdHh0ID0gaHRtbE5ld1NBWFBhcnNlckN0eHQoU0FYLCBweW9ial9TQVgpOworICAgIGh0bWxDdHh0UmVhZEZpbGUoY3R4dCwgVVJJLCBlbmNvZGluZywgMCk7CisgICAgaHRtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gKFB5X05vbmUpOwogI2Vsc2UKQEAgLTE2MjIsMTEgKzE1MDYsNiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgY2hhciBzdHJbMTAwMF07CiAKLSNpZmRlZiBERUJVR19FUlJPUgotICAgIHByaW50ZigibGlieG1sX3htbEVycm9yRnVuY0hhbmRsZXIoJXAsICVzLCAuLi4pIGNhbGxlZFxuIiwgY3R4LCBtc2cpOwotI2VuZGlmCi0KLQogICAgIGlmIChsaWJ4bWxfeG1sUHl0aG9uRXJyb3JGdW5jSGFuZGxlciA9PSBOVUxMKSB7CiAgICAgICAgIHZhX3N0YXJ0KGFwLCBtc2cpOwogICAgICAgICB2ZnByaW50ZihzdGRlcnIsIG1zZywgYXApOwpAQCAtMTY0Miw3ICsxNTIxLDcgQEAKICAgICAgICAgUHlfWElOQ1JFRihsaWJ4bWxfeG1sUHl0aG9uRXJyb3JGdW5jQ3R4dCk7CiAgICAgICAgIG1lc3NhZ2UgPSBsaWJ4bWxfY2hhclB0ckNvbnN0V3JhcChzdHIpOwogICAgICAgICBQeVR1cGxlX1NldEl0ZW0obGlzdCwgMSwgbWVzc2FnZSk7Ci0gICAgICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGxpYnhtbF94bWxQeXRob25FcnJvckZ1bmNIYW5kbGVyLCBsaXN0KTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChsaWJ4bWxfeG1sUHl0aG9uRXJyb3JGdW5jSGFuZGxlciwgbGlzdCk7CiAgICAgICAgIFB5X1hERUNSRUYobGlzdCk7CiAgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKICAgICB9CkBAIC0xNjUxLDkgKzE1MzAsNiBAQAogc3RhdGljIHZvaWQKIGxpYnhtbF94bWxFcnJvckluaXRpYWxpemUodm9pZCkKIHsKLSNpZmRlZiBERUJVR19FUlJPUgotICAgIHByaW50ZigibGlieG1sX3htbEVycm9ySW5pdGlhbGl6ZSgpIGNhbGxlZFxuIik7Ci0jZW5kaWYKICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKE5VTEwsIGxpYnhtbF94bWxFcnJvckZ1bmNIYW5kbGVyKTsKICAgICB4bWxUaHJEZWZTZXRHZW5lcmljRXJyb3JGdW5jKE5VTEwsIGxpYnhtbF94bWxFcnJvckZ1bmNIYW5kbGVyKTsKIH0KQEAgLTE2NzEsMTEgKzE1NDcsNiBAQAogICAgICAgICAgJnB5b2JqX2N0eCkpCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAKLSNpZmRlZiBERUJVR19FUlJPUgotICAgIHByaW50ZigibGlieG1sX3htbFJlZ2lzdGVyRXJyb3JIYW5kbGVyKCVwLCAlcCkgY2FsbGVkXG4iLCBweW9ial9jdHgsCi0gICAgICAgICAgIHB5b2JqX2YpOwotI2VuZGlmCi0KICAgICBpZiAobGlieG1sX3htbFB5dGhvbkVycm9yRnVuY0hhbmRsZXIgIT0gTlVMTCkgewogICAgICAgICBQeV9YREVDUkVGKGxpYnhtbF94bWxQeXRob25FcnJvckZ1bmNIYW5kbGVyKTsKICAgICB9CkBAIC0xNzE2LDEwICsxNTg3LDYgQEAKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAgICAgeG1sUGFyc2VyQ3R4dFB5Q3R4dFB0ciBweUN0eHQ7CiAgICAgCi0jaWZkZWYgREVCVUdfRVJST1IKLSAgICBwcmludGYoImxpYnhtbF94bWxQYXJzZXJDdHh0R2VuZXJpY0Vycm9yRnVuY0hhbmRsZXIoJXAsICVzLCAuLi4pIGNhbGxlZFxuIiwgY3R4LCBzdHIpOwotI2VuZGlmCi0KICAgICBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpY3R4OwogICAgIHB5Q3R4dCA9ICh4bWxQYXJzZXJDdHh0UHlDdHh0UHRyKWN0eHQtPl9wcml2YXRlOwogCkBAIC0xNzMwLDcgKzE1OTcsNyBAQAogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAyLCBsaWJ4bWxfaW50V3JhcChzZXZlcml0eSkpOwogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAzLCBQeV9Ob25lKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QocHlDdHh0LT5mLCBsaXN0KTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHB5Q3R4dC0+ZiwgbGlzdCk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSAKICAgICB7CiAJLyogVE9ETzogbWFuYWdlIGZvciB0aGUgZXhjZXB0aW9uIHRvIGJlIHByb3BhZ2F0ZWQuLi4gKi8KQEAgLTE5MDYsMTcgKzE3NzMsMTMgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIHhtbFZhbGlkQ3R4dFB5Q3R4dFB0ciBweUN0eHQ7CiAgICAgCi0jaWZkZWYgREVCVUdfRVJST1IKLSAgICBwcmludGYoImxpYnhtbF94bWxWYWxpZEN0eHRHZW5lcmljRXJyb3JGdW5jSGFuZGxlciglcCwgJWQsICVzLCAuLi4pIGNhbGxlZFxuIiwgY3R4LCBzZXZlcml0eSwgc3RyKTsKLSNlbmRpZgotCiAgICAgcHlDdHh0ID0gKHhtbFZhbGlkQ3R4dFB5Q3R4dFB0ciljdHg7CiAgICAgCiAgICAgbGlzdCA9IFB5VHVwbGVfTmV3KDIpOwogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAwLCBsaWJ4bWxfY2hhclB0cldyYXAoc3RyKSk7CiAgICAgUHlUdXBsZV9TZXRJdGVtKGxpc3QsIDEsIHB5Q3R4dC0+YXJnKTsKICAgICBQeV9YSU5DUkVGKHB5Q3R4dC0+YXJnKTsKLSAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChweUN0eHQtPmVycm9yLCBsaXN0KTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHB5Q3R4dC0+ZXJyb3IsIGxpc3QpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgCiAgICAgewogCS8qIFRPRE86IG1hbmFnZSBmb3IgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9wYWdhdGVkLi4uICovCkBAIC0xOTMzLDE3ICsxNzk2LDEzIEBACiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICB4bWxWYWxpZEN0eHRQeUN0eHRQdHIgcHlDdHh0OwogICAgIAotI2lmZGVmIERFQlVHX0VSUk9SCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sVmFsaWRDdHh0R2VuZXJpY1dhcm5pbmdGdW5jSGFuZGxlciglcCwgJWQsICVzLCAuLi4pIGNhbGxlZFxuIiwgY3R4LCBzZXZlcml0eSwgc3RyKTsKLSNlbmRpZgotCiAgICAgcHlDdHh0ID0gKHhtbFZhbGlkQ3R4dFB5Q3R4dFB0ciljdHg7CiAKICAgICBsaXN0ID0gUHlUdXBsZV9OZXcoMik7CiAgICAgUHlUdXBsZV9TZXRJdGVtKGxpc3QsIDAsIGxpYnhtbF9jaGFyUHRyV3JhcChzdHIpKTsKICAgICBQeVR1cGxlX1NldEl0ZW0obGlzdCwgMSwgcHlDdHh0LT5hcmcpOwogICAgIFB5X1hJTkNSRUYocHlDdHh0LT5hcmcpOwotICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KHB5Q3R4dC0+d2FybiwgbGlzdCk7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChweUN0eHQtPndhcm4sIGxpc3QpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgCiAgICAgewogCS8qIFRPRE86IG1hbmFnZSBmb3IgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9wYWdhdGVkLi4uICovCkBAIC0xOTg4LDEwICsxODQ3LDYgQEAKICAgICAgICAgKGFyZ3MsIChjaGFyICopICJPT098Tzp4bWxTZXRWYWxpZEVycm9ycyIsICZweW9ial9jdHgsICZweW9ial9lcnJvciwgJnB5b2JqX3dhcm4sICZweW9ial9hcmcpKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogCi0jaWZkZWYgREVCVUdfRVJST1IKLSAgICBwcmludGYoImxpYnhtbF94bWxTZXRWYWxpZEVycm9ycyglcCwgJXAsICVwKSBjYWxsZWRcbiIsIHB5b2JqX2N0eCwgcHlvYmpfZXJyb3IsIHB5b2JqX3dhcm4pOwotI2VuZGlmCi0KICAgICBjdHh0ID0gUHlWYWxpZEN0eHRfR2V0KHB5b2JqX2N0eCk7CiAgICAgcHlDdHh0ID0geG1sTWFsbG9jKHNpemVvZih4bWxWYWxpZEN0eHRQeUN0eHQpKTsKICAgICBpZiAocHlDdHh0ID09IE5VTEwpIHsKQEAgLTIwNzgsNyArMTkzMyw3IEBACiAgICAgUHlUdXBsZV9TZXRJdGVtKGxpc3QsIDEsIGxpYnhtbF9jaGFyUHRyQ29uc3RXcmFwKG1zZykpOwogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAyLCBsaWJ4bWxfaW50V3JhcChzZXZlcml0eSkpOwogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAzLCBsaWJ4bWxfeG1sVGV4dFJlYWRlckxvY2F0b3JQdHJXcmFwKGxvY2F0b3IpKTsKLSAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChweUN0eHQtPmYsIGxpc3QpOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QocHlDdHh0LT5mLCBsaXN0KTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgewogCS8qIFRPRE86IG1hbmFnZSBmb3IgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9wYWdhdGVkLi4uICovCkBAIC0yMjQ0LDEwICsyMDk5LDYgQEAKICAgICAgICAgcmV0dXJuOwogICAgIG5hbWUgPSByY3R4dC0+ZnVuY3Rpb247CiAgICAgbnNfdXJpID0gcmN0eHQtPmZ1bmN0aW9uVVJJOwotI2lmZGVmIERFQlVHX1hQQVRICi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sWFBhdGhGdW5jQ2FsbGJhY2sgY2FsbGVkIG5hbWUgJXMgVVJJICVzXG4iLCBuYW1lLAotICAgICAgICAgICBuc191cmkpOwotI2VuZGlmCiAKICAgICAvKgogICAgICAqIEZpbmQgdGhlIGZ1bmN0aW9uLCBpdCBzaG91bGQgYmUgdGhlcmUgaXQgd2FzIHRoZXJlIGF0IGxvb2t1cApAQCAtMjI3Myw3ICsyMTI0LDcgQEAKICAgICAgICAgY3VyID0gbGlieG1sX3htbFhQYXRoT2JqZWN0UHRyV3JhcChvYmopOwogICAgICAgICBQeVR1cGxlX1NldEl0ZW0obGlzdCwgaSArIDEsIGN1cik7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGN1cnJlbnRfZnVuY3Rpb24sIGxpc3QpOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoY3VycmVudF9mdW5jdGlvbiwgbGlzdCk7CiAgICAgUHlfREVDUkVGKGxpc3QpOwogCiAgICAgb2JqID0gbGlieG1sX3htbFhQYXRoT2JqZWN0UHRyQ29udmVydChyZXN1bHQpOwpAQCAtMjI4NiwxMCArMjEzNyw2IEBACiB7CiAgICAgaW50IGk7CiAKLSNpZmRlZiBERUJVR19YUEFUSAotICAgIHByaW50ZigibGlieG1sX3htbFhQYXRoRnVuY0xvb2t1cEZ1bmMoJXAsICVzLCAlcykgY2FsbGVkXG4iLAotICAgICAgICAgICBjdHh0LCBuYW1lLCBuc191cmkpOwotI2VuZGlmCiAgICAgLyoKICAgICAgKiBUaGlzIGlzIGNhbGxlZCBvbmNlIG9ubHkuIFRoZSBhZGRyZXNzIGlzIHRoZW4gc3RvcmVkIGluIHRoZQogICAgICAqIFhQYXRoIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgdGhlIHByb3BlciBvYmplY3QgdG8gY2FsbCBjYW4KQEAgLTIzMTQsOSArMjE2MSw2IEBACiAgICAgaWYgKGxpYnhtbF94cGF0aENhbGxiYWNrc0luaXRpYWxpemVkICE9IDApCiAgICAgICAgIHJldHVybjsKIAotI2lmZGVmIERFQlVHX1hQQVRICi0gICAgcHJpbnRmKCJsaWJ4bWxfeHBhdGhDYWxsYmFja3NJbml0aWFsaXplZCBjYWxsZWRcbiIpOwotI2VuZGlmCiAgICAgbGlieG1sX3hwYXRoQ2FsbGJhY2tzID0gKGxpYnhtbF94cGF0aENhbGxiYWNrQXJyYXkqKXhtbE1hbGxvYygKICAgICAJCWxpYnhtbF94cGF0aENhbGxiYWNrc0FsbG9jZCpzaXplb2YobGlieG1sX3hwYXRoQ2FsbGJhY2spKTsKIApAQCAtMjM1NiwxMCArMjIwMCw2IEBACiAgICAgICAgIHB5X3JldHZhbCA9IGxpYnhtbF9pbnRXcmFwKC0xKTsKICAgICAgICAgcmV0dXJuIChweV9yZXR2YWwpOwogICAgIH0KLSNpZmRlZiBERUJVR19YUEFUSAotICAgIHByaW50ZigibGlieG1sX3JlZ2lzdGVyWFBhdGhGdW5jdGlvbiglcCwgJXMsICVzKSBjYWxsZWRcbiIsCi0gICAgICAgICAgIGN0eCwgbmFtZSwgbnNfdXJpKTsKLSNlbmRpZgogICAgIGZvciAoaSA9IDA7IGkgPCBsaWJ4bWxfeHBhdGhDYWxsYmFja3NOYjsgaSsrKSB7CiAJaWYgKChjdHggPT0gKCpsaWJ4bWxfeHBhdGhDYWxsYmFja3MpW2ldLmN0eCkgJiYKICAgICAgICAgICAgICh4bWxTdHJFcXVhbChuYW1lLCAoKmxpYnhtbF94cGF0aENhbGxiYWNrcylbaV0ubmFtZSkpICYmCkBAIC0yNDMyLDEwICsyMjcyLDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY3VyID0gUHl4bWxOb2RlX0dldChvYmopOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9uYW1lOiBjdXIgPSAlcCB0eXBlICVkXG4iLCBjdXIsIGN1ci0+dHlwZSk7Ci0jZW5kaWYKLQogICAgIHN3aXRjaCAoY3VyLT50eXBlKSB7CiAgICAgICAgIGNhc2UgWE1MX0RPQ1VNRU5UX05PREU6CiAgICAgICAgIGNhc2UgWE1MX0hUTUxfRE9DVU1FTlRfTk9ERTp7CkBAIC0yNDc2LDEwICsyMzEyLDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY3VyID0gUHl4bWxOb2RlX0dldChvYmopOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9kb2M6IGN1ciA9ICVwXG4iLCBjdXIpOwotI2VuZGlmCi0KICAgICBzd2l0Y2ggKGN1ci0+dHlwZSkgewogICAgICAgICBjYXNlIFhNTF9ET0NVTUVOVF9OT0RFOgogICAgICAgICBjYXNlIFhNTF9IVE1MX0RPQ1VNRU5UX05PREU6CkBAIC0yNTMxLDEwICsyMzYzLDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY3VyID0gUHl4bWxOb2RlX0dldChvYmopOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9uZXh0OiBjdXIgPSAlcFxuIiwgY3VyKTsKLSNlbmRpZgotCiAgICAgc3dpdGNoIChjdXItPnR5cGUpIHsKICAgICAgICAgY2FzZSBYTUxfRE9DVU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBYTUxfSFRNTF9ET0NVTUVOVF9OT0RFOgpAQCAtMjU3MiwxMCArMjQwMCw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGN1ciA9IFB5eG1sTm9kZV9HZXQob2JqKTsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfcHJldjogY3VyID0gJXBcbiIsIGN1cik7Ci0jZW5kaWYKLQogICAgIHN3aXRjaCAoY3VyLT50eXBlKSB7CiAgICAgICAgIGNhc2UgWE1MX0RPQ1VNRU5UX05PREU6CiAgICAgICAgIGNhc2UgWE1MX0hUTUxfRE9DVU1FTlRfTk9ERToKQEAgLTI2MDksMTAgKzI0MzMsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBjdXIgPSBQeXhtbE5vZGVfR2V0KG9iaik7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX2NoaWxkcmVuOiBjdXIgPSAlcFxuIiwgY3VyKTsKLSNlbmRpZgotCiAgICAgc3dpdGNoIChjdXItPnR5cGUpIHsKICAgICAgICAgY2FzZSBYTUxfRUxFTUVOVF9OT0RFOgogICAgICAgICBjYXNlIFhNTF9FTlRJVFlfUkVGX05PREU6CkBAIC0yNjQ5LDEwICsyNDY5LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY3VyID0gUHl4bWxOb2RlX0dldChvYmopOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9sYXN0OiBjdXIgPSAlcFxuIiwgY3VyKTsKLSNlbmRpZgotCiAgICAgc3dpdGNoIChjdXItPnR5cGUpIHsKICAgICAgICAgY2FzZSBYTUxfRUxFTUVOVF9OT0RFOgogICAgICAgICBjYXNlIFhNTF9FTlRJVFlfUkVGX05PREU6CkBAIC0yNjg5LDEwICsyNTA1LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY3VyID0gUHl4bWxOb2RlX0dldChvYmopOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9wYXJlbnQ6IGN1ciA9ICVwXG4iLCBjdXIpOwotI2VuZGlmCi0KICAgICBzd2l0Y2ggKGN1ci0+dHlwZSkgewogICAgICAgICBjYXNlIFhNTF9ET0NVTUVOVF9OT0RFOgogICAgICAgICBjYXNlIFhNTF9IVE1MX0RPQ1VNRU5UX05PREU6CkBAIC0yNzMzLDEwICsyNTQ1LDYgQEAKIAlyZXR1cm4gKFB5X05vbmUpOwogICAgIH0KIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfdHlwZTogY3VyID0gJXBcbiIsIGN1cik7Ci0jZW5kaWYKLQogICAgIHN3aXRjaCAoY3VyLT50eXBlKSB7CiAgICAgICAgIGNhc2UgWE1MX0VMRU1FTlRfTk9ERToKICAgICAgICAgICAgIHJlcyA9IChjb25zdCB4bWxDaGFyICopICJlbGVtZW50IjsKQEAgLTI3OTksOSArMjYwNyw2IEBACiAgICAgICAgICAgICByZXMgPSAoY29uc3QgeG1sQ2hhciAqKSAieGluY2x1ZGVfZW5kIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3R5cGU6IGN1ciA9ICVwOiAlc1xuIiwgY3VyLCByZXMpOwotI2VuZGlmCiAKICAgICByZXN1bHRvYmogPSBsaWJ4bWxfY29uc3R4bWxDaGFyUHRyV3JhcChyZXMpOwogICAgIHJldHVybiByZXN1bHRvYmo7CkBAIC0zMDc1LDkgKzI4ODAsNiBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAoY2hhciAqKSAiczp4bWxOZXdOb2RlIiwgJm5hbWUpKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIG5vZGUgPSAoeG1sTm9kZVB0cikgeG1sTmV3Tm9kZShOVUxMLCBuYW1lKTsKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigiTmV3Tm9kZTogJXMgOiAlcFxuIiwgbmFtZSwgKHZvaWQgKikgbm9kZSk7Ci0jZW5kaWYKIAogICAgIGlmIChub2RlID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpAQCAtMzEwOSwxMCArMjkxMSw2IEBACiAJY3R4dC0+Y2F0YWxvZ3MgPSB4bWxDYXRhbG9nQWRkTG9jYWwoY3R4dC0+Y2F0YWxvZ3MsIFVSTCk7CiAgICAgfQogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoIkxvY2FsQ2F0YWxvZzogJXNcbiIsIFVSTCk7Ci0jZW5kaWYKLQogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gKFB5X05vbmUpOwogfQpAQCAtMzE0MCwxNyArMjkzOCwxMyBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgeG1sUmVsYXhOR1ZhbGlkQ3R4dFB5Q3R4dFB0ciBweUN0eHQ7CiAgICAgCi0jaWZkZWYgREVCVUdfRVJST1IKLSAgICBwcmludGYoImxpYnhtbF94bWxSZWxheE5HVmFsaWRpdHlHZW5lcmljRXJyb3JGdW5jSGFuZGxlciglcCwgJXMsIC4uLikgY2FsbGVkXG4iLCBjdHgsIHN0cik7Ci0jZW5kaWYKLQogICAgIHB5Q3R4dCA9ICh4bWxSZWxheE5HVmFsaWRDdHh0UHlDdHh0UHRyKWN0eDsKIAogICAgIGxpc3QgPSBQeVR1cGxlX05ldygyKTsKICAgICBQeVR1cGxlX1NldEl0ZW0obGlzdCwgMCwgbGlieG1sX2NoYXJQdHJXcmFwKHN0cikpOwogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAxLCBweUN0eHQtPmFyZyk7CiAgICAgUHlfWElOQ1JFRihweUN0eHQtPmFyZyk7Ci0gICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QocHlDdHh0LT5lcnJvciwgbGlzdCk7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChweUN0eHQtPmVycm9yLCBsaXN0KTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIAogICAgIHsKICAgICAgICAgLyogVE9ETzogbWFuYWdlIGZvciB0aGUgZXhjZXB0aW9uIHRvIGJlIHByb3BhZ2F0ZWQuLi4gKi8KQEAgLTMxNjcsMTcgKzI5NjEsMTMgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIHhtbFJlbGF4TkdWYWxpZEN0eHRQeUN0eHRQdHIgcHlDdHh0OwogICAgIAotI2lmZGVmIERFQlVHX0VSUk9SCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sUmVsYXhOR1ZhbGlkaXR5R2VuZXJpY1dhcm5pbmdGdW5jSGFuZGxlciglcCwgJXMsIC4uLikgY2FsbGVkXG4iLCBjdHgsIHN0cik7Ci0jZW5kaWYKLQogICAgIHB5Q3R4dCA9ICh4bWxSZWxheE5HVmFsaWRDdHh0UHlDdHh0UHRyKWN0eDsKIAogICAgIGxpc3QgPSBQeVR1cGxlX05ldygyKTsKICAgICBQeVR1cGxlX1NldEl0ZW0obGlzdCwgMCwgbGlieG1sX2NoYXJQdHJXcmFwKHN0cikpOwogICAgIFB5VHVwbGVfU2V0SXRlbShsaXN0LCAxLCBweUN0eHQtPmFyZyk7CiAgICAgUHlfWElOQ1JFRihweUN0eHQtPmFyZyk7Ci0gICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QocHlDdHh0LT53YXJuLCBsaXN0KTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHB5Q3R4dC0+d2FybiwgbGlzdCk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSAKICAgICB7CiAgICAgICAgIC8qIFRPRE86IG1hbmFnZSBmb3IgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9wYWdhdGVkLi4uICovCkBAIC0zMjIyLDEwICszMDEyLDYgQEAKICAgICAgICAgKGFyZ3MsIChjaGFyICopICJPT098Tzp4bWxSZWxheE5HU2V0VmFsaWRFcnJvcnMiLCAmcHlvYmpfY3R4LCAmcHlvYmpfZXJyb3IsICZweW9ial93YXJuLCAmcHlvYmpfYXJnKSkKICAgICAgICAgcmV0dXJuIChOVUxMKTsKIAotI2lmZGVmIERFQlVHX0VSUk9SCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sUmVsYXhOR1NldFZhbGlkRXJyb3JzKCVwLCAlcCwgJXApIGNhbGxlZFxuIiwgcHlvYmpfY3R4LCBweW9ial9lcnJvciwgcHlvYmpfd2Fybik7Ci0jZW5kaWYKLQogICAgIGN0eHQgPSBQeXJlbGF4TmdWYWxpZEN0eHRfR2V0KHB5b2JqX2N0eCk7CiAgICAgaWYgKHhtbFJlbGF4TkdHZXRWYWxpZEVycm9ycyhjdHh0LCBOVUxMLCBOVUxMLCAodm9pZCAqKikgJnB5Q3R4dCkgPT0gLTEpCiAgICAgewpAQCAtMzMwNCwxNyArMzA5MCwxMyBAQAogCVB5T2JqZWN0ICpyZXN1bHQ7CiAJeG1sU2NoZW1hVmFsaWRDdHh0UHlDdHh0UHRyIHB5Q3R4dDsKIAotI2lmZGVmIERFQlVHX0VSUk9SCi0JcHJpbnRmKCJsaWJ4bWxfeG1sU2NoZW1hVmFsaWRpdHlHZW5lcmljRXJyb3JGdW5jSGFuZGxlciglcCwgJXMsIC4uLikgY2FsbGVkXG4iLCBjdHgsIHN0cik7Ci0jZW5kaWYKLQogCXB5Q3R4dCA9ICh4bWxTY2hlbWFWYWxpZEN0eHRQeUN0eHRQdHIpIGN0eDsKIAogCWxpc3QgPSBQeVR1cGxlX05ldygyKTsKIAlQeVR1cGxlX1NldEl0ZW0obGlzdCwgMCwgbGlieG1sX2NoYXJQdHJXcmFwKHN0cikpOwogCVB5VHVwbGVfU2V0SXRlbShsaXN0LCAxLCBweUN0eHQtPmFyZyk7CiAJUHlfWElOQ1JFRihweUN0eHQtPmFyZyk7Ci0JcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QocHlDdHh0LT5lcnJvciwgbGlzdCk7CisJcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChweUN0eHQtPmVycm9yLCBsaXN0KTsKIAlpZiAocmVzdWx0ID09IE5VTEwpIAogCXsKIAkJLyogVE9ETzogbWFuYWdlIGZvciB0aGUgZXhjZXB0aW9uIHRvIGJlIHByb3BhZ2F0ZWQuLi4gKi8KQEAgLTMzMzEsMTcgKzMxMTMsMTMgQEAKIAlQeU9iamVjdCAqcmVzdWx0OwogCXhtbFNjaGVtYVZhbGlkQ3R4dFB5Q3R4dFB0ciBweUN0eHQ7CiAKLSNpZmRlZiBERUJVR19FUlJPUgotCXByaW50ZigibGlieG1sX3htbFNjaGVtYVZhbGlkaXR5R2VuZXJpY1dhcm5pbmdGdW5jSGFuZGxlciglcCwgJXMsIC4uLikgY2FsbGVkXG4iLCBjdHgsIHN0cik7Ci0jZW5kaWYKLQkKIAlweUN0eHQgPSAoeG1sU2NoZW1hVmFsaWRDdHh0UHlDdHh0UHRyKSBjdHg7CiAKIAlsaXN0ID0gUHlUdXBsZV9OZXcoMik7CiAJUHlUdXBsZV9TZXRJdGVtKGxpc3QsIDAsIGxpYnhtbF9jaGFyUHRyV3JhcChzdHIpKTsKIAlQeVR1cGxlX1NldEl0ZW0obGlzdCwgMSwgcHlDdHh0LT5hcmcpOwogCVB5X1hJTkNSRUYocHlDdHh0LT5hcmcpOwotCXJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KHB5Q3R4dC0+d2FybiwgbGlzdCk7CisJcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChweUN0eHQtPndhcm4sIGxpc3QpOwogCWlmIChyZXN1bHQgPT0gTlVMTCkKIAl7CiAJCS8qIFRPRE86IG1hbmFnZSBmb3IgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9wYWdhdGVkLi4uICovCkBAIC0zMzg2LDEwICszMTY0LDYgQEAKIAkJKGFyZ3MsIChjaGFyICopICJPT098Tzp4bWxTY2hlbWFTZXRWYWxpZEVycm9ycyIsICZweW9ial9jdHgsICZweW9ial9lcnJvciwgJnB5b2JqX3dhcm4sICZweW9ial9hcmcpKQogCQlyZXR1cm4gKE5VTEwpOwogCi0jaWZkZWYgREVCVUdfRVJST1IKLQlwcmludGYoImxpYnhtbF94bWxTY2hlbWFTZXRWYWxpZEVycm9ycyglcCwgJXAsICVwKSBjYWxsZWRcbiIsIHB5b2JqX2N0eCwgcHlvYmpfZXJyb3IsIHB5b2JqX3dhcm4pOwotI2VuZGlmCi0KIAljdHh0ID0gUHlTY2hlbWFWYWxpZEN0eHRfR2V0KHB5b2JqX2N0eCk7CiAJaWYgKHhtbFNjaGVtYUdldFZhbGlkRXJyb3JzKGN0eHQsIE5VTEwsIE5VTEwsICh2b2lkICoqKSAmcHlDdHh0KSA9PSAtMSkKIAl7CmRpZmYgLS1naXQgYS9weXRob24vbGlieG1sX3dyYXAuaCBiL3B5dGhvbi9saWJ4bWxfd3JhcC5oCmluZGV4IDQ3OGEyMGQuLmY5ZTFmODkgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9saWJ4bWxfd3JhcC5oCisrKyBiL3B5dGhvbi9saWJ4bWxfd3JhcC5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGlieG1sL3htbHJlZ2V4cC5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxhdXRvbWF0YS5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxyZWFkZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzYXZlLmg+CiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAogI2luY2x1ZGUgPGxpYnhtbC9yZWxheG5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHNjaGVtYXMuaD4KQEAgLTY4LDExICs3MCwxMiBAQAogI2RlZmluZSBYTUxfSUdOT1JFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTIFwKICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAogICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zXCIiKQotI2RlZmluZSBYTUxfUE9QX1dBUk5JTkdTIFwKLSAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorI2VsaWYgZGVmaW5lZCAoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorI2RlZmluZSBYTUxfSUdOT1JFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTIFwKKyAgICBfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCisgICAgX19wcmFnbWEod2FybmluZyhkaXNhYmxlIDogNDk5NikpCiAjZWxzZQotI2RlZmluZSBYTUxfSUdOT1JFX1BFREFOVElDX1dBUk5JTkdTCi0jZGVmaW5lIFhNTF9QT1BfV0FSTklOR1MKKyNkZWZpbmUgWE1MX0lHTk9SRV9ERVBSRUNBVElPTl9XQVJOSU5HUwogI2VuZGlmCiAKICNkZWZpbmUgUHl4bWxOb2RlX0dldCh2KSAoKCh2KSA9PSBQeV9Ob25lKSA/IE5VTEwgOiBcCkBAIC0yODcsNyArMjkwLDcgQEAKIFB5T2JqZWN0ICogbGlieG1sX3htbFNjaGVtYVBhcnNlckN0eHRQdHJXcmFwKHhtbFNjaGVtYVBhcnNlckN0eHRQdHIgY3R4dCk7CiBQeU9iamVjdCAqIGxpYnhtbF94bWxTY2hlbWFWYWxpZEN0eHRQdHJXcmFwKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciB2YWxpZCk7CiAjZW5kaWYgLyogTElCWE1MX1NDSEVNQVNfRU5BQkxFRCAqLwotUHlPYmplY3QgKiBsaWJ4bWxfeG1sRXJyb3JQdHJXcmFwKHhtbEVycm9yUHRyIGVycm9yKTsKK1B5T2JqZWN0ICogbGlieG1sX3htbEVycm9yUHRyV3JhcChjb25zdCB4bWxFcnJvciAqZXJyb3IpOwogUHlPYmplY3QgKiBsaWJ4bWxfeG1sU2NoZW1hU2V0VmFsaWRFcnJvcnMoUHlPYmplY3QgKiBzZWxmLCBQeU9iamVjdCAqIGFyZ3MpOwogUHlPYmplY3QgKiBsaWJ4bWxfeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CiBQeU9iamVjdCAqIGxpYnhtbF94bWxVbnJlZ2lzdGVySW5wdXRDYWxsYmFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwpkaWZmIC0tZ2l0IGEvcHl0aG9uL3B5cHJvamVjdC50b21sIGIvcHl0aG9uL3B5cHJvamVjdC50b21sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlZDUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9weXRob24vcHlwcm9qZWN0LnRvbWwKQEAgLTAsMCArMSwzIEBACitbYnVpbGQtc3lzdGVtXQorcmVxdWlyZXMgPSBbInNldHVwdG9vbHMiXQorYnVpbGQtYmFja2VuZCA9ICJzZXR1cHRvb2xzLmJ1aWxkX21ldGEiCmRpZmYgLS1naXQgYS9weXRob24vc2V0dXAucHkuaW4gYi9weXRob24vc2V0dXAucHkuaW4KaW5kZXggNTc1MDVlYi4uZDc1ZmU1NSAxMDA3NTUKLS0tIGEvcHl0aG9uL3NldHVwLnB5LmluCisrKyBiL3B5dGhvbi9zZXR1cC5weS5pbgpAQCAtMSwxNSArMSwxOSBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIFNldHVwIHNjcmlwdCBmb3IgbGlieG1sMiBhbmQgbGlieHNsdCBpZiBmb3VuZAogIwogaW1wb3J0IHN5cywgb3MKIAogdHJ5OgotICAgIGltcG9ydCBzZXR1cHRvb2xzCisgICAgZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uCisgICAgdHJ5OgorICAgICAgICAjIFVzaW5nIGRpc3R1dGlscywgZm9yIHB5dGhvbiA8IDMuMTIKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgIyBkaXN0dXRpbHMgaXMgbm90IHByZXNlbnQgaW4gcHl0aG9uIDMuMTIgYW5kIGdyZWF0ZXIKKyAgICAgICAgcHJpbnQoInNldHVwdG9vbHMgaXMgcmVxdWlyZWQgZm9yIHB5dGhvbiA+PSAzLjEyIikKKyAgICAgICAgc3lzLmV4aXQoMSkKIAogIyBCZWxvdyBST09ULCB3ZSBleHBlY3QgdG8gZmluZCBpbmNsdWRlLCBpbmNsdWRlL2xpYnhtbDIsIGxpYiBhbmQgYmluLgogIyBPbiAqbml4LCBpdCBpcyBub3QgbmVlZGVkIChidXQgc2hvdWxkIG5vdCBoYXJtKSwKQEAgLTQ1LDYgKzQ5LDExIEBACiAjIGRsbHMgbXVzdCBiZSBmb3VuZCBzb21ld2hlcmUgaW4gdGhlIFBBVEggYXQgcnVudGltZS4KIFdJVEhETExTID0gMSBhbmQgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCiAKK2lmIFdJVEhETExTOgorICAgIGRlZiBhbHRJbXBvcnQocyk6CisgICAgICAgIHMgPSBzLnJlcGxhY2UoImltcG9ydCBsaWJ4bWwybW9kIiwiZnJvbSBsaWJ4bWxtb2RzIGltcG9ydCBsaWJ4bWwybW9kIikKKyAgICAgICAgcmV0dXJuIHMKKwogZGVmIG1pc3NpbmcoZmlsZSk6CiAgICAgaWYgb3MuYWNjZXNzKGZpbGUsIG9zLlJfT0spID09IDA6CiAgICAgICAgIHJldHVybiAxCkBAIC0xODIsMTEgKzE5MSw2IEBACiAgICAgICAgIG9zLm1rZGlyKCJsaWJ4bWxtb2RzIikKICAgICAgICAgb3BlbigibGlieG1sbW9kcy9fX2luaXRfXy5weSIsInciKS5jbG9zZSgpCiAKLSAgICBkZWYgYWx0SW1wb3J0KHMpOgotICAgICAgICBzID0gcy5yZXBsYWNlKCJpbXBvcnQgbGlieG1sMm1vZCIsImZyb20gbGlieG1sbW9kcyBpbXBvcnQgbGlieG1sMm1vZCIpCi0gICAgICAgIHMgPSBzLnJlcGxhY2UoImltcG9ydCBsaWJ4c2x0bW9kIiwiZnJvbSBsaWJ4bWxtb2RzIGltcG9ydCBsaWJ4c2x0bW9kIikKLSAgICAgICAgcmV0dXJuIHMKLQogICAgIHBhY2thZ2VkX2RsbHMgPSBbb3MucGF0aC5qb2luKFJPT1QsJ2JpbicsZGxsKSBmb3IgZGxsIGluIGRsbHNdCiAKIGRlc2NyID0gImxpYnhtbDIgcGFja2FnZSIKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBiL3B5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCBjMjI3MGNlLi41ODhkY2RkIDEwMDY0NAotLS0gYS9weXRob24vdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIvcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0xLDUgKzEsNSBAQAogZXhhbXBsZWRpciA9ICQoZG9jZGlyKS9weXRob24vZXhhbXBsZXMKLWRpc3RfZXhhbXBsZV9EQVRBID0gJChQWVRFU1RTKSAkKFhNTFMpCitkaXN0X2V4YW1wbGVfREFUQSA9ICQoUFlURVNUUykgJChYTUxTKSBzZXR1cF90ZXN0LnB5CiAKIFBZVEVTVFM9CVwKICAgICBidWlsZC5weQlcCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvYXR0cmlicy5weSBiL3B5dGhvbi90ZXN0cy9hdHRyaWJzLnB5CmluZGV4IDIzZGVmNjEuLjU2MjdhMzcgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9hdHRyaWJzLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9hdHRyaWJzLnB5CkBAIC0xLDUgKzEsNiBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTMxLDQgKzMyLDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvYnVpbGQucHkgYi9weXRob24vdGVzdHMvYnVpbGQucHkKaW5kZXggMDVlNDkxNy4uZjc4NmIwYyAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2J1aWxkLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9idWlsZC5weQpAQCAtMSw0ICsxLDUgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiBpbXBvcnQgc3lzCiAKQEAgLTU2LDQgKzU3LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvY29tcGFyZU5vZGVzLnB5IGIvcHl0aG9uL3Rlc3RzL2NvbXBhcmVOb2Rlcy5weQppbmRleCBhMTE4NTViLi40Njc3OWI4IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvY29tcGFyZU5vZGVzLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9jb21wYXJlTm9kZXMucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtNDcsNCArNDgsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHkgYi9weXRob24vdGVzdHMvY3R4dGVycm9yLnB5CmluZGV4IDBhYTAxNTAuLjdkZWFlYmIgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHkKKysrIGIvcHl0aG9uL3Rlc3RzL2N0eHRlcnJvci5weQpAQCAtMSw5ICsxLDEwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgVGhpcyB0ZXN0IGV4ZXJjaXNlIHRoZSByZWRpcmVjdGlvbiBvZiBlcnJvciBtZXNzYWdlcyB3aXRoIGEKICMgZnVuY3Rpb25zIGRlZmluZWQgaW4gUHl0aG9uLgogIwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCkBAIC01Myw0ICs1NCwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL2N1dG5wYXN0ZS5weSBiL3B5dGhvbi90ZXN0cy9jdXRucGFzdGUucHkKaW5kZXggYjY3MmFlMC4uNGRmMDkwMiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2N1dG5wYXN0ZS5weQorKysgYi9weXRob24vdGVzdHMvY3V0bnBhc3RlLnB5CkBAIC0xLDUgKzEsNiBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTQ1LDQgKzQ2LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvZHRkdmFsaWQucHkgYi9weXRob24vdGVzdHMvZHRkdmFsaWQucHkKaW5kZXggMTI5YjU3YS4uNWJkNGVmOCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2R0ZHZhbGlkLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9kdGR2YWxpZC5weQpAQCAtMSw0ICsxLDUgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiBpbXBvcnQgc3lzCiAKQEAgLTI4LDUgKzI5LDQgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCiAKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9lcnJvci5weSBiL3B5dGhvbi90ZXN0cy9lcnJvci5weQppbmRleCBlNDFjMjdlLi42MDNlYjUxIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvZXJyb3IucHkKKysrIGIvcHl0aG9uL3Rlc3RzL2Vycm9yLnB5CkBAIC0xLDkgKzEsMTAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBUaGlzIHRlc3QgZXhlcmNpc2UgdGhlIHJlZGlyZWN0aW9uIG9mIGVycm9yIG1lc3NhZ2VzIHdpdGggYQogIyBmdW5jdGlvbnMgZGVmaW5lZCBpbiBQeXRob24uCiAjCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTQ4LDQgKzQ5LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvaW5idWYucHkgYi9weXRob24vdGVzdHMvaW5idWYucHkKaW5kZXggMTZjYTliYy4uYTgwYWU3ZCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2luYnVmLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9pbmJ1Zi5weQpAQCAtMSw1ICsxLDYgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiB0cnk6CiAgICAgaW1wb3J0IFN0cmluZ0lPCkBAIC0yNiw1ICsyNyw0IEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvaW5kZXhlcy5weSBiL3B5dGhvbi90ZXN0cy9pbmRleGVzLnB5CmluZGV4IDQ5MjJiNWUuLjQ2NzM3NjUgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9pbmRleGVzLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9pbmRleGVzLnB5CkBAIC0xLDYgKzEsNyBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjIC0qLSBjb2Rpbmc6IElTTy04ODU5LTEgLSotCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTExMCw0ICsxMTEsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9pbnB1dF9jYWxsYmFjay5weSBiL3B5dGhvbi90ZXN0cy9pbnB1dF9jYWxsYmFjay5weQppbmRleCAyY2I4NWRlLi5hZDhjZjNiIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvaW5wdXRfY2FsbGJhY2sucHkKKysrIGIvcHl0aG9uL3Rlc3RzL2lucHV0X2NhbGxiYWNrLnB5CkBAIC0xLDggKzEsOSBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIFRoaXMgdGVzdHMgY3VzdG9tIGlucHV0IGNhbGxiYWNrcwogIwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiB0cnk6CiAgICAgaW1wb3J0IFN0cmluZ0lPCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvbnNkZWwucHkgYi9weXRob24vdGVzdHMvbnNkZWwucHkKaW5kZXggYjdmOGI3NS4uOGUxYjI5MSAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL25zZGVsLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9uc2RlbC5weQpAQCAtMSw5ICsxLDEwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgdGhpcyB0ZXN0IGV4ZXJjaXNlIHRoZSBYUGF0aCBiYXNpYyBlbmdpbmUsIHBhcnNlciwgZXRjLCBhbmQKICMgYWxsb3dzIHRvIGRldGVjdCBtZW1vcnkgbGVha3MKICMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiBpbnN0YW5jZT0iIiI8P3htbCB2ZXJzaW9uPSIxLjAiPz4KQEAgLTU5LDQgKzYwLDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvb3V0YnVmLnB5IGIvcHl0aG9uL3Rlc3RzL291dGJ1Zi5weQppbmRleCA4ZThlZjI0Li42NDMzNTY1IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvb3V0YnVmLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9vdXRidWYucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogdHJ5OgogICAgIGltcG9ydCBTdHJpbmdJTwpAQCAtMTA3LDQgKzEwOCwzIEBACiAgICAgICAgIHByaW50KCJPSyIpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9wdXNoLnB5IGIvcHl0aG9uL3Rlc3RzL3B1c2gucHkKaW5kZXggNTY4NjRjMy4uMTA3ODE3OCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3B1c2gucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3B1c2gucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtMzIsNCArMzMsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9wdXNoU0FYLnB5IGIvcHl0aG9uL3Rlc3RzL3B1c2hTQVgucHkKaW5kZXggODUwYWU3ZS4uZjMwMDg4ZCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3B1c2hTQVgucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3B1c2hTQVgucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtNjEsNCArNjIsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weSBiL3B5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weQppbmRleCA0N2NkOGE1Li5jMzJjZDNlIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcHVzaFNBWGh0bWwucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5CkBAIC0xLDUgKzEsNiBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTYyLDQgKzYzLDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlci5weQppbmRleCA1YTQ2MTQ2Li4zMThlYjVlIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXIucHkKQEAgLTEsOCArMSw5IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgLSotIGNvZGluZzogSVNPLTg4NTktMSAtKi0KICMKICMgdGhpcyB0ZXN0cyB0aGUgYmFzaWMgQVBJcyBvZiB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogaW1wb3J0IHN5cwogdHJ5OgpAQCAtNDQzLDQgKzQ0NCwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkgYi9weXRob24vdGVzdHMvcmVhZGVyMi5weQppbmRleCA2NWNlY2Q0Li45ZjE0ZWNkIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyMi5weQorKysgYi9weXRob24vdGVzdHMvcmVhZGVyMi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KICMKICMgdGhpcyB0ZXN0cyB0aGUgRFREIHZhbGlkYXRpb24gd2l0aCB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgZ2xvYgogaW1wb3J0IG9zCi1pbXBvcnQgc3RyaW5nCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIHRyeToKICAgICBpbXBvcnQgU3RyaW5nSU8KQEAgLTIwLDEwMyArMjAsNzYgQEAKIAogZXJyID0gIiIKIGJhc2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCi1kaXJfcHJlZml4ID0gb3MucGF0aC5qb2luKGJhc2VkaXIsICIuLi8uLi90ZXN0L3ZhbGlkLyIpCitkaXJfcHJlZml4ID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oYmFzZWRpciwgIi4uIiwgIi4uIiwgInRlc3QiLCAidmFsaWQiKSkKKwogIyBUaGlzIGRpY3Rpb25hcnkgcmVmbGVjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcwogIyAuLi8uLi90ZXN0L3ZhbGlkLyoueG1sLmVyciB0aGF0IGFyZSBub3QgZW1wdHksIGV4Y2VwdCB0aGF0CiAjIHRoZSBmaWxlIHBhdGhzIGluIHRoZSBtZXNzYWdlcyBzdGFydCB3aXRoIC4uLy4uL3Rlc3QvCiAKIGV4cGVjdCA9IHsKICAgICAnNzY2OTU2JzoKLSIiIi4uLy4uL3Rlc3QvdmFsaWQvZHRkcy83NjY5NTYuZHRkOjI6IHBhcnNlciBlcnJvciA6IFBFUmVmZXJlbmNlOiBleHBlY3RpbmcgJzsnCisiIiJ7MH0vZHRkcy83NjY5NTYuZHRkOjI6IHBhcnNlciBlcnJvciA6IFBFUmVmZXJlbmNlOiBleHBlY3RpbmcgJzsnCiAlw6QlZW50OwogICAgXgotLi4vLi4vdGVzdC92YWxpZC9kdGRzLzc2Njk1Ni5kdGQ6MjogcGFyc2VyIGVycm9yIDogQ29udGVudCBlcnJvciBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0Cit7MH0vZHRkcy83NjY5NTYuZHRkOjI6IHBhcnNlciBlcnJvciA6IENvbnRlbnQgZXJyb3IgaW4gdGhlIGV4dGVybmFsIHN1YnNldAogJcOkJWVudDsKICAgICAgICAgXgogRW50aXR5OiBsaW5lIDE6IAogdmFsdWUKIF4KLSIiIiwKKyIiIi5mb3JtYXQoZGlyX3ByZWZpeCksCiAgICAgJzc4MTMzMyc6Ci0iIiIuLi8uLi90ZXN0L3ZhbGlkLzc4MTMzMy54bWw6NDogZWxlbWVudCBhOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgYSBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBleHBlY3RpbmcgKCAuLi4sIGdvdCAKKyIiInswfS83ODEzMzMueG1sOjQ6IGVsZW1lbnQgYTogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IGEgY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgZXhwZWN0aW5nICggLi4uLCBnb3QgCiA8YS8+CiAgICAgXgotLi4vLi4vdGVzdC92YWxpZC83ODEzMzMueG1sOjU6IGVsZW1lbnQgYTogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IGEgY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgRXhwZWN0aW5nIG1vcmUgY2hpbGQKK3swfS83ODEzMzMueG1sOjU6IGVsZW1lbnQgYTogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IGEgY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgRXhwZWN0aW5nIG1vcmUgY2hpbGRyZW4KIAogXgotIiIiLAorIiIiLmZvcm1hdChkaXJfcHJlZml4KSwKICAgICAnY29uZF9zZWN0Mic6Ci0iIiIuLi8uLi90ZXN0L3ZhbGlkL2R0ZHMvY29uZF9zZWN0Mi5kdGQ6MTU6IHBhcnNlciBlcnJvciA6IEFsbCBtYXJrdXAgb2YgdGhlIGNvbmRpdGlvbmFsIHNlY3Rpb24gaXMgbm90IGluIHRoZSBzYW1lIGVudGl0eQorIiIiezB9L2R0ZHMvY29uZF9zZWN0Mi5kdGQ6MTU6IHBhcnNlciBlcnJvciA6IEFsbCBtYXJrdXAgb2YgdGhlIGNvbmRpdGlvbmFsIHNlY3Rpb24gaXMgbm90IGluIHRoZSBzYW1lIGVudGl0eQogICAgICVlbnQ7CiAgICAgICAgICBeCiBFbnRpdHk6IGxpbmUgMTogCiBdXT4KIF4KLS4uLy4uL3Rlc3QvdmFsaWQvZHRkcy9jb25kX3NlY3QyLmR0ZDoxNzogcGFyc2VyIGVycm9yIDogQ29udGVudCBlcnJvciBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0Cit7MH0vZHRkcy9jb25kX3NlY3QyLmR0ZDoxNzogcGFyc2VyIGVycm9yIDogQ29udGVudCBlcnJvciBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0CiAKIF4KLSIiIiwKKyIiIi5mb3JtYXQoZGlyX3ByZWZpeCksCiAgICAgJ3Jzcyc6Ci0iIiIuLi8uLi90ZXN0L3ZhbGlkL3Jzcy54bWw6MTc3OiBlbGVtZW50IHJzczogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IHJzcyBkb2VzIG5vdCBjYXJyeSBhdHRyaWJ1dGUgdmVyc2lvbgorIiIiezB9L3Jzcy54bWw6MTc3OiBlbGVtZW50IHJzczogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IHJzcyBkb2VzIG5vdCBjYXJyeSBhdHRyaWJ1dGUgdmVyc2lvbgogPC9yc3M+CiAgICAgICBeCi0iIiIsCisiIiIuZm9ybWF0KGRpcl9wcmVmaXgpLAogICAgICd0OCc6Ci0iIiIuLi8uLi90ZXN0L3ZhbGlkL3Q4LnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCisiIiJ7MH0vdDgueG1sOjY6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KIAogJWRlZnJvb3Q7ICVkZWZtaWRkbGU7ICVkZWZ0ZXN0OwogICAgICAgICAgXgogRW50aXR5OiBsaW5lIDE6IAogJmx0OyFFTEVNRU5UIHJvb3QgKG1pZGRsZSkgPgogXgotLi4vLi4vdGVzdC92YWxpZC90OC54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0lZGVmcm9vdDsgJWRlZm1pZGRsZTsgJWRlZnRlc3Q7Ci0gICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgbWlkZGxlICh0ZXN0KSA+Ci1eCi0uLi8uLi90ZXN0L3ZhbGlkL3Q4LnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLSVkZWZyb290OyAlZGVmbWlkZGxlOyAlZGVmdGVzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgdGVzdCAoI1BDREFUQSkgPgotXgotIiIiLAorIiIiLmZvcm1hdChkaXJfcHJlZml4KSwKICAgICAndDhhJzoKLSIiIi4uLy4uL3Rlc3QvdmFsaWQvdDhhLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCisiIiJ7MH0vdDhhLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCiAKICVkZWZyb290OyVkZWZtaWRkbGU7JWRlZnRlc3Q7CiAgICAgICAgICBeCiBFbnRpdHk6IGxpbmUgMTogCiAmbHQ7IUVMRU1FTlQgcm9vdCAobWlkZGxlKSA+CiBeCi0uLi8uLi90ZXN0L3ZhbGlkL3Q4YS54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0lZGVmcm9vdDslZGVmbWlkZGxlOyVkZWZ0ZXN0OwotICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgbWlkZGxlICh0ZXN0KSA+Ci1eCi0uLi8uLi90ZXN0L3ZhbGlkL3Q4YS54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0lZGVmcm9vdDslZGVmbWlkZGxlOyVkZWZ0ZXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgdGVzdCAoI1BDREFUQSkgPgotXgotIiIiLAorIiIiLmZvcm1hdChkaXJfcHJlZml4KSwKICAgICAneGxpbmsnOgotIiIiLi4vLi4vdGVzdC92YWxpZC94bGluay54bWw6NDUwOiBlbGVtZW50IHRlcm1kZWY6IHZhbGlkaXR5IGVycm9yIDogSUQgZHQtYXJjIGFscmVhZHkgZGVmaW5lZAorIiIiezB9L3hsaW5rLnhtbDo0NTA6IGVsZW1lbnQgdGVybWRlZjogdmFsaWRpdHkgZXJyb3IgOiBJRCBkdC1hcmMgYWxyZWFkeSBkZWZpbmVkCiAJPHA+PHRlcm1kZWYgaWQ9ImR0LWFyYyIgdGVybT0iQXJjIj5BbiA8dGVyCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIHZhbGlkaXR5IGVycm9yIDogYXR0cmlidXRlIGRlZiBsaW5lIDE5OSByZWZlcmVuY2VzIGFuIHVua25vd24gSUQgImR0LXhsZyIKLSIiIiwKKyIiIi5mb3JtYXQoZGlyX3ByZWZpeCksCiB9CiAKICMgQWRkIHByZWZpeF9kaXIgYW5kIGV4dGVuc2lvbiB0byB0aGUga2V5cwotZXhwZWN0ID0geyJ7fXt9LnhtbCIuZm9ybWF0KGRpcl9wcmVmaXgsIGtleSk6IHZhbCBmb3Iga2V5LCB2YWwgaW4gZXhwZWN0Lml0ZW1zKCl9CitleHBlY3QgPSB7b3MucGF0aC5qb2luKGRpcl9wcmVmaXgsIGtleSArICIueG1sIik6IHZhbCBmb3Iga2V5LCB2YWwgaW4gZXhwZWN0Lml0ZW1zKCl9CiAKIGRlZiBjYWxsYmFjayhjdHgsIHN0cik6CiAgICAgZ2xvYmFsIGVycgpAQCAtMTI0LDExICs5NywxMiBAQAogbGlieG1sMi5yZWdpc3RlckVycm9ySGFuZGxlcihjYWxsYmFjaywgIiIpCiAKIHBhcnNpbmdfZXJyb3JfZmlsZXMgPSBbIjc2Njk1NiIsICJjb25kX3NlY3QyIiwgInQ4IiwgInQ4YSJdCi1leHBlY3RfcGFyc2luZ19lcnJvciA9IFsie317fS54bWwiLmZvcm1hdChkaXJfcHJlZml4LCBmKSBmb3IgZiBpbiBwYXJzaW5nX2Vycm9yX2ZpbGVzXQorZXhwZWN0X3BhcnNpbmdfZXJyb3IgPSBbb3MucGF0aC5qb2luKGRpcl9wcmVmaXgsIGYgKyAiLnhtbCIpIGZvciBmIGluIHBhcnNpbmdfZXJyb3JfZmlsZXNdCiAKLXZhbGlkX2ZpbGVzID0gZ2xvYi5nbG9iKGRpcl9wcmVmaXggKyAiKi54KiIpCit2YWxpZF9maWxlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZGlyX3ByZWZpeCwgIioueCoiKSkKIGFzc2VydCB2YWxpZF9maWxlcywgImZvdW5kIG5vIHZhbGlkIGZpbGVzIGluICd7fSciLmZvcm1hdChkaXJfcHJlZml4KQogdmFsaWRfZmlsZXMuc29ydCgpCitmYWlsdXJlcyA9IDAKIGZvciBmaWxlIGluIHZhbGlkX2ZpbGVzOgogICAgIGVyciA9ICIiCiAgICAgcmVhZGVyID0gbGlieG1sMi5uZXdUZXh0UmVhZGVyRmlsZW5hbWUoZmlsZSkKQEAgLTE0Miw5ICsxMTYsMTUgQEAKICAgICAgICAgI3N5cy5leGl0KDEpCiAgICAgaWYgKGVycik6CiAgICAgICAgIGlmIG5vdChmaWxlIGluIGV4cGVjdCBhbmQgZXJyID09IGV4cGVjdFtmaWxlXSk6CisgICAgICAgICAgICBmYWlsdXJlcyArPSAxCiAgICAgICAgICAgICBwcmludCgiRXJyb3I6ICIsIGVycikKICAgICAgICAgICAgIGlmIGZpbGUgaW4gZXhwZWN0OgogICAgICAgICAgICAgICAgIHByaW50KCJFeHBlY3RlZDogIiwgZXhwZWN0W2ZpbGVdKQorCitpZiBmYWlsdXJlczoKKyAgICBwcmludCgiRmFpbGVkICVkIHRlc3RzIiAlIGZhaWx1cmVzKQorICAgIHN5cy5leGl0KDEpCisKICMKICMgYW5vdGhlciBzZXBhcmF0ZSB0ZXN0IGJhc2VkIG9uIFN0ZXBoYW5lIEJpZG91bCBvbmUKICMKQEAgLTMzNyw5ICszMTcsMTEgQEAKIGlmIHJlcyAhPSBleHBlY3Q6CiAgICAgcHJpbnQoInRlc3Q1IGZhaWxlZDogdW5leHBlY3RlZCBvdXRwdXQiKQogICAgIHByaW50KHJlcykKKyAgICBzeXMuZXhpdCgxKQogaWYgZXJyICE9ICIiOgogICAgIHByaW50KCJ0ZXN0NSBmYWlsZWQ6IHZhbGlkYXRpb24gZXJyb3IgZm91bmQiKQogICAgIHByaW50KGVycikKKyAgICBzeXMuZXhpdCgxKQogCiAjCiAjIGNsZWFudXAKQEAgLTM1Myw0ICszMzUsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXIzLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHkKaW5kZXggMzlhN2Y3My4uOWE1NDU0MCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHkKQEAgLTEsOCArMSw5IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgdGhpcyB0ZXN0cyB0aGUgZW50aXRpZXMgc3Vic3RpdHV0aW9ucyB3aXRoIHRoZSBYbWxUZXh0UmVhZGVyIGludGVyZmFjZQogIwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiB0cnk6CiAgICAgaW1wb3J0IFN0cmluZ0lPCkBAIC0xNTcsNCArMTU4LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyNC5weSBiL3B5dGhvbi90ZXN0cy9yZWFkZXI0LnB5CmluZGV4IGY1ZmJhYTEuLjY3N2QwODkgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9yZWFkZXI0LnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXI0LnB5CkBAIC0xLDcgKzEsOCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRoaXMgdGVzdHMgdGhlIGJhc2ljIEFQSXMgb2YgdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIGltcG9ydCBzeXMKIHRyeToKQEAgLTQ3LDQgKzQ4LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyNS5weSBiL3B5dGhvbi90ZXN0cy9yZWFkZXI1LnB5CmluZGV4IGY1NjRlOWIuLjIwMWE1M2IgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9yZWFkZXI1LnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXI1LnB5CkBAIC0xLDggKzEsOSBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRoaXMgdGVzdHMgdGhlIEV4cGFuZCgpIEFQSSBvZiB0aGUgeG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMgdGhpcyBleHRyYWN0IHRoZSBEcmFnb24gYmlibGlvZ3JhcGh5IGVudHJpZXMgZnJvbSB0aGUgWE1MIHNwZWNpZmljYXRpb24KICMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCkBAIC00Niw0ICs0NywzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjYucHkgYi9weXRob24vdGVzdHMvcmVhZGVyNi5weQppbmRleCAwYjJlNjhkLi4zM2E1NTk3IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyNi5weQorKysgYi9weXRob24vdGVzdHMvcmVhZGVyNi5weQpAQCAtMSw4ICsxLDkgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0aGlzIHRlc3RzIHRoZSBlbnRpdGllcyBzdWJzdGl0dXRpb25zIHdpdGggdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIHRyeToKICAgICBpbXBvcnQgU3RyaW5nSU8KQEAgLTEyNSw0ICsxMjYsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXI3LnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKaW5kZXggMmIxZmI2ZC4uNTgxMzFhOCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKQEAgLTEsOCArMSw5IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgdGhpcyB0ZXN0cyB0aGUgZW50aXRpZXMgc3Vic3RpdHV0aW9ucyB3aXRoIHRoZSBYbWxUZXh0UmVhZGVyIGludGVyZmFjZQogIwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCkBAIC05OCw0ICs5OSwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjgucHkgYi9weXRob24vdGVzdHMvcmVhZGVyOC5weQppbmRleCA4NjM2YjhkLi5iYzA1NWRmIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyOC5weQorKysgYi9weXRob24vdGVzdHMvcmVhZGVyOC5weQpAQCAtMSw4ICsxLDkgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0aGlzIHRlc3RzIHRoZSBlbnRpdGllcyBzdWJzdGl0dXRpb25zIHdpdGggdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTMzLDQgKzM0LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyZXJyLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weQppbmRleCA4NmJhYTNhLi5lM2ZkYmE2IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyZXJyLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXJlcnIucHkKQEAgLTEsNyArMSw4IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgdGhpcyB0ZXN0cyB0aGUgYmFzaWMgQVBJcyBvZiB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogaW1wb3J0IHN5cwogdHJ5OgpAQCAtNTMsNCArNTQsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXJuZXh0LnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcm5leHQucHkKaW5kZXggYjc3YWNiYy4uNGYyMTZiYiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcm5leHQucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcm5leHQucHkKQEAgLTEsOCArMSw5IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgLSotIGNvZGluZzogSVNPLTg4NTktMSAtKi0KICMKICMgdGhpcyB0ZXN0cyB0aGUgbmV4dCBBUEkgb2YgdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIGltcG9ydCBzeXMKIHRyeToKQEAgLTgzLDQgKzg0LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVnZXhwLnB5IGIvcHl0aG9uL3Rlc3RzL3JlZ2V4cC5weQppbmRleCAyNzkwMTMyLi44OTBkMWRjIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVnZXhwLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWdleHAucHkKQEAgLTEsNCArMSw1IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtMjksNCArMzAsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWxheG5nLnB5IGIvcHl0aG9uL3Rlc3RzL3JlbGF4bmcucHkKaW5kZXggYThhNmE3MC4uNTE4Yjk3ZSAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlbGF4bmcucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlbGF4bmcucHkKQEAgLTEsNCArMSw1IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogaW1wb3J0IHN5cwogCkBAIC00NCw1ICs0NSw0IEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVzb2x2ZXIucHkgYi9weXRob24vdGVzdHMvcmVzb2x2ZXIucHkKaW5kZXggZjUwNmE3NC4uZGE4ZmMxNCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3Jlc29sdmVyLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZXNvbHZlci5weQpAQCAtMSw1ICsxLDYgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiB0cnk6CiAgICAgaW1wb3J0IFN0cmluZ0lPCkBAIC00MCw1ICs0MSw0IEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvc2NoZW1hLnB5IGIvcHl0aG9uL3Rlc3RzL3NjaGVtYS5weQppbmRleCA3NDI2YzYwLi5jNzNiODFhIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvc2NoZW1hLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9zY2hlbWEucHkKQEAgLTEsNCArMSw1IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogaW1wb3J0IHN5cwogCkBAIC00OCw1ICs0OSw0IEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvc2VyaWFsaXplLnB5IGIvcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weQppbmRleCA5ZjM2YTEwLi40NjY2ZWM0IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvc2VyaWFsaXplLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9zZXJpYWxpemUucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtMTQ3LDQgKzE0OCwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3NldHVwX3Rlc3QucHkgYi9weXRob24vdGVzdHMvc2V0dXBfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODkzZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvcHl0aG9uL3Rlc3RzL3NldHVwX3Rlc3QucHkKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaWYgaGFzYXR0cihvcywgJ2FkZF9kbGxfZGlyZWN0b3J5Jyk6CisgICAgb3MuYWRkX2RsbF9kaXJlY3Rvcnkob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnLi4nLCAnLi4nLCAnLmxpYnMnKSkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9zeW5jLnB5IGIvcHl0aG9uL3Rlc3RzL3N5bmMucHkKaW5kZXggYjJhOTEzMS4uZmZiZTU0MCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3N5bmMucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3N5bmMucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtMTM1LDQgKzEzNiwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3RocmVhZDIucHkgYi9weXRob24vdGVzdHMvdGhyZWFkMi5weQppbmRleCBmZDM0OTUxLi45OTkxYjRjIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdGhyZWFkMi5weQorKysgYi9weXRob24vdGVzdHMvdGhyZWFkMi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN0cmluZywgc3lzLCB0aW1lCiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBnZXRfaWRlbnQKQEAgLTYsOCArNiwxMiBAQAogICAgIGZyb20gdGhyZWFkIGltcG9ydCBnZXRfaWRlbnQKIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIExvY2sKIAoraW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKKyMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCitsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCisKIFRIUkVBRFNfQ09VTlQgPSAxNQogCiBmYWlsZWQgPSAwCkBAIC05Miw4ICs5NiwxMCBAQAogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKKyMgTm90ZSB0aGF0IHRoaXMgY2FuIGxlYWsgbWVtb3J5IG9uIFdpbmRvd3MgaWYgdGhlIGdsb2JhbCBzdGF0ZQorIyBkZXN0cnVjdG9ycyB3ZXJlbid0IHJ1biB5ZXQuIFRoZXkgc2hvdWxkIGJlIGNhbGxlZCBldmVudHVhbGx5LAorIyBzbyB0aGlzIGxlYWsgc2hvdWxkIGJlIGhhcm1sZXNzLgogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy90c3QucHkgYi9weXRob24vdGVzdHMvdHN0LnB5CmluZGV4IDUxNzgzMzYuLmJhNjI0YjMgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy90c3QucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3RzdC5weQpAQCAtMSw1ICsxLDYgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCkBAIC0yNSw0ICsyNiwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weSBiL3B5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHkKaW5kZXggZmZhMzgwNi4uNjRlY2VhYyAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weQorKysgYi9weXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5CkBAIC0xLDYgKzEsNyBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBpbXBvcnQgc3lzLCB1bml0dGVzdAogCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTUsNyArMTYsNiBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKICAgICAgICAgaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSAhPSAwOgotICAgICAgICAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkgCiAgICAgICAgICAgICBzZWxmLmZhaWwoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpLCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgiT0siKQpAQCAtNzEsOCArNzEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKHMsbGVuKHMpLCJkdW1teS54bWwiLE5vbmUsMCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bWwyLnRyZWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbj1saWJ4bWwyLlhNTF9GUk9NX1BBUlNFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU9bGlieG1sMi5YTUxfRVJSX1RBR19OT1RfRklOSVNIRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnIHggbGluZSAxXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgY29kZT1saWJ4bWwyLlhNTF9FUlJfVEFHX05BTUVfTUlTTUFUQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdPcGVuaW5nIGFuZCBlbmRpbmcgdGFnIG1pc21hdGNoOiBhIGxpbmUgMiBhbmQgeFxuJywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPWxpYnhtbDIuWE1MX0VSUl9GQVRBTCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9J2R1bW15LnhtbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lPTMpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdHN0VVJJLnB5IGIvcHl0aG9uL3Rlc3RzL3RzdFVSSS5weQppbmRleCA4YzIyZWU3Li4wYjFiY2JjIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdHN0VVJJLnB5CisrKyBiL3B5dGhvbi90ZXN0cy90c3RVUkkucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtMzgsNCArMzksMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy90c3RtZW0ucHkgYi9weXRob24vdGVzdHMvdHN0bWVtLnB5CmluZGV4IDg1OGYyMjcuLmVjYTA3NTQgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy90c3RtZW0ucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3RzdG1lbS5weQpAQCAtMSw0ICsxLDUgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKIHRyeToKQEAgLTM4LDQgKzM5LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdHN0eHBhdGgucHkgYi9weXRob24vdGVzdHMvdHN0eHBhdGgucHkKaW5kZXggZThiYTA4Mi4uZDQyOWY1NCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3RzdHhwYXRoLnB5CisrKyBiL3B5dGhvbi90ZXN0cy90c3R4cGF0aC5weQpAQCAtMSw1ICsxLDYgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKICNtZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTYwLDQgKzYxLDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdmFsaWREVEQucHkgYi9weXRob24vdGVzdHMvdmFsaWREVEQucHkKaW5kZXggMTdjN2IzZC4uYjExODMyNiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3ZhbGlkRFRELnB5CisrKyBiL3B5dGhvbi90ZXN0cy92YWxpZERURC5weQpAQCAtMSw0ICsxLDUgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiBpbXBvcnQgc3lzCiAKQEAgLTU1LDUgKzU2LDQgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCiAKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy92YWxpZFJORy5weSBiL3B5dGhvbi90ZXN0cy92YWxpZFJORy5weQppbmRleCAyMmViZTMxLi5iY2M3MjlmIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdmFsaWRSTkcucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3ZhbGlkUk5HLnB5CkBAIC0xLDQgKzEsNSBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIGltcG9ydCBzeXMKIApAQCAtNzIsNSArNzMsNCBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKIApkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3ZhbGlkU2NoZW1hcy5weSBiL3B5dGhvbi90ZXN0cy92YWxpZFNjaGVtYXMucHkKaW5kZXggYjEyM2UwMS4uOWU2NDIxMCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3ZhbGlkU2NoZW1hcy5weQorKysgYi9weXRob24vdGVzdHMvdmFsaWRTY2hlbWFzLnB5CkBAIC0xLDQgKzEsNSBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIGltcG9ydCBzeXMKIApAQCAtNzksNSArODAsNCBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKIApkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3ZhbGlkYXRlLnB5IGIvcHl0aG9uL3Rlc3RzL3ZhbGlkYXRlLnB5CmluZGV4IDA4YzMwZmYuLmRiZjU5NjYgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy92YWxpZGF0ZS5weQorKysgYi9weXRob24vdGVzdHMvdmFsaWRhdGUucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtNzksNCArODAsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy93YWxrZXIucHkgYi9weXRob24vdGVzdHMvd2Fsa2VyLnB5CmluZGV4IDAwYmI0YzkuLmIxYWY4NzUgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy93YWxrZXIucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3dhbGtlci5weQpAQCAtMSw4ICsxLDkgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0aGlzIHRlc3RzIHRoZSBlbnRpdGllcyBzdWJzdGl0dXRpb25zIHdpdGggdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCiBpbXBvcnQgc3lzCitpbXBvcnQgc2V0dXBfdGVzdAogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTE0MSw0ICsxNDIsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy94cGF0aC5weSBiL3B5dGhvbi90ZXN0cy94cGF0aC5weQppbmRleCBkZTljMmZkLi5hZTE0NDg2IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMveHBhdGgucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3hwYXRoLnB5CkBAIC0xLDkgKzEsMTAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0aGlzIHRlc3QgZXhlcmNpc2UgdGhlIFhQYXRoIGJhc2ljIGVuZ2luZSwgcGFyc2VyLCBldGMsIGFuZAogIyBhbGxvd3MgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcwogIwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCkBAIC00OCw0ICs0OSwzIEBACiAgICAgcHJpbnQoIk9LIikKIGVsc2U6CiAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKLSAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3hwYXRoZXh0LnB5IGIvcHl0aG9uL3Rlc3RzL3hwYXRoZXh0LnB5CmluZGV4IGFiN2IzYmIuLjRlYjgzMTMgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy94cGF0aGV4dC5weQorKysgYi9weXRob24vdGVzdHMveHBhdGhleHQucHkKQEAgLTEsNSArMSw2IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKK2ltcG9ydCBzZXR1cF90ZXN0CiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtNDYsNCArNDcsMyBAQAogICAgIHByaW50KCJPSyIpCiBlbHNlOgogICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCi0gICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy94cGF0aGxlYWsucHkgYi9weXRob24vdGVzdHMveHBhdGhsZWFrLnB5CmluZGV4IDA0NDVmY2UuLjg3MzQ1NjEgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy94cGF0aGxlYWsucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3hwYXRobGVhay5weQpAQCAtMSw1ICsxLDcgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotaW1wb3J0IHN5cywgbGlieG1sMgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworaW1wb3J0IHNldHVwX3Rlc3QKK2ltcG9ydCBsaWJ4bWwyCitpbXBvcnQgc3lzCiAKIGxpYnhtbDIuZGVidWdNZW1vcnkoVHJ1ZSkKIApAQCAtNTEsNSArNTMsMyBAQAogCXByaW50KCJPSyIpCiBlbHNlOgogCXByaW50KCJNZW1vcnkgbGVhayIsIGxlYWtlZGJ5dGVzLCAiYnl0ZXMiKQotCSMgZHJvcCBmaWxlIHRvIC5tZW1kdW1wIGZpbGUgaW4gY3dkLCBidXQgd29uJ3Qgd29yayBpZiBub3QgY29tcGlsZWQgaW4KLQlsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3hwYXRobnMucHkgYi9weXRob24vdGVzdHMveHBhdGhucy5weQppbmRleCAzYWFlNmM3Li40NTY3ZmNmIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMveHBhdGhucy5weQorKysgYi9weXRob24vdGVzdHMveHBhdGhucy5weQpAQCAtMSw1ICsxLDYgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKIGV4cGVjdD0nIHhtbG5zOmE9InVybjp3aGF0ZXZhciInCkBAIC0xMSw2ICsxMiw3IEBACiByZXM9IiIKIGZvciBuIGluIGQueHBhdGhFdmFsKCIvL25hbWVzcGFjZTo6KiIpOgogICAgIHJlcyA9IHJlcyArIG4uc2VyaWFsaXplKCkKK2RlbCBuCiBkLmZyZWVEb2MoKQogCiBpZiByZXMgIT0gZXhwZWN0OgpAQCAtMTgsNyArMjAsNiBAQAogICAgIHByaW50KHJlcykKIGRlbCByZXMKIGRlbCBkCi1kZWwgbgogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiAKQEAgLTI2LDQgKzI3LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMveHBhdGhyZXQucHkgYi9weXRob24vdGVzdHMveHBhdGhyZXQucHkKaW5kZXggMjU0YmQ5NC4uNzZkNWNiNyAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3hwYXRocmV0LnB5CisrKyBiL3B5dGhvbi90ZXN0cy94cGF0aHJldC5weQpAQCAtMSw1ICsxLDYgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHN5cworaW1wb3J0IHNldHVwX3Rlc3QKIGltcG9ydCBsaWJ4bWwyCiAKICNtZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTU0LDQgKzU1LDMgQEAKICAgICBwcmludCgiT0siKQogZWxzZToKICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQotICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdHlwZXMuYyBiL3B5dGhvbi90eXBlcy5jCmluZGV4IDI3YWQ1MDAuLjI3ODJhNmEgMTAwNjQ0Ci0tLSBhL3B5dGhvbi90eXBlcy5jCisrKyBiL3B5dGhvbi90eXBlcy5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSAibGlieG1sX3dyYXAuaCIKICNpbmNsdWRlIDxsaWJ4bWwveHBhdGhJbnRlcm5hbHMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwogI2RlZmluZSBQWV9JTVBPUlRfU1RSSU5HX1NJWkUgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplCkBAIC03OCwxNCArNzksMTIgQEAKIAogRklMRSAqCiBsaWJ4bWxfUHlGaWxlR2V0KFB5T2JqZWN0ICpmKSB7Ci0gICAgaW50IGZsYWdzOwogICAgIEZJTEUgKnJlczsKICAgICBjb25zdCBjaGFyICptb2RlOwotCiAgICAgaW50IGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihmKTsKLSAgICBpbnRwdHJfdCB3X2ZoID0gLTE7CiAKICNpZmRlZiBfV0lOMzIKKyAgICBpbnRwdHJfdCB3X2ZoID0gLTE7CiAgICAgSE1PRFVMRSBobnRkbGwgPSBOVUxMOwogICAgIElPX1NUQVRVU19CTE9DSyBzdGF0dXNfYmxvY2s7CiAgICAgRklMRV9BQ0NFU1NfSU5GT1JNQVRJT04gYWk7CkBAIC0xMTMsOCArMTEyLDkgQEAKIAogICAgIGlmIChobnRkbGwgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKE5VTEwpOwotCitYTUxfSUdOT1JFX0ZQVFJfQ0FTVF9XQVJOSU5HUwogICAgIE50UXVlcnlJbmZvcm1hdGlvbkZpbGUgPSAodF9OdFF1ZXJ5SW5mb3JtYXRpb25GaWxlKUdldFByb2NBZGRyZXNzKGhudGRsbCwgIk50UXVlcnlJbmZvcm1hdGlvbkZpbGUiKTsKK1hNTF9QT1BfV0FSTklOR1MKIAogICAgIGlmIChOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlICE9IE5VTEwgJiYKICAgICAgICAgKE50UXVlcnlJbmZvcm1hdGlvbkZpbGUoKEhBTkRMRSl3X2ZoLApAQCAtMTMwLDIzICsxMzAsMjQgQEAKICAgICAgICAgICAgIGlmIChhaS5BY2Nlc3NGbGFncyAmIEZJTEVfQVBQRU5EX0RBVEEpCiAgICAgICAgICAgICAgICAgaXNfYXBwZW5kID0gVFJVRTsKIAotICAgICAgICAgICAgaWYgKGlzX3dyaXRlICYmIGlzX3JlYWQpCi0gICAgICAgICAgICAgICAgaWYgKGlzX2FwcGVuZCkKLSAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICJhKyI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtb2RlID0gInJ3IjsKLQotICAgICAgICAgICAgaWYgKCFpc193cml0ZSAmJiBpc19yZWFkKQorICAgICAgICAgICAgaWYgKGlzX3dyaXRlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzX3JlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FwcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiYSsiOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gInJ3IjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXBwZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICJhIjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICJ3IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChpc19hcHBlbmQpCiAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAicisiOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICJyIjsKLQotICAgICAgICAgICAgaWYgKGlzX3dyaXRlICYmICFpc19yZWFkKQotICAgICAgICAgICAgICAgIGlmIChpc19hcHBlbmQpCi0gICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiYSI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtb2RlID0gInciOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICBGcmVlTGlicmFyeShobnRkbGwpOwpAQCAtMTU0LDMxICsxNTUsNDcgQEAKICAgICBpZiAoIWlzX3dyaXRlICYmICFpc19yZWFkKSAvKiBhbHNvIGhhcHBlbnMgaWYgd2UgZGlkIG5vdCBsb2FkIG9yIHJ1biBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlKCkgc3VjY2Vzc2Z1bGx5ICovCiAgICAgICAgIHJldHVybihOVUxMKTsKICNlbHNlCisgICAgaW50IGZsYWdzOworCiAgICAgLyoKLSAgICAgKiBHZXQgdGhlIGZsYWdzIG9uIHRoZSBmZCB0byB1bmRlcnN0YW5kIGhvdyBpdCB3YXMgb3BlbmVkCisgICAgICogbWFjT1MgcmV0dXJucyBPX1JEV1IgZm9yIHN0YW5kYXJkIHN0cmVhbXMsIGJ1dCBmYWlscyB0byB3cml0ZSB0bworICAgICAqIHN0ZG91dCBvciBzdGRlcnIgd2hlbiBvcGVuZWQgd2l0aCBmZG9wZW4oZHVwX2ZkLCAicnciKS4KICAgICAgKi8KLSAgICBmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZMLCAwKTsKLSAgICBzd2l0Y2ggKGZsYWdzICYgT19BQ0NNT0RFKSB7Ci0gICAgICAgIGNhc2UgT19SRFdSOgotCSAgICBpZiAoZmxhZ3MgJiBPX0FQUEVORCkKLQkgICAgICAgIG1vZGUgPSAiYSsiOwotCSAgICBlbHNlCi0JICAgICAgICBtb2RlID0gInJ3IjsKLQkgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT19SRE9OTFk6Ci0JICAgIGlmIChmbGFncyAmIE9fQVBQRU5EKQotCSAgICAgICAgbW9kZSA9ICJyKyI7Ci0JICAgIGVsc2UKLQkgICAgICAgIG1vZGUgPSAiciI7Ci0JICAgIGJyZWFrOwotCWNhc2UgT19XUk9OTFk6Ci0JICAgIGlmIChmbGFncyAmIE9fQVBQRU5EKQotCSAgICAgICAgbW9kZSA9ICJhIjsKLQkgICAgZWxzZQotCSAgICAgICAgbW9kZSA9ICJ3IjsKLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgcmV0dXJuKE5VTEwpOworICAgIHN3aXRjaCAoZmQpIHsKKyAgICAgICAgY2FzZSBTVERJTl9GSUxFTk86CisgICAgICAgICAgICBtb2RlID0gInIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RET1VUX0ZJTEVOTzoKKyAgICAgICAgY2FzZSBTVERFUlJfRklMRU5POgorICAgICAgICAgICAgbW9kZSA9ICJ3IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdldCB0aGUgZmxhZ3Mgb24gdGhlIGZkIHRvIHVuZGVyc3RhbmQgaG93IGl0IHdhcyBvcGVuZWQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGTCwgMCk7CisgICAgICAgICAgICBzd2l0Y2ggKGZsYWdzICYgT19BQ0NNT0RFKSB7CisgICAgICAgICAgICAgICAgY2FzZSBPX1JEV1I6CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE9fQVBQRU5EKQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICJhKyI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAicnciOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE9fUkRPTkxZOgorICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBPX0FQUEVORCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAicisiOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gInIiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE9fV1JPTkxZOgorICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBPX0FQUEVORCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiYSI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAidyI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIApAQCAtMjEzLDkgKzIzMCw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfaW50V3JhcDogdmFsID0gJWRcbiIsIHZhbCk7Ci0jZW5kaWYKICAgICByZXQgPSBQWV9JTVBPUlRfSU5UKChsb25nKSB2YWwpOwogICAgIHJldHVybiAocmV0KTsKIH0KQEAgLTIyNSw5ICsyMzksNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX2xvbmdXcmFwOiB2YWwgPSAlbGRcbiIsIHZhbCk7Ci0jZW5kaWYKICAgICByZXQgPSBQeUxvbmdfRnJvbUxvbmcodmFsKTsKICAgICByZXR1cm4gKHJldCk7CiB9CkBAIC0yMzcsOSArMjQ4LDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF9kb3VibGVXcmFwOiB2YWwgPSAlZlxuIiwgdmFsKTsKLSNlbmRpZgogICAgIHJldCA9IFB5RmxvYXRfRnJvbURvdWJsZSgoZG91YmxlKSB2YWwpOwogICAgIHJldHVybiAocmV0KTsKIH0KQEAgLTI0OSw5ICsyNTcsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbGNoYXJQdHJXcmFwOiBzdHIgPSAlc1xuIiwgc3RyKTsKLSNlbmRpZgogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC0yNjYsOSArMjcxLDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxjaGFyUHRyV3JhcDogc3RyID0gJXNcbiIsIHN0cik7Ci0jZW5kaWYKICAgICBpZiAoc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtMjgyLDkgKzI4NCw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sQ2hhclB0cldyYXA6IHN0ciA9ICVzXG4iLCBzdHIpOwotI2VuZGlmCiAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTI5OSw5ICsyOTgsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbENoYXJQdHJXcmFwOiBzdHIgPSAlc1xuIiwgc3RyKTsKLSNlbmRpZgogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC0zMTUsOSArMzExLDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxjaGFyUHRyV3JhcDogc3RyID0gJXNcbiIsIHN0cik7Ci0jZW5kaWYKICAgICBpZiAoc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtMzMxLDkgKzMyNCw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sQ2hhclB0cldyYXA6IHN0ciA9ICVzXG4iLCBzdHIpOwotI2VuZGlmCiAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTM0Nyw5ICszMzcsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbERvY1B0cldyYXA6IGRvYyA9ICVwXG4iLCBkb2MpOwotI2VuZGlmCiAgICAgaWYgKGRvYyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTM2NCw5ICszNTEsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbE5vZGVQdHJXcmFwOiBub2RlID0gJXBcbiIsIG5vZGUpOwotI2VuZGlmCiAgICAgaWYgKG5vZGUgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC0zODAsOSArMzY0LDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxVUklQdHJXcmFwOiB1cmkgPSAlcFxuIiwgdXJpKTsKLSNlbmRpZgogICAgIGlmICh1cmkgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC0zOTYsOSArMzc3LDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxOc1B0cldyYXA6IG5vZGUgPSAlcFxuIiwgbnMpOwotI2VuZGlmCiAgICAgaWYgKG5zID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtNDEyLDkgKzM5MCw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sQXR0ck5vZGVQdHJXcmFwOiBhdHRyID0gJXBcbiIsIGF0dHIpOwotI2VuZGlmCiAgICAgaWYgKGF0dHIgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC00MjgsOSArNDAzLDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxBdHRyaWJ1dGVQdHJXcmFwOiBhdHRyID0gJXBcbiIsIGF0dHIpOwotI2VuZGlmCiAgICAgaWYgKGF0dHIgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC00NDQsOSArNDE2LDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxFbGVtZW50Tm9kZVB0cldyYXA6IGVsZW0gPSAlcFxuIiwgZWxlbSk7Ci0jZW5kaWYKICAgICBpZiAoZWxlbSA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTQ2MCw5ICs0MjksNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFhQYXRoQ29udGV4dFB0cldyYXA6IGN0eHQgPSAlcFxuIiwgY3R4dCk7Ci0jZW5kaWYKICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTQ3Niw5ICs0NDIsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFhQYXRoUGFyc2VyQ29udGV4dFB0cldyYXA6IGN0eHQgPSAlcFxuIiwgY3R4dCk7Ci0jZW5kaWYKICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTQ5Miw5ICs0NTUsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFBhcnNlckN0eHRQdHJXcmFwOiBjdHh0ID0gJXBcbiIsIGN0eHQpOwotI2VuZGlmCiAgICAgaWYgKGN0eHQgPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC01MjEsOSArNDgxLDYgQEAKIGxpYnhtbF94bWxYUGF0aERlc3RydWN0TnNOb2RlKFB5T2JqZWN0ICpjYXApCiAjZW5kaWYKIHsKLSNpZmRlZiBERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAibGlieG1sX3htbFhQYXRoRGVzdHJ1Y3ROc05vZGUgY2FsbGVkICVwXG4iLCBjYXApOwotI2VuZGlmCiAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDcwMDAwCiAgICAgeG1sWFBhdGhOb2RlU2V0RnJlZU5zKCh4bWxOc1B0cikgY2FwKTsKICNlbHNlCkBAIC01MzYsOSArNDkzLDYgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxYUGF0aE9iamVjdFB0cldyYXA6IGN0eHQgPSAlcFxuIiwgb2JqKTsKLSNlbmRpZgogICAgIGlmIChvYmogPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiAoUHlfTm9uZSk7CkBAIC03MDcsOSArNjYxLDYgQEAKICAgICAgICAgfQogI2VuZGlmIC8qIExJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRCAqLwogICAgICAgICBkZWZhdWx0OgotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBwcmludGYoIlVuYWJsZSB0byBjb252ZXJ0IFhQYXRoIG9iamVjdCB0eXBlICVkXG4iLCBvYmotPnR5cGUpOwotI2VuZGlmCiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICAgICByZXQgPSBQeV9Ob25lOwogICAgIH0KQEAgLTcyMiw5ICs2NzMsNiBAQAogewogICAgIHhtbFhQYXRoT2JqZWN0UHRyIHJldCA9IE5VTEw7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFhQYXRoT2JqZWN0UHRyQ29udmVydDogb2JqID0gJXBcbiIsIG9iaik7Ci0jZW5kaWYKICAgICBpZiAob2JqID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB9CkBAIC03OTEsOSArNzM5LDYgQEAKIAogICAgICAgICAgICAgY3VyID0gTlVMTDsKICAgICAgICAgICAgIGlmIChQeUNhcHN1bGVfQ2hlY2tFeGFjdChub2RlKSkgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJHb3QgYSBDYXBzdWxlXG4iKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIGN1ciA9IFB5eG1sTm9kZV9HZXQobm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG5vZGUsIChjaGFyICopICJfbyIpKSAmJgogCSAgICAgICAgICAgICAgIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG5vZGUsIChjaGFyICopICJnZXRfZG9jIikpKSB7CkBAIC04MDMsOSArNzQ4LDYgQEAKIAkJaWYgKHdyYXBwZXIgIT0gTlVMTCkKIAkJICAgIGN1ciA9IFB5eG1sTm9kZV9HZXQod3JhcHBlcik7CiAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIG9iamVjdCBpbiBQeXRob24gcmV0dXJuIGxpc3RcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY3VyICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICB4bWxYUGF0aE5vZGVTZXRBZGQoc2V0LCBjdXIpOwpAQCAtODEzLDkgKzc1NSw2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0ID0geG1sWFBhdGhXcmFwTm9kZVNldChzZXQpOwogICAgIH0gZWxzZSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gY29udmVydCBQeXRob24gT2JqZWN0IHRvIFhQYXRoIik7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIChyZXQpOwogfQpAQCAtODI1LDkgKzc2NCw2IEBACiB7CiAJUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRmKCJsaWJ4bWxfeG1sVmFsaWRDdHh0UHRyV3JhcDogdmFsaWQgPSAlcFxuIiwgdmFsaWQpOwotI2VuZGlmCiAJaWYgKHZhbGlkID09IE5VTEwpIHsKIAkJUHlfSU5DUkVGKFB5X05vbmUpOwogCQlyZXR1cm4gKFB5X05vbmUpOwpAQCAtODQ1LDkgKzc4MSw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sTm9kZVB0cldyYXA6IGNhdGFsID0gJXBcbiIsIGNhdGFsKTsKLSNlbmRpZgogICAgIGlmIChjYXRhbCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTg2Myw5ICs3OTYsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbE91dHB1dEJ1ZmZlclB0cldyYXA6IGJ1ZmZlciA9ICVwXG4iLCBidWZmZXIpOwotI2VuZGlmCiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTg4MSw5ICs4MTEsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFBhcnNlcklucHV0QnVmZmVyUHRyV3JhcDogYnVmZmVyID0gJXBcbiIsIGJ1ZmZlcik7Ci0jZW5kaWYKICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtOTAwLDkgKzgyNyw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sUmVnZXhwUHRyV3JhcDogcmVnZXhwID0gJXBcbiIsIHJlZ2V4cCk7Ci0jZW5kaWYKICAgICBpZiAocmVnZXhwID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtOTIwLDkgKzg0NCw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sVGV4dFJlYWRlclB0cldyYXA6IHJlYWRlciA9ICVwXG4iLCByZWFkZXIpOwotI2VuZGlmCiAgICAgaWYgKHJlYWRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTkzOCw5ICs4NTksNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFRleHRSZWFkZXJMb2NhdG9yUHRyV3JhcDogbG9jYXRvciA9ICVwXG4iLCBsb2NhdG9yKTsKLSNlbmRpZgogICAgIGlmIChsb2NhdG9yID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtOTU4LDkgKzg3Niw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sUmVsYXhOR1B0cldyYXA6IGN0eHQgPSAlcFxuIiwgY3R4dCk7Ci0jZW5kaWYKICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTk3Niw5ICs4OTEsNiBAQAogewogICAgIFB5T2JqZWN0ICpyZXQ7CiAKLSNpZmRlZiBERUJVRwotICAgIHByaW50ZigibGlieG1sX3htbFJlbGF4TkdQYXJzZXJDdHh0UHRyV3JhcDogY3R4dCA9ICVwXG4iLCBjdHh0KTsKLSNlbmRpZgogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gKFB5X05vbmUpOwpAQCAtOTkzLDkgKzkwNSw2IEBACiB7CiAgICAgUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCJsaWJ4bWxfeG1sUmVsYXhOR1ZhbGlkQ3R4dFB0cldyYXA6IHZhbGlkID0gJXBcbiIsIHZhbGlkKTsKLSNlbmRpZgogICAgIGlmICh2YWxpZCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKQEAgLTEwMTEsOSArOTIwLDYgQEAKIHsKIAlQeU9iamVjdCAqcmV0OwogCi0jaWZkZWYgREVCVUcKLQlwcmludGYoImxpYnhtbF94bWxTY2hlbWFQdHJXcmFwOiBjdHh0ID0gJXBcbiIsIGN0eHQpOwotI2VuZGlmCiAJaWYgKGN0eHQgPT0gTlVMTCkgewogCQlQeV9JTkNSRUYoUHlfTm9uZSk7CiAJCXJldHVybiAoUHlfTm9uZSk7CkBAIC0xMDI5LDkgKzkzNSw2IEBACiB7CiAJUHlPYmplY3QgKnJldDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRmKCJsaWJ4bWxfeG1sU2NoZW1hUGFyc2VyQ3R4dFB0cldyYXA6IGN0eHQgPSAlcFxuIiwgY3R4dCk7Ci0jZW5kaWYKIAlpZiAoY3R4dCA9PSBOVUxMKSB7CiAJCVB5X0lOQ1JFRihQeV9Ob25lKTsKIAkJcmV0dXJuIChQeV9Ob25lKTsKQEAgLTEwNDgsOSArOTUxLDYgQEAKIHsKIAlQeU9iamVjdCAqcmV0OwogCQotI2lmZGVmIERFQlVHCi0JcHJpbnRmKCJsaWJ4bWxfeG1sU2NoZW1hVmFsaWRDdHh0UHRyV3JhcDogdmFsaWQgPSAlcFxuIiwgdmFsaWQpOwotI2VuZGlmCiAJaWYgKHZhbGlkID09IE5VTEwpIHsKIAkJUHlfSU5DUkVGKFB5X05vbmUpOwogCQlyZXR1cm4gKFB5X05vbmUpOwpAQCAtMTA2NCwxOCArOTY0LDMwIEBACiB9CiAjZW5kaWYgLyogTElCWE1MX1NDSEVNQVNfRU5BQkxFRCAqLwogCitzdGF0aWMgdm9pZAorbGlieG1sX3htbERlc3RydWN0RXJyb3IoUHlPYmplY3QgKmNhcCkgeworICAgIHhtbEVycm9yUHRyIGVyciA9ICh4bWxFcnJvclB0cikgUHlDYXBzdWxlX0dldFBvaW50ZXIoY2FwLCAieG1sRXJyb3JQdHIiKTsKKyAgICB4bWxSZXNldEVycm9yKGVycik7CisgICAgeG1sRnJlZShlcnIpOworfQorCiBQeU9iamVjdCAqCi1saWJ4bWxfeG1sRXJyb3JQdHJXcmFwKHhtbEVycm9yUHRyIGVycm9yKQorbGlieG1sX3htbEVycm9yUHRyV3JhcChjb25zdCB4bWxFcnJvciAqZXJyb3IpCiB7CiAgICAgUHlPYmplY3QgKnJldDsKKyAgICB4bWxFcnJvclB0ciBjb3B5OwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYoImxpYnhtbF94bWxFcnJvclB0cldyYXA6IGVycm9yID0gJXBcbiIsIGVycm9yKTsKLSNlbmRpZgogICAgIGlmIChlcnJvciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKICAgICB9Ci0gICAgcmV0ID0gUHlDYXBzdWxlX05ldygodm9pZCAqKSBlcnJvciwgKGNoYXIgKikgInhtbEVycm9yUHRyIiwgTlVMTCk7CisgICAgY29weSA9IHhtbE1hbGxvYyhzaXplb2YoKmNvcHkpKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKKyAgICB9CisgICAgbWVtc2V0KGNvcHksIDAsIHNpemVvZigqY29weSkpOworICAgIHhtbENvcHlFcnJvcihlcnJvciwgY29weSk7CisgICAgcmV0ID0gUHlDYXBzdWxlX05ldyhjb3B5LCAieG1sRXJyb3JQdHIiLCBsaWJ4bWxfeG1sRGVzdHJ1Y3RFcnJvcik7CiAgICAgcmV0dXJuIChyZXQpOwogfQpkaWZmIC0tZ2l0IGEvcmVsYXhuZy5jIGIvcmVsYXhuZy5jCmluZGV4IDdmMGYyZTcuLmQ3YzQwN2QgMTAwNjQ0Ci0tLSBhL3JlbGF4bmcuYworKysgYi9yZWxheG5nLmMKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGlieG1sL3htbHJlZ2V4cC5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxzY2hlbWFzdHlwZXMuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKKyNpbmNsdWRlICJwcml2YXRlL3JlZ2V4cC5oIgorI2luY2x1ZGUgInByaXZhdGUvc3RyaW5nLmgiCisKIC8qCiAgKiBUaGUgUmVsYXgtTkcgbmFtZXNwYWNlCiAgKi8KQEAgLTQ3LDMwICs1MSw2IEBACiAgICAgKHhtbFN0ckVxdWFsKG5vZGUtPm5zLT5ocmVmLCB4bWxSZWxheE5HTnMpKSkKIAogCi0jaWYgMAotI2RlZmluZSBERUJVRyAxCi0KLSNkZWZpbmUgREVCVUdfR1JBTU1BUiAxCi0KLSNkZWZpbmUgREVCVUdfQ09OVEVOVCAxCi0KLSNkZWZpbmUgREVCVUdfVFlQRSAxCi0KLSNkZWZpbmUgREVCVUdfVkFMSUQgMQotCi0jZGVmaW5lIERFQlVHX0lOVEVSTEVBVkUgMQotCi0jZGVmaW5lIERFQlVHX0xJU1QgMQotCi0jZGVmaW5lIERFQlVHX0lOQ0xVREUgMQotCi0jZGVmaW5lIERFQlVHX0VSUk9SIDEKLQotI2RlZmluZSBERUJVR19DT01QSUxFIDEKLQotI2RlZmluZSBERUJVR19QUk9HUkVTU0lWRSAxCi0jZW5kaWYKLQogI2RlZmluZSBNQVhfRVJST1IgNQogCiAjZGVmaW5lIFRPRE8JCQkJCQkJCVwKQEAgLTE1MjMsMTUgKzE1MDMsNiBAQAogICAgIHhtbE5vZGVQdHIgdG1wLCB0bXAyOwogICAgIHhtbENoYXIgKm5hbWUyOwogCi0jaWZkZWYgREVCVUdfSU5DTFVERQotICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgIkVsaW1pbmF0aW9uIG9mIDxpbmNsdWRlPiBzdGFydCBmcm9tICVzXG4iLCBVUkwpOwotICAgIGVsc2UKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRWxpbWluYXRpb24gb2YgPGluY2x1ZGU+IGRlZmluZSAlcyBmcm9tICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgVVJMKTsKLSNlbmRpZgogICAgIHRtcCA9IHRhcmdldDsKICAgICB3aGlsZSAodG1wICE9IE5VTEwpIHsKICAgICAgICAgdG1wMiA9IHRtcC0+bmV4dDsKQEAgLTE1NTksMTggKzE1MzAsMTEgQEAKIAogICAgICAgICAgICAgICAgIGlmICh4bWxTdHJFcXVhbAogICAgICAgICAgICAgICAgICAgICAoaW5jLT5kb2MtPmNoaWxkcmVuLT5uYW1lLCBCQURfQ0FTVCAiZ3JhbW1hciIpKSB7Ci0jaWZkZWYgREVCVUdfSU5DTFVERQotICAgICAgICAgICAgICAgICAgICBocmVmID0geG1sR2V0UHJvcCh0bXAsIEJBRF9DQVNUICJocmVmIik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgaWYgKHhtbFJlbGF4TkdSZW1vdmVSZWRlZmluZShjdHh0LCBocmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbERvY0dldFJvb3RFbGVtZW50KGluYy0+ZG9jKS0+Y2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUdfSU5DTFVERQotICAgICAgICAgICAgICAgICAgICBpZiAoaHJlZiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgeG1sRnJlZShocmVmKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh4bWxSZWxheE5HUmVtb3ZlUmVkZWZpbmUoY3R4dCwgVVJMLCB0bXAtPmNoaWxkcmVuLCBuYW1lKSA9PSAxKSB7CkBAIC0xNjA0LDExICsxNTY4LDYgQEAKICAgICBpbnQgaTsKICAgICB4bWxOb2RlUHRyIHJvb3QsIGN1cjsKIAotI2lmZGVmIERFQlVHX0lOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgInhtbFJlbGF4TkdMb2FkSW5jbHVkZSglcylcbiIsIFVSTCk7Ci0jZW5kaWYKLQogICAgIC8qCiAgICAgICogY2hlY2sgYWdhaW5zdCByZWN1cnNpb24gaW4gdGhlIHN0YWNrCiAgICAgICovCkBAIC0xNjMwLDkgKzE1ODksNiBAQAogICAgICAgICAgICAgICAgICAgICJ4bWxSZWxheE5HOiBjb3VsZCBub3QgbG9hZCAlc1xuIiwgVVJMLCBOVUxMKTsKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB9Ci0jaWZkZWYgREVCVUdfSU5DTFVERQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUGFyc2VkICVzIE9rYXlcbiIsIFVSTCk7Ci0jZW5kaWYKIAogICAgIC8qCiAgICAgICogQWxsb2NhdGUgdGhlIGRvY3VtZW50IHN0cnVjdHVyZXMgYW5kIHJlZ2lzdGVyIGl0IGZpcnN0LgpAQCAtMTY3MCw5ICsxNjI2LDYgQEAKICAgICAgKiBTb21lIHByZXByb2Nlc3Npbmcgb2YgdGhlIGRvY3VtZW50IGNvbnRlbnQsIHRoaXMgaW5jbHVkZSByZWN1cnNpbmcKICAgICAgKiBpbiB0aGUgaW5jbHVkZSBzdGFjay4KICAgICAgKi8KLSNpZmRlZiBERUJVR19JTkNMVURFCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJjbGVhbnVwIG9mICVzXG4iLCBVUkwpOwotI2VuZGlmCiAKICAgICBkb2MgPSB4bWxSZWxheE5HQ2xlYW51cERvYyhjdHh0LCBkb2MpOwogICAgIGlmIChkb2MgPT0gTlVMTCkgewpAQCAtMTY4NSw5ICsxNjM4LDYgQEAKICAgICAgKi8KICAgICB4bWxSZWxheE5HSW5jbHVkZVBvcChjdHh0KTsKIAotI2lmZGVmIERFQlVHX0lOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkNoZWNraW5nIG9mICVzXG4iLCBVUkwpOwotI2VuZGlmCiAgICAgLyoKICAgICAgKiBDaGVjayB0aGF0IHRoZSB0b3AgZWxlbWVudCBpcyBhIGdyYW1tYXIKICAgICAgKi8KQEAgLTE3NzksMTAgKzE3MjksNiBAQAogewogICAgIHhtbFJlbGF4TkdWYWxpZEVycm9yUHRyIGN1cjsKIAotI2lmZGVmIERFQlVHX0VSUk9SCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJQdXNoaW5nIGVycm9yICVkIGF0ICVkIG9uIHN0YWNrXG4iLCBlcnIsIGN0eHQtPmVyck5yKTsKLSNlbmRpZgogICAgIGlmIChjdHh0LT5lcnJUYWIgPT0gTlVMTCkgewogICAgICAgICBjdHh0LT5lcnJNYXggPSA4OwogICAgICAgICBjdHh0LT5lcnJOciA9IDA7CkBAIC0yMjU3LDkgKzIyMDMsNiBAQAogICAgIGlmIChjdHh0LT5mbGFncyAmIEZMQUdTX05PRVJST1IpCiAgICAgICAgIHJldHVybjsKIAotI2lmZGVmIERFQlVHX0VSUk9SCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJTaG93IGVycm9yICVkXG4iLCBlcnIpOwotI2VuZGlmCiAgICAgbXNnID0geG1sUmVsYXhOR0dldEVycm9yU3RyaW5nKGVyciwgYXJnMSwgYXJnMik7CiAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CkBAIC0yMjg0LDEwICsyMjI3LDYgQEAKICAgICBpbnQgaTsKICAgICB4bWxSZWxheE5HVmFsaWRFcnJvclB0ciBlcnI7CiAKLSNpZmRlZiBERUJVR19FUlJPUgotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAiUG9wIGVycm9ycyB0aWxsIGxldmVsICVkXG4iLCBsZXZlbCk7Ci0jZW5kaWYKICAgICBmb3IgKGkgPSBsZXZlbDsgaSA8IGN0eHQtPmVyck5yOyBpKyspIHsKICAgICAgICAgZXJyID0gJmN0eHQtPmVyclRhYltpXTsKICAgICAgICAgaWYgKGVyci0+ZmxhZ3MgJiBFUlJPUl9JU19EVVApIHsKQEAgLTIzMTcsMTAgKzIyNTYsNiBAQAogICAgIGludCBpLCBqLCBrOwogICAgIHhtbFJlbGF4TkdWYWxpZEVycm9yUHRyIGVyciwgZHVwOwogCi0jaWZkZWYgREVCVUdfRVJST1IKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIkR1bXBpbmcgZXJyb3Igc3RhY2sgJWQgZXJyb3JzXG4iLCBjdHh0LT5lcnJOcik7Ci0jZW5kaWYKICAgICBmb3IgKGkgPSAwLCBrID0gMDsgaSA8IGN0eHQtPmVyck5yOyBpKyspIHsKICAgICAgICAgZXJyID0gJmN0eHQtPmVyclRhYltpXTsKICAgICAgICAgaWYgKGsgPCBNQVhfRVJST1IpIHsKQEAgLTIzNzEsOSArMjMwNiw2IEBACiAgICAgaWYgKGN0eHQtPmZsYWdzICYgRkxBR1NfTk9FUlJPUikKICAgICAgICAgcmV0dXJuOwogCi0jaWZkZWYgREVCVUdfRVJST1IKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkFkZGluZyBlcnJvciAlZFxuIiwgZXJyKTsKLSNlbmRpZgogICAgIC8qCiAgICAgICogZ2VuZXJhdGUgdGhlIGVycm9yIGRpcmVjdGx5CiAgICAgICovCkBAIC0yODc1LDEwICsyODA3LDYgQEAKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogZnJvbSBhdXRvbWF0YS5jIGJ1dCBub3QgZXhwb3J0ZWQgKi8KLXZvaWQgeG1sQXV0b21hdGFTZXRGbGFncyh4bWxBdXRvbWF0YVB0ciBhbSwgaW50IGZsYWdzKTsKLQotCiBzdGF0aWMgaW50IHhtbFJlbGF4TkdUcnlDb21waWxlKHhtbFJlbGF4TkdQYXJzZXJDdHh0UHRyIGN0eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFJlbGF4TkdEZWZpbmVQdHIgZGVmKTsKIApAQCAtMjkzNywyMSArMjg2NSw2IEBACiAJCX0KICAgICAgICAgICAgICAgICBpZiAoKHJldCA9PSAxKSAmJiAhKGRlZi0+ZGZsYWdzICY9IElTX05PVF9DT01QSUxBQkxFKSkKICAgICAgICAgICAgICAgICAgICAgZGVmLT5kZmxhZ3MgfD0gSVNfQ09NUElMQUJMRTsKLSNpZmRlZiBERUJVR19DT01QSUxFCi0gICAgICAgICAgICAgICAgaWYgKHJldCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnQgY29udGVudCBmb3IgJXMgaXMgY29tcGlsYWJsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IGNvbnRlbnQgZm9yICVzIGlzIG5vdCBjb21waWxhYmxlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmLT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIGluIFJlbGF4TkdJc0NvbXBpbGFibGUgZm9yIGVsZW1lbnQgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEFsbCBlbGVtZW50cyByZXR1cm4gYSBjb21waWxhYmxlIHN0YXR1cyB1bmxlc3MgdGhleQpAQCAtMzAxMywyMSArMjkyNiw2IEBACiAgICAgICAgIGRlZi0+ZGZsYWdzIHw9IElTX05PVF9DT01QSUxBQkxFOwogICAgIGlmIChyZXQgPT0gMSkKICAgICAgICAgZGVmLT5kZmxhZ3MgfD0gSVNfQ09NUElMQUJMRTsKLSNpZmRlZiBERUJVR19DT01QSUxFCi0gICAgaWYgKHJldCA9PSAxKSB7Ci0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF4TkdJc0NvbXBpbGFibGUgJXMgOiB0cnVlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgeG1sUmVsYXhOR0RlZk5hbWUoZGVmKSk7Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gMCkgewotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJSZWxheE5HSXNDb21waWxhYmxlICVzIDogZmFsc2VcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB4bWxSZWxheE5HRGVmTmFtZShkZWYpKTsKLSAgICB9IGVsc2UgewotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIGluIFJlbGF4TkdJc0NvbXBpbGFibGUgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB4bWxSZWxheE5HRGVmTmFtZShkZWYpKTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gKHJldCk7CiB9CiAKQEAgLTMxMTMsMTEgKzMwMTEsNiBAQAogICAgICAgICAgICAgICAgIHhtbEF1dG9tYXRhU2V0RmluYWxTdGF0ZShjdHh0LT5hbSwgY3R4dC0+c3RhdGUpOwogICAgICAgICAgICAgICAgIGRlZi0+Y29udE1vZGVsID0geG1sQXV0b21hdGFDb21waWxlKGN0eHQtPmFtKTsKICAgICAgICAgICAgICAgICBpZiAoIXhtbFJlZ2V4cElzRGV0ZXJtaW5pc3QoZGVmLT5jb250TW9kZWwpKSB7Ci0jaWZkZWYgREVCVUdfQ09NUElMRQotICAgICAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50IG1vZGVsIG5vdCBkZXRlcm1pbmlzdCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZi0+bmFtZSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogd2UgY2FuIG9ubHkgdXNlIHRoZSBhdXRvbWF0YSBpZiBpdCBpcyBkZXRlcm1pbmlzdAogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMyODIsMjQgKzMxNzUsNiBAQAogICAgICAgICBpZiAoKGRlZi0+ZGZsYWdzICYgSVNfQ09NUElMQUJMRSkgJiYgKGRlZi0+ZGVwdGggIT0gLTI1KSkgewogICAgICAgICAgICAgY3R4dC0+YW0gPSBOVUxMOwogICAgICAgICAgICAgcmV0ID0geG1sUmVsYXhOR0NvbXBpbGUoY3R4dCwgZGVmKTsKLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZi0+dHlwZSA9PSBYTUxfUkVMQVhOR19TVEFSVCkKLSAgICAgICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGlsZWQgdGhlIHN0YXJ0XG4iKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVkIGVsZW1lbnQgJXNcbiIsIGRlZi0+bmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChkZWYtPnR5cGUgPT0gWE1MX1JFTEFYTkdfU1RBUlQpCi0gICAgICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjb21waWxlIHRoZSBzdGFydFxuIik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gY29tcGlsZSBlbGVtZW50ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDM1OSwxOSArNDIzNCwxMiBAQAogICAgIGlmIChjdHh0LT5uYkVycm9ycyAhPSAwKQogICAgICAgICByZXR1cm47CiAKLSNpZmRlZiBERUJVR19JTlRFUkxFQVZFCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJ4bWxSZWxheE5HQ29tcHV0ZUludGVybGVhdmVzKCVzKVxuIiwgbmFtZSk7Ci0jZW5kaWYKICAgICBjdXIgPSBkZWYtPmNvbnRlbnQ7CiAgICAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7CiAgICAgICAgIG5iY2hpbGQrKzsKICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgIH0KIAotI2lmZGVmIERFQlVHX0lOVEVSTEVBVkUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiAgJWQgY2hpbGRcbiIsIG5iY2hpbGQpOwotI2VuZGlmCiAgICAgZ3JvdXBzID0gKHhtbFJlbGF4TkdJbnRlcmxlYXZlR3JvdXBQdHIgKikKICAgICAgICAgeG1sTWFsbG9jKG5iY2hpbGQgKiBzaXplb2YoeG1sUmVsYXhOR0ludGVybGVhdmVHcm91cFB0cikpOwogICAgIGlmIChncm91cHMgPT0gTlVMTCkKQEAgLTQzOTAsOSArNDI1OCw2IEBACiAgICAgICAgIG5iZ3JvdXBzKys7CiAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKICAgICB9Ci0jaWZkZWYgREVCVUdfSU5URVJMRUFWRQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiICAlZCBncm91cHNcbiIsIG5iZ3JvdXBzKTsKLSNlbmRpZgogCiAgICAgLyoKICAgICAgKiBMZXQncyBjaGVjayB0aGF0IGFsbCBydWxlcyBtYWtlcyBhIHBhcnRpdGlvbnMgYWNjb3JkaW5nIHRvIDcuNApAQCAtNTAxOSwxMSArNDg4NCw2IEBACiAgICAgICAgIHhtbFJlbGF4TkdHcmFtbWFyUHRyIGdyYW1tYXIsIG9sZDsKICAgICAgICAgeG1sUmVsYXhOR0dyYW1tYXJQdHIgb2xkcGFyZW50OwogCi0jaWZkZWYgREVCVUdfR1JBTU1BUgotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCA8Z3JhbW1hcj4gcGF0dGVyblxuIik7Ci0jZW5kaWYKLQogICAgICAgICBvbGRwYXJlbnQgPSBjdHh0LT5wYXJlbnRncmFtbWFyOwogICAgICAgICBvbGQgPSBjdHh0LT5ncmFtbWFyOwogICAgICAgICBjdHh0LT5wYXJlbnRncmFtbWFyID0gb2xkOwpAQCAtNTgwOSwxMSArNTY2OSw2IEBACiAKICAgICAgICAgY3VyID0gY3VyLT5uZXh0SGFzaDsKICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgInhtbFJlbGF4TkdDaGVja0NvbWJpbmUoKTogbWVyZ2luZyAlcyBkZWZpbmVzOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbmFtZSwgY2hvaWNlT3JJbnRlcmxlYXZlKTsKLSNlbmRpZgogICAgIGlmIChjaG9pY2VPckludGVybGVhdmUgPT0gLTEpCiAgICAgICAgIGNob2ljZU9ySW50ZXJsZWF2ZSA9IDA7CiAgICAgY3VyID0geG1sUmVsYXhOR05ld0RlZmluZShjdHh0LCBkZWZpbmUtPm5vZGUpOwpAQCAtNTkzOSwxMSArNTc5NCw2IEBACiAKICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgIH0KLSNpZmRlZiBERUJVRwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAieG1sUmVsYXhOR0NvbWJpbmVTdGFydCgpOiBtZXJnaW5nIDxzdGFydD46ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBjaG9pY2VPckludGVybGVhdmUpOwotI2VuZGlmCiAgICAgaWYgKGNob2ljZU9ySW50ZXJsZWF2ZSA9PSAtMSkKICAgICAgICAgY2hvaWNlT3JJbnRlcmxlYXZlID0gMDsKICAgICBjdXIgPSB4bWxSZWxheE5HTmV3RGVmaW5lKGN0eHQsIHN0YXJ0cy0+bm9kZSk7CkBAIC02NjA5LDEwICs2NDU5LDYgQEAKIHsKICAgICB4bWxSZWxheE5HR3JhbW1hclB0ciByZXQsIHRtcCwgb2xkOwogCi0jaWZkZWYgREVCVUdfR1JBTU1BUgotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUGFyc2luZyBhIG5ldyBncmFtbWFyXG4iKTsKLSNlbmRpZgotCiAgICAgcmV0ID0geG1sUmVsYXhOR05ld0dyYW1tYXIoY3R4dCk7CiAgICAgaWYgKHJldCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKE5VTEwpOwpAQCAtNjc0MSwxMSArNjU4Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfUkVMQVhOR19JTl9TVEFSVCwgWE1MX1JFTEFYTkdfTk9PUCk7CiAgICAgICAgIH0KICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoc2NoZW1hID09IE5VTEwpCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgInhtbFJlbGF4TkdQYXJzZURvY3VtZW50KCkgZmFpbGVkXG4iKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIChzY2hlbWEpOwogfQpAQCAtNzk3MSwxMCArNzgxMiw2IEBACiAgICAgeG1sUmVsYXhOR0RlZmluZVB0ciBkZWZpbmUgPSAoeG1sUmVsYXhOR0RlZmluZVB0cikgdHJhbnNkYXRhOwogICAgIGludCByZXQ7CiAKLSNpZmRlZiBERUJVR19DT01QSUxFCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJDb21waWxlZCBjYWxsYmFjayBmb3I6ICclcydcbiIsIHRva2VuKTsKLSNlbmRpZgogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYWxsYmFjayBvbiAlcyBtaXNzaW5nIGNvbnRleHRcbiIsIHRva2VuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzk4NywxMiArNzgyNCw3IEBACiAgICAgICAgICAgICBjdHh0LT5lcnJObyA9IFhNTF9SRUxBWE5HX0VSUl9JTlRFUk5BTDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGRlZmluZSA9PSBOVUxMKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbGxiYWNrIG9uICVzIG1pc3NpbmcgaW5mb1xuIiwgdG9rZW4pOwotICAgICAgICBpZiAoKGN0eHQgIT0gTlVMTCkgJiYgKGN0eHQtPmVyck5vID09IFhNTF9SRUxBWE5HX09LKSkKLSAgICAgICAgICAgIGN0eHQtPmVyck5vID0gWE1MX1JFTEFYTkdfRVJSX0lOVEVSTkFMOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWZpbmUtPnR5cGUgIT0gWE1MX1JFTEFYTkdfRUxFTUVOVCkgeworICAgIGlmIChkZWZpbmUtPnR5cGUgIT0gWE1MX1JFTEFYTkdfRUxFTUVOVCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbGxiYWNrIG9uICVzIGRlZmluZSBpcyBub3QgZWxlbWVudFxuIiwgdG9rZW4pOwogICAgICAgICBpZiAoY3R4dC0+ZXJyTm8gPT0gWE1MX1JFTEFYTkdfT0spCiAgICAgICAgICAgICBjdHh0LT5lcnJObyA9IFhNTF9SRUxBWE5HX0VSUl9JTlRFUk5BTDsKQEAgLTgxODYsMTAgKzgwMTgsNiBAQAogICAgIHhtbE5vZGVQdHIgbm9kZTsKICAgICBpbnQgcmV0ID0gMCwgb2xkZmxhZ3M7CiAKLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAiUHJvZ3Jlc3NpdmUgY2FsbGJhY2sgZm9yOiAnJXMnXG4iLCB0b2tlbik7Ci0jZW5kaWYKICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FsbGJhY2sgb24gJXMgbWlzc2luZyBjb250ZXh0XG4iLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTgyMjksMTEgKzgwNTcsNiBAQAogICAgICAgICAvKgogICAgICAgICAgKiB0aGlzIG5vZGUgY2Fubm90IGJlIHZhbGlkYXRlZCBpbiBhIHN0cmVhbWFibGUgZmFzaGlvbgogICAgICAgICAgKi8KLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJFbGVtZW50ICclcycgdmFsaWRhdGlvbiBpcyBub3Qgc3RyZWFtYWJsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuKTsKLSNlbmRpZgogICAgICAgICBjdHh0LT5wc3RhdGUgPSAwOwogICAgICAgICBjdHh0LT5wZGVmID0gZGVmaW5lOwogICAgICAgICByZXR1cm47CkBAIC04MzMwLDkgKzgxNTMsNiBAQAogICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAoZWxlbSA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuICgtMSk7CiAKLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUHVzaEVsZW0gJXNcbiIsIGVsZW0tPm5hbWUpOwotI2VuZGlmCiAgICAgaWYgKGN0eHQtPmVsZW0gPT0gMCkgewogICAgICAgICB4bWxSZWxheE5HUHRyIHNjaGVtYTsKICAgICAgICAgeG1sUmVsYXhOR0dyYW1tYXJQdHIgZ3JhbW1hcjsKQEAgLTgzODEsMTEgKzgyMDEsNiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXQgPSAxOwogICAgIH0KLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgIGlmIChyZXQgPCAwKQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlB1c2hFbGVtICVzIGZhaWxlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0tPm5hbWUpOwotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC04NDA4LDEwICs4MjIzLDYgQEAKICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPmVsZW0gPT0gTlVMTCkgfHwgKGRhdGEgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybiAoLTEpOwogCi0jaWZkZWYgREVCVUdfUFJPR1JFU1NJVkUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkNEQVRBICVzICVkXG4iLCBkYXRhLCBsZW4pOwotI2VuZGlmCi0KICAgICB3aGlsZSAoKmRhdGEgIT0gMCkgewogICAgICAgICBpZiAoIUlTX0JMQU5LX0NIKCpkYXRhKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODQyMyw5ICs4MjM0LDYgQEAKICAgICByZXQgPSB4bWxSZWdFeGVjUHVzaFN0cmluZyhjdHh0LT5lbGVtLCBCQURfQ0FTVCAiI3RleHQiLCBjdHh0KTsKICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBWQUxJRF9FUlIyKFhNTF9SRUxBWE5HX0VSUl9URVhUV1JPTkcsIEJBRF9DQVNUICIgVE9ETyAiKTsKLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkNEQVRBIGZhaWxlZFxuIik7Ci0jZW5kaWYKIAogICAgICAgICByZXR1cm4gKC0xKTsKICAgICB9CkBAIC04NDUyLDkgKzgyNjAsNiBAQAogCiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5lbGVtID09IE5VTEwpIHx8IChlbGVtID09IE5VTEwpKQogICAgICAgICByZXR1cm4gKC0xKTsKLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiUG9wRWxlbSAlc1xuIiwgZWxlbS0+bmFtZSk7Ci0jZW5kaWYKICAgICAvKgogICAgICAqIHZlcmlmeSB0aGF0IHdlIHJlYWNoZWQgYSB0ZXJtaW5hbCBzdGF0ZSBvZiB0aGUgY29udGVudCBtb2RlbC4KICAgICAgKi8KQEAgLTg0NzIsMTEgKzgyNzcsNiBAQAogICAgICAgICByZXQgPSAxOwogICAgIH0KICAgICB4bWxSZWdGcmVlRXhlY0N0eHQoZXhlYyk7Ci0jaWZkZWYgREVCVUdfUFJPR1JFU1NJVkUKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJQb3BFbGVtICVzIGZhaWxlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0tPm5hbWUpOwotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC04NTAxLDkgKzgzMDEsNiBAQAogCiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjdHh0LT5wZGVmID09IE5VTEwpIHx8IChlbGVtID09IE5VTEwpKQogICAgICAgICByZXR1cm4gKC0xKTsKLSNpZmRlZiBERUJVR19QUk9HUkVTU0lWRQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiRnVsbEVsZW0gJXNcbiIsIGVsZW0tPm5hbWUpOwotI2VuZGlmCiAgICAgc3RhdGUgPSB4bWxSZWxheE5HTmV3VmFsaWRTdGF0ZShjdHh0LCBlbGVtLT5wYXJlbnQpOwogICAgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAoLTEpOwpAQCAtODUxOCwxMSArODMxNSw2IEBACiAgICAgICAgIHJldCA9IDE7CiAgICAgeG1sUmVsYXhOR0ZyZWVWYWxpZFN0YXRlKGN0eHQsIGN0eHQtPnN0YXRlKTsKICAgICBjdHh0LT5zdGF0ZSA9IE5VTEw7Ci0jaWZkZWYgREVCVUdfUFJPR1JFU1NJVkUKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJGdWxsRWxlbSAlcyBmYWlsZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLT5uYW1lKTsKLSNlbmRpZgogICAgIHJldHVybiAocmV0KTsKIH0KIApAQCAtODU4OCw3ICs4MzgwLDcgQEAKICAgICAgICAgdG1wKys7CiAgICAgbGVuID0gdG1wIC0gc3RyOwogCi0gICAgcmV0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKChsZW4gKyAxKSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgcmV0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKGxlbiArIDEpOwogICAgIGlmIChyZXQgPT0gTlVMTCkgewogICAgICAgICB4bWxSbmdWRXJyTWVtb3J5KGN0eHQsICJ2YWxpZGF0aW5nXG4iKTsKICAgICAgICAgcmV0dXJuIChOVUxMKTsKQEAgLTg4NTIsMTAgKzg2NDQsNiBAQAogICAgICAgICAgICAgICAgIHhtbFJlbGF4TkdEZWZpbmVQdHIgbGlzdCA9IGRlZmluZS0+Y29udGVudDsKICAgICAgICAgICAgICAgICB4bWxDaGFyICpvbGR2YWx1ZSwgKm9sZGVuZCwgKnZhbCwgKmN1cjsKIAotI2lmZGVmIERFQlVHX0xJU1QKLSAgICAgICAgICAgICAgICBpbnQgbmJfdmFsdWVzID0gMDsKLSNlbmRpZgotCiAgICAgICAgICAgICAgICAgb2xkdmFsdWUgPSBjdHh0LT5zdGF0ZS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgb2xkZW5kID0gY3R4dC0+c3RhdGUtPmVuZHZhbHVlOwogCkBAIC04ODcyLDIwICs4NjYwLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChJU19CTEFOS19DSCgqY3VyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgKmN1ciA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXIrKzsKLSNpZmRlZiBERUJVR19MSVNUCi0gICAgICAgICAgICAgICAgICAgICAgICBuYl92YWx1ZXMrKzsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElTX0JMQU5LX0NIKCpjdXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjdXIrKyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgY3VyKys7CiAgICAgICAgICAgICAgICAgfQotI2lmZGVmIERFQlVHX0xJU1QKLSAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgdmFsdWU6ICclcycgZm91bmQgJWQgaXRlbXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZHZhbHVlLCBuYl92YWx1ZXMpOwotICAgICAgICAgICAgICAgIG5iX3ZhbHVlcyA9IDA7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBjdHh0LT5zdGF0ZS0+ZW5kdmFsdWUgPSBjdXI7CiAgICAgICAgICAgICAgICAgY3VyID0gdmFsOwogICAgICAgICAgICAgICAgIHdoaWxlICgoKmN1ciA9PSAwKSAmJiAoY3VyICE9IGN0eHQtPnN0YXRlLT5lbmR2YWx1ZSkpCkBAIC04ODk4LDE2ICs4Njc3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPnN0YXRlLT52YWx1ZSA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIHJldCA9IHhtbFJlbGF4TkdWYWxpZGF0ZVZhbHVlKGN0eHQsIGxpc3QpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKLSNpZmRlZiBERUJVR19MSVNUCi0gICAgICAgICAgICAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHZhbGlkYXRlIHZhbHVlOiAnJXMnIHdpdGggJWQgcnVsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5zdGF0ZS0+dmFsdWUsIG5iX3ZhbHVlcyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUdfTElTVAotICAgICAgICAgICAgICAgICAgICBuYl92YWx1ZXMrKzsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTkxNzEsMTEgKzg5NDIsNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0ID0gLTE7CiAgICAgICAgIH0KLSNpZmRlZiBERUJVRwotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxSZWxheE5HVmFsaWRhdGVBdHRyaWJ1dGUoJXMpOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS0+bmFtZSwgcmV0KTsKLSNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdHh0LT5zdGF0ZS0+bmJBdHRyczsgaSsrKSB7CiAgICAgICAgICAgICB0bXAgPSBjdHh0LT5zdGF0ZS0+YXR0cnNbaV07CkBAIC05MjA4LDE3ICs4OTc0LDYgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldCA9IC0xOwogICAgICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGRlZmluZS0+bnMgIT0gTlVMTCkgewotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFJlbGF4TkdWYWxpZGF0ZUF0dHJpYnV0ZShuc05hbWUgbnMgPSAlcyk6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS0+bnMsIHJldCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sUmVsYXhOR1ZhbGlkYXRlQXR0cmlidXRlKGFueU5hbWUpOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQpOwotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gKHJldCk7CkBAIC05OTAwLDE4ICs5NjU1LDYgQEAKICAgICB9IGVsc2UgewogICAgICAgICBub2RlID0gTlVMTDsKICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4dC0+ZGVwdGg7IGkrKykKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIgIik7Ci0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJTdGFydCB2YWxpZGF0aW5nICVzICIsIHhtbFJlbGF4TkdEZWZOYW1lKGRlZmluZSkpOwotICAgIGlmIChkZWZpbmUtPm5hbWUgIT0gTlVMTCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyAiLCBkZWZpbmUtPm5hbWUpOwotICAgIGlmICgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+bmFtZSAhPSBOVUxMKSkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJvbiAlc1xuIiwgbm9kZS0+bmFtZSk7Ci0gICAgZWxzZQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlxuIik7Ci0jZW5kaWYKICAgICBjdHh0LT5kZXB0aCsrOwogICAgIHN3aXRjaCAoZGVmaW5lLT50eXBlKSB7CiAgICAgICAgIGNhc2UgWE1MX1JFTEFYTkdfRU1QVFk6CkBAIC0xMDAzMCwxMSArOTc3Myw2IEBACiAgICAgICAgICAgICAgICAgY3R4dC0+c3RhdGVzID0gdG1wc3RhdGVzOwogICAgICAgICAgICAgICAgIHhtbFJlbGF4TkdGcmVlVmFsaWRTdGF0ZShjdHh0LCBuc3RhdGUpOwogCi0jaWZkZWYgREVCVUdfQ09NUElMRQotICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsaWRhdGluZyBjb250ZW50IG9mICclcycgOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLT5uYW1lLCB0bXApOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKHRtcCAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsKIApAQCAtMTAxNTIsMjEgKzk4OTAsNiBAQAogICAgICAgICAgICAgICAgICAgICB4bWxSZWxheE5HUG9wRXJyb3JzKGN0eHQsIGVyck5yKTsKICAgICAgICAgICAgIH0KIAotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sUmVsYXhOR1ZhbGlkYXRlRGVmaW5pdGlvbigpOiB2YWxpZGF0ZWQgJXMgOiAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bmFtZSwgcmV0KTsKLSAgICAgICAgICAgIGlmIChvbGRzdGF0ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiOiBubyBzdGF0ZVxuIik7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGRzdGF0ZS0+c2VxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICI6IGRvbmVcbiIpOwotICAgICAgICAgICAgZWxzZSBpZiAob2xkc3RhdGUtPnNlcS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiOiBuZXh0IGVsZW0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZHN0YXRlLT5zZXEtPm5hbWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiOiBuZXh0ICVzICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRzdGF0ZS0+c2VxLT5uYW1lLCBvbGRzdGF0ZS0+c2VxLT50eXBlKTsKLSNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWE1MX1JFTEFYTkdfT1BUSU9OQUw6ewogICAgICAgICAgICAgICAgIGVyck5yID0gY3R4dC0+ZXJyTnI7CkBAIC0xMDYyNSwxOCArMTAzNDgsNiBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGN0eHQtPmRlcHRoLS07Ci0jaWZkZWYgREVCVUcKLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4dC0+ZGVwdGg7IGkrKykKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIgIik7Ci0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICJWYWxpZGF0aW5nICVzICIsIHhtbFJlbGF4TkdEZWZOYW1lKGRlZmluZSkpOwotICAgIGlmIChkZWZpbmUtPm5hbWUgIT0gTlVMTCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlcyAiLCBkZWZpbmUtPm5hbWUpOwotICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJzdWNjZWVkZWRcbiIpOwotICAgIGVsc2UKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJmYWlsZWRcbiIpOwotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC0xMDgzNSwxNCArMTA1NDYsNiBAQAogICAgIH0KICAgICBpZiAocmV0ICE9IDApCiAgICAgICAgIHhtbFJlbGF4TkdEdW1wVmFsaWRFcnJvcihjdHh0KTsKLSNpZmRlZiBERUJVRwotICAgIGVsc2UgaWYgKGN0eHQtPmVyck5yICE9IDApIHsKLSAgICAgICAgY3R4dC0+ZXJyb3IoY3R4dC0+dXNlckRhdGEsCi0gICAgICAgICAgICAgICAgICAgICIlZCBFeHRyYSBlcnJvciBtZXNzYWdlcyBsZWZ0IG9uIHN0YWNrICFcbiIsCi0gICAgICAgICAgICAgICAgICAgIGN0eHQtPmVyck5yKTsKLSAgICAgICAgeG1sUmVsYXhOR0R1bXBWYWxpZEVycm9yKGN0eHQpOwotICAgIH0KLSNlbmRpZgogI2lmZGVmIExJQlhNTF9WQUxJRF9FTkFCTEVECiAgICAgaWYgKGN0eHQtPmlkcmVmID09IDEpIHsKICAgICAgICAgeG1sVmFsaWRDdHh0IHZjdHh0OwpkaWZmIC0tZ2l0IGEvcmVzdWx0L0hUTUwvZG9jMy5odG0gYi9yZXN1bHQvSFRNTC9kb2MzLmh0bQppbmRleCAyY2M2OGI5Li44ZTQ1YTVhIDEwMDY0NAotLS0gYS9yZXN1bHQvSFRNTC9kb2MzLmh0bQorKysgYi9yZXN1bHQvSFRNTC9kb2MzLmh0bQpAQCAtNDcsNyArNDcsNyBAQAogICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMxIj48YSBocmVmPSJodHRwOi8vYnA2LmdhbWVzcXVhZC5uZXQvIj48aW1nIGFsaWduPSJib3R0b20iIGJvcmRlcj0iMCIgaGVpZ2h0PSI3NCIgc3JjPSJkb2MzX2ZpbGVzL2xvZ28uZ2lmIiB3aWR0aD0iMjUyIj48L2E+PC90ZD4NCiAgICAgPHRkIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjMDAwMDAwIj4KIDxpbWcgaGVpZ2h0PSIxNSIgc3JjPSJkb2MzX2ZpbGVzL3NwYWNlci5naWYiIHdpZHRoPSIxNSI+PCEtLSBTVEFSVCBHQU1FU1FVQUQuTkVUIElGUkFNRSBSSUNIIE1FRElBIENPREUgLS0+IDwhLS0gqSAyMDAwIEdhbWVTcXVhZC5uZXQgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+PGlmcmFtZSBib3JkZXI9IjAiIGZyYW1lYm9yZGVyPSJubyIgaGVpZ2h0PSI2MCIgbWFyZ2luaGVpZ2h0PSIwIiBtYXJnaW53aWR0aD0iMCIgc2Nyb2xsaW5nPSJubyIgc3JjPSJkb2MzX2ZpbGVzL2FkY3ljbGUuaHRtIiB3aWR0aD0iNDY4Ij4KLTxhIGhyZWY9Imh0dHA6Ly9hZHMuZ2FtZXNxdWFkLm5ldC9hZGRjbGljay5leGUvYWRjbGljay5jZ2k/UkVHSU9OPWdhbWUlN0N0ZWNoJTdDZW50JmFtcDtpZD0xIiB0YXJnZXQ9Il90b3AiPjxpbWcgc3JjPSJodHRwOi8vYWRzLmdhbWVzcXVhZC5uZXQvYWRkY2xpY2suZXhlL2FkY3ljbGUuY2dpP2dyb3VwPTUyJmFtcDttZWRpYT0xJmFtcDtpZD0xIiB3aWR0aD0iNDY4IiBoZWlnaHQ9IjYwIiBib3JkZXI9IjAiIGFsdD0iR1NOIFJPUyBBZCI+PC9hPgorPGEgaHJlZj0iaHR0cDovL2Fkcy5nYW1lc3F1YWQubmV0L2FkZGNsaWNrLmV4ZS9hZGNsaWNrLmNnaT9SRUdJT049Z2FtZXx0ZWNofGVudCZhbXA7aWQ9MSIgdGFyZ2V0PSJfdG9wIj48aW1nIHNyYz0iaHR0cDovL2Fkcy5nYW1lc3F1YWQubmV0L2FkZGNsaWNrLmV4ZS9hZGN5Y2xlLmNnaT9ncm91cD01MiZhbXA7bWVkaWE9MSZhbXA7aWQ9MSIgd2lkdGg9IjQ2OCIgaGVpZ2h0PSI2MCIgYm9yZGVyPSIwIiBhbHQ9IkdTTiBST1MgQWQiPjwvYT4KIDwvaWZyYW1lPjwhLS0gRU5EIEdBTUVTUVVBRC5ORVQgSUZSQU1FIFJJQ0ggTUVESUEgQ09ERSAtLT48YnI+PGltZyBoZWlnaHQ9IjE1IiBzcmM9ImRvYzNfZmlsZXMvc3BhY2VyLmdpZiIgd2lkdGg9IjQwMCI+IDwvdGQ+CiA8L3RyPg0KICAgPHRyPg0KZGlmZiAtLWdpdCBhL3Jlc3VsdC9IVE1ML25hbWVzLmh0bWwgYi9yZXN1bHQvSFRNTC9uYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkN2RjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvSFRNTC9uYW1lcy5odG1sCkBAIC0wLDAgKzEsNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgorPGh0bWw+Cis8Ym9keT4KKyAgPG86cD48L286cD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9IVE1ML25hbWVzLmh0bWwuZXJyIGIvcmVzdWx0L0hUTUwvbmFtZXMuaHRtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5MWE1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9IVE1ML25hbWVzLmh0bWwuZXJyCkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L0hUTUwvbmFtZXMuaHRtbDozOiBIVE1MIHBhcnNlciBlcnJvciA6IFRhZyBvOnAgaW52YWxpZAorICA8bzpwPjwvbzpwPgorICAgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L0hUTUwvbmFtZXMuaHRtbC5zYXggYi9yZXN1bHQvSFRNTC9uYW1lcy5odG1sLnNheApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmExMDdmCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L0hUTUwvbmFtZXMuaHRtbC5zYXgKQEAgLTAsMCArMSwyMCBAQAorU0FYLnNldERvY3VtZW50TG9jYXRvcigpCitTQVguc3RhcnREb2N1bWVudCgpCitTQVguc3RhcnRFbGVtZW50KGh0bWwpCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5zdGFydEVsZW1lbnQoYm9keSkKK1NBWC5jaGFyYWN0ZXJzKAorICAsIDMpCitTQVguc3RhcnRFbGVtZW50KG86cCkKK1NBWC5lcnJvcjogVGFnIG86cCBpbnZhbGlkCitTQVguZW5kRWxlbWVudChvOnApCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5lbmRFbGVtZW50KGJvZHkpCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5lbmRFbGVtZW50KGh0bWwpCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5lbmREb2N1bWVudCgpCmRpZmYgLS1naXQgYS9yZXN1bHQvSFRNTC91dGY4YnVnLmh0bWwgYi9yZXN1bHQvSFRNTC91dGY4YnVnLmh0bWwKaW5kZXggNjZhNDk4YS4uYjQ5N2FhNiAxMDA2NDQKLS0tIGEvcmVzdWx0L0hUTUwvdXRmOGJ1Zy5odG1sCisrKyBiL3Jlc3VsdC9IVE1ML3V0ZjhidWcuaHRtbApAQCAtNDMsNyArNDMsNyBAQAog2K/Ysdio2KfYsdmHINmF2YYgPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Ikl0ZW0iPgogPGEgaHJlZj0iUlNTMi5hc3AiPgogCi08aW1nIHNyYz0ic2hvd2ltYWdlLmFzcHg/cGF0aD1GaWxlc19VcGxvYWQlNUMxOTIucG5nJmFtcDt3aWR0aD0lJmd0OyIgYm9yZGVyPSIwIj4KKzxpbWcgc3JjPSJzaG93aW1hZ2UuYXNweD9wYXRoPUZpbGVzX1VwbG9hZFwxOTIucG5nJmFtcDt3aWR0aD0lJmd0OyIgYm9yZGVyPSIwIj4KIFJTUyA8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iSXRlbSI+CiA8YSBocmVmPSIiPgogIDwvYT48L3NwYW4+CkBAIC0xMTcsOCArMTE3LDggQEAKIAkJCQogCQkJPGRpdiBjbGFzcz0iSW1hZ2UiPgogCQkJCQotCQkJCTxhIGhyZWY9InNob3dpbWFnZS5hc3B4P3BhdGg9RmlsZXNfVXBsb2FkJTVDMzAyLkpQRyZhbXA7V2lkdGg9IiByZWw9ImxpZ2h0Ym94IiB0aXRsZT0i2LTZh9mK2LEg2KjZhNin2q8iPgotCQkJCTxpbWcgc3JjPSJzaG93aW1hZ2UuYXNweD9wYXRoPUZpbGVzX1VwbG9hZCU1QzMwMi5KUEcmYW1wO1dpZHRoPTIyMCIgYWxpZ249ImxlZnQiIGJvcmRlcj0iMSI+CisJCQkJPGEgaHJlZj0ic2hvd2ltYWdlLmFzcHg/cGF0aD1GaWxlc19VcGxvYWRcMzAyLkpQRyZhbXA7V2lkdGg9IiByZWw9ImxpZ2h0Ym94IiB0aXRsZT0i2LTZh9mK2LEg2KjZhNin2q8iPgorCQkJCTxpbWcgc3JjPSJzaG93aW1hZ2UuYXNweD9wYXRoPUZpbGVzX1VwbG9hZFwzMDIuSlBHJmFtcDtXaWR0aD0yMjAiIGFsaWduPSJsZWZ0IiBib3JkZXI9IjEiPgogCQkJCTwvYT4KIDwvZGl2PgogCQkJPHN0cm9uZz48Zm9udCBzaXplPSI0Ij48Zm9udCBjb2xvcj0iIzAwMDBmZiI+2LnaqdizPC9mb250PiA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+2YXYrdi12YjZhCDZh9mG2LEg24zaqduMINin2LIg2YfZhdqp2KfYsdin2YYg2KfYs9iqLiDYsdmI24wg2KLZhiDaqdmE24zaqSDaqdmG2K8uPC9mb250PjwvZm9udD48L3N0cm9uZz48czE+ICA8L3MxPgpkaWZmIC0tZ2l0IGEvcmVzdWx0L0hUTUwvdXRmOGJ1Zy5odG1sLmVyciBiL3Jlc3VsdC9IVE1ML3V0ZjhidWcuaHRtbC5lcnIKaW5kZXggYTZlZjA0Ny4uYjUxYWE5NSAxMDA2NDQKLS0tIGEvcmVzdWx0L0hUTUwvdXRmOGJ1Zy5odG1sLmVycgorKysgYi9yZXN1bHQvSFRNTC91dGY4YnVnLmh0bWwuZXJyCkBAIC0xMSw1ICsxMSw1IEBACiDYsiDZh9mF2qnYp9ix2KfZhiDYp9iz2KouINix2YjbjCDYotmGINqp2YTbjNqpINqp2YbYry48L0ZPTlQ+PC9GT05UPjwvU1RST05HPjxTMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC4vdGVzdC9IVE1ML3V0ZjhidWcuaHRtbDoxNzc6IEhUTUwgcGFyc2VyIGVycm9yIDogaHRtbFBhcnNlRW50aXR5UmVmOiBleHBlY3RpbmcgJzsnCi2n24zZhiDZvtin2LPYriDYsdinINio2LHYp9uMINmG2YjbjNiz2YbYr9mHINmF2YLYp9mE2Ycg2LHYrNin2YbbjNmI2LIgY29weSZwYXN0ZQor24zZhiDZvtin2LPYriDYsdinINio2LHYp9uMINmG2YjbjNiz2YbYr9mHINmF2YLYp9mE2Ycg2LHYrNin2YbbjNmI2LIgY29weSZwYXN0ZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvSFRNTC93aXJlZC5odG1sIGIvcmVzdWx0L0hUTUwvd2lyZWQuaHRtbAppbmRleCAzZGEzMDNmLi45MTY2MzBkIDEwMDY0NAotLS0gYS9yZXN1bHQvSFRNTC93aXJlZC5odG1sCisrKyBiL3Jlc3VsdC9IVE1ML3dpcmVkLmh0bWwKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgIDx0ZCBiZ2NvbG9yPSIjOTlGRjk5Ij48Zm9udCBzaXplPSIxIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBjb2xvcj0iIzAwMDAwMCI+PGEgaHJlZj0iaHR0cDovL3JlZGlyZWN0LndpcmVkLmNvbS9yZWRpci81MS9odHRwOi8vc3RvY2tzLndpcmVkLmNvbS8iPlRvZGF5J3MgU3VtbWFyeTwvYT48L2ZvbnQ+PC90ZD4KICAgPC90cj4KICAgPHRyPiAKLSAgICA8dGQgYmdjb2xvcj0iI0NDRkZDQyI+PGZvbnQgc2l6ZT0iMSIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIgY29sb3I9IiMwMDAwMDAiPjxhIGhyZWY9Imh0dHA6Ly9yLndpcmVkLmNvbS9yL2hiX2Zpbl9yX3duX3RvcC9odHRwOi8vc3RvY2tzLndpcmVkLmNvbS9zdG9ja3NfaW5kZXhlc19kZXRhaWwuYXNwP1N5bWJvbD0lMjRXSVJFRCI+V2lyZWQgSW5kZXg8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3JlZGlyZWN0LndpcmVkLmNvbS9yZWRpci81Mi9odHRwOi8vc3RvY2tzLndpcmVkLmNvbS9zdG9ja3NfaW5kZXhlcy5hc3AlMjAiPkFsbCBJbmRleGVzPC9hPjwvZm9udD48L3RkPgorICAgIDx0ZCBiZ2NvbG9yPSIjQ0NGRkNDIj48Zm9udCBzaXplPSIxIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBjb2xvcj0iIzAwMDAwMCI+PGEgaHJlZj0iaHR0cDovL3Iud2lyZWQuY29tL3IvaGJfZmluX3Jfd25fdG9wL2h0dHA6Ly9zdG9ja3Mud2lyZWQuY29tL3N0b2Nrc19pbmRleGVzX2RldGFpbC5hc3A/U3ltYm9sPSRXSVJFRCI+V2lyZWQgSW5kZXg8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3JlZGlyZWN0LndpcmVkLmNvbS9yZWRpci81Mi9odHRwOi8vc3RvY2tzLndpcmVkLmNvbS9zdG9ja3NfaW5kZXhlcy5hc3AlMjAiPkFsbCBJbmRleGVzPC9hPjwvZm9udD48L3RkPgogICA8L3RyPgogICA8dHI+IAogICAgIDx0ZCBiZ2NvbG9yPSIjOTlGRjk5Ij48Zm9udCBzaXplPSIxIiBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBjb2xvcj0iIzAwMDAwMCI+PGEgaHJlZj0iaHR0cDovL3JlZGlyZWN0LndpcmVkLmNvbS9yZWRpci81My9odHRwOi8vc3RvY2tzLndpcmVkLmNvbS9zdG9ja3NfcG9ydGZvbGlvcy5hc3AiPlBvcnRmb2xpb3M8L2E+PC9mb250PjwvdGQ+CmRpZmYgLS1naXQgYS9yZXN1bHQvSFRNTC94bWwtZGVjbGFyYXRpb24tMS5odG1sIGIvcmVzdWx0L0hUTUwveG1sLWRlY2xhcmF0aW9uLTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzllYmUzCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L0hUTUwveG1sLWRlY2xhcmF0aW9uLTEuaHRtbApAQCAtMCwwICsxLDQgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KKzw/eG1sIGVuY29kaW5nPSJVVEYtOCI+PGh0bWw+PGJvZHk+Cis8cD4mb3VtbDsmYXVtbDsmdXVtbDsmc3psaWc7PC9wPgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9IVE1ML3htbC1kZWNsYXJhdGlvbi0xLmh0bWwuc2F4IGIvcmVzdWx0L0hUTUwveG1sLWRlY2xhcmF0aW9uLTEuaHRtbC5zYXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmZThlYgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9IVE1ML3htbC1kZWNsYXJhdGlvbi0xLmh0bWwuc2F4CkBAIC0wLDAgKzEsMTMgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLnByb2Nlc3NpbmdJbnN0cnVjdGlvbih4bWwsIGVuY29kaW5nPSJVVEYtOCIpCitTQVguc3RhcnRFbGVtZW50KGh0bWwpCitTQVguc3RhcnRFbGVtZW50KGJvZHkpCitTQVguc3RhcnRFbGVtZW50KHApCitTQVguY2hhcmFjdGVycygmb3VtbDsmYXVtbDsmdXVtbDsmc3psaWc7LCA4KQorU0FYLmVuZEVsZW1lbnQocCkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnQoYm9keSkKK1NBWC5lbmRFbGVtZW50KGh0bWwpCitTQVguZW5kRG9jdW1lbnQoKQpkaWZmIC0tZ2l0IGEvcmVzdWx0L1VSSS9maWxlLnVyaSBiL3Jlc3VsdC9VUkkvZmlsZS51cmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4YjdhNwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9VUkkvZmlsZS51cmkKQEAgLTAsMCArMSBAQAorZmlsZTovLy9mb28udHh0CmRpZmYgLS1naXQgYS9yZXN1bHQvVVJJL3BvcnQudXJpIGIvcmVzdWx0L1VSSS9wb3J0LnVyaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjIyMzIyCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1VSSS9wb3J0LnVyaQpAQCAtMCwwICsxLDIgQEAKK25iZDovLzoxMDg4OAoraHR0cHM6Ly9leGFtcGxlLmNvbToxMjM0NS8KZGlmZiAtLWdpdCBhL3Jlc3VsdC9VUkkvdXJpLmRhdGEgYi9yZXN1bHQvVVJJL3VyaS5kYXRhCmluZGV4IGYyMmI0ZGIuLjkwYzc5MDUgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9VUkkvdXJpLmRhdGEKKysrIGIvcmVzdWx0L1VSSS91cmkuZGF0YQpAQCAtMTYsMyArMTYsNiBAQAogaHR0cDovL2Vsc2V3aGVyZS5jb20vI2RlZXAKIGh0dHA6Ly9lbHNld2hlcmUuY29tLz9kZWVwCiBodHRwOi8vZWxzZXdoZXJlLmNvbS8/ZGVlcCNkZWVwMgoraHR0cDovL2Vsc2V3aGVyZS5jb20vYmFyCitodHRwOi8vZWxzZXdoZXJlLmNvbTo4MDgwL2JhcgoraHR0cDovLzo4MDgwCmRpZmYgLS1naXQgYS9yZXN1bHQvVkMvRWxlbWVudFZhbGlkNS5yZHIgYi9yZXN1bHQvVkMvRWxlbWVudFZhbGlkNS5yZHIKaW5kZXggODk5ZDc1OS4uOTFlZWY5YyAxMDA2NDQKLS0tIGEvcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDUucmRyCisrKyBiL3Jlc3VsdC9WQy9FbGVtZW50VmFsaWQ1LnJkcgpAQCAtNCwzICs0LDYgQEAKIC4vdGVzdC9WQy9FbGVtZW50VmFsaWQ1Ojg6IGVsZW1lbnQgZG9jOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgZG9jIGNvbnRlbnQgZG9lcyBub3QgZm9sbG93IHRoZSBEVEQsIE1pc3BsYWNlZCBiCiAKIF4KKy4vdGVzdC9WQy9FbGVtZW50VmFsaWQ1Ojg6IGVsZW1lbnQgZG9jOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgZG9jIGNvbnRlbnQgZG9lcyBub3QgZm9sbG93IHRoZSBEVEQsIEV4cGVjdGluZyBtb3JlIGNoaWxkcmVuCisKK14KZGlmZiAtLWdpdCBhL3Jlc3VsdC9WQy9FbGVtZW50VmFsaWQ2LnJkciBiL3Jlc3VsdC9WQy9FbGVtZW50VmFsaWQ2LnJkcgppbmRleCBhZWFmZDZiLi4zYjUxZDFhIDEwMDY0NAotLS0gYS9yZXN1bHQvVkMvRWxlbWVudFZhbGlkNi5yZHIKKysrIGIvcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDYucmRyCkBAIC0xLDYgKzEsNiBAQAogLi90ZXN0L1ZDL0VsZW1lbnRWYWxpZDY6NzogZWxlbWVudCBkb2M6IHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCBkb2MgY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgZXhwZWN0aW5nIChhICwgYj8gLCBjKyk/LCBnb3QgKGEgYikKIDxkb2M+PGEvPjxiPmxhY2tzIGM8L2I+PC9kb2M+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9WQy9FbGVtZW50VmFsaWQ2Ojg6IGVsZW1lbnQgZG9jOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgZG9jIGNvbnRlbnQgZG9lcyBub3QgZm9sbG93IHRoZSBEVEQsIEV4cGVjdGluZyBtb3JlIGNoaWxkCisuL3Rlc3QvVkMvRWxlbWVudFZhbGlkNjo4OiBlbGVtZW50IGRvYzogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IGRvYyBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBFeHBlY3RpbmcgbW9yZSBjaGlsZHJlbgogCiBeCmRpZmYgLS1naXQgYS9yZXN1bHQvVkMvRWxlbWVudFZhbGlkNy5yZHIgYi9yZXN1bHQvVkMvRWxlbWVudFZhbGlkNy5yZHIKaW5kZXggZjAwMWZkMi4uZWNhZmQxZCAxMDA2NDQKLS0tIGEvcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDcucmRyCisrKyBiL3Jlc3VsdC9WQy9FbGVtZW50VmFsaWQ3LnJkcgpAQCAtMSw2ICsxLDYgQEAKIC4vdGVzdC9WQy9FbGVtZW50VmFsaWQ3Ojc6IGVsZW1lbnQgZG9jOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgZG9jIGNvbnRlbnQgZG9lcyBub3QgZm9sbG93IHRoZSBEVEQsIGV4cGVjdGluZyAoKGEgfCBiKSogLCBjKyAsIGEgLCBiPyAsIGMgLCBhPyksIGdvdCAoYSBiIGEgYyBjIGEpCiA8ZG9jPjxhLz48Yi8+PGEvPjxjLz48Yy8+PGEvPjwvZG9jPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0uL3Rlc3QvVkMvRWxlbWVudFZhbGlkNzo4OiBlbGVtZW50IGRvYzogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IGRvYyBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBFeHBlY3RpbmcgbW9yZSBjaGlsZAorLi90ZXN0L1ZDL0VsZW1lbnRWYWxpZDc6ODogZWxlbWVudCBkb2M6IHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCBkb2MgY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgRXhwZWN0aW5nIG1vcmUgY2hpbGRyZW4KIAogXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDggYi9yZXN1bHQvVkMvRWxlbWVudFZhbGlkOAppbmRleCBmMWIwZGFkLi43OTYyNjMwIDEwMDY0NAotLS0gYS9yZXN1bHQvVkMvRWxlbWVudFZhbGlkOAorKysgYi9yZXN1bHQvVkMvRWxlbWVudFZhbGlkOApAQCAtMSwzICsxLDMgQEAKLS4vdGVzdC9WQy9FbGVtZW50VmFsaWQ4Ojc6IHZhbGlkaXR5IGVycm9yIDogQ29udGVudCBtb2RlbCBvZiBkb2MgaXMgbm90IGRldGVybWluaXN0OiAoKGEgLCBiKSB8IChhICwgYykpCisuL3Rlc3QvVkMvRWxlbWVudFZhbGlkODo3OiB2YWxpZGl0eSBlcnJvciA6IENvbnRlbnQgbW9kZWwgb2YgZG9jIGlzIG5vdCBkZXRlcm1pbmlzdGljOiAoKGEgLCBiKSB8IChhICwgYykpCiA8ZG9jPjxhLz48Yz4gZG9jIGlzIG5vbi1kZXRlcm1pbmlzdGljIDwvYz48L2RvYz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9WQy9FbGVtZW50VmFsaWQ4LnJkciBiL3Jlc3VsdC9WQy9FbGVtZW50VmFsaWQ4LnJkcgppbmRleCBmMWIwZGFkLi43OTYyNjMwIDEwMDY0NAotLS0gYS9yZXN1bHQvVkMvRWxlbWVudFZhbGlkOC5yZHIKKysrIGIvcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDgucmRyCkBAIC0xLDMgKzEsMyBAQAotLi90ZXN0L1ZDL0VsZW1lbnRWYWxpZDg6NzogdmFsaWRpdHkgZXJyb3IgOiBDb250ZW50IG1vZGVsIG9mIGRvYyBpcyBub3QgZGV0ZXJtaW5pc3Q6ICgoYSAsIGIpIHwgKGEgLCBjKSkKKy4vdGVzdC9WQy9FbGVtZW50VmFsaWQ4Ojc6IHZhbGlkaXR5IGVycm9yIDogQ29udGVudCBtb2RlbCBvZiBkb2MgaXMgbm90IGRldGVybWluaXN0aWM6ICgoYSAsIGIpIHwgKGEgLCBjKSkKIDxkb2M+PGEvPjxjPiBkb2MgaXMgbm9uLWRldGVybWluaXN0aWMgPC9jPjwvZG9jPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1ZDL1BFTmVzdGluZyBiL3Jlc3VsdC9WQy9QRU5lc3RpbmcKaW5kZXggOTY2Njg5YS4uNzA1ZTI0YyAxMDA2NDQKLS0tIGEvcmVzdWx0L1ZDL1BFTmVzdGluZworKysgYi9yZXN1bHQvVkMvUEVOZXN0aW5nCkBAIC0xLDYgKzEsMyBAQAogLi90ZXN0L1ZDL1BFTmVzdGluZzoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydFRhZzogaW52YWxpZCBlbGVtZW50IG5hbWUKIDwhRU5USVRZICUgcGUxICJFTVBUWT4gPCFFTEVNRU5UIGUyIEVNUFRZPiI+IAogIF4KLS4vdGVzdC9WQy9QRU5lc3Rpbmc6MTogcGFyc2VyIGVycm9yIDogRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAotPCFFTlRJVFkgJSBwZTEgIkVNUFRZPiA8IUVMRU1FTlQgZTIgRU1QVFk+Ij4gCi0gXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1ZDL1BFTmVzdGluZzIgYi9yZXN1bHQvVkMvUEVOZXN0aW5nMgppbmRleCBjNTNlYWQ2Li5mMTM4ODI3IDEwMDY0NAotLS0gYS9yZXN1bHQvVkMvUEVOZXN0aW5nMgorKysgYi9yZXN1bHQvVkMvUEVOZXN0aW5nMgpAQCAtMSw2ICsxLDMgQEAKIC4vdGVzdC9WQy9QRU5lc3RpbmcyOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQogPCFFTlRJVFkgJSBwMSAiKEF8QiI+CiAgXgotLi90ZXN0L1ZDL1BFTmVzdGluZzI6MTogcGFyc2VyIGVycm9yIDogRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAotPCFFTlRJVFkgJSBwMSAiKEF8QiI+Ci0gXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrLnhtbC5lcnIgYi9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2sueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGI1Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrLnhtbC5lcnIKQEAgLTAsMCArMSBAQAorSS9PIHdhcm5pbmcgOiBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBlbnRpdHkgInRlc3QvWEluY2x1ZGUvZG9jcy9zb21ldGhpbmcueG1sIgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrMi54bWwuZXJyIGIvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrMi54bWwuZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzVhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2syLnhtbC5lcnIKQEAgLTAsMCArMSwyIEBACitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2IueG1sIgorSS9PIHdhcm5pbmcgOiBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBlbnRpdHkgInRlc3QvWEluY2x1ZGUvZG9jcy9jLnhtbCIKZGlmZiAtLWdpdCBhL3Jlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazQueG1sLmVyciBiL3Jlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazQueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODYxYmJhCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrNC54bWwuZXJyCkBAIC0wLDAgKzEgQEAKK0kvTyB3YXJuaW5nIDogZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZW50aXR5ICJ0ZXN0L1hJbmNsdWRlL2RvY3MvYy54bWwiCmRpZmYgLS1naXQgYS9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2s1LnhtbC5lcnIgYi9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2s1LnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkZDE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazUueG1sLmVycgpAQCAtMCwwICsxLDE2IEBACitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwMS54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwMi54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwMy54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwNC54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwNS54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwNi54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwNy54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwOC54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2EwOS54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExMC54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExMS54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExMi54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExMy54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExNC54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExNS54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2ExNi54bWwiCmRpZmYgLS1naXQgYS9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2s2LnhtbC5lcnIgYi9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2s2LnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzNWEyYgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazYueG1sLmVycgpAQCAtMCwwICsxLDIgQEAKK0kvTyB3YXJuaW5nIDogZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZW50aXR5ICJ0ZXN0L1hJbmNsdWRlL2RvY3MvYi54bWwiCitJL08gd2FybmluZyA6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGVzdC9YSW5jbHVkZS9kb2NzL2MueG1sIgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrNy54bWwgYi9yZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2s3LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQzNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrNy54bWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgICAgPGE+dGV4dDwvYT4KKyAgICA8Yj4KKyAgICAgICAgICAgICAgICA8YT50ZXh0PC9hPgorICAgICAgICAgICAgPC9iPgorICAgIAorICAgICAgICAgICAgPGI+CisgICAgICAgICAgICAgICAgPGE+dGV4dDwvYT4KKyAgICAgICAgICAgIDwvYj4KKyAgICAgICAgCisgICAgPGI+CisgICAgICAgICAgICAgICAgPGE+dGV4dDwvYT4KKyAgICAgICAgICAgIDwvYj4KKzwveD4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazcueG1sLmVyciBiL3Jlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazcueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhhNzNhCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL2ZhbGxiYWNrNy54bWwuZXJyCkBAIC0wLDAgKzEgQEAKK0kvTyB3YXJuaW5nIDogZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZW50aXR5ICJ0ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyLzQwNC54bWwiCmRpZmYgLS1naXQgYS9yZXN1bHQvWEluY2x1ZGUvaW52YWxpZF9jaGFyLnhtbC5lcnIgYi9yZXN1bHQvWEluY2x1ZGUvaW52YWxpZF9jaGFyLnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4YzEwOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9YSW5jbHVkZS9pbnZhbGlkX2NoYXIueG1sLmVycgpAQCAtMCwwICsxLDIgQEAKKy4vdGVzdC9YSW5jbHVkZS9kb2NzL2ludmFsaWRfY2hhci54bWw6MjogZWxlbWVudCBpbmNsdWRlOiBYSW5jbHVkZSBlcnJvciA6IHRlc3QvWEluY2x1ZGUvZW50cy9pbnZhbGlkX2NoYXIudHh0IGNvbnRhaW5zIGludmFsaWQgY2hhcgorLi90ZXN0L1hJbmNsdWRlL2RvY3MvaW52YWxpZF9jaGFyLnhtbDoyOiBlbGVtZW50IGluY2x1ZGU6IFhJbmNsdWRlIGVycm9yIDogY291bGQgbm90IGxvYWQgdGVzdC9YSW5jbHVkZS9lbnRzL2ludmFsaWRfY2hhci50eHQsIGFuZCBubyBmYWxsYmFjayB3YXMgZm91bmQKZGlmZiAtLWdpdCBhL3Jlc3VsdC9YSW5jbHVkZS9pbnZhbGlkX2NoYXIueG1sLnJkciBiL3Jlc3VsdC9YSW5jbHVkZS9pbnZhbGlkX2NoYXIueG1sLnJkcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmI1Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL2ludmFsaWRfY2hhci54bWwucmRyCkBAIC0wLDAgKzEsNyBAQAorMCAxIHggMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgIAorMSAxIHhpbmNsdWRlOmluY2x1ZGUgMSAwCisxIDE0ICN0ZXh0IDAgMSAKKworMCAxNSB4IDAgMApkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL2lzc3VlNDI0LTEueG1sIGIvcmVzdWx0L1hJbmNsdWRlL2lzc3VlNDI0LTEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODdiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvWEluY2x1ZGUvaXNzdWU0MjQtMS54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4IHhtbG5zOnhpbmNsdWRlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgIDxwPlNvbWV0aGluZzwvcD4KKyAgIDxkPjxwPlNvbWV0aGluZzwvcD48L2Q+CisgICA8ZD48cD5Tb21ldGhpbmc8L3A+PC9kPgorPC94PgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL2lzc3VlNDI0LTIueG1sIGIvcmVzdWx0L1hJbmNsdWRlL2lzc3VlNDI0LTIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODdiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvWEluY2x1ZGUvaXNzdWU0MjQtMi54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4IHhtbG5zOnhpbmNsdWRlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgIDxwPlNvbWV0aGluZzwvcD4KKyAgIDxkPjxwPlNvbWV0aGluZzwvcD48L2Q+CisgICA8ZD48cD5Tb21ldGhpbmc8L3A+PC9kPgorPC94PgpkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL2xvb3AueG1sLmVyciBiL3Jlc3VsdC9YSW5jbHVkZS9sb29wLnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4NTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9YSW5jbHVkZS9sb29wLnhtbC5lcnIKQEAgLTAsMCArMSBAQAorLi90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL2xvb3AueG1sOjI6IGVsZW1lbnQgaW5jbHVkZTogWEluY2x1ZGUgZXJyb3IgOiBpbmNsdXNpb24gbG9vcCBkZXRlY3RlZApkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL21heC1yZWN1cnNlLnhtbC5lcnIgYi9yZXN1bHQvWEluY2x1ZGUvbWF4LXJlY3Vyc2UueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZmNzJhCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL21heC1yZWN1cnNlLnhtbC5lcnIKQEAgLTAsMCArMSBAQAorLi90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL21heC1yZWN1cnNlLnhtbDo0MjogZWxlbWVudCBpbmNsdWRlOiBYSW5jbHVkZSBlcnJvciA6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkCmRpZmYgLS1naXQgYS9yZXN1bHQvWEluY2x1ZGUvbm9kZXMzLnhtbCBiL3Jlc3VsdC9YSW5jbHVkZS9ub2RlczMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWIyMDQ0Li4wMDAwMDAwCi0tLSBhL3Jlc3VsdC9YSW5jbHVkZS9ub2RlczMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4IHhtbG5zOnhpbmNsdWRlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIj4KLSAgIDwhLS0gU2ltcGxlIHRlc3Qgb2YgaW5jbHVkaW5nIGEgc2V0IG9mIG5vZGVzIGZyb20gYW4gWE1MIGRvY3VtZW50IC0tPgotICAgPHhpbmNsdWRlOmluY2x1ZGUgaHJlZj0iLi4vZW50cy9zb21ldGhpbmcueG1sI3hwb2ludGVyKC8vcCkiLz4KLTwveD4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9YSW5jbHVkZS9ub2RlczMueG1sLmVyciBiL3Jlc3VsdC9YSW5jbHVkZS9ub2RlczMueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjExNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L1hJbmNsdWRlL25vZGVzMy54bWwuZXJyCkBAIC0wLDAgKzEgQEAKKy4vdGVzdC9YSW5jbHVkZS9kb2NzL25vZGVzMy54bWw6MzogZWxlbWVudCBpbmNsdWRlOiBYSW5jbHVkZSBlcnJvciA6IEludmFsaWQgZnJhZ21lbnQgaWRlbnRpZmllciBpbiBVUkkgdGVzdC9YSW5jbHVkZS9lbnRzL3NvbWV0aGluZy54bWwjeHBvaW50ZXIoLy9wKSB1c2UgdGhlIHhwb2ludGVyIGF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L1hJbmNsdWRlL25zMS54bWwuZXJyIGIvcmVzdWx0L1hJbmNsdWRlL25zMS54bWwuZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNWZmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvWEluY2x1ZGUvbnMxLnhtbC5lcnIKQEAgLTAsMCArMSBAQAorSS9PIHdhcm5pbmcgOiBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBlbnRpdHkgInRlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvYi54bWwiCmRpZmYgLS1naXQgYS9yZXN1bHQvWEluY2x1ZGUvbnMxLnhtbC5yZHIgYi9yZXN1bHQvWEluY2x1ZGUvbnMxLnhtbC5yZHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhM2E1ZTcuLjAwMDAwMDAKLS0tIGEvcmVzdWx0L1hJbmNsdWRlL25zMS54bWwucmRyCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotMCAxIGRvYyAwIDAKLTEgMTQgI3RleHQgMCAxIAotICAgIAotMSAxIHhpOmluY2x1ZGUgMSAwCi0xIDE0ICN0ZXh0IDAgMSAKLSAgICAKLTEgMSBlbGVtIDAgMAotMiAxNCAjdGV4dCAwIDEgCi0gICAgICAgIAotMiAxIG5zOmVsZW0gMSAwCi0yIDE0ICN0ZXh0IDAgMSAKLSAgICAKLTEgMTUgZWxlbSAwIDAKLTEgMTQgI3RleHQgMCAxIAotICAgIAotMSAxNCAjdGV4dCAwIDEgCi0gICAgICAgICAgICAKLTEgMSBuczplbGVtIDEgMAotMSAxNCAjdGV4dCAwIDEgCi0gICAgICAgIAotMSAxNCAjdGV4dCAwIDEgCi0KLTAgMTUgZG9jIDAgMApkaWZmIC0tZ2l0IGEvcmVzdWx0L1hQYXRoL2V4cHIvZnVuY3Rpb25zIGIvcmVzdWx0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCmluZGV4IGUwOWViNGEuLjRmZjljNTggMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9YUGF0aC9leHByL2Z1bmN0aW9ucworKysgYi9yZXN1bHQvWFBhdGgvZXhwci9mdW5jdGlvbnMKQEAgLTIwLDYgKzIwLDEwIEBACiBPYmplY3QgaXMgYSBudW1iZXIgOiBOYU4KIAogPT09PT09PT09PT09PT09PT09PT09PT09CitFeHByZXNzaW9uOiBudW1iZXIoJy0nKQorT2JqZWN0IGlzIGEgbnVtYmVyIDogTmFOCisKKz09PT09PT09PT09PT09PT09PT09PT09PQogRXhwcmVzc2lvbjogZmxvb3IoMC4xKQogT2JqZWN0IGlzIGEgbnVtYmVyIDogMAogCmRpZmYgLS1naXQgYS9yZXN1bHQvYm91bmRhcmllczEueG1sIGIvcmVzdWx0L2JvdW5kYXJpZXMxLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE4NDhmCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2JvdW5kYXJpZXMxLnhtbApAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBkIFsKKzwhRU5USVRZIGEgIl0+Ij4KKzwhRU5USVRZIGIgIl0+Ij4KKzwhLS0+IF0+IC0tPl0+Cis8P3BpIHAxPz4KKzwhLS0+IGMxIC0tPgorPGQgYT0iJmd0OyIgYj0iJmd0OyI+Cit0ZXh0JmE7dGV4dAorPCFbQ0RBVEFbY2RhdGFdXT4KKzw/cGkgcDI/PgorPCEtLT4gYzIgLS0+Cis8L2Q+Cis8P3BpIHAzPz4KKzwhLS0+IGMzIC0tPgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2JvdW5kYXJpZXMxLnhtbC5yZGUgYi9yZXN1bHQvYm91bmRhcmllczEueG1sLnJkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNiNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2JvdW5kYXJpZXMxLnhtbC5yZGUKQEAgLTAsMCArMSwxOSBAQAorMCAxMCBkIDAgMAorMCA3IHBpIDAgMSBwMQorMCA4ICNjb21tZW50IDAgMSA+IGMxIAorMCAxIGQgMCAwCisxIDMgI3RleHQgMCAxIAordGV4dF0+dGV4dAorCisxIDQgI2NkYXRhLXNlY3Rpb24gMCAxIGNkYXRhCisxIDE0ICN0ZXh0IDAgMSAKKworMSA3IHBpIDAgMSBwMgorMSAxNCAjdGV4dCAwIDEgCisKKzEgOCAjY29tbWVudCAwIDEgPiBjMiAKKzEgMTQgI3RleHQgMCAxIAorCiswIDE1IGQgMCAwCiswIDcgcGkgMCAxIHAzCiswIDggI2NvbW1lbnQgMCAxID4gYzMgCmRpZmYgLS1naXQgYS9yZXN1bHQvYm91bmRhcmllczEueG1sLnJkciBiL3Jlc3VsdC9ib3VuZGFyaWVzMS54bWwucmRyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGVjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvYm91bmRhcmllczEueG1sLnJkcgpAQCAtMCwwICsxLDIxIEBACiswIDEwIGQgMCAwCiswIDcgcGkgMCAxIHAxCiswIDggI2NvbW1lbnQgMCAxID4gYzEgCiswIDEgZCAwIDAKKzEgMyAjdGV4dCAwIDEgCit0ZXh0CisxIDUgYSAwIDAKKzEgMyAjdGV4dCAwIDEgdGV4dAorCisxIDQgI2NkYXRhLXNlY3Rpb24gMCAxIGNkYXRhCisxIDE0ICN0ZXh0IDAgMSAKKworMSA3IHBpIDAgMSBwMgorMSAxNCAjdGV4dCAwIDEgCisKKzEgOCAjY29tbWVudCAwIDEgPiBjMiAKKzEgMTQgI3RleHQgMCAxIAorCiswIDE1IGQgMCAwCiswIDcgcGkgMCAxIHAzCiswIDggI2NvbW1lbnQgMCAxID4gYzMgCmRpZmYgLS1naXQgYS9yZXN1bHQvYm91bmRhcmllczEueG1sLnNheCBiL3Jlc3VsdC9ib3VuZGFyaWVzMS54bWwuc2F4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTMxODEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvYm91bmRhcmllczEueG1sLnNheApAQCAtMCwwICsxLDMyIEBACitTQVguc2V0RG9jdW1lbnRMb2NhdG9yKCkKK1NBWC5zdGFydERvY3VtZW50KCkKK1NBWC5pbnRlcm5hbFN1YnNldChkLCAsICkKK1NBWC5lbnRpdHlEZWNsKGEsIDEsIChudWxsKSwgKG51bGwpLCBdPikKK1NBWC5nZXRFbnRpdHkoYSkKK1NBWC5lbnRpdHlEZWNsKGIsIDEsIChudWxsKSwgKG51bGwpLCBdPikKK1NBWC5nZXRFbnRpdHkoYikKK1NBWC5jb21tZW50KD4gXT4gKQorU0FYLmV4dGVybmFsU3Vic2V0KGQsICwgKQorU0FYLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihwaSwgcDEpCitTQVguY29tbWVudCg+IGMxICkKK1NBWC5zdGFydEVsZW1lbnQoZCwgYT0nPicsIGI9Jz4nKQorU0FYLmNoYXJhY3RlcnMoCit0ZXh0LCA1KQorU0FYLmdldEVudGl0eShhKQorU0FYLmNoYXJhY3RlcnMoXT4sIDIpCitTQVgucmVmZXJlbmNlKGEpCitTQVguY2hhcmFjdGVycyh0ZXh0CissIDUpCitTQVgucGNkYXRhKGNkYXRhLCA1KQorU0FYLmNoYXJhY3RlcnMoCissIDEpCitTQVgucHJvY2Vzc2luZ0luc3RydWN0aW9uKHBpLCBwMikKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmNvbW1lbnQoPiBjMiApCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5lbmRFbGVtZW50KGQpCitTQVgucHJvY2Vzc2luZ0luc3RydWN0aW9uKHBpLCBwMykKK1NBWC5jb21tZW50KD4gYzMgKQorU0FYLmVuZERvY3VtZW50KCkKZGlmZiAtLWdpdCBhL3Jlc3VsdC9ib3VuZGFyaWVzMS54bWwuc2F4MiBiL3Jlc3VsdC9ib3VuZGFyaWVzMS54bWwuc2F4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FkNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2JvdW5kYXJpZXMxLnhtbC5zYXgyCkBAIC0wLDAgKzEsMzMgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLmludGVybmFsU3Vic2V0KGQsICwgKQorU0FYLmVudGl0eURlY2woYSwgMSwgKG51bGwpLCAobnVsbCksIF0+KQorU0FYLmdldEVudGl0eShhKQorU0FYLmVudGl0eURlY2woYiwgMSwgKG51bGwpLCAobnVsbCksIF0+KQorU0FYLmdldEVudGl0eShiKQorU0FYLmNvbW1lbnQoPiBdPiApCitTQVguZXh0ZXJuYWxTdWJzZXQoZCwgLCApCitTQVgucHJvY2Vzc2luZ0luc3RydWN0aW9uKHBpLCBwMSkKK1NBWC5jb21tZW50KD4gYzEgKQorU0FYLnN0YXJ0RWxlbWVudE5zKGQsIE5VTEwsIE5VTEwsIDAsIDIsIDAsIGE9Jz4iIGIuLi4nLCAxLCBiPSc+Jz4KKy4uLicsIDEpCitTQVguY2hhcmFjdGVycygKK3RleHQsIDUpCitTQVguZ2V0RW50aXR5KGEpCitTQVguY2hhcmFjdGVycyhdPiwgMikKK1NBWC5yZWZlcmVuY2UoYSkKK1NBWC5jaGFyYWN0ZXJzKHRleHQKKywgNSkKK1NBWC5wY2RhdGEoY2RhdGEsIDUpCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGksIHAyKQorU0FYLmNoYXJhY3RlcnMoCissIDEpCitTQVguY29tbWVudCg+IGMyICkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnROcyhkLCBOVUxMLCBOVUxMKQorU0FYLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihwaSwgcDMpCitTQVguY29tbWVudCg+IGMzICkKK1NBWC5lbmREb2N1bWVudCgpCmRpZmYgLS1naXQgYS9yZXN1bHQvZW50Mi5zYXggYi9yZXN1bHQvZW50Mi5zYXgKaW5kZXggMDdkMmNlNC4uNDZkYTZmZCAxMDA2NDQKLS0tIGEvcmVzdWx0L2VudDIuc2F4CisrKyBiL3Jlc3VsdC9lbnQyLnNheApAQCAtMTAsNyArMTAsNiBAQAogU0FYLmNoYXJhY3RlcnMoCiAgICwgMykKIFNBWC5nZXRFbnRpdHkodGl0bGUpCi1TQVguZXJyb3I6IEVudGl0eSAndGl0bGUnIG5vdCBkZWZpbmVkCiBTQVgucmVmZXJlbmNlKHRpdGxlKQogU0FYLmNoYXJhY3RlcnMoCiAgIFRoaXMgdGV4dCBpcyBhYm91dCBYTUwsIHRoZSwgMzEpCmRpZmYgLS1naXQgYS9yZXN1bHQvZW50Mi5zYXgyIGIvcmVzdWx0L2VudDIuc2F4MgppbmRleCBkN2M4MDAyLi42Mjc1ZGU0IDEwMDY0NAotLS0gYS9yZXN1bHQvZW50Mi5zYXgyCisrKyBiL3Jlc3VsdC9lbnQyLnNheDIKQEAgLTEwLDcgKzEwLDYgQEAKIFNBWC5jaGFyYWN0ZXJzKAogICAsIDMpCiBTQVguZ2V0RW50aXR5KHRpdGxlKQotU0FYLmVycm9yOiBFbnRpdHkgJ3RpdGxlJyBub3QgZGVmaW5lZAogU0FYLnJlZmVyZW5jZSh0aXRsZSkKIFNBWC5jaGFyYWN0ZXJzKAogICBUaGlzIHRleHQgaXMgYWJvdXQgWE1MLCB0aGUsIDMxKQpkaWZmIC0tZ2l0IGEvcmVzdWx0L2VudDcuc2F4IGIvcmVzdWx0L2VudDcuc2F4CmluZGV4IDMyMjhkZTMuLjdhMjk4ZDcgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lbnQ3LnNheAorKysgYi9yZXN1bHQvZW50Ny5zYXgKQEAgLTcsMTEgKzcsMTYgQEAKIFNBWC5lbnRpdHlEZWNsKHNhbXBsZUVudCwgMSwgKG51bGwpLCAobnVsbCksIHRoZSBoeWFjaW50aCBnaXJsKQogU0FYLmdldEVudGl0eShzYW1wbGVFbnQpCiBTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHNhbXBsZUVudCkKLVNBWC5lcnJvcjogUEVSZWZlcmVuY2U6ICVzYW1wbGVFbnQ7IG5vdCBmb3VuZAorU0FYLmVsZW1lbnREZWNsKGl0ZW0sIDQsIC4uLikKK1NBWC5lbGVtZW50RGVjbChwYXJhLCAzLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoaXRlbSwgLCApCitTQVguc3RhcnRFbGVtZW50KGl0ZW0pCitTQVguc3RhcnRFbGVtZW50KHBhcmEpCiBTQVguY2hhcmFjdGVycygndGhleSBjYWxsZWQgbWUgLCAxNikKIFNBWC5nZXRFbnRpdHkoc2FtcGxlRW50KQotU0FYLmVycm9yOiBFbnRpdHkgJ3NhbXBsZUVudCcgbm90IGRlZmluZWQKK1NBWC5jaGFyYWN0ZXJzKHRoZSBoeWFjaW50aCBnaXJsLCAxNykKIFNBWC5yZWZlcmVuY2Uoc2FtcGxlRW50KQogU0FYLmNoYXJhY3RlcnMoJywgMSkKK1NBWC5lbmRFbGVtZW50KHBhcmEpCitTQVguZW5kRWxlbWVudChpdGVtKQogU0FYLmVuZERvY3VtZW50KCkKLXhtbFNBWFVzZXJQYXJzZUZpbGUgcmV0dXJuZWQgZXJyb3IgMjcKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lbnQ3LnNheDIgYi9yZXN1bHQvZW50Ny5zYXgyCmluZGV4IDMyMjhkZTMuLjJhNTMxOTggMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lbnQ3LnNheDIKKysrIGIvcmVzdWx0L2VudDcuc2F4MgpAQCAtNywxMSArNywxNiBAQAogU0FYLmVudGl0eURlY2woc2FtcGxlRW50LCAxLCAobnVsbCksIChudWxsKSwgdGhlIGh5YWNpbnRoIGdpcmwpCiBTQVguZ2V0RW50aXR5KHNhbXBsZUVudCkKIFNBWC5nZXRQYXJhbWV0ZXJFbnRpdHkoc2FtcGxlRW50KQotU0FYLmVycm9yOiBQRVJlZmVyZW5jZTogJXNhbXBsZUVudDsgbm90IGZvdW5kCitTQVguZWxlbWVudERlY2woaXRlbSwgNCwgLi4uKQorU0FYLmVsZW1lbnREZWNsKHBhcmEsIDMsIC4uLikKK1NBWC5leHRlcm5hbFN1YnNldChpdGVtLCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyhpdGVtLCBOVUxMLCBOVUxMLCAwLCAwLCAwKQorU0FYLnN0YXJ0RWxlbWVudE5zKHBhcmEsIE5VTEwsIE5VTEwsIDAsIDAsIDApCiBTQVguY2hhcmFjdGVycygndGhleSBjYWxsZWQgbWUgLCAxNikKIFNBWC5nZXRFbnRpdHkoc2FtcGxlRW50KQotU0FYLmVycm9yOiBFbnRpdHkgJ3NhbXBsZUVudCcgbm90IGRlZmluZWQKK1NBWC5jaGFyYWN0ZXJzKHRoZSBoeWFjaW50aCBnaXJsLCAxNykKIFNBWC5yZWZlcmVuY2Uoc2FtcGxlRW50KQogU0FYLmNoYXJhY3RlcnMoJywgMSkKK1NBWC5lbmRFbGVtZW50TnMocGFyYSwgTlVMTCwgTlVMTCkKK1NBWC5lbmRFbGVtZW50TnMoaXRlbSwgTlVMTCwgTlVMTCkKIFNBWC5lbmREb2N1bWVudCgpCi14bWxTQVhVc2VyUGFyc2VGaWxlIHJldHVybmVkIGVycm9yIDI3CmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzLzc1NDk0Ni54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy83NTQ5NDYueG1sLmVudAppbmRleCBiZTc3NzgxLi43ZGMwYmIwIDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzLzc1NDk0Ni54bWwuZW50CisrKyBiL3Jlc3VsdC9lcnJvcnMvNzU0OTQ2LnhtbC5lbnQKQEAgLTUsMTYgKzUsMyBAQAogRW50aXR5OiBsaW5lIDE6IAogQTxsYmJiYmJiYmJiYmJiYmJiYmJiYl8KIF4KLS4vdGVzdC9lcnJvcnMvNzU0OTQ2LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLSAgPCFbCi0gIF4KLS4vdGVzdC9lcnJvcnMvNzU0OTQ2LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBET0NUWVBFIGltcHJvcGVybHkgdGVybWluYXRlZAotICA8IVsKLSAgXgotLi90ZXN0L2Vycm9ycy83NTQ5NDYueG1sOjQ6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQotICA8IVsKLSAgIF4KLS4vdGVzdC9lcnJvcnMvNzU0OTQ2LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Ci0gIDwhWwotICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy83NTQ5NDYueG1sLmVyciBiL3Jlc3VsdC9lcnJvcnMvNzU0OTQ2LnhtbC5lcnIKaW5kZXggYmU3Nzc4MS4uN2RjMGJiMCAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy83NTQ5NDYueG1sLmVycgorKysgYi9yZXN1bHQvZXJyb3JzLzc1NDk0Ni54bWwuZXJyCkBAIC01LDE2ICs1LDMgQEAKIEVudGl0eTogbGluZSAxOiAKIEE8bGJiYmJiYmJiYmJiYmJiYmJiYmJfCiBeCi0uL3Rlc3QvZXJyb3JzLzc1NDk0Ni54bWw6NDogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0gIDwhWwotICBeCi0uL3Rlc3QvZXJyb3JzLzc1NDk0Ni54bWw6NDogcGFyc2VyIGVycm9yIDogRE9DVFlQRSBpbXByb3Blcmx5IHRlcm1pbmF0ZWQKLSAgPCFbCi0gIF4KLS4vdGVzdC9lcnJvcnMvNzU0OTQ2LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBTdGFydFRhZzogaW52YWxpZCBlbGVtZW50IG5hbWUKLSAgPCFbCi0gICBeCi0uL3Rlc3QvZXJyb3JzLzc1NDk0Ni54bWw6NDogcGFyc2VyIGVycm9yIDogRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAotICA8IVsKLSAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU0OTQ2LnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzLzc1NDk0Ni54bWwuc3RyCmluZGV4IDQ5Mzk1YjYuLjVkNmE4YjIgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU0OTQ2LnhtbC5zdHIKKysrIGIvcmVzdWx0L2Vycm9ycy83NTQ5NDYueG1sLnN0cgpAQCAtMSw0ICsxLDggQEAKLS4vdGVzdC9lcnJvcnMvNzU0OTQ2LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Ci08IURPQ1RZUEUgQSBbCi0gICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzLzc1NDk0Ni54bWw6MzogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgorCisgICVTWVNURU07CisgICAgICAgICAgXgorRW50aXR5OiBsaW5lIDE6IAorQTxsYmJiYmJiYmJiYmJiYmJiYmJiYl8KK14KIC4vdGVzdC9lcnJvcnMvNzU0OTQ2LnhtbCA6IGZhaWxlZCB0byBwYXJzZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy83NTQ5NDcueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvNzU0OTQ3LnhtbC5lbnQKaW5kZXggZjQ1Y2I1YS4uMzcyMjQ4YiAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy83NTQ5NDcueG1sLmVudAorKysgYi9yZXN1bHQvZXJyb3JzLzc1NDk0Ny54bWwuZW50CkBAIC0xLDcgKzEsNCBAQAogLi90ZXN0L2Vycm9ycy83NTQ5NDcueG1sOjE6IHBhcnNlciBlcnJvciA6IElucHV0IGlzIG5vdCBwcm9wZXIgVVRGLTgsIGluZGljYXRlIGVuY29kaW5nICEKIEJ5dGVzOiAweEVFIDB4NUQgMHg1RCAweDNFCi08ZD48IVtDREFUQVswMDAwMDAwMDAwMDAw7l1dPgorPGQ+PCFbQ0RBVEFbMDAwMDAwMDAwMDAwMAogICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9lcnJvcnMvNzU0OTQ3LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnIGQgbGluZSAxCi08ZD48IVtDREFUQVswMDAwMDAwMDAwMDAw7l1dPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzLzc1NDk0Ny54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy83NTQ5NDcueG1sLmVycgppbmRleCBmNDVjYjVhLi4zNzIyNDhiIDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzLzc1NDk0Ny54bWwuZXJyCisrKyBiL3Jlc3VsdC9lcnJvcnMvNzU0OTQ3LnhtbC5lcnIKQEAgLTEsNyArMSw0IEBACiAuL3Rlc3QvZXJyb3JzLzc1NDk0Ny54bWw6MTogcGFyc2VyIGVycm9yIDogSW5wdXQgaXMgbm90IHByb3BlciBVVEYtOCwgaW5kaWNhdGUgZW5jb2RpbmcgIQogQnl0ZXM6IDB4RUUgMHg1RCAweDVEIDB4M0UKLTxkPjwhW0NEQVRBWzAwMDAwMDAwMDAwMDDuXV0+Cis8ZD48IVtDREFUQVswMDAwMDAwMDAwMDAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy83NTQ5NDcueG1sOjE6IHBhcnNlciBlcnJvciA6IFByZW1hdHVyZSBlbmQgb2YgZGF0YSBpbiB0YWcgZCBsaW5lIDEKLTxkPjwhW0NEQVRBWzAwMDAwMDAwMDAwMDDuXV0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU0OTQ3LnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzLzc1NDk0Ny54bWwuc3RyCmluZGV4IDRkMmY1MmUuLmQyNDgzMjMgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU0OTQ3LnhtbC5zdHIKKysrIGIvcmVzdWx0L2Vycm9ycy83NTQ5NDcueG1sLnN0cgpAQCAtMSw1ICsxLDUgQEAKIC4vdGVzdC9lcnJvcnMvNzU0OTQ3LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhCiBCeXRlczogMHhFRSAweDVEIDB4NUQgMHgzRQotPGQ+PCFbQ0RBVEFbMDAwMDAwMDAwMDAwMO5dXT4KKzxkPjwhW0NEQVRBWzAwMDAwMDAwMDAwMDAKICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAuL3Rlc3QvZXJyb3JzLzc1NDk0Ny54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5Mzk4LnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzLzc1OTM5OC54bWwuZW50CmluZGV4IGY2MDM2YTMuLmMzZjRkZjQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5Mzk4LnhtbC5lbnQKKysrIGIvcmVzdWx0L2Vycm9ycy83NTkzOTgueG1sLmVudApAQCAtNyw2ICs3LDMgQEAKIC4vdGVzdC9lcnJvcnMvNzU5Mzk4LnhtbDozMTQ6IHBhcnNlciBlcnJvciA6IE9wZW5pbmcgYW5kIGVuZGluZyB0YWcgbWlzbWF0Y2g6IHNwZWMgbGluZSA1MCBhbmQgcAogZGF0YSBhbmQgdGhlIGluZm9ybWF0aW9uIGl0IG11c3QgcHJvdmlkZSB0byB0aGUgYXBwbGljYXRpb24uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9lcnJvcnMvNzU5Mzk4LnhtbDozMTY6IHBhcnNlciBlcnJvciA6IEV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKLTxkaXYyIGlkPSdzZWMtb3JpZ2luLWdvYWxzJz4KLV4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5Mzk4LnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzLzc1OTM5OC54bWwuZXJyCmluZGV4IGY2MDM2YTMuLmMzZjRkZjQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5Mzk4LnhtbC5lcnIKKysrIGIvcmVzdWx0L2Vycm9ycy83NTkzOTgueG1sLmVycgpAQCAtNyw2ICs3LDMgQEAKIC4vdGVzdC9lcnJvcnMvNzU5Mzk4LnhtbDozMTQ6IHBhcnNlciBlcnJvciA6IE9wZW5pbmcgYW5kIGVuZGluZyB0YWcgbWlzbWF0Y2g6IHNwZWMgbGluZSA1MCBhbmQgcAogZGF0YSBhbmQgdGhlIGluZm9ybWF0aW9uIGl0IG11c3QgcHJvdmlkZSB0byB0aGUgYXBwbGljYXRpb24uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9lcnJvcnMvNzU5Mzk4LnhtbDozMTY6IHBhcnNlciBlcnJvciA6IEV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKLTxkaXYyIGlkPSdzZWMtb3JpZ2luLWdvYWxzJz4KLV4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5Mzk4LnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzLzc1OTM5OC54bWwuc3RyCmluZGV4IDY4MDljMDYuLjhlMzdkNjkgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5Mzk4LnhtbC5zdHIKKysrIGIvcmVzdWx0L2Vycm9ycy83NTkzOTgueG1sLnN0cgpAQCAtMSw1ICsxLDQgQEAKLS4vdGVzdC9lcnJvcnMvNzU5Mzk4LnhtbDoyMTA6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiBkZXRlY3RlZCBhbiBlcnJvciBpbiBlbGVtZW50IGNvbnRlbnQKLQorLi90ZXN0L2Vycm9ycy83NTkzOTgueG1sOjIxMDogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCiBuZWVkIHRvIHdvcnJ5IGFib3V0IHBhcnNlcnMgd2hpPCEgZG9uJ3QgZXhwYW5kIFBFcmVmcyBmaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAuL3Rlc3QvZXJyb3JzLzc1OTM5OC54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5NTczLTIueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvNzU5NTczLTIueG1sLmVudAppbmRleCA0YzQ1NDc1Li4wMWM4MTU3IDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzLzc1OTU3My0yLnhtbC5lbnQKKysrIGIvcmVzdWx0L2Vycm9ycy83NTk1NzMtMi54bWwuZW50CkBAIC0xOCwxOCArMTgsOCBAQAogICAgICAgICAgICAgICAgICAgIF4KIC4vdGVzdC9lcnJvcnMvNzU5NTczLTIueG1sOjY6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KIAotJXh4OwP/Z2dLRU5TTVlOVCYjMzU7TUVOVEQmIzM3Mnp6Oyc+CisleHg7AwogICAgIF4KIEVudGl0eTogbGluZSAyOiAKIDwhW0lOQ0xVREVbCi1eCi0uL3Rlc3QvZXJyb3JzLzc1OTU3My0yLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLSV4eDsD/2dnS0VOU01ZTlQmIzM1O01FTlREJiMzNzJ6ejsnPgotICAgIF4KLS4vdGVzdC9lcnJvcnMvNzU5NTczLTIueG1sOjY6IHBhcnNlciBlcnJvciA6IERPQ1RZUEUgaW1wcm9wZXJseSB0ZXJtaW5hdGVkCi0leHg7A/9nZ0tFTlNNWU5UJiMzNTtNRU5URCYjMzcyeno7Jz4KLSAgICBeCi0uL3Rlc3QvZXJyb3JzLzc1OTU3My0yLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQKLSV4eDsD/2dnS0VOU01ZTlQmIzM1O01FTlREJiMzNzJ6ejsnPgotICAgIF4KKyAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy83NTk1NzMtMi54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy83NTk1NzMtMi54bWwuZXJyCmluZGV4IDRjNDU0NzUuLjAxYzgxNTcgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5NTczLTIueG1sLmVycgorKysgYi9yZXN1bHQvZXJyb3JzLzc1OTU3My0yLnhtbC5lcnIKQEAgLTE4LDE4ICsxOCw4IEBACiAgICAgICAgICAgICAgICAgICAgXgogLi90ZXN0L2Vycm9ycy83NTk1NzMtMi54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgogCi0leHg7A/9nZ0tFTlNNWU5UJiMzNTtNRU5URCYjMzcyeno7Jz4KKyV4eDsDCiAgICAgXgogRW50aXR5OiBsaW5lIDI6IAogPCFbSU5DTFVERVsKLV4KLS4vdGVzdC9lcnJvcnMvNzU5NTczLTIueG1sOjY6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KLQotJXh4OwP/Z2dLRU5TTVlOVCYjMzU7TUVOVEQmIzM3Mnp6Oyc+Ci0gICAgXgotLi90ZXN0L2Vycm9ycy83NTk1NzMtMi54bWw6NjogcGFyc2VyIGVycm9yIDogRE9DVFlQRSBpbXByb3Blcmx5IHRlcm1pbmF0ZWQKLSV4eDsD/2dnS0VOU01ZTlQmIzM1O01FTlREJiMzNzJ6ejsnPgotICAgIF4KLS4vdGVzdC9lcnJvcnMvNzU5NTczLTIueG1sOjY6IHBhcnNlciBlcnJvciA6IFN0YXJ0IHRhZyBleHBlY3RlZCwgJzwnIG5vdCBmb3VuZAotJXh4OwP/Z2dLRU5TTVlOVCYjMzU7TUVOVEQmIzM3Mnp6Oyc+Ci0gICAgXgorICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzLzc1OTU3My0yLnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzLzc1OTU3My0yLnhtbC5zdHIKaW5kZXggYmFhYzE2NC4uMzlmNzdhNiAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy83NTk1NzMtMi54bWwuc3RyCisrKyBiL3Jlc3VsdC9lcnJvcnMvNzU5NTczLTIueG1sLnN0cgpAQCAtMSw0ICsxLDI2IEBACi0uL3Rlc3QvZXJyb3JzLzc1OTU3My0yLnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Ci08IURPQ1RZUEUgdGVzdCBbCi0gICAgICAgICAgICAgICBeCitFbnRpdHk6IGxpbmUgMTogcGFyc2VyIGVycm9yIDogU3BhY2UgcmVxdWlyZWQgYWZ0ZXIgJzwhRU5USVRZJworJXp6OworICAgIF4KK0VudGl0eTogbGluZSAxOiAKKzwhRU5USVRZPD94RE9DVFlQRW1+Pz4KKyAgICAgICAgXgorRW50aXR5OiBsaW5lIDE6IHBhcnNlciBlcnJvciA6IHhtbFBhcnNlRW50aXR5RGVjbDogbm8gbmFtZQorJXp6OworICAgIF4KK0VudGl0eTogbGluZSAxOiAKKzwhRU5USVRZPD94RE9DVFlQRW1+Pz4KKyAgICAgICAgXgorRW50aXR5OiBsaW5lIDE6IHBhcnNlciBlcnJvciA6IFBhcnNlUEk6IFBJIHhET0NUWVBFbSBzcGFjZSBleHBlY3RlZAorJXp6OworICAgIF4KK0VudGl0eTogbGluZSAxOiAKKzwhRU5USVRZPD94RE9DVFlQRW1+Pz4KKyAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzLzc1OTU3My0yLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCisKKyV4eDsDCisgICAgXgorRW50aXR5OiBsaW5lIDI6IAorPCFbSU5DTFVERVsKKyAgXgogLi90ZXN0L2Vycm9ycy83NTk1NzMtMi54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5NTczLnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzLzc1OTU3My54bWwuZW50CmluZGV4IDU1MjQ3NTAuLjc0MzIyYjYgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5NTczLnhtbC5lbnQKKysrIGIvcmVzdWx0L2Vycm9ycy83NTk1NzMueG1sLmVudApAQCAtMTksMTQgKzE5LDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBFbnRpdHk6IGxpbmUgMTogCiAlPCFbSU5DTFVERVswMDAl4K64MDAwJXo7Ci0gXgotLi90ZXN0L2Vycm9ycy83NTk1NzMueG1sOjE6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KLQotVCB0IChBKT48IUVOVElUWSAlIHh4ICcmIzM3OzwhW0lOQ0xVREVbMDAwJiMzNzsmIzMwMDA7MDAwJiMzNzt6Oyc+PCFFTlRJVFl6PiV4eDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0uL3Rlc3QvZXJyb3JzLzc1OTU3My54bWw6MTogcGFyc2VyIGVycm9yIDogRE9DVFlQRSBpbXByb3Blcmx5IHRlcm1pbmF0ZWQKLVQgdCAoQSk+PCFFTlRJVFkgJSB4eCAnJiMzNzs8IVtJTkNMVURFWzAwMCYjMzc7JiMzMDAwOzAwMCYjMzc7ejsnPjwhRU5USVRZej4leHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy83NTk1NzMueG1sOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0IHRhZyBleHBlY3RlZCwgJzwnIG5vdCBmb3VuZAotVCB0IChBKT48IUVOVElUWSAlIHh4ICcmIzM3OzwhW0lOQ0xVREVbMDAwJiMzNzsmIzMwMDA7MDAwJiMzNzt6Oyc+PCFFTlRJVFl6PiV4eDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzLzc1OTU3My54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy83NTk1NzMueG1sLmVycgppbmRleCA1NTI0NzUwLi43NDMyMmI2IDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzLzc1OTU3My54bWwuZXJyCisrKyBiL3Jlc3VsdC9lcnJvcnMvNzU5NTczLnhtbC5lcnIKQEAgLTE5LDE0ICsxOSw0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogRW50aXR5OiBsaW5lIDE6IAogJTwhW0lOQ0xVREVbMDAwJeCuuDAwMCV6OwotIF4KLS4vdGVzdC9lcnJvcnMvNzU5NTczLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLVQgdCAoQSk+PCFFTlRJVFkgJSB4eCAnJiMzNzs8IVtJTkNMVURFWzAwMCYjMzc7JiMzMDAwOzAwMCYjMzc7ejsnPjwhRU5USVRZej4leHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy83NTk1NzMueG1sOjE6IHBhcnNlciBlcnJvciA6IERPQ1RZUEUgaW1wcm9wZXJseSB0ZXJtaW5hdGVkCi1UIHQgKEEpPjwhRU5USVRZICUgeHggJyYjMzc7PCFbSU5DTFVERVswMDAmIzM3OyYjMzAwMDswMDAmIzM3O3o7Jz48IUVOVElUWXo+JXh4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9lcnJvcnMvNzU5NTczLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQKLVQgdCAoQSk+PCFFTlRJVFkgJSB4eCAnJiMzNzs8IVtJTkNMVURFWzAwMCYjMzc7JiMzMDAwOzAwMCYjMzc7ejsnPjwhRU5USVRZej4leHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy83NTk1NzMueG1sLnN0ciBiL3Jlc3VsdC9lcnJvcnMvNzU5NTczLnhtbC5zdHIKaW5kZXggMWI2YWRkYi4uMzdkZjc2MiAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy83NTk1NzMueG1sLnN0cgorKysgYi9yZXN1bHQvZXJyb3JzLzc1OTU3My54bWwuc3RyCkBAIC0xLDQgKzEsMjMgQEAKLS4vdGVzdC9lcnJvcnMvNzU5NTczLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Ci08P2g/PjwhRE9DVFlQRXRbPCFFTEVNRU5UIHQgKEEpPjwhRU5USVRZICUgeHggJyYjMzc7PCFbSU5DTFVERVswMDAmIzM3OyYjMzAwMDswMAotICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy83NTk1NzMueG1sOjE6IHBhcnNlciBlcnJvciA6IFNwYWNlIHJlcXVpcmVkIGFmdGVyICc8IUVOVElUWScKK0VMRU1FTlQgdCAoQSk+PCFFTlRJVFkgJSB4eCAnJiMzNzs8IVtJTkNMVURFWzAwMCYjMzc7JiMzMDAwOzAwMCYjMzc7ejsnPjwhRU5USVRZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy83NTk1NzMueG1sOjE6IHBhcnNlciBlcnJvciA6IFNwYWNlIHJlcXVpcmVkIGFmdGVyIHRoZSBlbnRpdHkgbmFtZQorTEVNRU5UIHQgKEEpPjwhRU5USVRZICUgeHggJyYjMzc7PCFbSU5DTFVERVswMDAmIzM3OyYjMzAwMDswMDAmIzM3O3o7Jz48IUVOVElUWXoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzLzc1OTU3My54bWw6MTogcGFyc2VyIGVycm9yIDogRW50aXR5IHZhbHVlIHJlcXVpcmVkCitMRU1FTlQgdCAoQSk+PCFFTlRJVFkgJSB4eCAnJiMzNzs8IVtJTkNMVURFWzAwMCYjMzc7JiMzMDAwOzAwMCYjMzc7ejsnPjwhRU5USVRZegorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvNzU5NTczLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBQRVJlZmVyZW5jZTogbm8gbmFtZQorVCB0IChBKT48IUVOVElUWSAlIHh4ICcmIzM3OzwhW0lOQ0xVREVbMDAwJiMzNzsmIzMwMDA7MDAwJiMzNzt6Oyc+PCFFTlRJVFl6PiV4eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitFbnRpdHk6IGxpbmUgMTogCislPCFbSU5DTFVERVswMDAl4K64MDAwJXo7CisgXgorLi90ZXN0L2Vycm9ycy83NTk1NzMueG1sOjE6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KKworVCB0IChBKT48IUVOVElUWSAlIHh4ICcmIzM3OzwhW0lOQ0xVREVbMDAwJiMzNzsmIzMwMDA7MDAwJiMzNzt6Oyc+PCFFTlRJVFl6PiV4eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitFbnRpdHk6IGxpbmUgMTogCislPCFbSU5DTFVERVswMDAl4K64MDAwJXo7CisgICBeCiAuL3Rlc3QvZXJyb3JzLzc1OTU3My54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5NTc5LnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzLzc1OTU3OS54bWwuZW50CmluZGV4IDI4ODAyNmUuLmRkMGU2OGEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5NTc5LnhtbC5lbnQKKysrIGIvcmVzdWx0L2Vycm9ycy83NTk1NzkueG1sLmVudApAQCAtMSw2ICsxLDYgQEAKLUVudGl0eTogbGluZSAyOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLSAgICAgICAgJXo7ICV6OyAlejsgJXo7ICV6OwotICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzLzc1OTU3OS54bWw6OTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCisgICAgJXo7CisgICAgICAgXgogRW50aXR5OiBsaW5lIDI6IAogICAgICAgICAlejsgJXo7ICV6OyAlejsgJXo7CiAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5NTc5LnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzLzc1OTU3OS54bWwuZXJyCmluZGV4IDI4ODAyNmUuLmRkMGU2OGEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5NTc5LnhtbC5lcnIKKysrIGIvcmVzdWx0L2Vycm9ycy83NTk1NzkueG1sLmVycgpAQCAtMSw2ICsxLDYgQEAKLUVudGl0eTogbGluZSAyOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLSAgICAgICAgJXo7ICV6OyAlejsgJXo7ICV6OwotICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzLzc1OTU3OS54bWw6OTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCisgICAgJXo7CisgICAgICAgXgogRW50aXR5OiBsaW5lIDI6IAogICAgICAgICAlejsgJXo7ICV6OyAlejsgJXo7CiAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvNzU5NTc5LnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzLzc1OTU3OS54bWwuc3RyCmluZGV4IDA5NDA4ZjUuLmU5YTkyOWMgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvNzU5NTc5LnhtbC5zdHIKKysrIGIvcmVzdWx0L2Vycm9ycy83NTk1NzkueG1sLnN0cgpAQCAtMSw2ICsxLDYgQEAKLUVudGl0eTogbGluZSAyOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLSAgICAgICAgJXo7ICV6OyAlejsgJXo7ICV6OwotICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzLzc1OTU3OS54bWw6OTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCisgICAgJXo7CisgICAgICAgXgogRW50aXR5OiBsaW5lIDI6IAogICAgICAgICAlejsgJXo7ICV6OyAlejsgJXo7CiAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvYXR0cjQueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvYXR0cjQueG1sLmVudAppbmRleCBhOTk2NmQ4Li44OTkwNmExIDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzL2F0dHI0LnhtbC5lbnQKKysrIGIvcmVzdWx0L2Vycm9ycy9hdHRyNC54bWwuZW50CkBAIC03LDYgKzcsMyBAQAogLi90ZXN0L2Vycm9ycy9hdHRyNC54bWw6MTogcGFyc2VyIGVycm9yIDogQ291bGRuJ3QgZmluZCBlbmQgb2YgU3RhcnQgVGFnIFJPT1QgbGluZSAxCiA8Uk9PVCBhdHRyPSJYWRYiLz4KICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy9hdHRyNC54bWw6MTogcGFyc2VyIGVycm9yIDogRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAotPFJPT1QgYXR0cj0iWFkWIi8+Ci0gICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvYXR0cjQueG1sLmVyciBiL3Jlc3VsdC9lcnJvcnMvYXR0cjQueG1sLmVycgppbmRleCBhOTk2NmQ4Li44OTkwNmExIDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzL2F0dHI0LnhtbC5lcnIKKysrIGIvcmVzdWx0L2Vycm9ycy9hdHRyNC54bWwuZXJyCkBAIC03LDYgKzcsMyBAQAogLi90ZXN0L2Vycm9ycy9hdHRyNC54bWw6MTogcGFyc2VyIGVycm9yIDogQ291bGRuJ3QgZmluZCBlbmQgb2YgU3RhcnQgVGFnIFJPT1QgbGluZSAxCiA8Uk9PVCBhdHRyPSJYWRYiLz4KICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy9hdHRyNC54bWw6MTogcGFyc2VyIGVycm9yIDogRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAotPFJPT1QgYXR0cj0iWFkWIi8+Ci0gICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvYXR0cjUueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvYXR0cjUueG1sLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWY1MjRmCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9hdHRyNS54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9hdHRyNS54bWw6MjogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGIgcmVkZWZpbmVkCisgICAgPGEgYj0iIiBiPSIiLz4KKyAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL2F0dHI1LnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzL2F0dHI1LnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmNTI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvYXR0cjUueG1sLmVycgpAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvYXR0cjUueG1sOjI6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBiIHJlZGVmaW5lZAorICAgIDxhIGI9IiIgYj0iIi8+CisgICAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9hdHRyNS54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy9hdHRyNS54bWwuc3RyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzM5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL2F0dHI1LnhtbC5zdHIKQEAgLTAsMCArMSw0IEBACisuL3Rlc3QvZXJyb3JzL2F0dHI1LnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYiByZWRlZmluZWQKKyAgICA8YSBiPSIiIGI9IiIvPgorICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjUueG1sIDogZmFpbGVkIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL2F0dHI2LnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL2F0dHI2LnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjN2EyNAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvYXR0cjYueG1sLmVudApAQCAtMCwwICsxLDYwIEBACisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDozOiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYzpkYiByZWRlZmluZWQKKyIiIGQ6ZW09IiIgZDpidz0iIiBiOmJiPSIiIGI6ZXk9IiIgYzpjZD0iIiBhOmNlPSIiIGI6YWg9IiIgYzphbT0iIiBjcT0iIiBjOmRiPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGQ6ZG8gcmVkZWZpbmVkCisgYzpiYT0iIiBiOmJqPSIiIGE6Ym49IiIgYzpmZD0iIiBjOmZlPSIiIGE6ZGg9IiIgYjplZj0iIiBkOmRvPSIiIGI6ZGE9IiIgYTpjdj0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjc6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBidSByZWRlZmluZWQKK3I9IiIgYjpmZT0iIiBkYz0iIiBkOmN4PSIiIGQ6Y2U9IiIgYjpmZz0iIiBkOmR3PSIiIGQ6Y3k9IiIgYXA9IiIgYTplaz0iIiBjOmVlPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6ODogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGM6YWUgcmVkZWZpbmVkCithPSIiIGI6ZGs9IiIgYTpjbD0iIiBkOmJkPSIiIGQ6Ymg9IiIgYnY9IiIgYzpmYz0iIiBkOmJ4PSIiIGQ6YmY9IiIgZDpjcT0iIiBkej0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjE1OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYzpjeSByZWRlZmluZWQKKyIiIGE6ZXk9IiIgYTpiZT0iIiBjOmRmPSIiIGI6ZWo9IiIgYTpjdj0iIiBjOmRzPSIiIGQ6Yng9IiIgYzpjZD0iIiBlbz0iIiBhOmZpPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6MTc6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBidCByZWRlZmluZWQKKyIiIGI6YWE9IiIgYTphaj0iIiBjOmNwPSIiIGE6Y2s9IiIgYjpmaT0iIiBhOmZqPSIiIGF3PSIiIGQ6ZGY9IiIgZDpjdD0iIiBkOmZnPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6MTk6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBhYSByZWRlZmluZWQKKyBiOmZpPSIiIGI6ZXk9IiIgYTpjdj0iIiBiOmFnPSIiIGI6ZHU9IiIgYTphej0iIiBhOmZnPSIiIGI6Y3I9IiIgZDpiZD0iIiBkOmV1PSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6MTk6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBkOmN5IHJlZGVmaW5lZAorIGI6Zmk9IiIgYjpleT0iIiBhOmN2PSIiIGI6YWc9IiIgYjpkdT0iIiBhOmF6PSIiIGE6Zmc9IiIgYjpjcj0iIiBkOmJkPSIiIGQ6ZXU9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDoyNzogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGR3IHJlZGVmaW5lZAorIiIgZDpheD0iIiBidz0iIiBkOmFzPSIiIGI6ZWg9IiIgYTpjdz0iIiBiOmN5PSIiIGQ6ZWQ9IiIgYjpkbz0iIiBiOmJ4PSIiIGE6Ym89IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDoyNzogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGQ6ZHUgcmVkZWZpbmVkCisiIiBkOmF4PSIiIGJ3PSIiIGQ6YXM9IiIgYjplaD0iIiBhOmN3PSIiIGI6Y3k9IiIgZDplZD0iIiBiOmRvPSIiIGI6Yng9IiIgYTpibz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjI5OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYjpjYiByZWRlZmluZWQKKyBhOmN1PSIiIGM6ZXU9IiIgZmU9IiIgZDphYz0iIiBkOmJsPSIiIGM6ZHI9IiIgY289IiIgYzpibj0iIiBjZj0iIiBiOmN3PSIiIGV3PSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6MzY6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBheSByZWRlZmluZWQKKyBiOmN2PSIiIGQ6Ymk9IiIgYjpmbD0iIiBmZT0iIiBiOmFtPSIiIGM6Zm09IiIgYzpkaT0iIiBicz0iIiBkYz0iIiBiOmJtPSIiIGVzPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDE6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBhdSByZWRlZmluZWQKK3Q9IiIgZDpldz0iIiBkOmVrPSIiIGE6YnU9IiIgYjpkYz0iIiBkOmFiPSIiIGNqPSIiIGQ6Ymo9IiIgYTpiZz0iIiBhOmRhPSIiIGFjPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDM6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBlbSByZWRlZmluZWQKK3A9IiIgZDpjdj0iIiBiaD0iIiBjOmR5PSIiIGM6ZXE9IiIgYjphbT0iIiBiOmVkPSIiIGI6Y289IiIgYTpldz0iIiBjOmF2PSIiIGFkPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDU6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBjciByZWRlZmluZWQKKzpheD0iIiBiYz0iIiBkOmJyPSIiIGI6YXE9IiIgYTpkbj0iIiBkOmZhPSIiIGQ6Y2I9IiIgZDpibz0iIiBkcz0iIiBhZD0iIiBjOmNnPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDU6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBhOmF6IHJlZGVmaW5lZAorOmF4PSIiIGJjPSIiIGQ6YnI9IiIgYjphcT0iIiBhOmRuPSIiIGQ6ZmE9IiIgZDpjYj0iIiBkOmJvPSIiIGRzPSIiIGFkPSIiIGM6Y2c9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0NjogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGE6Y3kgcmVkZWZpbmVkCit4PSIiIGI6Y3I9IiIgZDpjYT0iIiBjOmVtPSIiIGQ6ZXM9IiIgYTpkdT0iIiBjYz0iIiBjOmNpPSIiIGI6ZHQ9IiIgZDpmbT0iIiBiYj0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjQ3OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgZDpjcyByZWRlZmluZWQKKyIiIGE6ZWE9IiIgYzplbj0iIiBjOmN2PSIiIGM6ZXE9IiIgYzpmaz0iIiBheD0iIiBhOmF6PSIiIGE6ZmQ9IiIgZDpjdz0iIiBkOmNzPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDk6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBhOmR2IHJlZGVmaW5lZAoreT0iIiBkZz0iIiBhOmRwPSIiIGQ6YWk9IiIgYTplYT0iIiBiOmVxPSIiIGI6ZWk9IiIgZDphcj0iIiBjcD0iIiBhOmZlPSIiIGE6Y3Y9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo1MDogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGI6ZG8gcmVkZWZpbmVkCisiIiBhOmVsPSIiIGI6ZmU9IiIgY3k9IiIgZDpjcT0iIiBjOmVvPSIiIGE6Y2c9IiIgYTpkaD0iIiBiOmV1PSIiIGE6Y3A9IiIgYTpmaz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvYXR0cjYueG1sLmVyciBiL3Jlc3VsdC9lcnJvcnMvYXR0cjYueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM3YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9hdHRyNi54bWwuZXJyCkBAIC0wLDAgKzEsNjAgQEAKKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjM6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBjOmRiIHJlZGVmaW5lZAorIiIgZDplbT0iIiBkOmJ3PSIiIGI6YmI9IiIgYjpleT0iIiBjOmNkPSIiIGE6Y2U9IiIgYjphaD0iIiBjOmFtPSIiIGNxPSIiIGM6ZGI9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgZDpkbyByZWRlZmluZWQKKyBjOmJhPSIiIGI6Ymo9IiIgYTpibj0iIiBjOmZkPSIiIGM6ZmU9IiIgYTpkaD0iIiBiOmVmPSIiIGQ6ZG89IiIgYjpkYT0iIiBhOmN2PSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NzogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGJ1IHJlZGVmaW5lZAorcj0iIiBiOmZlPSIiIGRjPSIiIGQ6Y3g9IiIgZDpjZT0iIiBiOmZnPSIiIGQ6ZHc9IiIgZDpjeT0iIiBhcD0iIiBhOmVrPSIiIGM6ZWU9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo4OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYzphZSByZWRlZmluZWQKK2E9IiIgYjpkaz0iIiBhOmNsPSIiIGQ6YmQ9IiIgZDpiaD0iIiBidj0iIiBjOmZjPSIiIGQ6Yng9IiIgZDpiZj0iIiBkOmNxPSIiIGR6PSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6MTU6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBjOmN5IHJlZGVmaW5lZAorIiIgYTpleT0iIiBhOmJlPSIiIGM6ZGY9IiIgYjplaj0iIiBhOmN2PSIiIGM6ZHM9IiIgZDpieD0iIiBjOmNkPSIiIGVvPSIiIGE6Zmk9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDoxNzogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGJ0IHJlZGVmaW5lZAorIiIgYjphYT0iIiBhOmFqPSIiIGM6Y3A9IiIgYTpjaz0iIiBiOmZpPSIiIGE6Zmo9IiIgYXc9IiIgZDpkZj0iIiBkOmN0PSIiIGQ6Zmc9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDoxOTogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGFhIHJlZGVmaW5lZAorIGI6Zmk9IiIgYjpleT0iIiBhOmN2PSIiIGI6YWc9IiIgYjpkdT0iIiBhOmF6PSIiIGE6Zmc9IiIgYjpjcj0iIiBkOmJkPSIiIGQ6ZXU9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDoxOTogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGQ6Y3kgcmVkZWZpbmVkCisgYjpmaT0iIiBiOmV5PSIiIGE6Y3Y9IiIgYjphZz0iIiBiOmR1PSIiIGE6YXo9IiIgYTpmZz0iIiBiOmNyPSIiIGQ6YmQ9IiIgZDpldT0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjI3OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgZHcgcmVkZWZpbmVkCisiIiBkOmF4PSIiIGJ3PSIiIGQ6YXM9IiIgYjplaD0iIiBhOmN3PSIiIGI6Y3k9IiIgZDplZD0iIiBiOmRvPSIiIGI6Yng9IiIgYTpibz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjI3OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgZDpkdSByZWRlZmluZWQKKyIiIGQ6YXg9IiIgYnc9IiIgZDphcz0iIiBiOmVoPSIiIGE6Y3c9IiIgYjpjeT0iIiBkOmVkPSIiIGI6ZG89IiIgYjpieD0iIiBhOmJvPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6Mjk6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBiOmNiIHJlZGVmaW5lZAorIGE6Y3U9IiIgYzpldT0iIiBmZT0iIiBkOmFjPSIiIGQ6Ymw9IiIgYzpkcj0iIiBjbz0iIiBjOmJuPSIiIGNmPSIiIGI6Y3c9IiIgZXc9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDozNjogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGF5IHJlZGVmaW5lZAorIGI6Y3Y9IiIgZDpiaT0iIiBiOmZsPSIiIGZlPSIiIGI6YW09IiIgYzpmbT0iIiBjOmRpPSIiIGJzPSIiIGRjPSIiIGI6Ym09IiIgZXM9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0MTogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGF1IHJlZGVmaW5lZAordD0iIiBkOmV3PSIiIGQ6ZWs9IiIgYTpidT0iIiBiOmRjPSIiIGQ6YWI9IiIgY2o9IiIgZDpiaj0iIiBhOmJnPSIiIGE6ZGE9IiIgYWM9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0MzogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGVtIHJlZGVmaW5lZAorcD0iIiBkOmN2PSIiIGJoPSIiIGM6ZHk9IiIgYzplcT0iIiBiOmFtPSIiIGI6ZWQ9IiIgYjpjbz0iIiBhOmV3PSIiIGM6YXY9IiIgYWQ9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0NTogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGNyIHJlZGVmaW5lZAorOmF4PSIiIGJjPSIiIGQ6YnI9IiIgYjphcT0iIiBhOmRuPSIiIGQ6ZmE9IiIgZDpjYj0iIiBkOmJvPSIiIGRzPSIiIGFkPSIiIGM6Y2c9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0NTogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGE6YXogcmVkZWZpbmVkCis6YXg9IiIgYmM9IiIgZDpicj0iIiBiOmFxPSIiIGE6ZG49IiIgZDpmYT0iIiBkOmNiPSIiIGQ6Ym89IiIgZHM9IiIgYWQ9IiIgYzpjZz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjQ2OiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYTpjeSByZWRlZmluZWQKK3g9IiIgYjpjcj0iIiBkOmNhPSIiIGM6ZW09IiIgZDplcz0iIiBhOmR1PSIiIGNjPSIiIGM6Y2k9IiIgYjpkdD0iIiBkOmZtPSIiIGJiPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWw6NDc6IHBhcnNlciBlcnJvciA6IEF0dHJpYnV0ZSBkOmNzIHJlZGVmaW5lZAorIiIgYTplYT0iIiBjOmVuPSIiIGM6Y3Y9IiIgYzplcT0iIiBjOmZrPSIiIGF4PSIiIGE6YXo9IiIgYTpmZD0iIiBkOmN3PSIiIGQ6Y3M9IiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDo0OTogcGFyc2VyIGVycm9yIDogQXR0cmlidXRlIGE6ZHYgcmVkZWZpbmVkCit5PSIiIGRnPSIiIGE6ZHA9IiIgZDphaT0iIiBhOmVhPSIiIGI6ZXE9IiIgYjplaT0iIiBkOmFyPSIiIGNwPSIiIGE6ZmU9IiIgYTpjdj0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvYXR0cjYueG1sOjUwOiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYjpkbyByZWRlZmluZWQKKyIiIGE6ZWw9IiIgYjpmZT0iIiBjeT0iIiBkOmNxPSIiIGM6ZW89IiIgYTpjZz0iIiBhOmRoPSIiIGI6ZXU9IiIgYTpjcD0iIiBhOmZrPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9hdHRyNi54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy9hdHRyNi54bWwuc3RyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NmU5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL2F0dHI2LnhtbC5zdHIKQEAgLTAsMCArMSw0IEBACisuL3Rlc3QvZXJyb3JzL2F0dHI2LnhtbDozOiBwYXJzZXIgZXJyb3IgOiBBdHRyaWJ1dGUgYzpkYiByZWRlZmluZWQKKyIiIGQ6ZW09IiIgZDpidz0iIiBiOmJiPSIiIGI6ZXk9IiIgYzpjZD0iIiBhOmNlPSIiIGI6YWg9IiIgYzphbT0iIiBjcT0iIiBjOmRiPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9hdHRyNi54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvY2RhdGEueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvY2RhdGEueG1sLmVudAppbmRleCBmNzU3OTYzLi5mN2M3YjQ4IDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzL2NkYXRhLnhtbC5lbnQKKysrIGIvcmVzdWx0L2Vycm9ycy9jZGF0YS54bWwuZW50CkBAIC0xLDQgKzEsNCBAQAogLi90ZXN0L2Vycm9ycy9jZGF0YS54bWw6MjogcGFyc2VyIGVycm9yIDogSW5wdXQgaXMgbm90IHByb3BlciBVVEYtOCwgaW5kaWNhdGUgZW5jb2RpbmcgIQogQnl0ZXM6IDB4RTEgMHg3MiAweDVEIDB4NUQKLTxBPjwhW0NEQVRBW0Phcl1dPjwvQT4KKzxBPjwhW0NEQVRBW0MKICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL2NkYXRhLnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzL2NkYXRhLnhtbC5lcnIKaW5kZXggZjc1Nzk2My4uZjdjN2I0OCAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy9jZGF0YS54bWwuZXJyCisrKyBiL3Jlc3VsdC9lcnJvcnMvY2RhdGEueG1sLmVycgpAQCAtMSw0ICsxLDQgQEAKIC4vdGVzdC9lcnJvcnMvY2RhdGEueG1sOjI6IHBhcnNlciBlcnJvciA6IElucHV0IGlzIG5vdCBwcm9wZXIgVVRGLTgsIGluZGljYXRlIGVuY29kaW5nICEKIEJ5dGVzOiAweEUxIDB4NzIgMHg1RCAweDVECi08QT48IVtDREFUQVtD4XJdXT48L0E+Cis8QT48IVtDREFUQVtDCiAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9jZGF0YS54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy9jZGF0YS54bWwuc3RyCmluZGV4IGNmODNkMmIuLmFmMTMyMWUgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvY2RhdGEueG1sLnN0cgorKysgYi9yZXN1bHQvZXJyb3JzL2NkYXRhLnhtbC5zdHIKQEAgLTEsNSArMSw1IEBACiAuL3Rlc3QvZXJyb3JzL2NkYXRhLnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBJbnB1dCBpcyBub3QgcHJvcGVyIFVURi04LCBpbmRpY2F0ZSBlbmNvZGluZyAhCiBCeXRlczogMHhFMSAweDcyIDB4NUQgMHg1RAotPEE+PCFbQ0RBVEFbQ+FyXV0+PC9BPgorPEE+PCFbQ0RBVEFbQwogICAgICAgICAgICAgIF4KIC4vdGVzdC9lcnJvcnMvY2RhdGEueG1sIDogZmFpbGVkIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL2NvbnRlbnQxLnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL2NvbnRlbnQxLnhtbC5lbnQKaW5kZXggOWZjZDYwMy4uNjQ1MTE1NyAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy9jb250ZW50MS54bWwuZW50CisrKyBiL3Jlc3VsdC9lcnJvcnMvY29udGVudDEueG1sLmVudApAQCAtOCw5ICs4LDMgQEAKIAogPCFFTEVNRU5UIGFFbGVtZW50IChhIHxiICogPgogICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9lcnJvcnMvY29udGVudDEueG1sOjc6IHBhcnNlciBlcnJvciA6IERPQ1RZUEUgaW1wcm9wZXJseSB0ZXJtaW5hdGVkCi08IUVMRU1FTlQgYUVsZW1lbnQgKGEgfGIgKiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy9jb250ZW50MS54bWw6NzogcGFyc2VyIGVycm9yIDogU3RhcnQgdGFnIGV4cGVjdGVkLCAnPCcgbm90IGZvdW5kCi08IUVMRU1FTlQgYUVsZW1lbnQgKGEgfGIgKiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9jb250ZW50MS54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy9jb250ZW50MS54bWwuZXJyCmluZGV4IDlmY2Q2MDMuLjY0NTExNTcgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMvY29udGVudDEueG1sLmVycgorKysgYi9yZXN1bHQvZXJyb3JzL2NvbnRlbnQxLnhtbC5lcnIKQEAgLTgsOSArOCwzIEBACiAKIDwhRUxFTUVOVCBhRWxlbWVudCAoYSB8YiAqID4KICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0uL3Rlc3QvZXJyb3JzL2NvbnRlbnQxLnhtbDo3OiBwYXJzZXIgZXJyb3IgOiBET0NUWVBFIGltcHJvcGVybHkgdGVybWluYXRlZAotPCFFTEVNRU5UIGFFbGVtZW50IChhIHxiICogPgotICAgICAgICAgICAgICAgICAgICAgICAgIF4KLS4vdGVzdC9lcnJvcnMvY29udGVudDEueG1sOjc6IHBhcnNlciBlcnJvciA6IFN0YXJ0IHRhZyBleHBlY3RlZCwgJzwnIG5vdCBmb3VuZAotPCFFTEVNRU5UIGFFbGVtZW50IChhIHxiICogPgotICAgICAgICAgICAgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvY29udGVudDEueG1sLnN0ciBiL3Jlc3VsdC9lcnJvcnMvY29udGVudDEueG1sLnN0cgppbmRleCBkODA2YTYzLi40N2E2YjZmIDEwMDY0NAotLS0gYS9yZXN1bHQvZXJyb3JzL2NvbnRlbnQxLnhtbC5zdHIKKysrIGIvcmVzdWx0L2Vycm9ycy9jb250ZW50MS54bWwuc3RyCkBAIC04LDcgKzgsNCBAQAogCiA8IUVMRU1FTlQgYUVsZW1lbnQgKGEgfGIgKiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgXgotLi90ZXN0L2Vycm9ycy9jb250ZW50MS54bWw6NzogcGFyc2VyIGVycm9yIDogRE9DVFlQRSBpbXByb3Blcmx5IHRlcm1pbmF0ZWQKLTwhRUxFTUVOVCBhRWxlbWVudCAoYSB8YiAqID4KLSAgICAgICAgICAgICAgICAgICAgICAgICBeCiAuL3Rlc3QvZXJyb3JzL2NvbnRlbnQxLnhtbCA6IGZhaWxlZCB0byBwYXJzZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9lbXB0eS54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy9lbXB0eS54bWwuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMmNhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL2VtcHR5LnhtbC5lbnQKQEAgLTAsMCArMSwzIEBACisuL3Rlc3QvZXJyb3JzL2VtcHR5LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBEb2N1bWVudCBpcyBlbXB0eQorCiteCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL2VtcHR5LnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzL2VtcHR5LnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyY2E2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvZW1wdHkueG1sLmVycgpAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvZW1wdHkueG1sOjE6IHBhcnNlciBlcnJvciA6IERvY3VtZW50IGlzIGVtcHR5CisKK14KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvZW1wdHkueG1sLnN0ciBiL3Jlc3VsdC9lcnJvcnMvZW1wdHkueG1sLnN0cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2VmMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9lbXB0eS54bWwuc3RyCkBAIC0wLDAgKzEsNCBAQAorLi90ZXN0L2Vycm9ycy9lbXB0eS54bWw6MTogcGFyc2VyIGVycm9yIDogRG9jdW1lbnQgaXMgZW1wdHkKKworXgorLi90ZXN0L2Vycm9ycy9lbXB0eS54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlZGM0NAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Cis8ZC8+eAorICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlZGM0NAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwuZXJyCkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Cis8ZC8+eAorICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbC5zdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkOGI0OAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwuc3RyCkBAIC0wLDAgKzEsNCBAQAorLi90ZXN0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Cis8ZC8+eAorICAgIF4KKy4vdGVzdC9lcnJvcnMvZXh0cmEtY29udGVudC54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4MDAyZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQKK3gKK14KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4MDAyZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwuZXJyCkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQKK3gKK14KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbC5zdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiNDljYgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwuc3RyCkBAIC0wLDAgKzEsNCBAQAorLi90ZXN0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQKK3gKK14KKy4vdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0yLnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxMzk4ZAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0yLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydFRhZzogaW52YWxpZCBlbGVtZW50IG5hbWUKKzwKKyBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL2ludmFsaWQtc3RhcnQtdGFnLTIueG1sLmVyciBiL3Jlc3VsdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWwuZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTM5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL2ludmFsaWQtc3RhcnQtdGFnLTIueG1sLmVycgpAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCis8CisgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0yLnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzL2ludmFsaWQtc3RhcnQtdGFnLTIueG1sLnN0cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTAzZTQxCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0yLnhtbC5zdHIKQEAgLTAsMCArMSw0IEBACisuL3Rlc3QvZXJyb3JzL2ludmFsaWQtc3RhcnQtdGFnLTIueG1sOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQorPAorIF4KKy4vdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvbmFtZTMueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvbmFtZTMueG1sLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI1ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9uYW1lMy54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9uYW1lMy54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCis8Lm5hbWUvPgorIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvbmFtZTMueG1sLmVyciBiL3Jlc3VsdC9lcnJvcnMvbmFtZTMueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI1ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9uYW1lMy54bWwuZXJyCkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy9uYW1lMy54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCis8Lm5hbWUvPgorIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvbmFtZTMueG1sLnN0ciBiL3Jlc3VsdC9lcnJvcnMvbmFtZTMueG1sLnN0cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBiMzFhCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9uYW1lMy54bWwuc3RyCkBAIC0wLDAgKzEsNCBAQAorLi90ZXN0L2Vycm9ycy9uYW1lMy54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCis8Lm5hbWUvPgorIF4KKy4vdGVzdC9lcnJvcnMvbmFtZTMueG1sIDogZmFpbGVkIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkYmU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sLmVudApAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sOjY1OiBwYXJzZXIgZXJyb3IgOiBNYXhpbXVtIGVudGl0eSBhbXBsaWZpY2F0aW9uIGZhY3RvciBleGNlZWRlZCwgc2VlIHhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uLgorPGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPgorICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkYmU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sLmVycgpAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sOjY1OiBwYXJzZXIgZXJyb3IgOiBNYXhpbXVtIGVudGl0eSBhbXBsaWZpY2F0aW9uIGZhY3RvciBleGNlZWRlZCwgc2VlIHhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uLgorPGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPgorICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbC5zdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiNGQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sLnN0cgpAQCAtMCwwICsxLDQgQEAKKy4vdGVzdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sOjY1OiBwYXJzZXIgZXJyb3IgOiBNYXhpbXVtIGVudGl0eSBhbXBsaWZpY2F0aW9uIGZhY3RvciBleGNlZWRlZCwgc2VlIHhtbEN0eHRTZXRNYXhBbXBsaWZpY2F0aW9uLgorPGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPgorICBeCisuL3Rlc3QvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbCA6IGZhaWxlZCB0byBwYXJzZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy9yZWNfYXR0X2RlZmF1bHQueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvcmVjX2F0dF9kZWZhdWx0LnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1YTBkNgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvcmVjX2F0dF9kZWZhdWx0LnhtbC5lbnQKQEAgLTAsMCArMSw2IEBACisuL3Rlc3QvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWw6MzogcGFyc2VyIGVycm9yIDogRW50aXR5ICdiJyBub3QgZGVmaW5lZAorICA8IUFUVExJU1QgeCB5IENEQVRBICImYTsiPgorICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWw6NjogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCis8ZG9jIGF0dHI9IiZhOyIvPgorICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy9yZWNfYXR0X2RlZmF1bHQueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzVhMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy9yZWNfYXR0X2RlZmF1bHQueG1sLmVycgpAQCAtMCwwICsxLDYgQEAKKy4vdGVzdC9lcnJvcnMvcmVjX2F0dF9kZWZhdWx0LnhtbDozOiBwYXJzZXIgZXJyb3IgOiBFbnRpdHkgJ2InIG5vdCBkZWZpbmVkCisgIDwhQVRUTElTVCB4IHkgQ0RBVEEgIiZhOyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4vdGVzdC9lcnJvcnMvcmVjX2F0dF9kZWZhdWx0LnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKKzxkb2MgYXR0cj0iJmE7Ii8+CisgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvcmVjX2F0dF9kZWZhdWx0LnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWwuc3RyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZTY1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWwuc3RyCkBAIC0wLDAgKzEsNyBAQAorLi90ZXN0L2Vycm9ycy9yZWNfYXR0X2RlZmF1bHQueG1sOjM6IHBhcnNlciBlcnJvciA6IEVudGl0eSAnYicgbm90IGRlZmluZWQKKyAgPCFBVFRMSVNUIHggeSBDREFUQSAiJmE7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9yZWNfYXR0X2RlZmF1bHQueG1sOjY6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAorPGRvYyBhdHRyPSImYTsiLz4KKyAgICAgICAgICAgICAgXgorLi90ZXN0L2Vycm9ycy9yZWNfYXR0X2RlZmF1bHQueG1sIDogZmFpbGVkIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3JlY19leHRfZW50LnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL3JlY19leHRfZW50LnhtbC5lbnQKaW5kZXggZDhjY2VjMS4uMWI1ZjUwZiAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9ycy9yZWNfZXh0X2VudC54bWwuZW50CisrKyBiL3Jlc3VsdC9lcnJvcnMvcmVjX2V4dF9lbnQueG1sLmVudApAQCAtMSwxMjMgKzEsMyBAQAogdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCiA8ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgogICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi10ZXN0L2Vycm9ycy9yZWNfZXh0LmVudDoxOiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxlbnQ+JmU7ICZlOyAmZTsgJmU7PC9lbnQ+Ci0gICAgICAgIF4KLXRlc3QvZXJyb3JzL3JlY19leHQuZW50OjE6IHBhcnNlciBlcnJvciA6IERldGVjdGVkIGFuIGVudGl0eSByZWZlcmVuY2UgbG9vcAotPGVudD4mZTsgJmU7ICZlOyAmZTs8L2VudD4KLSAgICAgICAgXgotdGVzdC9lcnJvcnMvcmVjX2V4dC5lbnQ6MTogcGFyc2VyIGVycm9yIDogRGV0ZWN0ZWQgYW4gZW50aXR5IHJlZmVyZW5jZSBsb29wCi08ZW50PiZlOyAmZTsgJmU7ICZlOzwvZW50PgotICAgICAgICBeCi0uL3Rlc3QvZXJyb3JzL3JlY19leHRfZW50LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBEZXRlY3RlZCBhbiBlbnRpdHkgcmVmZXJlbmNlIGxvb3AKLTxkb2M+JmU7ICZlOyAmZTsgJmU7PC9kb2M+Ci0gICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL3RyYWlsaW5nLW51bGwtMS54bWwuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2E3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3RyYWlsaW5nLW51bGwtMS54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy90cmFpbGluZy1udWxsLTEueG1sOjE6IHBhcnNlciBlcnJvciA6IEV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKKzxkLz4KKyAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3RyYWlsaW5nLW51bGwtMS54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy90cmFpbGluZy1udWxsLTEueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhNzdhCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy90cmFpbGluZy1udWxsLTEueG1sLmVycgpAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Cis8ZC8+CisgICAgXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy90cmFpbGluZy1udWxsLTEueG1sLnN0ciBiL3Jlc3VsdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbC5zdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmYWIzNwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbC5zdHIKQEAgLTAsMCArMSw0IEBACisuL3Rlc3QvZXJyb3JzL3RyYWlsaW5nLW51bGwtMS54bWw6MTogcGFyc2VyIGVycm9yIDogRXh0cmEgY29udGVudCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAorPGQvPgorICAgIF4KKy4vdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbCA6IGZhaWxlZCB0byBwYXJzZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sLmVudCBiL3Jlc3VsdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjNTI1OQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbC5lbnQKQEAgLTAsMCArMSw2IEBACisuL3Rlc3QvZXJyb3JzL3RyYWlsaW5nLW51bGwtMi54bWw6MTogcGFyc2VyIGVycm9yIDogQ2hhciAweDAgb3V0IG9mIGFsbG93ZWQgcmFuZ2UKKzxkPgorICAgXgorLi90ZXN0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sOjE6IHBhcnNlciBlcnJvciA6IFBDREFUQSBpbnZhbGlkIENoYXIgdmFsdWUgMAorPGQ+CisgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3RyYWlsaW5nLW51bGwtMi54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2M1MjU5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sLmVycgpAQCAtMCwwICsxLDYgQEAKKy4vdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBDaGFyIDB4MCBvdXQgb2YgYWxsb3dlZCByYW5nZQorPGQ+CisgICBeCisuL3Rlc3QvZXJyb3JzL3RyYWlsaW5nLW51bGwtMi54bWw6MTogcGFyc2VyIGVycm9yIDogUENEQVRBIGludmFsaWQgQ2hhciB2YWx1ZSAwCis8ZD4KKyAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzL3RyYWlsaW5nLW51bGwtMi54bWwuc3RyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTM5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3RyYWlsaW5nLW51bGwtMi54bWwuc3RyCkBAIC0wLDAgKzEsNyBAQAorLi90ZXN0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sOjE6IHBhcnNlciBlcnJvciA6IENoYXIgMHgwIG91dCBvZiBhbGxvd2VkIHJhbmdlCis8ZD4KKyAgIF4KKy4vdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBQQ0RBVEEgaW52YWxpZCBDaGFyIHZhbHVlIDAKKzxkPgorICAgXgorLi90ZXN0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sIDogZmFpbGVkIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3RydW5jYXRlZC11dGYxNi54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWJlNTNjCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sLmVudApAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvdHJ1bmNhdGVkLXV0ZjE2LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBUcnVuY2F0ZWQgbXVsdGktYnl0ZSBzZXF1ZW5jZSBhdCBFT0YKKzxkLz4KKyAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3RydW5jYXRlZC11dGYxNi54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWJlNTNjCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sLmVycgpAQCAtMCwwICsxLDMgQEAKKy4vdGVzdC9lcnJvcnMvdHJ1bmNhdGVkLXV0ZjE2LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBUcnVuY2F0ZWQgbXVsdGktYnl0ZSBzZXF1ZW5jZSBhdCBFT0YKKzxkLz4KKyAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3RydW5jYXRlZC11dGYxNi54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sLnN0cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDVjNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sLnN0cgpAQCAtMCwwICsxLDQgQEAKKy4vdGVzdC9lcnJvcnMvdHJ1bmNhdGVkLXV0ZjE2LnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBUcnVuY2F0ZWQgbXVsdGktYnl0ZSBzZXF1ZW5jZSBhdCBFT0YKKzxkLz4KKyAgICBeCisuL3Rlc3QvZXJyb3JzL3RydW5jYXRlZC11dGYxNi54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwuZW50IGIvcmVzdWx0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbC5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwMjA1NQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwuZW50CkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnIGQgbGluZSAxCisKK14KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwMjA1NQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwuZXJyCkBAIC0wLDAgKzEsMyBAQAorLi90ZXN0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnIGQgbGluZSAxCisKK14KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwuc3RyIGIvcmVzdWx0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbC5zdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ZjJlNwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwuc3RyCkBAIC0wLDAgKzEsNCBAQAorLi90ZXN0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBQcmVtYXR1cmUgZW5kIG9mIGRhdGEgaW4gdGFnIGQgbGluZSAxCisKK14KKy4vdGVzdC9lcnJvcnMvdW5jbG9zZWQtZWxlbWVudC54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdXRmOC0xLnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMS54bWwuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTJiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMS54bWwuZW50CkBAIC0wLDAgKzEsNiBAQAorLi90ZXN0L2Vycm9ycy91dGY4LTEueG1sOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL3V0ZjgtMS54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi48PAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdXRmOC0xLnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMS54bWwuZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTJiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMS54bWwuZXJyCkBAIC0wLDAgKzEsNiBAQAorLi90ZXN0L2Vycm9ycy91dGY4LTEueG1sOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL3V0ZjgtMS54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi48PAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdXRmOC0xLnhtbC5zdHIgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMS54bWwuc3RyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNmRmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMS54bWwuc3RyCkBAIC0wLDAgKzEsNCBAQAorLi90ZXN0L2Vycm9ycy91dGY4LTEueG1sOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL3Rlc3QvZXJyb3JzL3V0ZjgtMS54bWwgOiBmYWlsZWQgdG8gcGFyc2UKZGlmZiAtLWdpdCBhL3Jlc3VsdC9lcnJvcnMvdXRmOC0yLnhtbC5lbnQgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMi54bWwuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTE3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvZXJyb3JzL3V0ZjgtMi54bWwuZW50CkBAIC0wLDAgKzEsNiBAQAorLi90ZXN0L2Vycm9ycy91dGY4LTIueG1sOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQorPGQ+Ljw84oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKsCisgICAgIF4KKy4vdGVzdC9lcnJvcnMvdXRmOC0yLnhtbDoyOiBwYXJzZXIgZXJyb3IgOiBDb3VsZG4ndCBmaW5kIGVuZCBvZiBTdGFydCBUYWcg4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKs4oKsIGxpbmUgMQorCiteCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzL3V0ZjgtMi54bWwuZXJyIGIvcmVzdWx0L2Vycm9ycy91dGY4LTIueG1sLmVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGUxNzIyCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2Vycm9ycy91dGY4LTIueG1sLmVycgpAQCAtMCwwICsxLDYgQEAKKy4vdGVzdC9lcnJvcnMvdXRmOC0yLnhtbDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydFRhZzogaW52YWxpZCBlbGVtZW50IG5hbWUKKzxkPi48POKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrAorICAgICBeCisuL3Rlc3QvZXJyb3JzL3V0ZjgtMi54bWw6MjogcGFyc2VyIGVycm9yIDogQ291bGRuJ3QgZmluZCBlbmQgb2YgU3RhcnQgVGFnIOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrCBsaW5lIDEKKworXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9ycy91dGY4LTIueG1sLnN0ciBiL3Jlc3VsdC9lcnJvcnMvdXRmOC0yLnhtbC5zdHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkYjdmNwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9lcnJvcnMvdXRmOC0yLnhtbC5zdHIKQEAgLTAsMCArMSw0IEBACisuL3Rlc3QvZXJyb3JzL3V0ZjgtMi54bWw6MTogcGFyc2VyIGVycm9yIDogU3RhcnRUYWc6IGludmFsaWQgZWxlbWVudCBuYW1lCis8ZD4uPDzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqzigqwKKyAgICAgXgorLi90ZXN0L2Vycm9ycy91dGY4LTIueG1sIDogZmFpbGVkIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9yZXN1bHQvZXJyb3JzMTAvNzgxMjA1LnhtbC5lcnIgYi9yZXN1bHQvZXJyb3JzMTAvNzgxMjA1LnhtbC5lcnIKaW5kZXggM2RkYzIwMy4uZjRlMDg5MiAxMDA2NDQKLS0tIGEvcmVzdWx0L2Vycm9yczEwLzc4MTIwNS54bWwuZXJyCisrKyBiL3Jlc3VsdC9lcnJvcnMxMC83ODEyMDUueG1sLmVycgpAQCAtNSwxMyArNSwzIEBACiBFbnRpdHk6IGxpbmUgMTogCiA8OjAwMDAKIF4KLS4vdGVzdC9lcnJvcnMxMC83ODEyMDUueG1sOjQ6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KLQotCi1eCi0uL3Rlc3QvZXJyb3JzMTAvNzgxMjA1LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBET0NUWVBFIGltcHJvcGVybHkgdGVybWluYXRlZAotCi1eCi0uL3Rlc3QvZXJyb3JzMTAvNzgxMjA1LnhtbDo0OiBwYXJzZXIgZXJyb3IgOiBTdGFydCB0YWcgZXhwZWN0ZWQsICc8JyBub3QgZm91bmQKLQotXgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2Vycm9yczEwLzc4MTM2MS54bWwuZXJyIGIvcmVzdWx0L2Vycm9yczEwLzc4MTM2MS54bWwuZXJyCmluZGV4IDY1NWY0MWEuLjYxNTNjYzkgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9lcnJvcnMxMC83ODEzNjEueG1sLmVycgorKysgYi9yZXN1bHQvZXJyb3JzMTAvNzgxMzYxLnhtbC5lcnIKQEAgLTUsOSArNSwzIEBACiAKIAogXgotLi90ZXN0L2Vycm9yczEwLzc4MTM2MS54bWw6NDogcGFyc2VyIGVycm9yIDogRE9DVFlQRSBpbXByb3Blcmx5IHRlcm1pbmF0ZWQKLQotXgotLi90ZXN0L2Vycm9yczEwLzc4MTM2MS54bWw6NDogcGFyc2VyIGVycm9yIDogU3RhcnQgdGFnIGV4cGVjdGVkLCAnPCcgbm90IGZvdW5kCi0KLV4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9pc3N1ZTYyNi54bWwgYi9yZXN1bHQvaXNzdWU2MjYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMWIzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvaXNzdWU2MjYueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGRvYyBbCis8IUFUVExJU1QgZSBhMSBDREFUQSAjSU1QTElFRD4KKzwhQVRUTElTVCBlIGEyIENEQVRBICNJTVBMSUVEPgorPCFBVFRMSVNUIGUgYTMgQ0RBVEEgI0lNUExJRUQ+Cis8IUFUVExJU1QgZSBhNCBDREFUQSAjSU1QTElFRD4KKzwhQVRUTElTVCBlIGE1IENEQVRBICNJTVBMSUVEPgorPCFBVFRMSVNUIGUgYTYgQ0RBVEEgI0lNUExJRUQ+CitdPgorPGRvYz4KKyAgICA8IS0tIFRoaXMgdGVzdHMgd2hldGhlciB4bWxDbGVhblNwZWNpYWxBdHRyIHdvcmtzLiBUaGUgYXR0cmlidXRlIHZhbHVlcworICAgICAgICAgbXVzdCBub3QgYmUgbm9ybWFsaXplZC4gLS0+CisgICAgPGUgYTE9IiB4ICB4ICIgYTI9IiB4ICB4ICIgYTM9IiB4ICB4ICIgYTQ9IiB4ICB4ICIgYTU9IiB4ICB4ICIgYTY9IiB4ICB4ICIvPgorPC9kb2M+CmRpZmYgLS1naXQgYS9yZXN1bHQvaXNzdWU2MjYueG1sLnJkZSBiL3Jlc3VsdC9pc3N1ZTYyNi54bWwucmRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODgyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvaXNzdWU2MjYueG1sLnJkZQpAQCAtMCwwICsxLDEyIEBACiswIDEwIGRvYyAwIDAKKzAgMSBkb2MgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgOCAjY29tbWVudCAwIDEgIFRoaXMgdGVzdHMgd2hldGhlciB4bWxDbGVhblNwZWNpYWxBdHRyIHdvcmtzLiBUaGUgYXR0cmlidXRlIHZhbHVlcworICAgICAgICAgbXVzdCBub3QgYmUgbm9ybWFsaXplZC4gCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBlIDEgMAorMSAxNCAjdGV4dCAwIDEgCisKKzAgMTUgZG9jIDAgMApkaWZmIC0tZ2l0IGEvcmVzdWx0L2lzc3VlNjI2LnhtbC5yZHIgYi9yZXN1bHQvaXNzdWU2MjYueG1sLnJkcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg4MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2lzc3VlNjI2LnhtbC5yZHIKQEAgLTAsMCArMSwxMiBAQAorMCAxMCBkb2MgMCAwCiswIDEgZG9jIDAgMAorMSAxNCAjdGV4dCAwIDEgCisgICAgCisxIDggI2NvbW1lbnQgMCAxICBUaGlzIHRlc3RzIHdoZXRoZXIgeG1sQ2xlYW5TcGVjaWFsQXR0ciB3b3Jrcy4gVGhlIGF0dHJpYnV0ZSB2YWx1ZXMKKyAgICAgICAgIG11c3Qgbm90IGJlIG5vcm1hbGl6ZWQuIAorMSAxNCAjdGV4dCAwIDEgCisgICAgCisxIDEgZSAxIDAKKzEgMTQgI3RleHQgMCAxIAorCiswIDE1IGRvYyAwIDAKZGlmZiAtLWdpdCBhL3Jlc3VsdC9pc3N1ZTYyNi54bWwuc2F4IGIvcmVzdWx0L2lzc3VlNjI2LnhtbC5zYXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2YjU5YgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9pc3N1ZTYyNi54bWwuc2F4CkBAIC0wLDAgKzEsMjMgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLmludGVybmFsU3Vic2V0KGRvYywgLCApCitTQVguYXR0cmlidXRlRGVjbChlLCBhMSwgMSwgMywgTlVMTCwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZSwgYTIsIDEsIDMsIE5VTEwsIC4uLikKK1NBWC5hdHRyaWJ1dGVEZWNsKGUsIGEzLCAxLCAzLCBOVUxMLCAuLi4pCitTQVguYXR0cmlidXRlRGVjbChlLCBhNCwgMSwgMywgTlVMTCwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZSwgYTUsIDEsIDMsIE5VTEwsIC4uLikKK1NBWC5hdHRyaWJ1dGVEZWNsKGUsIGE2LCAxLCAzLCBOVUxMLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5zdGFydEVsZW1lbnQoZG9jKQorU0FYLmNoYXJhY3RlcnMoCisgICAgLCA1KQorU0FYLmNvbW1lbnQoIFRoaXMgdGVzdHMgd2hldGhlciB4bWxDbGVhblNwZWNpYWxBdHRyIHdvcmtzLiBUaGUgYXR0cmlidXRlIHZhbHVlcworICAgICAgICAgbXVzdCBub3QgYmUgbm9ybWFsaXplZC4gKQorU0FYLmNoYXJhY3RlcnMoCisgICAgLCA1KQorU0FYLnN0YXJ0RWxlbWVudChlLCBhMT0nIHggIHggJywgYTI9JyB4ICB4ICcsIGEzPScgeCAgeCAnLCBhND0nIHggIHggJywgYTU9JyB4ICB4ICcsIGE2PScgeCAgeCAnKQorU0FYLmVuZEVsZW1lbnQoZSkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnQoZG9jKQorU0FYLmVuZERvY3VtZW50KCkKZGlmZiAtLWdpdCBhL3Jlc3VsdC9pc3N1ZTYyNi54bWwuc2F4MiBiL3Jlc3VsdC9pc3N1ZTYyNi54bWwuc2F4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGMyYzFmCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2lzc3VlNjI2LnhtbC5zYXgyCkBAIC0wLDAgKzEsMjMgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLmludGVybmFsU3Vic2V0KGRvYywgLCApCitTQVguYXR0cmlidXRlRGVjbChlLCBhMSwgMSwgMywgTlVMTCwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZSwgYTIsIDEsIDMsIE5VTEwsIC4uLikKK1NBWC5hdHRyaWJ1dGVEZWNsKGUsIGEzLCAxLCAzLCBOVUxMLCAuLi4pCitTQVguYXR0cmlidXRlRGVjbChlLCBhNCwgMSwgMywgTlVMTCwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZSwgYTUsIDEsIDMsIE5VTEwsIC4uLikKK1NBWC5hdHRyaWJ1dGVEZWNsKGUsIGE2LCAxLCAzLCBOVUxMLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyhkb2MsIE5VTEwsIE5VTEwsIDAsIDAsIDApCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguY29tbWVudCggVGhpcyB0ZXN0cyB3aGV0aGVyIHhtbENsZWFuU3BlY2lhbEF0dHIgd29ya3MuIFRoZSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgICBtdXN0IG5vdCBiZSBub3JtYWxpemVkLiApCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50TnMoZSwgTlVMTCwgTlVMTCwgMCwgNiwgMCwgYTE9JyB4ICAuLi4nLCA2LCBhMj0nIHggIC4uLicsIDYsIGEzPScgeCAgLi4uJywgNiwgYTQ9JyB4ICAuLi4nLCA2LCBhNT0nIHggIC4uLicsIDYsIGE2PScgeCAgLi4uJywgNikKK1NBWC5lbmRFbGVtZW50TnMoZSwgTlVMTCwgTlVMTCkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnROcyhkb2MsIE5VTEwsIE5VTEwpCitTQVguZW5kRG9jdW1lbnQoKQpkaWZmIC0tZ2l0IGEvcmVzdWx0L2lzc3VlNjQzLnhtbCBiL3Jlc3VsdC9pc3N1ZTY0My54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1YTkyYwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9pc3N1ZTY0My54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBkb2MgWworPCFBVFRMSVNUIGVsZW0geG1sbnMgQ0RBVEEgI0ZJWEVEICJ1cm46ZGVmMiI+Cis8IUFUVExJU1QgZWxlbSB4bWxuczphIENEQVRBICNGSVhFRCAidXJuOmEyIj4KK10+Cis8ZG9jIHhtbG5zPSJ1cm46ZGVmIiB4bWxuczphPSJ1cm46YSI+CisgICAgPGVsZW0geG1sbnM9InVybjpkZWYyIiB4bWxuczphPSJ1cm46YTIiLz4KKzwvZG9jPgpkaWZmIC0tZ2l0IGEvcmVzdWx0L2lzc3VlNjQzLnhtbC5yZGUgYi9yZXN1bHQvaXNzdWU2NDMueG1sLnJkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGNhMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2lzc3VlNjQzLnhtbC5yZGUKQEAgLTAsMCArMSw4IEBACiswIDEwIGRvYyAwIDAKKzAgMSBkb2MgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBlbGVtIDEgMAorMSAxNCAjdGV4dCAwIDEgCisKKzAgMTUgZG9jIDAgMApkaWZmIC0tZ2l0IGEvcmVzdWx0L2lzc3VlNjQzLnhtbC5yZHIgYi9yZXN1bHQvaXNzdWU2NDMueG1sLnJkcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGNhMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2lzc3VlNjQzLnhtbC5yZHIKQEAgLTAsMCArMSw4IEBACiswIDEwIGRvYyAwIDAKKzAgMSBkb2MgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBlbGVtIDEgMAorMSAxNCAjdGV4dCAwIDEgCisKKzAgMTUgZG9jIDAgMApkaWZmIC0tZ2l0IGEvcmVzdWx0L2lzc3VlNjQzLnhtbC5zYXggYi9yZXN1bHQvaXNzdWU2NDMueG1sLnNheApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTU2M2I5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L2lzc3VlNjQzLnhtbC5zYXgKQEAgLTAsMCArMSwxNSBAQAorU0FYLnNldERvY3VtZW50TG9jYXRvcigpCitTQVguc3RhcnREb2N1bWVudCgpCitTQVguaW50ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5hdHRyaWJ1dGVEZWNsKGVsZW0sIHhtbG5zLCAxLCA0LCB1cm46ZGVmMiwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZWxlbSwgeG1sbnM6YSwgMSwgNCwgdXJuOmEyLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5zdGFydEVsZW1lbnQoZG9jLCB4bWxucz0ndXJuOmRlZicsIHhtbG5zOmE9J3VybjphJykKK1NBWC5jaGFyYWN0ZXJzKAorICAgICwgNSkKK1NBWC5zdGFydEVsZW1lbnQoZWxlbSkKK1NBWC5lbmRFbGVtZW50KGVsZW0pCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5lbmRFbGVtZW50KGRvYykKK1NBWC5lbmREb2N1bWVudCgpCmRpZmYgLS1naXQgYS9yZXN1bHQvaXNzdWU2NDMueG1sLnNheDIgYi9yZXN1bHQvaXNzdWU2NDMueG1sLnNheDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3ZTVmMQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9pc3N1ZTY0My54bWwuc2F4MgpAQCAtMCwwICsxLDE1IEBACitTQVguc2V0RG9jdW1lbnRMb2NhdG9yKCkKK1NBWC5zdGFydERvY3VtZW50KCkKK1NBWC5pbnRlcm5hbFN1YnNldChkb2MsICwgKQorU0FYLmF0dHJpYnV0ZURlY2woZWxlbSwgeG1sbnMsIDEsIDQsIHVybjpkZWYyLCAuLi4pCitTQVguYXR0cmlidXRlRGVjbChlbGVtLCB4bWxuczphLCAxLCA0LCB1cm46YTIsIC4uLikKK1NBWC5leHRlcm5hbFN1YnNldChkb2MsICwgKQorU0FYLnN0YXJ0RWxlbWVudE5zKGRvYywgTlVMTCwgJ3VybjpkZWYnLCAyLCB4bWxucz0ndXJuOmRlZicsIHhtbG5zOmE9J3VybjphJywgMCwgMCkKK1NBWC5jaGFyYWN0ZXJzKAorICAgICwgNSkKK1NBWC5zdGFydEVsZW1lbnROcyhlbGVtLCBOVUxMLCAndXJuOmRlZjInLCAyLCB4bWxucz0ndXJuOmRlZjInLCB4bWxuczphPSd1cm46YTInLCAwLCAwKQorU0FYLmVuZEVsZW1lbnROcyhlbGVtLCBOVUxMLCAndXJuOmRlZjInKQorU0FYLmNoYXJhY3RlcnMoCissIDEpCitTQVguZW5kRWxlbWVudE5zKGRvYywgTlVMTCwgJ3VybjpkZWYnKQorU0FYLmVuZERvY3VtZW50KCkKZGlmZiAtLWdpdCBhL3Jlc3VsdC9uYW1lc3BhY2VzL2Vycl81LnhtbC5lcnIgYi9yZXN1bHQvbmFtZXNwYWNlcy9lcnJfNS54bWwuZXJyCmluZGV4IDQzMmEyZTEuLjM4MDFmNjEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9uYW1lc3BhY2VzL2Vycl81LnhtbC5lcnIKKysrIGIvcmVzdWx0L25hbWVzcGFjZXMvZXJyXzUueG1sLmVycgpAQCAtMSwzICsxLDMgQEAKIC4vdGVzdC9uYW1lc3BhY2VzL2Vycl81LnhtbDoxOiBuYW1lc3BhY2UgZXJyb3IgOiBGYWlsZWQgdG8gcGFyc2UgUU5hbWUgJ2Y6YTonCiA8ZjphOiB4bWxuczpmPSJodHRwOi8vZXhhbXBsZS5jb20vZm9vIi8+Ci0gICAgXgorICAgICBeCmRpZmYgLS1naXQgYS9yZXN1bHQvbmFtZXNwYWNlcy9lcnJfNi54bWwuZXJyIGIvcmVzdWx0L25hbWVzcGFjZXMvZXJyXzYueG1sLmVycgppbmRleCA0N2MxNGZkLi44ZTkwZmNiIDEwMDY0NAotLS0gYS9yZXN1bHQvbmFtZXNwYWNlcy9lcnJfNi54bWwuZXJyCisrKyBiL3Jlc3VsdC9uYW1lc3BhY2VzL2Vycl82LnhtbC5lcnIKQEAgLTEsMyArMSwzIEBACi0uL3Rlc3QvbmFtZXNwYWNlcy9lcnJfNi54bWw6MTogbmFtZXNwYWNlIGVycm9yIDogRmFpbGVkIHRvIHBhcnNlIFFOYW1lICdmOmE6JworLi90ZXN0L25hbWVzcGFjZXMvZXJyXzYueG1sOjE6IG5hbWVzcGFjZSBlcnJvciA6IEZhaWxlZCB0byBwYXJzZSBRTmFtZSAnZjphOmInCiA8ZjphOmIgeG1sbnM6Zj0iaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIvPgotICAgIF4KKyAgICAgIF4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9ub2VudC9ib3VuZGFyaWVzMS54bWwgYi9yZXN1bHQvbm9lbnQvYm91bmRhcmllczEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjA4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvbm9lbnQvYm91bmRhcmllczEueG1sCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGQgWworPCFFTlRJVFkgYSAiXT4iPgorPCFFTlRJVFkgYiAiXT4iPgorPCEtLT4gXT4gLS0+XT4KKzw/cGkgcDE/PgorPCEtLT4gYzEgLS0+Cis8ZCBhPSImZ3Q7IiBiPSImZ3Q7Ij4KK3RleHRdJmd0O3RleHQKKzwhW0NEQVRBW2NkYXRhXV0+Cis8P3BpIHAyPz4KKzwhLS0+IGMyIC0tPgorPC9kPgorPD9waSBwMz8+Cis8IS0tPiBjMyAtLT4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9ub2VudC9ib3VuZGFyaWVzMS54bWwuc2F4MiBiL3Jlc3VsdC9ub2VudC9ib3VuZGFyaWVzMS54bWwuc2F4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhYzNiCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L25vZW50L2JvdW5kYXJpZXMxLnhtbC5zYXgyCkBAIC0wLDAgKzEsMzIgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLmludGVybmFsU3Vic2V0KGQsICwgKQorU0FYLmVudGl0eURlY2woYSwgMSwgKG51bGwpLCAobnVsbCksIF0+KQorU0FYLmdldEVudGl0eShhKQorU0FYLmVudGl0eURlY2woYiwgMSwgKG51bGwpLCAobnVsbCksIF0+KQorU0FYLmdldEVudGl0eShiKQorU0FYLmNvbW1lbnQoPiBdPiApCitTQVguZXh0ZXJuYWxTdWJzZXQoZCwgLCApCitTQVgucHJvY2Vzc2luZ0luc3RydWN0aW9uKHBpLCBwMSkKK1NBWC5jb21tZW50KD4gYzEgKQorU0FYLnN0YXJ0RWxlbWVudE5zKGQsIE5VTEwsIE5VTEwsIDAsIDIsIDAsIGE9Jz4iIGIuLi4nLCAxLCBiPSc+Jz4KKy4uLicsIDEpCitTQVguY2hhcmFjdGVycygKK3RleHQsIDUpCitTQVguZ2V0RW50aXR5KGEpCitTQVguY2hhcmFjdGVycyhdPiwgMikKK1NBWC5jaGFyYWN0ZXJzKHRleHQKKywgNSkKK1NBWC5wY2RhdGEoY2RhdGEsIDUpCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGksIHAyKQorU0FYLmNoYXJhY3RlcnMoCissIDEpCitTQVguY29tbWVudCg+IGMyICkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnROcyhkLCBOVUxMLCBOVUxMKQorU0FYLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihwaSwgcDMpCitTQVguY29tbWVudCg+IGMzICkKK1NBWC5lbmREb2N1bWVudCgpCmRpZmYgLS1naXQgYS9yZXN1bHQvbm9lbnQvZW50Ny5zYXgyIGIvcmVzdWx0L25vZW50L2VudDcuc2F4MgppbmRleCAzMjI4ZGUzLi4zZDBlNjM0IDEwMDY0NAotLS0gYS9yZXN1bHQvbm9lbnQvZW50Ny5zYXgyCisrKyBiL3Jlc3VsdC9ub2VudC9lbnQ3LnNheDIKQEAgLTcsMTEgKzcsMTUgQEAKIFNBWC5lbnRpdHlEZWNsKHNhbXBsZUVudCwgMSwgKG51bGwpLCAobnVsbCksIHRoZSBoeWFjaW50aCBnaXJsKQogU0FYLmdldEVudGl0eShzYW1wbGVFbnQpCiBTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHNhbXBsZUVudCkKLVNBWC5lcnJvcjogUEVSZWZlcmVuY2U6ICVzYW1wbGVFbnQ7IG5vdCBmb3VuZAorU0FYLmVsZW1lbnREZWNsKGl0ZW0sIDQsIC4uLikKK1NBWC5lbGVtZW50RGVjbChwYXJhLCAzLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoaXRlbSwgLCApCitTQVguc3RhcnRFbGVtZW50TnMoaXRlbSwgTlVMTCwgTlVMTCwgMCwgMCwgMCkKK1NBWC5zdGFydEVsZW1lbnROcyhwYXJhLCBOVUxMLCBOVUxMLCAwLCAwLCAwKQogU0FYLmNoYXJhY3RlcnMoJ3RoZXkgY2FsbGVkIG1lICwgMTYpCiBTQVguZ2V0RW50aXR5KHNhbXBsZUVudCkKLVNBWC5lcnJvcjogRW50aXR5ICdzYW1wbGVFbnQnIG5vdCBkZWZpbmVkCi1TQVgucmVmZXJlbmNlKHNhbXBsZUVudCkKK1NBWC5jaGFyYWN0ZXJzKHRoZSBoeWFjaW50aCBnaXJsLCAxNykKIFNBWC5jaGFyYWN0ZXJzKCcsIDEpCitTQVguZW5kRWxlbWVudE5zKHBhcmEsIE5VTEwsIE5VTEwpCitTQVguZW5kRWxlbWVudE5zKGl0ZW0sIE5VTEwsIE5VTEwpCiBTQVguZW5kRG9jdW1lbnQoKQoteG1sU0FYVXNlclBhcnNlRmlsZSByZXR1cm5lZCBlcnJvciAyNwpkaWZmIC0tZ2l0IGEvcmVzdWx0L25vZW50L2lzc3VlNjI2LnhtbCBiL3Jlc3VsdC9ub2VudC9pc3N1ZTYyNi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxYjNkOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9ub2VudC9pc3N1ZTYyNi54bWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgZG9jIFsKKzwhQVRUTElTVCBlIGExIENEQVRBICNJTVBMSUVEPgorPCFBVFRMSVNUIGUgYTIgQ0RBVEEgI0lNUExJRUQ+Cis8IUFUVExJU1QgZSBhMyBDREFUQSAjSU1QTElFRD4KKzwhQVRUTElTVCBlIGE0IENEQVRBICNJTVBMSUVEPgorPCFBVFRMSVNUIGUgYTUgQ0RBVEEgI0lNUExJRUQ+Cis8IUFUVExJU1QgZSBhNiBDREFUQSAjSU1QTElFRD4KK10+Cis8ZG9jPgorICAgIDwhLS0gVGhpcyB0ZXN0cyB3aGV0aGVyIHhtbENsZWFuU3BlY2lhbEF0dHIgd29ya3MuIFRoZSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgICBtdXN0IG5vdCBiZSBub3JtYWxpemVkLiAtLT4KKyAgICA8ZSBhMT0iIHggIHggIiBhMj0iIHggIHggIiBhMz0iIHggIHggIiBhND0iIHggIHggIiBhNT0iIHggIHggIiBhNj0iIHggIHggIi8+Cis8L2RvYz4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9ub2VudC9pc3N1ZTYyNi54bWwuc2F4MiBiL3Jlc3VsdC9ub2VudC9pc3N1ZTYyNi54bWwuc2F4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGMyYzFmCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L25vZW50L2lzc3VlNjI2LnhtbC5zYXgyCkBAIC0wLDAgKzEsMjMgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLmludGVybmFsU3Vic2V0KGRvYywgLCApCitTQVguYXR0cmlidXRlRGVjbChlLCBhMSwgMSwgMywgTlVMTCwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZSwgYTIsIDEsIDMsIE5VTEwsIC4uLikKK1NBWC5hdHRyaWJ1dGVEZWNsKGUsIGEzLCAxLCAzLCBOVUxMLCAuLi4pCitTQVguYXR0cmlidXRlRGVjbChlLCBhNCwgMSwgMywgTlVMTCwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZSwgYTUsIDEsIDMsIE5VTEwsIC4uLikKK1NBWC5hdHRyaWJ1dGVEZWNsKGUsIGE2LCAxLCAzLCBOVUxMLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyhkb2MsIE5VTEwsIE5VTEwsIDAsIDAsIDApCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguY29tbWVudCggVGhpcyB0ZXN0cyB3aGV0aGVyIHhtbENsZWFuU3BlY2lhbEF0dHIgd29ya3MuIFRoZSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgICBtdXN0IG5vdCBiZSBub3JtYWxpemVkLiApCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50TnMoZSwgTlVMTCwgTlVMTCwgMCwgNiwgMCwgYTE9JyB4ICAuLi4nLCA2LCBhMj0nIHggIC4uLicsIDYsIGEzPScgeCAgLi4uJywgNiwgYTQ9JyB4ICAuLi4nLCA2LCBhNT0nIHggIC4uLicsIDYsIGE2PScgeCAgLi4uJywgNikKK1NBWC5lbmRFbGVtZW50TnMoZSwgTlVMTCwgTlVMTCkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnROcyhkb2MsIE5VTEwsIE5VTEwpCitTQVguZW5kRG9jdW1lbnQoKQpkaWZmIC0tZ2l0IGEvcmVzdWx0L25vZW50L2lzc3VlNjQzLnhtbCBiL3Jlc3VsdC9ub2VudC9pc3N1ZTY0My54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1YTkyYwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9ub2VudC9pc3N1ZTY0My54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBkb2MgWworPCFBVFRMSVNUIGVsZW0geG1sbnMgQ0RBVEEgI0ZJWEVEICJ1cm46ZGVmMiI+Cis8IUFUVExJU1QgZWxlbSB4bWxuczphIENEQVRBICNGSVhFRCAidXJuOmEyIj4KK10+Cis8ZG9jIHhtbG5zPSJ1cm46ZGVmIiB4bWxuczphPSJ1cm46YSI+CisgICAgPGVsZW0geG1sbnM9InVybjpkZWYyIiB4bWxuczphPSJ1cm46YTIiLz4KKzwvZG9jPgpkaWZmIC0tZ2l0IGEvcmVzdWx0L25vZW50L2lzc3VlNjQzLnhtbC5zYXgyIGIvcmVzdWx0L25vZW50L2lzc3VlNjQzLnhtbC5zYXgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkN2U1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvbm9lbnQvaXNzdWU2NDMueG1sLnNheDIKQEAgLTAsMCArMSwxNSBAQAorU0FYLnNldERvY3VtZW50TG9jYXRvcigpCitTQVguc3RhcnREb2N1bWVudCgpCitTQVguaW50ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5hdHRyaWJ1dGVEZWNsKGVsZW0sIHhtbG5zLCAxLCA0LCB1cm46ZGVmMiwgLi4uKQorU0FYLmF0dHJpYnV0ZURlY2woZWxlbSwgeG1sbnM6YSwgMSwgNCwgdXJuOmEyLCAuLi4pCitTQVguZXh0ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyhkb2MsIE5VTEwsICd1cm46ZGVmJywgMiwgeG1sbnM9J3VybjpkZWYnLCB4bWxuczphPSd1cm46YScsIDAsIDApCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50TnMoZWxlbSwgTlVMTCwgJ3VybjpkZWYyJywgMiwgeG1sbnM9J3VybjpkZWYyJywgeG1sbnM6YT0ndXJuOmEyJywgMCwgMCkKK1NBWC5lbmRFbGVtZW50TnMoZWxlbSwgTlVMTCwgJ3VybjpkZWYyJykKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnROcyhkb2MsIE5VTEwsICd1cm46ZGVmJykKK1NBWC5lbmREb2N1bWVudCgpCmRpZmYgLS1naXQgYS9yZXN1bHQvbm9lbnQvbnMtZW50LnhtbCBiL3Jlc3VsdC9ub2VudC9ucy1lbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDJlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvbm9lbnQvbnMtZW50LnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBkb2MgWworPCFFTlRJVFkgZW50MSAiPGVsZW0vPiI+Cis8IUVOVElUWSBlbnQyICI8bnM6ZWxlbS8+Ij4KK10+Cis8ZG9jPgorICAgIDxhIHhtbG5zPSJ1cm46YSI+PGVsZW0vPjwvYT4KKyAgICA8YiB4bWxucz0idXJuOmIiPjxlbGVtLz48L2I+CisgICAgPGEgeG1sbnM6bnM9InVybjphIj48ZWxlbS8+PC9hPgorICAgIDxiIHhtbG5zOm5zPSJ1cm46YiI+PGVsZW0vPjwvYj4KKzwvZG9jPgpkaWZmIC0tZ2l0IGEvcmVzdWx0L25vZW50L25zLWVudC54bWwuc2F4MiBiL3Jlc3VsdC9ub2VudC9ucy1lbnQueG1sLnNheDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMDBhZQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9ub2VudC9ucy1lbnQueG1sLnNheDIKQEAgLTAsMCArMSw0MSBAQAorU0FYLnNldERvY3VtZW50TG9jYXRvcigpCitTQVguc3RhcnREb2N1bWVudCgpCitTQVguaW50ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5lbnRpdHlEZWNsKGVudDEsIDEsIChudWxsKSwgKG51bGwpLCA8ZWxlbS8+KQorU0FYLmdldEVudGl0eShlbnQxKQorU0FYLmVudGl0eURlY2woZW50MiwgMSwgKG51bGwpLCAobnVsbCksIDxuczplbGVtLz4pCitTQVguZ2V0RW50aXR5KGVudDIpCitTQVguZXh0ZXJuYWxTdWJzZXQoZG9jLCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyhkb2MsIE5VTEwsIE5VTEwsIDAsIDAsIDApCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50TnMoYSwgTlVMTCwgJ3VybjphJywgMSwgeG1sbnM9J3VybjphJywgMCwgMCkKK1NBWC5nZXRFbnRpdHkoZW50MSkKK1NBWC5zdGFydEVsZW1lbnROcyhlbGVtLCBOVUxMLCAndXJuOmEnLCAwLCAwLCAwKQorU0FYLmVuZEVsZW1lbnROcyhlbGVtLCBOVUxMLCAndXJuOmEnKQorU0FYLmVuZEVsZW1lbnROcyhhLCBOVUxMLCAndXJuOmEnKQorU0FYLmNoYXJhY3RlcnMoCisgICAgLCA1KQorU0FYLnN0YXJ0RWxlbWVudE5zKGIsIE5VTEwsICd1cm46YicsIDEsIHhtbG5zPSd1cm46YicsIDAsIDApCitTQVguZ2V0RW50aXR5KGVudDEpCitTQVguc3RhcnRFbGVtZW50TnMoZWxlbSwgTlVMTCwgJ3VybjpiJywgMCwgMCwgMCkKK1NBWC5lbmRFbGVtZW50TnMoZWxlbSwgTlVMTCwgJ3VybjpiJykKK1NBWC5lbmRFbGVtZW50TnMoYiwgTlVMTCwgJ3VybjpiJykKK1NBWC5jaGFyYWN0ZXJzKAorICAgICwgNSkKK1NBWC5zdGFydEVsZW1lbnROcyhhLCBOVUxMLCBOVUxMLCAxLCB4bWxuczpucz0ndXJuOmEnLCAwLCAwKQorU0FYLmdldEVudGl0eShlbnQyKQorU0FYLnN0YXJ0RWxlbWVudE5zKGVsZW0sIG5zLCAndXJuOmEnLCAwLCAwLCAwKQorU0FYLmVuZEVsZW1lbnROcyhlbGVtLCBucywgJ3VybjphJykKK1NBWC5lbmRFbGVtZW50TnMoYSwgTlVMTCwgTlVMTCkKK1NBWC5jaGFyYWN0ZXJzKAorICAgICwgNSkKK1NBWC5zdGFydEVsZW1lbnROcyhiLCBOVUxMLCBOVUxMLCAxLCB4bWxuczpucz0ndXJuOmInLCAwLCAwKQorU0FYLmdldEVudGl0eShlbnQyKQorU0FYLnN0YXJ0RWxlbWVudE5zKGVsZW0sIG5zLCAndXJuOmInLCAwLCAwLCAwKQorU0FYLmVuZEVsZW1lbnROcyhlbGVtLCBucywgJ3VybjpiJykKK1NBWC5lbmRFbGVtZW50TnMoYiwgTlVMTCwgTlVMTCkKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnROcyhkb2MsIE5VTEwsIE5VTEwpCitTQVguZW5kRG9jdW1lbnQoKQpkaWZmIC0tZ2l0IGEvcmVzdWx0L25vZW50L3htbDIuc2F4MiBiL3Jlc3VsdC9ub2VudC94bWwyLnNheDIKaW5kZXggMTQxYWNjZC4uODkzMmY5OSAxMDA2NDQKLS0tIGEvcmVzdWx0L25vZW50L3htbDIuc2F4MgorKysgYi9yZXN1bHQvbm9lbnQveG1sMi5zYXgyCkBAIC04LDExICs4LDE0IEBACiBTQVguZW50aXR5RGVjbCh6eiwgNCwgKG51bGwpLCAobnVsbCksIDwhRU5USVRZIHRyaWNreSAiZXJyb3ItcHJvbmUiID4pCiBTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHp6KQogU0FYLmdldFBhcmFtZXRlckVudGl0eSh4eCkKLVNBWC5lcnJvcjogUEVSZWZlcmVuY2U6ICV4eDsgbm90IGZvdW5kCitTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHp6KQorU0FYLmVudGl0eURlY2wodHJpY2t5LCAxLCAobnVsbCksIChudWxsKSwgZXJyb3ItcHJvbmUpCitTQVguZ2V0RW50aXR5KHRyaWNreSkKK1NBWC5leHRlcm5hbFN1YnNldCh0ZXN0LCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyh0ZXN0LCBOVUxMLCBOVUxMLCAwLCAwLCAwKQogU0FYLmNoYXJhY3RlcnMoVGhpcyBzYW1wbGUgc2hvd3MgYSAsIDIwKQogU0FYLmdldEVudGl0eSh0cmlja3kpCi1TQVguZXJyb3I6IEVudGl0eSAndHJpY2t5JyBub3QgZGVmaW5lZAotU0FYLnJlZmVyZW5jZSh0cmlja3kpCitTQVguY2hhcmFjdGVycyhlcnJvci1wcm9uZSwgMTEpCiBTQVguY2hhcmFjdGVycyggbWV0aG9kLiwgOCkKK1NBWC5lbmRFbGVtZW50TnModGVzdCwgTlVMTCwgTlVMTCkKIFNBWC5lbmREb2N1bWVudCgpCi14bWxTQVhVc2VyUGFyc2VGaWxlIHJldHVybmVkIGVycm9yIDI3CmRpZmYgLS1naXQgYS9yZXN1bHQvbnMtZW50LnhtbCBiL3Jlc3VsdC9ucy1lbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Zjg5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvbnMtZW50LnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBkb2MgWworPCFFTlRJVFkgZW50MSAiPGVsZW0vPiI+Cis8IUVOVElUWSBlbnQyICI8bnM6ZWxlbS8+Ij4KK10+Cis8ZG9jPgorICAgIDxhIHhtbG5zPSJ1cm46YSI+JmVudDE7PC9hPgorICAgIDxiIHhtbG5zPSJ1cm46YiI+JmVudDE7PC9iPgorICAgIDxhIHhtbG5zOm5zPSJ1cm46YSI+JmVudDI7PC9hPgorICAgIDxiIHhtbG5zOm5zPSJ1cm46YiI+JmVudDI7PC9iPgorPC9kb2M+CmRpZmYgLS1naXQgYS9yZXN1bHQvbnMtZW50LnhtbC5yZGUgYi9yZXN1bHQvbnMtZW50LnhtbC5yZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3OWVhYQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9ucy1lbnQueG1sLnJkZQpAQCAtMCwwICsxLDI1IEBACiswIDEwIGRvYyAwIDAKKzAgMSBkb2MgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBhIDAgMAorMiAxIGVsZW0gMSAwCisxIDE1IGEgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBiIDAgMAorMiAxIGVsZW0gMSAwCisxIDE1IGIgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBhIDAgMAorMiAxIGVsZW0gMSAwCisxIDE1IGEgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBiIDAgMAorMiAxIGVsZW0gMSAwCisxIDE1IGIgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKworMCAxNSBkb2MgMCAwCmRpZmYgLS1naXQgYS9yZXN1bHQvbnMtZW50LnhtbC5yZHIgYi9yZXN1bHQvbnMtZW50LnhtbC5yZHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiY2Y0NwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9ucy1lbnQueG1sLnJkcgpAQCAtMCwwICsxLDI1IEBACiswIDEwIGRvYyAwIDAKKzAgMSBkb2MgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBhIDAgMAorMiA1IGVudDEgMCAwCisxIDE1IGEgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBiIDAgMAorMiA1IGVudDEgMCAwCisxIDE1IGIgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBhIDAgMAorMiA1IGVudDIgMCAwCisxIDE1IGEgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKyAgICAKKzEgMSBiIDAgMAorMiA1IGVudDIgMCAwCisxIDE1IGIgMCAwCisxIDE0ICN0ZXh0IDAgMSAKKworMCAxNSBkb2MgMCAwCmRpZmYgLS1naXQgYS9yZXN1bHQvbnMtZW50LnhtbC5zYXggYi9yZXN1bHQvbnMtZW50LnhtbC5zYXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiNjNmYwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9ucy1lbnQueG1sLnNheApAQCAtMCwwICsxLDQ1IEBACitTQVguc2V0RG9jdW1lbnRMb2NhdG9yKCkKK1NBWC5zdGFydERvY3VtZW50KCkKK1NBWC5pbnRlcm5hbFN1YnNldChkb2MsICwgKQorU0FYLmVudGl0eURlY2woZW50MSwgMSwgKG51bGwpLCAobnVsbCksIDxlbGVtLz4pCitTQVguZ2V0RW50aXR5KGVudDEpCitTQVguZW50aXR5RGVjbChlbnQyLCAxLCAobnVsbCksIChudWxsKSwgPG5zOmVsZW0vPikKK1NBWC5nZXRFbnRpdHkoZW50MikKK1NBWC5leHRlcm5hbFN1YnNldChkb2MsICwgKQorU0FYLnN0YXJ0RWxlbWVudChkb2MpCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50KGEsIHhtbG5zPSd1cm46YScpCitTQVguZ2V0RW50aXR5KGVudDEpCitTQVguc3RhcnRFbGVtZW50KGVsZW0pCitTQVguZW5kRWxlbWVudChlbGVtKQorU0FYLnJlZmVyZW5jZShlbnQxKQorU0FYLmVuZEVsZW1lbnQoYSkKK1NBWC5jaGFyYWN0ZXJzKAorICAgICwgNSkKK1NBWC5zdGFydEVsZW1lbnQoYiwgeG1sbnM9J3VybjpiJykKK1NBWC5nZXRFbnRpdHkoZW50MSkKK1NBWC5zdGFydEVsZW1lbnQoZWxlbSkKK1NBWC5lbmRFbGVtZW50KGVsZW0pCitTQVgucmVmZXJlbmNlKGVudDEpCitTQVguZW5kRWxlbWVudChiKQorU0FYLmNoYXJhY3RlcnMoCisgICAgLCA1KQorU0FYLnN0YXJ0RWxlbWVudChhLCB4bWxuczpucz0ndXJuOmEnKQorU0FYLmdldEVudGl0eShlbnQyKQorU0FYLnN0YXJ0RWxlbWVudChuczplbGVtKQorU0FYLmVuZEVsZW1lbnQobnM6ZWxlbSkKK1NBWC5yZWZlcmVuY2UoZW50MikKK1NBWC5lbmRFbGVtZW50KGEpCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50KGIsIHhtbG5zOm5zPSd1cm46YicpCitTQVguZ2V0RW50aXR5KGVudDIpCitTQVguc3RhcnRFbGVtZW50KG5zOmVsZW0pCitTQVguZW5kRWxlbWVudChuczplbGVtKQorU0FYLnJlZmVyZW5jZShlbnQyKQorU0FYLmVuZEVsZW1lbnQoYikKK1NBWC5jaGFyYWN0ZXJzKAorLCAxKQorU0FYLmVuZEVsZW1lbnQoZG9jKQorU0FYLmVuZERvY3VtZW50KCkKZGlmZiAtLWdpdCBhL3Jlc3VsdC9ucy1lbnQueG1sLnNheDIgYi9yZXN1bHQvbnMtZW50LnhtbC5zYXgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTA2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvbnMtZW50LnhtbC5zYXgyCkBAIC0wLDAgKzEsNDUgQEAKK1NBWC5zZXREb2N1bWVudExvY2F0b3IoKQorU0FYLnN0YXJ0RG9jdW1lbnQoKQorU0FYLmludGVybmFsU3Vic2V0KGRvYywgLCApCitTQVguZW50aXR5RGVjbChlbnQxLCAxLCAobnVsbCksIChudWxsKSwgPGVsZW0vPikKK1NBWC5nZXRFbnRpdHkoZW50MSkKK1NBWC5lbnRpdHlEZWNsKGVudDIsIDEsIChudWxsKSwgKG51bGwpLCA8bnM6ZWxlbS8+KQorU0FYLmdldEVudGl0eShlbnQyKQorU0FYLmV4dGVybmFsU3Vic2V0KGRvYywgLCApCitTQVguc3RhcnRFbGVtZW50TnMoZG9jLCBOVUxMLCBOVUxMLCAwLCAwLCAwKQorU0FYLmNoYXJhY3RlcnMoCisgICAgLCA1KQorU0FYLnN0YXJ0RWxlbWVudE5zKGEsIE5VTEwsICd1cm46YScsIDEsIHhtbG5zPSd1cm46YScsIDAsIDApCitTQVguZ2V0RW50aXR5KGVudDEpCitTQVguc3RhcnRFbGVtZW50TnMoZWxlbSwgTlVMTCwgJ3VybjphJywgMCwgMCwgMCkKK1NBWC5lbmRFbGVtZW50TnMoZWxlbSwgTlVMTCwgJ3VybjphJykKK1NBWC5yZWZlcmVuY2UoZW50MSkKK1NBWC5lbmRFbGVtZW50TnMoYSwgTlVMTCwgJ3VybjphJykKK1NBWC5jaGFyYWN0ZXJzKAorICAgICwgNSkKK1NBWC5zdGFydEVsZW1lbnROcyhiLCBOVUxMLCAndXJuOmInLCAxLCB4bWxucz0ndXJuOmInLCAwLCAwKQorU0FYLmdldEVudGl0eShlbnQxKQorU0FYLnN0YXJ0RWxlbWVudE5zKGVsZW0sIE5VTEwsICd1cm46YicsIDAsIDAsIDApCitTQVguZW5kRWxlbWVudE5zKGVsZW0sIE5VTEwsICd1cm46YicpCitTQVgucmVmZXJlbmNlKGVudDEpCitTQVguZW5kRWxlbWVudE5zKGIsIE5VTEwsICd1cm46YicpCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50TnMoYSwgTlVMTCwgTlVMTCwgMSwgeG1sbnM6bnM9J3VybjphJywgMCwgMCkKK1NBWC5nZXRFbnRpdHkoZW50MikKK1NBWC5zdGFydEVsZW1lbnROcyhlbGVtLCBucywgJ3VybjphJywgMCwgMCwgMCkKK1NBWC5lbmRFbGVtZW50TnMoZWxlbSwgbnMsICd1cm46YScpCitTQVgucmVmZXJlbmNlKGVudDIpCitTQVguZW5kRWxlbWVudE5zKGEsIE5VTEwsIE5VTEwpCitTQVguY2hhcmFjdGVycygKKyAgICAsIDUpCitTQVguc3RhcnRFbGVtZW50TnMoYiwgTlVMTCwgTlVMTCwgMSwgeG1sbnM6bnM9J3VybjpiJywgMCwgMCkKK1NBWC5nZXRFbnRpdHkoZW50MikKK1NBWC5zdGFydEVsZW1lbnROcyhlbGVtLCBucywgJ3VybjpiJywgMCwgMCwgMCkKK1NBWC5lbmRFbGVtZW50TnMoZWxlbSwgbnMsICd1cm46YicpCitTQVgucmVmZXJlbmNlKGVudDIpCitTQVguZW5kRWxlbWVudE5zKGIsIE5VTEwsIE5VTEwpCitTQVguY2hhcmFjdGVycygKKywgMSkKK1NBWC5lbmRFbGVtZW50TnMoZG9jLCBOVUxMLCBOVUxMKQorU0FYLmVuZERvY3VtZW50KCkKZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzLzU3OTc0Nl8wXzMuZXJyIGIvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzBfMy5lcnIKaW5kZXggNWU0YzI1ZS4uNWI1NDRiYSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzBfMy5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzBfMy5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzLzU3OTc0Nl8zLnhtbDo1OiBlbGVtZW50IGN1c3RvbWVyOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnY3VzdG9tZXInOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvNTc5NzQ2XzMueG1sOjU6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdjdXN0b21lcic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy81Nzk3NDZfMF81LmVyciBiL3Jlc3VsdC9zY2hlbWFzLzU3OTc0Nl8wXzUuZXJyCmluZGV4IDFlNTY4MGQuLmU3MWY5NGIgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzLzU3OTc0Nl8wXzUuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzLzU3OTc0Nl8wXzUuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy81Nzk3NDZfNS54bWw6NTogZWxlbWVudCBjb21tZW50OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnY29tbWVudCc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy81Nzk3NDZfNS54bWw6NTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2NvbW1lbnQnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzFfMy5lcnIgYi9yZXN1bHQvc2NoZW1hcy81Nzk3NDZfMV8zLmVycgppbmRleCA1ZTRjMjVlLi41YjU0NGJhIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy81Nzk3NDZfMV8zLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy81Nzk3NDZfMV8zLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvNTc5NzQ2XzMueG1sOjU6IGVsZW1lbnQgY3VzdG9tZXI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdjdXN0b21lcic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy81Nzk3NDZfMy54bWw6NTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2N1c3RvbWVyJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzLzU3OTc0Nl8xXzUuZXJyIGIvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzFfNS5lcnIKaW5kZXggMWU1NjgwZC4uZTcxZjk0YiAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzFfNS5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvNTc5NzQ2XzFfNS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzLzU3OTc0Nl81LnhtbDo1OiBlbGVtZW50IGNvbW1lbnQ6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdjb21tZW50JzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KKy4vdGVzdC9zY2hlbWFzLzU3OTc0Nl81LnhtbDo1OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnY29tbWVudCc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxfMF8zLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8wXzMuZXJyCmluZGV4IDY5MzNmYjcuLjFkNDIyYTUgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8wXzMuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8wXzMuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxfMy54bWw6MTogZWxlbWVudCBkb2M6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggYyApLgorLi90ZXN0L3NjaGVtYXMvYWxsXzMueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggYyApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYWxsXzBfNC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF80LmVycgppbmRleCBmODQ2ZDE1Li45NDA2NTM5IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbGxfMF80LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF80LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYWxsXzQueG1sOjE6IGVsZW1lbnQgZG9jOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZG9jJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyBvbmUgb2YgKCBhLCBiLCBjICkuCisuL3Rlc3Qvc2NoZW1hcy9hbGxfNC54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2RvYyc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgb25lIG9mICggYSwgYiwgYyApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYWxsXzBfNS5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF81LmVycgppbmRleCBkOGNhOWE3Li4xODNjMzA5IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbGxfMF81LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF81LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYWxsXzUueG1sOjE6IGVsZW1lbnQgYTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2EnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoIGMgKS4KKy4vdGVzdC9zY2hlbWFzL2FsbF81LnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICggYyApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYWxsXzBfNi5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF82LmVycgppbmRleCBjMzFkOTFiLi43YTc0ODI1IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbGxfMF82LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF82LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYWxsXzYueG1sOjE6IGVsZW1lbnQgZG9jOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZG9jJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyBvbmUgb2YgKCBiLCBjICkuCisuL3Rlc3Qvc2NoZW1hcy9hbGxfNi54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2RvYyc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgb25lIG9mICggYiwgYyApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYWxsXzBfNy5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF83LmVycgppbmRleCBkNWM1NDI4Li4yZjRjNTNmIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbGxfMF83LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMF83LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYWxsXzcueG1sOjE6IGVsZW1lbnQgZG9jOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZG9jJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyAoIGMgKS4KKy4vdGVzdC9zY2hlbWFzL2FsbF83LnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZG9jJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyAoIGMgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzMuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYWxsXzFfMy5lcnIKaW5kZXggNjkzM2ZiNy4uMWQ0MjJhNSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYWxsXzFfMy5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYWxsXzFfMy5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FsbF8zLnhtbDoxOiBlbGVtZW50IGRvYzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2RvYyc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgKCBjICkuCisuL3Rlc3Qvc2NoZW1hcy9hbGxfMy54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2RvYyc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgKCBjICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxfMV81LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzUuZXJyCmluZGV4IGQ4Y2E5YTcuLjE4M2MzMDkgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzUuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzUuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxfNS54bWw6MTogZWxlbWVudCBhOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICggYyApLgorLi90ZXN0L3NjaGVtYXMvYWxsXzUueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdhJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCBjICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxfMV82LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzYuZXJyCmluZGV4IGMzMWQ5MWIuLjdhNzQ4MjUgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzYuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzYuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxfNi54bWw6MTogZWxlbWVudCBkb2M6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzIG9uZSBvZiAoIGIsIGMgKS4KKy4vdGVzdC9zY2hlbWFzL2FsbF82LnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZG9jJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyBvbmUgb2YgKCBiLCBjICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxfMV83LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzcuZXJyCmluZGV4IGQ1YzU0MjguLjJmNGM1M2YgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzcuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8xXzcuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxfNy54bWw6MTogZWxlbWVudCBkb2M6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggYyApLgorLi90ZXN0L3NjaGVtYXMvYWxsXzcueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggYyApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMl8wLmVycgppbmRleCA2ZWY4NTkwLi5iZjQzOTQ0IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbGxfMl8wLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbGxfMl8wLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYWxsXzAueG1sOjE6IGVsZW1lbnQgYzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2MnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvYWxsXzAueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdjJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzEuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMS5lcnIKaW5kZXggZmQ4Y2I0OC4uZmMxMjE1MiAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMS5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FsbF8xLnhtbDoxOiBlbGVtZW50IGM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdjJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCBhICkuCisuL3Rlc3Qvc2NoZW1hcy9hbGxfMS54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2MnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoIGEgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzIuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMi5lcnIKaW5kZXggMWYwNDQ2Mi4uOGU1NmE3OCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMi5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYWxsXzJfMi5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FsbF8yLnhtbDoxOiBlbGVtZW50IGM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdjJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KKy4vdGVzdC9zY2hlbWFzL2FsbF8yLnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxfMl80LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzQuZXJyCmluZGV4IDMxZGNmMTIuLjcxN2UwNDIgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzQuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzQuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxfNC54bWw6MTogZWxlbWVudCBkb2M6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzIG9uZSBvZiAoIGEsIGIgKS4KKy4vdGVzdC9zY2hlbWFzL2FsbF80LnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZG9jJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyBvbmUgb2YgKCBhLCBiICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxfMl81LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzUuZXJyCmluZGV4IGU4NTllYmQuLjQyZWE3OWEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzUuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbF8yXzUuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxfNS54bWw6MTogZWxlbWVudCBhOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9hbGxfNS54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2EnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYWxsc2dfMF8zLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FsbHNnXzBfMy5lcnIKaW5kZXggNjI4YTM2MC4uNTdkZDU5NCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYWxsc2dfMF8zLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbGxzZ18wXzMuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbGxzZ18zLnhtbDo2OiBlbGVtZW50IGdtLUItMTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299Z20tQi0xJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgb25lIG9mICgge3Vybjp0ZXN0OmZvb31naC1BLCB7dXJuOnRlc3Q6Zm9vfWdtLUEtMSwge3Vybjp0ZXN0OmZvb31nbS1BLTIgKS4KKy4vdGVzdC9zY2hlbWFzL2FsbHNnXzMueG1sOjY6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfWdtLUItMSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzIG9uZSBvZiAoIHt1cm46dGVzdDpmb299Z2gtQSwge3Vybjp0ZXN0OmZvb31nbS1BLTEsIHt1cm46dGVzdDpmb299Z20tQS0yICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbGxzZ18wXzQuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYWxsc2dfMF80LmVycgppbmRleCBlNzIyODhkLi41NThmOTg0IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbGxzZ18wXzQuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FsbHNnXzBfNC5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FsbHNnXzQueG1sOjY6IGVsZW1lbnQgZ20tQS0xOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmZvb31nbS1BLTEnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyBvbmUgb2YgKCB7dXJuOnRlc3Q6Zm9vfWdoLUIsIHt1cm46dGVzdDpmb299Z20tQi0xLCB7dXJuOnRlc3Q6Zm9vfWdtLUItMiApLgorLi90ZXN0L3NjaGVtYXMvYWxsc2dfNC54bWw6NjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299Z20tQS0xJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgb25lIG9mICgge3Vybjp0ZXN0OmZvb31naC1CLCB7dXJuOnRlc3Q6Zm9vfWdtLUItMSwge3Vybjp0ZXN0OmZvb31nbS1CLTIgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FsbHNnXzBfNS5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbGxzZ18wXzUuZXJyCmluZGV4IDI2YTE0NDYuLmY0MjhmZDYgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FsbHNnXzBfNS5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYWxsc2dfMF81LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYWxsc2dfNS54bWw6NzogZWxlbWVudCBnbS1CLTI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfWdtLUItMic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9hbGxzZ181LnhtbDo3OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmZvb31nbS1CLTInOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYW55M18wXzAuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYW55M18wXzAuZXJyCmluZGV4IDQ5Y2U1ODEuLmVlNGNhMjQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FueTNfMF8wLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbnkzXzBfMC5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FueTNfMC54bWw6MTI6IGVsZW1lbnQgYmFyLkE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdiYXIuQSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICggIyNvdGhlcntodHRwOi8vRk9PfSogKS4KKy4vdGVzdC9zY2hlbWFzL2FueTNfMC54bWw6MTI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdiYXIuQSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICggIyNvdGhlcntodHRwOi8vRk9PfSogKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF8wLmVycgppbmRleCBiNjlmZDU3Li43MmIzOWE5IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfMC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzAuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbnk1XzAueG1sOjY6IGVsZW1lbnQgYm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmZvb31ib28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoICMjb3RoZXJ7dXJuOnRlc3Q6Zm9vfSogKS4KKy4vdGVzdC9zY2hlbWFzL2FueTVfMC54bWw6NjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299Ym9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCAjI290aGVye3Vybjp0ZXN0OmZvb30qICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfMS5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfMS5lcnIKaW5kZXggNzlkN2UzNS4uNTJjNTNhOCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF8xLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55NV8xLnhtbDoxMTogZWxlbWVudCBib286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6YmFyfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9hbnk1XzEueG1sOjExOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmJhcn1ib28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzIuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzIuZXJyCmluZGV4IGE1YmY0YzAuLmNkMjNhMDIgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF8yLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfMi5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FueTVfMi54bWw6NzogZWxlbWVudCBib286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9hbnk1XzIueG1sOjc6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfNC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfNC5lcnIKaW5kZXggNzRhNmJkYS4uNmVjOTYyYyAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzQuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF80LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55NV80LnhtbDoxMTogZWxlbWVudCBib286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6YmFyfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9hbnk1XzQueG1sOjExOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmJhcn1ib28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzUuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzUuZXJyCmluZGV4IGU1MDExM2YuLmU3Nzc3MjEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF81LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfNS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FueTVfNS54bWw6MTE6IGVsZW1lbnQgYm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmZvb31ib28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvYW55NV81LnhtbDoxMTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299Ym9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF82LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMF82LmVycgppbmRleCBiNjRjZDRmLi40OTk4YTRlIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzBfNi5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYW55NV8wXzYuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbnk1XzYueG1sOjExOiBlbGVtZW50IGJvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpiYXJ9Ym9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KKy4vdGVzdC9zY2hlbWFzL2FueTVfNi54bWw6MTE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6YmFyfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfMC5lcnIKaW5kZXggYjY5ZmQ1Ny4uNzJiMzlhOSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55NV8xXzAuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMV8wLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55NV8wLnhtbDo2OiBlbGVtZW50IGJvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299Ym9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCAjI290aGVye3Vybjp0ZXN0OmZvb30qICkuCisuL3Rlc3Qvc2NoZW1hcy9hbnk1XzAueG1sOjY6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICggIyNvdGhlcnt1cm46dGVzdDpmb299KiApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYW55NV8xXzEuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYW55NV8xXzEuZXJyCmluZGV4IGJiZmNjYjQuLjlhMTdjOWUgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FueTVfMV8xLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfMS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FueTVfMS54bWw6MTE6IGVsZW1lbnQgYm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmJhcn1ib28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoIHt1cm46dGVzdDpmb299Ym9vICkuCisuL3Rlc3Qvc2NoZW1hcy9hbnk1XzEueG1sOjExOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmJhcn1ib28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoIHt1cm46dGVzdDpmb299Ym9vICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfMy5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfMy5lcnIKaW5kZXggZTZjMDdiMi4uZjgyM2VlMyAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55NV8xXzMuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMV8zLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55NV8zLnhtbDo0OiBlbGVtZW50IGZvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299Zm9vJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLgorLi90ZXN0L3NjaGVtYXMvYW55NV8zLnhtbDo0OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmZvb31mb28nOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfNC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfNC5lcnIKaW5kZXggNmQ4OTc3My4uOWYwMjMyOSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55NV8xXzQuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMV80LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55NV80LnhtbDoxMTogZWxlbWVudCBib286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6YmFyfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICgge3Vybjp0ZXN0OmZvb31ib28gKS4KKy4vdGVzdC9zY2hlbWFzL2FueTVfNC54bWw6MTE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6YmFyfWJvbyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICgge3Vybjp0ZXN0OmZvb31ib28gKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FueTVfMV82LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FueTVfMV82LmVycgppbmRleCA4YzNmMDIwLi5lMDkwYmMzIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbnk1XzFfNi5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYW55NV8xXzYuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbnk1XzYueG1sOjExOiBlbGVtZW50IGJvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpiYXJ9Ym9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCB7dXJuOnRlc3Q6Zm9vfWJvbyApLgorLi90ZXN0L3NjaGVtYXMvYW55NV82LnhtbDoxMTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpiYXJ9Ym9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCB7dXJuOnRlc3Q6Zm9vfWJvbyApLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYW55N18xXzAuZXJyIGIvcmVzdWx0L3NjaGVtYXMvYW55N18xXzAuZXJyCmluZGV4IGE0Mjc0ZjguLjIwOGM4YTYgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2FueTdfMV8wLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9hbnk3XzFfMC5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2FueTdfMC54bWw6MTg6IGVsZW1lbnQgbW9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnbW9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCAjI290aGVye3Vybjp0ZXN0OmZvb30qICkuCisuL3Rlc3Qvc2NoZW1hcy9hbnk3XzAueG1sOjE4OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnbW9vJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCAjI290aGVye3Vybjp0ZXN0OmZvb30qICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk3XzFfMS5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk3XzFfMS5lcnIKaW5kZXggODc0NTQ2OC4uNDQwZDZhNSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55N18xXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTdfMV8xLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55N18xLnhtbDoxNzogZWxlbWVudCBiYXI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfWJhcic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuIEV4cGVjdGVkIGlzICggIyNvdGhlcnt1cm46dGVzdDpmb299KiApLgorLi90ZXN0L3NjaGVtYXMvYW55N18xLnhtbDoxNzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299YmFyJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCAjI290aGVye3Vybjp0ZXN0OmZvb30qICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hbnk3XzJfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hbnk3XzJfMC5lcnIKaW5kZXggYTQyNzRmOC4uMjA4YzhhNiAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYW55N18yXzAuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2FueTdfMl8wLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYW55N18wLnhtbDoxODogZWxlbWVudCBtb286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdtb28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoICMjb3RoZXJ7dXJuOnRlc3Q6Zm9vfSogKS4KKy4vdGVzdC9zY2hlbWFzL2FueTdfMC54bWw6MTg6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdtb28nOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoICMjb3RoZXJ7dXJuOnRlc3Q6Zm9vfSogKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FueTdfMl8xLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FueTdfMl8xLmVycgppbmRleCA4NzQ1NDY4Li40NDBkNmE1IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbnk3XzJfMS5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYW55N18yXzEuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hbnk3XzEueG1sOjE3OiBlbGVtZW50IGJhcjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3t1cm46dGVzdDpmb299YmFyJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4gRXhwZWN0ZWQgaXMgKCAjI290aGVye3Vybjp0ZXN0OmZvb30qICkuCisuL3Rlc3Qvc2NoZW1hcy9hbnk3XzEueG1sOjE3OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne3Vybjp0ZXN0OmZvb31iYXInOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLiBFeHBlY3RlZCBpcyAoICMjb3RoZXJ7dXJuOnRlc3Q6Zm9vfSogKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2FueUF0dHItcHJvY2Vzc0NvbnRlbnRzLWVycjFfMF8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2FueUF0dHItcHJvY2Vzc0NvbnRlbnRzLWVycjFfMF8wLmVycgppbmRleCBkYzQ3NjZiLi5mMWE2MDIzIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hbnlBdHRyLXByb2Nlc3NDb250ZW50cy1lcnIxXzBfMC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYW55QXR0ci1wcm9jZXNzQ29udGVudHMtZXJyMV8wXzAuZXJyCkBAIC0xLDIgKzEsMiBAQAotLi90ZXN0L3NjaGVtYXMvYW55QXR0ci1wcm9jZXNzQ29udGVudHMtZXJyMV8wLnhtbDo4OiBlbGVtZW50IGVsZW0ubGF4OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne2h0dHA6Ly9GT099ZWxlbS5sYXgnLCBhdHRyaWJ1dGUgJ3todHRwOi8vRk9PfWJhcic6ICdvIG8nIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAneHM6bGFuZ3VhZ2UnLgotLi90ZXN0L3NjaGVtYXMvYW55QXR0ci1wcm9jZXNzQ29udGVudHMtZXJyMV8wLnhtbDo5OiBlbGVtZW50IGVsZW0uc3RyaWN0OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne2h0dHA6Ly9GT099ZWxlbS5zdHJpY3QnLCBhdHRyaWJ1dGUgJ3todHRwOi8vRk9PfWJhckInOiBObyBtYXRjaGluZyBnbG9iYWwgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSwgYnV0IGRlbWFuZGVkIGJ5IHRoZSBzdHJpY3Qgd2lsZGNhcmQuCisuL3Rlc3Qvc2NoZW1hcy9hbnlBdHRyLXByb2Nlc3NDb250ZW50cy1lcnIxXzAueG1sOjg6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL0ZPT31lbGVtLmxheCcsIGF0dHJpYnV0ZSAne2h0dHA6Ly9GT099YmFyJzogJ28gbycgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICd4czpsYW5ndWFnZScuCisuL3Rlc3Qvc2NoZW1hcy9hbnlBdHRyLXByb2Nlc3NDb250ZW50cy1lcnIxXzAueG1sOjk6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL0ZPT31lbGVtLnN0cmljdCcsIGF0dHJpYnV0ZSAne2h0dHA6Ly9GT099YmFyQic6IE5vIG1hdGNoaW5nIGdsb2JhbCBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gYXZhaWxhYmxlLCBidXQgZGVtYW5kZWQgYnkgdGhlIHN0cmljdCB3aWxkY2FyZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2F0dHJ1c2VfMF8xLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2F0dHJ1c2VfMF8xLmVycgppbmRleCA1ZGQ0ZmIxLi42Nzk1ZjhmIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9hdHRydXNlXzBfMS5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvYXR0cnVzZV8wXzEuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9hdHRydXNlXzBfMS54bWw6MzogZWxlbWVudCBiYXJBOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYmFyQSc6IFRoZSBhdHRyaWJ1dGUgJ2F0dHInIGlzIHJlcXVpcmVkIGJ1dCBtaXNzaW5nLgorLi90ZXN0L3NjaGVtYXMvYXR0cnVzZV8wXzEueG1sOjM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdiYXJBJzogVGhlIGF0dHJpYnV0ZSAnYXR0cicgaXMgcmVxdWlyZWQgYnV0IG1pc3NpbmcuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9hdHRydXNlXzBfMi5lcnIgYi9yZXN1bHQvc2NoZW1hcy9hdHRydXNlXzBfMi5lcnIKaW5kZXggMDFjZjgyMi4uZDA5YTJhZSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvYXR0cnVzZV8wXzIuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2F0dHJ1c2VfMF8yLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYXR0cnVzZV8wXzIueG1sOjY6IGVsZW1lbnQgYmFyQzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2JhckMnLCBhdHRyaWJ1dGUgJ2F0dHInOiBUaGUgYXR0cmlidXRlICdhdHRyJyBpcyBub3QgYWxsb3dlZC4KKy4vdGVzdC9zY2hlbWFzL2F0dHJ1c2VfMF8yLnhtbDo2OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYmFyQycsIGF0dHJpYnV0ZSAnYXR0cic6IFRoZSBhdHRyaWJ1dGUgJ2F0dHInIGlzIG5vdCBhbGxvd2VkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvYnVnMzIzNTEwXzFfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9idWczMjM1MTBfMV8wLmVycgppbmRleCAxNjU1MDcwLi4wNDg4ZWY4IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9idWczMjM1MTBfMV8wLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9idWczMjM1MTBfMV8wLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvYnVnMzIzNTEwXzAueG1sOjI6IGVsZW1lbnQgZm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZm9vJzogTWlzc2luZyBjaGlsZCBlbGVtZW50KHMpLiBFeHBlY3RlZCBpcyAoIGJhciApLgorLi90ZXN0L3NjaGVtYXMvYnVnMzIzNTEwXzAueG1sOjI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdmb28nOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggYmFyICkuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9jaGFuZ2Vsb2cwOTNfMV8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2NoYW5nZWxvZzA5M18xXzAuZXJyCmluZGV4IGVmMGIxZWMuLjM0NGExNTYgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2NoYW5nZWxvZzA5M18xXzAuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2NoYW5nZWxvZzA5M18xXzAuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9jaGFuZ2Vsb2cwOTNfMC54bWw6NzogZWxlbWVudCBkZXNjcmlwdGlvbjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vd3d3LmJsYWNrcGVybC5jb20vWE1ML0NoYW5nZUxvZ31kZXNjcmlwdGlvbic6IER1cGxpY2F0ZSBrZXktc2VxdWVuY2UgWydQTCddIGluIHVuaXF1ZSBpZGVudGl0eS1jb25zdHJhaW50ICd7aHR0cDovL3d3dy5ibGFja3BlcmwuY29tL1hNTC9DaGFuZ2VMb2d9Y2hhbmdlbG9nRGVzY3JpcHRpb25MYW5nQ29uc3RyYWludCcuCisuL3Rlc3Qvc2NoZW1hcy9jaGFuZ2Vsb2cwOTNfMC54bWw6NzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vd3d3LmJsYWNrcGVybC5jb20vWE1ML0NoYW5nZUxvZ31kZXNjcmlwdGlvbic6IER1cGxpY2F0ZSBrZXktc2VxdWVuY2UgWydQTCddIGluIHVuaXF1ZSBpZGVudGl0eS1jb25zdHJhaW50ICd7aHR0cDovL3d3dy5ibGFja3BlcmwuY29tL1hNTC9DaGFuZ2VMb2d9Y2hhbmdlbG9nRGVzY3JpcHRpb25MYW5nQ29uc3RyYWludCcuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMF8yLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzIuZXJyCmluZGV4IDUxNDE0NDUuLjM3MzQ0YjEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzIuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzIuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9jaG9pY2VfMi54bWw6MzogZWxlbWVudCBiOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9jaG9pY2VfMi54bWw6MzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2InOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfMy5lcnIgYi9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMF8zLmVycgppbmRleCBlY2U1ZDY5Li41N2QzNzI4IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMF8zLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMF8zLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzMueG1sOjM6IGVsZW1lbnQgYTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2EnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzMueG1sOjM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdhJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzQuZXJyIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfNC5lcnIKaW5kZXggM2QzYWY1OS4uMjczZjE3MCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfNC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfNC5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2Nob2ljZV80LnhtbDoxOiBlbGVtZW50IGRvYzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2RvYyc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgb25lIG9mICggYSwgYiApLgorLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzQueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzIG9uZSBvZiAoIGEsIGIgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzUuZXJyIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfNS5lcnIKaW5kZXggMzlkNDEzYy4uM2EwZjQwYSAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfNS5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzBfNS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2Nob2ljZV81LnhtbDozOiBlbGVtZW50IGI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdiJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KKy4vdGVzdC9zY2hlbWFzL2Nob2ljZV81LnhtbDozOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMF82LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzYuZXJyCmluZGV4IDQxNGQxZTIuLjI3MGMxZmYgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzYuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8wXzYuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9jaG9pY2VfNi54bWw6MzogZWxlbWVudCBiOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9jaG9pY2VfNi54bWw6MzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2InOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzFfMi5lcnIgYi9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV8yLmVycgppbmRleCA1MTQxNDQ1Li4zNzM0NGIxIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV8yLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV8yLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzIueG1sOjM6IGVsZW1lbnQgYjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2InOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzIueG1sOjM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdiJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8xXzMuZXJyIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzFfMy5lcnIKaW5kZXggZWNlNWQ2OS4uNTdkMzcyOCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzFfMy5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzFfMy5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2Nob2ljZV8zLnhtbDozOiBlbGVtZW50IGE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdhJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KKy4vdGVzdC9zY2hlbWFzL2Nob2ljZV8zLnhtbDozOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV81LmVyciBiL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8xXzUuZXJyCmluZGV4IDM5ZDQxM2MuLjNhMGY0MGEgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8xXzUuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8xXzUuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9jaG9pY2VfNS54bWw6MzogZWxlbWVudCBiOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYic6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCisuL3Rlc3Qvc2NoZW1hcy9jaG9pY2VfNS54bWw6MzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2InOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzFfNi5lcnIgYi9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV82LmVycgppbmRleCA0MTRkMWUyLi4yNzBjMWZmIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV82LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9jaG9pY2VfMV82LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzYueG1sOjM6IGVsZW1lbnQgYjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2InOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzYueG1sOjM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdiJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8yXzQuZXJyIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzJfNC5lcnIKaW5kZXggM2QzYWY1OS4uMjczZjE3MCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzJfNC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzJfNC5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2Nob2ljZV80LnhtbDoxOiBlbGVtZW50IGRvYzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2RvYyc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgb25lIG9mICggYSwgYiApLgorLi90ZXN0L3NjaGVtYXMvY2hvaWNlXzQueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdkb2MnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzIG9uZSBvZiAoIGEsIGIgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2Nob2ljZV8yXzYuZXJyIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzJfNi5lcnIKaW5kZXggYmVmNTZkYS4uYjZhZTRhNyAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzJfNi5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvY2hvaWNlXzJfNi5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2Nob2ljZV82LnhtbDo1OiBlbGVtZW50IGE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdhJzogVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZC4KKy4vdGVzdC9zY2hlbWFzL2Nob2ljZV82LnhtbDo1OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYSc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9jb3Mtc3QtcmVzdHJpY3RzLTEtMi1lcnJfMF8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2Nvcy1zdC1yZXN0cmljdHMtMS0yLWVycl8wXzAuZXJyCmluZGV4IGNjYzEyYjYuLjMyZTM4OWIgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2Nvcy1zdC1yZXN0cmljdHMtMS0yLWVycl8wXzAuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2Nvcy1zdC1yZXN0cmljdHMtMS0yLWVycl8wXzAuZXJyCkBAIC0xLDIgKzEsMiBAQAotLi90ZXN0L3NjaGVtYXMvY29zLXN0LXJlc3RyaWN0cy0xLTItZXJyXzAueG1sOjM6IGVsZW1lbnQgZm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne2h0dHA6Ly9GT099Zm9vJzogW2ZhY2V0ICdsZW5ndGgnXSBUaGUgdmFsdWUgaGFzIGEgbGVuZ3RoIG9mICcyJzsgdGhpcyBkaWZmZXJzIGZyb20gdGhlIGFsbG93ZWQgbGVuZ3RoIG9mICczJy4KLS4vdGVzdC9zY2hlbWFzL2Nvcy1zdC1yZXN0cmljdHMtMS0yLWVycl8wLnhtbDozOiBlbGVtZW50IGZvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vRk9PfWZvbyc6ICcxIDInIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBsaXN0IHR5cGUgJ3todHRwOi8vRk9PfXR5cGUuQScuCisuL3Rlc3Qvc2NoZW1hcy9jb3Mtc3QtcmVzdHJpY3RzLTEtMi1lcnJfMC54bWw6MzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vRk9PfWZvbyc6IFtmYWNldCAnbGVuZ3RoJ10gVGhlIHZhbHVlIGhhcyBhIGxlbmd0aCBvZiAnMic7IHRoaXMgZGlmZmVycyBmcm9tIHRoZSBhbGxvd2VkIGxlbmd0aCBvZiAnMycuCisuL3Rlc3Qvc2NoZW1hcy9jb3Mtc3QtcmVzdHJpY3RzLTEtMi1lcnJfMC54bWw6MzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vRk9PfWZvbyc6ICcxIDInIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBsaXN0IHR5cGUgJ3todHRwOi8vRk9PfXR5cGUuQScuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9kZWNpbWFsLTFfMV8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2RlY2ltYWwtMV8xXzAuZXJyCmluZGV4IDdmNGZhOWMuLjYyY2E5ZGUgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2RlY2ltYWwtMV8xXzAuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2RlY2ltYWwtMV8xXzAuZXJyCkBAIC0xLDggKzEsOCBAQAotLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0xXzAueG1sOjE2OiBlbGVtZW50IHZhbDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICcuJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ215RGVjaW1hbCcuCi0uL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTFfMC54bWw6MTc6IGVsZW1lbnQgdmFsOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogJy0nIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KLS4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoxODogZWxlbWVudCB2YWw6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiAnKycgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICdteURlY2ltYWwnLgotLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0xXzAueG1sOjE5OiBlbGVtZW50IHZhbDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICcqJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ215RGVjaW1hbCcuCi0uL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTFfMC54bWw6MjA6IGVsZW1lbnQgdmFsOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogJy0gMScgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICdteURlY2ltYWwnLgotLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0xXzAueG1sOjIxOiBlbGVtZW50IHZhbDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICcrIDEnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KLS4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoyMjogZWxlbWVudCB2YWw6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiAnKyAwJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ215RGVjaW1hbCcuCi0uL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTFfMC54bWw6MjM6IGVsZW1lbnQgdmFsOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogJy0gMCcgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICdteURlY2ltYWwnLgorLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0xXzAueG1sOjE2OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogJy4nIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KKy4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoxNzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICctJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ215RGVjaW1hbCcuCisuL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTFfMC54bWw6MTg6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiAnKycgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICdteURlY2ltYWwnLgorLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0xXzAueG1sOjE5OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogJyonIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KKy4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoyMDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICctIDEnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KKy4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoyMTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICcrIDEnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KKy4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoyMjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICcrIDAnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KKy4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtMV8wLnhtbDoyMzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6ICctIDAnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAnbXlEZWNpbWFsJy4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2RlY2ltYWwtMl8xXzAuZXJyIGIvcmVzdWx0L3NjaGVtYXMvZGVjaW1hbC0yXzFfMC5lcnIKaW5kZXggYmRhMTdhNS4uODlkY2IyZCAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvZGVjaW1hbC0yXzFfMC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvZGVjaW1hbC0yXzFfMC5lcnIKQEAgLTEsMiArMSwyIEBACi0uL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTJfMC54bWw6MTI6IGVsZW1lbnQgdmFsOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogW2ZhY2V0ICdtaW5JbmNsdXNpdmUnXSBUaGUgdmFsdWUgJy0wLjEnIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSBhbGxvd2VkICgnMCcpLgotLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0yXzAueG1sOjEzOiBlbGVtZW50IHZhbDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6IFtmYWNldCAnbWluSW5jbHVzaXZlJ10gVGhlIHZhbHVlICctMScgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIGFsbG93ZWQgKCcwJykuCisuL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTJfMC54bWw6MTI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiBbZmFjZXQgJ21pbkluY2x1c2l2ZSddIFRoZSB2YWx1ZSAnLTAuMScgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIGFsbG93ZWQgKCcwJykuCisuL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTJfMC54bWw6MTM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiBbZmFjZXQgJ21pbkluY2x1c2l2ZSddIFRoZSB2YWx1ZSAnLTEnIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSBhbGxvd2VkICgnMCcpLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvZGVjaW1hbC0zXzFfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9kZWNpbWFsLTNfMV8wLmVycgppbmRleCBmMzdhMjAwLi42NGJlNTUzIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9kZWNpbWFsLTNfMV8wLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9kZWNpbWFsLTNfMV8wLmVycgpAQCAtMSw0ICsxLDQgQEAKLS4vdGVzdC9zY2hlbWFzL2RlY2ltYWwtM18wLnhtbDoxMjogZWxlbWVudCB2YWw6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiBbZmFjZXQgJ3RvdGFsRGlnaXRzJ10gVGhlIHZhbHVlICcwLjEyMycgaGFzIG1vcmUgZGlnaXRzIHRoYW4gYXJlIGFsbG93ZWQgKCcyJykuCi0uL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTNfMC54bWw6MTM6IGVsZW1lbnQgdmFsOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogW2ZhY2V0ICd0b3RhbERpZ2l0cyddIFRoZSB2YWx1ZSAnMC4wMjMnIGhhcyBtb3JlIGRpZ2l0cyB0aGFuIGFyZSBhbGxvd2VkICgnMicpLgotLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0zXzAueG1sOjE0OiBlbGVtZW50IHZhbDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3ZhbCc6IFtmYWNldCAndG90YWxEaWdpdHMnXSBUaGUgdmFsdWUgJzEyMycgaGFzIG1vcmUgZGlnaXRzIHRoYW4gYXJlIGFsbG93ZWQgKCcyJykuCi0uL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTNfMC54bWw6MTU6IGVsZW1lbnQgdmFsOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogW2ZhY2V0ICd0b3RhbERpZ2l0cyddIFRoZSB2YWx1ZSAnMTIuMycgaGFzIG1vcmUgZGlnaXRzIHRoYW4gYXJlIGFsbG93ZWQgKCcyJykuCisuL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTNfMC54bWw6MTI6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiBbZmFjZXQgJ3RvdGFsRGlnaXRzJ10gVGhlIHZhbHVlICcwLjEyMycgaGFzIG1vcmUgZGlnaXRzIHRoYW4gYXJlIGFsbG93ZWQgKCcyJykuCisuL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTNfMC54bWw6MTM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiBbZmFjZXQgJ3RvdGFsRGlnaXRzJ10gVGhlIHZhbHVlICcwLjAyMycgaGFzIG1vcmUgZGlnaXRzIHRoYW4gYXJlIGFsbG93ZWQgKCcyJykuCisuL3Rlc3Qvc2NoZW1hcy9kZWNpbWFsLTNfMC54bWw6MTQ6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd2YWwnOiBbZmFjZXQgJ3RvdGFsRGlnaXRzJ10gVGhlIHZhbHVlICcxMjMnIGhhcyBtb3JlIGRpZ2l0cyB0aGFuIGFyZSBhbGxvd2VkICgnMicpLgorLi90ZXN0L3NjaGVtYXMvZGVjaW1hbC0zXzAueG1sOjE1OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndmFsJzogW2ZhY2V0ICd0b3RhbERpZ2l0cyddIFRoZSB2YWx1ZSAnMTIuMycgaGFzIG1vcmUgZGlnaXRzIHRoYW4gYXJlIGFsbG93ZWQgKCcyJykuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9leHRlbnNpb24xXzBfMS5lcnIgYi9yZXN1bHQvc2NoZW1hcy9leHRlbnNpb24xXzBfMS5lcnIKaW5kZXggYmI1YjA0Ny4uMjVlOTNmNyAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvZXh0ZW5zaW9uMV8wXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2V4dGVuc2lvbjFfMF8xLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvZXh0ZW5zaW9uMV8xLnhtbDoxOiBlbGVtZW50IHRpdGxlOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndGl0bGUnLCBhdHRyaWJ1dGUgJ2xhbmd1ZSc6IFRoZSBhdHRyaWJ1dGUgJ2xhbmd1ZScgaXMgbm90IGFsbG93ZWQuCisuL3Rlc3Qvc2NoZW1hcy9leHRlbnNpb24xXzEueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd0aXRsZScsIGF0dHJpYnV0ZSAnbGFuZ3VlJzogVGhlIGF0dHJpYnV0ZSAnbGFuZ3VlJyBpcyBub3QgYWxsb3dlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2V4dGVuc2lvbjFfMF8yLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2V4dGVuc2lvbjFfMF8yLmVycgppbmRleCAxNjFmZTllLi4yMjY4ZjM4IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9leHRlbnNpb24xXzBfMi5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvZXh0ZW5zaW9uMV8wXzIuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9leHRlbnNpb24xXzIueG1sOjE6IGVsZW1lbnQgdGl0bGU6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd0aXRsZSc6IEVsZW1lbnQgY29udGVudCBpcyBub3QgYWxsb3dlZCwgYmVjYXVzZSB0aGUgY29udGVudCB0eXBlIGlzIGEgc2ltcGxlIHR5cGUgZGVmaW5pdGlvbi4KKy4vdGVzdC9zY2hlbWFzL2V4dGVuc2lvbjFfMi54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3RpdGxlJzogRWxlbWVudCBjb250ZW50IGlzIG5vdCBhbGxvd2VkLCBiZWNhdXNlIHRoZSBjb250ZW50IHR5cGUgaXMgYSBzaW1wbGUgdHlwZSBkZWZpbml0aW9uLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvZmFjZXQtdW5pb25TVC1lcnIxXzBfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9mYWNldC11bmlvblNULWVycjFfMF8wLmVycgppbmRleCAzOTJkYmU1Li5kYmFhMTEzIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9mYWNldC11bmlvblNULWVycjFfMF8wLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9mYWNldC11bmlvblNULWVycjFfMF8wLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvZmFjZXQtdW5pb25TVC1lcnIxXzAueG1sOjM6IGVsZW1lbnQgZm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne2h0dHA6Ly9GT099Zm9vJzogJ3RpbnknIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSB1bmlvbiB0eXBlICd7aHR0cDovL0ZPT31mb29UeXBlLkInLgorLi90ZXN0L3NjaGVtYXMvZmFjZXQtdW5pb25TVC1lcnIxXzAueG1sOjM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL0ZPT31mb28nOiAndGlueScgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIHVuaW9uIHR5cGUgJ3todHRwOi8vRk9PfWZvb1R5cGUuQicuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9oZXhiaW5hcnlfMF8xLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8wXzEuZXJyCmluZGV4IGY0M2VmMzMuLjE1Y2UzNGQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8wXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8wXzEuZXJyCkBAIC0xLDcgKzEsNyBAQAotLi90ZXN0L3NjaGVtYXMvaGV4YmluYXJ5XzEueG1sOjY6IGVsZW1lbnQgaGV4OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnaGV4JzogJzAnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAneHM6aGV4QmluYXJ5Jy4KLS4vdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8xLnhtbDo3OiBlbGVtZW50IGhleDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleCc6ICcwMTIzNDU2Nzg5QUJDREVGR0gnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAneHM6aGV4QmluYXJ5Jy4KLS4vdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8xLnhtbDo4OiBlbGVtZW50IGhleDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleCc6ICcrYWJjZGVmMDEyMzQ1Njc4OScgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICd4czpoZXhCaW5hcnknLgotLi90ZXN0L3NjaGVtYXMvaGV4YmluYXJ5XzEueG1sOjk6IGVsZW1lbnQgaGV4OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnaGV4JzogJy0wMTIzNDU2Nzg5YWJjZGVmJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ3hzOmhleEJpbmFyeScuCi0uL3Rlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfMS54bWw6MTE6IGVsZW1lbnQgaGV4MjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleDInOiBbZmFjZXQgJ21heExlbmd0aCddIFRoZSB2YWx1ZSBoYXMgYSBsZW5ndGggb2YgJzknOyB0aGlzIGV4Y2VlZHMgdGhlIGFsbG93ZWQgbWF4aW11bSBsZW5ndGggb2YgJzgnLgotLi90ZXN0L3NjaGVtYXMvaGV4YmluYXJ5XzEueG1sOjEzOiBlbGVtZW50IGhleDM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdoZXgzJzogW2ZhY2V0ICdsZW5ndGgnXSBUaGUgdmFsdWUgaGFzIGEgbGVuZ3RoIG9mICcxJzsgdGhpcyBkaWZmZXJzIGZyb20gdGhlIGFsbG93ZWQgbGVuZ3RoIG9mICcyJy4KLS4vdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8xLnhtbDoxNDogZWxlbWVudCBoZXgzOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnaGV4Myc6IFtmYWNldCAnbGVuZ3RoJ10gVGhlIHZhbHVlIGhhcyBhIGxlbmd0aCBvZiAnMyc7IHRoaXMgZGlmZmVycyBmcm9tIHRoZSBhbGxvd2VkIGxlbmd0aCBvZiAnMicuCisuL3Rlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfMS54bWw6NjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleCc6ICcwJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ3hzOmhleEJpbmFyeScuCisuL3Rlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfMS54bWw6NzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleCc6ICcwMTIzNDU2Nzg5QUJDREVGR0gnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIHRoZSBhdG9taWMgdHlwZSAneHM6aGV4QmluYXJ5Jy4KKy4vdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8xLnhtbDo4OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnaGV4JzogJythYmNkZWYwMTIzNDU2Nzg5JyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ3hzOmhleEJpbmFyeScuCisuL3Rlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfMS54bWw6OTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleCc6ICctMDEyMzQ1Njc4OWFiY2RlZicgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICd4czpoZXhCaW5hcnknLgorLi90ZXN0L3NjaGVtYXMvaGV4YmluYXJ5XzEueG1sOjExOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnaGV4Mic6IFtmYWNldCAnbWF4TGVuZ3RoJ10gVGhlIHZhbHVlIGhhcyBhIGxlbmd0aCBvZiAnOSc7IHRoaXMgZXhjZWVkcyB0aGUgYWxsb3dlZCBtYXhpbXVtIGxlbmd0aCBvZiAnOCcuCisuL3Rlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfMS54bWw6MTM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdoZXgzJzogW2ZhY2V0ICdsZW5ndGgnXSBUaGUgdmFsdWUgaGFzIGEgbGVuZ3RoIG9mICcxJzsgdGhpcyBkaWZmZXJzIGZyb20gdGhlIGFsbG93ZWQgbGVuZ3RoIG9mICcyJy4KKy4vdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8xLnhtbDoxNDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2hleDMnOiBbZmFjZXQgJ2xlbmd0aCddIFRoZSB2YWx1ZSBoYXMgYSBsZW5ndGggb2YgJzMnOyB0aGlzIGRpZmZlcnMgZnJvbSB0aGUgYWxsb3dlZCBsZW5ndGggb2YgJzInLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvaXNzdWU0OTFfMF8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL2lzc3VlNDkxXzBfMC5lcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYmI5NgotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2lzc3VlNDkxXzBfMC5lcnIKQEAgLTAsMCArMSBAQAorLi90ZXN0L3NjaGVtYXMvaXNzdWU0OTFfMC54c2Q6ODogZWxlbWVudCBjb21wbGV4VHlwZTogU2NoZW1hcyBwYXJzZXIgZXJyb3IgOiBjb21wbGV4IHR5cGUgJ0NoaWxkVHlwZSc6IFRoZSBjb250ZW50IHR5cGUgb2YgYm90aCwgdGhlIHR5cGUgYW5kIGl0cyBiYXNlIHR5cGUsIG11c3QgZWl0aGVyICdtaXhlZCcgb3IgJ2VsZW1lbnQtb25seScuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9saXN0MF8wXzEuZXJyIGIvcmVzdWx0L3NjaGVtYXMvbGlzdDBfMF8xLmVycgppbmRleCA3YTNiNjNiLi44ZDI1ZjhhIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9saXN0MF8wXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2xpc3QwXzBfMS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2xpc3QwXzEueG1sOjE6IGVsZW1lbnQgdGVzdDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3Rlc3QnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggc3RyaW5nICkuCisuL3Rlc3Qvc2NoZW1hcy9saXN0MF8xLnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndGVzdCc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgKCBzdHJpbmcgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL2xpc3QwXzFfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9saXN0MF8xXzAuZXJyCmluZGV4IDBiYzNjOGEuLmFlOTE1YzQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL2xpc3QwXzFfMC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvbGlzdDBfMV8wLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvbGlzdDBfMC54bWw6NTogZWxlbWVudCBzdHJpbmc6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdzdHJpbmcnOiBUaGlzIGVsZW1lbnQgaXMgbm90IGV4cGVjdGVkLgorLi90ZXN0L3NjaGVtYXMvbGlzdDBfMC54bWw6NTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3N0cmluZyc6IFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9saXN0MF8xXzEuZXJyIGIvcmVzdWx0L3NjaGVtYXMvbGlzdDBfMV8xLmVycgppbmRleCA3YTNiNjNiLi44ZDI1ZjhhIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9saXN0MF8xXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL2xpc3QwXzFfMS5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL2xpc3QwXzEueG1sOjE6IGVsZW1lbnQgdGVzdDogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3Rlc3QnOiBNaXNzaW5nIGNoaWxkIGVsZW1lbnQocykuIEV4cGVjdGVkIGlzICggc3RyaW5nICkuCisuL3Rlc3Qvc2NoZW1hcy9saXN0MF8xLnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAndGVzdCc6IE1pc3NpbmcgY2hpbGQgZWxlbWVudChzKS4gRXhwZWN0ZWQgaXMgKCBzdHJpbmcgKS4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL25zMF8wXzIuZXJyIGIvcmVzdWx0L3NjaGVtYXMvbnMwXzBfMi5lcnIKaW5kZXggMzQ2YWYyNi4uMzE1NTUzYyAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvbnMwXzBfMi5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvbnMwXzBfMi5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL25zMF8yLnhtbDoxOiBlbGVtZW50IGZvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2Zvbyc6IE5vIG1hdGNoaW5nIGdsb2JhbCBkZWNsYXJhdGlvbiBhdmFpbGFibGUgZm9yIHRoZSB2YWxpZGF0aW9uIHJvb3QuCisuL3Rlc3Qvc2NoZW1hcy9uczBfMi54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2Zvbyc6IE5vIG1hdGNoaW5nIGdsb2JhbCBkZWNsYXJhdGlvbiBhdmFpbGFibGUgZm9yIHRoZSB2YWxpZGF0aW9uIHJvb3QuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9uczBfMF8zLmVyciBiL3Jlc3VsdC9zY2hlbWFzL25zMF8wXzMuZXJyCmluZGV4IGZkMWNiZDUuLjc5NTMyMzQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL25zMF8wXzMuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL25zMF8wXzMuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9uczBfMy54bWw6MTogZWxlbWVudCBmb286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL2V4YW1wbGUuY29tL3hzZC9uc31mb28nLCBhdHRyaWJ1dGUgJ3todHRwOi8vZXhhbXBsZS5jb20veHNkL25zfWlkJzogVGhlIGF0dHJpYnV0ZSAne2h0dHA6Ly9leGFtcGxlLmNvbS94c2QvbnN9aWQnIGlzIG5vdCBhbGxvd2VkLgorLi90ZXN0L3NjaGVtYXMvbnMwXzMueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL2V4YW1wbGUuY29tL3hzZC9uc31mb28nLCBhdHRyaWJ1dGUgJ3todHRwOi8vZXhhbXBsZS5jb20veHNkL25zfWlkJzogVGhlIGF0dHJpYnV0ZSAne2h0dHA6Ly9leGFtcGxlLmNvbS94c2QvbnN9aWQnIGlzIG5vdCBhbGxvd2VkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvbnMwXzBfNC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9uczBfMF80LmVycgppbmRleCAyNTEyZThkLi5mNDkxZTE0IDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9uczBfMF80LmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9uczBfMF80LmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvbnMwXzQueG1sOjI6IGVsZW1lbnQgZm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne2h0dHA6Ly9leGFtcGxlLmNvbS94c2QvbnN9Zm9vJywgYXR0cmlidXRlICd7aHR0cDovL2V4YW1wbGUuY29tL3hzZC9uc31pZCc6IFRoZSBhdHRyaWJ1dGUgJ3todHRwOi8vZXhhbXBsZS5jb20veHNkL25zfWlkJyBpcyBub3QgYWxsb3dlZC4KKy4vdGVzdC9zY2hlbWFzL25zMF80LnhtbDoyOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAne2h0dHA6Ly9leGFtcGxlLmNvbS94c2QvbnN9Zm9vJywgYXR0cmlidXRlICd7aHR0cDovL2V4YW1wbGUuY29tL3hzZC9uc31pZCc6IFRoZSBhdHRyaWJ1dGUgJ3todHRwOi8vZXhhbXBsZS5jb20veHNkL25zfWlkJyBpcyBub3QgYWxsb3dlZC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL25zMF8xXzAuZXJyIGIvcmVzdWx0L3NjaGVtYXMvbnMwXzFfMC5lcnIKaW5kZXggMTI4Mjg4OC4uM2EyNGM4YyAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvbnMwXzFfMC5lcnIKKysrIGIvcmVzdWx0L3NjaGVtYXMvbnMwXzFfMC5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL25zMF8wLnhtbDoxOiBlbGVtZW50IGZvbzogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vZXhhbXBsZS5jb20veHNkL25zfWZvbycsIGF0dHJpYnV0ZSAnaWQnOiBUaGUgYXR0cmlidXRlICdpZCcgaXMgbm90IGFsbG93ZWQuCisuL3Rlc3Qvc2NoZW1hcy9uczBfMC54bWw6MTogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ3todHRwOi8vZXhhbXBsZS5jb20veHNkL25zfWZvbycsIGF0dHJpYnV0ZSAnaWQnOiBUaGUgYXR0cmlidXRlICdpZCcgaXMgbm90IGFsbG93ZWQuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9uczBfMV8xLmVyciBiL3Jlc3VsdC9zY2hlbWFzL25zMF8xXzEuZXJyCmluZGV4IDk5YjI4ODAuLjZjMjU5YWQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL25zMF8xXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL25zMF8xXzEuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9uczBfMS54bWw6MTogZWxlbWVudCBmb286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL2V4YW1wbGUuY29tL3hzZC9uc31mb28nLCBhdHRyaWJ1dGUgJ2lkJzogVGhlIGF0dHJpYnV0ZSAnaWQnIGlzIG5vdCBhbGxvd2VkLgorLi90ZXN0L3NjaGVtYXMvbnMwXzEueG1sOjE6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7aHR0cDovL2V4YW1wbGUuY29tL3hzZC9uc31mb28nLCBhdHRyaWJ1dGUgJ2lkJzogVGhlIGF0dHJpYnV0ZSAnaWQnIGlzIG5vdCBhbGxvd2VkLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvbnMwXzFfMi5lcnIgYi9yZXN1bHQvc2NoZW1hcy9uczBfMV8yLmVycgppbmRleCAzNDZhZjI2Li4zMTU1NTNjIDEwMDY0NAotLS0gYS9yZXN1bHQvc2NoZW1hcy9uczBfMV8yLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy9uczBfMV8yLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvbnMwXzIueG1sOjE6IGVsZW1lbnQgZm9vOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZm9vJzogTm8gbWF0Y2hpbmcgZ2xvYmFsIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlIHZhbGlkYXRpb24gcm9vdC4KKy4vdGVzdC9zY2hlbWFzL25zMF8yLnhtbDoxOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZm9vJzogTm8gbWF0Y2hpbmcgZ2xvYmFsIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlIHZhbGlkYXRpb24gcm9vdC4KZGlmZiAtLWdpdCBhL3Jlc3VsdC9zY2hlbWFzL29zcy1mdXp6LTUxMjk1XzBfMC5lcnIgYi9yZXN1bHQvc2NoZW1hcy9vc3MtZnV6ei01MTI5NV8wXzAuZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODk1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvc2NoZW1hcy9vc3MtZnV6ei01MTI5NV8wXzAuZXJyCkBAIC0wLDAgKzEsMiBAQAorLi90ZXN0L3NjaGVtYXMvb3NzLWZ1enotNTEyOTVfMC54c2Q6MjogZWxlbWVudCBlbGVtZW50OiBTY2hlbWFzIHBhcnNlciBlcnJvciA6IGVsZW1lbnQgZGVjbC4gJ2UnOiBUaGUgZWxlbWVudCBkZWNsYXJhdGlvbiAnZScgZGVmaW5lcyBhIGNpcmN1bGFyIHN1YnN0aXR1dGlvbiBncm91cCB0byBlbGVtZW50IGRlY2xhcmF0aW9uICdlJy4KKy4vdGVzdC9zY2hlbWFzL29zcy1mdXp6LTUxMjk1XzAueHNkOjI6IGVsZW1lbnQgZWxlbWVudDogU2NoZW1hcyBwYXJzZXIgZXJyb3IgOiBlbGVtZW50IGRlY2wuICdlJzogVGhlIGVsZW1lbnQgZGVjbGFyYXRpb24gJ2UnIGRlZmluZXMgYSBjaXJjdWxhciBzdWJzdGl0dXRpb24gZ3JvdXAgdG8gZWxlbWVudCBkZWNsYXJhdGlvbiAnZScuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy9yZXN0cmljdGlvbi1lbnVtLTFfMV8wLmVyciBiL3Jlc3VsdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWVudW0tMV8xXzAuZXJyCmluZGV4IDQyZGVlNjEuLmM2YWI1MGQgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWVudW0tMV8xXzAuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWVudW0tMV8xXzAuZXJyCkBAIC0xICsxIEBACi0uL3Rlc3Qvc2NoZW1hcy9yZXN0cmljdGlvbi1lbnVtLTFfMC54bWw6NzogZWxlbWVudCBmb286IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdmb28nOiBbZmFjZXQgJ2VudW1lcmF0aW9uJ10gVGhlIHZhbHVlICdjJyBpcyBub3QgYW4gZWxlbWVudCBvZiB0aGUgc2V0IHsnYScsICdiJywgJ2QnfS4KKy4vdGVzdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWVudW0tMV8wLnhtbDo3OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnZm9vJzogW2ZhY2V0ICdlbnVtZXJhdGlvbiddIFRoZSB2YWx1ZSAnYycgaXMgbm90IGFuIGVsZW1lbnQgb2YgdGhlIHNldCB7J2EnLCAnYicsICdkJ30uCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy91bmlvbjJfMV8xLmVyciBiL3Jlc3VsdC9zY2hlbWFzL3VuaW9uMl8xXzEuZXJyCmluZGV4IGE2NmFkNTkuLjlmZmZjMmMgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL3VuaW9uMl8xXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL3VuaW9uMl8xXzEuZXJyCkBAIC0xLDMgKzEsMyBAQAotLi90ZXN0L3NjaGVtYXMvdW5pb24yXzEueG1sOjQ6IGVsZW1lbnQgRUxFTUVOVFM6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfUVMRU1FTlRTJzogJworLi90ZXN0L3NjaGVtYXMvdW5pb24yXzEueG1sOjQ6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICd7dXJuOnRlc3Q6Zm9vfUVMRU1FTlRTJzogJwogCTUKICcgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGxvY2FsIHVuaW9uIHR5cGUuCmRpZmYgLS1naXQgYS9yZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q0XzBfMS5lcnIgYi9yZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q0XzBfMS5lcnIKaW5kZXggMWI5NjRiMi4uNGExNzY0NiAxMDA2NDQKLS0tIGEvcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NF8wXzEuZXJyCisrKyBiL3Jlc3VsdC9zY2hlbWFzL3Zkdi1maXJzdDRfMF8xLmVycgpAQCAtMSArMSBAQAotLi90ZXN0L3NjaGVtYXMvdmR2LWZpcnN0NF8xLnhtbDoxNDogZWxlbWVudCBib3JuOiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYm9ybic6ICcxOTZUNi0wOC0yMicgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgdGhlIGF0b21pYyB0eXBlICdkYXRlJy4KKy4vdGVzdC9zY2hlbWFzL3Zkdi1maXJzdDRfMS54bWw6MTQ6IFNjaGVtYXMgdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50ICdib3JuJzogJzE5NlQ2LTA4LTIyJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBvZiB0aGUgYXRvbWljIHR5cGUgJ2RhdGUnLgpkaWZmIC0tZ2l0IGEvcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NF8wXzIuZXJyIGIvcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NF8wXzIuZXJyCmluZGV4IDBhNDlmYWEuLmZlNDA1ZjcgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC9zY2hlbWFzL3Zkdi1maXJzdDRfMF8yLmVycgorKysgYi9yZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q0XzBfMi5lcnIKQEAgLTEgKzEgQEAKLS4vdGVzdC9zY2hlbWFzL3Zkdi1maXJzdDRfMi54bWw6MjQ6IGVsZW1lbnQgYm9ybjogU2NoZW1hcyB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgJ2Jvcm4nOiBbZmFjZXQgJ3BhdHRlcm4nXSBUaGUgdmFsdWUgJzIwMDAtMDEtMjBaJyBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHBhdHRlcm4gJ1teOlpdKicuCisuL3Rlc3Qvc2NoZW1hcy92ZHYtZmlyc3Q0XzIueG1sOjI0OiBTY2hlbWFzIHZhbGlkaXR5IGVycm9yIDogRWxlbWVudCAnYm9ybic6IFtmYWNldCAncGF0dGVybiddIFRoZSB2YWx1ZSAnMjAwMC0wMS0yMFonIGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgcGF0dGVybiAnW146Wl0qJy4KZGlmZiAtLWdpdCBhL3Jlc3VsdC92YWxpZC83ODEzMzMueG1sLmVyci5yZHIgYi9yZXN1bHQvdmFsaWQvNzgxMzMzLnhtbC5lcnIucmRyCmluZGV4IDVmZjU2OTkuLmRkOWRmMDggMTAwNjQ0Ci0tLSBhL3Jlc3VsdC92YWxpZC83ODEzMzMueG1sLmVyci5yZHIKKysrIGIvcmVzdWx0L3ZhbGlkLzc4MTMzMy54bWwuZXJyLnJkcgpAQCAtMSw2ICsxLDYgQEAKIC4vdGVzdC92YWxpZC83ODEzMzMueG1sOjQ6IGVsZW1lbnQgYTogdmFsaWRpdHkgZXJyb3IgOiBFbGVtZW50IGEgY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgZXhwZWN0aW5nICggLi4uLCBnb3QgCiA8YS8+CiAgICAgXgotLi90ZXN0L3ZhbGlkLzc4MTMzMy54bWw6NTogZWxlbWVudCBhOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgYSBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBFeHBlY3RpbmcgbW9yZSBjaGlsZAorLi90ZXN0L3ZhbGlkLzc4MTMzMy54bWw6NTogZWxlbWVudCBhOiB2YWxpZGl0eSBlcnJvciA6IEVsZW1lbnQgYSBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBFeHBlY3RpbmcgbW9yZSBjaGlsZHJlbgogCiBeCmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvaHVnZS54bWwgYi9yZXN1bHQvdmFsaWQvaHVnZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YzFiOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc3VsdC92YWxpZC9odWdlLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGRvYyBbCis8IUVOVElUWSAlIHBlIFNZU1RFTSAiZHRkcy9odWdlLmVudCI+Cis8IS0tIE1vcmUgdGhhbiBNSU5MRU4gKDQwMDApIGJ5dGVzIG9mIGNvbW1lbnRzIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+PCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT48IUVMRU1FTlQgZG9jICgjUENEQVRBKT4KK10+Cis8ZG9jPnRlc3Q8L2RvYz4KZGlmZiAtLWdpdCBhL3Jlc3VsdC92YWxpZC9uczIueG1sIGIvcmVzdWx0L3ZhbGlkL25zMi54bWwKaW5kZXggYTRjMzBhOC4uYmVhY2YxNSAxMDA2NDQKLS0tIGEvcmVzdWx0L3ZhbGlkL25zMi54bWwKKysrIGIvcmVzdWx0L3ZhbGlkL25zMi54bWwKQEAgLTcsNSArNyw1IEBACiA8IUFUVExJU1QgYTppbm5lciBhdHRyIENEQVRBICNGSVhFRCAieWVzIj4KIF0+CiA8YTpvdXRlciB4bWxuczphPSJ1cm46bmFtZXNwYWNlIj4KLSAgPGE6aW5uZXIvPgorICA8YTppbm5lciB4bWxuczphPSJ1cm46bmFtZXNwYWNlIi8+CiA8L2E6b3V0ZXI+CmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvcGUtbGF0aW4xLnhtbCBiL3Jlc3VsdC92YWxpZC9wZS1sYXRpbjEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTQ4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXN1bHQvdmFsaWQvcGUtbGF0aW4xLnhtbApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGRvYyBbCis8IUVMRU1FTlQgZG9jICgjUENEQVRBKT4KKzwhRU5USVRZICUgcGUgU1lTVEVNICJkdGRzL3BlLWxhdGluMS5lbnQiPgorPCFFTlRJVFkgbGF0aW4xICLDpMO2w7wiPgorXT4KKzxkb2M+JmxhdGluMTs8L2RvYz4KZGlmZiAtLWdpdCBhL3Jlc3VsdC92YWxpZC9wZS12YWwtbGF0aW4xLnhtbCBiL3Jlc3VsdC92YWxpZC9wZS12YWwtbGF0aW4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGEzNzIwCi0tLSAvZGV2L251bGwKKysrIGIvcmVzdWx0L3ZhbGlkL3BlLXZhbC1sYXRpbjEueG1sCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgZG9jIFNZU1RFTSAiZHRkcy9wZS12YWwtbGF0aW4xLmR0ZCI+Cis8ZG9jPiZsYXRpbjE7PC9kb2M+CmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvdDQuZHRkLmVyciBiL3Jlc3VsdC92YWxpZC90NC5kdGQuZXJyCmluZGV4IDIzYTMyNTguLmQ0NTc2ZTMgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC92YWxpZC90NC5kdGQuZXJyCisrKyBiL3Jlc3VsdC92YWxpZC90NC5kdGQuZXJyCkBAIC0xLDYgKzEsMyBAQAogLi90ZXN0L3ZhbGlkL3Q0LmR0ZDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydFRhZzogaW52YWxpZCBlbGVtZW50IG5hbWUKIDwhRU5USVRZICUgcGVyY2VudCAiJiN4MjU7Ij4KICBeCi0uL3Rlc3QvdmFsaWQvdDQuZHRkOjE6IHBhcnNlciBlcnJvciA6IEV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKLTwhRU5USVRZICUgcGVyY2VudCAiJiN4MjU7Ij4KLSBeCmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvdDRhLmR0ZC5lcnIgYi9yZXN1bHQvdmFsaWQvdDRhLmR0ZC5lcnIKaW5kZXggNDhjZGQ1Zi4uMzhkYjk4OSAxMDA2NDQKLS0tIGEvcmVzdWx0L3ZhbGlkL3Q0YS5kdGQuZXJyCisrKyBiL3Jlc3VsdC92YWxpZC90NGEuZHRkLmVycgpAQCAtMSw2ICsxLDMgQEAKIC4vdGVzdC92YWxpZC90NGEuZHRkOjE6IHBhcnNlciBlcnJvciA6IFN0YXJ0VGFnOiBpbnZhbGlkIGVsZW1lbnQgbmFtZQogPCFFTlRJVFkgJSBwZXJjZW50ICImI3gyNTsiPgogIF4KLS4vdGVzdC92YWxpZC90NGEuZHRkOjE6IHBhcnNlciBlcnJvciA6IEV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKLTwhRU5USVRZICUgcGVyY2VudCAiJiN4MjU7Ij4KLSBeCmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvdDYuZHRkLmVyciBiL3Jlc3VsdC92YWxpZC90Ni5kdGQuZXJyCmluZGV4IDZlODRkNjguLjQ4N2MwN2QgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC92YWxpZC90Ni5kdGQuZXJyCisrKyBiL3Jlc3VsdC92YWxpZC90Ni5kdGQuZXJyCkBAIC0xLDYgKzEsMyBAQAogLi90ZXN0L3ZhbGlkL3Q2LmR0ZDoxOiBwYXJzZXIgZXJyb3IgOiBTdGFydFRhZzogaW52YWxpZCBlbGVtZW50IG5hbWUKIDwhRU5USVRZICUgeGRlZiAiZGVmIj4KICBeCi0uL3Rlc3QvdmFsaWQvdDYuZHRkOjE6IHBhcnNlciBlcnJvciA6IEV4dHJhIGNvbnRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKLTwhRU5USVRZICUgeGRlZiAiZGVmIj4KLSBeCmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvdDgueG1sLmVyciBiL3Jlc3VsdC92YWxpZC90OC54bWwuZXJyCmluZGV4IDUyNzI2OTQuLjhmODc0MTcgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC92YWxpZC90OC54bWwuZXJyCisrKyBiL3Jlc3VsdC92YWxpZC90OC54bWwuZXJyCkBAIC01LDE3ICs1LDMgQEAKIEVudGl0eTogbGluZSAxOiAKICZsdDshRUxFTUVOVCByb290IChtaWRkbGUpID4KIF4KLS4vdGVzdC92YWxpZC90OC54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0lZGVmcm9vdDsgJWRlZm1pZGRsZTsgJWRlZnRlc3Q7Ci0gICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgbWlkZGxlICh0ZXN0KSA+Ci1eCi0uL3Rlc3QvdmFsaWQvdDgueG1sOjY6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KLQotJWRlZnJvb3Q7ICVkZWZtaWRkbGU7ICVkZWZ0ZXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLUVudGl0eTogbGluZSAxOiAKLSZsdDshRUxFTUVOVCB0ZXN0ICgjUENEQVRBKSA+Ci1eCmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvdDgueG1sLmVyci5yZHIgYi9yZXN1bHQvdmFsaWQvdDgueG1sLmVyci5yZHIKaW5kZXggOGRhMDhmYi4uMDZiN2JhZiAxMDA2NDQKLS0tIGEvcmVzdWx0L3ZhbGlkL3Q4LnhtbC5lcnIucmRyCisrKyBiL3Jlc3VsdC92YWxpZC90OC54bWwuZXJyLnJkcgpAQCAtNSwxOCArNSw0IEBACiBFbnRpdHk6IGxpbmUgMTogCiAmbHQ7IUVMRU1FTlQgcm9vdCAobWlkZGxlKSA+CiBeCi0uL3Rlc3QvdmFsaWQvdDgueG1sOjY6IHBhcnNlciBlcnJvciA6IGludGVybmFsIGVycm9yOiB4bWxQYXJzZUludGVybmFsU3Vic2V0OiBlcnJvciBkZXRlY3RlZCBpbiBNYXJrdXAgZGVjbGFyYXRpb24KLQotJWRlZnJvb3Q7ICVkZWZtaWRkbGU7ICVkZWZ0ZXN0OwotICAgICAgICAgICAgICAgICAgICAgXgotRW50aXR5OiBsaW5lIDE6IAotJmx0OyFFTEVNRU5UIG1pZGRsZSAodGVzdCkgPgotXgotLi90ZXN0L3ZhbGlkL3Q4LnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLSVkZWZyb290OyAlZGVmbWlkZGxlOyAlZGVmdGVzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgdGVzdCAoI1BDREFUQSkgPgotXgogLi90ZXN0L3ZhbGlkL3Q4LnhtbCA6IGZhaWxlZCB0byBwYXJzZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L3ZhbGlkL3Q4YS54bWwuZXJyIGIvcmVzdWx0L3ZhbGlkL3Q4YS54bWwuZXJyCmluZGV4IDI4NDZiMTkuLjIxMWU5ZTggMTAwNjQ0Ci0tLSBhL3Jlc3VsdC92YWxpZC90OGEueG1sLmVycgorKysgYi9yZXN1bHQvdmFsaWQvdDhhLnhtbC5lcnIKQEAgLTUsMTcgKzUsMyBAQAogRW50aXR5OiBsaW5lIDE6IAogJmx0OyFFTEVNRU5UIHJvb3QgKG1pZGRsZSkgPgogXgotLi90ZXN0L3ZhbGlkL3Q4YS54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0lZGVmcm9vdDslZGVmbWlkZGxlOyVkZWZ0ZXN0OwotICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgbWlkZGxlICh0ZXN0KSA+Ci1eCi0uL3Rlc3QvdmFsaWQvdDhhLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLSVkZWZyb290OyVkZWZtaWRkbGU7JWRlZnRlc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLUVudGl0eTogbGluZSAxOiAKLSZsdDshRUxFTUVOVCB0ZXN0ICgjUENEQVRBKSA+Ci1eCmRpZmYgLS1naXQgYS9yZXN1bHQvdmFsaWQvdDhhLnhtbC5lcnIucmRyIGIvcmVzdWx0L3ZhbGlkL3Q4YS54bWwuZXJyLnJkcgppbmRleCA2YWJlNzVhLi4yYWU5MGM5IDEwMDY0NAotLS0gYS9yZXN1bHQvdmFsaWQvdDhhLnhtbC5lcnIucmRyCisrKyBiL3Jlc3VsdC92YWxpZC90OGEueG1sLmVyci5yZHIKQEAgLTUsMTggKzUsNCBAQAogRW50aXR5OiBsaW5lIDE6IAogJmx0OyFFTEVNRU5UIHJvb3QgKG1pZGRsZSkgPgogXgotLi90ZXN0L3ZhbGlkL3Q4YS54bWw6NjogcGFyc2VyIGVycm9yIDogaW50ZXJuYWwgZXJyb3I6IHhtbFBhcnNlSW50ZXJuYWxTdWJzZXQ6IGVycm9yIGRldGVjdGVkIGluIE1hcmt1cCBkZWNsYXJhdGlvbgotCi0lZGVmcm9vdDslZGVmbWlkZGxlOyVkZWZ0ZXN0OwotICAgICAgICAgICAgICAgICAgICBeCi1FbnRpdHk6IGxpbmUgMTogCi0mbHQ7IUVMRU1FTlQgbWlkZGxlICh0ZXN0KSA+Ci1eCi0uL3Rlc3QvdmFsaWQvdDhhLnhtbDo2OiBwYXJzZXIgZXJyb3IgOiBpbnRlcm5hbCBlcnJvcjogeG1sUGFyc2VJbnRlcm5hbFN1YnNldDogZXJyb3IgZGV0ZWN0ZWQgaW4gTWFya3VwIGRlY2xhcmF0aW9uCi0KLSVkZWZyb290OyVkZWZtaWRkbGU7JWRlZnRlc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLUVudGl0eTogbGluZSAxOiAKLSZsdDshRUxFTUVOVCB0ZXN0ICgjUENEQVRBKSA+Ci1eCiAuL3Rlc3QvdmFsaWQvdDhhLnhtbCA6IGZhaWxlZCB0byBwYXJzZQpkaWZmIC0tZ2l0IGEvcmVzdWx0L3htbDIuc2F4IGIvcmVzdWx0L3htbDIuc2F4CmluZGV4IDE0MWFjY2QuLmNlZDRjNzMgMTAwNjQ0Ci0tLSBhL3Jlc3VsdC94bWwyLnNheAorKysgYi9yZXN1bHQveG1sMi5zYXgKQEAgLTgsMTEgKzgsMTUgQEAKIFNBWC5lbnRpdHlEZWNsKHp6LCA0LCAobnVsbCksIChudWxsKSwgPCFFTlRJVFkgdHJpY2t5ICJlcnJvci1wcm9uZSIgPikKIFNBWC5nZXRQYXJhbWV0ZXJFbnRpdHkoenopCiBTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHh4KQotU0FYLmVycm9yOiBQRVJlZmVyZW5jZTogJXh4OyBub3QgZm91bmQKK1NBWC5nZXRQYXJhbWV0ZXJFbnRpdHkoenopCitTQVguZW50aXR5RGVjbCh0cmlja3ksIDEsIChudWxsKSwgKG51bGwpLCBlcnJvci1wcm9uZSkKK1NBWC5nZXRFbnRpdHkodHJpY2t5KQorU0FYLmV4dGVybmFsU3Vic2V0KHRlc3QsICwgKQorU0FYLnN0YXJ0RWxlbWVudCh0ZXN0KQogU0FYLmNoYXJhY3RlcnMoVGhpcyBzYW1wbGUgc2hvd3MgYSAsIDIwKQogU0FYLmdldEVudGl0eSh0cmlja3kpCi1TQVguZXJyb3I6IEVudGl0eSAndHJpY2t5JyBub3QgZGVmaW5lZAorU0FYLmNoYXJhY3RlcnMoZXJyb3ItcHJvbmUsIDExKQogU0FYLnJlZmVyZW5jZSh0cmlja3kpCiBTQVguY2hhcmFjdGVycyggbWV0aG9kLiwgOCkKK1NBWC5lbmRFbGVtZW50KHRlc3QpCiBTQVguZW5kRG9jdW1lbnQoKQoteG1sU0FYVXNlclBhcnNlRmlsZSByZXR1cm5lZCBlcnJvciAyNwpkaWZmIC0tZ2l0IGEvcmVzdWx0L3htbDIuc2F4MiBiL3Jlc3VsdC94bWwyLnNheDIKaW5kZXggMTQxYWNjZC4uZjY2YjllMCAxMDA2NDQKLS0tIGEvcmVzdWx0L3htbDIuc2F4MgorKysgYi9yZXN1bHQveG1sMi5zYXgyCkBAIC04LDExICs4LDE1IEBACiBTQVguZW50aXR5RGVjbCh6eiwgNCwgKG51bGwpLCAobnVsbCksIDwhRU5USVRZIHRyaWNreSAiZXJyb3ItcHJvbmUiID4pCiBTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHp6KQogU0FYLmdldFBhcmFtZXRlckVudGl0eSh4eCkKLVNBWC5lcnJvcjogUEVSZWZlcmVuY2U6ICV4eDsgbm90IGZvdW5kCitTQVguZ2V0UGFyYW1ldGVyRW50aXR5KHp6KQorU0FYLmVudGl0eURlY2wodHJpY2t5LCAxLCAobnVsbCksIChudWxsKSwgZXJyb3ItcHJvbmUpCitTQVguZ2V0RW50aXR5KHRyaWNreSkKK1NBWC5leHRlcm5hbFN1YnNldCh0ZXN0LCAsICkKK1NBWC5zdGFydEVsZW1lbnROcyh0ZXN0LCBOVUxMLCBOVUxMLCAwLCAwLCAwKQogU0FYLmNoYXJhY3RlcnMoVGhpcyBzYW1wbGUgc2hvd3MgYSAsIDIwKQogU0FYLmdldEVudGl0eSh0cmlja3kpCi1TQVguZXJyb3I6IEVudGl0eSAndHJpY2t5JyBub3QgZGVmaW5lZAorU0FYLmNoYXJhY3RlcnMoZXJyb3ItcHJvbmUsIDExKQogU0FYLnJlZmVyZW5jZSh0cmlja3kpCiBTQVguY2hhcmFjdGVycyggbWV0aG9kLiwgOCkKK1NBWC5lbmRFbGVtZW50TnModGVzdCwgTlVMTCwgTlVMTCkKIFNBWC5lbmREb2N1bWVudCgpCi14bWxTQVhVc2VyUGFyc2VGaWxlIHJldHVybmVkIGVycm9yIDI3CmRpZmYgLS1naXQgYS9yZXN1bHQveG1saWQvaWRfdHN0My54bWwuZXJyIGIvcmVzdWx0L3htbGlkL2lkX3RzdDMueG1sLmVycgppbmRleCA3YWEzZTFjLi5iYWZkY2RlIDEwMDY0NAotLS0gYS9yZXN1bHQveG1saWQvaWRfdHN0My54bWwuZXJyCisrKyBiL3Jlc3VsdC94bWxpZC9pZF90c3QzLnhtbC5lcnIKQEAgLTEsNiArMSwzIEBACi0uL3Rlc3QveG1saWQvaWRfdHN0My54bWw6MTogbmFtZXNwYWNlIGVycm9yIDogRmFpbGVkIHRvIHBhcnNlIFFOYW1lICdmOm86JworLi90ZXN0L3htbGlkL2lkX3RzdDMueG1sOjE6IG5hbWVzcGFjZSBlcnJvciA6IEZhaWxlZCB0byBwYXJzZSBRTmFtZSAnZjpvOm8nCiA8ZjpvOm8geG1sOmlkPSJiYXIiLz4KLSAgICBeCi0uL3Rlc3QveG1saWQvaWRfdHN0My54bWw6MTogbmFtZXNwYWNlIGVycm9yIDogTmFtZXNwYWNlIHByZWZpeCBmIG9uIG86byBpcyBub3QgZGVmaW5lZAotPGY6bzpvIHhtbDppZD0iYmFyIi8+Ci0gICAgICAgICAgICAgICAgICAgXgorICAgICAgXgpkaWZmIC0tZ2l0IGEvcnVuc3VpdGUuYyBiL3J1bnN1aXRlLmMKaW5kZXggNDgzNDkwYS4uYTM2YTVmMyAxMDA2NDQKLS0tIGEvcnVuc3VpdGUuYworKysgYi9ydW5zdWl0ZS5jCkBAIC02LDE2ICs2LDExIEBACiAgKiBkYW5pZWxAdmVpbGxhcmQuY29tCiAgKi8KIAotI2luY2x1ZGUgImxpYnhtbC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZiAhZGVmaW5lZChfV0lOMzIpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+CiAKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgpAQCAtMjA2LDkgKzIwMSw2IEBACiAKIHN0YXRpYyB2b2lkCiBpbml0aWFsaXplTGlieG1sMih2b2lkKSB7Ci0gICAgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUgPSAwOwotICAgIHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdCgwKTsKLQogICAgIHhtbE1lbVNldHVwKHhtbE1lbUZyZWUsIHhtbE1lbU1hbGxvYywgeG1sTWVtUmVhbGxvYywgeG1sTWVtb3J5U3RyZHVwKTsKICAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgeG1sU2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIodGVzdEV4dGVybmFsRW50aXR5TG9hZGVyKTsKQEAgLTUyNyw3ICs1MTksNiBAQAogCSAgICBpZiAoKG1lbSAhPSB4bWxNZW1Vc2VkKCkpICYmIChleHRyYU1lbW9yeUZyb21SZXNvbHZlciA9PSAwKSkgewogCSAgICAgICAgdGVzdF9sb2coIlZhbGlkYXRpb24gb2YgaW5zdGFuY2UgbGluZSAlbGQgbGVha2VkICVkXG4iLAogCQkgICAgICAgIHhtbEdldExpbmVObyh0bXApLCB4bWxNZW1Vc2VkKCkgLSBtZW0pOwotCQl4bWxNZW1vcnlEdW1wKCk7CiAJICAgICAgICBuYl9sZWFrcysrOwogCSAgICB9CiAJfQpAQCAtNTgyLDcgKzU3Myw2IEBACiAJICAgIGlmICgobWVtICE9IHhtbE1lbVVzZWQoKSkgJiYgKGV4dHJhTWVtb3J5RnJvbVJlc29sdmVyID09IDApKSB7CiAJICAgICAgICB0ZXN0X2xvZygiVmFsaWRhdGlvbiBvZiBpbnN0YW5jZSBsaW5lICVsZCBsZWFrZWQgJWRcbiIsCiAJCSAgICAgICAgeG1sR2V0TGluZU5vKHRtcCksIHhtbE1lbVVzZWQoKSAtIG1lbSk7Ci0JCXhtbE1lbW9yeUR1bXAoKTsKIAkgICAgICAgIG5iX2xlYWtzKys7CiAJICAgIH0KIAl9CkBAIC0xMDU0LDEzICsxMDQ0LDE5IEBACiAgICAgb2xkX3Rlc3RzID0gbmJfdGVzdHM7CiAgICAgb2xkX2xlYWtzID0gbmJfbGVha3M7CiAgICAgeHNkVGVzdCgpOwotICAgIGlmICgobmJfZXJyb3JzID09IG9sZF9lcnJvcnMpICYmIChuYl9sZWFrcyA9PSBvbGRfbGVha3MpKQotCXByaW50ZigiUmFuICVkIHRlc3RzLCBubyBlcnJvcnNcbiIsIG5iX3Rlc3RzIC0gb2xkX3Rlc3RzKTsKLSAgICBlbHNlCi0JcHJpbnRmKCJSYW4gJWQgdGVzdHMsICVkIGVycm9ycywgJWQgbGVha3NcbiIsCi0JICAgICAgIG5iX3Rlc3RzIC0gb2xkX3Rlc3RzLAotCSAgICAgICBuYl9lcnJvcnMgLSBvbGRfZXJyb3JzLAotCSAgICAgICBuYl9sZWFrcyAtIG9sZF9sZWFrcyk7CisgICAgcHJpbnRmKCJSYW4gJWQgdGVzdHMsICVkIGVycm9ycywgJWQgbGVha3NcbiIsCisgICAgICAgICAgIG5iX3Rlc3RzIC0gb2xkX3Rlc3RzLAorICAgICAgICAgICBuYl9lcnJvcnMgLSBvbGRfZXJyb3JzLAorICAgICAgICAgICBuYl9sZWFrcyAtIG9sZF9sZWFrcyk7CisgICAgaWYgKG5iX2Vycm9ycyAtIG9sZF9lcnJvcnMgPT0gMTApIHsKKyAgICAgICAgcHJpbnRmKCIxMCBlcnJvcnMgd2VyZSBleHBlY3RlZFxuIik7CisgICAgICAgIG5iX2Vycm9ycyA9IG9sZF9lcnJvcnM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCIxMCBlcnJvcnMgd2VyZSBleHBlY3RlZCwgZ290ICVkIGVycm9yc1xuIiwKKyAgICAgICAgICAgICAgIG5iX2Vycm9ycyAtIG9sZF9lcnJvcnMpOworICAgICAgICBuYl9lcnJvcnMgPSBvbGRfZXJyb3JzICsgMTsKKyAgICB9CisKICAgICBvbGRfZXJyb3JzID0gbmJfZXJyb3JzOwogICAgIG9sZF90ZXN0cyA9IG5iX3Rlc3RzOwogICAgIG9sZF9sZWFrcyA9IG5iX2xlYWtzOwpAQCAtMTA3Miw2ICsxMDY4LDcgQEAKIAkgICAgICAgbmJfdGVzdHMgLSBvbGRfdGVzdHMsCiAJICAgICAgIG5iX2Vycm9ycyAtIG9sZF9lcnJvcnMsCiAJICAgICAgIG5iX2xlYWtzIC0gb2xkX2xlYWtzKTsKKwogICAgIG9sZF9lcnJvcnMgPSBuYl9lcnJvcnM7CiAgICAgb2xkX3Rlc3RzID0gbmJfdGVzdHM7CiAgICAgb2xkX2xlYWtzID0gbmJfbGVha3M7CkBAIC0xMDgzLDYgKzEwODAsNyBAQAogCSAgICAgICBuYl90ZXN0cyAtIG9sZF90ZXN0cywKIAkgICAgICAgbmJfZXJyb3JzIC0gb2xkX2Vycm9ycywKIAkgICAgICAgbmJfbGVha3MgLSBvbGRfbGVha3MpOworCiAgICAgb2xkX2Vycm9ycyA9IG5iX2Vycm9yczsKICAgICBvbGRfdGVzdHMgPSBuYl90ZXN0czsKICAgICBvbGRfbGVha3MgPSBuYl9sZWFrczsKQEAgLTExMDAsNiArMTA5OCw3IEBACiAJICAgICAgIG5iX2Vycm9ycyAtIG9sZF9lcnJvcnMsCiAJICAgICAgIG5iX2ludGVybmFscywKIAkgICAgICAgbmJfbGVha3MgLSBvbGRfbGVha3MpOworCiAgICAgb2xkX2Vycm9ycyA9IG5iX2Vycm9yczsKICAgICBvbGRfdGVzdHMgPSBuYl90ZXN0czsKICAgICBvbGRfbGVha3MgPSBuYl9sZWFrczsKQEAgLTExMDcsMTYgKzExMDYsMjAgQEAKICAgICBuYl9zY2hlbWF0YXMgPSAwOwogICAgIHhzdGNNZXRhZGF0YSgieHN0Yy9UZXN0cy9NZXRhZGF0YS9TdW5YTUxTY2hlbWExLTAtMjAwMjAxMTYudGVzdFNldCIsCiAJCSAieHN0Yy9UZXN0cy8iKTsKLSAgICBpZiAoKG5iX2Vycm9ycyA9PSBvbGRfZXJyb3JzKSAmJiAobmJfbGVha3MgPT0gb2xkX2xlYWtzKSkKKyAgICBpZiAoKG5iX2Vycm9ycyA9PSBvbGRfZXJyb3JzKSAmJiAobmJfbGVha3MgPT0gb2xkX2xlYWtzKSkgewogCXByaW50ZigiUmFuICVkIHRlc3RzICglZCBzY2hlbWF0YSksIG5vIGVycm9yc1xuIiwKIAkgICAgICAgbmJfdGVzdHMgLSBvbGRfdGVzdHMsIG5iX3NjaGVtYXRhcyk7Ci0gICAgZWxzZQorICAgIH0gZWxzZSB7CiAJcHJpbnRmKCJSYW4gJWQgdGVzdHMgKCVkIHNjaGVtYXRhKSwgJWQgZXJyb3JzICglZCBpbnRlcm5hbHMpLCAlZCBsZWFrc1xuIiwKIAkgICAgICAgbmJfdGVzdHMgLSBvbGRfdGVzdHMsCiAJICAgICAgIG5iX3NjaGVtYXRhcywKIAkgICAgICAgbmJfZXJyb3JzIC0gb2xkX2Vycm9ycywKIAkgICAgICAgbmJfaW50ZXJuYWxzLAogCSAgICAgICBuYl9sZWFrcyAtIG9sZF9sZWFrcyk7CisgICAgICAgIHByaW50ZigiU29tZSBlcnJvcnMgd2VyZSBleHBlY3RlZC5cbiIpOworICAgICAgICBuYl9lcnJvcnMgPSBvbGRfZXJyb3JzOworICAgIH0KKwogICAgIG9sZF9lcnJvcnMgPSBuYl9lcnJvcnM7CiAgICAgb2xkX3Rlc3RzID0gbmJfdGVzdHM7CiAgICAgb2xkX2xlYWtzID0gbmJfbGVha3M7CkBAIC0xMTI0LDE2ICsxMTI3LDE5IEBACiAgICAgbmJfc2NoZW1hdGFzID0gMDsKICAgICB4c3RjTWV0YWRhdGEoInhzdGMvVGVzdHMvTWV0YWRhdGEvTVNYTUxTY2hlbWExLTAtMjAwMjAxMTYudGVzdFNldCIsCiAJCSAieHN0Yy9UZXN0cy8iKTsKLSAgICBpZiAoKG5iX2Vycm9ycyA9PSBvbGRfZXJyb3JzKSAmJiAobmJfbGVha3MgPT0gb2xkX2xlYWtzKSkKKyAgICBpZiAoKG5iX2Vycm9ycyA9PSBvbGRfZXJyb3JzKSAmJiAobmJfbGVha3MgPT0gb2xkX2xlYWtzKSkgewogCXByaW50ZigiUmFuICVkIHRlc3RzICglZCBzY2hlbWF0YSksIG5vIGVycm9yc1xuIiwKIAkgICAgICAgbmJfdGVzdHMgLSBvbGRfdGVzdHMsIG5iX3NjaGVtYXRhcyk7Ci0gICAgZWxzZQorICAgIH0gZWxzZSB7CiAJcHJpbnRmKCJSYW4gJWQgdGVzdHMgKCVkIHNjaGVtYXRhKSwgJWQgZXJyb3JzICglZCBpbnRlcm5hbHMpLCAlZCBsZWFrc1xuIiwKIAkgICAgICAgbmJfdGVzdHMgLSBvbGRfdGVzdHMsCiAJICAgICAgIG5iX3NjaGVtYXRhcywKIAkgICAgICAgbmJfZXJyb3JzIC0gb2xkX2Vycm9ycywKIAkgICAgICAgbmJfaW50ZXJuYWxzLAogCSAgICAgICBuYl9sZWFrcyAtIG9sZF9sZWFrcyk7CisgICAgICAgIHByaW50ZigiU29tZSBlcnJvcnMgd2VyZSBleHBlY3RlZC5cbiIpOworICAgICAgICBuYl9lcnJvcnMgPSBvbGRfZXJyb3JzOworICAgIH0KIAogICAgIGlmICgobmJfZXJyb3JzID09IDApICYmIChuYl9sZWFrcyA9PSAwKSkgewogICAgICAgICByZXQgPSAwOwpAQCAtMTE0Niw3ICsxMTUyLDYgQEAKICAgICB9CiAgICAgeG1sWFBhdGhGcmVlQ29udGV4dChjdHh0WFBhdGgpOwogICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAKICAgICBpZiAobG9nZmlsZSAhPSBOVUxMKQogICAgICAgICBmY2xvc2UobG9nZmlsZSk7CmRpZmYgLS1naXQgYS9ydW50ZXN0LmMgYi9ydW50ZXN0LmMKaW5kZXggODYyNmI5MS4uYzc4ZWVjOCAxMDA2NDQKLS0tIGEvcnVudGVzdC5jCisrKyBiL3J1bnRlc3QuYwpAQCAtMTMsMTIgKzEzLDEzIEBACiAKICNpbmNsdWRlICJsaWJ4bWwuaCIKICNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWYgIWRlZmluZWQoX1dJTjMyKQorI2lmZGVmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbGlmIGRlZmluZWQgKF9XSU4zMikKKyNpbmNsdWRlIDxpby5oPgogI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogCkBAIC02MiwyMCArNjMsMTggQEAKICNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECiAjaW5jbHVkZSA8bGlieG1sL0hUTUxwYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvSFRNTHRyZWUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChMSUJYTUxfVEhSRUFEX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX0NBVEFMT0dfRU5BQkxFRCkKKyNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvY2F0YWxvZy5oPgorI2VuZGlmCiAKIC8qCiAgKiBwc2V1ZG8gZmxhZyBmb3IgdGhlIHVuaWZpY2F0aW9uIG9mIEhUTUwgYW5kIFhNTCB0ZXN0cwogICovCiAjZGVmaW5lIFhNTF9QQVJTRV9IVE1MIDEgPDwgMjQKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChMSUJYTUxfVEhSRUFEX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX0NBVEFMT0dfRU5BQkxFRCkKLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgotI2luY2x1ZGUgPGxpYnhtbC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgotI2luY2x1ZGUgPGxpYnhtbC9jYXRhbG9nLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKIAogLyoKICAqIE9fQklOQVJZIGlzIGp1c3QgZm9yIFdpbmRvd3MgY29tcGF0aWJpbGl0eSAtIGlmIGl0IGlzbid0IGRlZmluZWQKQEAgLTExMSw3ICsxMTAsNiBAQAogI2lmIGRlZmluZWQoX1dJTjMyKQogCiAjaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPGlvLmg+CiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0yNDcsNyArMjQ1LDcgQEAKIHN0YXRpYyBjaGFyIHRlc3RFcnJvcnNbMzI3NjldOwogc3RhdGljIGludCB0ZXN0RXJyb3JzU2l6ZSA9IDA7CiAKLXN0YXRpYyB2b2lkIFhNTENERUNMCitzdGF0aWMgdm9pZAogdGVzdEVycm9ySGFuZGxlcih2b2lkICpjdHggIEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSB7CiAgICAgdmFfbGlzdCBhcmdzOwogICAgIGludCByZXM7CkBAIC0yNjksNyArMjY3LDcgQEAKICAgICB0ZXN0RXJyb3JzW3Rlc3RFcnJvcnNTaXplXSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIFhNTENERUNMCitzdGF0aWMgdm9pZAogY2hhbm5lbCh2b2lkICpjdHggIEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSB7CiAgICAgdmFfbGlzdCBhcmdzOwogICAgIGludCByZXM7CkBAIC0yOTIsNyArMjkwLDcgQEAKIH0KIAogLyoqCi0gKiB4bWxQYXJzZXJQcmludEZpbGVDb250ZXh0OgorICogeG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dEludGVybmFsOgogICogQGlucHV0OiAgYW4geG1sUGFyc2VySW5wdXRQdHIgaW5wdXQKICAqCiAgKiBEaXNwbGF5cyBjdXJyZW50IGNvbnRleHQgd2l0aGluIHRoZSBpbnB1dCBjb250ZW50IGZvciBlcnJvciB0cmFja2luZwpAQCAtMzAxLDEyICsyOTksMTQgQEAKIHN0YXRpYyB2b2lkCiB4bWxQYXJzZXJQcmludEZpbGVDb250ZXh0SW50ZXJuYWwoeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQgLAogCQl4bWxHZW5lcmljRXJyb3JGdW5jIGNoYW5sLCB2b2lkICpkYXRhICkgewotICAgIGNvbnN0IHhtbENoYXIgKmN1ciwgKmJhc2U7CisgICAgY29uc3QgeG1sQ2hhciAqY3VyLCAqYmFzZSwgKnN0YXJ0OwogICAgIHVuc2lnbmVkIGludCBuLCBjb2w7CS8qIEdDQyB3YXJucyBpZiBzaWduZWQsIGJlY2F1c2UgY29tcGFyZWQgd2l0aCBzaXplb2YoKSAqLwogICAgIHhtbENoYXIgIGNvbnRlbnRbODFdOyAvKiBzcGFjZSBmb3IgODAgY2hhcnMgKyBsaW5lIHRlcm1pbmF0b3IgKi8KICAgICB4bWxDaGFyICpjdG50OwogCi0gICAgaWYgKGlucHV0ID09IE5VTEwpIHJldHVybjsKKyAgICBpZiAoKGlucHV0ID09IE5VTEwpIHx8IChpbnB1dC0+Y3VyID09IE5VTEwpKQorICAgICAgICByZXR1cm47CisKICAgICBjdXIgPSBpbnB1dC0+Y3VyOwogICAgIGJhc2UgPSBpbnB1dC0+YmFzZTsKICAgICAvKiBza2lwIGJhY2t3YXJkcyBvdmVyIGFueSBlbmQtb2YtbGluZXMgKi8KQEAgLTMxNiwyMSArMzE2LDMyIEBACiAgICAgbiA9IDA7CiAgICAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgYmVnaW5uaW5nLW9mLWxpbmUgKHRvIG1heCBidWZmIHNpemUpICovCiAgICAgd2hpbGUgKChuKysgPCAoc2l6ZW9mKGNvbnRlbnQpLTEpKSAmJiAoY3VyID4gYmFzZSkgJiYKLSAgICgqKGN1cikgIT0gJ1xuJykgJiYgKCooY3VyKSAhPSAnXHInKSkKKwkgICAoKihjdXIpICE9ICdcbicpICYmICgqKGN1cikgIT0gJ1xyJykpCiAgICAgICAgIGN1ci0tOwotICAgIGlmICgoKihjdXIpID09ICdcbicpIHx8ICgqKGN1cikgPT0gJ1xyJykpIGN1cisrOworICAgIGlmICgoKihjdXIpID09ICdcbicpIHx8ICgqKGN1cikgPT0gJ1xyJykpIHsKKyAgICAgICAgY3VyKys7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogc2tpcCBvdmVyIGNvbnRpbnVhdGlvbiBieXRlcyAqLworICAgICAgICB3aGlsZSAoKGN1ciA8IGlucHV0LT5jdXIpICYmICgoKmN1ciAmIDB4QzApID09IDB4ODApKQorICAgICAgICAgICAgY3VyKys7CisgICAgfQogICAgIC8qIGNhbGN1bGF0ZSB0aGUgZXJyb3IgcG9zaXRpb24gaW4gdGVybXMgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KICAgICBjb2wgPSBpbnB1dC0+Y3VyIC0gY3VyOwogICAgIC8qIHNlYXJjaCBmb3J3YXJkIGZvciBlbmQtb2YtbGluZSAodG8gbWF4IGJ1ZmYgc2l6ZSkgKi8KICAgICBuID0gMDsKLSAgICBjdG50ID0gY29udGVudDsKKyAgICBzdGFydCA9IGN1cjsKICAgICAvKiBjb3B5IHNlbGVjdGVkIHRleHQgdG8gb3VyIGJ1ZmZlciAqLwotICAgIHdoaWxlICgoKmN1ciAhPSAwKSAmJiAoKihjdXIpICE9ICdcbicpICYmCi0gICAoKihjdXIpICE9ICdccicpICYmIChuIDwgc2l6ZW9mKGNvbnRlbnQpLTEpKSB7Ci0JCSpjdG50KysgPSAqY3VyKys7Ci0JbisrOworICAgIHdoaWxlICgoKmN1ciAhPSAwKSAmJiAoKihjdXIpICE9ICdcbicpICYmICgqKGN1cikgIT0gJ1xyJykpIHsKKyAgICAgICAgaW50IGxlbiA9IGlucHV0LT5lbmQgLSBjdXI7CisgICAgICAgIGludCBjID0geG1sR2V0VVRGOENoYXIoY3VyLCAmbGVuKTsKKworICAgICAgICBpZiAoKGMgPCAwKSB8fCAobiArIGxlbiA+IHNpemVvZihjb250ZW50KS0xKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjdXIgKz0gbGVuOworCW4gKz0gbGVuOwogICAgIH0KLSAgICAqY3RudCA9IDA7CisgICAgbWVtY3B5KGNvbnRlbnQsIHN0YXJ0LCBuKTsKKyAgICBjb250ZW50W25dID0gMDsKICAgICAvKiBwcmludCBvdXQgdGhlIHNlbGVjdGVkIHRleHQgKi8KICAgICBjaGFubChkYXRhICwiJXNcbiIsIGNvbnRlbnQpOwogICAgIC8qIGNyZWF0ZSBibGFuayBsaW5lIHdpdGggcHJvYmxlbSBwb2ludGVyICovCkBAIC0zNDgsNyArMzU5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXRlc3RTdHJ1Y3R1cmVkRXJyb3JIYW5kbGVyKHZvaWQgKmN0eCAgQVRUUklCVVRFX1VOVVNFRCwgeG1sRXJyb3JQdHIgZXJyKSB7Cit0ZXN0U3RydWN0dXJlZEVycm9ySGFuZGxlcih2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwgY29uc3QgeG1sRXJyb3IgKmVycikgewogICAgIGNoYXIgKmZpbGUgPSBOVUxMOwogICAgIGludCBsaW5lID0gMDsKICAgICBpbnQgY29kZSA9IC0xOwpAQCAtNDA2LDcgKzQxNywxMSBAQAogICAgICAgICBlbHNlIGlmICgobGluZSAhPSAwKSAmJiAoZG9tYWluID09IFhNTF9GUk9NX1BBUlNFUikpCiAgICAgICAgICAgICBjaGFubmVsKGRhdGEsICJFbnRpdHk6IGxpbmUgJWQ6ICIsIGxpbmUpOwogICAgIH0KLSAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgLyoKKyAgICAgKiBTa2lwIGVsZW1lbnQgbmFtZSB3aGVuIHRlc3Rpbmcgc2NoZW1hcyB0byBtYWtlIG1lbW9yeSBhbmQgc3RyZWFtaW5nCisgICAgICogb3V0cHV0IG1hdGNoLgorICAgICAqLworICAgIGlmICgoZG9tYWluICE9IFhNTF9GUk9NX1NDSEVNQVNWKSAmJiAobmFtZSAhPSBOVUxMKSkgewogICAgICAgICBjaGFubmVsKGRhdGEsICJlbGVtZW50ICVzOiAiLCBuYW1lKTsKICAgICB9CiAgICAgaWYgKGNvZGUgPT0gWE1MX0VSUl9PSykKQEAgLTUzMSwxMCArNTQ2LDE2IEBACiAKIHN0YXRpYyB2b2lkCiBpbml0aWFsaXplTGlieG1sMih2b2lkKSB7Ci0gICAgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0KDApOwotCi0gICAgeG1sTWVtU2V0dXAoeG1sTWVtRnJlZSwgeG1sTWVtTWFsbG9jLCB4bWxNZW1SZWFsbG9jLCB4bWxNZW1vcnlTdHJkdXApOworICAgIC8qCisgICAgICogVGhpcyB2ZXJpZmllcyB0aGF0IHhtbEluaXRQYXJzZXIgZG9lc24ndCBhbGxvY2F0ZSBtZW1vcnkgd2l0aAorICAgICAqIHhtbE1hbGxvYworICAgICAqLworICAgIHhtbEZyZWUgPSBOVUxMOworICAgIHhtbE1hbGxvYyA9IE5VTEw7CisgICAgeG1sUmVhbGxvYyA9IE5VTEw7CisgICAgeG1sTWVtU3RyZHVwID0gTlVMTDsKICAgICB4bWxJbml0UGFyc2VyKCk7CisgICAgeG1sTWVtU2V0dXAoeG1sTWVtRnJlZSwgeG1sTWVtTWFsbG9jLCB4bWxNZW1SZWFsbG9jLCB4bWxNZW1vcnlTdHJkdXApOwogICAgIHhtbFNldEV4dGVybmFsRW50aXR5TG9hZGVyKHRlc3RFeHRlcm5hbEVudGl0eUxvYWRlcik7CiAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYyhOVUxMLCB0ZXN0U3RydWN0dXJlZEVycm9ySGFuZGxlcik7CiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRApAQCAtODE4LDYgKzgzOSwxMiBAQAogICAgIE5VTEwgIC8qIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgKi8KIH07CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICB4bWxIYXNoVGFibGVQdHIgZ2VuZXJhbEVudGl0aWVzOworICAgIHhtbEhhc2hUYWJsZVB0ciBwYXJhbWV0ZXJFbnRpdGllczsKK30gZGVidWdDb250ZXh0OworCiBzdGF0aWMgeG1sU0FYSGFuZGxlclB0ciBlbXB0eVNBWEhhbmRsZXIgPSAmZW1wdHlTQVhIYW5kbGVyU3RydWN0Owogc3RhdGljIGludCBjYWxsYmFja3MgPSAwOwogc3RhdGljIGludCBxdWlldCA9IDA7CkBAIC05NzYsMTMgKzEwMDMsMTYgQEAKICAqIFJldHVybnMgdGhlIHhtbFBhcnNlcklucHV0UHRyIGlmIGlubGluZWQgb3IgTlVMTCBmb3IgRE9NIGJlaGF2aW91ci4KICAqLwogc3RhdGljIHhtbEVudGl0eVB0cgotZ2V0RW50aXR5RGVidWcodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IHhtbENoYXIgKm5hbWUpCitnZXRFbnRpdHlEZWJ1Zyh2b2lkICpjdHgsIGNvbnN0IHhtbENoYXIgKm5hbWUpCiB7CisgICAgZGVidWdDb250ZXh0ICpjdHh0ID0gY3R4OworCiAgICAgY2FsbGJhY2tzKys7CiAgICAgaWYgKHF1aWV0KQogCXJldHVybihOVUxMKTsKICAgICBmcHJpbnRmKFNBWGRlYnVnLCAiU0FYLmdldEVudGl0eSglcylcbiIsIG5hbWUpOwotICAgIHJldHVybihOVUxMKTsKKworICAgIHJldHVybih4bWxIYXNoTG9va3VwKGN0eHQtPmdlbmVyYWxFbnRpdGllcywgbmFtZSkpOwogfQogCiAvKioKQEAgLTk5NSwxMyArMTAyNSwxNiBAQAogICogUmV0dXJucyB0aGUgeG1sUGFyc2VySW5wdXRQdHIKICAqLwogc3RhdGljIHhtbEVudGl0eVB0cgotZ2V0UGFyYW1ldGVyRW50aXR5RGVidWcodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IHhtbENoYXIgKm5hbWUpCitnZXRQYXJhbWV0ZXJFbnRpdHlEZWJ1Zyh2b2lkICpjdHgsIGNvbnN0IHhtbENoYXIgKm5hbWUpCiB7CisgICAgZGVidWdDb250ZXh0ICpjdHh0ID0gY3R4OworCiAgICAgY2FsbGJhY2tzKys7CiAgICAgaWYgKHF1aWV0KQogCXJldHVybihOVUxMKTsKICAgICBmcHJpbnRmKFNBWGRlYnVnLCAiU0FYLmdldFBhcmFtZXRlckVudGl0eSglcylcbiIsIG5hbWUpOwotICAgIHJldHVybihOVUxMKTsKKworICAgIHJldHVybih4bWxIYXNoTG9va3VwKGN0eHQtPnBhcmFtZXRlckVudGl0aWVzLCBuYW1lKSk7CiB9CiAKIApAQCAtMTAxNywxMCArMTA1MCwxMyBAQAogICogQW4gZW50aXR5IGRlZmluaXRpb24gaGFzIGJlZW4gcGFyc2VkCiAgKi8KIHN0YXRpYyB2b2lkCi1lbnRpdHlEZWNsRGVidWcodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCB0eXBlLAorZW50aXR5RGVjbERlYnVnKHZvaWQgKmN0eCwgY29uc3QgeG1sQ2hhciAqbmFtZSwgaW50IHR5cGUsCiAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqcHVibGljSWQsIGNvbnN0IHhtbENoYXIgKnN5c3RlbUlkLCB4bWxDaGFyICpjb250ZW50KQogewotY29uc3QgeG1sQ2hhciAqbnVsbHN0ciA9IEJBRF9DQVNUICIobnVsbCkiOworICAgIGRlYnVnQ29udGV4dCAqY3R4dCA9IGN0eDsKKyAgICB4bWxFbnRpdHlQdHIgZW50OworICAgIGNvbnN0IHhtbENoYXIgKm51bGxzdHIgPSBCQURfQ0FTVCAiKG51bGwpIjsKKwogICAgIC8qIG5vdCBhbGwgbGlicmFyaWVzIGhhbmRsZSBwcmludGluZyBudWxsIHBvaW50ZXJzIG5pY2VseSAqLwogICAgIGlmIChwdWJsaWNJZCA9PSBOVUxMKQogICAgICAgICBwdWJsaWNJZCA9IG51bGxzdHI7CkBAIC0xMDMzLDYgKzEwNjksMTYgQEAKIAlyZXR1cm47CiAgICAgZnByaW50ZihTQVhkZWJ1ZywgIlNBWC5lbnRpdHlEZWNsKCVzLCAlZCwgJXMsICVzLCAlcylcbiIsCiAgICAgICAgICAgICBuYW1lLCB0eXBlLCBwdWJsaWNJZCwgc3lzdGVtSWQsIGNvbnRlbnQpOworCisgICAgZW50ID0geG1sTmV3RW50aXR5KE5VTEwsIG5hbWUsIHR5cGUsIHB1YmxpY0lkLCBzeXN0ZW1JZCwgY29udGVudCk7CisgICAgaWYgKHN5c3RlbUlkICE9IE5VTEwpCisgICAgICAgIGVudC0+VVJJID0geG1sQnVpbGRVUkkoc3lzdGVtSWQsIChjb25zdCB4bWxDaGFyICopIGN0eHQtPmZpbGVuYW1lKTsKKworICAgIGlmICgodHlwZSA9PSBYTUxfSU5URVJOQUxfUEFSQU1FVEVSX0VOVElUWSkgfHwKKyAgICAgICAgKHR5cGUgPT0gWE1MX0VYVEVSTkFMX1BBUkFNRVRFUl9FTlRJVFkpKQorICAgICAgICB4bWxIYXNoQWRkRW50cnkoY3R4dC0+cGFyYW1ldGVyRW50aXRpZXMsIG5hbWUsIGVudCk7CisgICAgZWxzZQorICAgICAgICB4bWxIYXNoQWRkRW50cnkoY3R4dC0+Z2VuZXJhbEVudGl0aWVzLCBuYW1lLCBlbnQpOwogfQogCiAvKioKQEAgLTEzNTMsNyArMTM5OSw3IEBACiAgKiBEaXNwbGF5IGFuZCBmb3JtYXQgYSB3YXJuaW5nIG1lc3NhZ2VzLCBnaXZlcyBmaWxlLCBsaW5lLCBwb3NpdGlvbiBhbmQKICAqIGV4dHJhIHBhcmFtZXRlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIFhNTENERUNMCitzdGF0aWMgdm9pZAogd2FybmluZ0RlYnVnKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB2YV9saXN0IGFyZ3M7CkBAIC0xMzc2LDcgKzE0MjIsNyBAQAogICogRGlzcGxheSBhbmQgZm9ybWF0IGEgZXJyb3IgbWVzc2FnZXMsIGdpdmVzIGZpbGUsIGxpbmUsIHBvc2l0aW9uIGFuZAogICogZXh0cmEgcGFyYW1ldGVycy4KICAqLwotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiBlcnJvckRlYnVnKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB2YV9saXN0IGFyZ3M7CkBAIC0xMzk5LDcgKzE0NDUsNyBAQAogICogRGlzcGxheSBhbmQgZm9ybWF0IGEgZmF0YWxFcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwgcG9zaXRpb24gYW5kCiAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIGZhdGFsRXJyb3JEZWJ1Zyh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwgY29uc3QgY2hhciAqbXNnLCAuLi4pCiB7CiAgICAgdmFfbGlzdCBhcmdzOwpAQCAtMTY5MCw2ICsxNzM2LDEzIEBACiBzdGF0aWMgeG1sU0FYSGFuZGxlclB0ciBkZWJ1Z0hUTUxTQVhIYW5kbGVyID0gJmRlYnVnSFRNTFNBWEhhbmRsZXJTdHJ1Y3Q7CiAjZW5kaWYgLyogTElCWE1MX0hUTUxfRU5BQkxFRCAqLwogCitzdGF0aWMgdm9pZAoraGFzaEZyZWVFbnRpdHkodm9pZCAqcGF5bG9hZCwgY29uc3QgeG1sQ2hhciAqbmFtZSBBVFRSSUJVVEVfVU5VU0VEKSB7CisgICAgeG1sRW50aXR5UHRyIGVudCA9IHBheWxvYWQ7CisKKyAgICB4bWxGcmVlRW50aXR5KGVudCk7Cit9CisKIC8qKgogICogc2F4UGFyc2VUZXN0OgogICogQGZpbGVuYW1lOiB0aGUgZmlsZSB0byBwYXJzZQpAQCAtMTcyNiw3ICsxNzc5LDExIEBACiAKICNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECiAgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfSFRNTCkgewotCWh0bWxTQVhQYXJzZUZpbGUoZmlsZW5hbWUsIE5VTEwsIGVtcHR5U0FYSGFuZGxlciwgTlVMTCk7CisgICAgICAgIGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisKKyAgICAgICAgY3R4dCA9IGh0bWxOZXdTQVhQYXJzZXJDdHh0KGVtcHR5U0FYSGFuZGxlciwgTlVMTCk7CisgICAgICAgIGh0bWxDdHh0UmVhZEZpbGUoY3R4dCwgZmlsZW5hbWUsIE5VTEwsIG9wdGlvbnMpOworICAgICAgICBodG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJcmV0ID0gMDsKICAgICB9IGVsc2UKICNlbmRpZgpAQCAtMTc1MCwyMSArMTgwNywzMyBAQAogICAgIH0KICNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECiAgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfSFRNTCkgewotCWh0bWxTQVhQYXJzZUZpbGUoZmlsZW5hbWUsIE5VTEwsIGRlYnVnSFRNTFNBWEhhbmRsZXIsIE5VTEwpOworICAgICAgICBodG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworCisgICAgICAgIGN0eHQgPSBodG1sTmV3U0FYUGFyc2VyQ3R4dChkZWJ1Z0hUTUxTQVhIYW5kbGVyLCBOVUxMKTsKKyAgICAgICAgaHRtbEN0eHRSZWFkRmlsZShjdHh0LCBmaWxlbmFtZSwgTlVMTCwgb3B0aW9ucyk7CisgICAgICAgIGh0bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKIAlyZXQgPSAwOwogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgeworICAgICAgICBkZWJ1Z0NvbnRleHQgdXNlckRhdGE7CiAgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHhtbENyZWF0ZUZpbGVQYXJzZXJDdHh0KGZpbGVuYW1lKTsKKwogICAgICAgICBpZiAob3B0aW9ucyAmIFhNTF9QQVJTRV9TQVgxKSB7CiAgICAgICAgICAgICBtZW1jcHkoY3R4dC0+c2F4LCBkZWJ1Z1NBWEhhbmRsZXIsIHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CiAgICAgICAgICAgICBvcHRpb25zIC09IFhNTF9QQVJTRV9TQVgxOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWVtY3B5KGN0eHQtPnNheCwgZGVidWdTQVgySGFuZGxlciwgc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKICAgICAgICAgfQorICAgICAgICB1c2VyRGF0YS5maWxlbmFtZSA9IGZpbGVuYW1lOworICAgICAgICB1c2VyRGF0YS5nZW5lcmFsRW50aXRpZXMgPSB4bWxIYXNoQ3JlYXRlKDApOworICAgICAgICB1c2VyRGF0YS5wYXJhbWV0ZXJFbnRpdGllcyA9IHhtbEhhc2hDcmVhdGUoMCk7CisgICAgICAgIGN0eHQtPnVzZXJEYXRhID0gJnVzZXJEYXRhOwogICAgICAgICB4bWxDdHh0VXNlT3B0aW9ucyhjdHh0LCBvcHRpb25zKTsKICAgICAgICAgeG1sUGFyc2VEb2N1bWVudChjdHh0KTsKICAgICAgICAgcmV0ID0gY3R4dC0+d2VsbEZvcm1lZCA/IDAgOiBjdHh0LT5lcnJObzsKKyAgICAgICAgeG1sSGFzaEZyZWUodXNlckRhdGEuZ2VuZXJhbEVudGl0aWVzLCBoYXNoRnJlZUVudGl0eSk7CisgICAgICAgIHhtbEhhc2hGcmVlKHVzZXJEYXRhLnBhcmFtZXRlckVudGl0aWVzLCBoYXNoRnJlZUVudGl0eSk7CiAgICAgICAgIHhtbEZyZWVEb2MoY3R4dC0+bXlEb2MpOwogICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKICAgICB9CkBAIC0xOTYzLDYgKzIwMzIsMzEyIEBACiAgICAgfQogICAgIHJldHVybigwKTsKIH0KKworc3RhdGljIGludCBwdXNoQm91bmRhcnlDb3VudDsKK3N0YXRpYyBpbnQgcHVzaEJvdW5kYXJ5UmVmQ291bnQ7CitzdGF0aWMgaW50IHB1c2hCb3VuZGFyeUNoYXJzQ291bnQ7CitzdGF0aWMgaW50IHB1c2hCb3VuZGFyeUNEYXRhQ291bnQ7CisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbFN1YnNldEJuZCh2b2lkICpjdHgsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKmV4dGVybmFsSUQsCisgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpzeXN0ZW1JRCkgeworICAgIHB1c2hCb3VuZGFyeUNvdW50Kys7CisgICAgeG1sU0FYMkludGVybmFsU3Vic2V0KGN0eCwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOworfQorCitzdGF0aWMgdm9pZAorcmVmZXJlbmNlQm5kKHZvaWQgKmN0eCwgY29uc3QgeG1sQ2hhciAqbmFtZSkgeworICAgIHB1c2hCb3VuZGFyeVJlZkNvdW50Kys7CisgICAgeG1sU0FYMlJlZmVyZW5jZShjdHgsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorY2hhcmFjdGVyc0JuZCh2b2lkICpjdHgsIGNvbnN0IHhtbENoYXIgKmNoLCBpbnQgbGVuKSB7CisgICAgcHVzaEJvdW5kYXJ5Q291bnQrKzsKKyAgICBwdXNoQm91bmRhcnlDaGFyc0NvdW50Kys7CisgICAgeG1sU0FYMkNoYXJhY3RlcnMoY3R4LCBjaCwgbGVuKTsKK30KKworc3RhdGljIHZvaWQKK2NkYXRhQmxvY2tCbmQodm9pZCAqY3R4LCBjb25zdCB4bWxDaGFyICpjaCwgaW50IGxlbikgeworICAgIHB1c2hCb3VuZGFyeUNvdW50Kys7CisgICAgcHVzaEJvdW5kYXJ5Q0RhdGFDb3VudCsrOworICAgIHhtbFNBWDJDRGF0YUJsb2NrKGN0eCwgY2gsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25CbmQodm9pZCAqY3R4LCBjb25zdCB4bWxDaGFyICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqZGF0YSkgeworICAgIHB1c2hCb3VuZGFyeUNvdW50Kys7CisgICAgeG1sU0FYMlByb2Nlc3NpbmdJbnN0cnVjdGlvbihjdHgsIHRhcmdldCwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitjb21tZW50Qm5kKHZvaWQgKmN0eCwgY29uc3QgeG1sQ2hhciAqdmFsdWUpIHsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBjdHg7CisgICAgaWYgKGN0eHQtPmluU3Vic2V0ID09IDApCisgICAgICAgIHB1c2hCb3VuZGFyeUNvdW50Kys7CisgICAgeG1sU0FYMkNvbW1lbnQoY3R4LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzdGFydEVsZW1lbnRCbmQodm9pZCAqY3R4LCBjb25zdCB4bWxDaGFyICp4bmFtZSwgY29uc3QgeG1sQ2hhciAqKmF0dHMpIHsKKyAgICBjb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIgKil4bmFtZTsKKworICAgIC8qIFNvbWUgZWxlbWVudHMgbWlnaHQgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAqLworICAgIGlmICgoc3RyY21wKG5hbWUsICJodG1sIikgIT0gMCkgJiYKKyAgICAgICAgKHN0cmNtcChuYW1lLCAiYm9keSIpICE9IDApICYmCisgICAgICAgIChzdHJjbXAobmFtZSwgImhlYWQiKSAhPSAwKSAmJgorICAgICAgICAoc3RyY21wKG5hbWUsICJwIikgIT0gMCkpIHsKKyAgICAgICAgcHVzaEJvdW5kYXJ5Q291bnQrKzsKKyAgICB9CisgICAgeG1sU0FYMlN0YXJ0RWxlbWVudChjdHgsIHhuYW1lLCBhdHRzKTsKK30KKworc3RhdGljIHZvaWQKK2VuZEVsZW1lbnRCbmQodm9pZCAqY3R4LCBjb25zdCB4bWxDaGFyICpuYW1lKSB7CisgICAgLypwdXNoQm91bmRhcnlDb3VudCsrOyovCisgICAgeG1sU0FYMkVuZEVsZW1lbnQoY3R4LCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQKK3N0YXJ0RWxlbWVudE5zQm5kKHZvaWQgKmN0eCwgY29uc3QgeG1sQ2hhciAqbG9jYWxuYW1lLCBjb25zdCB4bWxDaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpVUkksIGludCBuYl9uYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqKm5hbWVzcGFjZXMsIGludCBuYl9hdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgaW50IG5iX2RlZmF1bHRlZCwgY29uc3QgeG1sQ2hhciAqKmF0dHJpYnV0ZXMpIHsKKyAgICBwdXNoQm91bmRhcnlDb3VudCsrOworICAgIHhtbFNBWDJTdGFydEVsZW1lbnROcyhjdHgsIGxvY2FsbmFtZSwgcHJlZml4LCBVUkksIG5iX25hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMsIG5iX2F0dHJpYnV0ZXMsIG5iX2RlZmF1bHRlZCwgYXR0cmlidXRlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitlbmRFbGVtZW50TnNCbmQodm9pZCAqY3R4LCBjb25zdCB4bWxDaGFyICpsb2NhbG5hbWUsIGNvbnN0IHhtbENoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpVUkkpIHsKKyAgICAvKnB1c2hCb3VuZGFyeUNvdW50Kys7Ki8KKyAgICB4bWxTQVgyRW5kRWxlbWVudE5zKGN0eCwgbG9jYWxuYW1lLCBwcmVmaXgsIFVSSSk7Cit9CisKKy8qKgorICogcHVzaEJvdW5kYXJ5VGVzdDoKKyAqIEBmaWxlbmFtZTogdGhlIGZpbGUgdG8gcGFyc2UKKyAqIEByZXN1bHQ6IHRoZSBmaWxlIHdpdGggZXhwZWN0ZWQgcmVzdWx0CisgKiBAZXJyOiB0aGUgZmlsZSB3aXRoIGVycm9yIG1lc3NhZ2VzOiB1bnVzZWQKKyAqCisgKiBUZXN0IHdoZXRoZXIgdGhlIHB1c2ggcGFyc2VyIGRldGVjdHMgYm91bmRhcmllcyBiZXR3ZWVuIHN5bnRhY3RpY2FsCisgKiBlbGVtZW50cyBjb3JyZWN0bHkuCisgKgorICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludAorcHVzaEJvdW5kYXJ5VGVzdChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqcmVzdWx0LAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnIgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMpIHsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgeG1sRG9jUHRyIGRvYzsKKyAgICB4bWxTQVhIYW5kbGVyIGJuZFNBWDsKKyAgICBjb25zdCBjaGFyICpiYXNlOworICAgIGludCBzaXplLCByZXMsIG51bUNhbGxiYWNrczsKKyAgICBpbnQgY3VyID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGF2YWlsLCBvbGRDb25zdW1lZCwgY29uc3VtZWQ7CisKKyAgICAvKgorICAgICAqIEhUTUwgZW5jb2RpbmcgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yayB3aGVuIGRhdGEgaXMgZmVkIGJ5dGV3aXNlLgorICAgICAqLworICAgIGlmIChzdHJjbXAoZmlsZW5hbWUsICIuL3Rlc3QvSFRNTC94bWwtZGVjbGFyYXRpb24tMS5odG1sIikgPT0gMCkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUgcGFyc2VyIG1hZGUgcHJvZ3Jlc3MsIGNoZWNrIHRoYXQgZXhhY3RseSBvbmUgY29uc3RydWN0IHdhcworICAgICAqIHByb2Nlc3NlZCBhbmQgdGhhdCB0aGUgaW5wdXQgYnVmZmVyIGlzIChhbG1vc3QpIGVtcHR5LgorICAgICAqIFNpbmNlIHdlIHVzZSBhIGNodW5rIHNpemUgb2YgMSwgdGhpcyB0ZXN0cyB3aGV0aGVyIGNvbnRlbnQgaXMKKyAgICAgKiBwcm9jZXNzZWQgYXMgZWFybHkgYXMgcG9zc2libGUuCisgICAgICovCisKKyAgICBuYl90ZXN0cysrOworCisgICAgbWVtc2V0KCZibmRTQVgsIDAsIHNpemVvZihibmRTQVgpKTsKKyNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECisgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfSFRNTCkgeworICAgICAgICB4bWxTQVgySW5pdEh0bWxEZWZhdWx0U0FYSGFuZGxlcigmYm5kU0FYKTsKKyAgICAgICAgYm5kU0FYLnN0YXJ0RWxlbWVudCA9IHN0YXJ0RWxlbWVudEJuZDsKKyAgICAgICAgYm5kU0FYLmVuZEVsZW1lbnQgPSBlbmRFbGVtZW50Qm5kOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICB4bWxTQVhWZXJzaW9uKCZibmRTQVgsIDIpOworICAgICAgICBibmRTQVguc3RhcnRFbGVtZW50TnMgPSBzdGFydEVsZW1lbnROc0JuZDsKKyAgICAgICAgYm5kU0FYLmVuZEVsZW1lbnROcyA9IGVuZEVsZW1lbnROc0JuZDsKKyAgICB9CisKKyAgICBibmRTQVguaW50ZXJuYWxTdWJzZXQgPSBpbnRlcm5hbFN1YnNldEJuZDsKKyAgICBibmRTQVgucmVmZXJlbmNlID0gcmVmZXJlbmNlQm5kOworICAgIGJuZFNBWC5jaGFyYWN0ZXJzID0gY2hhcmFjdGVyc0JuZDsKKyAgICBibmRTQVguY2RhdGFCbG9jayA9IGNkYXRhQmxvY2tCbmQ7CisgICAgYm5kU0FYLnByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHByb2Nlc3NpbmdJbnN0cnVjdGlvbkJuZDsKKyAgICBibmRTQVguY29tbWVudCA9IGNvbW1lbnRCbmQ7CisKKyAgICAvKgorICAgICAqIGxvYWQgdGhlIGRvY3VtZW50IGluIG1lbW9yeSBhbmQgd29yayBmcm9tIHRoZXJlLgorICAgICAqLworICAgIGlmIChsb2FkTWVtKGZpbGVuYW1lLCAmYmFzZSwgJnNpemUpICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCAlc1xuIiwgZmlsZW5hbWUpOworCXJldHVybigtMSk7CisgICAgfQorCisjaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAorICAgIGlmIChvcHRpb25zICYgWE1MX1BBUlNFX0hUTUwpCisJY3R4dCA9IGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgmYm5kU0FYLCBOVUxMLCBiYXNlLCAxLCBmaWxlbmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOworICAgIGVsc2UKKyNlbmRpZgorICAgIGN0eHQgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgmYm5kU0FYLCBOVUxMLCBiYXNlLCAxLCBmaWxlbmFtZSk7CisgICAgeG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0aW9ucyk7CisgICAgY3VyID0gMTsKKyAgICBjb25zdW1lZCA9IDA7CisgICAgbnVtQ2FsbGJhY2tzID0gMDsKKyAgICBhdmFpbCA9IDA7CisgICAgd2hpbGUgKChjdXIgPCBzaXplKSAmJiAobnVtQ2FsbGJhY2tzIDw9IDEpICYmIChhdmFpbCA8PSAwKSkgeworICAgICAgICBpbnQgdGVybWluYXRlID0gKGN1ciArIDEgPj0gc2l6ZSk7CisgICAgICAgIGludCBpc1RleHQgPSAwOworCisgICAgICAgIGlmIChjdHh0LT5pbnN0YXRlID09IFhNTF9QQVJTRVJfQ09OVEVOVCkgeworICAgICAgICAgICAgaW50IGZpcnN0Q2hhciA9IChjdHh0LT5pbnB1dC0+ZW5kID4gY3R4dC0+aW5wdXQtPmN1cikgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjdHh0LT5pbnB1dC0+Y3VyIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlW2N1cl07CisKKyAgICAgICAgICAgIGlmICgoZmlyc3RDaGFyICE9ICc8JykgJiYKKyAgICAgICAgICAgICAgICAoKG9wdGlvbnMgJiBYTUxfUEFSU0VfSFRNTCkgfHwgKGZpcnN0Q2hhciAhPSAnJicpKSkKKyAgICAgICAgICAgICAgICBpc1RleHQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgb2xkQ29uc3VtZWQgPSBjdHh0LT5pbnB1dC0+Y29uc3VtZWQgKworICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKKworICAgICAgICBwdXNoQm91bmRhcnlDb3VudCA9IDA7CisgICAgICAgIHB1c2hCb3VuZGFyeVJlZkNvdW50ID0gMDsKKyAgICAgICAgcHVzaEJvdW5kYXJ5Q2hhcnNDb3VudCA9IDA7CisgICAgICAgIHB1c2hCb3VuZGFyeUNEYXRhQ291bnQgPSAwOworCisjaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAorICAgICAgICBpZiAob3B0aW9ucyAmIFhNTF9QQVJTRV9IVE1MKQorICAgICAgICAgICAgaHRtbFBhcnNlQ2h1bmsoY3R4dCwgYmFzZSArIGN1ciwgMSwgdGVybWluYXRlKTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHhtbFBhcnNlQ2h1bmsoY3R4dCwgYmFzZSArIGN1ciwgMSwgdGVybWluYXRlKTsKKwljdXIgKz0gMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDYWxsYmFjayBjaGVjazogQ2hlY2sgdGhhdCBvbmx5IGEgc2luZ2xlIGNvbnN0cnVjdCB3YXMgcGFyc2VkLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHB1c2hCb3VuZGFyeVJlZkNvdW50ID4gMCkgeworICAgICAgICAgICAgbnVtQ2FsbGJhY2tzID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG51bUNhbGxiYWNrcyA9IHB1c2hCb3VuZGFyeUNvdW50OworICAgICAgICAgICAgaWYgKHB1c2hCb3VuZGFyeUNoYXJzQ291bnQgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfSFRNTCkgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBUaGUgSFRNTCBwYXJzZXIgY2FuIGdlbmVyYXRlIGEgbWl4IG9mIGNoYXJzIGFuZAorICAgICAgICAgICAgICAgICAgICAgKiByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgbnVtQ2FsbGJhY2tzIC09IHB1c2hCb3VuZGFyeUNoYXJzQ291bnQgLSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIEFsbG93IHR3byBjaGFycyBjYWxsYmFja3MuIFRoaXMgY2FuIGhhcHBlbiB3aGVuCisgICAgICAgICAgICAgICAgICAgICAqIG11bHRpLWJ5dGUgY2hhcnMgYXJlIHNwbGl0IGFjcm9zcyBidWZmZXIgYm91bmRhcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIG51bUNhbGxiYWNrcyAtPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zICYgWE1MX1BBUlNFX0hUTUwpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIEFsbG93IG11bHRpcGxlIGNkYXRhIGNhbGxiYWNrcyBpbiBIVE1MIG1vZGUuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHB1c2hCb3VuZGFyeUNEYXRhQ291bnQgPiAxKQorICAgICAgICAgICAgICAgICAgICBudW1DYWxsYmFja3MgLT0gcHVzaEJvdW5kYXJ5Q0RhdGFDb3VudCAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBCdWZmZXIgY2hlY2s6IElmIGlucHV0IHdhcyBjb25zdW1lZCwgY2hlY2sgdGhhdCB0aGUgaW5wdXQKKyAgICAgICAgICogYnVmZmVyIGlzIChhbG1vc3QpIGVtcHR5LgorICAgICAgICAgKi8KKyAgICAgICAgY29uc3VtZWQgPSBjdHh0LT5pbnB1dC0+Y29uc3VtZWQgKworICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoY3R4dC0+aW5wdXQtPmN1ciAtIGN0eHQtPmlucHV0LT5iYXNlKTsKKyAgICAgICAgaWYgKChjdHh0LT5pbnN0YXRlICE9IFhNTF9QQVJTRVJfRFREKSAmJgorICAgICAgICAgICAgKGNvbnN1bWVkID49IDQpICYmCisgICAgICAgICAgICAoY29uc3VtZWQgIT0gb2xkQ29uc3VtZWQpKSB7CisgICAgICAgICAgICBzaXplX3QgbWF4ID0gMDsKKworICAgICAgICAgICAgYXZhaWwgPSBjdHh0LT5pbnB1dC0+ZW5kIC0gY3R4dC0+aW5wdXQtPmN1cjsKKworICAgICAgICAgICAgaWYgKChvcHRpb25zICYgWE1MX1BBUlNFX0hUTUwpICYmCisgICAgICAgICAgICAgICAgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9FTkRfVEFHKSkgeworICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyByZWxhdGVkIHRvIHNjcmlwdCBwYXJzaW5nLiAqLworICAgICAgICAgICAgICAgIG1heCA9IDM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVGV4dCkgeworICAgICAgICAgICAgICAgIGludCBjID0gKmN0eHQtPmlucHV0LT5jdXI7CisKKyAgICAgICAgICAgICAgICAvKiAzIGJ5dGVzIGZvciBwYXJ0aWFsIFVURi04ICovCisgICAgICAgICAgICAgICAgbWF4ID0gKChjID09ICc8JykgfHwgKGMgPT0gJyYnKSkgPyAxIDogMzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4dC0+aW5zdGF0ZSA9PSBYTUxfUEFSU0VSX0NEQVRBX1NFQ1RJT04pIHsKKyAgICAgICAgICAgICAgICAvKiAyIGJ5dGVzIGZvciB0ZXJtaW5hdG9yLCAzIGJ5dGVzIGZvciBVVEYtOCAqLworICAgICAgICAgICAgICAgIG1heCA9IDU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhdmFpbCA8PSBtYXgpCisgICAgICAgICAgICAgICAgYXZhaWwgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGRvYyA9IGN0eHQtPm15RG9jOworI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKKyAgICBpZiAob3B0aW9ucyAmIFhNTF9QQVJTRV9IVE1MKQorICAgICAgICByZXMgPSAxOworICAgIGVsc2UKKyNlbmRpZgorICAgIHJlcyA9IGN0eHQtPndlbGxGb3JtZWQ7CisgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisgICAgZnJlZSgoY2hhciAqKWJhc2UpOworICAgIGlmIChudW1DYWxsYmFja3MgPiAxKSB7CisJeG1sRnJlZURvYyhkb2MpOworCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHB1c2ggYm91bmRhcnkgY2FsbGJhY2sgdGVzdCAoJWRAJWx1LSVsdSk6ICVzXG4iLAorICAgICAgICAgICAgICAgIG51bUNhbGxiYWNrcywgb2xkQ29uc3VtZWQsIGNvbnN1bWVkLCBmaWxlbmFtZSk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKGF2YWlsID4gMCkgeworCXhtbEZyZWVEb2MoZG9jKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCBwdXNoIGJvdW5kYXJ5IGJ1ZmZlciB0ZXN0ICglbHVAJWx1KTogJXNcbiIsCisgICAgICAgICAgICAgICAgYXZhaWwsIGNvbnN1bWVkLCBmaWxlbmFtZSk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKCFyZXMpIHsKKwl4bWxGcmVlRG9jKGRvYyk7CisJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgJXNcbiIsIGZpbGVuYW1lKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECisgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfSFRNTCkKKwlodG1sRG9jRHVtcE1lbW9yeShkb2MsICh4bWxDaGFyICoqKSAmYmFzZSwgJnNpemUpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHhtbERvY0R1bXBNZW1vcnkoZG9jLCAoeG1sQ2hhciAqKikgJmJhc2UsICZzaXplKTsKKyAgICB4bWxGcmVlRG9jKGRvYyk7CisgICAgcmVzID0gY29tcGFyZUZpbGVNZW0ocmVzdWx0LCBiYXNlLCBzaXplKTsKKyAgICBpZiAoKGJhc2UgPT0gTlVMTCkgfHwgKHJlcyAhPSAwKSkgeworCWlmIChiYXNlICE9IE5VTEwpCisJICAgIHhtbEZyZWUoKGNoYXIgKiliYXNlKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZXN1bHQgZm9yICVzIGZhaWxlZCBpbiAlc1xuIiwgZmlsZW5hbWUsIHJlc3VsdCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgeG1sRnJlZSgoY2hhciAqKWJhc2UpOworICAgIGlmIChlcnIgIT0gTlVMTCkgeworCXJlcyA9IGNvbXBhcmVGaWxlTWVtKGVyciwgdGVzdEVycm9ycywgdGVzdEVycm9yc1NpemUpOworCWlmIChyZXMgIT0gMCkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGZvciAlcyBmYWlsZWRcbiIsIGZpbGVuYW1lKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorICAgIHJldHVybigwKTsKK30KICNlbmRpZgogCiAvKioKQEAgLTIwOTUsNyArMjQ3MCwxMCBAQAogI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECiAgICAgaWYgKG9wdGlvbnMgJiBYTUxfUEFSU0VfWElOQ0xVREUpIHsKIAlkb2MgPSB4bWxSZWFkRmlsZShmaWxlbmFtZSwgTlVMTCwgb3B0aW9ucyk7Ci0JeG1sWEluY2x1ZGVQcm9jZXNzRmxhZ3MoZG9jLCBvcHRpb25zKTsKKwlpZiAoeG1sWEluY2x1ZGVQcm9jZXNzRmxhZ3MoZG9jLCBvcHRpb25zKSA8IDApIHsKKwkgICAgeG1sRnJlZURvYyhkb2MpOworICAgICAgICAgICAgZG9jID0gTlVMTDsKKyAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewpAQCAtMjEzOCw2ICsyNTE2LDcgQEAKICAgICByZXR1cm4oMCk7CiB9CiAKKyNpZiBkZWZpbmVkKExJQlhNTF9WQUxJRF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9IVE1MX0VOQUJMRUQpCiAvKioKICAqIGZkUGFyc2VUZXN0OgogICogQGZpbGVuYW1lOiB0aGUgZmlsZSB0byBwYXJzZQpAQCAtMjIwMiw3ICsyNTgxLDcgQEAKIAogICAgIHJldHVybigwKTsKIH0KLQorI2VuZGlmCiAKIAogI2lmZGVmIExJQlhNTF9SRUFERVJfRU5BQkxFRApAQCAtMjQyMCwxMiArMjc5OSwxMSBAQAogCiBzdGF0aWMgdm9pZAogdGVzdFhQYXRoKGNvbnN0IGNoYXIgKnN0ciwgaW50IHhwdHIsIGludCBleHByKSB7Ci0gICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBoYW5kbGVyID0gaWdub3JlR2VuZXJpY0Vycm9yOwogICAgIHhtbFhQYXRoT2JqZWN0UHRyIHJlczsKICAgICB4bWxYUGF0aENvbnRleHRQdHIgY3R4dDsKIAogICAgIC8qIERvbid0IHByaW50IGdlbmVyaWMgZXJyb3JzIHRvIHN0ZGVyci4gKi8KLSAgICBpbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMoJmhhbmRsZXIpOworICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoTlVMTCwgaWdub3JlR2VuZXJpY0Vycm9yKTsKIAogICAgIG5iX3Rlc3RzKys7CiAjaWYgZGVmaW5lZChMSUJYTUxfWFBUUl9FTkFCTEVEKQpAQCAtMjQ1Nyw3ICsyODM1LDcgQEAKICAgICB4bWxYUGF0aEZyZWVDb250ZXh0KGN0eHQpOwogCiAgICAgLyogUmVzZXQgZ2VuZXJpYyBlcnJvciBoYW5kbGVyLiAqLwotICAgIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyhOVUxMKTsKKyAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKE5VTEwsIE5VTEwpOwogfQogCiAvKioKQEAgLTMwNjYsNTkgKzM0NDQsODEgQEAKIHNjaGVtYXNPbmVUZXN0KGNvbnN0IGNoYXIgKnNjaCwKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVzdWx0LAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyLAogCSAgICAgICBpbnQgb3B0aW9ucywKIAkgICAgICAgeG1sU2NoZW1hUHRyIHNjaGVtYXMpIHsKLSAgICB4bWxEb2NQdHIgZG9jOwotICAgIHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0OwogICAgIGludCByZXQgPSAwOwotICAgIGludCB2YWxpZFJlc3VsdCA9IDA7CisgICAgaW50IGk7CiAgICAgY2hhciAqdGVtcDsKLSAgICBGSUxFICpzY2hlbWFzT3V0cHV0OwotCi0gICAgZG9jID0geG1sUmVhZEZpbGUoZmlsZW5hbWUsIE5VTEwsIG9wdGlvbnMpOwotICAgIGlmIChkb2MgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBwYXJzZSBpbnN0YW5jZSAlcyBmb3IgJXNcbiIsIGZpbGVuYW1lLCBzY2gpOwotCXJldHVybigtMSk7Ci0gICAgfQorICAgIGludCBwYXJzZUVycm9yc1NpemUgPSB0ZXN0RXJyb3JzU2l6ZTsKIAogICAgIHRlbXAgPSByZXN1bHRGaWxlbmFtZShyZXN1bHQsIHRlbXBfZGlyZWN0b3J5LCAiLnJlcyIpOwogICAgIGlmICh0ZW1wID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5XG4iKTsKICAgICAgICAgZmF0YWxFcnJvcigpOwotICAgIH0KLSAgICBzY2hlbWFzT3V0cHV0ID0gZm9wZW4odGVtcCwgIndiIik7Ci0gICAgaWYgKHNjaGVtYXNPdXRwdXQgPT0gTlVMTCkgewotCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IGZpbGUgJXNcbiIsIHRlbXApOwotCXhtbEZyZWVEb2MoZG9jKTsKLSAgICAgICAgZnJlZSh0ZW1wKTsKLQlyZXR1cm4oLTEpOworICAgICAgICByZXR1cm4oLTEpOwogICAgIH0KIAotICAgIGN0eHQgPSB4bWxTY2hlbWFOZXdWYWxpZEN0eHQoc2NoZW1hcyk7Ci0gICAgeG1sU2NoZW1hU2V0VmFsaWRFcnJvcnMoY3R4dCwgdGVzdEVycm9ySGFuZGxlciwgdGVzdEVycm9ySGFuZGxlciwgY3R4dCk7Ci0gICAgdmFsaWRSZXN1bHQgPSB4bWxTY2hlbWFWYWxpZGF0ZURvYyhjdHh0LCBkb2MpOwotICAgIGlmICh2YWxpZFJlc3VsdCA9PSAwKSB7Ci0JZnByaW50ZihzY2hlbWFzT3V0cHV0LCAiJXMgdmFsaWRhdGVzXG4iLCBmaWxlbmFtZSk7Ci0gICAgfSBlbHNlIGlmICh2YWxpZFJlc3VsdCA+IDApIHsKLQlmcHJpbnRmKHNjaGVtYXNPdXRwdXQsICIlcyBmYWlscyB0byB2YWxpZGF0ZVxuIiwgZmlsZW5hbWUpOwotICAgIH0gZWxzZSB7Ci0JZnByaW50ZihzY2hlbWFzT3V0cHV0LCAiJXMgdmFsaWRhdGlvbiBnZW5lcmF0ZWQgYW4gaW50ZXJuYWwgZXJyb3JcbiIsCi0JICAgICAgIGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgZmNsb3NlKHNjaGVtYXNPdXRwdXQpOwotICAgIGlmIChyZXN1bHQpIHsKLQlpZiAoY29tcGFyZUZpbGVzKHRlbXAsIHJlc3VsdCkpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJSZXN1bHQgZm9yICVzIG9uICVzIGZhaWxlZFxuIiwgZmlsZW5hbWUsIHNjaCk7Ci0JICAgIHJldCA9IDE7Ci0JfQotICAgIH0KLSAgICBpZiAodGVtcCAhPSBOVUxMKSB7CisgICAgLyoKKyAgICAgKiBUZXN0IGJvdGggbWVtb3J5IGFuZCBzdHJlYW1pbmcgdmFsaWRhdGlvbi4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0OworICAgICAgICBpbnQgdmFsaWRSZXN1bHQgPSAwOworICAgICAgICBGSUxFICpzY2hlbWFzT3V0cHV0OworCisgICAgICAgIHRlc3RFcnJvcnNTaXplID0gcGFyc2VFcnJvcnNTaXplOworICAgICAgICB0ZXN0RXJyb3JzW3BhcnNlRXJyb3JzU2l6ZV0gPSAwOworCisgICAgICAgIGN0eHQgPSB4bWxTY2hlbWFOZXdWYWxpZEN0eHQoc2NoZW1hcyk7CisgICAgICAgIHhtbFNjaGVtYVNldFZhbGlkRXJyb3JzKGN0eHQsIHRlc3RFcnJvckhhbmRsZXIsIHRlc3RFcnJvckhhbmRsZXIsIGN0eHQpOworCisgICAgICAgIHNjaGVtYXNPdXRwdXQgPSBmb3Blbih0ZW1wLCAid2IiKTsKKyAgICAgICAgaWYgKHNjaGVtYXNPdXRwdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgZmlsZSAlc1xuIiwgdGVtcCk7CisgICAgICAgICAgICBmcmVlKHRlbXApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgIHhtbERvY1B0ciBkb2M7CisKKyAgICAgICAgICAgIGRvYyA9IHhtbFJlYWRGaWxlKGZpbGVuYW1lLCBOVUxMLCBvcHRpb25zKTsKKyAgICAgICAgICAgIGlmIChkb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIHBhcnNlIGluc3RhbmNlICVzIGZvciAlc1xuIiwgZmlsZW5hbWUsIHNjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbGlkUmVzdWx0ID0geG1sU2NoZW1hVmFsaWRhdGVEb2MoY3R4dCwgZG9jKTsKKyAgICAgICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbGlkUmVzdWx0ID0geG1sU2NoZW1hVmFsaWRhdGVGaWxlKGN0eHQsIGZpbGVuYW1lLCBvcHRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWxpZFJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHNjaGVtYXNPdXRwdXQsICIlcyB2YWxpZGF0ZXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWxpZFJlc3VsdCA+IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc2NoZW1hc091dHB1dCwgIiVzIGZhaWxzIHRvIHZhbGlkYXRlXG4iLCBmaWxlbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRmKHNjaGVtYXNPdXRwdXQsICIlcyB2YWxpZGF0aW9uIGdlbmVyYXRlZCBhbiBpbnRlcm5hbCBlcnJvclxuIiwKKyAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZmNsb3NlKHNjaGVtYXNPdXRwdXQpOworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoY29tcGFyZUZpbGVzKHRlbXAsIHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlc3VsdCBmb3IgJXMgb24gJXMgZmFpbGVkXG4iLCBmaWxlbmFtZSwgc2NoKTsKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb21wYXJlRmlsZU1lbShlcnIsIHRlc3RFcnJvcnMsIHRlc3RFcnJvcnNTaXplKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBmb3IgJXMgb24gJXMgZmFpbGVkXG4iLCBmaWxlbmFtZSwgc2NoKTsKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgIH0KKwogICAgICAgICB1bmxpbmsodGVtcCk7Ci0gICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIHhtbFNjaGVtYUZyZWVWYWxpZEN0eHQoY3R4dCk7CiAgICAgfQogCi0gICAgeG1sU2NoZW1hRnJlZVZhbGlkQ3R4dChjdHh0KTsKLSAgICB4bWxGcmVlRG9jKGRvYyk7CisgICAgZnJlZSh0ZW1wKTsKICAgICByZXR1cm4ocmV0KTsKIH0KIC8qKgpAQCAtMzIxMCwxNSArMzYxMCwxMSBAQAogCX0KIAlpZiAoc2NoZW1hcyAhPSBOVUxMKSB7CiAJICAgIG5iX3Rlc3RzKys7Ci0JICAgIHJldCA9IHNjaGVtYXNPbmVUZXN0KGZpbGVuYW1lLCBpbnN0YW5jZSwgcmVzdWx0LCBvcHRpb25zLCBzY2hlbWFzKTsKKwkgICAgcmV0ID0gc2NoZW1hc09uZVRlc3QoZmlsZW5hbWUsIGluc3RhbmNlLCByZXN1bHQsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHNjaGVtYXMpOwogCSAgICBpZiAocmV0ICE9IDApCiAJCXJlcyA9IHJldDsKIAl9Ci0gICAgICAgIGlmIChjb21wYXJlRmlsZU1lbShlcnIsIHRlc3RFcnJvcnMsIHRlc3RFcnJvcnNTaXplKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBmb3IgJXMgb24gJXMgZmFpbGVkXG4iLCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwotICAgICAgICAgICAgcmVzID0gMTsKLSAgICAgICAgfQogICAgIH0KICAgICBnbG9iZnJlZSgmZ2xvYmJ1Zik7CiAgICAgeG1sU2NoZW1hRnJlZShzY2hlbWFzKTsKQEAgLTM3MTMsOSArNDEwOSw2IEBACiAgICAgLyoKICAgICAgKiBsb2FkIFhQYXRoIGV4cHIgYXMgYSBmaWxlCiAgICAgICovCi0gICAgeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSA9IFhNTF9ERVRFQ1RfSURTIHwgWE1MX0NPTVBMRVRFX0FUVFJTOwotICAgIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQoMSk7Ci0KICAgICBkb2MgPSB4bWxSZWFkRmlsZShmaWxlbmFtZSwgTlVMTCwgWE1MX1BBUlNFX0RUREFUVFIgfCBYTUxfUEFSU0VfTk9FTlQpOwogICAgIGlmIChkb2MgPT0gTlVMTCkgewogCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHVuYWJsZSB0byBwYXJzZSBmaWxlIFwiJXNcIlxuIiwgZmlsZW5hbWUpOwpAQCAtMzg2NCw5ICs0MjU3LDYgQEAKICAgICAgKiBidWlsZCBhbiBYTUwgdHJlZSBmcm9tIGEgdGhlIGZpbGU7IHdlIG5lZWQgdG8gYWRkIGRlZmF1bHQKICAgICAgKiBhdHRyaWJ1dGVzIGFuZCByZXNvbHZlIGFsbCBjaGFyYWN0ZXIgYW5kIGVudGl0aWVzIHJlZmVyZW5jZXMKICAgICAgKi8KLSAgICB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlID0gWE1MX0RFVEVDVF9JRFMgfCBYTUxfQ09NUExFVEVfQVRUUlM7Ci0gICAgeG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdCgxKTsKLQogICAgIGRvYyA9IHhtbFJlYWRGaWxlKHhtbF9maWxlbmFtZSwgTlVMTCwgWE1MX1BBUlNFX0RUREFUVFIgfCBYTUxfUEFSU0VfTk9FTlQpOwogICAgIGlmIChkb2MgPT0gTlVMTCkgewogCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHVuYWJsZSB0byBwYXJzZSBmaWxlIFwiJXNcIlxuIiwgeG1sX2ZpbGVuYW1lKTsKQEAgLTQwMzksMTMgKzQ0MjksNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBudW1fdGhyZWFkcyA9IHNpemVvZih0aHJlYWRQYXJhbXMpIC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGhyZWFkUGFyYW1zWzBdKTsKIAotI2lmbmRlZiB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUKLSNlcnJvciB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgaXMgbm90IGEgbWFjcm8KLSNlbmRpZgotI2lmbmRlZiB4bWxHZW5lcmljRXJyb3JDb250ZXh0Ci0jZXJyb3IgeG1sR2VuZXJpY0Vycm9yQ29udGV4dCBpcyBub3QgYSBtYWNybwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkICoKIHRocmVhZF9zcGVjaWZpY19kYXRhKHZvaWQgKnByaXZhdGVfZGF0YSkKIHsKQEAgLTQwNTQsNDMgKzQ0MzcsMTcgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IHBhcmFtcy0+ZmlsZW5hbWU7CiAgICAgaW50IG9rYXkgPSAxOwogCi0gICAgaWYgKCFzdHJjbXAoZmlsZW5hbWUsICJ0ZXN0L3RocmVhZHMvaW52YWxpZC54bWwiKSkgewotICAgICAgICB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgPSAwOwotICAgICAgICB4bWxHZW5lcmljRXJyb3JDb250ZXh0ID0gc3Rkb3V0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSA9IDE7Ci0gICAgICAgIHhtbEdlbmVyaWNFcnJvckNvbnRleHQgPSBzdGRlcnI7Ci0gICAgfQotI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKLSAgICBteURvYyA9IHhtbFBhcnNlRmlsZShmaWxlbmFtZSk7Ci0jZWxzZQotICAgIG15RG9jID0geG1sUmVhZEZpbGUoZmlsZW5hbWUsIE5VTEwsIFhNTF9XSVRIX0NBVEFMT0cpOworI2lmZGVmIExJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRAorICAgIHhtbE1lbVNldHVwKHhtbE1lbUZyZWUsIHhtbE1lbU1hbGxvYywgeG1sTWVtUmVhbGxvYywgeG1sTWVtb3J5U3RyZHVwKTsKICNlbmRpZgorCisgICAgbXlEb2MgPSB4bWxSZWFkRmlsZShmaWxlbmFtZSwgTlVMTCwgWE1MX1BBUlNFX05PRU5UIHwgWE1MX1BBUlNFX0RURExPQUQpOwogICAgIGlmIChteURvYykgewogICAgICAgICB4bWxGcmVlRG9jKG15RG9jKTsKICAgICB9IGVsc2UgewogICAgICAgICBwcmludGYoInBhcnNlIGZhaWxlZFxuIik7CiAgICAgICAgIG9rYXkgPSAwOwogICAgIH0KLSAgICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgInRlc3QvdGhyZWFkcy9pbnZhbGlkLnhtbCIpKSB7Ci0gICAgICAgIGlmICh4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgIT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCJWYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIG92ZXJyaWRlIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICBva2F5ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCAhPSBzdGRvdXQpIHsKLSAgICAgICAgICAgIHByaW50ZigieG1sR2VuZXJpY0Vycm9yQ29udGV4dCBvdmVycmlkZSBmYWlsZWRcbiIpOwotICAgICAgICAgICAgb2theSA9IDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlICE9IDEpIHsKLSAgICAgICAgICAgIHByaW50ZigiVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSBvdmVycmlkZSBmYWlsZWRcbiIpOwotICAgICAgICAgICAgb2theSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHhtbEdlbmVyaWNFcnJvckNvbnRleHQgIT0gc3RkZXJyKSB7Ci0gICAgICAgICAgICBwcmludGYoInhtbEdlbmVyaWNFcnJvckNvbnRleHQgb3ZlcnJpZGUgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIG9rYXkgPSAwOwotICAgICAgICB9Ci0gICAgfQogICAgIHBhcmFtcy0+b2theSA9IG9rYXk7CiAgICAgcmV0dXJuKE5VTEwpOwogfQpAQCAtNDE2OCw1OCArNDUyNSw2IEBACiAgICAgcmV0dXJuIChyZXMpOwogfQogCi0jZWxpZiBkZWZpbmVkIF9fQkVPU19fCi0jaW5jbHVkZSA8T1MuaD4KLQotc3RhdGljIHRocmVhZF9pZCB0aWRbTUFYX0FSR0NdOwotCi1zdGF0aWMgaW50Ci10ZXN0VGhyZWFkKHZvaWQpCi17Ci0gICAgdW5zaWduZWQgaW50IGksIHJlcGVhdDsKLSAgICBzdGF0dXNfdCByZXQ7Ci0gICAgaW50IHJlcyA9IDA7Ci0KLSAgICB4bWxJbml0UGFyc2VyKCk7Ci0gICAgZm9yIChyZXBlYXQgPSAwOyByZXBlYXQgPCA1MDA7IHJlcGVhdCsrKSB7Ci0gICAgICAgIHhtbExvYWRDYXRhbG9nKGNhdGFsb2cpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykgewotICAgICAgICAgICAgdGlkW2ldID0gKHRocmVhZF9pZCkgLSAxOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7Ci0gICAgICAgICAgICB0aWRbaV0gPQotICAgICAgICAgICAgICAgIHNwYXduX3RocmVhZCh0aHJlYWRfc3BlY2lmaWNfZGF0YSwgInhtbFRlc3RUaHJlYWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCX05PUk1BTF9QUklPUklUWSwgKHZvaWQgKikgJnRocmVhZFBhcmFtc1tpXSk7Ci0gICAgICAgICAgICBpZiAodGlkW2ldIDwgQl9PSykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmVvc190aHJlYWRfY3JlYXRlIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiYmVvc190aHJlYWRfY3JlYXRlICVkIC0+ICVkXG4iLCBpLCB0aWRbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7Ci0gICAgICAgICAgICB2b2lkICpyZXN1bHQ7Ci0gICAgICAgICAgICByZXQgPSB3YWl0X2Zvcl90aHJlYWQodGlkW2ldLCAmcmVzdWx0KTsKLSAgICAgICAgICAgIHByaW50ZigiYmVvc190aHJlYWRfd2FpdCAlZCAtPiAlZFxuIiwgaSwgcmV0KTsKLSAgICAgICAgICAgIGlmIChyZXQgIT0gQl9PSykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmVvc190aHJlYWRfd2FpdCBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB4bWxDYXRhbG9nQ2xlYW51cCgpOwotICAgICAgICByZXQgPSBCX09LOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykKLSAgICAgICAgICAgIGlmICh0aHJlYWRQYXJhbXNbaV0ub2theSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJUaHJlYWQgJWQgaGFuZGxpbmcgJXMgZmFpbGVkXG4iLCBpLAotICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRQYXJhbXNbaV0uZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgIHJldCA9IEJfRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXQgIT0gQl9PSykKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIHJldHVybiAoMCk7Ci19Ci0KICNlbGlmIGRlZmluZWQgSEFWRV9QVEhSRUFEX0gKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKQEAgLTQzMTYsNyArNDYyMSw5IEBACiAgICAgY2hhciBleHByZXNzaW9uWzUwMDBdOwogICAgIGludCBsZW4sIHJldCwgcmVzID0gMDsKIAotICAgIGlucHV0ID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisgICAgbmJfdGVzdHMrKzsKKworICAgIGlucHV0ID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOwogICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAogCQkiQ2Fubm90IG9wZW4gJXMgZm9yIHJlYWRpbmdcbiIsIGZpbGVuYW1lKTsKQEAgLTQzOTIsNyArNDY5OSwyNDYgQEAKICAgICByZXR1cm4ocmVzKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogTElCWE1MX1JFR0VYUFNfRU5BQkxFRCAqLworCisjaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJKgorICoJCQlBdXRvbWF0YSB0ZXN0cwkJCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNjYW5OdW1iZXIoY2hhciAqKnB0cikgeworICAgIGludCByZXQgPSAwOworICAgIGNoYXIgKmN1cjsKKworICAgIGN1ciA9ICpwdHI7CisgICAgd2hpbGUgKCgqY3VyID49ICcwJykgJiYgKCpjdXIgPD0gJzknKSkgeworCXJldCA9IHJldCAqIDEwICsgKCpjdXIgLSAnMCcpOworCWN1cisrOworICAgIH0KKyAgICAqcHRyID0gY3VyOworICAgIHJldHVybihyZXQpOworfQorCitzdGF0aWMgaW50CithdXRvbWF0YVRlc3QoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnJlc3VsdCwKKyAgICAgICAgICAgICBjb25zdCBjaGFyICplcnIgQVRUUklCVVRFX1VOVVNFRCwgaW50IG9wdGlvbnMgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIEZJTEUgKmlucHV0LCAqb3V0cHV0OworICAgIGNoYXIgKnRlbXA7CisgICAgY2hhciBleHByWzUwMDBdOworICAgIGludCBsZW47CisgICAgaW50IHJldDsKKyAgICBpbnQgaTsKKyAgICBpbnQgcmVzID0gMDsKKyAgICB4bWxBdXRvbWF0YVB0ciBhbTsKKyAgICB4bWxBdXRvbWF0YVN0YXRlUHRyIHN0YXRlc1sxMDAwXTsKKyAgICB4bWxSZWdleHBQdHIgcmVnZXhwID0gTlVMTDsKKyAgICB4bWxSZWdFeGVjQ3R4dFB0ciBleGVjID0gTlVMTDsKKworICAgIG5iX3Rlc3RzKys7CisKKyAgICBmb3IgKGkgPSAwO2k8MTAwMDtpKyspCisJc3RhdGVzW2ldID0gTlVMTDsKKworICAgIGlucHV0ID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOworICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7CisgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAorCQkiQ2Fubm90IG9wZW4gJXMgZm9yIHJlYWRpbmdcbiIsIGZpbGVuYW1lKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICB0ZW1wID0gcmVzdWx0RmlsZW5hbWUoZmlsZW5hbWUsICIiLCAiLnJlcyIpOworICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgZmF0YWxFcnJvcigpOworICAgIH0KKyAgICBvdXRwdXQgPSBmb3Blbih0ZW1wLCAid2IiKTsKKyAgICBpZiAob3V0cHV0ID09IE5VTEwpIHsKKwlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBvcGVuIG91dHB1dCBmaWxlICVzXG4iLCB0ZW1wKTsKKyAgICAgICAgZnJlZSh0ZW1wKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKworICAgIGFtID0geG1sTmV3QXV0b21hdGEoKTsKKyAgICBpZiAoYW0gPT0gTlVMTCkgeworICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJIkNhbm5vdCBjcmVhdGUgYXV0b21hdGFcbiIpOworCWZjbG9zZShpbnB1dCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgc3RhdGVzWzBdID0geG1sQXV0b21hdGFHZXRJbml0U3RhdGUoYW0pOworICAgIGlmIChzdGF0ZXNbMF0gPT0gTlVMTCkgeworICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJIkNhbm5vdCBnZXQgc3RhcnQgc3RhdGVcbiIpOworCXhtbEZyZWVBdXRvbWF0YShhbSk7CisJZmNsb3NlKGlucHV0KTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICByZXQgPSAwOworCisgICAgd2hpbGUgKGZnZXRzKGV4cHIsIDQ1MDAsIGlucHV0KSAhPSBOVUxMKSB7CisJaWYgKGV4cHJbMF0gPT0gJyMnKQorCSAgICBjb250aW51ZTsKKwlsZW4gPSBzdHJsZW4oZXhwcik7CisJbGVuLS07CisJd2hpbGUgKChsZW4gPj0gMCkgJiYKKwkgICAgICAgKChleHByW2xlbl0gPT0gJ1xuJykgfHwgKGV4cHJbbGVuXSA9PSAnXHQnKSB8fAorCQkoZXhwcltsZW5dID09ICdccicpIHx8IChleHByW2xlbl0gPT0gJyAnKSkpIGxlbi0tOworCWV4cHJbbGVuICsgMV0gPSAwOworCWlmIChsZW4gPj0gMCkgeworCSAgICBpZiAoKGFtICE9IE5VTEwpICYmIChleHByWzBdID09ICd0JykgJiYgKGV4cHJbMV0gPT0gJyAnKSkgeworCQljaGFyICpwdHIgPSAmZXhwclsyXTsKKwkJaW50IGZyb20sIHRvOworCisJCWZyb20gPSBzY2FuTnVtYmVyKCZwdHIpOworCQlpZiAoKnB0ciAhPSAnICcpIHsKKwkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAorCQkJICAgICJCYWQgbGluZSAlc1xuIiwgZXhwcik7CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoc3RhdGVzW2Zyb21dID09IE5VTEwpCisJCSAgICBzdGF0ZXNbZnJvbV0gPSB4bWxBdXRvbWF0YU5ld1N0YXRlKGFtKTsKKwkJcHRyKys7CisJCXRvID0gc2Nhbk51bWJlcigmcHRyKTsKKwkJaWYgKCpwdHIgIT0gJyAnKSB7CisJCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJCSAgICAiQmFkIGxpbmUgJXNcbiIsIGV4cHIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKHN0YXRlc1t0b10gPT0gTlVMTCkKKwkJICAgIHN0YXRlc1t0b10gPSB4bWxBdXRvbWF0YU5ld1N0YXRlKGFtKTsKKwkJcHRyKys7CisJCXhtbEF1dG9tYXRhTmV3VHJhbnNpdGlvbihhbSwgc3RhdGVzW2Zyb21dLCBzdGF0ZXNbdG9dLAorCQkJICAgICAgICAgICAgICAgICBCQURfQ0FTVCBwdHIsIE5VTEwpOworCSAgICB9IGVsc2UgaWYgKChhbSAhPSBOVUxMKSAmJiAoZXhwclswXSA9PSAnZScpICYmIChleHByWzFdID09ICcgJykpIHsKKwkJY2hhciAqcHRyID0gJmV4cHJbMl07CisJCWludCBmcm9tLCB0bzsKKworCQlmcm9tID0gc2Nhbk51bWJlcigmcHRyKTsKKwkJaWYgKCpwdHIgIT0gJyAnKSB7CisJCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJCSAgICAiQmFkIGxpbmUgJXNcbiIsIGV4cHIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKHN0YXRlc1tmcm9tXSA9PSBOVUxMKQorCQkgICAgc3RhdGVzW2Zyb21dID0geG1sQXV0b21hdGFOZXdTdGF0ZShhbSk7CisJCXB0cisrOworCQl0byA9IHNjYW5OdW1iZXIoJnB0cik7CisJCWlmIChzdGF0ZXNbdG9dID09IE5VTEwpCisJCSAgICBzdGF0ZXNbdG9dID0geG1sQXV0b21hdGFOZXdTdGF0ZShhbSk7CisJCXhtbEF1dG9tYXRhTmV3RXBzaWxvbihhbSwgc3RhdGVzW2Zyb21dLCBzdGF0ZXNbdG9dKTsKKwkgICAgfSBlbHNlIGlmICgoYW0gIT0gTlVMTCkgJiYgKGV4cHJbMF0gPT0gJ2YnKSAmJiAoZXhwclsxXSA9PSAnICcpKSB7CisJCWNoYXIgKnB0ciA9ICZleHByWzJdOworCQlpbnQgc3RhdGU7CisKKwkJc3RhdGUgPSBzY2FuTnVtYmVyKCZwdHIpOworCQlpZiAoc3RhdGVzW3N0YXRlXSA9PSBOVUxMKSB7CisJCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJCSAgICAiQmFkIHN0YXRlICVkIDogJXNcbiIsIHN0YXRlLCBleHByKTsKKwkJICAgIGJyZWFrOworCQl9CisJCXhtbEF1dG9tYXRhU2V0RmluYWxTdGF0ZShhbSwgc3RhdGVzW3N0YXRlXSk7CisJICAgIH0gZWxzZSBpZiAoKGFtICE9IE5VTEwpICYmIChleHByWzBdID09ICdjJykgJiYgKGV4cHJbMV0gPT0gJyAnKSkgeworCQljaGFyICpwdHIgPSAmZXhwclsyXTsKKwkJaW50IGZyb20sIHRvOworCQlpbnQgbWluLCBtYXg7CisKKwkJZnJvbSA9IHNjYW5OdW1iZXIoJnB0cik7CisJCWlmICgqcHRyICE9ICcgJykgeworCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCisJCQkgICAgIkJhZCBsaW5lICVzXG4iLCBleHByKTsKKwkJICAgIGJyZWFrOworCQl9CisJCWlmIChzdGF0ZXNbZnJvbV0gPT0gTlVMTCkKKwkJICAgIHN0YXRlc1tmcm9tXSA9IHhtbEF1dG9tYXRhTmV3U3RhdGUoYW0pOworCQlwdHIrKzsKKwkJdG8gPSBzY2FuTnVtYmVyKCZwdHIpOworCQlpZiAoKnB0ciAhPSAnICcpIHsKKwkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAorCQkJICAgICJCYWQgbGluZSAlc1xuIiwgZXhwcik7CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoc3RhdGVzW3RvXSA9PSBOVUxMKQorCQkgICAgc3RhdGVzW3RvXSA9IHhtbEF1dG9tYXRhTmV3U3RhdGUoYW0pOworCQlwdHIrKzsKKwkJbWluID0gc2Nhbk51bWJlcigmcHRyKTsKKwkJaWYgKCpwdHIgIT0gJyAnKSB7CisJCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJCSAgICAiQmFkIGxpbmUgJXNcbiIsIGV4cHIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJcHRyKys7CisJCW1heCA9IHNjYW5OdW1iZXIoJnB0cik7CisJCWlmICgqcHRyICE9ICcgJykgeworCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCisJCQkgICAgIkJhZCBsaW5lICVzXG4iLCBleHByKTsKKwkJICAgIGJyZWFrOworCQl9CisJCXB0cisrOworCQl4bWxBdXRvbWF0YU5ld0NvdW50VHJhbnMoYW0sIHN0YXRlc1tmcm9tXSwgc3RhdGVzW3RvXSwKKwkJCSAgICAgICAgICAgICAgICAgQkFEX0NBU1QgcHRyLCBtaW4sIG1heCwgTlVMTCk7CisJICAgIH0gZWxzZSBpZiAoKGFtICE9IE5VTEwpICYmIChleHByWzBdID09ICctJykgJiYgKGV4cHJbMV0gPT0gJy0nKSkgeworCQkvKiBlbmQgb2YgdGhlIGF1dG9tYXRhICovCisJCXJlZ2V4cCA9IHhtbEF1dG9tYXRhQ29tcGlsZShhbSk7CisJCXhtbEZyZWVBdXRvbWF0YShhbSk7CisJCWFtID0gTlVMTDsKKwkJaWYgKHJlZ2V4cCA9PSBOVUxMKSB7CisJCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKKwkJCSAgICAiRmFpbGVkIHRvIGNvbXBpbGUgdGhlIGF1dG9tYXRhIik7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9IGVsc2UgaWYgKChleHByWzBdID09ICc9JykgJiYgKGV4cHJbMV0gPT0gJz4nKSkgeworCQlpZiAocmVnZXhwID09IE5VTEwpIHsKKwkJICAgIGZwcmludGYob3V0cHV0LCAiPT4gZmFpbGVkIG5vdCBjb21waWxlZFxuIik7CisJCX0gZWxzZSB7CisJCSAgICBpZiAoZXhlYyA9PSBOVUxMKQorCQkJZXhlYyA9IHhtbFJlZ05ld0V4ZWNDdHh0KHJlZ2V4cCwgTlVMTCwgTlVMTCk7CisJCSAgICBpZiAocmV0ID09IDApIHsKKwkJCXJldCA9IHhtbFJlZ0V4ZWNQdXNoU3RyaW5nKGV4ZWMsIE5VTEwsIE5VTEwpOworCQkgICAgfQorCQkgICAgaWYgKHJldCA9PSAxKQorCQkJZnByaW50ZihvdXRwdXQsICI9PiBQYXNzZWRcbiIpOworCQkgICAgZWxzZSBpZiAoKHJldCA9PSAwKSB8fCAocmV0ID09IC0xKSkKKwkJCWZwcmludGYob3V0cHV0LCAiPT4gRmFpbGVkXG4iKTsKKwkJICAgIGVsc2UgaWYgKHJldCA8IDApCisJCQlmcHJpbnRmKG91dHB1dCwgIj0+IEVycm9yXG4iKTsKKwkJICAgIHhtbFJlZ0ZyZWVFeGVjQ3R4dChleGVjKTsKKwkJICAgIGV4ZWMgPSBOVUxMOworCQl9CisJCXJldCA9IDA7CisJICAgIH0gZWxzZSBpZiAocmVnZXhwICE9IE5VTEwpIHsKKwkJaWYgKGV4ZWMgPT0gTlVMTCkKKwkJICAgIGV4ZWMgPSB4bWxSZWdOZXdFeGVjQ3R4dChyZWdleHAsIE5VTEwsIE5VTEwpOworCQlyZXQgPSB4bWxSZWdFeGVjUHVzaFN0cmluZyhleGVjLCBCQURfQ0FTVCBleHByLCBOVUxMKTsKKwkgICAgfSBlbHNlIHsKKwkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCisJCQkiVW5leHBlY3RlZCBsaW5lICVzXG4iLCBleHByKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZmNsb3NlKG91dHB1dCk7CisgICAgZmNsb3NlKGlucHV0KTsKKyAgICBpZiAocmVnZXhwICE9IE5VTEwpCisJeG1sUmVnRnJlZVJlZ2V4cChyZWdleHApOworICAgIGlmIChleGVjICE9IE5VTEwpCisJeG1sUmVnRnJlZUV4ZWNDdHh0KGV4ZWMpOworICAgIGlmIChhbSAhPSBOVUxMKQorCXhtbEZyZWVBdXRvbWF0YShhbSk7CisKKyAgICByZXQgPSBjb21wYXJlRmlsZXModGVtcCwgcmVzdWx0KTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVzdWx0IGZvciAlcyBmYWlsZWQgaW4gJXNcbiIsIGZpbGVuYW1lLCByZXN1bHQpOworICAgICAgICByZXMgPSAxOworICAgIH0KKyAgICBpZiAodGVtcCAhPSBOVUxMKSB7CisgICAgICAgIHVubGluayh0ZW1wKTsKKyAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICB9CisKKyAgICByZXR1cm4ocmVzKTsKK30KKworI2VuZGlmIC8qIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVEICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgpAQCAtNDQ2Miw2ICs1MDA4LDkgQEAKICAgICB7ICJYTUwgcHVzaCByZWdyZXNzaW9uIHRlc3RzIiAsCiAgICAgICBwdXNoUGFyc2VUZXN0LCAiLi90ZXN0LyoiLCAicmVzdWx0LyIsICIiLCBOVUxMLAogICAgICAgMCB9LAorICAgIHsgIlhNTCBwdXNoIGJvdW5kYXJ5IHRlc3RzIiAsCisgICAgICBwdXNoQm91bmRhcnlUZXN0LCAiLi90ZXN0LyoiLCAicmVzdWx0LyIsICIiLCBOVUxMLAorICAgICAgMCB9LAogI2VuZGlmCiAjaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAogICAgIHsgIkhUTUwgcmVncmVzc2lvbiB0ZXN0cyIgLApAQCAtNDQ3NCw2ICs1MDIzLDkgQEAKICAgICB7ICJQdXNoIEhUTUwgcmVncmVzc2lvbiB0ZXN0cyIgLAogICAgICAgcHVzaFBhcnNlVGVzdCwgIi4vdGVzdC9IVE1MLyoiLCAicmVzdWx0L0hUTUwvIiwgIiIsICIuZXJyIiwKICAgICAgIFhNTF9QQVJTRV9IVE1MIH0sCisgICAgeyAiUHVzaCBIVE1MIGJvdW5kYXJ5IHRlc3RzIiAsCisgICAgICBwdXNoQm91bmRhcnlUZXN0LCAiLi90ZXN0L0hUTUwvKiIsICJyZXN1bHQvSFRNTC8iLCAiIiwgTlVMTCwKKyAgICAgIFhNTF9QQVJTRV9IVE1MIH0sCiAjZW5kaWYKICAgICB7ICJIVE1MIFNBWCByZWdyZXNzaW9uIHRlc3RzIiAsCiAgICAgICBzYXhQYXJzZVRlc3QsICIuL3Rlc3QvSFRNTC8qIiwgInJlc3VsdC9IVE1MLyIsICIuc2F4IiwgTlVMTCwKQEAgLTQ1MDAsMjUgKzUwNTIsMjQgQEAKICNlbmRpZgogI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECiAgICAgeyAiWEluY2x1ZGUgcmVncmVzc2lvbiB0ZXN0cyIgLAotICAgICAgZXJyUGFyc2VUZXN0LCAiLi90ZXN0L1hJbmNsdWRlL2RvY3MvKiIsICJyZXN1bHQvWEluY2x1ZGUvIiwgIiIsIE5VTEwsCi0gICAgICAvKiBJZ25vcmUgZXJyb3JzIGF0IHRoaXMgcG9pbnQgIi5lcnIiLCAqLworICAgICAgZXJyUGFyc2VUZXN0LCAiLi90ZXN0L1hJbmNsdWRlL2RvY3MvKiIsICJyZXN1bHQvWEluY2x1ZGUvIiwgIiIsICIuZXJyIiwKICAgICAgIFhNTF9QQVJTRV9YSU5DTFVERSB9LAogI2lmZGVmIExJQlhNTF9SRUFERVJfRU5BQkxFRAogICAgIHsgIlhJbmNsdWRlIHhtbFJlYWRlciByZWdyZXNzaW9uIHRlc3RzIiwKICAgICAgIHN0cmVhbVBhcnNlVGVzdCwgIi4vdGVzdC9YSW5jbHVkZS9kb2NzLyoiLCAicmVzdWx0L1hJbmNsdWRlLyIsICIucmRyIiwKLSAgICAgIC8qIElnbm9yZSBlcnJvcnMgYXQgdGhpcyBwb2ludCAiLmVyciIsICovCi0gICAgICBOVUxMLCBYTUxfUEFSU0VfWElOQ0xVREUgfSwKKyAgICAgICIuZXJyIiwgWE1MX1BBUlNFX1hJTkNMVURFIH0sCiAjZW5kaWYKICAgICB7ICJYSW5jbHVkZSByZWdyZXNzaW9uIHRlc3RzIHN0cmlwcGluZyBpbmNsdWRlIG5vZGVzIiAsCi0gICAgICBlcnJQYXJzZVRlc3QsICIuL3Rlc3QvWEluY2x1ZGUvZG9jcy8qIiwgInJlc3VsdC9YSW5jbHVkZS8iLCAiIiwgTlVMTCwKLSAgICAgIC8qIElnbm9yZSBlcnJvcnMgYXQgdGhpcyBwb2ludCAiLmVyciIsICovCisgICAgICBlcnJQYXJzZVRlc3QsICIuL3Rlc3QvWEluY2x1ZGUvZG9jcy8qIiwgInJlc3VsdC9YSW5jbHVkZS8iLCAiIiwgIi5lcnIiLAogICAgICAgWE1MX1BBUlNFX1hJTkNMVURFIHwgWE1MX1BBUlNFX05PWElOQ05PREUgfSwKICNpZmRlZiBMSUJYTUxfUkVBREVSX0VOQUJMRUQKICAgICB7ICJYSW5jbHVkZSB4bWxSZWFkZXIgcmVncmVzc2lvbiB0ZXN0cyBzdHJpcHBpbmcgaW5jbHVkZSBub2RlcyIsCiAgICAgICBzdHJlYW1QYXJzZVRlc3QsICIuL3Rlc3QvWEluY2x1ZGUvZG9jcy8qIiwgInJlc3VsdC9YSW5jbHVkZS8iLCAiLnJkciIsCi0gICAgICAvKiBJZ25vcmUgZXJyb3JzIGF0IHRoaXMgcG9pbnQgIi5lcnIiLCAqLwotICAgICAgTlVMTCwgWE1MX1BBUlNFX1hJTkNMVURFIHwgWE1MX1BBUlNFX05PWElOQ05PREUgfSwKKyAgICAgICIuZXJyIiwgWE1MX1BBUlNFX1hJTkNMVURFIHwgWE1MX1BBUlNFX05PWElOQ05PREUgfSwKICNlbmRpZgorICAgIHsgIlhJbmNsdWRlIHJlZ3Jlc3Npb24gdGVzdHMgd2l0aG91dCByZWFkZXIiLAorICAgICAgZXJyUGFyc2VUZXN0LCAiLi90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyLyoiLCAicmVzdWx0L1hJbmNsdWRlLyIsICIiLAorICAgICAgIi5lcnIiLCBYTUxfUEFSU0VfWElOQ0xVREUgfSwKICNlbmRpZgogI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECiAjaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKQEAgLTQ2MDEsNiArNTE1MiwxMSBAQAogICAgICAgcmVnZXhwVGVzdCwgIi4vdGVzdC9yZWdleHAvKiIsICJyZXN1bHQvcmVnZXhwLyIsICIiLCAiLmVyciIsCiAgICAgICAwIH0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKExJQlhNTF9BVVRPTUFUQV9FTkFCTEVEKQorICAgIHsgIkF1dG9tYXRhIHJlZ3Jlc3Npb24gdGVzdHMiICwKKyAgICAgIGF1dG9tYXRhVGVzdCwgIi4vdGVzdC9hdXRvbWF0YS8qIiwgInJlc3VsdC9hdXRvbWF0YS8iLCAiIiwgTlVMTCwKKyAgICAgIDAgfSwKKyNlbmRpZgogICAgIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwfQogfTsKIApAQCAtNDc3OSw3ICs1MzM1LDYgQEAKIAkgICAgICAgbmJfdGVzdHMsIG5iX2Vycm9ycywgbmJfbGVha3MpOwogICAgIH0KICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgeG1sTWVtb3J5RHVtcCgpOwogCiAgICAgcmV0dXJuKHJldCk7CiB9CmRpZmYgLS1naXQgYS9ydW54bWxjb25mLmMgYi9ydW54bWxjb25mLmMKaW5kZXggNWU4OGY4MC4uYjVjM2ZkOCAxMDA2NDQKLS0tIGEvcnVueG1sY29uZi5jCisrKyBiL3J1bnhtbGNvbmYuYwpAQCAtNiwxOCArNiwxNCBAQAogICogZGFuaWVsQHZlaWxsYXJkLmNvbQogICovCiAKLSNpbmNsdWRlICJsaWJ4bWwuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CiAKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAorI2lmIGRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX1ZBTElEX0VOQUJMRUQpCiAKLSNpZiAhZGVmaW5lZChfV0lOMzIpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+CiAKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgpAQCAtMTI2LDcgKzEyMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi10ZXN0RXJyb3JIYW5kbGVyKHZvaWQgKnVzZXJEYXRhIEFUVFJJQlVURV9VTlVTRUQsIHhtbEVycm9yUHRyIGVycm9yKSB7Cit0ZXN0RXJyb3JIYW5kbGVyKHZvaWQgKnVzZXJEYXRhIEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IHhtbEVycm9yICplcnJvcikgewogICAgIGludCByZXM7CiAKICAgICBpZiAodGVzdEVycm9yc1NpemUgPj0gMzI3NjgpCkBAIC0xNTMsOSArMTQ5LDYgQEAKIAogc3RhdGljIHZvaWQKIGluaXRpYWxpemVMaWJ4bWwyKHZvaWQpIHsKLSAgICB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSA9IDA7Ci0gICAgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0KDApOwotCiAgICAgeG1sTWVtU2V0dXAoeG1sTWVtRnJlZSwgeG1sTWVtTWFsbG9jLCB4bWxNZW1SZWFsbG9jLCB4bWxNZW1vcnlTdHJkdXApOwogICAgIHhtbEluaXRQYXJzZXIoKTsKICAgICB4bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcih0ZXN0RXh0ZXJuYWxFbnRpdHlMb2FkZXIpOwpAQCAtMjU3LDggKzI1MCwxMCBAQAogICAgICAgICBuYl9lcnJvcnMrKzsKIAlyZXQgPSAwOwogICAgIH0gZWxzZSB7Ci0JaWYgKCh4bWxMYXN0RXJyb3IuY29kZSA9PSBYTUxfRVJSX09LKSB8fAotCSAgICAoeG1sTGFzdEVycm9yLmRvbWFpbiAhPSBYTUxfRlJPTV9OQU1FU1BBQ0UpKSB7CisgICAgICAgIGNvbnN0IHhtbEVycm9yICplcnJvciA9IHhtbEdldExhc3RFcnJvcigpOworCisJaWYgKChlcnJvci0+Y29kZSA9PSBYTUxfRVJSX09LKSB8fAorCSAgICAoZXJyb3ItPmRvbWFpbiAhPSBYTUxfRlJPTV9OQU1FU1BBQ0UpKSB7CiAJICAgIHRlc3RfbG9nKCJ0ZXN0ICVzIDogJXMgZmFpbGVkIHRvIGRldGVjdCBuYW1lc3BhY2UgZXJyb3JcbiIsCiAJCSAgICAgaWQsIGZpbGVuYW1lKTsKIAkgICAgbmJfZXJyb3JzKys7CkBAIC01OTEsNyArNTg2LDYgQEAKICAgICB9CiAgICAgeG1sWFBhdGhGcmVlQ29udGV4dChjdHh0WFBhdGgpOwogICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAKICAgICBpZiAobG9nZmlsZSAhPSBOVUxMKQogICAgICAgICBmY2xvc2UobG9nZmlsZSk7CkBAIC01OTksOSArNTkzLDkgQEAKIH0KIAogI2Vsc2UgLyogISBMSUJYTUxfWFBBVEhfRU5BQkxFRCAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+CiBpbnQKIG1haW4oaW50IGFyZ2MgQVRUUklCVVRFX1VOVVNFRCwgY2hhciAqKmFyZ3YpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIG5lZWQgWFBhdGggc3VwcG9ydFxuIiwgYXJndlswXSk7CisgICAgZnByaW50ZihzdGRlcnIsICIlcyBuZWVkIFhQYXRoIGFuZCB2YWxpZGF0aW9uIHN1cHBvcnRcbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybigwKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc2F2ZS5oIGIvc2F2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTJiNjc0Li4wMDAwMDAwCi0tLSBhL3NhdmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBTdW1tYXJ5OiBJbnRlcm5hbCBJbnRlcmZhY2VzIGZvciBzYXZpbmcgaW4gbGlieG1sMgotICogRGVzY3JpcHRpb246IHRoaXMgbW9kdWxlIGRlc2NyaWJlcyBhIGZldyBpbnRlcmZhY2VzIHdoaWNoIHdlcmUKLSAqICAgICAgICAgICAgICBhZGRlZCBhbG9uZyB3aXRoIHRoZSBBUEkgY2hhbmdlcyBpbiAyLjkuMAotICogICAgICAgICAgICAgIHRob3NlIGFyZSBwcml2YXRlIHJvdXRpbmVzIGF0IHRoaXMgcG9pbnQKLSAqCi0gKiBDb3B5OiBTZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogQXV0aG9yOiBEYW5pZWwgVmVpbGxhcmQKLSAqLwotCi0jaWZuZGVmIF9fWE1MX1NBVkVfSF9fCi0jZGVmaW5lIF9fWE1MX1NBVkVfSF9fCi0KLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLXZvaWQgeG1sQnVmQXR0clNlcmlhbGl6ZVR4dENvbnRlbnQoeG1sQnVmUHRyIGJ1ZiwgeG1sRG9jUHRyIGRvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sQXR0clB0ciBhdHRyLCBjb25zdCB4bWxDaGFyICogc3RyaW5nKTsKLXZvaWQgeG1sQnVmRHVtcE5vdGF0aW9uVGFibGUoeG1sQnVmUHRyIGJ1ZiwgeG1sTm90YXRpb25UYWJsZVB0ciB0YWJsZSk7Ci12b2lkIHhtbEJ1ZkR1bXBFbGVtZW50RGVjbCh4bWxCdWZQdHIgYnVmLCB4bWxFbGVtZW50UHRyIGVsZW0pOwotdm9pZCB4bWxCdWZEdW1wQXR0cmlidXRlRGVjbCh4bWxCdWZQdHIgYnVmLCB4bWxBdHRyaWJ1dGVQdHIgYXR0cik7Ci12b2lkIHhtbEJ1ZkR1bXBFbnRpdHlEZWNsKHhtbEJ1ZlB0ciBidWYsIHhtbEVudGl0eVB0ciBlbnQpOwotI2VuZGlmCi0KLXhtbENoYXIgKnhtbEVuY29kZUF0dHJpYnV0ZUVudGl0aWVzKHhtbERvY1B0ciBkb2MsIGNvbnN0IHhtbENoYXIgKmlucHV0KTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNlbmRpZiAvKiBfX1hNTF9TQVZFX0hfXyAqLwotCmRpZmYgLS1naXQgYS9zY2hlbWF0cm9uLmMgYi9zY2hlbWF0cm9uLmMKaW5kZXggNjhhNGM2Mi4uYTgyNTkyMCAxMDA2NDQKLS0tIGEvc2NoZW1hdHJvbi5jCisrKyBiL3NjaGVtYXRyb24uYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaWZkZWYgTElCWE1MX1NDSEVNQVRST05fRU5BQkxFRAogCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CkBAIC0zNCw2ICszNSw4IEBACiAjaW5jbHVkZSA8bGlieG1sL3BhdHRlcm4uaD4KICNpbmNsdWRlIDxsaWJ4bWwvc2NoZW1hdHJvbi5oPgogCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgorCiAjZGVmaW5lIFNDSEVNQVRST05fUEFSU0VfT1BUSU9OUyBYTUxfUEFSU0VfTk9FTlQKIAogI2RlZmluZSBTQ1RfT0xEX05TIEJBRF9DQVNUICJodHRwOi8vd3d3LmFzY2MubmV0L3htbC9zY2hlbWF0cm9uIgpAQCAtMTUwNiwxMSArMTUwOSwxMiBAQAogICAgICAgICAgICAgICAgIGludCBzaXplOwogCiAgICAgICAgICAgICAgICAgc2l6ZSA9IHNucHJpbnRmKE5VTEwsIDAsICIlMGciLCBldmFsLT5mbG9hdHZhbCk7Ci0gICAgICAgICAgICAgICAgYnVmID0gKHhtbENoYXIqKSBtYWxsb2Moc2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7Ci0gICAgICAgICAgICAgICAgLyogeG1sU3RyUHJpbnRmKGJ1Ziwgc2l6ZSwgIiUwZyIsIGV2YWwtPmZsb2F0dmFsKTsgLy8gZG9lc24ndCB3b3JrICovCi0gICAgICAgICAgICAgICAgc3ByaW50ZigoY2hhciopIGJ1ZiwgIiUwZyIsIGV2YWwtPmZsb2F0dmFsKTsKLSAgICAgICAgICAgICAgICByZXQgPSB4bWxTdHJjYXQocmV0LCBidWYpOwotICAgICAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICBidWYgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2Moc2l6ZSArIDEpOworICAgICAgICAgICAgICAgIGlmIChidWYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBzbnByaW50ZigoY2hhciAqKSBidWYsIHNpemUgKyAxLCAiJTBnIiwgZXZhbC0+ZmxvYXR2YWwpOworICAgICAgICAgICAgICAgICAgICByZXQgPSB4bWxTdHJjYXQocmV0LCBidWYpOworICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKGJ1Zik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBYUEFUSF9TVFJJTkc6CkBAIC0xNTg0LDggKzE1ODgsOCBAQAogICAgICAgICBsb25nIGxpbmU7CiAgICAgICAgIGNvbnN0IHhtbENoYXIgKnJlcG9ydCA9IE5VTEw7CiAKLSAgICAgICAgaWYgKCgodGVzdC0+dHlwZSA9PSBYTUxfU0NIRU1BVFJPTl9SRVBPUlQpICYgKCFzdWNjZXNzKSkgfHwKLSAgICAgICAgICAgICgodGVzdC0+dHlwZSA9PSBYTUxfU0NIRU1BVFJPTl9BU1NFUlQpICYgKHN1Y2Nlc3MpKSkKKyAgICAgICAgaWYgKCgodGVzdC0+dHlwZSA9PSBYTUxfU0NIRU1BVFJPTl9SRVBPUlQpICYmICghc3VjY2VzcykpIHx8CisgICAgICAgICAgICAoKHRlc3QtPnR5cGUgPT0gWE1MX1NDSEVNQVRST05fQVNTRVJUKSAmJiAoc3VjY2VzcykpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBsaW5lID0geG1sR2V0TGluZU5vKGN1cik7CiAgICAgICAgIHBhdGggPSB4bWxHZXROb2RlUGF0aChjdXIpOwpAQCAtMjA1MSw3ICsyMDU1LDYgQEAKICAgICB4bWxGcmVlRG9jKGluc3RhbmNlKTsKIAogICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAKICAgICByZXR1cm4gKDApOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9IVE1ML25hbWVzLmh0bWwgYi90ZXN0L0hUTUwvbmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGFjN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9IVE1ML25hbWVzLmh0bWwKQEAgLTAsMCArMSw1IEBACis8aHRtbD4KKzxib2R5PgorICA8bzpwPjwvbzpwPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdC9IVE1ML3htbC1kZWNsYXJhdGlvbi0xLmh0bWwgYi90ZXN0L0hUTUwveG1sLWRlY2xhcmF0aW9uLTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUwYmU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9IVE1ML3htbC1kZWNsYXJhdGlvbi0xLmh0bWwKQEAgLTAsMCArMSwyIEBACis8P3htbCBlbmNvZGluZz0iVVRGLTgiPgorPHA+w7bDpMO8w588L3A+CmRpZmYgLS1naXQgYS90ZXN0L1VSSS9maWxlLnVyaSBiL3Rlc3QvVVJJL2ZpbGUudXJpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOGI3YTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L1VSSS9maWxlLnVyaQpAQCAtMCwwICsxIEBACitmaWxlOi8vL2Zvby50eHQKZGlmZiAtLWdpdCBhL3Rlc3QvVVJJL3BvcnQudXJpIGIvdGVzdC9VUkkvcG9ydC51cmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyMjMyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvVVJJL3BvcnQudXJpCkBAIC0wLDAgKzEsMiBAQAorbmJkOi8vOjEwODg4CitodHRwczovL2V4YW1wbGUuY29tOjEyMzQ1LwpkaWZmIC0tZ2l0IGEvdGVzdC9VUkkvdXJpLmRhdGEgYi90ZXN0L1VSSS91cmkuZGF0YQppbmRleCBhOTZlYTVmLi4wYTJlNDZmIDEwMDY0NAotLS0gYS90ZXN0L1VSSS91cmkuZGF0YQorKysgYi90ZXN0L1VSSS91cmkuZGF0YQpAQCAtMTYsMyArMTYsNiBAQAogaHR0cDovL2Vsc2V3aGVyZS5jb20vI2RlZXAKIGh0dHA6Ly9lbHNld2hlcmUuY29tLz9kZWVwCiBodHRwOi8vZWxzZXdoZXJlLmNvbS8/ZGVlcCNkZWVwMgorLy9lbHNld2hlcmUuY29tL2JhcgorLy9lbHNld2hlcmUuY29tOjgwODAvYmFyCisvLzo4MDgwCmRpZmYgLS1naXQgYS90ZXN0L1hJbmNsdWRlL2RvY3MvaW52YWxpZF9jaGFyLnhtbCBiL3Rlc3QvWEluY2x1ZGUvZG9jcy9pbnZhbGlkX2NoYXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZTVhNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L1hJbmNsdWRlL2RvY3MvaW52YWxpZF9jaGFyLnhtbApAQCAtMCwwICsxLDMgQEAKKzx4IHhtbG5zOnhpbmNsdWRlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgIDx4aW5jbHVkZTppbmNsdWRlIGhyZWY9Ii4uL2VudHMvaW52YWxpZF9jaGFyLnR4dCIgcGFyc2U9InRleHQiLz4KKzwveD4KZGlmZiAtLWdpdCBhL3Rlc3QvWEluY2x1ZGUvZW50cy9pbnZhbGlkX2NoYXIudHh0IGIvdGVzdC9YSW5jbHVkZS9lbnRzL2ludmFsaWRfY2hhci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwNjYxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvWEluY2x1ZGUvZW50cy9pbnZhbGlkX2NoYXIudHh0CkBAIC0wLDAgKzEgQEAKK2ludmFsaWQ6IP8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL2ZhbGxiYWNrNy54bWwgYi90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL2ZhbGxiYWNrNy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkZjkzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvZmFsbGJhY2s3LnhtbApAQCAtMCwwICsxLDEyIEBACis8eCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgICAgPGE+dGV4dDwvYT4KKyAgICA8eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9iKSIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9IjQwNC54bWwiPgorICAgICAgICA8eGk6ZmFsbGJhY2s+CisgICAgICAgICAgICA8Yj4KKyAgICAgICAgICAgICAgICA8eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9hKSIvPgorICAgICAgICAgICAgPC9iPgorICAgICAgICA8L3hpOmZhbGxiYWNrPgorICAgIDwveGk6aW5jbHVkZT4KKyAgICA8eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9iKSIvPgorPC94PgpkaWZmIC0tZ2l0IGEvdGVzdC9YSW5jbHVkZS93aXRob3V0LXJlYWRlci9pc3N1ZTQyNC0xLnhtbCBiL3Rlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvaXNzdWU0MjQtMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2YWE5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvaXNzdWU0MjQtMS54bWwKQEAgLTAsMCArMSw1IEBACis8eCB4bWxuczp4aW5jbHVkZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgICA8cD5Tb21ldGhpbmc8L3A+CisgICA8ZD48eGluY2x1ZGU6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9wKSIvPjwvZD4KKyAgIDx4aW5jbHVkZTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2QpIi8+Cis8L3g+CmRpZmYgLS1naXQgYS90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL2lzc3VlNDI0LTIueG1sIGIvdGVzdC9YSW5jbHVkZS93aXRob3V0LXJlYWRlci9pc3N1ZTQyNC0yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjFlYWJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9YSW5jbHVkZS93aXRob3V0LXJlYWRlci9pc3N1ZTQyNC0yLnhtbApAQCAtMCwwICsxLDUgQEAKKzx4IHhtbG5zOnhpbmNsdWRlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgIDxwPlNvbWV0aGluZzwvcD4KKyAgIDx4aW5jbHVkZTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2QpIi8+CisgICA8ZD48eGluY2x1ZGU6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9wKSIvPjwvZD4KKzwveD4KZGlmZiAtLWdpdCBhL3Rlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvbG9vcC54bWwgYi90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL2xvb3AueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTdlMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L1hJbmNsdWRlL3dpdGhvdXQtcmVhZGVyL2xvb3AueG1sCkBAIC0wLDAgKzEsNCBAQAorPHggeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICAgPGE+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vYikiLz48L2E+CisgICA8Yj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9hKSIvPjwvYj4KKzwveD4KZGlmZiAtLWdpdCBhL3Rlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvbWF4LXJlY3Vyc2UueG1sIGIvdGVzdC9YSW5jbHVkZS93aXRob3V0LXJlYWRlci9tYXgtcmVjdXJzZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlMTRiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvWEluY2x1ZGUvd2l0aG91dC1yZWFkZXIvbWF4LXJlY3Vyc2UueG1sCkBAIC0wLDAgKzEsMTA0IEBACis8eCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+Cis8ZTAwPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UwMSkiLz48L2UwMD4KKzxlMDE+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTAyKSIvPjwvZTAxPgorPGUwMj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMDMpIi8+PC9lMDI+Cis8ZTAzPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UwNCkiLz48L2UwMz4KKzxlMDQ+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTA1KSIvPjwvZTA0PgorPGUwNT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMDYpIi8+PC9lMDU+Cis8ZTA2Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UwNykiLz48L2UwNj4KKzxlMDc+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTA4KSIvPjwvZTA3PgorPGUwOD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMDkpIi8+PC9lMDg+Cis8ZTA5Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UxMCkiLz48L2UwOT4KKzxlMTA+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTExKSIvPjwvZTEwPgorPGUxMT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMTIpIi8+PC9lMTE+Cis8ZTEyPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UxMykiLz48L2UxMj4KKzxlMTM+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTE0KSIvPjwvZTEzPgorPGUxND48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMTUpIi8+PC9lMTQ+Cis8ZTE1Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UxNikiLz48L2UxNT4KKzxlMTY+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTE3KSIvPjwvZTE2PgorPGUxNz48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMTgpIi8+PC9lMTc+Cis8ZTE4Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UxOSkiLz48L2UxOD4KKzxlMTk+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTIwKSIvPjwvZTE5PgorPGUyMD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMjEpIi8+PC9lMjA+Cis8ZTIxPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UyMikiLz48L2UyMT4KKzxlMjI+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTIzKSIvPjwvZTIyPgorPGUyMz48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMjQpIi8+PC9lMjM+Cis8ZTI0Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UyNSkiLz48L2UyND4KKzxlMjU+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTI2KSIvPjwvZTI1PgorPGUyNj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMjcpIi8+PC9lMjY+Cis8ZTI3Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UyOCkiLz48L2UyNz4KKzxlMjg+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTI5KSIvPjwvZTI4PgorPGUyOT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMzApIi8+PC9lMjk+Cis8ZTMwPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UzMSkiLz48L2UzMD4KKzxlMzE+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTMyKSIvPjwvZTMxPgorPGUzMj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMzMpIi8+PC9lMzI+Cis8ZTMzPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UzNCkiLz48L2UzMz4KKzxlMzQ+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTM1KSIvPjwvZTM0PgorPGUzNT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMzYpIi8+PC9lMzU+Cis8ZTM2Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UzNykiLz48L2UzNj4KKzxlMzc+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTM4KSIvPjwvZTM3PgorPGUzOD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMzkpIi8+PC9lMzg+Cis8ZTM5Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U0MCkiLz48L2UzOT4KKzxlNDA+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTQxKSIvPjwvZTQwPgorPGU0MT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNDIpIi8+PC9lNDE+Cis8ZTQyPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U0MykiLz48L2U0Mj4KKzxlNDM+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTQ0KSIvPjwvZTQzPgorPGU0ND48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNDUpIi8+PC9lNDQ+Cis8ZTQ1Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U0NikiLz48L2U0NT4KKzxlNDY+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTQ3KSIvPjwvZTQ2PgorPGU0Nz48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNDgpIi8+PC9lNDc+Cis8ZTQ4Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U0OSkiLz48L2U0OD4KKzxlNDk+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTUwKSIvPjwvZTQ5PgorPGU1MD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNTEpIi8+PC9lNTA+Cis8ZTUxPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U1MikiLz48L2U1MT4KKzxlNTI+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTUzKSIvPjwvZTUyPgorPGU1Mz48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNTQpIi8+PC9lNTM+Cis8ZTU0Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U1NSkiLz48L2U1ND4KKzxlNTU+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTU2KSIvPjwvZTU1PgorPGU1Nj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNTcpIi8+PC9lNTY+Cis8ZTU3Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U1OCkiLz48L2U1Nz4KKzxlNTg+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTU5KSIvPjwvZTU4PgorPGU1OT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNjApIi8+PC9lNTk+Cis8ZTYwPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U2MSkiLz48L2U2MD4KKzxlNjE+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTYyKSIvPjwvZTYxPgorPGU2Mj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNjMpIi8+PC9lNjI+Cis8ZTYzPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U2NCkiLz48L2U2Mz4KKzxlNjQ+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTY1KSIvPjwvZTY0PgorPGU2NT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNjYpIi8+PC9lNjU+Cis8ZTY2Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U2NykiLz48L2U2Nj4KKzxlNjc+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTY4KSIvPjwvZTY3PgorPGU2OD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNjkpIi8+PC9lNjg+Cis8ZTY5Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U3MCkiLz48L2U2OT4KKzxlNzA+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTcxKSIvPjwvZTcwPgorPGU3MT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNzIpIi8+PC9lNzE+Cis8ZTcyPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U3MykiLz48L2U3Mj4KKzxlNzM+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTc0KSIvPjwvZTczPgorPGU3ND48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNzUpIi8+PC9lNzQ+Cis8ZTc1Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U3NikiLz48L2U3NT4KKzxlNzY+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTc3KSIvPjwvZTc2PgorPGU3Nz48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lNzgpIi8+PC9lNzc+Cis8ZTc4Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U3OSkiLz48L2U3OD4KKzxlNzk+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTgwKSIvPjwvZTc5PgorPGU4MD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lODEpIi8+PC9lODA+Cis8ZTgxPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U4MikiLz48L2U4MT4KKzxlODI+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTgzKSIvPjwvZTgyPgorPGU4Mz48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lODQpIi8+PC9lODM+Cis8ZTg0Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U4NSkiLz48L2U4ND4KKzxlODU+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTg2KSIvPjwvZTg1PgorPGU4Nj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lODcpIi8+PC9lODY+Cis8ZTg3Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U4OCkiLz48L2U4Nz4KKzxlODg+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTg5KSIvPjwvZTg4PgorPGU4OT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lOTApIi8+PC9lODk+Cis8ZTkwPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U5MSkiLz48L2U5MD4KKzxlOTE+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTkyKSIvPjwvZTkxPgorPGU5Mj48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lOTMpIi8+PC9lOTI+Cis8ZTkzPjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U5NCkiLz48L2U5Mz4KKzxlOTQ+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTk1KSIvPjwvZTk0PgorPGU5NT48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lOTYpIi8+PC9lOTU+Cis8ZTk2Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2U5NykiLz48L2U5Nj4KKzxlOTc+PHhpOmluY2x1ZGUgeHBvaW50ZXI9Inhwb2ludGVyKC8vZTk4KSIvPjwvZTk3PgorPGU5OD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lOTkpIi8+PC9lOTg+Cis8ZTk5Pjx4aTppbmNsdWRlIHhwb2ludGVyPSJ4cG9pbnRlcigvL2UxMDApIi8+PC9lOTk+Cis8ZTEwMD48eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lMTAxKSIvPjwvZTEwMD4KKzxlMTAxLz4KKzwveD4KZGlmZiAtLWdpdCBhL3Rlc3QvWEluY2x1ZGUvZG9jcy9uczEueG1sIGIvdGVzdC9YSW5jbHVkZS93aXRob3V0LXJlYWRlci9uczEueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0L1hJbmNsdWRlL2RvY3MvbnMxLnhtbApyZW5hbWUgdG8gdGVzdC9YSW5jbHVkZS93aXRob3V0LXJlYWRlci9uczEueG1sCmRpZmYgLS1naXQgYS90ZXN0L1hQYXRoL2V4cHIvZnVuY3Rpb25zIGIvdGVzdC9YUGF0aC9leHByL2Z1bmN0aW9ucwppbmRleCAwMGI5NDYxLi42MDA4YTA3IDEwMDY0NAotLS0gYS90ZXN0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCisrKyBiL3Rlc3QvWFBhdGgvZXhwci9mdW5jdGlvbnMKQEAgLTMsNiArMyw3IEBACiBudW1iZXIoIjEuNSIpCiBudW1iZXIoJ2FiYycpCiAtbnVtYmVyKCdhYmMnKQorbnVtYmVyKCctJykKIGZsb29yKDAuMSkKIGZsb29yKC0wLjEpCiBmbG9vcigtMCkKZGlmZiAtLWdpdCBhL3Rlc3QvYm91bmRhcmllczEueG1sIGIvdGVzdC9ib3VuZGFyaWVzMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMDFjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvYm91bmRhcmllczEueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGQgWworICAgIDwhRU5USVRZIGEgIl0+Ij4KKyAgICA8IUVOVElUWSBiICddPic+CisgICAgPCEtLT4gXT4gLS0+CitdICAgID4KKzw/cGkgcDE/PgorPCEtLT4gYzEgLS0+Cis8ZCBhPSI+IiBiPSc+Jz4KK3RleHQmYTt0ZXh0Cis8IVtDREFUQVtjZGF0YV1dPgorPD9waSBwMj8+Cis8IS0tPiBjMiAtLT4KKzwvZD4KKzw/cGkgcDM/PgorPCEtLT4gYzMgLS0+CmRpZmYgLS1naXQgYS90ZXN0L2Vycm9ycy9hdHRyNS54bWwgYi90ZXN0L2Vycm9ycy9hdHRyNS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlODY0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZXJyb3JzL2F0dHI1LnhtbApAQCAtMCwwICsxLDMgQEAKKzxkIHhtbG5zPSJ1cm46Zm9vIj4KKyAgICA8YSBiPSIiIGI9IiIvPgorPC9kPgpkaWZmIC0tZ2l0IGEvdGVzdC9lcnJvcnMvYXR0cjYueG1sIGIvdGVzdC9lcnJvcnMvYXR0cjYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjczZDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2Vycm9ycy9hdHRyNi54bWwKQEAgLTAsMCArMSw1MiBAQAorPGRvYyB4bWxuczphPSJ1cm46YSIgeG1sbnM6Yj0idXJuOmIiIHhtbG5zOmM9InVybjpjIiB4bWxuczpkPSJ1cm46ZCI+Cis8ZSBiOmNpPSIiIGM6Zmg9IiIgZDphYj0iIiBhcT0iIiBjOmV3PSIiIGJ3PSIiIGFqPSIiIGE6ZXk9IiIgYzplaD0iIiBicT0iIiBiOmZjPSIiIGV0PSIiIGE6YW89IiIgYzpjYz0iIiBiOmFhPSIiIGE6ZWk9IiIgYTphej0iIiBlaj0iIiBiOmRpPSIiIGE6Y3c9IiIgYTpjaz0iIiBhOmJ1PSIiIGQ6YXY9IiIgYTpkaz0iIiBhOmVhPSIiIGM6Y2E9IiIgYm49IiIgYTpkYj0iIiBiOmViPSIiIGJ4PSIiIGQ6YmQ9IiIgYTpiZj0iIiBiOmV4PSIiIGFtPSIiIGQ6Zmc9IiIgZDpiaj0iIiBhOmRwPSIiIGI6ZG09IiIgZGQ9IiIgYTpkeD0iIiBhOmNqPSIiIGI6ZXM9IiIgYjpkZj0iIiBmZD0iIiBkOmFrPSIiIGI6ZXY9IiIgYzphYz0iIiBkOmRzPSIiIGQ6YnI9IiIgYjpkbD0iIiBhOmF0PSIiIGM6ZWQ9IiIgYTphZD0iIiBjZD0iIiBhOmZqPSIiIGQ6ZXE9IiIgZWU9IiIgYjpkej0iIiBjOmR1PSIiIGFmPSIiIGM6ZHY9IiIgYTpkaD0iIiBkOmF5PSIiIGI6ZmY9IiIgY2I9IiIgZDpjbj0iIiBkOmVtPSIiIGFlPSIiIGVvPSIiIGJrPSIiIGE6Y2Y9IiIgZHc9IiIgZDplbj0iIiBiZT0iIiBhaT0iIiBjOmJpPSIiIGI6Ym09IiIgY2U9IiIgZDphcz0iIiBjcj0iIiBkOmZlPSIiIGRyPSIiIGM6YWc9IiIgYzpkbj0iIiBjOmNnPSIiIGQ6ZXc9IiIgYzplaz0iIiBiYT0iIiBiOmJsPSIiIGI6YXg9IiIgYTpidj0iIiBmbj0iIiBiOmFyPSIiIGQ6ZXo9IiIgZWc9IiIgYTphcD0iIiBkOmZsPSIiIGFuPSIiIGE6ZHk9IiIgYmI9IiIgYTpjdD0iIiBkdD0iIiBjdT0iIiBiOmVmPSIiIGM6ZmI9IiIgYjpkZz0iIiBjOmF1PSIiIGQ6YmM9IiIgYzplbD0iIiBiOmN6PSIiIGE6YWw9IiIgZDpmaT0iIiBhOmRjPSIiIGQ6Ymc9IiIgZDpkZT0iIiBjeD0iIiBkbz0iIiBiOmJoPSIiIGQ6ZHE9IiIgY2g9IiIgYjpkYT0iIiBhOmJ6PSIiIGI6Y3M9IiIgYzpjdj0iIiBmbT0iIiBjOmJvPSIiIGI6Y2w9IiIgYzpicz0iIiBhOmNwPSIiIGF3PSIiIGM6ZmE9IiIgYTpjdj0iIiBkOmNtPSIiIGRqPSIiIGVwPSIiIGVjPSIiIGJ0PSIiIGJ5PSIiIGNvPSIiIGM6YnA9IiIgYTpjeT0iIiBhaD0iIiBjOmZrPSIiIGQ6Y3E9IiIgYjplcj0iIiBhOmV1PSIiLz4KKzxlIGQ6YmY9IiIgYXA9IiIgYjpjdj0iIiBhbj0iIiBldT0iIiBhOmJjPSIiIGE6ZmQ9IiIgYzphdz0iIiBiOmF1PSIiIGVzPSIiIGE6ZWI9IiIgYjpmbT0iIiBiOmVnPSIiIGFsPSIiIGE6YXY9IiIgYzpibT0iIiBkOmZiPSIiIGQ6Zmw9IiIgZms9IiIgYTplaj0iIiBkbj0iIiBjOmFhPSIiIGRqPSIiIGJqPSIiIGE6ZW89IiIgZDpibz0iIiBiOmRjPSIiIGI6YXM9IiIgYTplZT0iIiBkej0iIiBjOmJ4PSIiIGNpPSIiIGI6YnE9IiIgY3U9IiIgYjpjZz0iIiBkOmVoPSIiIGM6YXg9IiIgZDphaT0iIiBjOmRtPSIiIGE6ZGQ9IiIgYTpmbj0iIiBkOmJ0PSIiIGM6Ymw9IiIgYzpkYj0iIiBhOmJzPSIiIGM6YXI9IiIgYTphYj0iIiBiOmJoPSIiIGE6ZXQ9IiIgYTpicD0iIiBlej0iIiBiOmNwPSIiIGRwPSIiIGNiPSIiIGFlPSIiIGJlPSIiIGQ6ZXg9IiIgYTpjeT0iIiBhOmR5PSIiIGVjPSIiIGQ6YWo9IiIgZDpkaT0iIiBkOmNtPSIiIGM6Y3c9IiIgYzplZD0iIiBhOmNyPSIiIGE6Y249IiIgYjpldz0iIiBjOmJnPSIiIGE6ZHQ9IiIgYTpjYT0iIiBjOmR5PSIiIGQ6ZHY9IiIgZGU9IiIgYjpiaz0iIiBiOmZmPSIiIGNmPSIiIGQ6YWc9IiIgY2o9IiIgYzphZD0iIiBhOmR1PSIiIGE6ZWE9IiIgYTpiZD0iIiBhOmVsPSIiIGQ6ZGc9IiIgYTpheT0iIiBlcj0iIiBhdD0iIiBhOmZqPSIiIGN0PSIiIGE6Y3g9IiIgY2w9IiIgYnY9IiIgYTpieT0iIiBlcT0iIiBkbz0iIiBjOmNjPSIiIGE6ZHg9IiIgYWY9IiIgZHI9IiIgZWs9IiIgYzpiYT0iIiBlaT0iIiBkOmN6PSIiIGE6Zmk9IiIgYTphcT0iIiBhOmV2PSIiIGRzPSIiIGZoPSIiIGM6YWs9IiIgYjpjaD0iIiBjOmNzPSIiIGF6PSIiIGM6ZWY9IiIgYjpmZT0iIiBmYz0iIiBidT0iIiBhOmRxPSIiIGI6ZGY9IiIgZDpicj0iIiBiOmR3PSIiIGFvPSIiIGQ6ZW49IiIgYjpjbz0iIiBiOmRhPSIiIGZnPSIiIGE6ZGw9IiIgY2s9IiIgYTpkaz0iIiBkOmRoPSIiIGQ6YWM9IiIgZDpiej0iIiBiOmJuPSIiIGQ6ZmE9IiIgYTpiaT0iIiBjOmVwPSIiIGQ6ZW09IiIgZDpidz0iIiBiOmJiPSIiIGI6ZXk9IiIgYzpjZD0iIiBhOmNlPSIiIGI6YWg9IiIgYzphbT0iIiBjcT0iIiBjOmRiPSIiLz4KKzxlIGI6ZGI9IiIgYzplbz0iIiBicT0iIiBkdD0iIiBhOmRkPSIiIGI6Y2c9IiIgYjplaT0iIiBiOmRpPSIiIGNwPSIiIGM6YXM9IiIgYzpiYz0iIiBhOmRlPSIiIGV6PSIiIGNoPSIiIGM6YnY9IiIgYjpjaz0iIiBkOmVwPSIiIGQ6ZWc9IiIgYWY9IiIgYjpkaj0iIiBmZz0iIiBjOmZsPSIiIGE6Y3k9IiIgYjpjbT0iIiBheD0iIiBjOmFtPSIiIGE6Zmk9IiIgYzplaD0iIiBkOmJ1PSIiIGN6PSIiIGI6YWg9IiIgYm09IiIgYjpicj0iIiBlZD0iIiBkOmJ0PSIiIGE6ZmY9IiIgYTpjbj0iIiBiOmNjPSIiIGE6Y2k9IiIgYzplcj0iIiBkbD0iIiBkOmFxPSIiIGFvPSIiIGQ6ZHU9IiIgZDphdD0iIiBjOmF5PSIiIGQ6Y2I9IiIgYjplYj0iIiBkOmRtPSIiIGFsPSIiIGE6Yms9IiIgYjpjbD0iIiBkOmRrPSIiIGM6YmU9IiIgYTpkZj0iIiBiOmZrPSIiIGE6Yno9IiIgY2o9IiIgYW49IiIgYWI9IiIgYjpmYj0iIiBhdT0iIiBjZj0iIiBkOmFlPSIiIGN4PSIiIGQ6ZXM9IiIgYnk9IiIgZDphYz0iIiBhOmR5PSIiIGRzPSIiIGR2PSIiIGQ6ZHc9IiIgYjplZT0iIiBjOmZoPSIiIGE6ZHg9IiIgYXI9IiIgY3Q9IiIgYTpkcD0iIiBlYT0iIiBjOmJzPSIiIGI6Y3c9IiIgYjpldz0iIiBjOmJkPSIiIGQ6YXc9IiIgYjpicD0iIiBiOmR6PSIiIGE6ZmM9IiIgZDpmbT0iIiBjOmNlPSIiIGE6YWQ9IiIgYjpkYz0iIiBhOmRxPSIiIGE6YmY9IiIgY3E9IiIgYXA9IiIgZG49IiIgYzpjZD0iIiBkOmJiPSIiIGNhPSIiIGE6YWE9IiIgYzphaj0iIiBiOmV5PSIiIGI6ZHI9IiIgZDplbT0iIiBiOmN1PSIiIGVjPSIiIGI6Ymg9IiIgZDphaT0iIiBkOmRvPSIiIGE6Zmo9IiIgYzpmYT0iIiBkOmV4PSIiIGE6ZXQ9IiIgYzplcT0iIiBlbj0iIiBjcz0iIiBkOmFnPSIiIGF2PSIiIGE6ZXY9IiIgZDpmbj0iIiBjOmJ4PSIiIGI6ZXU9IiIgZDplbD0iIiBiOmJ3PSIiIGM6ZWo9IiIgYTphej0iIiBjOmJvPSIiIGM6ZWs9IiIgYTpiaT0iIiBhOmNsPSIiIGM6Y3I9IiIgYzpkZz0iIiBiZz0iIiBhaz0iIiBjbz0iIiBhOmJsPSIiIGM6YmE9IiIgYjpiaj0iIiBhOmJuPSIiIGM6ZmQ9IiIgYzpmZT0iIiBhOmRoPSIiIGI6ZWY9IiIgZDpkbz0iIiBiOmRhPSIiIGE6Y3Y9IiIvPgorPGUgYzpmZD0iIiBibz0iIiBjOmVwPSIiIGM6Y3k9IiIgZmo9IiIgYzpiZz0iIiBiOmNpPSIiIGQ6ZGI9IiIgYTphaT0iIiBkOmFmPSIiIGE6ZXo9IiIgYjpmaT0iIiBlcT0iIiBkOmJ2PSIiIGQ6YWM9IiIgYno9IiIgZDpmZT0iIiBhOmZtPSIiIGN1PSIiIGVqPSIiIGE6YWc9IiIgYzphdT0iIiBkOmRuPSIiIGVyPSIiIGQ6YWw9IiIgYjpheD0iIiBjOmFkPSIiIGQ6YWE9IiIgYmE9IiIgYjpldz0iIiBiOmVmPSIiIGQ6Y2c9IiIgYTphcD0iIiBjOmZnPSIiIGR0PSIiIGQ6YXk9IiIgYjpjbD0iIiBlaT0iIiBkOmRnPSIiIGRwPSIiIGI6Yng9IiIgZHg9IiIgYmk9IiIgY3o9IiIgYzpibT0iIiBmbj0iIiBmbD0iIiBkOmRzPSIiIGE6ZXk9IiIgYjphYj0iIiBkbz0iIiBkOmJzPSIiIGI6Y2s9IiIgZms9IiIgYjphdj0iIiBkOmFoPSIiIGE6Y249IiIgYjpkaT0iIiBjOmR1PSIiIGM6ZmY9IiIgZDpjdD0iIiBkOmNjPSIiIGI6Ymw9IiIgYXI9IiIgY2I9IiIgY2Q9IiIgYjphbz0iIiBiZT0iIiBjOmFlPSIiIGQ6Y2U9IiIgYTpjcz0iIiBhOmViPSIiIGI6YnI9IiIgYzpiaz0iIiBhOmJjPSIiIGQ6YXM9IiIgYTpmaD0iIiBiOmRlPSIiIGNyPSIiIGQ6YW09IiIgZDpjdz0iIiBhcT0iIiBhOmVkPSIiIGM6ZWw9IiIgYjpkbD0iIiBiZj0iIiBhbj0iIiBjdj0iIiBicT0iIiBkcj0iIiBjOmJkPSIiIGQ6Y209IiIgZDpldT0iIiBmYT0iIiBhej0iIiBiOmN4PSIiIGQ6ZHk9IiIgYjpmZT0iIiBhaj0iIiBjOmRrPSIiIGM6YW49IiIgYTpibj0iIiBhOmNoPSIiIGM6Ynk9IiIgYjpkdz0iIiBkOmNqPSIiIGM6ZXY9IiIgZDpkej0iIiBhOmVzPSIiIGI6ZWg9IiIgYTpldD0iIiBjOmNwPSIiIGM6ZXg9IiIgYjphdD0iIiBhOmRjPSIiIGRkPSIiIGE6YmI9IiIgZGg9IiIgZDpidD0iIiBkOmNmPSIiIGI6ZG09IiIgYzpidz0iIiBjOmJ1PSIiIGQ6ZmI9IiIgYTpkYT0iIiBjYT0iIiBlbj0iIiBhOmJwPSIiIGQ6ZWE9IiIgYTpkdj0iIiBjcT0iIiBkOmVlPSIiIGJoPSIiIGE6ZW89IiIgYjpiaj0iIiBkOmF3PSIiIGQ6ZWc9IiIgYjplYz0iIiBkZj0iIiBhOmRxPSIiIGE6ZW09IiIgZmM9IiIgYTpjbz0iIiBkOmFrPSIiIGM6ZWs9IiIgZGo9IiIvPgorPGUgZmk9IiIgZDpiZT0iIiBjOmV6PSIiIGE6Ymw9IiIgZDpkZj0iIiBhOmZqPSIiIGQ6Y2Y9IiIgYjpleT0iIiBlYT0iIiBkOmJrPSIiIGI6YW49IiIgYjpjZz0iIiBjOmZhPSIiIGI6ZGc9IiIgYjpkbz0iIiBhOmNsPSIiIGQ6YXg9IiIgZDpjbz0iIiBhOmRzPSIiIGM6ZGw9IiIgYjplcj0iIiBiOmR2PSIiIGQ6ZXY9IiIgZHo9IiIgYTpjYj0iIiBiOmRoPSIiIGQ6Ym09IiIgYzphZz0iIiBiOmNzPSIiIGQ6YWw9IiIgYTpkYT0iIiBkOmZuPSIiIGI6ZXM9IiIgYmg9IiIgZDpjcj0iIiBjOmZkPSIiIGM6YXo9IiIgYzpicz0iIiBlcD0iIiBhOmN1PSIiIGI6Ym49IiIgYjpieD0iIiBjej0iIiBldD0iIiBhOmRiPSIiIGI6Zmg9IiIgYXE9IiIgYWo9IiIgZDphcD0iIiBhOmVnPSIiIGQ6ZHA9IiIgYTpmbT0iIiBhOmR3PSIiIGQ6Y2U9IiIgYjpkZD0iIiBkcz0iIiBkOmZsPSIiIGM6YXY9IiIgYWQ9IiIgYzpkaz0iIiBhOmRyPSIiIGM6YnE9IiIgZDpjYT0iIiBhOmFhPSIiIGM6Y249IiIgZDpmZT0iIiBjOmFrPSIiIGQ6Ymc9IiIgZDplaz0iIiBiOmV3PSIiIGI6ZW09IiIgYjpjej0iIiBlcT0iIiBlZj0iIiBiOmJiPSIiIGQ6Zmc9IiIgYzpicD0iIiBiOmVuPSIiIGI6YWM9IiIgYzplbD0iIiBiOmJjPSIiIGE6ZG49IiIgZGU9IiIgYjplYj0iIiBjOmV4PSIiIGM6YmY9IiIgYXM9IiIgZDpmZj0iIiBhOmFoPSIiIGE6YWk9IiIgYXI9IiIgYjpkbT0iIiBkOmJyPSIiIGM6YW09IiIgZDphYj0iIiBidT0iIiBkOmRpPSIiIGM6Y2M9IiIgYTpidj0iIiBjeD0iIiBiOmR5PSIiIGM6ZWg9IiIgYnQ9IiIgY2Q9IiIgYTpkdT0iIiBkaj0iIiBkOmJkPSIiIGF1PSIiIGM6YW89IiIgYzpkeD0iIiBlZT0iIiBhOmZjPSIiIGQ6ZWo9IiIgZHE9IiIgYzpkYz0iIiBjOmV1PSIiIGQ6Ym89IiIgY2g9IiIgZmI9IiIgYzpjeT0iIiBhZj0iIiBiOmNpPSIiIGF3PSIiIGVpPSIiIGFlPSIiIGQ6Yno9IiIgYjpiYT0iIiBhOmR0PSIiIGQ6Ymk9IiIgZDplYz0iIiBieT0iIiBjbT0iIiBhOmVkPSIiIGI6Y3A9IiIgZms9IiIgZDpjdj0iIiBjOmJ3PSIiIGNrPSIiIGQ6Y3Q9IiIgYTpjdz0iIiBiOmF0PSIiIGF5PSIiIGI6Y3E9IiIgY2o9IiIgYjplbz0iIiBkOmJqPSIiLz4KKzxlIGRxPSIiIGI6ZW49IiIgYTpjbj0iIiBjOmVoPSIiIGN6PSIiIGE6ZXU9IiIgZG09IiIgZDpldD0iIiBiOmV4PSIiIGE6YXU9IiIgYTpmaj0iIiBiOmRrPSIiIGNxPSIiIGI6ZGc9IiIgZDpjZD0iIiBjOmJhPSIiIGQ6YWU9IiIgZHI9IiIgYTpicD0iIiBjOmNtPSIiIGQ6Y2o9IiIgYWQ9IiIgYTpjbD0iIiBjOmZjPSIiIGE6ZmI9IiIgYTplYz0iIiBjOmVqPSIiIGE6YWY9IiIgYTpjYT0iIiBhOmJuPSIiIGRmPSIiIGFoPSIiIGE6ZW09IiIgYTpkZT0iIiBjOmN3PSIiIGM6ZmY9IiIgYzpkdD0iIiBhaz0iIiBiOmJyPSIiIGI6YXE9IiIgYjplYj0iIiBkZD0iIiBiOmJiPSIiIGR6PSIiIGQ6YWE9IiIgYXY9IiIgYTplcz0iIiBjOmJrPSIiIGE6YW89IiIgYTphbD0iIiBhOmZrPSIiIGM6ZGg9IiIgYXQ9IiIgZHA9IiIgYjpieT0iIiBhOmVsPSIiIGQ6ZXE9IiIgZDpibz0iIiBjaT0iIiBkYj0iIiBjOmN0PSIiIGM6ZHU9IiIgYjpjcj0iIiBiaj0iIiBkOmJ6PSIiIGM6Ymk9IiIgZDpmaD0iIiBmbD0iIiBhOmJtPSIiIGM6ZWc9IiIgZG49IiIgYWM9IiIgYTpiZT0iIiBjOmRsPSIiIGQ6Zm49IiIgZGo9IiIgZDpicj0iIiBjOmNrPSIiIGI6Y2I9IiIgY3M9IiIgYzpicz0iIiBjdj0iIiBiOmNmPSIiIGE6YnE9IiIgYTpleT0iIiBiOmN1PSIiIGM6YWc9IiIgZm09IiIgZXo9IiIgYjpmaT0iIiBjOmFuPSIiIGRvPSIiIGM6Ymc9IiIgYWk9IiIgYzpiaD0iIiBkOmVpPSIiIGQ6ZXA9IiIgYTplbz0iIiBhOmR4PSIiIGM6Y2M9IiIgYzpjZz0iIiBjcD0iIiBjOmV3PSIiIGQ6YXg9IiIgYjpidD0iIiBjOmZkPSIiIGFzPSIiIGI6YmY9IiIgZDpjbz0iIiBhej0iIiBjOmRzPSIiIGQ6YW09IiIgYjpldj0iIiBhOmVkPSIiIGQ6YWo9IiIgYTplYT0iIiBkOmJ4PSIiIGQ6ZHY9IiIgYjphcj0iIiBhOmJ3PSIiIGQ6ZmE9IiIgYjpheT0iIiBidT0iIiBjOmNoPSIiIGQ6Ymw9IiIgZDpiYz0iIiBidT0iIiBkOmJ2PSIiIGRpPSIiIGI6YXc9IiIgZHk9IiIgYTpkYT0iIiBhYj0iIiBlZj0iIiBiZD0iIiBlcj0iIiBiOmZlPSIiIGRjPSIiIGQ6Y3g9IiIgZDpjZT0iIiBiOmZnPSIiIGQ6ZHc9IiIgZDpjeT0iIiBhcD0iIiBhOmVrPSIiIGM6ZWU9IiIvPgorPGUgYzpkZj0iIiBjaD0iIiBiOmJxPSIiIGQ6ZmY9IiIgYjplZD0iIiBhYT0iIiBhOmRoPSIiIGQ6YnA9IiIgYzpkeD0iIiBjOmFlPSIiIGQ6YXk9IiIgYTpmYT0iIiBkOmJ3PSIiIGQ6Ym09IiIgZHI9IiIgYTphbz0iIiBkOmNuPSIiIGV3PSIiIGI6Ymc9IiIgY2s9IiIgZDpiYT0iIiBiOmRsPSIiIGVtPSIiIGM6Y3Q9IiIgYTplcz0iIiBhOmVjPSIiIGI6Y289IiIgYjpjdz0iIiBiOmF6PSIiIGM6ZGo9IiIgYjpibz0iIiBhOmZlPSIiIGI6Yms9IiIgZDpkZD0iIiBleD0iIiBiOmNhPSIiIGQ6Ymo9IiIgYTpjbT0iIiBiOmFiPSIiIGM6ZGc9IiIgYjpjaT0iIiBiOmRwPSIiIGI6ZG89IiIgY3I9IiIgYzplbz0iIiBiOmJyPSIiIGE6YXM9IiIgY2M9IiIgYmk9IiIgYzpibD0iIiBmbT0iIiBjOmFlPSIiIGM6Y2I9IiIgZG09IiIgYjpjZT0iIiBhOmN2PSIiIGE6YWM9IiIgY3o9IiIgYTphZj0iIiBkOmRjPSIiIGM6ZWY9IiIgYTpkeT0iIiBjOmN5PSIiIGF3PSIiIGQ6ZXE9IiIgYTphdT0iIiBiOmJ1PSIiIGQ6YnM9IiIgZWs9IiIgYTpkYj0iIiBjOmN1PSIiIGI6Ynk9IiIgZmc9IiIgYTpjZz0iIiBjOmNwPSIiIGI6ZHQ9IiIgZDpibj0iIiBjOmZqPSIiIGI6ZXQ9IiIgYjphcj0iIiBjOmN4PSIiIGI6YWo9IiIgZWE9IiIgZWc9IiIgZDphbD0iIiBmaD0iIiBmaz0iIiBhOmVpPSIiIGVqPSIiIGF2PSIiIGVyPSIiIGE6ZG49IiIgYTpmYj0iIiBiOmF0PSIiIGM6YmU9IiIgZmQ9IiIgYjpidD0iIiBkOmFkPSIiIGI6Y2Q9IiIgYzpmbD0iIiBhbT0iIiBhOmVoPSIiIGM6ZGk9IiIgZDpheD0iIiBhcD0iIiBkOmJjPSIiIGR1PSIiIGE6Y2o9IiIgZDplYj0iIiBhOmV6PSIiIGQ6Zm49IiIgYjpjcz0iIiBkOmV5PSIiIGI6YWg9IiIgYjphaT0iIiBiOmNmPSIiIGM6ZGU9IiIgYjpldT0iIiBkOmRhPSIiIGE6ZXA9IiIgYjpiYj0iIiBhOmFrPSIiIGI6ZWU9IiIgYjplbD0iIiBjOmJ6PSIiIGQ6ZHM9IiIgYjphbj0iIiBhOmR3PSIiIGE6YWc9IiIgYjpldj0iIiBmaT0iIiBiOmFxPSIiIGI6ZHE9IiIgZW49IiIgYjpkdj0iIiBjOmRhPSIiIGI6ZGs9IiIgYTpjbD0iIiBkOmJkPSIiIGQ6Ymg9IiIgYnY9IiIgYzpmYz0iIiBkOmJ4PSIiIGQ6YmY9IiIgZDpjcT0iIiBkej0iIi8+Cis8ZSBjOmN5PSIiIGM6YXk9IiIgYWk9IiIgZGE9IiIgYzpkZj0iIiBkOmNpPSIiIGFtPSIiIGJjPSIiIGJkPSIiIGM6ZWc9IiIgY3g9IiIgYjpmZj0iIiBiOmFjPSIiIGI6ZXc9IiIgYmE9IiIgZGI9IiIgZmU9IiIgYjplcT0iIiBiOmNjPSIiIGN3PSIiIGM6ZHg9IiIgYjplYj0iIiBlZD0iIiBhOmJqPSIiIGE6YWU9IiIgYW89IiIgYTpjaD0iIiBhOmZsPSIiIGE6Y3E9IiIgYTpmYj0iIiBhOmJ6PSIiIGI6ZWs9IiIgYjphbD0iIiBhYT0iIiBiOmJ2PSIiIGQ6Ymg9IiIgYzpmbj0iIiBjOmFuPSIiIGI6Y2w9IiIgZDplaD0iIiBmbT0iIiBiOmV0PSIiIGM6ZHA9IiIgYTpleT0iIiBiOmN0PSIiIGM6ZGc9IiIgY249IiIgYXU9IiIgYTpmaT0iIiBiOmR6PSIiIGE6ZXY9IiIgYWg9IiIgZXU9IiIgYzpiYj0iIiBjYj0iIiBkOmN2PSIiIGI6ZHY9IiIgYTpjaz0iIiBjOmVvPSIiIGJmPSIiIGI6ZG89IiIgYWo9IiIgYjpkdz0iIiBkOmZjPSIiIGE6ZGo9IiIgZDplYT0iIiBkOmJuPSIiIGM6YWY9IiIgYzphbz0iIiBjOmRuPSIiIGI6YXg9IiIgYTpibz0iIiBjOmNvPSIiIGI6ZGQ9IiIgYjpibD0iIiBkOmJrPSIiIGQ6YWQ9IiIgZHU9IiIgZGg9IiIgYnc9IiIgYXE9IiIgYjpkaz0iIiBjOmN6PSIiIGM6Zmg9IiIgYnU9IiIgYjpkaT0iIiBiOmNzPSIiIGF6PSIiIGI6ZWk9IiIgYTphdD0iIiBhOmFrPSIiIGI6ZHM9IiIgZDphdz0iIiBjOmN1PSIiIGI6YmU9IiIgYzpiaT0iIiBiOmV4PSIiIGQ6ZGU9IiIgZDphcj0iIiBhOmJ5PSIiIGQ6Ymc9IiIgZDpmZD0iIiBiOmFnPSIiIGQ6ZHI9IiIgYjpmYT0iIiBkOmJ0PSIiIGQ6YWI9IiIgYzplaj0iIiBlcz0iIiBkOmJ4PSIiIGI6ZXU9IiIgZDpjaj0iIiBjOmFzPSIiIGE6Y3A9IiIgZDpjcj0iIiBjYT0iIiBicT0iIiBiOmVlPSIiIGJwPSIiIGE6YXY9IiIgYzphcD0iIiBjOmNkPSIiIGI6ZW09IiIgYjpicz0iIiBiOmRxPSIiIGE6Zmo9IiIgYzplYz0iIiBjOmRsPSIiIGI6Y209IiIgZG09IiIgZXo9IiIgZWY9IiIgZHQ9IiIgYzpjZj0iIiBiOmZnPSIiIGM6ZHk9IiIgYnI9IiIgYTpmaz0iIiBlcj0iIiBkYz0iIiBiOmJtPSIiIGQ6Y2c9IiIgZXA9IiIgZWw9IiIgYTpjZT0iIiBhOmVuPSIiLz4KKzxlIGQ6Ym89IiIgYTpmaT0iIiBiOmZqPSIiIGI6ZHI9IiIgYTpkeT0iIiBhOmRiPSIiIGI6ZHA9IiIgZDplaT0iIiBmYT0iIiBkOmFjPSIiIGM6YXA9IiIgZDpicz0iIiBjOmFoPSIiIGM6YXk9IiIgYjpidD0iIiBjOmRlPSIiIGE6Ync9IiIgYjpjcj0iIiBjOmFzPSIiIGE6Y3o9IiIgZDpkbT0iIiBkOmVsPSIiIGE6YW09IiIgZHU9IiIgZGc9IiIgZXE9IiIgYXY9IiIgYjpheD0iIiBhOmVhPSIiIGQ6Zm09IiIgYzphaj0iIiBlaz0iIiBiOmV5PSIiIGI6Y3k9IiIgYTplbj0iIiBhOmRqPSIiIGFrPSIiIGQ6ZWc9IiIgYjpmZT0iIiBkOmRxPSIiIGI6Ym09IiIgYmI9IiIgYWw9IiIgYTpjdT0iIiBiOmV6PSIiIGVyPSIiIGM6Y3o9IiIgZDpmaz0iIiBiOmR6PSIiIGM6Ymw9IiIgYTpiaz0iIiBhOmF1PSIiIGM6Ymk9IiIgYzpmZD0iIiBhOmJuPSIiIGQ6Y2I9IiIgZDpiaj0iIiBjOmF3PSIiIGQ6YnA9IiIgYjpiYT0iIiBiOmVoPSIiIGQ6Y2k9IiIgZXA9IiIgYjpjaz0iIiBjZT0iIiBhcj0iIiBhOmNtPSIiIGQ6Y2E9IiIgYjphYj0iIiBiOmJmPSIiIGR2PSIiIGQ6ZGk9IiIgYjpkbz0iIiBkOmJ1PSIiIGRsPSIiIGI6ZXY9IiIgZDpjbD0iIiBjaD0iIiBkaD0iIiBkZD0iIiBhOmNxPSIiIGM6Y2Q9IiIgYjpmbj0iIiBkOmJ4PSIiIGM6YWE9IiIgYjpiaD0iIiBiOmRjPSIiIGE6Y2o9IiIgYTpkdz0iIiBiOmV1PSIiIGV3PSIiIGE6YXQ9IiIgYzpjZz0iIiBhaT0iIiBiOmRhPSIiIGQ6ZHM9IiIgYjpmYz0iIiBhOmZoPSIiIGI6ZXQ9IiIgYjphZT0iIiBjcD0iIiBhOmNvPSIiIGE6ZWY9IiIgYTplbT0iIiBkOmJlPSIiIGE6YnI9IiIgYjpiZz0iIiBjOmV4PSIiIGQ6Y249IiIgYTpjeD0iIiBhOmFkPSIiIGI6ZWo9IiIgYzpjYz0iIiBkOmRrPSIiIGR0PSIiIGNzPSIiIGQ6Y3Y9IiIgYno9IiIgYjplYz0iIiBkOmN3PSIiIGNmPSIiIGJ2PSIiIGE6ZWI9IiIgYnk9IiIgYjplZD0iIiBkOmFmPSIiIGE6YmM9IiIgYjpmZz0iIiBjOmF6PSIiIGI6Zmw9IiIgYzphZz0iIiBiOmZmPSIiIGE6ZW89IiIgYzpkZj0iIiBhOmJxPSIiIGI6ZmI9IiIgYzphcT0iIiBkOmRuPSIiIGQ6YXo9IiIgYjphbz0iIiBiOmFuPSIiIGM6ZHg9IiIgYTpjdD0iIiBlcz0iIiBiZD0iIiBjOmVlPSIiLz4KKzxlIGQ6Yng9IiIgYTpmZT0iIiBjeD0iIiBjZD0iIiBhOmFwPSIiIGM6YXY9IiIgZG49IiIgYjplcz0iIiBkOmFsPSIiIGE6Yno9IiIgYTpmZD0iIiBiOmNuPSIiIGM6ZG09IiIgYjplaD0iIiBkOmNlPSIiIGE6ZGE9IiIgZGI9IiIgYm49IiIgZG89IiIgZWM9IiIgYzpkeD0iIiBjOmN2PSIiIGM6ZWc9IiIgZDphdD0iIiBhOmRzPSIiIGF1PSIiIGI6ZGM9IiIgYzplaj0iIiBkOmRmPSIiIGM6YW89IiIgYTpibD0iIiBhcj0iIiBiOmFpPSIiIGI6ZXo9IiIgYTpkaT0iIiBhZD0iIiBjOmV1PSIiIGJrPSIiIGM6ZHQ9IiIgYnM9IiIgYTpjeT0iIiBmYT0iIiBiOmN1PSIiIGE6Zmk9IiIgYjpjbz0iIiBkOmNoPSIiIGQ6Y2Y9IiIgYTpkaj0iIiBiOmRnPSIiIGI6ZHY9IiIgYjpmbD0iIiBhbT0iIiBiOmFhPSIiIGJqPSIiIGM6Zm09IiIgZDpjej0iIiBiOmVsPSIiIGQ6ZGs9IiIgYjpidz0iIiBkOmNwPSIiIGQ6ZGg9IiIgYjpldD0iIiBjOmJtPSIiIGV2PSIiIGE6Ym89IiIgYTpjcz0iIiBiOmR3PSIiIGQ6ZXA9IiIgZDpiZj0iIiBhOmVmPSIiIGVxPSIiIGNiPSIiIGI6Y2c9IiIgYjpjdz0iIiBhbj0iIiBkOmV4PSIiIGN1PSIiIGJhPSIiIGE6YnU9IiIgY2s9IiIgYTpmbj0iIiBhOmVrPSIiIGE6YmU9IiIgYjpjaT0iIiBjOmFrPSIiIGM6YWc9IiIgYWU9IiIgYzpkZT0iIiBkOmJnPSIiIGNqPSIiIGE6Y2M9IiIgZDpkbD0iIiBjOmRxPSIiIGZmPSIiIGE6YmM9IiIgYzpmaD0iIiBkcj0iIiBkOmF6PSIiIGM6YXk9IiIgYzpjcj0iIiBhOmVhPSIiIGFoPSIiIGQ6Ymk9IiIgZXc9IiIgYTpjbD0iIiBkOmJyPSIiIGQ6YmI9IiIgZW89IiIgZDpkZD0iIiBmZz0iIiBiOmZqPSIiIGZrPSIiIGI6YXg9IiIgYnE9IiIgZmI9IiIgYTplcj0iIiBlZT0iIiBiOmFxPSIiIGI6Ymg9IiIgYTpieT0iIiBhaj0iIiBleT0iIiBkOmR1PSIiIGM6YXM9IiIgZHo9IiIgYjpidj0iIiBkeT0iIiBicD0iIiBiOmJkPSIiIGFjPSIiIGJ0PSIiIGM6ZHA9IiIgYjpjYT0iIiBjOmVpPSIiIGI6Y3Q9IiIgYWY9IiIgZWQ9IiIgYjplbT0iIiBhOmNxPSIiIGI6ZW49IiIgYzplYj0iIiBhYj0iIiBkOmZjPSIiIGM6ZW89IiIgYTpjbT0iIiBhdz0iIi8+Cis8ZSBjbT0iIiBkOmFxPSIiIGE6ZHE9IiIgY2g9IiIgYzpmZD0iIiBkOmZmPSIiIGI6Y2U9IiIgYTpjaj0iIiBiOmNvPSIiIGE6Y3M9IiIgYTpibT0iIiBkOmNnPSIiIGM6YXY9IiIgZXg9IiIgYXk9IiIgYjpjdT0iIiBhOmZjPSIiIGI6Yno9IiIgZDpkdT0iIiBjOmRjPSIiIGI6YmQ9IiIgYTplZj0iIiBlYz0iIiBiOmV6PSIiIGN3PSIiIGM6ZHk9IiIgYTpkdz0iIiBjOmVqPSIiIGI6ZXE9IiIgZXU9IiIgZDplbz0iIiBkOmZlPSIiIGM6ZWc9IiIgZDpkej0iIiBjOmFvPSIiIGI6ZHA9IiIgYzpiaT0iIiBjOmJjPSIiIGE6YnQ9IiIgYjpjcT0iIiBhOmVwPSIiIGM6Y2Y9IiIgZDpibD0iIiBkOmFsPSIiIGI6Ync9IiIgYTpkbz0iIiBkOmF6PSIiIGE6Y2M9IiIgYzpiaz0iIiBjOmVlPSIiIGRhPSIiIGQ6YXg9IiIgY2I9IiIgY249IiIgYzpkZT0iIiBkYj0iIiBhOmNpPSIiIGE6ZHQ9IiIgZDpheT0iIiBhbj0iIiBjOmZoPSIiIGM6ZmI9IiIgYTpkZz0iIiBiOmZpPSIiIGM6Zm49IiIgYzpmaz0iIiBiOmN6PSIiIGVhPSIiIGM6ZWg9IiIgZm09IiIgZG09IiIgYzpjaz0iIiBhOmFzPSIiIGI6ZGg9IiIgZDpmbD0iIiBjOmJzPSIiIGE6YXU9IiIgZDpidT0iIiBkOmN4PSIiIGM6ZWw9IiIgY2Q9IiIgZDplZD0iIiBiOmFrPSIiIGQ6ZXk9IiIgYjpicT0iIiBjOmFtPSIiIGFkPSIiIGFpPSIiIGRmPSIiIGM6YWg9IiIgYjphcj0iIiBiOmNwPSIiIGI6YmI9IiIgYm49IiIgYjpieD0iIiBidj0iIiBiZz0iIiBhaj0iIiBiOmJoPSIiIGE6Zmc9IiIgZHI9IiIgZDplaz0iIiBhOmJwPSIiIGQ6ZHg9IiIgYzpkaj0iIiBjOmVyPSIiIGM6YWM9IiIgYjpldD0iIiBhOmRzPSIiIGN5PSIiIGI6ZGk9IiIgYTpmaj0iIiBieT0iIiBiOmRuPSIiIGZhPSIiIGM6ZWk9IiIgYjplcz0iIiBhdD0iIiBldz0iIiBjOmRkPSIiIGV2PSIiIGQ6ZGs9IiIgZDpibz0iIiBjdj0iIiBjOmVtPSIiIGE6YWE9IiIgYXA9IiIgZHY9IiIgZDplYj0iIiBkOmJqPSIiIGI6Y3Q9IiIgYmE9IiIgYnI9IiIgYWI9IiIgYzphZj0iIiBkOmNsPSIiIGI6YmU9IiIgYjpkbD0iIiBkOmNhPSIiIGM6YXc9IiIgYTpiZj0iIiBjOmFnPSIiIGNyPSIiIGE6ZWQ9IiIgZDplbj0iIiBkOmFlPSIiLz4KKzxlIGRxPSIiIGJsPSIiIGI6ZG89IiIgYzpkeD0iIiBkOmRpPSIiIGFxPSIiIGM6ZWE9IiIgYzplcz0iIiBjOmR5PSIiIGE6YXU9IiIgYjpkdj0iIiBiOmRlPSIiIGV4PSIiIGV3PSIiIGM6YmQ9IiIgYTpiaD0iIiBjOmZlPSIiIGI6YWE9IiIgZDpldT0iIiBjOmJyPSIiIGM6YWQ9IiIgZGg9IiIgYzphcD0iIiBkOmRmPSIiIGRqPSIiIGM6Yno9IiIgYzpjcT0iIiBhOmFnPSIiIGQ6Y2g9IiIgYjpiYz0iIiBhOmVhPSIiIGM6ZHo9IiIgYjphcj0iIiBmaj0iIiBjOmF5PSIiIGQ6Y3o9IiIgZHU9IiIgYjpmYj0iIiBiOmRiPSIiIGI6YW49IiIgYzpmYz0iIiBjcz0iIiBhaD0iIiBhOmVmPSIiIGQ6Zmc9IiIgYjplaT0iIiBkOmVxPSIiIGM6YnA9IiIgYTpkcz0iIiBicz0iIiBhOmZtPSIiIGZoPSIiIGM6YWs9IiIgZDpjaT0iIiBhOmFsPSIiIGM6ZWU9IiIgYm89IiIgYjpiaz0iIiBkOmV5PSIiIGI6Y3Q9IiIgYXg9IiIgYzpibT0iIiBlZz0iIiBhOmJuPSIiIGM6YWI9IiIgZDpidz0iIiBlbz0iIiBhOmRyPSIiIGM6Zm49IiIgYWU9IiIgYzphZj0iIiBjOmR0PSIiIGQ6Y2c9IiIgYjphcz0iIiBjOmFtPSIiIGQ6YmU9IiIgYTpkYz0iIiBkOmNhPSIiIGRsPSIiIGM6Y2M9IiIgZDpiYj0iIiBiOmRuPSIiIGV2PSIiIGI6Y3I9IiIgYzplbT0iIiBiOmZrPSIiIGQ6YWk9IiIgZXA9IiIgZDpkcD0iIiBiOmJmPSIiIGI6YnU9IiIgYzpjZj0iIiBiOmNtPSIiIGQ6ZGE9IiIgYjpjdT0iIiBhOmV6PSIiIGI6YWM9IiIgYjpiYT0iIiBjcD0iIiBiOmNlPSIiIGI6ZWo9IiIgZDphdD0iIiBkOmVkPSIiIGQ6ZHc9IiIgYXQ9IiIgZDpicT0iIiBjOmJqPSIiIGQ6ZmE9IiIgYzpmZj0iIiBiOmNrPSIiIGNsPSIiIGZkPSIiIGFqPSIiIGE6ZGQ9IiIgZDpmbD0iIiBjOmJpPSIiIGI6YXY9IiIgYjpmaT0iIiBhOmF3PSIiIGNqPSIiIGQ6Y3c9IiIgYTplYz0iIiBkOmRnPSIiIGJ0PSIiIGQ6Y2I9IiIgZDplcj0iIiBiOmRrPSIiIGVrPSIiIGM6Ynk9IiIgYTplbD0iIiBkOmViPSIiIGE6ZG09IiIgYjpldD0iIiBiOmJ2PSIiIGVuPSIiIGVoPSIiIGI6Y3k9IiIgYTpjZD0iIiBhOmJnPSIiIGQ6Y3g9IiIgYTpjdj0iIiBiOmJ4PSIiIGE6YW89IiIgYzphej0iIiBkOmNuPSIiIGQ6Y289IiIvPgorPGUgYnI9IiIgZDplbz0iIiBiOmF6PSIiIGN5PSIiIGE6YmQ9IiIgZHc9IiIgZHU9IiIgZDpmZj0iIiBiaj0iIiBhOmRzPSIiIGI6Y2o9IiIgYTpmZz0iIiBiOmV0PSIiIGM6YWY9IiIgYzphZD0iIiBhbD0iIiBiYT0iIiBkZz0iIiBkOmJ5PSIiIGI6Y2c9IiIgYWs9IiIgZW49IiIgYjpmbT0iIiBlcz0iIiBieD0iIiBhOmJsPSIiIGE6Y2M9IiIgYjpheT0iIiBmZT0iIiBhOmFxPSIiIGQ6Zm49IiIgZDpkZj0iIiBiOmNpPSIiIGE6YmU9IiIgZDpkYz0iIiBiOmJzPSIiIGQ6Ym09IiIgZW09IiIgYjpmYz0iIiBjOmZhPSIiIGFyPSIiIGQ6Y3M9IiIgYzpiYz0iIiBhOmZsPSIiIGI6YWU9IiIgYjpiaT0iIiBjOmVwPSIiIGM6YWo9IiIgYXg9IiIgYmY9IiIgZHo9IiIgYjpkeD0iIiBhOmRrPSIiIGM6ZmQ9IiIgZHI9IiIgZHY9IiIgZGg9IiIgYTpjbz0iIiBkOmVyPSIiIGE6YWE9IiIgYTpldj0iIiBhOmNlPSIiIGQ6Ymk9IiIgYjplZT0iIiBkOmVkPSIiIGVrPSIiIGE6YXM9IiIgZDpiZz0iIiBiaz0iIiBhOmRiPSIiIGM6Zm49IiIgYjpkcD0iIiBiOmN4PSIiIGNwPSIiIGM6ZmI9IiIgYTpkcT0iIiBjOmNyPSIiIGJxPSIiIGI6ZXg9IiIgYzpkZD0iIiBjOmN6PSIiIGM6Y2s9IiIgZWE9IiIgYXU9IiIgZDpjYj0iIiBjOmJuPSIiIGRtPSIiIGI6ZWc9IiIgZHk9IiIgYzpjdj0iIiBkOmJvPSIiIGQ6Zmk9IiIgZDphaD0iIiBiOmNhPSIiIGI6Y249IiIgZWk9IiIgZHQ9IiIgYjpidj0iIiBhOmVxPSIiIGVmPSIiIGI6Zmg9IiIgYjplbD0iIiBkOmFjPSIiIGM6Zmo9IiIgYzplaj0iIiBkOmNxPSIiIGM6Y2g9IiIgYjplaD0iIiBiOmFwPSIiIGF0PSIiIGE6Zms9IiIgZDpkaT0iIiBiOmJiPSIiIGE6YW09IiIgYTpkbj0iIiBkOmJ3PSIiIGE6ZG89IiIgYTphbj0iIiBhOmVjPSIiIGV3PSIiIGM6Y3Q9IiIgZXk9IiIgYzpldT0iIiBjOmViPSIiIGE6YWc9IiIgYjpjZj0iIiBhOmF2PSIiIGRsPSIiIGM6Y2Q9IiIgZGo9IiIgY3c9IiIgYzpkYT0iIiBhOmF3PSIiIGE6YnA9IiIgY3U9IiIgZXo9IiIgZDpjbT0iIiBiOmJ1PSIiIGI6ZGU9IiIgYW89IiIgZDpjbD0iIiBiOmFpPSIiIGE6YnQ9IiIgYno9IiIgYTpiaD0iIiBiOmFiPSIiLz4KKzxlIGZjPSIiIGE6YWY9IiIgYjpiaj0iIiBmaj0iIiBibD0iIiBmYT0iIiBhOmNjPSIiIGI6Y3U9IiIgYnQ9IiIgYTpjbT0iIiBjcT0iIiBjbj0iIiBhOmJmPSIiIGE6YWI9IiIgYzphaD0iIiBiOmNoPSIiIGQ6ZXQ9IiIgZDphej0iIiBjOmJrPSIiIGI6ZHI9IiIgYjpicT0iIiBhOmN0PSIiIGM6Zm09IiIgYTphdT0iIiBjOmN5PSIiIGQ6Zmw9IiIgYzphaz0iIiBiej0iIiBjcz0iIiBiOmR1PSIiIGE6Ymk9IiIgZDphdz0iIiBhOmV1PSIiIGQ6Y2s9IiIgYmE9IiIgZDpmZj0iIiBkOmRnPSIiIGE6Ym09IiIgZDpicj0iIiBlcT0iIiBhOmRtPSIiIGM6Y3o9IiIgZDpjaj0iIiBhOmFuPSIiIGM6ZmU9IiIgYjplbT0iIiBjOmJ2PSIiIGE6Ymc9IiIgYzphcz0iIiBhdj0iIiBhcT0iIiBjOmNyPSIiIGRoPSIiIGI6ZHA9IiIgZDphYT0iIiBkOmV2PSIiIGQ6YWw9IiIgYjpidz0iIiBhOmFqPSIiIGE6Zm49IiIgYzphbz0iIiBjOmNpPSIiIGM6Ynk9IiIgYTpjZj0iIiBkOmR6PSIiIGJzPSIiIGZnPSIiIGJkPSIiIGI6Y2I9IiIgYTpmYj0iIiBiOmVsPSIiIGQ6ZWU9IiIgZDpkaz0iIiBjOmZkPSIiIGE6ZXg9IiIgYzpkdj0iIiBhOmFwPSIiIGE6ZWY9IiIgYTpkeD0iIiBlYj0iIiBhOmR3PSIiIGRiPSIiIGM6YWQ9IiIgZWc9IiIgYzphZT0iIiBiYj0iIiBlcz0iIiBiOmNsPSIiIGQ6ZGo9IiIgYjplej0iIiBjOmVkPSIiIGE6Zmg9IiIgZXI9IiIgYWc9IiIgYjpidT0iIiBiOmFpPSIiIGM6ZWE9IiIgYmM9IiIgYXg9IiIgY3c9IiIgZWs9IiIgZDplcD0iIiBlaD0iIiBkOmNhPSIiIGRkPSIiIGQ6Zms9IiIgZDpheT0iIiBicD0iIiBiOmJuPSIiIGRvPSIiIGRpPSIiIGQ6Y3A9IiIgZDpkZT0iIiBjOmV3PSIiIGM6Y3g9IiIgYzpkbj0iIiBjOmVuPSIiIGM6Y3k9IiIgYTpjZz0iIiBjOmRhPSIiIGQ6ZHk9IiIgZDpjZT0iIiBkOmJvPSIiIGI6ZHQ9IiIgYXI9IiIgYjplYz0iIiBkYz0iIiBhOmFjPSIiIGQ6ZGw9IiIgY289IiIgYW09IiIgZWk9IiIgYXQ9IiIgYzpjaj0iIiBjOmRxPSIiIGJoPSIiIGE6ZXk9IiIgYTpiZT0iIiBjOmRmPSIiIGI6ZWo9IiIgYTpjdj0iIiBjOmRzPSIiIGQ6Yng9IiIgYzpjZD0iIiBlbz0iIiBhOmZpPSIiLz4KKzxlIGM6ZXQ9IiIgYmk9IiIgYzpkdT0iIiBiOmF2PSIiIGM6YnQ9IiIgYzpkZT0iIiBhOmF3PSIiIGNnPSIiIGI6Ymo9IiIgYzpmaz0iIiBkOmRjPSIiIGQ6ZHk9IiIgYjpmZD0iIiBiOmVxPSIiIGM6ZHo9IiIgYzpkaD0iIiBhOmVtPSIiIGQ6Y3A9IiIgZDphbj0iIiBleD0iIiBiOmJsPSIiIGQ6YWw9IiIgZG49IiIgYzpjcT0iIiBiOmN2PSIiIGQ6ZWs9IiIgZDphbT0iIiBkOmVtPSIiIGM6Zmk9IiIgZDpiZj0iIiBkOmRvPSIiIGM6YXE9IiIgYWI9IiIgYTphZT0iIiBjOmV1PSIiIGQ6Ynk9IiIgYjpjdD0iIiBkOmRxPSIiIGE6YmM9IiIgYzplZz0iIiBjOmJwPSIiIGFmPSIiIGE6ZHI9IiIgZHY9IiIgYzplej0iIiBhYz0iIiBiZD0iIiBhOmVjPSIiIGE6YnM9IiIgYTpiZz0iIiBhOmZuPSIiIGQ6ZWE9IiIgYTpldj0iIiBkOmRhPSIiIGQ6ZG09IiIgYjpjeT0iIiBjeD0iIiBjOmJrPSIiIGE6ZHg9IiIgYng9IiIgZWY9IiIgZDpjbT0iIiBjOmVuPSIiIGI6Yno9IiIgZWU9IiIgZDpibj0iIiBiOmJxPSIiIGI6YXI9IiIgYjphbz0iIiBjOmN6PSIiIGZnPSIiIGE6YXk9IiIgYWQ9IiIgYjpjaD0iIiBhOmJoPSIiIGQ6YnI9IiIgYTpkZj0iIiBhOmNkPSIiIGE6YmE9IiIgYzpkZz0iIiBiOmFrPSIiIGNhPSIiIGFzPSIiIGE6ZGs9IiIgYzpjbj0iIiBkOmVwPSIiIGM6ZXc9IiIgZGI9IiIgZDplbD0iIiBhOmZhPSIiIGFpPSIiIGZlPSIiIGJ1PSIiIGM6YXg9IiIgZDpiYj0iIiBiOmFqPSIiIGM6YWg9IiIgYjpkaT0iIiBidj0iIiBkOmZmPSIiIGViPSIiIGNmPSIiIGQ6Zmg9IiIgYjpjdT0iIiBkbD0iIiBiOmNrPSIiIGM6Zm09IiIgYTpkcz0iIiBhOmF6PSIiIGQ6YWE9IiIgYjplaT0iIiBjbz0iIiBiOmNlPSIiIGE6YmU9IiIgYXQ9IiIgY2w9IiIgYTpjYz0iIiBmYz0iIiBkdD0iIiBjOmV5PSIiIGF1PSIiIGJtPSIiIGM6YXA9IiIgYTpkaj0iIiBhOmJvPSIiIGI6Zmw9IiIgYjpjaj0iIiBjOmR3PSIiIGVkPSIiIGE6Y2k9IiIgYTplaD0iIiBkOmVzPSIiIGE6ZW89IiIgYjpjYj0iIiBjOmNzPSIiIGNuPSIiIGI6ZWo9IiIgYzpkZD0iIiBkOmNyPSIiIGFnPSIiIGQ6Y3c9IiIgYTpkcD0iIiBmaj0iIiBhOmJ3PSIiIGE6ZmI9IiIgZXI9IiIvPgorPGUgYmk9IiIgYTpjZz0iIiBiOmVhPSIiIGVuPSIiIGJtPSIiIGM6ZWg9IiIgYzpjdT0iIiBhOmF4PSIiIGQ6ZXA9IiIgYzpkYz0iIiBiOmR0PSIiIGI6ZHk9IiIgZDpkcT0iIiBiOmZtPSIiIGNiPSIiIGQ6Yng9IiIgYWc9IiIgY3Y9IiIgYjpkdz0iIiBkOmNvPSIiIGM6ZWI9IiIgZDpldT0iIiBlcj0iIiBmYz0iIiBjOmNrPSIiIGI6Y3M9IiIgYjpkaT0iIiBiOmN3PSIiIGJwPSIiIGE6ZmQ9IiIgYTplZj0iIiBhOmFyPSIiIGM6Zms9IiIgYWg9IiIgYmw9IiIgYjpkaz0iIiBkOmJ2PSIiIGV3PSIiIGQ6YmQ9IiIgYTpmYj0iIiBkOmF2PSIiIGI6Y2Q9IiIgYnQ9IiIgYTplej0iIiBlaj0iIiBlbD0iIiBjOmFrPSIiIGM6YXU9IiIgZDpjZT0iIiBhOmNjPSIiIGM6ZXk9IiIgY3I9IiIgYzplaT0iIiBhOmR1PSIiIGM6Ym89IiIgYXo9IiIgZDpiaj0iIiBkOmJnPSIiIGI6YXk9IiIgYTphZD0iIiBkOmFwPSIiIGE6Ym49IiIgYnc9IiIgYzplbz0iIiBkOmJmPSIiIGM6ZHY9IiIgZDphbD0iIiBjOmFvPSIiIGM6Y209IiIgYjpkej0iIiBmZT0iIiBhZj0iIiBkOmZuPSIiIGI6YXM9IiIgYjpmZj0iIiBkOmZhPSIiIGM6Y2w9IiIgYjpjYT0iIiBiOmVzPSIiIGI6ZWU9IiIgYTpjej0iIiBkOmRiPSIiIGE6YXE9IiIgYzphaT0iIiBicj0iIiBjOmVjPSIiIGI6ZGE9IiIgYzpicz0iIiBkOmJxPSIiIGE6Y2o9IiIgYzpidT0iIiBjOmRqPSIiIGQ6YW09IiIgZDpkeD0iIiBiOmRlPSIiIGI6ZHA9IiIgZDplZD0iIiBiOmFuPSIiIGM6Yms9IiIgYnQ9IiIgYjpjbj0iIiBhOmRnPSIiIGM6YmM9IiIgZDpkbT0iIiBiOmRzPSIiIGI6Y3k9IiIgZDplcT0iIiBhOmZsPSIiIGE6YmE9IiIgZDplZz0iIiBkOmFjPSIiIGQ6ZGQ9IiIgYTpiZT0iIiBhOmV0PSIiIGE6ZHI9IiIgYzpkbj0iIiBjOmNpPSIiIGN4PSIiIGM6ZGg9IiIgY2g9IiIgYTpiYj0iIiBkOmV4PSIiIGJoPSIiIGQ6ZWs9IiIgZXY9IiIgYjpieT0iIiBhdD0iIiBjOmVtPSIiIGM6ZG89IiIgZDpjcT0iIiBhOmFiPSIiIGE6Yno9IiIgZDpkbD0iIiBjOmFlPSIiIGI6Zmg9IiIgY2Y9IiIgYjphYT0iIiBhOmFqPSIiIGM6Y3A9IiIgYTpjaz0iIiBiOmZpPSIiIGE6Zmo9IiIgYXc9IiIgZDpkZj0iIiBkOmN0PSIiIGQ6Zmc9IiIvPgorPGUgZDpkdj0iIiBjOmJpPSIiIGM6Ymw9IiIgYTpkaj0iIiBjOmNzPSIiIGV2PSIiIGE6Yms9IiIgY2o9IiIgYzphaD0iIiBjOmR0PSIiIGI6YXI9IiIgYzpmZT0iIiBjaz0iIiBiOmZhPSIiIGQ6YWQ9IiIgZDphaT0iIiBiZD0iIiBhej0iIiBkeD0iIiBhOmZmPSIiIGQ6YnQ9IiIgYXA9IiIgYTplaD0iIiBhOmJ6PSIiIGM6Zmk9IiIgYjpkeD0iIiBlbT0iIiBjOmRoPSIiIGF5PSIiIGI6ZWQ9IiIgYnc9IiIgYnY9IiIgYjphYT0iIiBkOmNmPSIiIGM6ZWM9IiIgZGE9IiIgYTpkcD0iIiBhZj0iIiBmbD0iIiBhOmNvPSIiIGM6ZXc9IiIgYTplbD0iIiBjOmRyPSIiIGNuPSIiIGM6Y2c9IiIgYTpicj0iIiBjdj0iIiBkcz0iIiBjOmF1PSIiIGJqPSIiIGNyPSIiIGI6ZWc9IiIgYzpiaD0iIiBlZT0iIiBjOmN3PSIiIGM6YWc9IiIgYnk9IiIgZGc9IiIgYTpkeT0iIiBkOmRtPSIiIGViPSIiIGQ6ZWs9IiIgZXo9IiIgYjpkdz0iIiBiOmNtPSIiIGI6Y2Q9IiIgYTplcz0iIiBiOmVvPSIiIGRsPSIiIGE6YXc9IiIgYTplZj0iIiBhOmRiPSIiIGFrPSIiIGI6Zmo9IiIgY3Q9IiIgZXQ9IiIgZDpicz0iIiBkOmJ4PSIiIGI6YWU9IiIgYmE9IiIgZDpiZz0iIiBkOmRxPSIiIGE6Y2E9IiIgYm89IiIgYW89IiIgY2I9IiIgYzpjZT0iIiBiOmFiPSIiIGQ6ZmI9IiIgZDphbj0iIiBiOmF0PSIiIGM6Zmg9IiIgYTphcz0iIiBhOmFqPSIiIGJ1PSIiIGI6YmE9IiIgYm09IiIgZDpjeT0iIiBlcj0iIiBmYz0iIiBjOmZuPSIiIGRjPSIiIGM6ZHU9IiIgZGk9IiIgZDpldT0iIiBiOmNwPSIiIGQ6Zms9IiIgYjpjeD0iIiBhOmRvPSIiIGE6ZXE9IiIgZDphbT0iIiBlcD0iIiBiOmNjPSIiIGM6YmM9IiIgZDpiYj0iIiBiOmJwPSIiIGQ6ZWk9IiIgYzpmbT0iIiBkaz0iIiBhOmZkPSIiIGI6ZXg9IiIgYXE9IiIgYjpibj0iIiBkZD0iIiBhOmVhPSIiIGVuPSIiIGQ6Y3U9IiIgYzpkZj0iIiBhOmFsPSIiIGI6YXg9IiIgZDpmZz0iIiBhOmVqPSIiIGE6Y2k9IiIgYjpkbj0iIiBkOmV5PSIiIGFjPSIiIGE6ZHo9IiIgYTpkZT0iIiBiOmNxPSIiIGI6Y2w9IiIgYzpiZj0iIiBiOmN6PSIiIGI6YnE9IiIgZDphdj0iIiBjaD0iIiBhOmJlPSIiLz4KKzxlIGVkPSIiIGQ6ZGI9IiIgYzplaD0iIiBiaz0iIiBkOmJnPSIiIGNhPSIiIGI6Y209IiIgYTplYj0iIiBiOmR4PSIiIGJlPSIiIGQ6Y3U9IiIgZDplbz0iIiBhOmFzPSIiIGM6ZGg9IiIgYTpjZT0iIiBkOmFkPSIiIGI6ZWY9IiIgZDpidT0iIiBhOmRxPSIiIGM6ZW49IiIgYjpkaz0iIiBiOmRyPSIiIGE6Y2I9IiIgYW89IiIgYTphcj0iIiBkOmF0PSIiIGQ6ZGU9IiIgYjplcz0iIiBjOmNxPSIiIGQ6Y3g9IiIgZm49IiIgYWo9IiIgYTpiYj0iIiBhOmZjPSIiIGQ6Y249IiIgYjplaz0iIiBiOmNwPSIiIGM6YXE9IiIgZWc9IiIgZDpjeT0iIiBhOmJxPSIiIGR5PSIiIGM6ZXA9IiIgZDpieT0iIiBkOmRtPSIiIGVtPSIiIGQ6Yno9IiIgYnI9IiIgYzpiYz0iIiBmYj0iIiBjOmVjPSIiIGE6Ym09IiIgYTplej0iIiBkOmFuPSIiIGE6ZG49IiIgZXY9IiIgYTpjaT0iIiBkOmZtPSIiIGM6Ym89IiIgYzphZT0iIiBkOmJsPSIiIGNoPSIiIGM6YnY9IiIgZmY9IiIgYjpiZj0iIiBjOmFiPSIiIGI6Y2w9IiIgYTphZj0iIiBmbD0iIiBkOmV3PSIiIGQ6YXY9IiIgZDphaz0iIiBiOmRvPSIiIGE6ZHc9IiIgZDpiaj0iIiBjOmVpPSIiIGNnPSIiIGM6ZGQ9IiIgYTpkdD0iIiBhOmNkPSIiIGQ6ZHY9IiIgYzpkYz0iIiBkOmJwPSIiIGE6ZmE9IiIgZDpjaz0iIiBkOmN6PSIiIGI6ZHM9IiIgYTpheT0iIiBhYz0iIiBkcD0iIiBiOmJzPSIiIGE6Ync9IiIgYTpiYT0iIiBiOmFtPSIiIGR6PSIiIGI6YWg9IiIgZDpmZT0iIiBhYT0iIiBjOmNqPSIiIGQ6Zmo9IiIgYzphdT0iIiBkOmFsPSIiIGM6Y3Q9IiIgYXc9IiIgYjphcD0iIiBhOmRhPSIiIGM6ZGo9IiIgYTphaT0iIiBiOmV0PSIiIGE6Ymk9IiIgYzpjdz0iIiBmaD0iIiBkOmNzPSIiIGE6ZmQ9IiIgYjpmaz0iIiBiOmVqPSIiIGQ6ZXg9IiIgYnQ9IiIgZDplcT0iIiBkOmVhPSIiIGQ6ZGw9IiIgZGY9IiIgYzplbD0iIiBjOmRnPSIiIGI6Yng9IiIgYTplZT0iIiBhOmNmPSIiIGQ6ZXI9IiIgZDpheD0iIiBhYT0iIiBiOmRpPSIiIGE6Y289IiIgYzpjYz0iIiBkOmN5PSIiIGE6Ym49IiIgYTpiaD0iIiBiOmZpPSIiIGI6ZXk9IiIgYTpjdj0iIiBiOmFnPSIiIGI6ZHU9IiIgYTphej0iIiBhOmZnPSIiIGI6Y3I9IiIgZDpiZD0iIiBkOmV1PSIiLz4KKzxlIGI6Y3o9IiIgYXk9IiIgZG49IiIgZDpjZj0iIiBhOmRsPSIiIGI6YXg9IiIgYWs9IiIgZDpmZT0iIiBhOmJnPSIiIGFvPSIiIGI6YXI9IiIgYTpkZj0iIiBjOmNjPSIiIGQ6Y3E9IiIgYzplbT0iIiBhOmZuPSIiIGQ6YXU9IiIgYzplZj0iIiBiZj0iIiBidT0iIiBjOmVjPSIiIGM6ZHo9IiIgZDplbj0iIiBjOmR1PSIiIGQ6Y3Y9IiIgYzplaz0iIiBiOmZjPSIiIGM6ZHI9IiIgZDpkbT0iIiBiOmFiPSIiIGM6ZXg9IiIgYjpjcD0iIiBkOmViPSIiIGJuPSIiIGRrPSIiIGI6ZGI9IiIgZDpkZz0iIiBiOmN3PSIiIGQ6Yng9IiIgY2I9IiIgYjplaT0iIiBjcj0iIiBiOmJoPSIiIGE6Y249IiIgYTpicT0iIiBiej0iIiBjOmZhPSIiIGFxPSIiIGFqPSIiIGE6Y2U9IiIgY2k9IiIgYzplcT0iIiBkOmJtPSIiIGI6YXo9IiIgYTphYT0iIiBkYz0iIiBhOmNqPSIiIGM6YWw9IiIgY209IiIgYjplbD0iIiBjOmN5PSIiIGNsPSIiIGE6ZGo9IiIgZWg9IiIgYTpjYT0iIiBjOmFjPSIiIGI6YWk9IiIgYTplaj0iIiBkOmN4PSIiIGFlPSIiIGVvPSIiIGN1PSIiIGFzPSIiIGI6ZWQ9IiIgYTpidj0iIiBhOmRwPSIiIGF2PSIiIGQ6ZXU9IiIgZDpjdD0iIiBkaD0iIiBhOmRkPSIiIGM6Y2s9IiIgYTpkdj0iIiBjOmNnPSIiIGQ6ZXk9IiIgYTpmaz0iIiBldj0iIiBkOmVlPSIiIGM6ZHE9IiIgYTphbj0iIiBhbT0iIiBmZj0iIiBiaz0iIiBibz0iIiBkaT0iIiBjcz0iIiBhOmJjPSIiIGE6ZHc9IiIgZGE9IiIgYzphZD0iIiBkOmZpPSIiIGE6Ymo9IiIgYzpkeT0iIiBiaT0iIiBhOmR0PSIiIGRvPSIiIGI6Zmg9IiIgZDpmaj0iIiBiOmZnPSIiIGQ6Y2g9IiIgZmw9IiIgYzpidz0iIiBkOmJ5PSIiIGFoPSIiIGE6YWc9IiIgZDplcz0iIiBldD0iIiBkOmFmPSIiIGE6YXQ9IiIgYjplYT0iIiBhOmJiPSIiIGE6Ymw9IiIgZXI9IiIgZDphdz0iIiBjOmR4PSIiIGQ6ZWc9IiIgYTpicj0iIiBkOmJzPSIiIGRlPSIiIGE6YnA9IiIgYzpjZD0iIiBkOmJkPSIiIGI6ZmQ9IiIgZDpiZT0iIiBhOmFwPSIiIGE6Zm09IiIgZDpiYT0iIiBhOmJ0PSIiIGE6ZXc9IiIgYjpkcz0iIiBicz0iIiBkOmRqPSIiIGE6ZXA9IiIgYTplej0iIiBmYj0iIiBkOmNvPSIiLz4KKzxlIGI6Zmk9IiIgYjphYj0iIiBjOmFqPSIiIGQ6ZGE9IiIgYzpkbj0iIiBhOmRqPSIiIGJiPSIiIGI6YnQ9IiIgYTpheT0iIiBjOmNjPSIiIGM6Ymg9IiIgYjphYT0iIiBkOmR5PSIiIGM6ZHg9IiIgYzpieD0iIiBjOmFyPSIiIGZjPSIiIGI6YWU9IiIgY249IiIgYzpkcz0iIiBlYj0iIiBiOmVzPSIiIGJxPSIiIGE6YW89IiIgZHc9IiIgYzphaT0iIiBjeD0iIiBkbT0iIiBhOmFsPSIiIGQ6ZG89IiIgZDpiZT0iIiBkOmRnPSIiIGI6ZGk9IiIgYjphej0iIiBjdj0iIiBkOmN3PSIiIGE6ZHQ9IiIgYTphdD0iIiBkcT0iIiBiOmVvPSIiIGZnPSIiIGFzPSIiIGQ6YW49IiIgYzphaD0iIiBiOmZhPSIiIGI6Ync9IiIgYTpibz0iIiBjOmF3PSIiIGQ6ZW09IiIgYTpkYz0iIiBiOmVxPSIiIGE6ZGg9IiIgYTpiaz0iIiBiOmN5PSIiIGM6ZXY9IiIgYjpicz0iIiBkOmZkPSIiIGQ6Y3o9IiIgYzphdj0iIiBibD0iIiBiOmFrPSIiIGQ6Y2I9IiIgYnk9IiIgYjpmbT0iIiBjbT0iIiBiOmVjPSIiIGJyPSIiIGI6ZWQ9IiIgYTphcD0iIiBjOmVqPSIiIGZiPSIiIGI6YnY9IiIgYjpiYz0iIiBhOmNmPSIiIGQ6Y3M9IiIgYTpkaz0iIiBkdT0iIiBhZD0iIiBkOmVpPSIiIGM6YWc9IiIgZDpmbj0iIiBhOmZoPSIiIGM6ZWY9IiIgYnA9IiIgYjpiej0iIiBjZD0iIiBlbD0iIiBkOmVyPSIiIGZsPSIiIGE6Ym09IiIgZDpiZD0iIiBhOmNyPSIiIGZrPSIiIGM6Y2o9IiIgY3U9IiIgZDpjaT0iIiBjOmRiPSIiIGQ6ZmM9IiIgYTplbj0iIiBjOmJhPSIiIGV5PSIiIGVrPSIiIGE6ZXg9IiIgYzplYT0iIiBhOmFtPSIiIGI6Ym49IiIgYjpkZT0iIiBhOmZqPSIiIGM6ZWc9IiIgZDpjaz0iIiBiOmNhPSIiIGQ6Y2g9IiIgZDpkZD0iIiBjOmFjPSIiIGM6ZWg9IiIgZWU9IiIgYmY9IiIgY2U9IiIgZDpjcT0iIiBjOmFmPSIiIGF1PSIiIGNwPSIiIGQ6ZmU9IiIgZXQ9IiIgZDpmZj0iIiBjOmNvPSIiIGE6ZXU9IiIgZXo9IiIgYjpkbD0iIiBkOmJnPSIiIGFxPSIiIGI6ZHo9IiIgYzpjbD0iIiBhOmVwPSIiIGE6ZHY9IiIgZHI9IiIgY2c9IiIgZDpjdD0iIiBldz0iIiBiOmJ1PSIiIGE6Ymk9IiIgZDpkcD0iIiBkZj0iIiBiaj0iIiBjOmF4PSIiIGQ6Zm09IiIvPgorPGUgYjplaj0iIiBhOmV0PSIiIGFsPSIiIGE6YXQ9IiIgYzpmbD0iIiBmZz0iIiBjOmRuPSIiIGJhPSIiIGJuPSIiIGFiPSIiIGQ6ZGM9IiIgYjphZz0iIiBhOmJ3PSIiIGI6Zmk9IiIgZDpjZz0iIiBhOmRxPSIiIGQ6Y289IiIgZHk9IiIgZG09IiIgY2k9IiIgYTpmZT0iIiBmZD0iIiBkOmN6PSIiIGE6Y3g9IiIgYTpmZj0iIiBmbT0iIiBhOmJ0PSIiIGI6YW09IiIgZms9IiIgYzpjbD0iIiBiYj0iIiBkOmFpPSIiIGM6YXM9IiIgZXE9IiIgYjpieT0iIiBjOmV2PSIiIGQ6ZWs9IiIgYTpjdz0iIiBkOmNjPSIiIGM6YnI9IiIgYjphaj0iIiBlZT0iIiBiOmNyPSIiIGM6Ymc9IiIgYTpleD0iIiBjOmV5PSIiIGE6ZHQ9IiIgYzpidT0iIiBjOmF6PSIiIGM6Y2Q9IiIgYWg9IiIgYjpkaj0iIiBkZz0iIiBkOmNxPSIiIGI6ZWw9IiIgZDpjZT0iIiBkOmNqPSIiIGNmPSIiIGQ6Y2I9IiIgYjpiZj0iIiBhOmJzPSIiIGZoPSIiIGVwPSIiIGI6Yng9IiIgYTpiej0iIiBhOmZqPSIiIGJrPSIiIGE6ZWk9IiIgYW49IiIgZDplYT0iIiBkOmVkPSIiIGE6YXg9IiIgYTphbz0iIiBjOmF1PSIiIGQ6YWs9IiIgYzpidj0iIiBiOmNrPSIiIGJtPSIiIGF5PSIiIGQ6YWQ9IiIgYXY9IiIgYmM9IiIgY2g9IiIgZDpiZT0iIiBkOmRlPSIiIGQ6ZmE9IiIgZDpkcD0iIiBjOmJqPSIiIGQ6Y3Y9IiIgZHY9IiIgYjpkdT0iIiBiOmFjPSIiIGM6ZW89IiIgZDphYT0iIiBjOmF3PSIiIGVuPSIiIGE6YWY9IiIgYTplbT0iIiBiOmV1PSIiIGE6ZXM9IiIgYzpkdz0iIiBhOmF5PSIiIGNzPSIiIGM6ZGs9IiIgZGk9IiIgZXc9IiIgY3o9IiIgYTpkaD0iIiBjOmFwPSIiIGI6ZGY9IiIgYzpicD0iIiBhOmZiPSIiIGZuPSIiIGRsPSIiIGM6Y3A9IiIgYjpkbz0iIiBjOmVnPSIiIGM6ZHg9IiIgZHM9IiIgYTpjbj0iIiBjOmRhPSIiIGQ6Y3Q9IiIgZWg9IiIgYTpmYz0iIiBlYj0iIiBiOmRkPSIiIGQ6Y3k9IiIgZDpjdT0iIiBkOmR6PSIiIGFlPSIiIGQ6ZXI9IiIgYzpjbT0iIiBiaT0iIiBicT0iIiBiOmJsPSIiIGRyPSIiIGI6ZGI9IiIgYTplYz0iIiBhOmJoPSIiIGE6ZWY9IiIgZDpibz0iIiBhcT0iIiBiOmFyPSIiIGV6PSIiIGJkPSIiIGNhPSIiLz4KKzxlIGI6Zm09IiIgYTpiYz0iIiBjYj0iIiBiej0iIiBkOmF5PSIiIGE6ZmQ9IiIgYTpkbT0iIiBhOmZjPSIiIGI6Yng9IiIgZDplaj0iIiBjOmFtPSIiIGE6YnA9IiIgZDpieT0iIiBiOmRwPSIiIGV3PSIiIGQ6ZW49IiIgZXE9IiIgYTpiZj0iIiBjOmVvPSIiIGR6PSIiIGE6ZWE9IiIgYzphaj0iIiBiaT0iIiBhOmN6PSIiIGM6ZG89IiIgZDpkYz0iIiBkOmF2PSIiIGM6ZXk9IiIgYjpiZz0iIiBheD0iIiBlaD0iIiBidz0iIiBkOmNqPSIiIGNsPSIiIGE6ZWQ9IiIgYzpiaD0iIiBlZj0iIiBiOmJyPSIiIGI6Y3U9IiIgYXA9IiIgYzpkYj0iIiBhOmN3PSIiIGI6YWk9IiIgYTphcj0iIiBiOmZpPSIiIGNmPSIiIGQ6ZGE9IiIgYTphaD0iIiBiOmFsPSIiIGI6Y3Y9IiIgYzplcz0iIiBjOmRsPSIiIGI6YWE9IiIgYzpmbj0iIiBiOmR5PSIiIGQ6ZGU9IiIgYjplaT0iIiBiOmRnPSIiIGM6Y3g9IiIgZDplZT0iIiBkOmRkPSIiIGRpPSIiIGM6ZWs9IiIgZGg9IiIgYzpjaz0iIiBhdD0iIiBhaz0iIiBiOmRuPSIiIGVnPSIiIGE6Ymo9IiIgZDpkdz0iIiBiOmJkPSIiIGQ6Y289IiIgZDphcz0iIiBidT0iIiBkOmZiPSIiIGM6YmU9IiIgYzplYz0iIiBkOmRxPSIiIGE6YXo9IiIgYTpjeT0iIiBhaj0iIiBhOmV0PSIiIGQ6Zmo9IiIgYzplcD0iIiBldT0iIiBjZz0iIiBhOmZoPSIiIGM6Y209IiIgYTpkaj0iIiBhOmRzPSIiIGM6YW89IiIgZDpmbD0iIiBkOmRyPSIiIGI6YmI9IiIgZDpldj0iIiBjcD0iIiBkOmNjPSIiIGZrPSIiIGI6ZGs9IiIgYnE9IiIgYzpjaD0iIiBkOmVsPSIiIGQ6Y3E9IiIgZDpicz0iIiBhOmV6PSIiIGI6YXc9IiIgYzpiaT0iIiBiOmNyPSIiIGM6Ym09IiIgZDpibz0iIiBjZT0iIiBjaT0iIiBkOmJhPSIiIGQ6YWM9IiIgYjpleD0iIiBhYj0iIiBiOmJuPSIiIGQ6ZXI9IiIgYzplbT0iIiBjOmNuPSIiIGM6ZHQ9IiIgY3M9IiIgZDpjYT0iIiBhOmViPSIiIGF1PSIiIGM6ZHg9IiIgYzpkdj0iIiBiOmFkPSIiIGM6ZmE9IiIgYWU9IiIgYjpmZT0iIiBjOmFnPSIiIGQ6YW49IiIgYTpiaz0iIiBmZz0iIiBkOmRmPSIiIGZmPSIiIGN0PSIiIGJ2PSIiIGI6Ymw9IiIgYTpkdT0iIiBjOmFmPSIiIGJ0PSIiIGE6YXE9IiIgZDpjZD0iIi8+Cis8ZSBiOmZkPSIiIGQ6Yms9IiIgYjpldz0iIiBjOmV4PSIiIGV0PSIiIGI6ZGg9IiIgYzplbT0iIiBjOmJ4PSIiIGQ6ZmU9IiIgYTpjYT0iIiBhOmFkPSIiIGI6Y2k9IiIgYzplZT0iIiBhOmN1PSIiIGI6ZXU9IiIgYTpjcT0iIiBjOmF5PSIiIGE6Zm49IiIgYjplcD0iIiBhcT0iIiBjZD0iIiBkOmJnPSIiIGQ6ZGc9IiIgYTphbj0iIiBiOmVrPSIiIGI6ZHQ9IiIgZDpiaT0iIiBiZD0iIiBhOmNnPSIiIGJyPSIiIGVhPSIiIGE6YWs9IiIgZWQ9IiIgYjphcD0iIiBhOmFhPSIiIGQ6Ymg9IiIgYjpkaj0iIiBjOmRzPSIiIGI6Zm09IiIgY3g9IiIgYTpmaT0iIiBhOmRtPSIiIGM6ZHo9IiIgYzphZz0iIiBmYT0iIiBkOmF0PSIiIGQ6Y3Q9IiIgYTplbz0iIiBlbD0iIiBiOmF2PSIiIGM6Ymw9IiIgZDpkbD0iIiBkOmJlPSIiIGE6YnE9IiIgZDpkZj0iIiBkOmNlPSIiIGF1PSIiIGE6ZHg9IiIgZDpjdz0iIiBidj0iIiBiOmFpPSIiIGVuPSIiIGQ6Y2g9IiIgZDpiZj0iIiBkOmFjPSIiIGE6ZGE9IiIgY2s9IiIgZGs9IiIgYzpjYj0iIiBiOmFmPSIiIGM6ZG89IiIgYzpieT0iIiBkcD0iIiBlaD0iIiBjbj0iIiBhOmJqPSIiIGM6ZWY9IiIgYzpjcD0iIiBjOmNzPSIiIGM6ZXI9IiIgYzpkdz0iIiBkcT0iIiBkcj0iIiBhOmJ6PSIiIGE6YnU9IiIgYjplYz0iIiBiOmR5PSIiIGJwPSIiIGRkPSIiIGI6ZGk9IiIgYjpiYT0iIiBiOmRjPSIiIGI6Y3I9IiIgYTpicz0iIiBhOmNmPSIiIGZsPSIiIGM6Zms9IiIgZDphaj0iIiBjOmFvPSIiIGF4PSIiIGZqPSIiIGQ6ZHU9IiIgYWw9IiIgYjpiYj0iIiBhOmJ0PSIiIGQ6ZXk9IiIgYjpmZz0iIiBjOmRlPSIiIGE6YWI9IiIgYjphbT0iIiBkOmFlPSIiIGM6Ym09IiIgYzplaT0iIiBjOmJ3PSIiIGNsPSIiIGI6ZmY9IiIgYm89IiIgYTphej0iIiBkOmNqPSIiIGI6Y3k9IiIgYTpjdj0iIiBjOmF3PSIiIGQ6ZWI9IiIgYzpmYz0iIiBkOmZqPSIiIGI6Zmg9IiIgZGI9IiIgYzplZz0iIiBjOmR2PSIiIGI6ZWo9IiIgYTpibj0iIiBlej0iIiBkOmFyPSIiIGE6Y2M9IiIgYzphcz0iIiBjOmFoPSIiIGI6ZWc9IiIgYzpmYj0iIiBkOmVzPSIiIGI6ZXY9IiIgZDpjej0iIiBiOmNvPSIiIGI6YmM9IiIgYTpjbT0iIiBiOmRuPSIiIGI6ZXE9IiIvPgorPGUgYTpmYj0iIiBkOmViPSIiIGE6ZHo9IiIgYjpibT0iIiBjOmRiPSIiIGM6YXk9IiIgZDpjaT0iIiBjOmJkPSIiIGNoPSIiIGE6YnA9IiIgYTphaD0iIiBhZz0iIiBiOmZrPSIiIGM6ZWw9IiIgYTpjbz0iIiBhOmRjPSIiIGN6PSIiIGVtPSIiIGNtPSIiIGM6ZGk9IiIgYjpkbD0iIiBkOmR3PSIiIGE6YXg9IiIgYTpkaD0iIiBldj0iIiBkOmJjPSIiIGRwPSIiIGM6YmE9IiIgYTphcz0iIiBmYT0iIiBhOmNwPSIiIGI6YnM9IiIgY3Y9IiIgYjpjcj0iIiBiOmJyPSIiIGM6YXU9IiIgZDplaD0iIiBkOmF3PSIiIGM6ZWM9IiIgYzplbz0iIiBlcD0iIiBiOmFmPSIiIGQ6Y2Q9IiIgYzphZT0iIiBhOmV1PSIiIGM6ZWc9IiIgYzpjZT0iIiBiOmJnPSIiIGQ6ZWU9IiIgYWk9IiIgYjpjcT0iIiBjOmRlPSIiIGM6YWE9IiIgYTphbT0iIiBkOmVqPSIiIGQ6Zmk9IiIgYTpjcT0iIiBjOmJqPSIiIGE6ZGo9IiIgYTpkeD0iIiBhOmZtPSIiIGV0PSIiIGQ6Ynk9IiIgZDpidT0iIiBhcD0iIiBhcj0iIiBiOmRhPSIiIGJ4PSIiIGI6Y2Y9IiIgZDpkZD0iIiBjOmNsPSIiIGQ6Zmc9IiIgZm49IiIgZWs9IiIgYnQ9IiIgYTpjcz0iIiBicT0iIiBhOmNuPSIiIGRzPSIiIGQ6YXY9IiIgYzpibj0iIiBjOmJ2PSIiIGI6YW89IiIgZDplZD0iIiBiOmFsPSIiIGRyPSIiIGV5PSIiIGQ6ZHE9IiIgYjpiYj0iIiBiOmR0PSIiIGM6Y2M9IiIgYjpjaz0iIiBjOmRvPSIiIGM6Y3g9IiIgYTpkeT0iIiBjOmZqPSIiIGI6YXQ9IiIgYjplcT0iIiBkOmFqPSIiIGM6Zmw9IiIgYzpjdD0iIiBiaT0iIiBjOmZuPSIiIGM6ZXg9IiIgZWE9IiIgYjpiaD0iIiBjOmFrPSIiIGJ3PSIiIGE6Ymw9IiIgYTphej0iIiBiOmFiPSIiIGE6ZXM9IiIgYW49IiIgYzplaT0iIiBhOmJrPSIiIGE6Y2E9IiIgYWQ9IiIgYzplej0iIiBlcj0iIiBiOmZjPSIiIGE6ZmQ9IiIgYjpiZj0iIiBkOmZlPSIiIGQ6ZGc9IiIgYTpkbT0iIiBhOmV3PSIiIGM6ZGY9IiIgYTpjZz0iIiBiOmN1PSIiIGI6Zmg9IiIgZDplZj0iIiBmZj0iIiBhOmR2PSIiIGFxPSIiIGI6Y3c9IiIgZG49IiIgY3k9IiIgYzplbj0iIiBhOmNiPSIiIGI6YmU9IiIgZDpiej0iIiBjOmR1PSIiIGJvPSIiIGE6Y2o9IiIgYTphYz0iIiBkOmRrPSIiLz4KKzxlIGE6ZmU9IiIgZDpkaT0iIiBiOmVsPSIiIGE6ZWk9IiIgYjpiYT0iIiBjOmNjPSIiIGQ6ZXE9IiIgYjplbT0iIiBjOmJ3PSIiIGM6Zmk9IiIgYTpleT0iIiBjOmJ2PSIiIGI6ZXg9IiIgZDpkeD0iIiBibz0iIiBiOmVqPSIiIGM6YWs9IiIgY2s9IiIgYzpldT0iIiBkOmJ1PSIiIGVjPSIiIGF5PSIiIGM6ZGk9IiIgYWE9IiIgZXM9IiIgYTpjaj0iIiBhOmRsPSIiIGNtPSIiIGI6Yms9IiIgYjpmaz0iIiBkOmZhPSIiIGE6ZGs9IiIgYjpjaT0iIiBicz0iIiBhOmN3PSIiIGQ6YWI9IiIgYzpkZj0iIiBhOmF6PSIiIGE6ZWY9IiIgZDpkbz0iIiBkOmVhPSIiIGQ6ZWU9IiIgZXo9IiIgYWY9IiIgYzphZz0iIiBkOmVyPSIiIGM6Yno9IiIgYnE9IiIgYzpkbj0iIiBhOmN6PSIiIGRtPSIiIGQ6Y289IiIgYzphZD0iIiBiOmFpPSIiIGE6ZGI9IiIgYTphcD0iIiBjOmJzPSIiIGQ6Zm49IiIgY3Q9IiIgYTphaj0iIiBkOmVwPSIiIGJoPSIiIGM6ZGU9IiIgZDpiZT0iIiBkOmZoPSIiIGViPSIiIGQ6YW89IiIgYW09IiIgYTpmbD0iIiBhOmZqPSIiIGM6ZW89IiIgYTpkdD0iIiBkOmV2PSIiIGI6ZmQ9IiIgZDpjeD0iIiBiOmFoPSIiIGFlPSIiIGQ6YmI9IiIgYTpkdz0iIiBhOmF4PSIiIGQ6ZXQ9IiIgY2c9IiIgYTpiZD0iIiBkcz0iIiBkOmF3PSIiIGE6ZWs9IiIgYzpibT0iIiBhOmN5PSIiIGM6ZWQ9IiIgZDpmZz0iIiBkZz0iIiBiOmR6PSIiIGRkPSIiIGE6YXQ9IiIgY3I9IiIgYzpmYz0iIiBiOmN1PSIiIGM6YnI9IiIgYTpiZj0iIiBiOmVuPSIiIGQ6YXE9IiIgYjpjZj0iIiBmZj0iIiBkOmJqPSIiIGM6Y3A9IiIgYjpjYj0iIiBiOmF1PSIiIGQ6Yng9IiIgYzpkeT0iIiBhOmNxPSIiIGM6ZGo9IiIgYTpmbT0iIiBhOmZiPSIiIGJnPSIiIGQ6Y2g9IiIgYzphbj0iIiBjOmJ0PSIiIGE6YWw9IiIgYjpldz0iIiBkOmVnPSIiIGJpPSIiIGI6Y2E9IiIgYTpjbj0iIiBkdj0iIiBkcj0iIiBiOmRxPSIiIGRwPSIiIGE6ZHU9IiIgZGM9IiIgZDpjdj0iIiBiYz0iIiBhOmVoPSIiIGI6Ynk9IiIgYTpjbD0iIiBhYz0iIiBjOmJsPSIiIGE6YnA9IiIgYm49IiIgYjphcj0iIiBjOmNkPSIiIGE6ZGg9IiIgZGE9IiIgYjpjZT0iIiBjOmF2PSIiIGI6Y3M9IiIgYzphcz0iIi8+Cis8ZSBiOmN2PSIiIGQ6ZmU9IiIgZHc9IiIgYzpjej0iIiBkOmFmPSIiIGQ6ZWs9IiIgYWQ9IiIgYjphYj0iIiBjbT0iIiBkcz0iIiBhOmJiPSIiIGQ6ZXI9IiIgYjpheT0iIiBhOmJsPSIiIGE6ZGU9IiIgZWo9IiIgYTpkYT0iIiBjOmN0PSIiIGE6ZGc9IiIgYjpleD0iIiBiOmFyPSIiIGQ6ZW49IiIgYjpmaj0iIiBjOmRyPSIiIGI6YnE9IiIgZDpjcz0iIiBkOmJnPSIiIGM6Y3g9IiIgYTplZj0iIiBhOmNlPSIiIGF2PSIiIGQ6ZXQ9IiIgYjpkZD0iIiBiOmVzPSIiIGJjPSIiIGQ6YnQ9IiIgYTpkaD0iIiBmYT0iIiBhOmFqPSIiIGE6Y249IiIgYW49IiIgYTpjaz0iIiBjOmR4PSIiIGI6ZW89IiIgZDpiaD0iIiBhOmVjPSIiIGE6Y2E9IiIgYzplYj0iIiBicD0iIiBjOmRpPSIiIGM6YmE9IiIgYjphcD0iIiBkOmRsPSIiIGE6ZWc9IiIgYjpkaz0iIiBjOmZkPSIiIGI6YXo9IiIgZXo9IiIgYms9IiIgYTphbT0iIiBkcD0iIiBjOmJqPSIiIGM6Y2k9IiIgZDpmaT0iIiBiOmJzPSIiIGI6ZHE9IiIgZDplZT0iIiBkdz0iIiBkaj0iIiBiOmJyPSIiIGQ6YXQ9IiIgYjpidT0iIiBkOmNyPSIiIGI6Zmw9IiIgYTpjbD0iIiBhOmFrPSIiIGQ6ZHk9IiIgYjplaT0iIiBjOmFxPSIiIGI6ZW09IiIgYzpjZD0iIiBkZj0iIiBjOmNwPSIiIGQ6ZXE9IiIgZmY9IiIgYzphbD0iIiBiOmJ5PSIiIGI6YmU9IiIgY2Y9IiIgZDpkbT0iIiBiOmFnPSIiIGQ6ZXA9IiIgZmM9IiIgZDpmaD0iIiBiOmNxPSIiIGQ6ZHU9IiIgZDpibT0iIiBiOmRuPSIiIGE6ZmI9IiIgYjphaT0iIiBmaz0iIiBjOmVhPSIiIGI6YWE9IiIgYzpldj0iIiBkOmNiPSIiIGM6YnY9IiIgYzpiZD0iIiBhdT0iIiBiOmZnPSIiIGQ6Zm09IiIgYjpjZz0iIiBhOmFjPSIiIGI6YWU9IiIgYmk9IiIgYzpjdT0iIiBkej0iIiBkOmR0PSIiIGQ6ZGI9IiIgZWw9IiIgYTpmbj0iIiBhOmNvPSIiIGQ6ZHY9IiIgYzphaD0iIiBkOmJ6PSIiIGQ6ZHU9IiIgZGM9IiIgYjpjYz0iIiBjOmNoPSIiIGE6ZXU9IiIgYjpldz0iIiBiOmJuPSIiIGI6YXc9IiIgYmY9IiIgZDpleT0iIiBkOmFvPSIiIGI6Y2o9IiIgZDpheD0iIiBidz0iIiBkOmFzPSIiIGI6ZWg9IiIgYTpjdz0iIiBiOmN5PSIiIGQ6ZWQ9IiIgYjpkbz0iIiBiOmJ4PSIiIGE6Ym89IiIvPgorPGUgYTphcD0iIiBkOmRrPSIiIGM6ZXQ9IiIgYzpkcD0iIiBkOmZkPSIiIGNhPSIiIGF6PSIiIGVwPSIiIGI6ZWc9IiIgYzpiYj0iIiBkZD0iIiBkOmFvPSIiIGI6ZWM9IiIgYjphdD0iIiBiOmV3PSIiIGM6ZW89IiIgYTplcT0iIiBjOmFlPSIiIGE6ZWo9IiIgZDpjbj0iIiBhOmNyPSIiIGQ6ZGY9IiIgZDpiZz0iIiBjOmVmPSIiIGF4PSIiIGE6Yms9IiIgZHE9IiIgYnc9IiIgYzpiej0iIiBjOmFzPSIiIGM6ZGw9IiIgYnM9IiIgZDpleT0iIiBkOmFsPSIiIGI6ZGE9IiIgYTpmZj0iIiBhOmRyPSIiIGRlPSIiIGQ6YXI9IiIgZDpkej0iIiBkOmR4PSIiIGE6ZXU9IiIgZDpiYz0iIiBjOmRpPSIiIGQ6YmE9IiIgYjpkdz0iIiBjOmR0PSIiIGM6Y3Q9IiIgYzpkZz0iIiBhOmFnPSIiIGI6YmQ9IiIgYjpjcT0iIiBkOmNiPSIiIGE6Y2U9IiIgY2g9IiIgZW49IiIgZDphaD0iIiBjOmFpPSIiIGE6ZWg9IiIgZDphdT0iIiBiOmN3PSIiIGQ6ZmM9IiIgZDphdj0iIiBiaz0iIiBjOmJpPSIiIGQ6Y3U9IiIgYng9IiIgZWI9IiIgYTphbj0iIiBkOmVyPSIiIGQ6ZGo9IiIgYTpidD0iIiBjcD0iIiBhOmNrPSIiIGFhPSIiIGE6YnI9IiIgYjplaz0iIiBhOmVzPSIiIGI6Ynk9IiIgYmg9IiIgYXE9IiIgY2w9IiIgYTpmbT0iIiBhOmF3PSIiIGQ6Zmg9IiIgYTpibT0iIiBiOmFjPSIiIGE6Zms9IiIgYmo9IiIgYTpmaT0iIiBldj0iIiBjOmZqPSIiIGJwPSIiIGE6YnY9IiIgZXo9IiIgYzplZT0iIiBhOmZuPSIiIGR5PSIiIGQ6YnU9IiIgYzpkdT0iIiBjOmJhPSIiIGRuPSIiIGE6ZWw9IiIgYTpjYz0iIiBkOmVtPSIiIGQ6ZWk9IiIgYjpjZD0iIiBkOmNtPSIiIGM6Y3k9IiIgYTpiZj0iIiBhYj0iIiBkOmNzPSIiIGE6YWY9IiIgYTpjZj0iIiBkOmF5PSIiIGQ6Zmw9IiIgZDpkYj0iIiBkOmFrPSIiIGE6YnE9IiIgY3g9IiIgZmU9IiIgYjplZD0iIiBjOmR2PSIiIGI6Y2k9IiIgYjpmYT0iIiBiOmV4PSIiIGFkPSIiIGM6Y289IiIgYjphaj0iIiBhOmJuPSIiIGM6ZG09IiIgZHM9IiIgYTplYT0iIiBjej0iIiBhOmNqPSIiIGI6Y2c9IiIgYTpjdj0iIiBjOmFtPSIiIGJlPSIiIGM6ZG89IiIgZDpibD0iIiBiOmRoPSIiIGI6ZGM9IiIgYzpmYj0iIiBhOmJvPSIiIGE6Zmc9IiIvPgorPGUgY2U9IiIgZDpjbD0iIiBjOmRkPSIiIGM6YnI9IiIgYjpmaD0iIiBiOmFiPSIiIGI6Y2I9IiIgYzphZT0iIiBiOmZkPSIiIGQ6Y3o9IiIgYTpibz0iIiBjOmNhPSIiIGJtPSIiIGZhPSIiIGI6ZmI9IiIgYjplbj0iIiBiaD0iIiBkOmJ1PSIiIGI6ZGc9IiIgYzphbz0iIiBlZD0iIiBhcz0iIiBiOmNiPSIiIGE6ZWM9IiIgYjpiZz0iIiBkOmJxPSIiIGE6Y2s9IiIgYjpiYj0iIiBkOmFhPSIiIGM6YXA9IiIgYzpjaj0iIiBkOmJmPSIiIGI6ZHA9IiIgYTpkbz0iIiBheT0iIiBkYz0iIiBkOmRrPSIiIGE6ZGY9IiIgZmw9IiIgYzpjZD0iIiBlbz0iIiBhOmVoPSIiIGE6Yms9IiIgYjpkaT0iIiBiOmNuPSIiIGFoPSIiIGE6ZW09IiIgYzphZD0iIiBjOmNxPSIiIGM6ZHE9IiIgYmo9IiIgZWU9IiIgYTphbT0iIiBhOmJ4PSIiIGE6YXE9IiIgZXA9IiIgYjpjaD0iIiBkOmV5PSIiIGE6Zmk9IiIgYTpiaT0iIiBjOmFuPSIiIGI6Y3M9IiIgZDpkdD0iIiBhOmVnPSIiIGRoPSIiIGF2PSIiIGJ6PSIiIGM6ZWY9IiIgZmM9IiIgYzpheD0iIiBiOmZnPSIiIGE6Ync9IiIgYTpkZT0iIiBiOmF6PSIiIGQ6YnA9IiIgYzpmaj0iIiBidD0iIiBiOmRuPSIiIGM6YWk9IiIgY209IiIgYTpjcD0iIiBleD0iIiBhOmRiPSIiIGE6YmU9IiIgYzpkeT0iIiBmbj0iIiBkaj0iIiBkOmF0PSIiIGE6ZGw9IiIgYjplcz0iIiBkOmVpPSIiIGQ6Y2c9IiIgYTpkej0iIiBiOmVrPSIiIGM6ZXo9IiIgYzpidj0iIiBiOmF1PSIiIGE6Zms9IiIgYTplaj0iIiBhOmViPSIiIGQ6ZG09IiIgYjphcj0iIiBkYT0iIiBmZj0iIiBiOmNqPSIiIGI6ZHc9IiIgYTphbD0iIiBkOmJhPSIiIGM6ZHg9IiIgYjpjaT0iIiBkOmR1PSIiIGQ6YnM9IiIgZDphaz0iIiBiOmVsPSIiIGVhPSIiIGZtPSIiIGQ6ZHY9IiIgYzpiZD0iIiBkOmNjPSIiIGN4PSIiIGI6ZXE9IiIgYzpldj0iIiBhaj0iIiBiOmRzPSIiIGN2PSIiIGJ5PSIiIGQ6ZXQ9IiIgZXI9IiIgY3Q9IiIgYTpiYz0iIiBhOmFmPSIiIGM6Y3k9IiIgYzpjcj0iIiBhOmF3PSIiIGQ6YWc9IiIgYTpjdT0iIiBjOmV1PSIiIGZlPSIiIGQ6YWM9IiIgZDpibD0iIiBjOmRyPSIiIGNvPSIiIGM6Ym49IiIgY2Y9IiIgYjpjdz0iIiBldz0iIi8+Cis8ZSBkOmNtPSIiIGE6ZGE9IiIgYTphZz0iIiBjOmFlPSIiIGQ6Y3Y9IiIgYzplcj0iIiBkOmRjPSIiIGFyPSIiIGJmPSIiIGI6YWM9IiIgYzpkcT0iIiBhaT0iIiBjOmRmPSIiIGI6ZXU9IiIgZDplZj0iIiBkOmZhPSIiIGM6ZGg9IiIgYmE9IiIgYTphbT0iIiBjOmViPSIiIGI6Y3M9IiIgZDpheT0iIiBhOmFoPSIiIGVpPSIiIGQ6Zms9IiIgYTphaj0iIiBlZz0iIiBkOmF2PSIiIGI6YWE9IiIgYjpjZT0iIiBhOmJ1PSIiIGQ6ZG89IiIgY3o9IiIgYzpiaj0iIiBjOmVsPSIiIGQ6Y2M9IiIgYjpicz0iIiBhOmRuPSIiIGI6ZGI9IiIgYzpmYz0iIiBkOmZoPSIiIGRsPSIiIGE6ZXk9IiIgYXA9IiIgYjpiZD0iIiBiOmN5PSIiIGE6Yms9IiIgY2E9IiIgZDpkeD0iIiBldD0iIiBiOmZlPSIiIGM6ZWE9IiIgYjpkZz0iIiBjOmJyPSIiIGI6ZWU9IiIgYTpmYj0iIiBldj0iIiBiOmJ6PSIiIGM6ZHk9IiIgYjpjcD0iIiBjOmJpPSIiIGJvPSIiIGNrPSIiIGQ6ZWM9IiIgZDpmZj0iIiBiOmNiPSIiIGM6ZHQ9IiIgYjpmbj0iIiBjOmRqPSIiIGE6Y3c9IiIgYjpkaT0iIiBjOmRkPSIiIGJuPSIiIGQ6ZXo9IiIgZDpkcj0iIiBhOmFkPSIiIGQ6ZWs9IiIgYjpjcT0iIiBhbj0iIiBidz0iIiBjdD0iIiBhbz0iIiBkaz0iIiBiOmVtPSIiIGJ2PSIiIGJxPSIiIGR2PSIiIGNnPSIiIGV4PSIiIGM6Ymc9IiIgYTpjbz0iIiBkOmF0PSIiIGNyPSIiIGM6YWY9IiIgYjpibT0iIiBhOmJjPSIiIGM6Zmk9IiIgYXc9IiIgYTpibD0iIiBhOmNqPSIiIGI6Zmc9IiIgYTphdT0iIiBkOmZtPSIiIGVkPSIiIGE6Zmo9IiIgY2Y9IiIgYjplaD0iIiBiOmFzPSIiIGM6ZWo9IiIgZHc9IiIgZDpidD0iIiBhOmR1PSIiIGM6ZG09IiIgY2k9IiIgYWw9IiIgZHo9IiIgYTpieT0iIiBjOmJoPSIiIGFiPSIiIGJwPSIiIGM6ZXc9IiIgZW49IiIgYjpiYj0iIiBkOmNoPSIiIGI6Y2w9IiIgYzpjcT0iIiBiOmFxPSIiIGE6YXo9IiIgZmQ9IiIgYTphaz0iIiBjOmVzPSIiIGJ0PSIiIGN4PSIiIGRlPSIiIGNkPSIiIGI6YmU9IiIgYTpkcD0iIiBkOmVxPSIiIGM6ZXA9IiIgZDpheD0iIiBhOmNuPSIiIGVvPSIiIGN1PSIiIGI6Yng9IiIgZHM9IiIgYTpmbD0iIi8+Cis8ZSBjOmFiPSIiIGFqPSIiIGI6Y2w9IiIgZDpkZz0iIiBmaT0iIiBkOmJ5PSIiIGQ6YW09IiIgYjpmaz0iIiBiOmFwPSIiIGQ6ZWU9IiIgYjpjej0iIiBjOmJrPSIiIGQ6ZWo9IiIgYTphdz0iIiBjOmNhPSIiIGJ0PSIiIGE6Y3U9IiIgYTpiYT0iIiBheT0iIiBlYT0iIiBiOmJsPSIiIGM6ZGo9IiIgYzpjcD0iIiBjOmN5PSIiIGQ6Y3I9IiIgZDpibz0iIiBiOmJnPSIiIGE6ZXE9IiIgYWs9IiIgZHY9IiIgYjpmaj0iIiBkOmFpPSIiIGViPSIiIGI6ZHc9IiIgYjpjYj0iIiBhOmJyPSIiIGRxPSIiIGE6YW49IiIgYnM9IiIgYzpldT0iIiBlYz0iIiBkOmNxPSIiIGM6YmI9IiIgYjpkeD0iIiBhOmN0PSIiIGM6ZGg9IiIgYjplcz0iIiBhOmJlPSIiIGNoPSIiIGQ6Y2s9IiIgZDpiej0iIiBhdj0iIiBhOmNlPSIiIGM6ZG49IiIgYjpjdz0iIiBiaD0iIiBjOmJuPSIiIGE6Y2Y9IiIgYjpjZD0iIiBhOmV2PSIiIGM6Yng9IiIgZDpkZD0iIiBiOmVrPSIiIGM6YWU9IiIgZDpicT0iIiBmZz0iIiBhOmJtPSIiIGQ6Y2M9IiIgYjphcz0iIiBhOmZtPSIiIGZjPSIiIGE6Y289IiIgYzpkbz0iIiBiOmF1PSIiIGZhPSIiIGI6YWw9IiIgYTphZz0iIiBkOmFmPSIiIGI6ZXI9IiIgYTpiaT0iIiBkOmVuPSIiIGVmPSIiIGE6ZHA9IiIgYjpldz0iIiBjOmJjPSIiIGI6ZHM9IiIgZDpidz0iIiBiOmRtPSIiIGI6ZmU9IiIgYTpkeT0iIiBjOmRsPSIiIGI6ZHo9IiIgZDpicD0iIiBheD0iIiBhOmF6PSIiIGI6ZmQ9IiIgYzphZD0iIiBkOmFoPSIiIGI6Y3Y9IiIgZDpiZj0iIiBiOmZmPSIiIGQ6ZXg9IiIgZXA9IiIgYzpmbj0iIiBiOmRlPSIiIGQ6ZHU9IiIgZDplaT0iIiBkYT0iIiBkOmNqPSIiIGQ6YWE9IiIgYzplej0iIiBiOmJ1PSIiIGFxPSIiIGQ6ZGk9IiIgYTplZD0iIiBjOmVnPSIiIGQ6Y3M9IiIgZXQ9IiIgYjpjbj0iIiBjaT0iIiBkYz0iIiBkZj0iIiBlaD0iIiBhOmRyPSIiIGI6ZGs9IiIgYjphbz0iIiBkOmRiPSIiIGNtPSIiIGM6YmE9IiIgZDplbD0iIiBleT0iIiBkOmFyPSIiIGQ6ZHQ9IiIgYzplbT0iIiBhOmF0PSIiIGM6Zmw9IiIgZDphYz0iIiBjOmJqPSIiIGQ6ZmI9IiIgZDpjdT0iIiBiOmJ2PSIiIGQ6YmQ9IiIgYTpmaD0iIiBjeD0iIiBlbz0iIiBjOmNnPSIiLz4KKzxlIGI6YmI9IiIgZGY9IiIgYTpidj0iIiBhOmF1PSIiIGFzPSIiIGNvPSIiIGQ6ZmY9IiIgYzpiZT0iIiBiOmJoPSIiIGM6Ymc9IiIgY3U9IiIgY2w9IiIgYjpjcz0iIiBjOmZiPSIiIGM6ZHM9IiIgYjpkaD0iIiBjOmVnPSIiIGE6YXc9IiIgYTpmZz0iIiBhOmNqPSIiIGE6YnA9IiIgZmk9IiIgY3k9IiIgYjpmbT0iIiBjdz0iIiBhOmFwPSIiIGE6ZXc9IiIgYTpkYj0iIiBjOmFqPSIiIGI6YXE9IiIgZW09IiIgY2U9IiIgZDplcD0iIiBhZT0iIiBjOmJuPSIiIGM6ZGs9IiIgZHI9IiIgYjplZD0iIiBhOmRtPSIiIGE6ZHc9IiIgZDpieD0iIiBkbD0iIiBjOmJvPSIiIGM6ZmM9IiIgYTpheD0iIiBhOmV1PSIiIGI6ZXE9IiIgYTplcz0iIiBhOmR6PSIiIGNuPSIiIGVpPSIiIGQ6YWk9IiIgYjpjdD0iIiBjZj0iIiBicz0iIiBiOmZpPSIiIGI6YmM9IiIgZDplcj0iIiBkOmFoPSIiIGE6ZHE9IiIgYjpjYz0iIiBkOmVmPSIiIGNpPSIiIGI6Y3I9IiIgYTphaz0iIiBkOmRkPSIiIGNtPSIiIGE6YmY9IiIgYzpmZT0iIiBhOmJrPSIiIGM6ZWM9IiIgYTpjej0iIiBkOmJpPSIiIGI6Zms9IiIgYjpkcD0iIiBhbj0iIiBhOmRqPSIiIGE6Y3Y9IiIgYTpkeT0iIiBkOmJtPSIiIGE6YnI9IiIgYTpjcT0iIiBkOmV4PSIiIGI6ZWs9IiIgY2g9IiIgZDpmbj0iIiBmaj0iIiBiOmFvPSIiIGM6ZWo9IiIgYjpkZz0iIiBkOmV2PSIiIGQ6Zmg9IiIgYjpkYT0iIiBiOmFmPSIiIGE6ZGU9IiIgYjpmZD0iIiBjOmJ5PSIiIGQ6Y2E9IiIgYjphYz0iIiBjOmF6PSIiIGE6ZXk9IiIgYzpjZz0iIiBjeD0iIiBhZD0iIiBhOmNwPSIiIGM6ZWg9IiIgZDpjZD0iIiBhOmViPSIiIGQ6YnQ9IiIgYmQ9IiIgZG49IiIgYjpidz0iIiBjOmJxPSIiIGQ6Ymw9IiIgZXo9IiIgZDpkaT0iIiBkbz0iIiBhOmJhPSIiIGE6Ymo9IiIgYzphbT0iIiBjOmZsPSIiIGI6YnU9IiIgYzplbj0iIiBiOmJ6PSIiIGM6Y2s9IiIgYTphdD0iIiBhOmR1PSIiIGM6YXk9IiIgZDpkeD0iIiBhZz0iIiBhOmVhPSIiIGQ6Y2I9IiIgZHQ9IiIgYTpmYT0iIiBhOmF2PSIiIGQ6ZW89IiIgY2c9IiIgZDpldD0iIiBhOmFyPSIiIGQ6ZWU9IiIgYWw9IiIgZDphYT0iIiBlbD0iIiBkOmRjPSIiIGQ6ZHY9IiIgYTphYj0iIi8+Cis8ZSBhOmN0PSIiIGE6YmM9IiIgYjpkZD0iIiBjOmRjPSIiIGV3PSIiIGQ6YnA9IiIgYjpiYT0iIiBkOmRoPSIiIGM6ZXU9IiIgYTpkYT0iIiBjOmVoPSIiIGQ6ZXE9IiIgZDpkeD0iIiBlYj0iIiBkZj0iIiBkOmFhPSIiIGE6Y3c9IiIgYzpmYz0iIiBjOmJmPSIiIGI6Y2M9IiIgYzpiZD0iIiBhOmRwPSIiIGNiPSIiIGM6Ymc9IiIgZG89IiIgY2w9IiIgYzpjbz0iIiBlZT0iIiBiOmFmPSIiIGM6Ym89IiIgYTpmaT0iIiBkOmNkPSIiIGM6Y3M9IiIgZGo9IiIgZDphbD0iIiBkOmZlPSIiIGI6ZHQ9IiIgYmw9IiIgZDphZz0iIiBjOmRpPSIiIGI6ZW49IiIgYTpjaT0iIiBkcz0iIiBieD0iIiBjOmNyPSIiIGFlPSIiIGQ6ZXM9IiIgYjpmaz0iIiBjOmN4PSIiIGRsPSIiIGQ6Yno9IiIgYTphZD0iIiBjOmVwPSIiIGM6YXQ9IiIgYnc9IiIgZDpjbj0iIiBiOmFxPSIiIGM6ZXo9IiIgYTpiaT0iIiBhOmRiPSIiIGI6ZGc9IiIgYjplYT0iIiBjOmJ0PSIiIGE6Ymo9IiIgZDpjYT0iIiBjOmZiPSIiIGJtPSIiIGM6ZHI9IiIgYWo9IiIgYzphaT0iIiBkOmJzPSIiIGE6YXU9IiIgZDpjej0iIiBkOmR1PSIiIGM6ZHE9IiIgYjplcj0iIiBjOmNxPSIiIGE6ZHk9IiIgZmw9IiIgYzpheT0iIiBhOmR3PSIiIGQ6YnY9IiIgYms9IiIgYjphYz0iIiBkOmFuPSIiIGQ6Y2g9IiIgZm49IiIgZG09IiIgYTpieT0iIiBlbT0iIiBiOmVjPSIiIGM6YXY9IiIgYTpjZz0iIiBldD0iIiBidT0iIiBjOmFwPSIiIGFvPSIiIGFyPSIiIGQ6ZG49IiIgZDpjeT0iIiBiOmN1PSIiIGI6Ym49IiIgYnI9IiIgYTpiaD0iIiBmaj0iIiBjOmFoPSIiIGI6ZGU9IiIgYjpjZT0iIiBhOmZtPSIiIGF3PSIiIGM6ZW89IiIgZWc9IiIgYTplZj0iIiBlaj0iIiBhbT0iIiBhOmJlPSIiIGI6ZGs9IiIgYzplaz0iIiBkOmVsPSIiIGM6ZGU9IiIgZHY9IiIgYzpheD0iIiBicT0iIiBiOmVpPSIiIGI6Y3A9IiIgYjphYj0iIiBhOmFrPSIiIGI6ZXg9IiIgZDpjbT0iIiBjaz0iIiBhOmV2PSIiIGE6ZmQ9IiIgZmc9IiIgZDphej0iIiBhOmZhPSIiIGI6Yng9IiIgYTphcz0iIiBhOmNmPSIiIGM6ZWQ9IiIgYTpleT0iIiBkej0iIiBjOmJiPSIiIGN2PSIiIGI6Zmg9IiIgYzpjaj0iIiBjOmZmPSIiLz4KKzxlIGI6Yng9IiIgYTpleT0iIiBhOmZjPSIiIGI6ZG09IiIgZDphcj0iIiBiOmRpPSIiIGI6Yms9IiIgYjphdD0iIiBiOmZqPSIiIGM6ZGU9IiIgYjpjYj0iIiBhOmRoPSIiIGE6ZXY9IiIgY2k9IiIgYzpjaD0iIiBhOmFsPSIiIGM6Y2E9IiIgYzpmaD0iIiBkeD0iIiBhOmNzPSIiIGE6Y3o9IiIgY3A9IiIgYjpkeT0iIiBjdT0iIiBjOmFqPSIiIGM6Y2Y9IiIgYjplbT0iIiBkOmV3PSIiIGJvPSIiIGQ6Y289IiIgYTpjdz0iIiBhcD0iIiBibD0iIiBjOmVsPSIiIGM6ZHY9IiIgYTplZz0iIiBmbD0iIiBiOmVyPSIiIGJkPSIiIGQ6YXk9IiIgYWY9IiIgYTplZT0iIiBlcT0iIiBiOmNjPSIiIGJlPSIiIGI6ZWQ9IiIgZDpkdT0iIiBkdz0iIiBkOmN2PSIiIGNnPSIiIGQ6YWM9IiIgYjphdz0iIiBjOmN0PSIiIGRkPSIiIGRhPSIiIGQ6Zms9IiIgYjphZT0iIiBiOmNqPSIiIGNrPSIiIGI6ZHQ9IiIgZmY9IiIgZXo9IiIgYjplbj0iIiBjOmJ0PSIiIGQ6Y2w9IiIgYzpkbj0iIiBhOmJzPSIiIGJtPSIiIGM6YW09IiIgYjpkaj0iIiBiOmN4PSIiIGFzPSIiIGQ6ZWI9IiIgZDplaD0iIiBhOmV4PSIiIGRxPSIiIGRyPSIiIGRnPSIiIGV1PSIiIGZuPSIiIGF4PSIiIGI6ZWo9IiIgY209IiIgYTpiaj0iIiBmYT0iIiBkOmJ2PSIiIGE6ZWk9IiIgYTpkcD0iIiBkcz0iIiBjOmNyPSIiIGE6YnI9IiIgZWM9IiIgZDpicD0iIiBkOmF4PSIiIGE6YmE9IiIgYjphdj0iIiBiOmR6PSIiIGQ6ZmI9IiIgYjpidT0iIiBjOmZpPSIiIGJmPSIiIGJjPSIiIGQ6Ynk9IiIgY249IiIgY2U9IiIgYTpibj0iIiBiZz0iIiBkOmRjPSIiIGE6Y2Q9IiIgYno9IiIgYmk9IiIgYWg9IiIgYTplcz0iIiBkOmVwPSIiIGRrPSIiIGE6YmI9IiIgYzphZD0iIiBhbj0iIiBhOmF1PSIiIGFnPSIiIGJoPSIiIGI6YWE9IiIgYzplbz0iIiBhOmJxPSIiIGZtPSIiIGJ3PSIiIGI6YWI9IiIgYzpmZz0iIiBkYj0iIiBkOmF6PSIiIGI6ZWE9IiIgYTphaT0iIiBiOmZkPSIiIGRvPSIiIGI6Y3k9IiIgYTpmZT0iIiBiOmV0PSIiIGM6ZmU9IiIgZDpkbD0iIiBjOmVmPSIiIGQ6ZWs9IiIgYjphcT0iIiBkOmRmPSIiIGQ6YW89IiIgYzphaz0iIiBjOmNxPSIiLz4KKzxlIGZrPSIiIGE6Ymc9IiIgZXY9IiIgYTpjaj0iIiBiOmNpPSIiIGI6Ynk9IiIgYjpieD0iIiBhOmJuPSIiIGI6Zmk9IiIgZDpiZT0iIiBkZT0iIiBlZj0iIiBkOmNzPSIiIGNmPSIiIGE6ZHc9IiIgZDpjaD0iIiBkOmJ6PSIiIGQ6ZWk9IiIgY2U9IiIgYzpjbj0iIiBiOmJ3PSIiIGJwPSIiIGE6Y3A9IiIgZW89IiIgYzpjYz0iIiBhOmNnPSIiIGQ6YmI9IiIgZG09IiIgYTpibT0iIiBkOmVvPSIiIGM6YXo9IiIgZGQ9IiIgYjpjaz0iIiBjOmRsPSIiIGRzPSIiIGE6ZXQ9IiIgYTphaj0iIiBhOmRrPSIiIGQ6YXM9IiIgYmY9IiIgYW49IiIgYzpmbD0iIiBhOmVrPSIiIGQ6Y2E9IiIgYTpkaT0iIiBhOmZkPSIiIGI6ZWM9IiIgYTpicj0iIiBlcD0iIiBhOmNkPSIiIGQ6ZW09IiIgYjplcj0iIiBiOmF2PSIiIGN3PSIiIGM6YWU9IiIgYnU9IiIgYjpkaD0iIiBkOmVuPSIiIGM6ZG49IiIgYzpleT0iIiBkOmNsPSIiIGZqPSIiIGQ6YW09IiIgYzpmYj0iIiBjOmF5PSIiIGZoPSIiIGJvPSIiIGM6YnY9IiIgYTpmZz0iIiBheD0iIiBjej0iIiBkcj0iIiBjOmV1PSIiIGI6ZmM9IiIgYzpjcj0iIiBjOmFjPSIiIGFrPSIiIGQ6ZHQ9IiIgZWo9IiIgZDpleD0iIiBiOmF0PSIiIGI6YnM9IiIgZXM9IiIgZGY9IiIgZDpidD0iIiBhOmVoPSIiIGI6Ymw9IiIgYTpjeD0iIiBiaj0iIiBjOmFmPSIiIGR4PSIiIGE6ZWI9IiIgYTpjdj0iIiBkOmV6PSIiIGQ6ZWQ9IiIgZHo9IiIgZGI9IiIgZDpmZT0iIiBmbT0iIiBjOmFyPSIiIGM6YXc9IiIgZDplZz0iIiBmYT0iIiBkZz0iIiBlYT0iIiBkOmVxPSIiIGE6YmM9IiIgYjpkcD0iIiBkOmNvPSIiIGN5PSIiIGM6Ymk9IiIgY2I9IiIgYjpkeT0iIiBkOmN1PSIiIGJxPSIiIGF1PSIiIGE6ZGM9IiIgYzphaD0iIiBiOmJoPSIiIGNxPSIiIGE6ZHY9IiIgYzpldz0iIiBkOmJyPSIiIGM6ZG89IiIgYzpiZD0iIiBhcT0iIiBjOmZmPSIiIGQ6Zm49IiIgYzpjdD0iIiBjOmFwPSIiIGE6YWI9IiIgYzphbD0iIiBkOmR1PSIiIGE6ZGo9IiIgYjplZT0iIiBhOmFpPSIiIGQ6YWE9IiIgYTpjbT0iIiBjOmRxPSIiIGM6YW89IiIgYzphZz0iIiBiOmFkPSIiIGE6YmE9IiIgYms9IiIgYTplbD0iIiBkOmRhPSIiLz4KKzxlIGQ6ZmM9IiIgYjpjZD0iIiBkOmFiPSIiIGE6Zmc9IiIgYTpheD0iIiBiZz0iIiBjdz0iIiBjOmF1PSIiIGM6Y289IiIgZDplbT0iIiBhOmFpPSIiIGM6YWM9IiIgZGw9IiIgYzpjZT0iIiBiOmF0PSIiIGM6ZGc9IiIgYTplYj0iIiBkOmJ2PSIiIGV1PSIiIGM6ZmQ9IiIgZDphYT0iIiBiOmFzPSIiIGN4PSIiIGE6YWQ9IiIgYjpicD0iIiBhaj0iIiBjOmFlPSIiIGNxPSIiIGRiPSIiIGI6ZWY9IiIgYzpidT0iIiBkOmZoPSIiIGQ6YW89IiIgZDpjcj0iIiBkOmR1PSIiIGM6ZW89IiIgYzpmYT0iIiBkOmVrPSIiIGNnPSIiIGV3PSIiIGI6YmM9IiIgZms9IiIgY2E9IiIgZDpmaj0iIiBjYz0iIiBhOmVyPSIiIGE6Y2o9IiIgYTpjbD0iIiBkOmV0PSIiIGM6ZHE9IiIgYzpmbj0iIiBkOmNtPSIiIGNmPSIiIGI6ZWk9IiIgZDplYz0iIiBkOmJmPSIiIGE6Y249IiIgYTpicj0iIiBkOmJ3PSIiIGRuPSIiIGI6Y2s9IiIgYzplZz0iIiBiOmNwPSIiIGQ6ZmI9IiIgYTpiYT0iIiBiOmNpPSIiIGQ6ZWg9IiIgZW49IiIgYzplaj0iIiBjOmJ4PSIiIGE6ZG09IiIgZDpidD0iIiBiOmVlPSIiIGRrPSIiIGFwPSIiIGQ6YmU9IiIgZDpkcj0iIiBkOmR5PSIiIGM6ZWE9IiIgYjphaD0iIiBjOmJrPSIiIGM6ZGU9IiIgZHA9IiIgZWw9IiIgYjpibz0iIiBjYj0iIiBmaT0iIiBjej0iIiBhOmFsPSIiIGN0PSIiIGJoPSIiIGI6ZXo9IiIgZWs9IiIgYWY9IiIgZDpkeD0iIiBjOmV2PSIiIGE6Yno9IiIgYmw9IiIgYTplcD0iIiBkOmRmPSIiIGV4PSIiIGRvPSIiIGQ6ZHo9IiIgYmo9IiIgYXk9IiIgYjplcT0iIiBhcj0iIiBiOmN1PSIiIGQ6ZHQ9IiIgY3M9IiIgZGE9IiIgYzpkdz0iIiBkOmJxPSIiIGM6YWc9IiIgYnk9IiIgYjpjaD0iIiBiOmFrPSIiIGI6ZHY9IiIgYzphbj0iIiBhOmRzPSIiIGI6YmQ9IiIgYjplZD0iIiBjOmJiPSIiIGI6YXo9IiIgYzpkaj0iIiBjOmFxPSIiIGQ6Y3k9IiIgZDpkaD0iIiBmZj0iIiBhOmF2PSIiIGRkPSIiIGM6Ym49IiIgYXc9IiIgYXk9IiIgYTpleT0iIiBiOmN2PSIiIGQ6Ymk9IiIgYjpmbD0iIiBmZT0iIiBiOmFtPSIiIGM6Zm09IiIgYzpkaT0iIiBicz0iIiBkYz0iIiBiOmJtPSIiIGVzPSIiLz4KKzxlIGQ6ZW09IiIgYzpldT0iIiBhaj0iIiBjOmNoPSIiIGI6YWY9IiIgYjpkdj0iIiBkOmRpPSIiIGI6Ym09IiIgYmM9IiIgYzpjaT0iIiBjOmRvPSIiIGI6Zmw9IiIgYjpmbT0iIiBjOmViPSIiIGE6ZHQ9IiIgYzpjYT0iIiBieT0iIiBjOmFvPSIiIGM6ZXA9IiIgYTplej0iIiBjOmF4PSIiIGI6Y3Q9IiIgZDplaT0iIiBjZD0iIiBkZz0iIiBhOmVrPSIiIGM6YmY9IiIgYmU9IiIgZGU9IiIgYW49IiIgY209IiIgY3o9IiIgYjplaD0iIiBkOmFlPSIiIGQ6ZGs9IiIgYjpjYz0iIiBjOmV2PSIiIGM6Y3M9IiIgYXE9IiIgZDplaj0iIiBhOmJvPSIiIGRyPSIiIGVsPSIiIGM6YmQ9IiIgZDpjdz0iIiBjOmFwPSIiIGM6ZHU9IiIgZDphdj0iIiBiOmNwPSIiIGVjPSIiIGE6Y3I9IiIgYjpkbT0iIiBibD0iIiBhOmN4PSIiIGE6YnM9IiIgZDplZz0iIiBidj0iIiBkbD0iIiBjOmFoPSIiIGQ6YXk9IiIgYTpmaD0iIiBiOmVyPSIiIGI6ZXk9IiIgYXc9IiIgYzpiaz0iIiBlcz0iIiBiOmVkPSIiIGI6YXU9IiIgZWE9IiIgYTphej0iIiBidD0iIiBjOmFnPSIiIGQ6Zms9IiIgZmE9IiIgYTpiej0iIiBjOmFsPSIiIGQ6YXI9IiIgYTphYT0iIiBjOmJyPSIiIGNjPSIiIGM6ZXE9IiIgYzphaz0iIiBiOmNrPSIiIGQ6ZHA9IiIgYzpleD0iIiBkeT0iIiBiOmVmPSIiIGM6ZXc9IiIgZDpjZj0iIiBhOmRhPSIiIGNsPSIiIGM6Ymk9IiIgYTpldD0iIiBhOmFpPSIiIGJxPSIiIGQ6Ym49IiIgZGM9IiIgYmI9IiIgYTpkcz0iIiBhOmNvPSIiIGQ6YnU9IiIgZDpieD0iIiBiOmN5PSIiIGI6ZWU9IiIgZmk9IiIgYTphYz0iIiBkOmJhPSIiIGRuPSIiIGM6ZmM9IiIgYTpicD0iIiBkOmZkPSIiIGNiPSIiIGM6ZGo9IiIgYjpjZz0iIiBhOmRoPSIiIGM6Zm09IiIgZDphZD0iIiBjOmFzPSIiIGE6ZHo9IiIgZmY9IiIgYzpkeD0iIiBkOmNqPSIiIGQ6ZHc9IiIgYW09IiIgYjpkcT0iIiBhOmRmPSIiIGFiPSIiIGE6Y3U9IiIgZDphdD0iIiBhOmRkPSIiIGE6ZmI9IiIgY3E9IiIgYTpiaD0iIiBiOmN2PSIiIGI6ZW89IiIgZDpiaj0iIiBiOmVuPSIiIGZuPSIiIGZnPSIiIGJ3PSIiIGM6Zmo9IiIgZDpjbj0iIiBjOmJnPSIiIGRiPSIiIGNlPSIiIGE6ZmU9IiIvPgorPGUgYzphdD0iIiBhOmFxPSIiIGI6YWU9IiIgYjpiej0iIiBkOmR5PSIiIGZqPSIiIGI6Y2k9IiIgYWk9IiIgYzpheD0iIiBhOmJ3PSIiIGE6ZWk9IiIgYTpkdD0iIiBjOmR6PSIiIGM6Y3I9IiIgYzpmaD0iIiBiOmFoPSIiIGE6ZmM9IiIgYmY9IiIgZDphaj0iIiBiOmNhPSIiIGM6ZGc9IiIgYzpjbz0iIiBjOmZlPSIiIGE6ZGk9IiIgYjpmaz0iIiBjOmVtPSIiIGQ6ZXk9IiIgYzplYz0iIiBiOmZmPSIiIGM6YXU9IiIgYTphZD0iIiBldj0iIiBhOmJrPSIiIGJpPSIiIGQ6ZGI9IiIgYXY9IiIgZDplbj0iIiBiOmJuPSIiIGE6YW89IiIgZDphZz0iIiBiOmJqPSIiIGQ6ZWU9IiIgYTpjcz0iIiBidT0iIiBicT0iIiBhYT0iIiBiZz0iIiBjbT0iIiBmYT0iIiBjdz0iIiBiOmNuPSIiIGI6YXk9IiIgYjpkcz0iIiBiOmRqPSIiIGI6ZG09IiIgZDpmaT0iIiBiOmVqPSIiIGE6ZGU9IiIgYzpiYz0iIiBkOmNiPSIiIGR1PSIiIGM6Y2o9IiIgZDpibT0iIiBhOmRyPSIiIGE6Zmw9IiIgYTplbD0iIiBkcT0iIiBiOmNmPSIiIGM6Zmc9IiIgYzplYT0iIiBhOmJ2PSIiIGM6YmE9IiIgZHg9IiIgYTpicz0iIiBiOmV3PSIiIGE6Y3Q9IiIgYzpkZj0iIiBiOmRwPSIiIGN2PSIiIGI6Y3E9IiIgYTpkZD0iIiBjOmR2PSIiIGQ6Ymw9IiIgYzplaz0iIiBkOmV1PSIiIGNnPSIiIGI6ZXI9IiIgYnI9IiIgYng9IiIgYzphbT0iIiBjOmVvPSIiIGFrPSIiIGE6Y3U9IiIgZGs9IiIgYjpjdz0iIiBkYT0iIiBkbj0iIiBjOmVnPSIiIGVmPSIiIGVkPSIiIGQ6YnQ9IiIgYjpjaD0iIiBhOmRsPSIiIGRoPSIiIGE6Y3o9IiIgZDpjYz0iIiBiOmNsPSIiIGE6ZWg9IiIgYnA9IiIgYjpieT0iIiBjOmFuPSIiIGE6ZmQ9IiIgYzplYj0iIiBhcz0iIiBiOmZtPSIiIGZuPSIiIGE6YXc9IiIgY3k9IiIgYjphbD0iIiBiOmF6PSIiIGE6ZXo9IiIgZXA9IiIgYzphcj0iIiBkOmZiPSIiIGI6ZG89IiIgZXM9IiIgZDpiZT0iIiBiOmJvPSIiIGI6Y3g9IiIgYXA9IiIgYzpkYz0iIiBkOmNrPSIiIGI6Y2Q9IiIgYzphYj0iIiBjOmJiPSIiIGI6Y2U9IiIgZXQ9IiIgYzplcT0iIiBiZD0iIiBkOmR3PSIiIGE6Y3A9IiIgYTphYz0iIiBjOmJoPSIiIGM6ZXg9IiIgYzpjdT0iIiBiOmFmPSIiLz4KKzxlIGI6YmI9IiIgYXk9IiIgYnM9IiIgZW89IiIgYTpmZj0iIiBkOmRxPSIiIGM6ZXM9IiIgYTphbD0iIiBiOmJ3PSIiIGM6Y2E9IiIgZWI9IiIgYzpkcj0iIiBkOmVuPSIiIGQ6Ymw9IiIgYjpkbT0iIiBmYz0iIiBhOmNmPSIiIGQ6ZGU9IiIgZDphYz0iIiBjOmVsPSIiIGM6Ymw9IiIgYTpjaj0iIiBiOmNpPSIiIGV3PSIiIGI6Y3o9IiIgYzpkZD0iIiBkOmZoPSIiIGI6YXc9IiIgYzpmbj0iIiBjOmJtPSIiIGR2PSIiIGI6Ymc9IiIgZGg9IiIgZDphbj0iIiBkOmFtPSIiIGM6ZGs9IiIgYjpmaz0iIiBidj0iIiBhOmJkPSIiIGM6YWs9IiIgYzpiYT0iIiBkcD0iIiBhOmFmPSIiIGI6Y3U9IiIgYjpkeT0iIiBhOmN5PSIiIGE6YXM9IiIgZDpjbz0iIiBkOmVlPSIiIGM6ZGY9IiIgYTphZD0iIiBjOmR4PSIiIGM6ZWk9IiIgYzpicj0iIiBiOmVrPSIiIGQ6Y2g9IiIgYjpldD0iIiBiOmJqPSIiIGFhPSIiIGE6Zmo9IiIgYzpkdz0iIiBjOmVkPSIiIGE6YXI9IiIgYjplaD0iIiBkbD0iIiBlZz0iIiBjOmNxPSIiIGV1PSIiIGI6ZGo9IiIgZHM9IiIgYjphdT0iIiBmbT0iIiBiOmJrPSIiIGJjPSIiIGE6Y209IiIgYW89IiIgYTpjdj0iIiBlbT0iIiBiOmV5PSIiIGI6Y3c9IiIgYzphdj0iIiBkOmZsPSIiIGE6ZXE9IiIgYzpmaT0iIiBhOmFnPSIiIGM6Y2w9IiIgY2s9IiIgZmI9IiIgYzpkaT0iIiBlaj0iIiBkOmFhPSIiIGQ6ZG49IiIgYTphZT0iIiBhcD0iIiBmZT0iIiBhOmN4PSIiIGM6Y2M9IiIgZWY9IiIgYnk9IiIgYjpldj0iIiBkOmFxPSIiIGQ6ZXg9IiIgYTpiZT0iIiBkOmR0PSIiIGM6ZXI9IiIgYnU9IiIgYTphdD0iIiBiOmF6PSIiIGM6Yng9IiIgYjpiaD0iIiBkOmNuPSIiIGRhPSIiIGE6Y2U9IiIgYTpjcz0iIiBhOmR6PSIiIGJvPSIiIGM6ZHU9IiIgZDpkYj0iIiBiOmNnPSIiIGM6Y2Q9IiIgYjpjdD0iIiBjYj0iIiBhOmJwPSIiIGQ6YmY9IiIgYTphaD0iIiBhYj0iIiBhOmZnPSIiIGQ6ZWE9IiIgYTpkYz0iIiBhOmV6PSIiIGI6YXg9IiIgYjpkZz0iIiBkbz0iIiBjOmNwPSIiIGI6Yno9IiIgYjphaj0iIiBhOmJuPSIiIGJ0PSIiIGFpPSIiIGI6ZmQ9IiIgYmk9IiIgYzpjcj0iIiBicT0iIiBiOmVjPSIiIGE6ZXA9IiIgYjpmYT0iIi8+Cis8ZSBiOmFnPSIiIGQ6ZW89IiIgYTpmbD0iIiBkOmNjPSIiIGM6YWs9IiIgYjpmZz0iIiBhOmFiPSIiIGM6ZXE9IiIgYzpiaj0iIiBjcj0iIiBlej0iIiBiOmFwPSIiIGI6Y2o9IiIgYjpkeT0iIiBkcT0iIiBjOmNzPSIiIGQ6Zm49IiIgZXg9IiIgYTpmZj0iIiBjOmJjPSIiIGV2PSIiIGJkPSIiIGQ6ZGY9IiIgYzpkdz0iIiBkOmNkPSIiIGN3PSIiIGI6ZmE9IiIgZDpmZD0iIiBhbD0iIiBldD0iIiBjOmJuPSIiIGI6Y3A9IiIgYzphdj0iIiBhOmR4PSIiIGJxPSIiIGI6ZHU9IiIgZDphbz0iIiBiOmNmPSIiIGI6ZWY9IiIgYjpkYT0iIiBkbj0iIiBhOmVzPSIiIGI6Y3Y9IiIgZGk9IiIgYTplcj0iIiBhOmZqPSIiIGE6Yng9IiIgYTplYT0iIiBjOmVsPSIiIGQ6YXM9IiIgYTpjaD0iIiBkOmRxPSIiIGQ6YnI9IiIgZXk9IiIgYTphYz0iIiBhdT0iIiBjOmVkPSIiIGJoPSIiIGI6ZWs9IiIgYzpidT0iIiBhOmFuPSIiIGM6YWg9IiIgZDpiYT0iIiBiOmRkPSIiIGNtPSIiIGI6Ymw9IiIgYzphYT0iIiBibT0iIiBhOmN0PSIiIGQ6ZHQ9IiIgYzpkbD0iIiBhOmVqPSIiIGE6YmI9IiIgZDpiaT0iIiBlbT0iIiBjOmFmPSIiIGE6YnQ9IiIgYTpidj0iIiBkOmN1PSIiIGE6Zmk9IiIgYjphcT0iIiBldz0iIiBjOmZjPSIiIGM6Y3g9IiIgZGI9IiIgYjpheT0iIiBjOmJrPSIiIGE6YnM9IiIgYTphbT0iIiBjOmR6PSIiIGI6ZWg9IiIgZDpjZT0iIiBjOmZtPSIiIGM6YXQ9IiIgZDplcD0iIiBkaj0iIiBicD0iIiBjOmFlPSIiIGNnPSIiIGE6ZHA9IiIgZDphdz0iIiBhOmRlPSIiIGQ6ZWI9IiIgYzpheD0iIiBjOmRrPSIiIGI6YmY9IiIgYzpkdj0iIiBkOmZiPSIiIGI6ZWU9IiIgYWQ9IiIgYTphej0iIiBkOmZoPSIiIGM6Y249IiIgY3E9IiIgZGM9IiIgYzpjYj0iIiBkOmVpPSIiIGE6Y2k9IiIgYWk9IiIgYjpldT0iIiBjOmRvPSIiIGNsPSIiIGI6Ync9IiIgZDpjaz0iIiBkOmVuPSIiIGM6ZWY9IiIgYjplZz0iIiBkZz0iIiBkOmRtPSIiIGI6Ynk9IiIgZDpiej0iIiBiOmFqPSIiIGQ6Y289IiIgYjpkcj0iIiBkOmJlPSIiIGE6ZmU9IiIgZHM9IiIgY3k9IiIgZms9IiIgYzpjej0iIiBhcj0iIiBiOmRoPSIiIGM6Y2E9IiIgYzplYz0iIiBjOmJnPSIiIGI6Ym89IiIvPgorPGUgYjpmaj0iIiBkOmVlPSIiIGE6ZGw9IiIgYjpkbz0iIiBjdT0iIiBiYj0iIiBiOmVqPSIiIGI6Y289IiIgZHU9IiIgYjpicT0iIiBiOmZoPSIiIGE6YW49IiIgYno9IiIgZDpicD0iIiBjOmJjPSIiIGQ6Y249IiIgYzplbT0iIiBkOmR3PSIiIGQ6ZWc9IiIgZDpleT0iIiBiOmNmPSIiIGI6Y2I9IiIgYTplaD0iIiBieD0iIiBhOmRtPSIiIGM6YXQ9IiIgZDpmaz0iIiBkOmZmPSIiIGE6YWk9IiIgYzpkdD0iIiBlYz0iIiBjOmFhPSIiIGM6ZWE9IiIgYTpmZT0iIiBjcz0iIiBhOmFoPSIiIGM6YmY9IiIgYTpieT0iIiBlbj0iIiBjOmNnPSIiIGQ6ZGc9IiIgZDpmZD0iIiBjOmFrPSIiIGRqPSIiIGFqPSIiIGE6YmU9IiIgYzpjaz0iIiBjOmV6PSIiIGI6ZGQ9IiIgYzpjbT0iIiBhcT0iIiBiOmZnPSIiIGE6YnI9IiIgYTpiaz0iIiBkOmJhPSIiIGI6ZXA9IiIgYjpkaz0iIiBiOmVsPSIiIGZpPSIiIGE6Y3o9IiIgYTpibT0iIiBiOmJsPSIiIGI6Y2w9IiIgYTpkZT0iIiBlZD0iIiBjOmNjPSIiIGN4PSIiIGZiPSIiIGFsPSIiIGJvPSIiIGZhPSIiIGM6Y3Y9IiIgYjpkaD0iIiBkOmFyPSIiIGE6YXM9IiIgYzpkcz0iIiBkOmJoPSIiIGQ6YWU9IiIgYzpiaT0iIiBiOmF6PSIiIGM6Y2E9IiIgYzpkcT0iIiBkOmNkPSIiIGF5PSIiIGE6Zmw9IiIgYTpldT0iIiBjaD0iIiBhZz0iIiBkOmJzPSIiIGE6ZHY9IiIgYzpkej0iIiBhOmNlPSIiIGE6ZXQ9IiIgYjpkeD0iIiBkOmFkPSIiIGQ6YXg9IiIgZDplcT0iIiBkOmViPSIiIGM6Y3c9IiIgYTpibj0iIiBhOmR5PSIiIGF2PSIiIGF1PSIiIGM6Y2k9IiIgYzpidj0iIiBiOmFvPSIiIGM6YWY9IiIgYjplZj0iIiBjcj0iIiBjOmNwPSIiIGE6Y3k9IiIgZHA9IiIgZW89IiIgZm09IiIgZmM9IiIgYTphdz0iIiBhdT0iIiBhOmVpPSIiIGE6YXA9IiIgZDpjcT0iIiBhOmVyPSIiIGE6ZGY9IiIgYTpleD0iIiBjOmFtPSIiIGRiPSIiIGRpPSIiIGJ0PSIiIGRuPSIiIGE6YmQ9IiIgYzpidz0iIiBhOmVsPSIiIGI6ZHI9IiIgYTplcz0iIiBhOmV2PSIiIGQ6Zm49IiIgYzpjdD0iIiBkOmV3PSIiIGQ6ZWs9IiIgYTpidT0iIiBiOmRjPSIiIGQ6YWI9IiIgY2o9IiIgZDpiaj0iIiBhOmJnPSIiIGE6ZGE9IiIgYWM9IiIvPgorPGUgYTpkdz0iIiBjOmJ1PSIiIGM6Zmw9IiIgYjplcj0iIiBkOmF5PSIiIGM6Yms9IiIgY2c9IiIgYTpmYj0iIiBiOmJyPSIiIGVxPSIiIGQ6ZWs9IiIgYTphZz0iIiBkcz0iIiBjdz0iIiBkOmJqPSIiIGF3PSIiIGM6Y3o9IiIgYzpkZz0iIiBkOmV5PSIiIGQ6YXM9IiIgY2U9IiIgYTplZz0iIiBiOmF6PSIiIGQ6ZHE9IiIgZGo9IiIgYmw9IiIgYTpjaD0iIiBkbT0iIiBkOmN2PSIiIGI6YnA9IiIgYnM9IiIgZDphYT0iIiBjOmV4PSIiIGFqPSIiIGE6Zmc9IiIgZDpldD0iIiBiOmVzPSIiIGM6YXQ9IiIgYzphbj0iIiBhOmFtPSIiIGM6ZXA9IiIgZDpkaT0iIiBiOmR6PSIiIGQ6ZWE9IiIgYjpiaD0iIiBiYT0iIiBibj0iIiBhYz0iIiBiOmF2PSIiIGM6Y2k9IiIgZDphcT0iIiBiOmRhPSIiIGRuPSIiIGNzPSIiIGFwPSIiIGM6ZHk9IiIgZG89IiIgYjpjcD0iIiBkOmNsPSIiIGVsPSIiIGQ6Ync9IiIgYjpmaD0iIiBkdD0iIiBhOmRjPSIiIGM6Ym89IiIgZWo9IiIgYzpkaz0iIiBiZz0iIiBhOmVpPSIiIGQ6YmQ9IiIgYzplbT0iIiBjOmV3PSIiIGI6Zm09IiIgYzplbj0iIiBkOmNtPSIiIGI6ZHg9IiIgYjpieD0iIiBhOmFiPSIiIGJmPSIiIGNqPSIiIGI6Zmo9IiIgYTpkbD0iIiBkOmZlPSIiIGQ6ZXU9IiIgYjpidj0iIiBjOmNiPSIiIGNvPSIiIGI6ZmQ9IiIgYTpibT0iIiBkOmF4PSIiIGE6YXc9IiIgYWQ9IiIgYTpiYz0iIiBkOmNyPSIiIGE6ZmE9IiIgY3Q9IiIgZWg9IiIgZDphaT0iIiBkOmZpPSIiIGI6ZmY9IiIgYjphZT0iIiBjOmZjPSIiIGM6ZGg9IiIgZWU9IiIgZWY9IiIgZDpmaz0iIiBhOmRqPSIiIGM6Y3k9IiIgYjpidD0iIiBjbj0iIiBiaT0iIiBjOmJlPSIiIGR2PSIiIGNhPSIiIGM6YWw9IiIgYnk9IiIgYTpiYj0iIiBhOmNxPSIiIGJ6PSIiIGI6YXU9IiIgZDpkcD0iIiBlYz0iIiBiOmVkPSIiIGM6ZWI9IiIgZDpkYj0iIiBiOmV2PSIiIGFvPSIiIGM6Y3U9IiIgYjphaz0iIiBlbz0iIiBkZD0iIiBkZj0iIiBiOmNjPSIiIGE6YWg9IiIgZm49IiIgYzpjZj0iIiBiOmJxPSIiIGI6ZGU9IiIgZHI9IiIgZDpkdT0iIiBjOmNkPSIiIGQ6YWY9IiIgYTplej0iIiBhcj0iIiBiOmN4PSIiIGE6Y2s9IiIvPgorPGUgZXQ9IiIgYTpidD0iIiBkOmFpPSIiIGJiPSIiIGQ6ZmI9IiIgYjphaz0iIiBhOmNpPSIiIGFzPSIiIGRhPSIiIGQ6Y209IiIgZWc9IiIgYzplaj0iIiBlaz0iIiBiOmFnPSIiIGM6ZG09IiIgY2s9IiIgZGg9IiIgYnU9IiIgZDpkZT0iIiBlbT0iIiBkOmR3PSIiIGQ6Y3M9IiIgYTpmaT0iIiBhOmZsPSIiIGI6Y2w9IiIgYjpmZD0iIiBiOmFvPSIiIGI6Ync9IiIgYTphcj0iIiBjOmF4PSIiIGI6ZWE9IiIgYXQ9IiIgYXU9IiIgYzpkaz0iIiBkZD0iIiBiOmJrPSIiIGV5PSIiIGQ6YmU9IiIgZDpjdz0iIiBkaT0iIiBjOmZjPSIiIGI6YmQ9IiIgZDpiYz0iIiBhOmZrPSIiIGNmPSIiIGE6ZWM9IiIgYTpjYj0iIiBkcD0iIiBiOmV1PSIiIGJxPSIiIGQ6YWg9IiIgYTpkdD0iIiBiOmVmPSIiIGE6ZWw9IiIgYjpibj0iIiBjYz0iIiBkOmRnPSIiIGI6Y3I9IiIgYng9IiIgYzphcT0iIiBkdT0iIiBjOmNwPSIiIGM6Y2o9IiIgYWY9IiIgYTpkYj0iIiBjOmVyPSIiIGE6ZGY9IiIgZHM9IiIgY3Q9IiIgYzpibD0iIiBiOmF6PSIiIGE6ZGM9IiIgYjplYj0iIiBkOmNuPSIiIGE6ZGw9IiIgYTplaD0iIiBhOmZnPSIiIGM6ZXg9IiIgYzpjZz0iIiBhOmJwPSIiIGVtPSIiIGI6YWM9IiIgYjpmYT0iIiBlZT0iIiBkOmNkPSIiIGQ6ZHE9IiIgY3g9IiIgZXM9IiIgYjpiaj0iIiBhOmZtPSIiIGI6ZW49IiIgZDpjej0iIiBmZT0iIiBiOmJ5PSIiIGJ6PSIiIGI6ZHY9IiIgYzphdz0iIiBiOmN5PSIiIGRyPSIiIGE6YnM9IiIgYzpkbz0iIiBhOmJpPSIiIGQ6ZHo9IiIgYzphZT0iIiBiOmJnPSIiIGNxPSIiIGI6Y3U9IiIgYzpmaj0iIiBjOmNlPSIiIGE6Ym89IiIgZDpkeD0iIiBidj0iIiBkOmV6PSIiIGQ6ZWk9IiIgYjphYj0iIiBkOmJmPSIiIGE6Zmg9IiIgZDpheT0iIiBkOmVvPSIiIGI6ZXA9IiIgZDpmbj0iIiBiOmJhPSIiIGM6ZG49IiIgYWw9IiIgY2g9IiIgYTphYT0iIiBiaz0iIiBkOmJtPSIiIGM6ZGo9IiIgYTpicj0iIiBjOmFuPSIiIGZmPSIiIGI6Y2E9IiIgYzpldj0iIiBjOmFqPSIiIGE6YXA9IiIgZDpjdj0iIiBiaD0iIiBjOmR5PSIiIGM6ZXE9IiIgYjphbT0iIiBiOmVkPSIiIGI6Y289IiIgYTpldz0iIiBjOmF2PSIiIGFkPSIiLz4KKzxlIGM6ZWk9IiIgYTplbD0iIiBhOmNuPSIiIGI6ZGQ9IiIgYTphcj0iIiBiOmRlPSIiIGF1PSIiIGM6YnA9IiIgYTpjYz0iIiBkOmRtPSIiIGQ6YWk9IiIgYTpldT0iIiBiOmR4PSIiIGE6YXA9IiIgYjpiaD0iIiBiOmVhPSIiIGJsPSIiIGVvPSIiIGVwPSIiIGE6YWc9IiIgYWM9IiIgYnk9IiIgZWI9IiIgYTpjZj0iIiBiOmV0PSIiIGM6ZmU9IiIgYTpkaD0iIiBkej0iIiBiZj0iIiBibT0iIiBiOmJhPSIiIGQ6YnM9IiIgYzplcT0iIiBiOmF2PSIiIGM6Zmc9IiIgYzphZj0iIiBjOmNnPSIiIGRmPSIiIGVjPSIiIGI6ZW09IiIgYTpmYj0iIiBkOmZkPSIiIGE6Ym89IiIgYzpjcz0iIiBjOmRvPSIiIGI6Zm09IiIgYTpjcj0iIiBhOmRsPSIiIGI6Ym49IiIgZDphaD0iIiBjdT0iIiBhOmRzPSIiIGQ6Y2E9IiIgYjpidD0iIiBmaD0iIiBhZD0iIiBiOmN4PSIiIGI6YW89IiIgYjplZz0iIiBjZT0iIiBjOmV4PSIiIGJ4PSIiIGQ6ZWU9IiIgYTphcz0iIiBiOmF4PSIiIGM6ZWs9IiIgYjpjaj0iIiBjOmV3PSIiIGM6Zms9IiIgYzpiYz0iIiBjOmZpPSIiIGI6ZmY9IiIgYzphbT0iIiBiOmRzPSIiIGM6ZXM9IiIgYjpidz0iIiBjOmNvPSIiIGJrPSIiIGI6Yno9IiIgY2k9IiIgY3E9IiIgZDpldj0iIiBjOmZhPSIiIGM6Zm49IiIgYTpmbD0iIiBkYT0iIiBiOmRjPSIiIGI6YmQ9IiIgYWw9IiIgZWQ9IiIgYTphaj0iIiBkOmNkPSIiIGE6ZmM9IiIgY3c9IiIgYTphdz0iIiBjOmNwPSIiIGI6YWE9IiIgYjpiaj0iIiBkOmN6PSIiIGI6Ymk9IiIgYzpkaz0iIiBheT0iIiBkOmFlPSIiIGE6ZHA9IiIgZHI9IiIgZGo9IiIgYzpkdj0iIiBkcT0iIiBkOmJxPSIiIGE6Y2I9IiIgZDpkbj0iIiBkOmZqPSIiIGI6ZXo9IiIgYjpieT0iIiBhOmFxPSIiIGI6YW49IiIgZDpkdz0iIiBjOmNrPSIiIGVmPSIiIGE6ZW49IiIgYjpkeT0iIiBkOmR1PSIiIGQ6YXo9IiIgYjpjbT0iIiBiOmVoPSIiIGJ1PSIiIGM6YWI9IiIgYjpiZT0iIiBkYj0iIiBidj0iIiBkOmR0PSIiIGJnPSIiIGQ6ZGc9IiIgY3k9IiIgYzpjaD0iIiBjOmN0PSIiIGI6Y2w9IiIgYTphdD0iIiBlcj0iIiBjOmFrPSIiIGQ6Y3Y9IiIgYmI9IiIgYjpleT0iIiBhOmJyPSIiIGQ6ZGk9IiIgZWo9IiIvPgorPGUgYjplaz0iIiBkOmNmPSIiIGM6YmE9IiIgZDphaj0iIiBkOmF3PSIiIGQ6ZGs9IiIgYzpjbD0iIiBjOmJlPSIiIGI6ZGU9IiIgZDplbz0iIiBieT0iIiBhOmN3PSIiIGE6ZHk9IiIgYjpkbD0iIiBiOmFjPSIiIGM6ZW09IiIgYzpkcT0iIiBmYz0iIiBhOmZuPSIiIGQ6ZGo9IiIgYTplcz0iIiBmaj0iIiBjdD0iIiBjcD0iIiBhOmN2PSIiIGM6YXk9IiIgYjpkej0iIiBhOmFiPSIiIGZmPSIiIGQ6Ymw9IiIgYjphdT0iIiBkOmJkPSIiIGI6YWE9IiIgYTpjYz0iIiBjOmJ4PSIiIGM6YnE9IiIgYzplcj0iIiBjOmVuPSIiIGNyPSIiIGM6Y3E9IiIgYTplaD0iIiBjOmFnPSIiIGM6YW89IiIgYTpicD0iIiBiOmN4PSIiIGJ0PSIiIGI6Y2U9IiIgYjpjej0iIiBkOmZtPSIiIGRoPSIiIGI6Yms9IiIgYW49IiIgZDpkdj0iIiBjOmFmPSIiIGE6ZXk9IiIgZmQ9IiIgYTpicz0iIiBhOmVlPSIiIGRyPSIiIGQ6YXI9IiIgYjpiZj0iIiBkOmRvPSIiIGI6ZXo9IiIgYnY9IiIgYTpjbz0iIiBjOmZiPSIiIGM6Y3M9IiIgYjpjaD0iIiBkOmViPSIiIGE6YXY9IiIgZDphcz0iIiBjcj0iIiBkOmNuPSIiIGJoPSIiIGM6Ym09IiIgYjpiaj0iIiBjZD0iIiBhOmRmPSIiIGZlPSIiIGM6ZXU9IiIgYTpkbT0iIiBlaj0iIiBibj0iIiBkOmZoPSIiIGE6YXo9IiIgZDpmbD0iIiBkOmRnPSIiIGE6ZXc9IiIgYzphaT0iIiBjbT0iIiBjOmFoPSIiIGM6ZHc9IiIgYzpiYj0iIiBhOmVsPSIiIGVnPSIiIGE6ZGk9IiIgZDpjeT0iIiBkOmVpPSIiIGVjPSIiIGM6ZGE9IiIgYTpjaT0iIiBiOmZpPSIiIGI6ZXA9IiIgYzpldj0iIiBhOmRjPSIiIGI6Zms9IiIgYzpjaj0iIiBhOmFrPSIiIGI6ZHU9IiIgYzpjaz0iIiBkOmFwPSIiIGM6YW09IiIgYWU9IiIgZGQ9IiIgYjpiZz0iIiBhOmF0PSIiIGE6ZWE9IiIgYno9IiIgZDplcT0iIiBiOmRiPSIiIGI6Zmc9IiIgYjpkdD0iIiBkOmFsPSIiIGM6Y3U9IiIgZHg9IiIgY2E9IiIgYTphej0iIiBkOmRwPSIiIGJpPSIiIGI6ZXQ9IiIgZDpidz0iIiBkOmJ1PSIiIGQ6ZWQ9IiIgZDpleD0iIiBkOmVmPSIiIGQ6YXg9IiIgYmM9IiIgZDpicj0iIiBiOmFxPSIiIGE6ZG49IiIgZDpmYT0iIiBkOmNiPSIiIGQ6Ym89IiIgZHM9IiIgYWQ9IiIgYzpjZz0iIi8+Cis8ZSBhOmFsPSIiIGM6Y2g9IiIgYTpmbj0iIiBiej0iIiBkOmJ2PSIiIGE6ZHE9IiIgYTpldz0iIiBlaT0iIiBjOmVvPSIiIGJqPSIiIGI6YWE9IiIgZDphcT0iIiBhOmVoPSIiIGQ6ZGw9IiIgZXg9IiIgYzpkZz0iIiBkOmJ1PSIiIGI6YWU9IiIgYjpkYj0iIiBjOmRuPSIiIGVqPSIiIGQ6Yms9IiIgYTphcz0iIiBkOmVsPSIiIGVlPSIiIGJwPSIiIGQ6Ymw9IiIgYzpjZT0iIiBjOmN2PSIiIGQ6ZmY9IiIgYzphbj0iIiBiOmJuPSIiIGM6Y289IiIgZHI9IiIgYTplej0iIiBhOmRjPSIiIGE6ZGQ9IiIgYTpicz0iIiBhOmVnPSIiIGI6ZmI9IiIgYTpiaT0iIiBjOmF6PSIiIGM6ZG89IiIgYjpleT0iIiBkaT0iIiBjOmZhPSIiIGI6YmM9IiIgYjpjcD0iIiBkOmZjPSIiIGE6ZXU9IiIgY2o9IiIgZDpheT0iIiBiOmRhPSIiIGQ6Y2c9IiIgYzplYT0iIiBhOmFvPSIiIGN3PSIiIGJtPSIiIGI6YWQ9IiIgZDpkaj0iIiBiOmFyPSIiIGI6YmU9IiIgYjpieT0iIiBieD0iIiBkOmJ3PSIiIGQ6ZXA9IiIgZDplZj0iIiBkOmFqPSIiIGVxPSIiIGE6Y2s9IiIgZDplYj0iIiBiOmRrPSIiIGI6Zmo9IiIgYjphaT0iIiBjOmN4PSIiIGE6Y3Q9IiIgYTpmaT0iIiBibz0iIiBjOmVuPSIiIGM6Ync9IiIgYjphYj0iIiBiYT0iIiBjbj0iIiBjOmF2PSIiIGR2PSIiIGRlPSIiIGM6Y2w9IiIgY3E9IiIgYXg9IiIgYjpldj0iIiBlaz0iIiBhOmR5PSIiIGE6Y3k9IiIgYTpkcz0iIiBhOmN5PSIiIGQ6ZHo9IiIgYTpkaD0iIiBkOmNzPSIiIGE6ZXI9IiIgYzpiZD0iIiBhOmFjPSIiIGFwPSIiIGM6YnQ9IiIgYXc9IiIgZDpjdT0iIiBhOmJxPSIiIGI6ZG09IiIgZDpjYj0iIiBkOmF0PSIiIGQ6ZHA9IiIgYjpkZj0iIiBjOmNtPSIiIGQ6YnI9IiIgYzpiaD0iIiBhZz0iIiBmbD0iIiBldD0iIiBhbT0iIiBkOmJnPSIiIGFrPSIiIGFoPSIiIGQ6YWY9IiIgYTpkdz0iIiBjOmZlPSIiIGE6YmY9IiIgYTpmZz0iIiBjOmNkPSIiIGZoPSIiIGZrPSIiIGE6Y3o9IiIgZDpmZD0iIiBkOmVjPSIiIGF1PSIiIGVkPSIiIGE6Y2Y9IiIgYzpkeD0iIiBiOmNyPSIiIGQ6Y2E9IiIgYzplbT0iIiBkOmVzPSIiIGE6ZHU9IiIgY2M9IiIgYzpjaT0iIiBiOmR0PSIiIGQ6Zm09IiIgYmI9IiIvPgorPGUgYTpibj0iIiBiOmN5PSIiIGM6Y2Y9IiIgYTpldj0iIiBhOmVvPSIiIGI6ZXg9IiIgZDpkZj0iIiBkOmR5PSIiIGQ6YmY9IiIgZDphcj0iIiBhZD0iIiBhOmViPSIiIGQ6Y2w9IiIgYzplZT0iIiBjOmNiPSIiIGQ6YXU9IiIgZGM9IiIgYzpiej0iIiBiYT0iIiBkOmRoPSIiIGM6Y3U9IiIgYzplcj0iIiBiOmZoPSIiIGM6YnU9IiIgZDpjcz0iIiBhOmR4PSIiIGJ2PSIiIGI6ZHU9IiIgZDpjbj0iIiBjOmJiPSIiIGE6YWw9IiIgYzpjcD0iIiBkOmJrPSIiIGNvPSIiIGE6YWY9IiIgZDpmbT0iIiBhOmRvPSIiIGI6ZG49IiIgZmY9IiIgYTplaD0iIiBhOmNnPSIiIGM6ZmM9IiIgYmQ9IiIgZGk9IiIgYjphbT0iIiBkOmVwPSIiIGQ6Zm49IiIgYzphcz0iIiBhOmRiPSIiIGI6ZWM9IiIgYzpleT0iIiBiOmFrPSIiIGQ6Y2g9IiIgYjpmZz0iIiBiOmVpPSIiIGFsPSIiIGFqPSIiIGRzPSIiIGM6Y2k9IiIgYTpkcD0iIiBjOmNjPSIiIGE6YWc9IiIgYTpiaD0iIiBiOmJyPSIiIGR3PSIiIGI6ZGU9IiIgYzpjZT0iIiBiOmJwPSIiIGM6Y2Q9IiIgYjpibz0iIiBjOmNhPSIiIGM6Y3g9IiIgYTplbD0iIiBkOmJzPSIiIGNqPSIiIGFvPSIiIGFuPSIiIGM6YmM9IiIgZDphYj0iIiBjOmR6PSIiIGVtPSIiIGQ6ZGE9IiIgYzpkdD0iIiBkOmJxPSIiIGM6Ymk9IiIgYjpmbD0iIiBhOmRsPSIiIGQ6ZGc9IiIgZWs9IiIgZXM9IiIgYmc9IiIgYTpieD0iIiBiOmRkPSIiIGI6ZmE9IiIgYTpiZT0iIiBiOmNrPSIiIGF5PSIiIGM6YXY9IiIgYzplZj0iIiBkOmVnPSIiIGM6Y3o9IiIgYjpldT0iIiBhOmV6PSIiIGI6ZXQ9IiIgZHE9IiIgYjpidz0iIiBjOmJqPSIiIGI6Y3Q9IiIgZWo9IiIgYzphdz0iIiBjOmFpPSIiIGNyPSIiIGM6YXE9IiIgYTphYT0iIiBkOmFoPSIiIGM6Ynk9IiIgZDphZT0iIiBhOmV3PSIiIGI6ZHY9IiIgY3E9IiIgYjpkcj0iIiBiOmZpPSIiIGI6YnQ9IiIgYTpibT0iIiBjOmF0PSIiIGE6Ymw9IiIgYjpmYj0iIiBhOmZqPSIiIGE6ZGo9IiIgZDphYz0iIiBiOmRtPSIiIGNtPSIiIGQ6ZmU9IiIgYTplZD0iIiBhcD0iIiBkOmRrPSIiIGE6ZWE9IiIgYzplbj0iIiBjOmN2PSIiIGM6ZXE9IiIgYzpmaz0iIiBheD0iIiBhOmF6PSIiIGE6ZmQ9IiIgZDpjdz0iIiBkOmNzPSIiLz4KKzxlIGQ6ZWQ9IiIgYTpjeD0iIiBhOmJiPSIiIGM6ZXQ9IiIgYmc9IiIgY209IiIgYmk9IiIgYzphZz0iIiBjbz0iIiBiOmNpPSIiIGE6Y2E9IiIgZDpkaj0iIiBjOmVtPSIiIGE6ZXc9IiIgZWw9IiIgZDpmbj0iIiBhYj0iIiBhOmN0PSIiIGE6Y3o9IiIgYjpjdz0iIiBiOmRzPSIiIGI6Y249IiIgZDpiYT0iIiBkZT0iIiBiOmVhPSIiIGM6ZGM9IiIgYzphaT0iIiBkOmVlPSIiIGI6YnQ9IiIgYzpidT0iIiBiYz0iIiBkYT0iIiBiOmFtPSIiIGQ6ZW89IiIgZXU9IiIgYTpicD0iIiBkOmZlPSIiIGVjPSIiIGE6ZHI9IiIgZDpjZj0iIiBkdT0iIiBjOmJ6PSIiIGE6ZWo9IiIgZGQ9IiIgYTpjaz0iIiBhOmFwPSIiIGQ6Yng9IiIgYzpjcT0iIiBhOmN1PSIiIGE6ZWY9IiIgYTpheT0iIiBhOmZrPSIiIGE6YWg9IiIgYXI9IiIgYjpibj0iIiBkOmVrPSIiIGE6Y2o9IiIgZDplcj0iIiBjOmNiPSIiIGE6Y3Y9IiIgYjpmZj0iIiBhOmVkPSIiIGRrPSIiIGVpPSIiIGZtPSIiIGF4PSIiIGI6YnE9IiIgYTpjeT0iIiBiOmJoPSIiIGNsPSIiIGM6ZXY9IiIgYzphYz0iIiBiOmR4PSIiIGM6YnM9IiIgYjpleD0iIiBkdz0iIiBlcD0iIiBiOmR5PSIiIGNwPSIiIGM6ZHY9IiIgZDpmYj0iIiBkOmJ3PSIiIGI6ZGk9IiIgYzpkZz0iIiBhOmFkPSIiIGI6YWY9IiIgYzpkYj0iIiBjOmRmPSIiIGZhPSIiIGRuPSIiIGQ6Yms9IiIgYjpmZz0iIiBkOmFhPSIiIGE6YWs9IiIgYzplYj0iIiBkOmZkPSIiIGE6Y3I9IiIgYzpkdD0iIiBhOmFlPSIiIGM6Ynk9IiIgYW89IiIgYzpleT0iIiBiZD0iIiBhOmZsPSIiIGI6ZXo9IiIgYzphdj0iIiBjOmJyPSIiIGI6ZHE9IiIgZDpibz0iIiBhOmF0PSIiIGM6Ymo9IiIgYzpibD0iIiBjOmJlPSIiIGQ6Y2g9IiIgYjpkaD0iIiBhOmFqPSIiIGE6ZmM9IiIgY2c9IiIgYTphcT0iIiBhOmZqPSIiIGNzPSIiIGE6YXM9IiIgYjpkcD0iIiBibT0iIiBhOmJmPSIiIGQ6Zmk9IiIgYjplZz0iIiBhOmNkPSIiIGQ6Y2U9IiIgZDpkbT0iIiBkOmF6PSIiIGE6YXU9IiIgYTphdz0iIiBkej0iIiBiOmZoPSIiIGRnPSIiIGE6ZG89IiIgYTplbj0iIiBhOmVzPSIiIGVxPSIiIGI6YnY9IiIgYjpkbD0iIiBjOmFuPSIiIGFsPSIiIGI6ZWg9IiIgZDpjYz0iIi8+Cis8ZSBhOmVmPSIiIGI6YmQ9IiIgYjpkbz0iIiBhOmZuPSIiIGE6YWI9IiIgZXU9IiIgZG49IiIgZDpiYT0iIiBjOmZjPSIiIGV5PSIiIGI6Zmo9IiIgYzpicD0iIiBiOmJnPSIiIGE6ZHY9IiIgZGo9IiIgY249IiIgYWU9IiIgY209IiIgYTplcD0iIiBjOmJvPSIiIGM6ZHo9IiIgYTplaj0iIiBkOmVkPSIiIGJjPSIiIGE6YnM9IiIgYmY9IiIgZW89IiIgYTpldj0iIiBmaD0iIiBiOmFwPSIiIGE6YWg9IiIgYjpjZj0iIiBkOmRyPSIiIGZsPSIiIGQ6YXU9IiIgZDpiej0iIiBkdD0iIiBkOmZkPSIiIGV6PSIiIGE6Ymk9IiIgYTpieD0iIiBhOmV4PSIiIGI6YWw9IiIgZXI9IiIgYTpkdj0iIiBkOmVsPSIiIGJlPSIiIGI6Yms9IiIgYzpieT0iIiBjdT0iIiBjOmFmPSIiIGI6YXM9IiIgYTpmYj0iIiBiOmRhPSIiIGE6Ync9IiIgY3M9IiIgYjpidj0iIiBkOmRrPSIiIGM6YmI9IiIgZDplbT0iIiBhOmN6PSIiIGI6YWQ9IiIgYzpjcj0iIiBjdz0iIiBkOmFnPSIiIGE6ZWM9IiIgYzpjZD0iIiBjbz0iIiBiOmZrPSIiIGVlPSIiIGI6Zmc9IiIgYTpicj0iIiBiOmRjPSIiIGF2PSIiIGQ6ZmY9IiIgYjpidD0iIiBiOmRkPSIiIGE6Y3E9IiIgZDpjaD0iIiBhOmFrPSIiIGE6ZHc9IiIgYzpmYT0iIiBhbz0iIiBkZj0iIiBkOmVnPSIiIGRtPSIiIGNhPSIiIGE6ZWs9IiIgYjphYz0iIiBiOmNqPSIiIGM6Ymw9IiIgYTpkdT0iIiBjOmRzPSIiIGI6YW49IiIgYjphdD0iIiBkOmZtPSIiIGI6Y2w9IiIgZDpkZT0iIiBkOmJuPSIiIGQ6ZGg9IiIgZDplYj0iIiBiOmFxPSIiIGVoPSIiIGM6ZHk9IiIgYTpheT0iIiBiOmJxPSIiIGI6YXc9IiIgYTpiaD0iIiBhOmVuPSIiIGN0PSIiIGQ6Y2c9IiIgY2U9IiIgY2k9IiIgYTpldD0iIiBiOmJ1PSIiIGRpPSIiIGZpPSIiIGNrPSIiIGVzPSIiIGF4PSIiIGM6Ymo9IiIgYjpkcT0iIiBjOmFtPSIiIGI6YnM9IiIgY2I9IiIgZDphej0iIiBhaj0iIiBhYT0iIiBiOmRsPSIiIGNjPSIiIGQ6ZGI9IiIgZDpldz0iIiBhOmR4PSIiIGQ6Y3g9IiIgYTpibT0iIiBjeT0iIiBkZz0iIiBhOmRwPSIiIGQ6YWk9IiIgYTplYT0iIiBiOmVxPSIiIGI6ZWk9IiIgZDphcj0iIiBjcD0iIiBhOmZlPSIiIGE6Y3Y9IiIvPgorPGUgYTplZj0iIiBibD0iIiBjaj0iIiBiOmRvPSIiIGQ6ZGs9IiIgYTphdj0iIiBhOmNsPSIiIGQ6ZHA9IiIgZG09IiIgYTplYj0iIiBjOmN2PSIiIGM6YWs9IiIgZDpkYT0iIiBhOmF5PSIiIGE6Y3c9IiIgYjpmZj0iIiBhOmJwPSIiIGJ0PSIiIGI6ZmM9IiIgYnU9IiIgYzplcT0iIiBjOmFyPSIiIGQ6Y289IiIgY3U9IiIgYmc9IiIgYzpkcj0iIiBkOmZhPSIiIGM6Y3I9IiIgYTpidj0iIiBiOmZsPSIiIGQ6ZWE9IiIgYWU9IiIgYjpjej0iIiBiOmJoPSIiIGM6YW89IiIgYjpkbD0iIiBiOmJkPSIiIGRlPSIiIGNmPSIiIGI6Y3g9IiIgZDplaT0iIiBkOmRjPSIiIGE6Zm09IiIgYjpkdT0iIiBkOmJ6PSIiIGE6YXo9IiIgZDpicT0iIiBkOmJjPSIiIGQ6YWE9IiIgYjphdT0iIiBjOmRnPSIiIGQ6YXE9IiIgYjpkdj0iIiBhOmNuPSIiIGI6ZWc9IiIgYTpidz0iIiBkOmJlPSIiIGM6ZmQ9IiIgYjpkeT0iIiBkeD0iIiBhOmVoPSIiIGI6ZGQ9IiIgYjpiYj0iIiBjOmZiPSIiIGQ6Y2E9IiIgYzpibz0iIiBiaz0iIiBhOmR6PSIiIGE6ZXA9IiIgYTpjZD0iIiBjOmJ5PSIiIGE6YWg9IiIgYjphbD0iIiBhOmVtPSIiIGM6Zmc9IiIgYzpldz0iIiBkOmFnPSIiIGI6Yng9IiIgZHQ9IiIgYW49IiIgYTpjYj0iIiBhOmV0PSIiIGRpPSIiIGJqPSIiIGQ6ZXg9IiIgYzpkbj0iIiBhOmFmPSIiIGI6Ym09IiIgYTpibj0iIiBlYz0iIiBhOmZuPSIiIGNrPSIiIGFiPSIiIGE6YXM9IiIgYTpiaT0iIiBjOmFpPSIiIGQ6ZWU9IiIgYTpjbT0iIiBkOmRzPSIiIGQ6ZHE9IiIgYzpjaD0iIiBkOmNzPSIiIGQ6YXg9IiIgZDpldj0iIiBiOmF0PSIiIGI6Zmg9IiIgYzpmaj0iIiBiOmVuPSIiIGE6Y2U9IiIgYzpkYj0iIiBjOmR3PSIiIGVyPSIiIGM6ZGY9IiIgZmk9IiIgZDpjdD0iIiBiOmJhPSIiIGM6Y2k9IiIgYzphZD0iIiBjOmV5PSIiIGFqPSIiIGFtPSIiIGM6Y2M9IiIgYTpiZj0iIiBjOmVrPSIiIGJ3PSIiIGM6YXA9IiIgYzpicj0iIiBhOmFjPSIiIGI6ZG89IiIgYzplaj0iIiBlcz0iIiBhOmRqPSIiIGM6ZWQ9IiIgZDplej0iIiBhOmF3PSIiIGM6YnM9IiIgYTplbD0iIiBiOmZlPSIiIGN5PSIiIGQ6Y3E9IiIgYzplbz0iIiBhOmNnPSIiIGE6ZGg9IiIgYjpldT0iIiBhOmNwPSIiIGE6Zms9IiIvPgorPGUgYjpmZT0iIiBhcj0iIiBkOmJ1PSIiIGJ5PSIiIGE6ZGc9IiIgYzpkcT0iIiBibT0iIiBjZD0iIiBjOmFoPSIiIGV4PSIiIGM6ZGs9IiIgZDpiej0iIiBjOmF1PSIiIGI6Zms9IiIgYzpkbz0iIiBiOmZhPSIiIGM6ZG49IiIgZDpkZD0iIiBkOmJyPSIiIGNzPSIiIGQ6ZWc9IiIgY2k9IiIgZGo9IiIgYms9IiIgYzpkej0iIiBiOmVxPSIiIGQ6Ym49IiIgYzpmYj0iIiBhOmVmPSIiIGFrPSIiIGQ6Y2M9IiIgYTplbD0iIiBhOmJ3PSIiIGE6ZXY9IiIgY2E9IiIgYzpkeD0iIiBjOmVkPSIiIGR2PSIiIGJvPSIiIGQ6YWo9IiIgYjpidT0iIiBhOmZqPSIiIGE6YWY9IiIgZDpkdz0iIiBjOmFzPSIiIGI6Y3k9IiIgZDpjdz0iIiBhOmFsPSIiIGM6Y2w9IiIgYXk9IiIgYjpmbD0iIiBjbj0iIiBjOmZuPSIiIGI6Y3A9IiIgYzpjZz0iIiBkOmRwPSIiIGRjPSIiIGI6ZGk9IiIgYXc9IiIgYTplej0iIiBiOmJxPSIiIGQ6Yng9IiIgYzphaT0iIiBhOmV3PSIiIGE6YnM9IiIgYzphdj0iIiBkOmZpPSIiIGI6YW49IiIgYnA9IiIgZDpjbz0iIiBjOmZnPSIiIGQ6ZHQ9IiIgYzpldT0iIiBjOmJqPSIiIGE6ZHk9IiIgZXQ9IiIgZDphZT0iIiBkOmR1PSIiIGQ6YmE9IiIgYTpkZT0iIiBkOmFkPSIiIGRzPSIiIGI6ZXk9IiIgZmY9IiIgZDphbT0iIiBjOmVlPSIiIGI6Y3o9IiIgYzpiZj0iIiBhOmNiPSIiIGI6ZHI9IiIgZDpjeD0iIiBjOmJsPSIiIGE6ZWs9IiIgZWI9IiIgZXA9IiIgYzpkYj0iIiBjOmN0PSIiIGJ2PSIiIGNoPSIiIGM6Y2U9IiIgZW09IiIgZDpiYj0iIiBkOmF6PSIiIGJlPSIiIGM6Zmg9IiIgYjphcD0iIiBjOmVuPSIiIGI6ZmM9IiIgYjphYT0iIiBjOmVpPSIiIGJoPSIiIGE6ZWo9IiIgYWM9IiIgYjpheD0iIiBjOmRmPSIiIGI6ZG09IiIgYjpjdT0iIiBlaD0iIiBlcz0iIiBiOmZtPSIiIGM6YWc9IiIgY209IiIgZDpkYT0iIiBkaD0iIiBkbD0iIiBjdj0iIiBmZD0iIiBiOmF0PSIiIGM6ZW89IiIgYjpjZj0iIiBiOmVjPSIiIGQ6YWI9IiIgYmc9IiIgYjpjcT0iIiBjaj0iIiBiOmNyPSIiIGVyPSIiIGQ6YW89IiIgYXE9IiIgYjpiZD0iIiBiYz0iIiBjbz0iIiBlYT0iIiBkOmJpPSIiIGQ6Y2s9IiIgZDpidD0iIi8+Cis8L2RvYz4KZGlmZiAtLWdpdCBhL3Rlc3QvZXJyb3JzL2VtcHR5LnhtbCBiL3Rlc3QvZXJyb3JzL2VtcHR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvZW1wdHkueG1sCmRpZmYgLS1naXQgYS90ZXN0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbCBiL3Rlc3QvZXJyb3JzL2V4dHJhLWNvbnRlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYWQ2NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2Vycm9ycy9leHRyYS1jb250ZW50LnhtbApAQCAtMCwwICsxIEBACis8ZC8+eApkaWZmIC0tZ2l0IGEvdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwgYi90ZXN0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdiZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMS54bWwKQEAgLTAsMCArMSBAQAoreApkaWZmIC0tZ2l0IGEvdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWwgYi90ZXN0L2Vycm9ycy9pbnZhbGlkLXN0YXJ0LXRhZy0yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzE4NDE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvaW52YWxpZC1zdGFydC10YWctMi54bWwKQEAgLTAsMCArMSBAQAorPApkaWZmIC0tZ2l0IGEvdGVzdC9lcnJvcnMvbmFtZTMueG1sIGIvdGVzdC9lcnJvcnMvbmFtZTMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNWY5NmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2Vycm9ycy9uYW1lMy54bWwKQEAgLTAsMCArMSBAQAorPC5uYW1lLz4KZGlmZiAtLWdpdCBhL3Rlc3QvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbCBiL3Rlc3QvZXJyb3JzL3F1YWRyYXRpYy1kZWZhdHRyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDUxODlmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvcXVhZHJhdGljLWRlZmF0dHIueG1sCkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBkb2MgWworPCFFTEVNRU5UIGRvYyAoZSopPgorPCFFTEVNRU5UIGUgRU1QVFk+Cis8IUFUVExJU1QgZQorYTAwMCAoMCkgJzAnIGEwMDEgKDApICcwJyBhMDAyICgwKSAnMCcgYTAwMyAoMCkgJzAnIGEwMDQgKDApICcwJyBhMDA1ICgwKSAnMCcKK2EwMDYgKDApICcwJyBhMDA3ICgwKSAnMCcgYTAwOCAoMCkgJzAnIGEwMDkgKDApICcwJyBhMDEwICgwKSAnMCcgYTAxMSAoMCkgJzAnCithMDEyICgwKSAnMCcgYTAxMyAoMCkgJzAnIGEwMTQgKDApICcwJyBhMDE1ICgwKSAnMCcgYTAxNiAoMCkgJzAnIGEwMTcgKDApICcwJworYTAxOCAoMCkgJzAnIGEwMTkgKDApICcwJyBhMDIwICgwKSAnMCcgYTAyMSAoMCkgJzAnIGEwMjIgKDApICcwJyBhMDIzICgwKSAnMCcKK2EwMjQgKDApICcwJyBhMDI1ICgwKSAnMCcgYTAyNiAoMCkgJzAnIGEwMjcgKDApICcwJyBhMDI4ICgwKSAnMCcgYTAyOSAoMCkgJzAnCithMDMwICgwKSAnMCcgYTAzMSAoMCkgJzAnIGEwMzIgKDApICcwJyBhMDMzICgwKSAnMCcgYTAzNCAoMCkgJzAnIGEwMzUgKDApICcwJworYTAzNiAoMCkgJzAnIGEwMzcgKDApICcwJyBhMDM4ICgwKSAnMCcgYTAzOSAoMCkgJzAnIGEwNDAgKDApICcwJyBhMDQxICgwKSAnMCcKK2EwNDIgKDApICcwJyBhMDQzICgwKSAnMCcgYTA0NCAoMCkgJzAnIGEwNDUgKDApICcwJyBhMDQ2ICgwKSAnMCcgYTA0NyAoMCkgJzAnCithMDQ4ICgwKSAnMCcgYTA0OSAoMCkgJzAnIGEwNTAgKDApICcwJyBhMDUxICgwKSAnMCcgYTA1MiAoMCkgJzAnIGEwNTMgKDApICcwJworYTA1NCAoMCkgJzAnIGEwNTUgKDApICcwJyBhMDU2ICgwKSAnMCcgYTA1NyAoMCkgJzAnIGEwNTggKDApICcwJyBhMDU5ICgwKSAnMCcKK2EwNjAgKDApICcwJyBhMDYxICgwKSAnMCcgYTA2MiAoMCkgJzAnIGEwNjMgKDApICcwJyBhMDY0ICgwKSAnMCcgYTA2NSAoMCkgJzAnCithMDY2ICgwKSAnMCcgYTA2NyAoMCkgJzAnIGEwNjggKDApICcwJyBhMDY5ICgwKSAnMCcgYTA3MCAoMCkgJzAnIGEwNzEgKDApICcwJworYTA3MiAoMCkgJzAnIGEwNzMgKDApICcwJyBhMDc0ICgwKSAnMCcgYTA3NSAoMCkgJzAnIGEwNzYgKDApICcwJyBhMDc3ICgwKSAnMCcKK2EwNzggKDApICcwJyBhMDc5ICgwKSAnMCcgYTA4MCAoMCkgJzAnIGEwODEgKDApICcwJyBhMDgyICgwKSAnMCcgYTA4MyAoMCkgJzAnCithMDg0ICgwKSAnMCcgYTA4NSAoMCkgJzAnIGEwODYgKDApICcwJyBhMDg3ICgwKSAnMCcgYTA4OCAoMCkgJzAnIGEwODkgKDApICcwJworYTA5MCAoMCkgJzAnIGEwOTEgKDApICcwJyBhMDkyICgwKSAnMCcgYTA5MyAoMCkgJzAnIGEwOTQgKDApICcwJyBhMDk1ICgwKSAnMCcKK2EwOTYgKDApICcwJyBhMDk3ICgwKSAnMCcgYTA5OCAoMCkgJzAnIGEwOTkgKDApICcwJyBhMTAwICgwKSAnMCcgYTEwMSAoMCkgJzAnCithMTAyICgwKSAnMCcgYTEwMyAoMCkgJzAnIGExMDQgKDApICcwJyBhMTA1ICgwKSAnMCcgYTEwNiAoMCkgJzAnIGExMDcgKDApICcwJworYTEwOCAoMCkgJzAnIGExMDkgKDApICcwJyBhMTEwICgwKSAnMCcgYTExMSAoMCkgJzAnIGExMTIgKDApICcwJyBhMTEzICgwKSAnMCcKK2ExMTQgKDApICcwJyBhMTE1ICgwKSAnMCcgYTExNiAoMCkgJzAnIGExMTcgKDApICcwJyBhMTE4ICgwKSAnMCcgYTExOSAoMCkgJzAnCithMTIwICgwKSAnMCcgYTEyMSAoMCkgJzAnIGExMjIgKDApICcwJyBhMTIzICgwKSAnMCcgYTEyNCAoMCkgJzAnIGExMjUgKDApICcwJworYTEyNiAoMCkgJzAnIGExMjcgKDApICcwJyBhMTI4ICgwKSAnMCcgYTEyOSAoMCkgJzAnIGExMzAgKDApICcwJyBhMTMxICgwKSAnMCcKK2ExMzIgKDApICcwJyBhMTMzICgwKSAnMCcgYTEzNCAoMCkgJzAnIGExMzUgKDApICcwJyBhMTM2ICgwKSAnMCcgYTEzNyAoMCkgJzAnCithMTM4ICgwKSAnMCcgYTEzOSAoMCkgJzAnIGExNDAgKDApICcwJyBhMTQxICgwKSAnMCcgYTE0MiAoMCkgJzAnIGExNDMgKDApICcwJworYTE0NCAoMCkgJzAnIGExNDUgKDApICcwJyBhMTQ2ICgwKSAnMCcgYTE0NyAoMCkgJzAnIGExNDggKDApICcwJyBhMTQ5ICgwKSAnMCcKK2ExNTAgKDApICcwJyBhMTUxICgwKSAnMCcgYTE1MiAoMCkgJzAnIGExNTMgKDApICcwJyBhMTU0ICgwKSAnMCcgYTE1NSAoMCkgJzAnCithMTU2ICgwKSAnMCcgYTE1NyAoMCkgJzAnIGExNTggKDApICcwJyBhMTU5ICgwKSAnMCcgYTE2MCAoMCkgJzAnIGExNjEgKDApICcwJworYTE2MiAoMCkgJzAnIGExNjMgKDApICcwJyBhMTY0ICgwKSAnMCcgYTE2NSAoMCkgJzAnIGExNjYgKDApICcwJyBhMTY3ICgwKSAnMCcKK2ExNjggKDApICcwJyBhMTY5ICgwKSAnMCcgYTE3MCAoMCkgJzAnIGExNzEgKDApICcwJyBhMTcyICgwKSAnMCcgYTE3MyAoMCkgJzAnCithMTc0ICgwKSAnMCcgYTE3NSAoMCkgJzAnIGExNzYgKDApICcwJyBhMTc3ICgwKSAnMCcgYTE3OCAoMCkgJzAnIGExNzkgKDApICcwJworYTE4MCAoMCkgJzAnIGExODEgKDApICcwJyBhMTgyICgwKSAnMCcgYTE4MyAoMCkgJzAnIGExODQgKDApICcwJyBhMTg1ICgwKSAnMCcKK2ExODYgKDApICcwJyBhMTg3ICgwKSAnMCcgYTE4OCAoMCkgJzAnIGExODkgKDApICcwJyBhMTkwICgwKSAnMCcgYTE5MSAoMCkgJzAnCithMTkyICgwKSAnMCcgYTE5MyAoMCkgJzAnIGExOTQgKDApICcwJyBhMTk1ICgwKSAnMCcgYTE5NiAoMCkgJzAnIGExOTcgKDApICcwJworYTE5OCAoMCkgJzAnIGExOTkgKDApICcwJyBhMjAwICgwKSAnMCcgYTIwMSAoMCkgJzAnIGEyMDIgKDApICcwJyBhMjAzICgwKSAnMCcKK2EyMDQgKDApICcwJyBhMjA1ICgwKSAnMCcgYTIwNiAoMCkgJzAnIGEyMDcgKDApICcwJyBhMjA4ICgwKSAnMCcgYTIwOSAoMCkgJzAnCithMjEwICgwKSAnMCcgYTIxMSAoMCkgJzAnIGEyMTIgKDApICcwJyBhMjEzICgwKSAnMCcgYTIxNCAoMCkgJzAnIGEyMTUgKDApICcwJworYTIxNiAoMCkgJzAnIGEyMTcgKDApICcwJyBhMjE4ICgwKSAnMCcgYTIxOSAoMCkgJzAnIGEyMjAgKDApICcwJyBhMjIxICgwKSAnMCcKK2EyMjIgKDApICcwJyBhMjIzICgwKSAnMCcgYTIyNCAoMCkgJzAnIGEyMjUgKDApICcwJyBhMjI2ICgwKSAnMCcgYTIyNyAoMCkgJzAnCithMjI4ICgwKSAnMCcgYTIyOSAoMCkgJzAnIGEyMzAgKDApICcwJyBhMjMxICgwKSAnMCcgYTIzMiAoMCkgJzAnIGEyMzMgKDApICcwJworYTIzNCAoMCkgJzAnIGEyMzUgKDApICcwJyBhMjM2ICgwKSAnMCcgYTIzNyAoMCkgJzAnIGEyMzggKDApICcwJyBhMjM5ICgwKSAnMCcKK2EyNDAgKDApICcwJyBhMjQxICgwKSAnMCcgYTI0MiAoMCkgJzAnIGEyNDMgKDApICcwJyBhMjQ0ICgwKSAnMCcgYTI0NSAoMCkgJzAnCithMjQ2ICgwKSAnMCcgYTI0NyAoMCkgJzAnIGEyNDggKDApICcwJyBhMjQ5ICgwKSAnMCcgYTI1MCAoMCkgJzAnIGEyNTEgKDApICcwJworYTI1MiAoMCkgJzAnIGEyNTMgKDApICcwJyBhMjU0ICgwKSAnMCcgYTI1NSAoMCkgJzAnIGEyNTYgKDApICcwJyBhMjU3ICgwKSAnMCcKK2EyNTggKDApICcwJyBhMjU5ICgwKSAnMCcgYTI2MCAoMCkgJzAnIGEyNjEgKDApICcwJyBhMjYyICgwKSAnMCcgYTI2MyAoMCkgJzAnCithMjY0ICgwKSAnMCcgYTI2NSAoMCkgJzAnIGEyNjYgKDApICcwJyBhMjY3ICgwKSAnMCcgYTI2OCAoMCkgJzAnIGEyNjkgKDApICcwJworYTI3MCAoMCkgJzAnIGEyNzEgKDApICcwJyBhMjcyICgwKSAnMCcgYTI3MyAoMCkgJzAnIGEyNzQgKDApICcwJyBhMjc1ICgwKSAnMCcKK2EyNzYgKDApICcwJyBhMjc3ICgwKSAnMCcgYTI3OCAoMCkgJzAnIGEyNzkgKDApICcwJyBhMjgwICgwKSAnMCcgYTI4MSAoMCkgJzAnCithMjgyICgwKSAnMCcgYTI4MyAoMCkgJzAnIGEyODQgKDApICcwJyBhMjg1ICgwKSAnMCcgYTI4NiAoMCkgJzAnIGEyODcgKDApICcwJworYTI4OCAoMCkgJzAnIGEyODkgKDApICcwJyBhMjkwICgwKSAnMCcgYTI5MSAoMCkgJzAnIGEyOTIgKDApICcwJyBhMjkzICgwKSAnMCcKK2EyOTQgKDApICcwJyBhMjk1ICgwKSAnMCcgYTI5NiAoMCkgJzAnIGEyOTcgKDApICcwJyBhMjk4ICgwKSAnMCcgYTI5OSAoMCkgJzAnCis+CitdPgorPGRvYz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz48ZS8+PGUvPjxlLz4KKzwvZG9jPgpkaWZmIC0tZ2l0IGEvdGVzdC9lcnJvcnMvcmVjX2F0dF9kZWZhdWx0LnhtbCBiL3Rlc3QvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzMzYwMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZXJyb3JzL3JlY19hdHRfZGVmYXVsdC54bWwKQEAgLTAsMCArMSw2IEBACis8IURPQ1RZUEUgZG9jIFNZU1RFTSAiTiIgWworICA8IUVOVElUWSBhICImYjsiPgorICA8IUFUVExJU1QgeCB5IENEQVRBICImYTsiPgorICA8IUVOVElUWSBiICImYTsiPgorXT4KKzxkb2MgYXR0cj0iJmE7Ii8+CmRpZmYgLS1naXQgYS90ZXN0L2Vycm9ycy90cmFpbGluZy1udWxsLTEueG1sIGIvdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTczMzRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0xLnhtbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2Vycm9ycy90cmFpbGluZy1udWxsLTIueG1sIGIvdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZmZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvdHJhaWxpbmctbnVsbC0yLnhtbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2Vycm9ycy90cnVuY2F0ZWQtdXRmMTYueG1sIGIvdGVzdC9lcnJvcnMvdHJ1bmNhdGVkLXV0ZjE2LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzU1ZGRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9lcnJvcnMvdHJ1bmNhdGVkLXV0ZjE2LnhtbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbCBiL3Rlc3QvZXJyb3JzL3VuY2xvc2VkLWVsZW1lbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTcwMGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2Vycm9ycy91bmNsb3NlZC1lbGVtZW50LnhtbApAQCAtMCwwICsxIEBACis8ZD4KZGlmZiAtLWdpdCBhL3Rlc3QvZXJyb3JzL3V0ZjgtMS54bWwgYi90ZXN0L2Vycm9ycy91dGY4LTEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODFhYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2Vycm9ycy91dGY4LTEueG1sCkBAIC0wLDAgKzEgQEAKKzxkPsOELi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPDwKZGlmZiAtLWdpdCBhL3Rlc3QvZXJyb3JzL3V0ZjgtMi54bWwgYi90ZXN0L2Vycm9ycy91dGY4LTIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGM3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2Vycm9ycy91dGY4LTIueG1sCkBAIC0wLDAgKzEgQEAKKzxkPi48POKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrOKCrApkaWZmIC0tZ2l0IGEvdGVzdC9pc3N1ZTYyNi54bWwgYi90ZXN0L2lzc3VlNjI2LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjBmNjgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9pc3N1ZTYyNi54bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGRvYyBbCis8IUFUVExJU1QgZSBhMSBDREFUQSAjSU1QTElFRD4KKzwhQVRUTElTVCBlIGEyIENEQVRBICNJTVBMSUVEPgorPCFBVFRMSVNUIGUgYTMgQ0RBVEEgI0lNUExJRUQ+Cis8IUFUVExJU1QgZSBhNCBDREFUQSAjSU1QTElFRD4KKzwhQVRUTElTVCBlIGE1IENEQVRBICNJTVBMSUVEPgorPCFBVFRMSVNUIGUgYTYgQ0RBVEEgI0lNUExJRUQ+CitdPgorPGRvYz4KKyAgICA8IS0tIFRoaXMgdGVzdHMgd2hldGhlciB4bWxDbGVhblNwZWNpYWxBdHRyIHdvcmtzLiBUaGUgYXR0cmlidXRlIHZhbHVlcworICAgICAgICAgbXVzdCBub3QgYmUgbm9ybWFsaXplZC4gLS0+CisgICAgPGUgYTE9IiB4ICB4ICIgYTI9IiB4ICB4ICIgYTM9IiB4ICB4ICIgYTQ9IiB4ICB4ICIgYTU9IiB4ICB4ICIgYTY9IiB4ICB4ICIvPgorPC9kb2M+CmRpZmYgLS1naXQgYS90ZXN0L2lzc3VlNjQzLnhtbCBiL3Rlc3QvaXNzdWU2NDMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWZlYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2lzc3VlNjQzLnhtbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGRvYyBbCisgICAgPCFBVFRMSVNUIGVsZW0geG1sbnMgQ0RBVEEgI0ZJWEVEICd1cm46ZGVmMic+CisgICAgPCFBVFRMSVNUIGVsZW0geG1sbnM6YSBDREFUQSAjRklYRUQgJ3VybjphMic+CitdPgorCis8ZG9jIHhtbG5zPSJ1cm46ZGVmIiB4bWxuczphPSJ1cm46YSI+CisgICAgPGVsZW0vPgorPC9kb2M+CmRpZmYgLS1naXQgYS90ZXN0L25zLWVudC54bWwgYi90ZXN0L25zLWVudC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxZmRmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbnMtZW50LnhtbApAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgZG9jIFsKKyAgPCFFTlRJVFkgZW50MSAiPGVsZW0vPiI+CisgIDwhRU5USVRZIGVudDIgIjxuczplbGVtLz4iPgorXT4KKzxkb2M+CisgICAgPGEgeG1sbnM9InVybjphIj4mZW50MTs8L2E+CisgICAgPGIgeG1sbnM9InVybjpiIj4mZW50MTs8L2I+CisgICAgPGEgeG1sbnM6bnM9InVybjphIj4mZW50Mjs8L2E+CisgICAgPGIgeG1sbnM6bnM9InVybjpiIj4mZW50Mjs8L2I+Cis8L2RvYz4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9nMC5lbnQgYi90ZXN0L3JlY3Vyc2UvZzAuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODMyZjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JlY3Vyc2UvZzAuZW50CkBAIC0wLDAgKzEsNCBAQAoraGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhCitoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGEKK2hhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYQoraGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhaGFoYWhhCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvZzEuZW50IGIvdGVzdC9yZWN1cnNlL2cxLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRlNjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2cxLmVudApAQCAtMCwwICsxLDQgQEAKKyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOworJmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7CismZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsKKyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOyZnMDsmZzA7JmcwOwpkaWZmIC0tZ2l0IGEvdGVzdC9yZWN1cnNlL2cyLmVudCBiL3Rlc3QvcmVjdXJzZS9nMi5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODBiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvcmVjdXJzZS9nMi5lbnQKQEAgLTAsMCArMSw0IEBACismZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsKKyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOworJmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7CismZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsmZzE7JmcxOyZnMTsKZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9nMy5lbnQgYi90ZXN0L3JlY3Vyc2UvZzMuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDc3MjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JlY3Vyc2UvZzMuZW50CkBAIC0wLDAgKzEsNCBAQAorJmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7CismZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsKKyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOworJmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7JmcyOyZnMjsmZzI7CmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvZ2EuZW50IGIvdGVzdC9yZWN1cnNlL2dhLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE4MmRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2dhLmVudApAQCAtMCwwICsxIEBACitzb21lIGludGVybmFsIGRhdGEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvZ2IuZW50IGIvdGVzdC9yZWN1cnNlL2diLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjI1YWQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2diLmVudApAQCAtMCwwICsxIEBACismYTsmYTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvZ2MuZW50IGIvdGVzdC9yZWN1cnNlL2djLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGYxNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2djLmVudApAQCAtMCwwICsxIEBACismYjsmYjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvZ29vZC54bWwgYi90ZXN0L3JlY3Vyc2UvZ29vZC54bWwKaW5kZXggNjBhYTFiNi4uMjFiMThhZSAxMDA2NDQKLS0tIGEvdGVzdC9yZWN1cnNlL2dvb2QueG1sCisrKyBiL3Rlc3QvcmVjdXJzZS9nb29kLnhtbApAQCAtOTcsMjQ3ICs5Nyw0IEBACiAmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKICZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwogJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CiAmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDs8L2Zvbz4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9nb29kX2F0dHIueG1sIGIvdGVzdC9yZWN1cnNlL2dvb2RfYXR0ci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1MDBkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvcmVjdXJzZS9nb29kX2F0dHIueG1sCkBAIC0wLDAgKzEsMTAwIEBACis8IURPQ1RZUEUgZm9vIFsKKzwhRU5USVRZIGYgInNvbWUgaW50ZXJuYWwgZGF0YSByYXRoZXIgbGFyZ2UgdGFraW5nIHF1aXRlIHNvbWUgcm9vbSI+Cis8IUVOVElUWSBlICImZjsmZjsiPgorPCFFTlRJVFkgZCAiJmU7JmU7Ij4KK10+Cis8Zm9vIGJhcj0iJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKKyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOworJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7CismZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsiLz4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9nb29kYXR0ci54bWwgYi90ZXN0L3JlY3Vyc2UvZ29vZGF0dHIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGY3MDcxLi4wMDAwMDAwCi0tLSBhL3Rlc3QvcmVjdXJzZS9nb29kYXR0ci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotPCFET0NUWVBFIGZvbyBbCi08IUVOVElUWSBmICJzb21lIGludGVybmFsIGRhdGEgcmF0aGVyIGxhcmdlIHRha2luZyBxdWl0ZSBzb21lIHJvb20iPgotPCFFTlRJVFkgZSAiJmY7JmY7Ij4KLTwhRU5USVRZIGQgIiZlOyZlOyI+Ci1dPgotPGZvbyBiYXI9IiZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ci0mZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsmZDsKLSZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOyZkOwotJmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7JmQ7Ii8+CmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvaHVnZV9kdGQueG1sIGIvdGVzdC9yZWN1cnNlL2h1Z2VfZHRkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc2MWIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2h1Z2VfZHRkLnhtbApAQCAtMCwwICsxLDUgQEAKKzwhLS0gVGhlIERURCBpcyBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYnkgdGVzdHJlY3Vyc2UuYyAtLT4KKzwhRE9DVFlQRSBmb28gU1lTVEVNICJodWdlX2R0ZC5kdGQiPgorPCEtLSBBbm90aGVyIGVudGl0eSByZWZlcmVuY2UgdG8gdGVzdCB3aGV0aGVyIHRoZSBEVEQgaXMgYWRkZWQgdG8KKyAgICAgc2l6ZWVudGl0aWVzIC0tPgorPGZvbz4mZW50OzwvZm9vPgpkaWZmIC0tZ2l0IGEvdGVzdC9yZWN1cnNlL2xvbDMueG1sIGIvdGVzdC9yZWN1cnNlL2xvbDMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2MyMzQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3QvcmVjdXJzZS9sb2wzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPCFET0NUWVBFIGJpbGxpb24gU1lTVEVNICJsb2wzLmR0ZCI+DQotDQotPGJpbGxpb24+PC9iaWxsaW9uPg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9sb2w0LnBhdGNoIGIvdGVzdC9yZWN1cnNlL2xvbDQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MWJlMjguLjAwMDAwMDAKLS0tIGEvdGVzdC9yZWN1cnNlL2xvbDQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1JbmRleDogcGFyc2VyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBwYXJzZXIuYwkocmV2aXNpb24gMzc3MykKLSsrKyBwYXJzZXIuYwkod29ya2luZyBjb3B5KQotQEAgLTI1MDUsNiArMjUwNSwxMSBAQCB4bWxTdHJpbmdMZW5EZWNvZGVFbnRpdGllcyh4bWxQYXJzZXJDdHh0Ci0gCSAgICBjID0gQ1VSX1NDSEFSKHN0ciwgbCk7Ci0gCWVsc2UKLSAJICAgIGMgPSAwOwotKyAgICAgICAgaWYgKChuYmNoYXJzID4gNTAwMDAwKSAmJgotKwkgICAgKGN0eHQtPmluc3RhdGUgPT0gWE1MX1BBUlNFUl9BVFRSSUJVVEVfVkFMVUUpKSB7Ci0rCSAgICB4bWxGYXRhbEVycihjdHh0LCBYTUxfRVJSX0VOVElUWV9MT09QLCBOVUxMKTsKLSsJICAgIGdvdG8gaW50X2Vycm9yOwotKyAgICAgICAgfQotICAgICB9Ci0gICAgIGJ1ZmZlcltuYmNoYXJzKytdID0gMDsKLSAgICAgcmV0dXJuKGJ1ZmZlcik7CmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvbG9sNS54bWwgYi90ZXN0L3JlY3Vyc2UvbG9sX2NsYXNzaWMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0L3JlY3Vyc2UvbG9sNS54bWwKcmVuYW1lIHRvIHRlc3QvcmVjdXJzZS9sb2xfY2xhc3NpYy54bWwKZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9sb2xfZWcueG1sIGIvdGVzdC9yZWN1cnNlL2xvbF9lZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4OTQwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvcmVjdXJzZS9sb2xfZWcueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgYmlsbGlvbiBbCisgIDwhRUxFTUVOVCBiaWxsaW9uICgjUENEQVRBKT4KKyAgPCFFTlRJVFkgZzAgU1lTVEVNICJnMC5lbnQiPgorICA8IUVOVElUWSBnMSBTWVNURU0gImcxLmVudCI+CisgIDwhRU5USVRZIGcyIFNZU1RFTSAiZzIuZW50Ij4KKyAgPCFFTlRJVFkgZzMgU1lTVEVNICJnMy5lbnQiPgorXT4KKzxiaWxsaW9uPiZnMzs8L2JpbGxpb24+CmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvbG9sX2VwLnhtbCBiL3Rlc3QvcmVjdXJzZS9sb2xfZXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTQzN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JlY3Vyc2UvbG9sX2VwLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBiaWxsaW9uIFsKKyAgPCFFTEVNRU5UIGJpbGxpb24gKCNQQ0RBVEEpPgorICA8IUVOVElUWSAlIHAwIFNZU1RFTSAicDAuZW50Ij4KKyAgPCFFTlRJVFkgJSBwMSBTWVNURU0gInAxLmVudCI+CisgIDwhRU5USVRZICUgcDIgU1lTVEVNICJwMi5lbnQiPgorICA8IUVOVElUWSAlIHAzIFNZU1RFTSAicDMuZW50Ij4KKyAgJXAzOworXT4KKzxiaWxsaW9uLz4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9sb2wyLnhtbCBiL3Rlc3QvcmVjdXJzZS9sb2xfaWdfYXR0ci54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3QvcmVjdXJzZS9sb2wyLnhtbApyZW5hbWUgdG8gdGVzdC9yZWN1cnNlL2xvbF9pZ19hdHRyLnhtbApkaWZmIC0tZ2l0IGEvdGVzdC9yZWN1cnNlL2xvbDEueG1sIGIvdGVzdC9yZWN1cnNlL2xvbF9pZ19jb250ZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdC9yZWN1cnNlL2xvbDEueG1sCnJlbmFtZSB0byB0ZXN0L3JlY3Vyc2UvbG9sX2lnX2NvbnRlbnQueG1sCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvbG9sX2lwX2NvbnRlbnQuZHRkIGIvdGVzdC9yZWN1cnNlL2xvbF9pcF9jb250ZW50LmR0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E1NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2xvbF9pcF9jb250ZW50LmR0ZApAQCAtMCwwICsxLDkgQEAKKzwhRUxFTUVOVCBiaWxsaW9uICgjUENEQVRBKT4KKzwhRU5USVRZICUgcDAgIjwhLS0tLT4iPgorPCFFTlRJVFkgJSBwMSAiJXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDsiPgorPCFFTlRJVFkgJSBwMiAiJXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTsiPgorPCFFTlRJVFkgJSBwMyAiJXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjsiPgorPCFFTlRJVFkgJSBwNCAiJXAzOyVwMzslcDM7JXAzOyVwMzslcDM7JXAzOyVwMzslcDM7JXAzOyVwMzslcDM7JXAzOyVwMzsiPgorPCFFTlRJVFkgJSBwNSAiJXA0OyVwNDslcDQ7JXA0OyVwNDslcDQ7JXA0OyVwNDslcDQ7JXA0OyVwNDslcDQ7JXA0OyVwNDsiPgorPCFFTlRJVFkgJSBwNiAiJXA1OyVwNTslcDU7JXA1OyVwNTslcDU7JXA1OyVwNTslcDU7JXA1OyVwNTslcDU7JXA1OyVwNTsiPgorJXA1OwpkaWZmIC0tZ2l0IGEvdGVzdC9yZWN1cnNlL2xvbF9pcF9jb250ZW50LnhtbCBiL3Rlc3QvcmVjdXJzZS9sb2xfaXBfY29udGVudC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2ZjRjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvcmVjdXJzZS9sb2xfaXBfY29udGVudC54bWwKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBiaWxsaW9uIFNZU1RFTSAibG9sX2lwX2NvbnRlbnQuZHRkIj4KKzxiaWxsaW9uLz4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9sb2wzLmR0ZCBiL3Rlc3QvcmVjdXJzZS9sb2xfaXBfdmFsdWUuZHRkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0L3JlY3Vyc2UvbG9sMy5kdGQKcmVuYW1lIHRvIHRlc3QvcmVjdXJzZS9sb2xfaXBfdmFsdWUuZHRkCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvbG9sX2lwX3ZhbHVlLnhtbCBiL3Rlc3QvcmVjdXJzZS9sb2xfaXBfdmFsdWUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTQwM2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JlY3Vyc2UvbG9sX2lwX3ZhbHVlLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBiaWxsaW9uIFNZU1RFTSAibG9sX2lwX3ZhbHVlLmR0ZCI+DQorDQorPGJpbGxpb24+PC9iaWxsaW9uPg0KKw0KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9sb2w2LnhtbCBiL3Rlc3QvcmVjdXJzZS9sb2xfbG9uZ19uYW1lLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdC9yZWN1cnNlL2xvbDYueG1sCnJlbmFtZSB0byB0ZXN0L3JlY3Vyc2UvbG9sX2xvbmdfbmFtZS54bWwKZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9sb2w0LnhtbCBiL3Rlc3QvcmVjdXJzZS9sb2xfbG9uZ192YWx1ZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3QvcmVjdXJzZS9sb2w0LnhtbApyZW5hbWUgdG8gdGVzdC9yZWN1cnNlL2xvbF9sb25nX3ZhbHVlLnhtbApkaWZmIC0tZ2l0IGEvdGVzdC9yZWN1cnNlL2xvbF9wYXJhbS54bWwgYi90ZXN0L3JlY3Vyc2UvbG9sX3BhcmFtLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI3OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL2xvbF9wYXJhbS54bWwKQEAgLTAsMCArMSw2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCisgIENvcHlyaWdodCAoQykgMjAyMCBTZWJhc3RpYW4gUGlwcGluZyA8c2ViYXN0aWFuQHBpcHBpbmcub3JnPgorICB2My4xIDIwMjAtMDYtMjEsIG5vdCAoeWV0KSB0byBiZSBwdWJsaXNoZWQKKworICAiUGFyYW1ldGVyIExhdWdocyIsIGkuZS4gdmFyaWFudCBvZiBCaWxsaW9uIExhdWdocyBBdHRhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHBhcmFtZXRlciBlbnRpdGllcyB0aGUgb3RoZXIgd2F5IGFyb3VuZAorCisgIFVzZSBvZiAiJXBlMjQ7IiBiZWxvdyBtYWtlcyB0aGUgWE1MIHByb2Nlc3NvciAoZS5nLiAieG1sd2YgLXAgPCBmaWxlLnhtbCIgb3IKKyAgInhtbGxpbnQgZmlsZS54bWwgPiAvZGV2L251bGwiKSB0YWtlIDMgdG8gMTIgc2Vjb25kcyBvbiBteSBtYWNoaW5lLgorICBJbmNyZWFzZSB0byAiJXBlMjU7IiBhbmQgYmV5b25kIGNhcmVmdWxseTogdXNlIG9mICIlcGU0MDsiIG1ha2VzIG15IG1hY2hpbmUKKyAgbmVlZCBhIGhhcmQgcmVzZXQuCisKKyAgTm90ZSB0aGF0IHVubGlrZSBsaWJ4bWwyLCBsaWJleHBhdCBkb2VzIG5vdCBoYXZlIGFueSBwcm90ZWN0aW9uIGFnYWluc3QKKyAgYmlsbGlvbiBsYXVnaHMgYXR0YWNrcyB0byB0aGlzIGRheSwgc28gaXQncyBub3QgYSBuZXcgdnVsbmVyYWJpbGl0eQorICB3aXRoIHJlZ2FyZCB0byBsaWJleHBhdC4gIFVwY29taW5nIHJlbGVhc2UgbGliZXhwYXQgMi40LjAgd2lsbCBoYXZlCisgIHByb3RlY3Rpb24gYWdhaW5zdCB0aGlzIGZhbWlseSBvZiBhdHRhY2tzLgorLS0+Cis8IURPQ1RZUEUgciBbCisgIDwhRU5USVRZICUgcGVfMSAiPCEtLS0tPiI+CisgIDwhRU5USVRZICUgcGVfMiAiJiMzNztwZV8xOzwhLS0tLT4mIzM3O3BlXzE7Ij4KKyAgPCFFTlRJVFkgJSBwZV8zICImIzM3O3BlXzI7PCEtLS0tPiYjMzc7cGVfMjsiPgorICA8IUVOVElUWSAlIHBlXzQgIiYjMzc7cGVfMzs8IS0tLS0+JiMzNztwZV8zOyI+CisgIDwhRU5USVRZICUgcGVfNSAiJiMzNztwZV80OzwhLS0tLT4mIzM3O3BlXzQ7Ij4KKyAgPCFFTlRJVFkgJSBwZV82ICImIzM3O3BlXzU7PCEtLS0tPiYjMzc7cGVfNTsiPgorICA8IUVOVElUWSAlIHBlXzcgIiYjMzc7cGVfNjs8IS0tLS0+JiMzNztwZV82OyI+CisgIDwhRU5USVRZICUgcGVfOCAiJiMzNztwZV83OzwhLS0tLT4mIzM3O3BlXzc7Ij4KKyAgPCFFTlRJVFkgJSBwZV85ICImIzM3O3BlXzg7PCEtLS0tPiYjMzc7cGVfODsiPgorICA8IUVOVElUWSAlIHBlMTAgIiYjMzc7cGVfOTs8IS0tLS0+JiMzNztwZV85OyI+CisgIDwhRU5USVRZICUgcGUxMSAiJiMzNztwZTEwOzwhLS0tLT4mIzM3O3BlMTA7Ij4KKyAgPCFFTlRJVFkgJSBwZTEyICImIzM3O3BlMTE7PCEtLS0tPiYjMzc7cGUxMTsiPgorICA8IUVOVElUWSAlIHBlMTMgIiYjMzc7cGUxMjs8IS0tLS0+JiMzNztwZTEyOyI+CisgIDwhRU5USVRZICUgcGUxNCAiJiMzNztwZTEzOzwhLS0tLT4mIzM3O3BlMTM7Ij4KKyAgPCFFTlRJVFkgJSBwZTE1ICImIzM3O3BlMTQ7PCEtLS0tPiYjMzc7cGUxNDsiPgorICA8IUVOVElUWSAlIHBlMTYgIiYjMzc7cGUxNTs8IS0tLS0+JiMzNztwZTE1OyI+CisgIDwhRU5USVRZICUgcGUxNyAiJiMzNztwZTE2OzwhLS0tLT4mIzM3O3BlMTY7Ij4KKyAgPCFFTlRJVFkgJSBwZTE3ICImIzM3O3BlMTY7PCEtLS0tPiYjMzc7cGUxNjsiPgorICA8IUVOVElUWSAlIHBlMTggIiYjMzc7cGUxNzs8IS0tLS0+JiMzNztwZTE3OyI+CisgIDwhRU5USVRZICUgcGUxOSAiJiMzNztwZTE4OzwhLS0tLT4mIzM3O3BlMTg7Ij4KKyAgPCFFTlRJVFkgJSBwZTIwICImIzM3O3BlMTk7PCEtLS0tPiYjMzc7cGUxOTsiPgorICA8IUVOVElUWSAlIHBlMjEgIiYjMzc7cGUyMDs8IS0tLS0+JiMzNztwZTIwOyI+CisgIDwhRU5USVRZICUgcGUyMiAiJiMzNztwZTIxOzwhLS0tLT4mIzM3O3BlMjE7Ij4KKyAgPCFFTlRJVFkgJSBwZTIzICImIzM3O3BlMjI7PCEtLS0tPiYjMzc7cGUyMjsiPgorICA8IUVOVElUWSAlIHBlMjQgIiYjMzc7cGUyMzs8IS0tLS0+JiMzNztwZTIzOyI+CisgIDwhRU5USVRZICUgcGUyNSAiJiMzNztwZTI0OzwhLS0tLT4mIzM3O3BlMjQ7Ij4KKyAgPCFFTlRJVFkgJSBwZTI2ICImIzM3O3BlMjU7PCEtLS0tPiYjMzc7cGUyNTsiPgorICA8IUVOVElUWSAlIHBlMjcgIiYjMzc7cGUyNjs8IS0tLS0+JiMzNztwZTI2OyI+CisgIDwhRU5USVRZICUgcGUyOCAiJiMzNztwZTI3OzwhLS0tLT4mIzM3O3BlMjc7Ij4KKyAgPCFFTlRJVFkgJSBwZTI5ICImIzM3O3BlMjg7PCEtLS0tPiYjMzc7cGUyODsiPgorICA8IUVOVElUWSAlIHBlMzAgIiYjMzc7cGUyOTs8IS0tLS0+JiMzNztwZTI5OyI+CisgIDwhRU5USVRZICUgcGUzMSAiJiMzNztwZTMwOzwhLS0tLT4mIzM3O3BlMzA7Ij4KKyAgPCFFTlRJVFkgJSBwZTMyICImIzM3O3BlMzE7PCEtLS0tPiYjMzc7cGUzMTsiPgorICA8IUVOVElUWSAlIHBlMzMgIiYjMzc7cGUzMjs8IS0tLS0+JiMzNztwZTMyOyI+CisgIDwhRU5USVRZICUgcGUzNCAiJiMzNztwZTMzOzwhLS0tLT4mIzM3O3BlMzM7Ij4KKyAgPCFFTlRJVFkgJSBwZTM1ICImIzM3O3BlMzQ7PCEtLS0tPiYjMzc7cGUzNDsiPgorICA8IUVOVElUWSAlIHBlMzYgIiYjMzc7cGUzNTs8IS0tLS0+JiMzNztwZTM1OyI+CisgIDwhRU5USVRZICUgcGUzNyAiJiMzNztwZTM2OzwhLS0tLT4mIzM3O3BlMzY7Ij4KKyAgPCFFTlRJVFkgJSBwZTM4ICImIzM3O3BlMzc7PCEtLS0tPiYjMzc7cGUzNzsiPgorICA8IUVOVElUWSAlIHBlMzkgIiYjMzc7cGUzODs8IS0tLS0+JiMzNztwZTM4OyI+CisgIDwhRU5USVRZICUgcGU0MCAiJiMzNztwZTM5OzwhLS0tLT4mIzM3O3BlMzk7Ij4KKyAgJXBlMjQ7IDwhLS0gbm90IGF0IGZ1bGwgcG90ZW50aWFsLCBpbmNyZWFzZSB0b3dhcmRzICIlcGU0MDsiIGNhcmVmdWxseSAtLT4KK10+Cis8ci8+CmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvcDAuZW50IGIvdGVzdC9yZWN1cnNlL3AwLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmUxMjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL3AwLmVudApAQCAtMCwwICsxLDQgQEAKKzwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT4KKzwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT4KKzwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT4KKzwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PCEtLS0tPjwhLS0tLT4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9wMS5lbnQgYi90ZXN0L3JlY3Vyc2UvcDEuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JlY3Vyc2UvcDEuZW50CkBAIC0wLDAgKzEsNCBAQAorJXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7CislcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDsKKyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOworJXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7JXAwOyVwMDslcDA7CmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvcDIuZW50IGIvdGVzdC9yZWN1cnNlL3AyLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDVjMzA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL3AyLmVudApAQCAtMCwwICsxLDQgQEAKKyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOworJXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7CislcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTsKKyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOyVwMTslcDE7JXAxOwpkaWZmIC0tZ2l0IGEvdGVzdC9yZWN1cnNlL3AzLmVudCBiL3Rlc3QvcmVjdXJzZS9wMy5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZDQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvcmVjdXJzZS9wMy5lbnQKQEAgLTAsMCArMSw0IEBACislcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjsKKyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOworJXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7CislcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjslcDI7JXAyOyVwMjsKZGlmZiAtLWdpdCBhL3Rlc3QvcmVjdXJzZS9wYS5lbnQgYi90ZXN0L3JlY3Vyc2UvcGEuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OGQxZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3JlY3Vyc2UvcGEuZW50CkBAIC0wLDAgKzEgQEAKKzwhLS0gY29tbWVudCAtLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvcGIuZW50IGIvdGVzdC9yZWN1cnNlL3BiLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2E4OTQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL3BiLmVudApAQCAtMCwwICsxIEBACislYTslYTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L3JlY3Vyc2UvcGMuZW50IGIvdGVzdC9yZWN1cnNlL3BjLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQ0M2VhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9yZWN1cnNlL3BjLmVudApAQCAtMCwwICsxIEBACislYjslYjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L3NjaGVtYXMvaXNzdWU0OTFfMC54bWwgYi90ZXN0L3NjaGVtYXMvaXNzdWU0OTFfMC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiMmZjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qvc2NoZW1hcy9pc3N1ZTQ5MV8wLnhtbApAQCAtMCwwICsxIEBACis8Q2hpbGQgeG1sbnM9Imh0dHA6Ly93d3cudGVzdC5jb20iPjU8L0NoaWxkPgpkaWZmIC0tZ2l0IGEvdGVzdC9zY2hlbWFzL2lzc3VlNDkxXzAueHNkIGIvdGVzdC9zY2hlbWFzL2lzc3VlNDkxXzAueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzAyNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3NjaGVtYXMvaXNzdWU0OTFfMC54c2QKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3d3dy50ZXN0LmNvbSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnRlc3QuY29tIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJhc2VUeXBlIj4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6aW50IiAvPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNoaWxkVHlwZSI+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJCYXNlVHlwZSI+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiYWQiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisgIDx4czplbGVtZW50IG5hbWU9IkNoaWxkIiB0eXBlPSJDaGlsZFR5cGUiIC8+Cis8L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3Qvc2NoZW1hcy9vc3MtZnV6ei01MTI5NV8wLnhtbCBiL3Rlc3Qvc2NoZW1hcy9vc3MtZnV6ei01MTI5NV8wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE3ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9zY2hlbWFzL29zcy1mdXp6LTUxMjk1XzAueG1sCkBAIC0wLDAgKzEgQEAKKzxlLz4KZGlmZiAtLWdpdCBhL3Rlc3Qvc2NoZW1hcy9vc3MtZnV6ei01MTI5NV8wLnhzZCBiL3Rlc3Qvc2NoZW1hcy9vc3MtZnV6ei01MTI5NV8wLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGU5NmFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9zY2hlbWFzL29zcy1mdXp6LTUxMjk1XzAueHNkCkBAIC0wLDAgKzEsNCBAQAorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICAgIDx4czplbGVtZW50IG5hbWU9ImUiIHN1YnN0aXR1dGlvbkdyb3VwPSJlIi8+CisgICAgPHhzOmVsZW1lbnQgbmFtZT0idCIgc3Vic3RpdHV0aW9uR3JvdXA9ImUiIHR5cGU9J3hzOmRlY2ltYWwnLz4KKzwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdC92YWxpZC9kdGRzL2h1Z2UuZW50IGIvdGVzdC92YWxpZC9kdGRzL2h1Z2UuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTVmZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3ZhbGlkL2R0ZHMvaHVnZS5lbnQKQEAgLTAsMCArMSwxMDQgQEAKKzwhLS0gTW9yZSB0aGFuIE1JTkxFTiAoNDAwMCkgYnl0ZXMgb2YgY29tbWVudHMgLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cis8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKworPCFFTEVNRU5UIGRvYyAoI1BDREFUQSk+CmRpZmYgLS1naXQgYS90ZXN0L3ZhbGlkL2R0ZHMvcGUtbGF0aW4xLmVudCBiL3Rlc3QvdmFsaWQvZHRkcy9wZS1sYXRpbjEuZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWU0ODIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3ZhbGlkL2R0ZHMvcGUtbGF0aW4xLmVudApAQCAtMCwwICsxLDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KKzwhRU5USVRZIGxhdGluMSAi5Pb8Ij4KZGlmZiAtLWdpdCBhL3Rlc3QvdmFsaWQvZHRkcy9wZS12YWwtbGF0aW4xLmR0ZCBiL3Rlc3QvdmFsaWQvZHRkcy9wZS12YWwtbGF0aW4xLmR0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2JjYjcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC92YWxpZC9kdGRzL3BlLXZhbC1sYXRpbjEuZHRkCkBAIC0wLDAgKzEsMyBAQAorPCFFTEVNRU5UIGRvYyAoI1BDREFUQSk+Cis8IUVOVElUWSAlIHBlIFNZU1RFTSAicGUtdmFsLWxhdGluMS5lbnQiPgorPCFFTlRJVFkgbGF0aW4xICIlcGU7Ij4KZGlmZiAtLWdpdCBhL3Rlc3QvdmFsaWQvZHRkcy9wZS12YWwtbGF0aW4xLmVudCBiL3Rlc3QvdmFsaWQvZHRkcy9wZS12YWwtbGF0aW4xLmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFlNThmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC92YWxpZC9kdGRzL3BlLXZhbC1sYXRpbjEuZW50CkBAIC0wLDAgKzEsMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgor5Pb8CmRpZmYgLS1naXQgYS90ZXN0L3ZhbGlkL2h1Z2UueG1sIGIvdGVzdC92YWxpZC9odWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWVkMzhjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC92YWxpZC9odWdlLnhtbApAQCAtMCwwICsxLDUgQEAKKzwhRE9DVFlQRSBkb2MgWworPCFFTlRJVFkgJSBwZSBTWVNURU0gImR0ZHMvaHVnZS5lbnQiPgorJXBlOworXT4KKzxkb2M+dGVzdDwvZG9jPgpkaWZmIC0tZ2l0IGEvdGVzdC92YWxpZC9wZS1sYXRpbjEueG1sIGIvdGVzdC92YWxpZC9wZS1sYXRpbjEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYmQ5MTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3ZhbGlkL3BlLWxhdGluMS54bWwKQEAgLTAsMCArMSw2IEBACis8IURPQ1RZUEUgZG9jIFsKKzwhRUxFTUVOVCBkb2MgKCNQQ0RBVEEpPgorPCFFTlRJVFkgJSBwZSBTWVNURU0gImR0ZHMvcGUtbGF0aW4xLmVudCI+CislcGU7CitdPgorPGRvYz4mbGF0aW4xOzwvZG9jPgpkaWZmIC0tZ2l0IGEvdGVzdC92YWxpZC9wZS12YWwtbGF0aW4xLnhtbCBiL3Rlc3QvdmFsaWQvcGUtdmFsLWxhdGluMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NjRhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdmFsaWQvcGUtdmFsLWxhdGluMS54bWwKQEAgLTAsMCArMSwyIEBACis8IURPQ1RZUEUgZG9jIFNZU1RFTSAiZHRkcy9wZS12YWwtbGF0aW4xLmR0ZCI+Cis8ZG9jPiZsYXRpbjE7PC9kb2M+CmRpZmYgLS1naXQgYS90ZXN0QXV0b21hdGEuYyBiL3Rlc3RBdXRvbWF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDNjYjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RBdXRvbWF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAgQEAKLS8qCi0gKiB0ZXN0QXV0b21hdGEuYzogc2ltcGxlIG1vZHVsZSBmb3IgdGVzdGluZyByZWdleHAgYXV0b21hdGEKLSAqCi0gKiBTZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogRGFuaWVsIFZlaWxsYXJkIDx2ZWlsbGFyZEByZWRoYXQuY29tPgotICovCi0KLSNpbmNsdWRlICJsaWJ4bWwuaCIKLSNpZmRlZiBMSUJYTUxfQVVUT01BVEFfRU5BQkxFRAotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KLSNpbmNsdWRlIDxsaWJ4bWwveG1sYXV0b21hdGEuaD4KLQotc3RhdGljIGludCBzY2FuTnVtYmVyKGNoYXIgKipwdHIpIHsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICBjaGFyICpjdXI7Ci0KLSAgICBjdXIgPSAqcHRyOwotICAgIHdoaWxlICgoKmN1ciA+PSAnMCcpICYmICgqY3VyIDw9ICc5JykpIHsKLQlyZXQgPSByZXQgKiAxMCArICgqY3VyIC0gJzAnKTsKLQljdXIrKzsKLSAgICB9Ci0gICAgKnB0ciA9IGN1cjsKLSAgICByZXR1cm4ocmV0KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RSZWdleHBGaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7Ci0gICAgRklMRSAqaW5wdXQ7Ci0gICAgY2hhciBleHByWzUwMDBdOwotICAgIGludCBsZW47Ci0gICAgaW50IHJldDsKLSAgICBpbnQgaTsKLSAgICB4bWxBdXRvbWF0YVB0ciBhbTsKLSAgICB4bWxBdXRvbWF0YVN0YXRlUHRyIHN0YXRlc1sxMDAwXTsKLSAgICB4bWxSZWdleHBQdHIgcmVnZXhwID0gTlVMTDsKLSAgICB4bWxSZWdFeGVjQ3R4dFB0ciBleGVjID0gTlVMTDsKLQotICAgIGZvciAoaSA9IDA7aTwxMDAwO2krKykKLQlzdGF0ZXNbaV0gPSBOVUxMOwotCi0gICAgaW5wdXQgPSBmb3BlbihmaWxlbmFtZSwgInJiIik7Ci0gICAgaWYgKGlucHV0ID09IE5VTEwpIHsKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJDYW5ub3Qgb3BlbiAlcyBmb3IgcmVhZGluZ1xuIiwgZmlsZW5hbWUpOwotCXJldHVybjsKLSAgICB9Ci0KLSAgICBhbSA9IHhtbE5ld0F1dG9tYXRhKCk7Ci0gICAgaWYgKGFtID09IE5VTEwpIHsKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJDYW5ub3QgY3JlYXRlIGF1dG9tYXRhXG4iKTsKLQlmY2xvc2UoaW5wdXQpOwotCXJldHVybjsKLSAgICB9Ci0gICAgc3RhdGVzWzBdID0geG1sQXV0b21hdGFHZXRJbml0U3RhdGUoYW0pOwotICAgIGlmIChzdGF0ZXNbMF0gPT0gTlVMTCkgewotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJIkNhbm5vdCBnZXQgc3RhcnQgc3RhdGVcbiIpOwotCXhtbEZyZWVBdXRvbWF0YShhbSk7Ci0JZmNsb3NlKGlucHV0KTsKLQlyZXR1cm47Ci0gICAgfQotICAgIHJldCA9IDA7Ci0KLSAgICB3aGlsZSAoZmdldHMoZXhwciwgNDUwMCwgaW5wdXQpICE9IE5VTEwpIHsKLQlpZiAoZXhwclswXSA9PSAnIycpCi0JICAgIGNvbnRpbnVlOwotCWxlbiA9IHN0cmxlbihleHByKTsKLQlsZW4tLTsKLQl3aGlsZSAoKGxlbiA+PSAwKSAmJgotCSAgICAgICAoKGV4cHJbbGVuXSA9PSAnXG4nKSB8fCAoZXhwcltsZW5dID09ICdcdCcpIHx8Ci0JCShleHByW2xlbl0gPT0gJ1xyJykgfHwgKGV4cHJbbGVuXSA9PSAnICcpKSkgbGVuLS07Ci0JZXhwcltsZW4gKyAxXSA9IDA7Ci0JaWYgKGxlbiA+PSAwKSB7Ci0JICAgIGlmICgoYW0gIT0gTlVMTCkgJiYgKGV4cHJbMF0gPT0gJ3QnKSAmJiAoZXhwclsxXSA9PSAnICcpKSB7Ci0JCWNoYXIgKnB0ciA9ICZleHByWzJdOwotCQlpbnQgZnJvbSwgdG87Ci0KLQkJZnJvbSA9IHNjYW5OdW1iZXIoJnB0cik7Ci0JCWlmICgqcHRyICE9ICcgJykgewotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIkJhZCBsaW5lICVzXG4iLCBleHByKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JCWlmIChzdGF0ZXNbZnJvbV0gPT0gTlVMTCkKLQkJICAgIHN0YXRlc1tmcm9tXSA9IHhtbEF1dG9tYXRhTmV3U3RhdGUoYW0pOwotCQlwdHIrKzsKLQkJdG8gPSBzY2FuTnVtYmVyKCZwdHIpOwotCQlpZiAoKnB0ciAhPSAnICcpIHsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJCYWQgbGluZSAlc1xuIiwgZXhwcik7Ci0JCSAgICBicmVhazsKLQkJfQotCQlpZiAoc3RhdGVzW3RvXSA9PSBOVUxMKQotCQkgICAgc3RhdGVzW3RvXSA9IHhtbEF1dG9tYXRhTmV3U3RhdGUoYW0pOwotCQlwdHIrKzsKLQkJeG1sQXV0b21hdGFOZXdUcmFuc2l0aW9uKGFtLCBzdGF0ZXNbZnJvbV0sIHN0YXRlc1t0b10sCi0JCQkgICAgICAgICAgICAgICAgIEJBRF9DQVNUIHB0ciwgTlVMTCk7Ci0JICAgIH0gZWxzZSBpZiAoKGFtICE9IE5VTEwpICYmIChleHByWzBdID09ICdlJykgJiYgKGV4cHJbMV0gPT0gJyAnKSkgewotCQljaGFyICpwdHIgPSAmZXhwclsyXTsKLQkJaW50IGZyb20sIHRvOwotCi0JCWZyb20gPSBzY2FuTnVtYmVyKCZwdHIpOwotCQlpZiAoKnB0ciAhPSAnICcpIHsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJCYWQgbGluZSAlc1xuIiwgZXhwcik7Ci0JCSAgICBicmVhazsKLQkJfQotCQlpZiAoc3RhdGVzW2Zyb21dID09IE5VTEwpCi0JCSAgICBzdGF0ZXNbZnJvbV0gPSB4bWxBdXRvbWF0YU5ld1N0YXRlKGFtKTsKLQkJcHRyKys7Ci0JCXRvID0gc2Nhbk51bWJlcigmcHRyKTsKLQkJaWYgKHN0YXRlc1t0b10gPT0gTlVMTCkKLQkJICAgIHN0YXRlc1t0b10gPSB4bWxBdXRvbWF0YU5ld1N0YXRlKGFtKTsKLQkJeG1sQXV0b21hdGFOZXdFcHNpbG9uKGFtLCBzdGF0ZXNbZnJvbV0sIHN0YXRlc1t0b10pOwotCSAgICB9IGVsc2UgaWYgKChhbSAhPSBOVUxMKSAmJiAoZXhwclswXSA9PSAnZicpICYmIChleHByWzFdID09ICcgJykpIHsKLQkJY2hhciAqcHRyID0gJmV4cHJbMl07Ci0JCWludCBzdGF0ZTsKLQotCQlzdGF0ZSA9IHNjYW5OdW1iZXIoJnB0cik7Ci0JCWlmIChzdGF0ZXNbc3RhdGVdID09IE5VTEwpIHsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJCYWQgc3RhdGUgJWQgOiAlc1xuIiwgc3RhdGUsIGV4cHIpOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJeG1sQXV0b21hdGFTZXRGaW5hbFN0YXRlKGFtLCBzdGF0ZXNbc3RhdGVdKTsKLQkgICAgfSBlbHNlIGlmICgoYW0gIT0gTlVMTCkgJiYgKGV4cHJbMF0gPT0gJ2MnKSAmJiAoZXhwclsxXSA9PSAnICcpKSB7Ci0JCWNoYXIgKnB0ciA9ICZleHByWzJdOwotCQlpbnQgZnJvbSwgdG87Ci0JCWludCBtaW4sIG1heDsKLQotCQlmcm9tID0gc2Nhbk51bWJlcigmcHRyKTsKLQkJaWYgKCpwdHIgIT0gJyAnKSB7Ci0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiQmFkIGxpbmUgJXNcbiIsIGV4cHIpOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJaWYgKHN0YXRlc1tmcm9tXSA9PSBOVUxMKQotCQkgICAgc3RhdGVzW2Zyb21dID0geG1sQXV0b21hdGFOZXdTdGF0ZShhbSk7Ci0JCXB0cisrOwotCQl0byA9IHNjYW5OdW1iZXIoJnB0cik7Ci0JCWlmICgqcHRyICE9ICcgJykgewotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIkJhZCBsaW5lICVzXG4iLCBleHByKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JCWlmIChzdGF0ZXNbdG9dID09IE5VTEwpCi0JCSAgICBzdGF0ZXNbdG9dID0geG1sQXV0b21hdGFOZXdTdGF0ZShhbSk7Ci0JCXB0cisrOwotCQltaW4gPSBzY2FuTnVtYmVyKCZwdHIpOwotCQlpZiAoKnB0ciAhPSAnICcpIHsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJCYWQgbGluZSAlc1xuIiwgZXhwcik7Ci0JCSAgICBicmVhazsKLQkJfQotCQlwdHIrKzsKLQkJbWF4ID0gc2Nhbk51bWJlcigmcHRyKTsKLQkJaWYgKCpwdHIgIT0gJyAnKSB7Ci0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiQmFkIGxpbmUgJXNcbiIsIGV4cHIpOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJcHRyKys7Ci0JCXhtbEF1dG9tYXRhTmV3Q291bnRUcmFucyhhbSwgc3RhdGVzW2Zyb21dLCBzdGF0ZXNbdG9dLAotCQkJICAgICAgICAgICAgICAgICBCQURfQ0FTVCBwdHIsIG1pbiwgbWF4LCBOVUxMKTsKLQkgICAgfSBlbHNlIGlmICgoYW0gIT0gTlVMTCkgJiYgKGV4cHJbMF0gPT0gJy0nKSAmJiAoZXhwclsxXSA9PSAnLScpKSB7Ci0JCS8qIGVuZCBvZiB0aGUgYXV0b21hdGEgKi8KLQkJcmVnZXhwID0geG1sQXV0b21hdGFDb21waWxlKGFtKTsKLQkJeG1sRnJlZUF1dG9tYXRhKGFtKTsKLQkJYW0gPSBOVUxMOwotCQlpZiAocmVnZXhwID09IE5VTEwpIHsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJGYWlsZWQgdG8gY29tcGlsZSB0aGUgYXV0b21hdGEiKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoKGV4cHJbMF0gPT0gJz0nKSAmJiAoZXhwclsxXSA9PSAnPicpKSB7Ci0JCWlmIChyZWdleHAgPT0gTlVMTCkgewotCQkgICAgcHJpbnRmKCI9PiBmYWlsZWQgbm90IGNvbXBpbGVkXG4iKTsKLQkJfSBlbHNlIHsKLQkJICAgIGlmIChleGVjID09IE5VTEwpCi0JCQlleGVjID0geG1sUmVnTmV3RXhlY0N0eHQocmVnZXhwLCBOVUxMLCBOVUxMKTsKLQkJICAgIGlmIChyZXQgPT0gMCkgewotCQkJcmV0ID0geG1sUmVnRXhlY1B1c2hTdHJpbmcoZXhlYywgTlVMTCwgTlVMTCk7Ci0JCSAgICB9Ci0JCSAgICBpZiAocmV0ID09IDEpCi0JCQlwcmludGYoIj0+IFBhc3NlZFxuIik7Ci0JCSAgICBlbHNlIGlmICgocmV0ID09IDApIHx8IChyZXQgPT0gLTEpKQotCQkJcHJpbnRmKCI9PiBGYWlsZWRcbiIpOwotCQkgICAgZWxzZSBpZiAocmV0IDwgMCkKLQkJCXByaW50ZigiPT4gRXJyb3JcbiIpOwotCQkgICAgeG1sUmVnRnJlZUV4ZWNDdHh0KGV4ZWMpOwotCQkgICAgZXhlYyA9IE5VTEw7Ci0JCX0KLQkJcmV0ID0gMDsKLQkgICAgfSBlbHNlIGlmIChyZWdleHAgIT0gTlVMTCkgewotCQlpZiAoZXhlYyA9PSBOVUxMKQotCQkgICAgZXhlYyA9IHhtbFJlZ05ld0V4ZWNDdHh0KHJlZ2V4cCwgTlVMTCwgTlVMTCk7Ci0JCXJldCA9IHhtbFJlZ0V4ZWNQdXNoU3RyaW5nKGV4ZWMsIEJBRF9DQVNUIGV4cHIsIE5VTEwpOwotCSAgICB9IGVsc2UgewotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJVbmV4cGVjdGVkIGxpbmUgJXNcbiIsIGV4cHIpOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBmY2xvc2UoaW5wdXQpOwotICAgIGlmIChyZWdleHAgIT0gTlVMTCkKLQl4bWxSZWdGcmVlUmVnZXhwKHJlZ2V4cCk7Ci0gICAgaWYgKGV4ZWMgIT0gTlVMTCkKLQl4bWxSZWdGcmVlRXhlY0N0eHQoZXhlYyk7Ci0gICAgaWYgKGFtICE9IE5VTEwpCi0JeG1sRnJlZUF1dG9tYXRhKGFtKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Ci0KLSAgICB4bWxJbml0UGFyc2VyKCk7Ci0KLSAgICBpZiAoYXJnYyA9PSAxKSB7Ci0JaW50IHJldDsKLQl4bWxBdXRvbWF0YVB0ciBhbTsKLQl4bWxBdXRvbWF0YVN0YXRlUHRyIHN0YXJ0LCBjdXI7Ci0JeG1sUmVnZXhwUHRyIHJlZ2V4cDsKLQl4bWxSZWdFeGVjQ3R4dFB0ciBleGVjOwotCi0JYW0gPSB4bWxOZXdBdXRvbWF0YSgpOwotCXN0YXJ0ID0geG1sQXV0b21hdGFHZXRJbml0U3RhdGUoYW0pOwotCi0JLyogZ2VuZXJhdGUgYVtiYV0qYSAqLwotCWN1ciA9IHhtbEF1dG9tYXRhTmV3VHJhbnNpdGlvbihhbSwgc3RhcnQsIE5VTEwsIEJBRF9DQVNUImEiLCBOVUxMKTsKLQl4bWxBdXRvbWF0YU5ld1RyYW5zaXRpb24oYW0sIGN1ciwgY3VyLCBCQURfQ0FTVCJiIiwgTlVMTCk7Ci0JeG1sQXV0b21hdGFOZXdUcmFuc2l0aW9uKGFtLCBjdXIsIGN1ciwgQkFEX0NBU1QiYSIsIE5VTEwpOwotCWN1ciA9IHhtbEF1dG9tYXRhTmV3Q291bnRUcmFucyhhbSwgY3VyLCBOVUxMLCBCQURfQ0FTVCJhIiwgMiwgMywgTlVMTCk7Ci0JeG1sQXV0b21hdGFTZXRGaW5hbFN0YXRlKGFtLCBjdXIpOwotCi0JLyogY29tcGlsZSBpdCBpbiBhIHJlZ2V4cCBhbmQgZnJlZSB0aGUgYXV0b21hdGEgKi8KLQlyZWdleHAgPSB4bWxBdXRvbWF0YUNvbXBpbGUoYW0pOwotCXhtbEZyZWVBdXRvbWF0YShhbSk7Ci0KLQkvKiB0ZXN0IHRoZSByZWdleHAgKi8KLQl4bWxSZWdleHBQcmludChzdGRvdXQsIHJlZ2V4cCk7Ci0JZXhlYyA9IHhtbFJlZ05ld0V4ZWNDdHh0KHJlZ2V4cCwgTlVMTCwgTlVMTCk7Ci0JcmV0ID0geG1sUmVnRXhlY1B1c2hTdHJpbmcoZXhlYywgQkFEX0NBU1QiYSIsIE5VTEwpOwotCWlmIChyZXQgPT0gMSkKLQkgICAgcHJpbnRmKCJmaW5hbFxuIik7Ci0JZWxzZSBpZiAocmV0IDwgMCkKLQkgICAgcHJpbnRmKCJlcnJvclxuIik7Ci0JcmV0ID14bWxSZWdFeGVjUHVzaFN0cmluZyhleGVjLCBCQURfQ0FTVCJhIiwgTlVMTCk7Ci0JaWYgKHJldCA9PSAxKQotCSAgICBwcmludGYoImZpbmFsXG4iKTsKLQllbHNlIGlmIChyZXQgPCAwKQotCSAgICBwcmludGYoImVycm9yXG4iKTsKLQlyZXQgPXhtbFJlZ0V4ZWNQdXNoU3RyaW5nKGV4ZWMsIEJBRF9DQVNUImIiLCBOVUxMKTsKLQlpZiAocmV0ID09IDEpCi0JICAgIHByaW50ZigiZmluYWxcbiIpOwotCWVsc2UgaWYgKHJldCA8IDApCi0JICAgIHByaW50ZigiZXJyb3JcbiIpOwotCXJldCA9eG1sUmVnRXhlY1B1c2hTdHJpbmcoZXhlYywgQkFEX0NBU1QiYSIsIE5VTEwpOwotCWlmIChyZXQgPT0gMSkKLQkgICAgcHJpbnRmKCJmaW5hbFxuIik7Ci0JZWxzZSBpZiAocmV0IDwgMCkKLQkgICAgcHJpbnRmKCJlcnJvclxuIik7Ci0JcmV0ID14bWxSZWdFeGVjUHVzaFN0cmluZyhleGVjLCBCQURfQ0FTVCJhIiwgTlVMTCk7Ci0JaWYgKHJldCA9PSAxKQotCSAgICBwcmludGYoImZpbmFsXG4iKTsKLQllbHNlIGlmIChyZXQgPCAwKQotCSAgICBwcmludGYoImVycm9yXG4iKTsKLQlyZXQgPXhtbFJlZ0V4ZWNQdXNoU3RyaW5nKGV4ZWMsIEJBRF9DQVNUImEiLCBOVUxMKTsKLQlpZiAocmV0ID09IDEpCi0JICAgIHByaW50ZigiZmluYWxcbiIpOwotCWVsc2UgaWYgKHJldCA8IDApCi0JICAgIHByaW50ZigiZXJyb3JcbiIpOwotCXJldCA9eG1sUmVnRXhlY1B1c2hTdHJpbmcoZXhlYywgQkFEX0NBU1QiYSIsIE5VTEwpOwotCWlmIChyZXQgPT0gMSkKLQkgICAgcHJpbnRmKCJmaW5hbFxuIik7Ci0JZWxzZSBpZiAocmV0IDwgMCkKLQkgICAgcHJpbnRmKCJlcnJvclxuIik7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JICAgIHJldCA9IHhtbFJlZ0V4ZWNQdXNoU3RyaW5nKGV4ZWMsIE5VTEwsIE5VTEwpOwotCSAgICBpZiAocmV0ID09IDEpCi0JCXByaW50ZigiZmluYWxcbiIpOwotCSAgICBlbHNlIGlmIChyZXQgPCAwKQotCQlwcmludGYoImVycm9yXG4iKTsKLQl9Ci0JeG1sUmVnRnJlZUV4ZWNDdHh0KGV4ZWMpOwotCi0JLyogZnJlZSB0aGUgcmVnZXhwICovCi0JeG1sUmVnRnJlZVJlZ2V4cChyZWdleHApOwotICAgIH0gZWxzZSB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAxO2kgPCBhcmdjO2krKykKLQkgICAgdGVzdFJlZ2V4cEZpbGUoYXJndltpXSk7Ci0gICAgfQotCi0gICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIHhtbE1lbW9yeUR1bXAoKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNlbHNlCi0jaW5jbHVkZSA8c3RkaW8uaD4KLWludCBtYWluKGludCBhcmdjIEFUVFJJQlVURV9VTlVTRUQsIGNoYXIgKiphcmd2IEFUVFJJQlVURV9VTlVTRUQpIHsKLSAgICBwcmludGYoIiVzIDogQXV0b21hdGEgc3VwcG9ydCBub3QgY29tcGlsZWQgaW5cbiIsIGFyZ3ZbMF0pOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBMSUJYTUxfQVVUT01BVEFfRU5BQkxFRCAqLwpkaWZmIC0tZ2l0IGEvdGVzdE1vZHVsZS5jIGIvdGVzdE1vZHVsZS5jCmluZGV4IDc3YjdiYTEuLjZhZWE0NGQgMTAwNjQ0Ci0tLSBhL3Rlc3RNb2R1bGUuYworKysgYi90ZXN0TW9kdWxlLmMKQEAgLTYsMTIgKzYsMTIgQEAKICAqIGpvZWx3cmVlZEBjb21jYXN0Lm5ldAogICovCiAKLSNpbmNsdWRlICJsaWJ4bWwuaCIKLSNpZmRlZiBMSUJYTUxfTU9EVUxFU19FTkFCTEVECisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sdmVyc2lvbi5oPgogCisjaWZkZWYgTElCWE1MX01PRFVMRVNfRU5BQkxFRAorCiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KIApAQCAtNDksMzIgKzQ5LDMxIEBACiAgICAgeG1sU3RyUHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLAogICAgICAgICAgICAgICAgICAiJXMvdGVzdGRzbyVzIiwKICAgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIqKU1PRFVMRV9QQVRILAotCQkgKGNvbnN0IHhtbENoYXIqKUxJQlhNTF9NT0RVTEVfRVhURU5TSU9OKTsKKyAgICAgICAgICAgICAgICAgKGNvbnN0IHhtbENoYXIqKUxJQlhNTF9NT0RVTEVfRVhURU5TSU9OKTsKIAogICAgIG1vZHVsZSA9IHhtbE1vZHVsZU9wZW4oKGNvbnN0IGNoYXIqKWZpbGVuYW1lLCAwKTsKLSAgICBpZiAobW9kdWxlKQotICAgICAgewotICAgICAgICBpZiAoeG1sTW9kdWxlU3ltYm9sKG1vZHVsZSwgImhlbGxvX3dvcmxkIiwgKHZvaWQgKiopICZoZWxsb193b3JsZCkpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJGYWlsdXJlIHRvIGxvb2t1cFxuIik7Ci0JICAgIHJldHVybigxKTsKLQl9Ci0JaWYgKGhlbGxvX3dvcmxkID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJMb29rdXAgcmV0dXJuZWQgTlVMTFxuIik7Ci0JICAgIHJldHVybigxKTsKLQl9CisgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIG1vZHVsZVxuIik7CisgICAgICByZXR1cm4oMSk7CisgICAgfQogCi0gICAgICAgICgqaGVsbG9fd29ybGQpKCk7CisgICAgaWYgKHhtbE1vZHVsZVN5bWJvbChtb2R1bGUsICJoZWxsb193b3JsZCIsICh2b2lkICoqKSAmaGVsbG9fd29ybGQpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWx1cmUgdG8gbG9va3VwXG4iKTsKKyAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgaWYgKGhlbGxvX3dvcmxkID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiTG9va3VwIHJldHVybmVkIE5VTExcbiIpOworICAgICAgcmV0dXJuKDEpOworICAgIH0KIAotICAgICAgICB4bWxNb2R1bGVDbG9zZShtb2R1bGUpOwotICAgICAgfQorICAgICgqaGVsbG9fd29ybGQpKCk7CiAKLSAgICB4bWxNZW1vcnlEdW1wKCk7CisgICAgeG1sTW9kdWxlQ2xvc2UobW9kdWxlKTsKIAogICAgIHJldHVybigwKTsKIH0KIAogI2Vsc2UKLSNpbmNsdWRlIDxzdGRpby5oPgogaW50IG1haW4oaW50IGFyZ2MgQVRUUklCVVRFX1VOVVNFRCwgY2hhciAqKmFyZ3YgQVRUUklCVVRFX1VOVVNFRCkgewogICAgIHByaW50ZigiJXMgOiBNb2R1bGUgc3VwcG9ydCBub3QgY29tcGlsZWQgaW5cbiIsIGFyZ3ZbMF0pOwogICAgIHJldHVybigwKTsKZGlmZiAtLWdpdCBhL3Rlc3RPT00uYyBiL3Rlc3RPT00uYwppbmRleCAyMTdlMDRhLi45NWEzYzhlIDEwMDY0NAotLS0gYS90ZXN0T09NLmMKKysrIGIvdGVzdE9PTS5jCkBAIC02LDggKzYsNiBAQAogICogaHBAcmVkaGF0LmNvbQogICovCiAKLSNpbmNsdWRlICJsaWJ4bWwuaCIKLQogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMzUyLDE0ICszNTAsMTIgQEAKICAgICAgICAgICAgICBpZiAodGVzdF9nZXRfbWFsbG9jX2Jsb2Nrc19vdXRzdGFuZGluZyAoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZG91dCwgIiVkIGJsb2NrcyBsZWFrZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICgpKTsKLQkJICB4bWxNZW1vcnlEdW1wKCk7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICB9CiAKIAkgICAgZmlsZXMgKys7CiAJfQogICAgIH0KLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RUaHJlYWRzLmMgYi90ZXN0VGhyZWFkcy5jCmluZGV4IGJlZjY1MzcuLmZkMWY4ODUgMTAwNjQ0Ci0tLSBhL3Rlc3RUaHJlYWRzLmMKKysrIGIvdGVzdFRocmVhZHMuYwpAQCAtMSwzNCArMSwyNiBAQAotI2luY2x1ZGUgImxpYnhtbC5oIgotCisjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2lmIGRlZmluZWQoTElCWE1MX1RIUkVBRF9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9DQVRBTE9HX0VOQUJMRUQpCi0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdGhyZWFkcy5oPgorCisjaWYgZGVmaW5lZChMSUJYTUxfVEhSRUFEX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX0NBVEFMT0dfRU5BQkxFRCkKICNpbmNsdWRlIDxsaWJ4bWwvY2F0YWxvZy5oPgogI2lmZGVmIEhBVkVfUFRIUkVBRF9ICiAjaW5jbHVkZSA8cHRocmVhZC5oPgotI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSNpbmNsdWRlIDxPUy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWYgIWRlZmluZWQoX01TQ19WRVIpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAogI2RlZmluZQlNQVhfQVJHQwkyMAogI2RlZmluZSBURVNUX1JFUEVBVF9DT1VOVCA1MDAKICNpZmRlZiBIQVZFX1BUSFJFQURfSAogc3RhdGljIHB0aHJlYWRfdCB0aWRbTUFYX0FSR0NdOwotI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQogc3RhdGljIEhBTkRMRSB0aWRbTUFYX0FSR0NdOwotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotc3RhdGljIHRocmVhZF9pZCB0aWRbTUFYX0FSR0NdOwogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTQ5LDEzICs0MSw2IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG51bV90aHJlYWRzID0gc2l6ZW9mKHRocmVhZFBhcmFtcykgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0aHJlYWRQYXJhbXNbMF0pOwogCi0jaWZuZGVmIHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZQotI2Vycm9yIHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSBpcyBub3QgYSBtYWNybwotI2VuZGlmCi0jaWZuZGVmIHhtbEdlbmVyaWNFcnJvckNvbnRleHQKLSNlcnJvciB4bWxHZW5lcmljRXJyb3JDb250ZXh0IGlzIG5vdCBhIG1hY3JvCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgKgogdGhyZWFkX3NwZWNpZmljX2RhdGEodm9pZCAqcHJpdmF0ZV9kYXRhKQogewpAQCAtNjMsNTkgKzQ4LDYxIEBACiAgICAgeG1sVGhyZWFkUGFyYW1zICpwYXJhbXMgPSAoeG1sVGhyZWFkUGFyYW1zICopIHByaXZhdGVfZGF0YTsKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IHBhcmFtcy0+ZmlsZW5hbWU7CiAgICAgaW50IG9rYXkgPSAxOworICAgIGludCBvcHRpb25zID0gMDsKIAotICAgIGlmICghc3RyY21wKGZpbGVuYW1lLCAidGVzdC90aHJlYWRzL2ludmFsaWQueG1sIikpIHsKLSAgICAgICAgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlID0gMDsKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yQ29udGV4dCA9IHN0ZG91dDsKLSAgICB9IGVsc2UgewotICAgICAgICB4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgPSAxOwotICAgICAgICB4bWxHZW5lcmljRXJyb3JDb250ZXh0ID0gc3RkZXJyOworICAgIGlmICh4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSgpICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJ4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSBmYWlsZWRcbiIpOworICAgICAgICBwYXJhbXMtPm9rYXkgPSAwOworICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgfQotI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKLSAgICBteURvYyA9IHhtbFBhcnNlRmlsZShmaWxlbmFtZSk7Ci0jZWxzZQotICAgIG15RG9jID0geG1sUmVhZEZpbGUoZmlsZW5hbWUsIE5VTEwsIFhNTF9XSVRIX0NBVEFMT0cpOwotI2VuZGlmCisKKyAgICBpZiAoc3RyY21wKGZpbGVuYW1lLCAidGVzdC90aHJlYWRzL2ludmFsaWQueG1sIikgIT0gMCkgeworICAgICAgICBvcHRpb25zIHw9IFhNTF9QQVJTRV9EVERWQUxJRDsKKyAgICB9CisgICAgbXlEb2MgPSB4bWxSZWFkRmlsZShmaWxlbmFtZSwgTlVMTCwgb3B0aW9ucyk7CiAgICAgaWYgKG15RG9jKSB7CiAgICAgICAgIHhtbEZyZWVEb2MobXlEb2MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHByaW50ZigicGFyc2UgZmFpbGVkXG4iKTsKIAlva2F5ID0gMDsKICAgICB9Ci0gICAgaWYgKCFzdHJjbXAoZmlsZW5hbWUsICJ0ZXN0L3RocmVhZHMvaW52YWxpZC54bWwiKSkgewotICAgICAgICBpZiAoeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlICE9IDApIHsKLQkgICAgcHJpbnRmKCJWYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIG92ZXJyaWRlIGZhaWxlZFxuIik7Ci0JICAgIG9rYXkgPSAwOwotCX0KLSAgICAgICAgaWYgKHhtbEdlbmVyaWNFcnJvckNvbnRleHQgIT0gc3Rkb3V0KSB7Ci0JICAgIHByaW50ZigieG1sR2VuZXJpY0Vycm9yQ29udGV4dCBvdmVycmlkZSBmYWlsZWRcbiIpOwotCSAgICBva2F5ID0gMDsKLQl9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSAhPSAxKSB7Ci0JICAgIHByaW50ZigiVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSBvdmVycmlkZSBmYWlsZWRcbiIpOwotCSAgICBva2F5ID0gMDsKLQl9Ci0gICAgICAgIGlmICh4bWxHZW5lcmljRXJyb3JDb250ZXh0ICE9IHN0ZGVycikgewotCSAgICBwcmludGYoInhtbEdlbmVyaWNFcnJvckNvbnRleHQgb3ZlcnJpZGUgZmFpbGVkXG4iKTsKLQkgICAgb2theSA9IDA7Ci0JfQotICAgIH0KICAgICBwYXJhbXMtPm9rYXkgPSBva2F5OwogICAgIHJldHVybihOVUxMKTsKIH0KIAotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisjaWZkZWYgX1dJTjMyCitzdGF0aWMgRFdPUkQgV0lOQVBJCit3aW4zMl90aHJlYWRfc3BlY2lmaWNfZGF0YSh2b2lkICpwcml2YXRlX2RhdGEpCit7CisgICAgdGhyZWFkX3NwZWNpZmljX2RhdGEocHJpdmF0ZV9kYXRhKTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJYTUxfVEhSRUFEU19FTkFCTEVEICovCisKIGludAogbWFpbih2b2lkKQogewotICAgIHVuc2lnbmVkIGludCBpLCByZXBlYXQ7Ci0gICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBpbnQgcmVwZWF0OworICAgIGludCBzdGF0dXMgPSAwOworCisgICAgKHZvaWQpIHJlcGVhdDsKIAogICAgIHhtbEluaXRQYXJzZXIoKTsKKworICAgIGlmICh4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSgpICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJ4bWxDaGVja1RocmVhZExvY2FsU3RvcmFnZSBmYWlsZWQgZm9yIG1haW4gdGhyZWFkXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworI2lmIGRlZmluZWQoTElCWE1MX1RIUkVBRF9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9DQVRBTE9HX0VOQUJMRUQpCiAgICAgZm9yIChyZXBlYXQgPSAwO3JlcGVhdCA8IFRFU1RfUkVQRUFUX0NPVU5UO3JlcGVhdCsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICBpbnQgcmV0OworCiAJeG1sTG9hZENhdGFsb2coY2F0YWxvZyk7CiAKKyNpZmRlZiBIQVZFX1BUSFJFQURfSAogICAgICAgICBtZW1zZXQodGlkLCAweGZmLCBzaXplb2YoKnRpZCkqbnVtX3RocmVhZHMpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV90aHJlYWRzOyBpKyspIHsKQEAgLTEzNCwzNiArMTIxLDcgQEAKIAkJZXhpdCgxKTsKIAkgICAgfQogCX0KLQotCXhtbENhdGFsb2dDbGVhbnVwKCk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV90aHJlYWRzOyBpKyspCi0JICAgIGlmICh0aHJlYWRQYXJhbXNbaV0ub2theSA9PSAwKQotCQlwcmludGYoIlRocmVhZCAlZCBoYW5kbGluZyAlcyBmYWlsZWRcbiIsIGksCi0gICAgICAgICAgICAgICAgICAgICAgIHRocmVhZFBhcmFtc1tpXS5maWxlbmFtZSk7Ci0gICAgfQotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICB4bWxNZW1vcnlEdW1wKCk7Ci0gICAgcmV0dXJuICgwKTsKLX0KLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi1zdGF0aWMgRFdPUkQgV0lOQVBJCi13aW4zMl90aHJlYWRfc3BlY2lmaWNfZGF0YSh2b2lkICpwcml2YXRlX2RhdGEpCi17Ci0gICAgdGhyZWFkX3NwZWNpZmljX2RhdGEocHJpdmF0ZV9kYXRhKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotbWFpbih2b2lkKQotewotICAgIHVuc2lnbmVkIGludCBpLCByZXBlYXQ7Ci0gICAgQk9PTCByZXQ7Ci0KLSAgICB4bWxJbml0UGFyc2VyKCk7Ci0gICAgZm9yIChyZXBlYXQgPSAwO3JlcGVhdCA8IFRFU1RfUkVQRUFUX0NPVU5UO3JlcGVhdCsrKQotICAgIHsKLSAgICAgICAgeG1sTG9hZENhdGFsb2coY2F0YWxvZyk7Ci0KKyNlbGlmIGRlZmluZWQoX1dJTjMyKQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgdGlkW2ldID0gKEhBTkRMRSkgLTE7CkBAIC0xOTUsODEgKzE1MywyMiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgQ2xvc2VIYW5kbGUgKHRpZFtpXSk7CiAgICAgICAgIH0KLQotICAgICAgICB4bWxDYXRhbG9nQ2xlYW51cCgpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykgewotICAgICAgICAgICAgaWYgKHRocmVhZFBhcmFtc1tpXS5va2F5ID09IDApCi0gICAgICAgICAgICBwcmludGYoIlRocmVhZCAlZCBoYW5kbGluZyAlcyBmYWlsZWRcbiIsIGksCi0gICAgICAgICAgICAgICAgICAgdGhyZWFkUGFyYW1zW2ldLmZpbGVuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICB4bWxNZW1vcnlEdW1wKCk7Ci0KLSAgICByZXR1cm4gKDApOwotfQotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotaW50Ci1tYWluKHZvaWQpCi17Ci0gICAgdW5zaWduZWQgaW50IGksIHJlcGVhdDsKLSAgICBzdGF0dXNfdCByZXQ7Ci0KLSAgICB4bWxJbml0UGFyc2VyKCk7Ci0gICAgcHJpbnRmKCJQYXJzZXIgaW5pdGlhbGl6ZWRcbiIpOwotICAgIGZvciAocmVwZWF0ID0gMDtyZXBlYXQgPCBURVNUX1JFUEVBVF9DT1VOVDtyZXBlYXQrKykgewotICAgIHByaW50ZigicmVwZWF0OiAlZFxuIixyZXBlYXQpOwotCXhtbExvYWRDYXRhbG9nKGNhdGFsb2cpOwotCXByaW50ZigibG9hZGVkIGNhdGFsb2c6ICVzXG4iLCBjYXRhbG9nKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykgewotCSAgICB0aWRbaV0gPSAodGhyZWFkX2lkKSAtMTsKLQl9Ci0JcHJpbnRmKCJjbGVhbmVkIHRocmVhZHNcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7Ci0JCXRpZFtpXSA9IHNwYXduX3RocmVhZCh0aHJlYWRfc3BlY2lmaWNfZGF0YSwgInhtbFRlc3RUaHJlYWQiLCBCX05PUk1BTF9QUklPUklUWSwgKHZvaWQgKikgJnRocmVhZFBhcmFtc1tpXSk7Ci0JCWlmICh0aWRbaV0gPCBCX09LKSB7Ci0JCQlwZXJyb3IoImJlb3NfdGhyZWFkX2NyZWF0ZSIpOwotCQkJZXhpdCgxKTsKLQkJfQotCQlwcmludGYoImJlb3NfdGhyZWFkX2NyZWF0ZSAlZCAtPiAlZFxuIiwgaSwgdGlkW2ldKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG51bV90aHJlYWRzOyBpKyspIHsKLSAgICAgICAgICAgIHZvaWQgKnJlc3VsdDsKLQkgICAgcmV0ID0gd2FpdF9mb3JfdGhyZWFkKHRpZFtpXSwgJnJlc3VsdCk7Ci0JICAgIHByaW50ZigiYmVvc190aHJlYWRfd2FpdCAlZCAtPiAlZFxuIiwgaSwgcmV0KTsKLQkgICAgaWYgKHJldCAhPSBCX09LKSB7Ci0JCQlwZXJyb3IoImJlb3NfdGhyZWFkX3dhaXQiKTsKLQkJCWV4aXQoMSk7Ci0JICAgIH0KLQl9CisjZW5kaWYgLyogcHRocmVhZHMgKi8KIAogCXhtbENhdGFsb2dDbGVhbnVwKCk7Ci0JcmV0ID0gQl9PSzsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7IGkrKykKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7CiAJICAgIGlmICh0aHJlYWRQYXJhbXNbaV0ub2theSA9PSAwKSB7Ci0JCQlwcmludGYoIlRocmVhZCAlZCBoYW5kbGluZyAlcyBmYWlsZWRcbiIsIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkUGFyYW1zW2ldLmZpbGVuYW1lKTsKLQkJCXJldCA9IEJfRVJST1I7Ci0JCX0KKwkJcHJpbnRmKCJUaHJlYWQgJWQgaGFuZGxpbmcgJXMgZmFpbGVkXG4iLCBpLAorICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRQYXJhbXNbaV0uZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CisjZW5kaWYgLyogTElCWE1MX1RIUkVBRFNfRU5BQkxFRCAqLworCiAgICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIHhtbE1lbW9yeUR1bXAoKTsKIAotCWlmIChyZXQgPT0gQl9PSykKLQkJcHJpbnRmKCJ0ZXN0VGhyZWFkIDogQmVPUyA6IFNVQ0NFU1MhXG4iKTsKLQllbHNlCi0JCXByaW50ZigidGVzdFRocmVhZCA6IEJlT1MgOiBGQUlMRUQhXG4iKTsKLQotICAgIHJldHVybiAoMCk7CisgICAgcmV0dXJuIChzdGF0dXMpOwogfQotI2VuZGlmIC8qIHB0aHJlYWRzIG9yIEJlT1MgdGhyZWFkcyAqLwogCi0jZWxzZSAvKiAhTElCWE1MX1RIUkVBRFNfRU5BQkxFRCAqLwotaW50Ci1tYWluKHZvaWQpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bWwgd2FzIG5vdCBjb21waWxlZCB3aXRoIHRocmVhZCBvciBjYXRhbG9nIHN1cHBvcnRcbiIpOwotICAgIHJldHVybiAoMCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RhcGkuYyBiL3Rlc3RhcGkuYwppbmRleCBjMzdjYzIzLi4wYTBhYWRmIDEwMDY0NAotLS0gYS90ZXN0YXBpLmMKKysrIGIvdGVzdGFwaS5jCkBAIC0xMSwxMyArMTEsMTQgQEAKIC8qIERpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3MgKi8KICNkZWZpbmUgWE1MX0RFUFJFQ0FURUQKIAotI2luY2x1ZGUgImxpYnhtbC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZm9yIHB1dGVudigpICovCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CisjaW5jbHVkZSA8bGlieG1sL2NhdGFsb2cuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcmVsYXhuZy5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KIAogCiBzdGF0aWMgaW50IHRlc3RsaWJ4bWwyKHZvaWQpOwpAQCAtMzksNyArNDAsNyBAQAogCiBzdGF0aWMgdm9pZAogc3RydWN0dXJlZF9lcnJvcnModm9pZCAqdXNlckRhdGEgQVRUUklCVVRFX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgIHhtbEVycm9yUHRyIGVycm9yIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbEVycm9yICplcnJvciBBVFRSSUJVVEVfVU5VU0VEKSB7CiAgICAgZ2VuZXJpY19lcnJvcnMrKzsKIH0KIApAQCAtMTI0LDkgKzEyNSwxMiBAQAogICAgIGludCByZXQ7CiAgICAgaW50IGJsb2NrcywgbWVtOwogCi0jaWZkZWYgSEFWRV9QVVRFTlYKLSAgICAvKiBhY2Nlc3MgdG8gdGhlIHByb3h5IGNhbiBzbG93IHVwIHJlZ3Jlc3Npb24gdGVzdHMgYSBsb3QgKi8KLSAgICBwdXRlbnYoKGNoYXIgKikgImh0dHBfcHJveHk9Iik7CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7CisgICAgc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgMCk7CisKKyAgICBwcmludGYoIlNraXBwaW5nIG9uIFdpbmRvd3MgZm9yIG5vd1xuIik7CisgICAgcmV0dXJuKDApOwogI2VuZGlmCiAKICAgICBtZW1zZXQoY2hhcnRhYiwgMCwgc2l6ZW9mKGNoYXJ0YWIpKTsKQEAgLTEzNSw2ICsxMzksOSBAQAogICAgIG1lbXNldChsb25ndGFiLCAwLCBzaXplb2YobG9uZ3RhYikpOwogCiAgICAgeG1sSW5pdFBhcnNlcigpOworI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKKyAgICB4bWxJbml0aWFsaXplQ2F0YWxvZygpOworI2VuZGlmCiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAogICAgIHhtbFJlbGF4TkdJbml0VHlwZXMoKTsKICNlbmRpZgpAQCAtMTYyLDE1ICsxNjksMTQgQEAKICAgICBtZW0gPSB4bWxNZW1Vc2VkKCk7CiAgICAgaWYgKChibG9ja3MgIT0gMCkgfHwgKG1lbSAhPSAwKSkgewogICAgICAgICBwcmludGYoInRlc3RhcGkgbGVha2VkICVkIGJ5dGVzIGluICVkIGJsb2Nrc1xuIiwgbWVtLCBibG9ja3MpOworICAgICAgICByZXQgPSAxOwogICAgIH0KLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAKICAgICByZXR1cm4gKHJldCAhPSAwKTsKIH0KIAogI2luY2x1ZGUgPGxpYnhtbC9IVE1McGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL0hUTUx0cmVlLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2NhdGFsb2cuaD4KICNpbmNsdWRlIDxsaWJ4bWwvY2h2YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC9kaWN0Lmg+CiAjaW5jbHVkZSA8bGlieG1sL2VuY29kaW5nLmg+CkBAIC00NjQsMTAgKzQ3MCwxNSBAQAogICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dCh2YWwpOwogfQogCi0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAorI2lmIGRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCkgfHwgXAorICAgIGRlZmluZWQoTElCWE1MX1ZBTElEX0VOQUJMRUQpIHx8IFwKKyAgICBkZWZpbmVkKExJQlhNTF9QVVNIX0VOQUJMRUQpCiAjZGVmaW5lIGdlbl9uYl94bWxTQVhIYW5kbGVyUHRyIDIKIHN0YXRpYyB4bWxTQVhIYW5kbGVyUHRyIGdlbl94bWxTQVhIYW5kbGVyUHRyKGludCBubywgaW50IG5yIEFUVFJJQlVURV9VTlVTRUQpIHsKKyAgICAodm9pZCkgbm87CisjaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAogICAgIGlmIChubyA9PSAwKSByZXR1cm4oKHhtbFNBWEhhbmRsZXJQdHIpICZ4bWxEZWZhdWx0U0FYSGFuZGxlcik7CisjZW5kaWYKICAgICByZXR1cm4oTlVMTCk7CiB9CiBzdGF0aWMgdm9pZCBkZXNfeG1sU0FYSGFuZGxlclB0cihpbnQgbm8gQVRUUklCVVRFX1VOVVNFRCwgeG1sU0FYSGFuZGxlclB0ciB2YWwgQVRUUklCVVRFX1VOVVNFRCwgaW50IG5yIEFUVFJJQlVURV9VTlVTRUQpIHsKQEAgLTE0NTcsNiArMTQ2OCw0NyBAQAogCiAKIHN0YXRpYyBpbnQKK3Rlc3RfaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0KHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisjaWYgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKQorICAgIGludCBtZW1fYmFzZTsKKyAgICBodG1sUGFyc2VyQ3R4dFB0ciByZXRfdmFsOworICAgIGNvbnN0IGNoYXIgKiBmaWxlbmFtZTsgLyogdGhlIGZpbGVuYW1lICovCisgICAgaW50IG5fZmlsZW5hbWU7CisgICAgY2hhciAqIGVuY29kaW5nOyAvKiBhIGZyZWUgZm9ybSBDIHN0cmluZyBkZXNjcmliaW5nIHRoZSBIVE1MIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMICovCisgICAgaW50IG5fZW5jb2Rpbmc7CisKKyAgICBmb3IgKG5fZmlsZW5hbWUgPSAwO25fZmlsZW5hbWUgPCBnZW5fbmJfZmlsZW91dHB1dDtuX2ZpbGVuYW1lKyspIHsKKyAgICBmb3IgKG5fZW5jb2RpbmcgPSAwO25fZW5jb2RpbmcgPCBnZW5fbmJfY29uc3RfY2hhcl9wdHI7bl9lbmNvZGluZysrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIGZpbGVuYW1lID0gZ2VuX2ZpbGVvdXRwdXQobl9maWxlbmFtZSwgMCk7CisgICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDEpOworCisgICAgICAgIHJldF92YWwgPSBodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQoZmlsZW5hbWUsIChjb25zdCBjaGFyICopZW5jb2RpbmcpOworICAgICAgICBkZXNyZXRfaHRtbFBhcnNlckN0eHRQdHIocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ZpbGVvdXRwdXQobl9maWxlbmFtZSwgZmlsZW5hbWUsIDApOworICAgICAgICBkZXNfY29uc3RfY2hhcl9wdHIobl9lbmNvZGluZywgKGNvbnN0IGNoYXIgKillbmNvZGluZywgMSk7CisgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgeworICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiBodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQiLAorCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CisJICAgIHRlc3RfcmV0Kys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZmlsZW5hbWUpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2VuY29kaW5nKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb25fdGVzdHMrKzsKKyNlbmRpZgorCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50CiB0ZXN0X2h0bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0xNDc0LDggKzE1MjYsOCBAQAogICAgICAgICBidWZmZXIgPSBnZW5fY29uc3RfY2hhcl9wdHIobl9idWZmZXIsIDApOwogICAgICAgICBzaXplID0gZ2VuX2ludChuX3NpemUsIDEpOwogICAgICAgICBpZiAoKGJ1ZmZlciAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHNpemUgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgYnVmZmVyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBidWZmZXIpKSkKKyAgICAgICAgICAgIHNpemUgPSAwOwogCiAgICAgICAgIHJldF92YWwgPSBodG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dCgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSk7CiAgICAgICAgIGRlc3JldF9odG1sUGFyc2VyQ3R4dFB0cihyZXRfdmFsKTsKQEAgLTE1NDEsOCArMTU5Myw4IEBACiAgICAgICAgIGZpbGVuYW1lID0gZ2VuX2ZpbGVvdXRwdXQobl9maWxlbmFtZSwgNCk7CiAgICAgICAgIGVuYyA9IGdlbl94bWxDaGFyRW5jb2Rpbmcobl9lbmMsIDUpOwogICAgICAgICBpZiAoKGNodW5rICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoc2l6ZSA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBjaHVuaykgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgY2h1bmspKSkKKyAgICAgICAgICAgIHNpemUgPSAwOwogCiAgICAgICAgIHJldF92YWwgPSBodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoc2F4LCB1c2VyX2RhdGEsIChjb25zdCBjaGFyICopY2h1bmssIHNpemUsIGZpbGVuYW1lLCBlbmMpOwogICAgICAgICBkZXNyZXRfaHRtbFBhcnNlckN0eHRQdHIocmV0X3ZhbCk7CkBAIC0xNTg4LDggKzE2NDAsOCBAQAogICAgIGh0bWxEb2NQdHIgcmV0X3ZhbDsKICAgICBodG1sUGFyc2VyQ3R4dFB0ciBjdHh0OyAvKiBhbiBIVE1MIHBhcnNlciBjb250ZXh0ICovCiAgICAgaW50IG5fY3R4dDsKLSAgICB4bWxDaGFyICogY3VyOyAvKiBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nICovCi0gICAgaW50IG5fY3VyOworICAgIHhtbENoYXIgKiBzdHI7IC8qIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgKi8KKyAgICBpbnQgbl9zdHI7CiAgICAgY29uc3QgY2hhciAqIFVSTDsgLyogdGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgdGhlIGRvY3VtZW50ICovCiAgICAgaW50IG5fVVJMOwogICAgIGNoYXIgKiBlbmNvZGluZzsgLyogdGhlIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMICovCkBAIC0xNTk4LDIyICsxNjUwLDIyIEBACiAgICAgaW50IG5fb3B0aW9uczsKIAogICAgIGZvciAobl9jdHh0ID0gMDtuX2N0eHQgPCBnZW5fbmJfaHRtbFBhcnNlckN0eHRQdHI7bl9jdHh0KyspIHsKLSAgICBmb3IgKG5fY3VyID0gMDtuX2N1ciA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2N1cisrKSB7CisgICAgZm9yIChuX3N0ciA9IDA7bl9zdHIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9zdHIrKykgewogICAgIGZvciAobl9VUkwgPSAwO25fVVJMIDwgZ2VuX25iX2ZpbGVwYXRoO25fVVJMKyspIHsKICAgICBmb3IgKG5fZW5jb2RpbmcgPSAwO25fZW5jb2RpbmcgPCBnZW5fbmJfY29uc3RfY2hhcl9wdHI7bl9lbmNvZGluZysrKSB7CiAgICAgZm9yIChuX29wdGlvbnMgPSAwO25fb3B0aW9ucyA8IGdlbl9uYl9pbnQ7bl9vcHRpb25zKyspIHsKICAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKICAgICAgICAgY3R4dCA9IGdlbl9odG1sUGFyc2VyQ3R4dFB0cihuX2N0eHQsIDApOwotICAgICAgICBjdXIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9jdXIsIDEpOworICAgICAgICBzdHIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9zdHIsIDEpOwogICAgICAgICBVUkwgPSBnZW5fZmlsZXBhdGgobl9VUkwsIDIpOwogICAgICAgICBlbmNvZGluZyA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2VuY29kaW5nLCAzKTsKICAgICAgICAgb3B0aW9ucyA9IGdlbl9pbnQobl9vcHRpb25zLCA0KTsKIAotICAgICAgICByZXRfdmFsID0gaHRtbEN0eHRSZWFkRG9jKGN0eHQsIChjb25zdCB4bWxDaGFyICopY3VyLCBVUkwsIChjb25zdCBjaGFyICopZW5jb2RpbmcsIG9wdGlvbnMpOworICAgICAgICByZXRfdmFsID0gaHRtbEN0eHRSZWFkRG9jKGN0eHQsIChjb25zdCB4bWxDaGFyICopc3RyLCBVUkwsIChjb25zdCBjaGFyICopZW5jb2RpbmcsIG9wdGlvbnMpOwogICAgICAgICBkZXNyZXRfaHRtbERvY1B0cihyZXRfdmFsKTsKICAgICAgICAgY2FsbF90ZXN0cysrOwogICAgICAgICBkZXNfaHRtbFBhcnNlckN0eHRQdHIobl9jdHh0LCBjdHh0LCAwKTsKLSAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fY3VyLCAoY29uc3QgeG1sQ2hhciAqKWN1ciwgMSk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX3N0ciwgKGNvbnN0IHhtbENoYXIgKilzdHIsIDEpOwogICAgICAgICBkZXNfZmlsZXBhdGgobl9VUkwsIFVSTCwgMik7CiAgICAgICAgIGRlc19jb25zdF9jaGFyX3B0cihuX2VuY29kaW5nLCAoY29uc3QgY2hhciAqKWVuY29kaW5nLCAzKTsKICAgICAgICAgZGVzX2ludChuX29wdGlvbnMsIG9wdGlvbnMsIDQpOwpAQCAtMTYyMyw3ICsxNjc1LDcgQEAKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwogICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2N0eHQpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2N1cik7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fc3RyKTsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9VUkwpOwogICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2VuY29kaW5nKTsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9vcHRpb25zKTsKQEAgLTE3MTgsOCArMTc3MCw4IEBACiAgICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDQpOwogICAgICAgICBvcHRpb25zID0gZ2VuX2ludChuX29wdGlvbnMsIDUpOwogICAgICAgICBpZiAoKGJ1ZmZlciAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHNpemUgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgYnVmZmVyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBidWZmZXIpKSkKKyAgICAgICAgICAgIHNpemUgPSAwOwogCiAgICAgICAgIHJldF92YWwgPSBodG1sQ3R4dFJlYWRNZW1vcnkoY3R4dCwgKGNvbnN0IGNoYXIgKilidWZmZXIsIHNpemUsIFVSTCwgKGNvbnN0IGNoYXIgKillbmNvZGluZywgb3B0aW9ucyk7CiAgICAgICAgIGRlc3JldF9odG1sRG9jUHRyKHJldF92YWwpOwpAQCAtMjA3Niw2ICsyMTI4LDMxIEBACiAKIAogc3RhdGljIGludAordGVzdF9odG1sSW5pdEF1dG9DbG9zZSh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworI2lmIGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkKKyAgICBpbnQgbWVtX2Jhc2U7CisKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKworICAgICAgICBodG1sSW5pdEF1dG9DbG9zZSgpOworICAgICAgICBjYWxsX3Rlc3RzKys7CisgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgeworICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiBodG1sSW5pdEF1dG9DbG9zZSIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIGZ1bmN0aW9uX3Rlc3RzKys7CisjZW5kaWYKKworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAogdGVzdF9odG1sSXNBdXRvQ2xvc2VkKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0yMTc2LDYgKzIyNTMsNTQgQEAKICAgICByZXR1cm4odGVzdF9yZXQpOwogfQogCisjaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAorCisjZGVmaW5lIGdlbl9uYl9jb25zdF9odG1sU0FYSGFuZGxlcl9wdHIgMQorI2RlZmluZSBnZW5fY29uc3RfaHRtbFNBWEhhbmRsZXJfcHRyKG5vLCBucikgTlVMTAorI2RlZmluZSBkZXNfY29uc3RfaHRtbFNBWEhhbmRsZXJfcHRyKG5vLCB2YWwsIG5yKQorI2VuZGlmCisKKworc3RhdGljIGludAordGVzdF9odG1sTmV3U0FYUGFyc2VyQ3R4dCh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworI2lmIGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkKKyAgICBpbnQgbWVtX2Jhc2U7CisgICAgaHRtbFBhcnNlckN0eHRQdHIgcmV0X3ZhbDsKKyAgICBodG1sU0FYSGFuZGxlciAqIHNheDsgLyogU0FYIGhhbmRsZXIgKi8KKyAgICBpbnQgbl9zYXg7CisgICAgdm9pZCAqIHVzZXJEYXRhOyAvKiB1c2VyIGRhdGEgKi8KKyAgICBpbnQgbl91c2VyRGF0YTsKKworICAgIGZvciAobl9zYXggPSAwO25fc2F4IDwgZ2VuX25iX2NvbnN0X2h0bWxTQVhIYW5kbGVyX3B0cjtuX3NheCsrKSB7CisgICAgZm9yIChuX3VzZXJEYXRhID0gMDtuX3VzZXJEYXRhIDwgZ2VuX25iX3VzZXJkYXRhO25fdXNlckRhdGErKykgeworICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOworICAgICAgICBzYXggPSBnZW5fY29uc3RfaHRtbFNBWEhhbmRsZXJfcHRyKG5fc2F4LCAwKTsKKyAgICAgICAgdXNlckRhdGEgPSBnZW5fdXNlcmRhdGEobl91c2VyRGF0YSwgMSk7CisKKyAgICAgICAgcmV0X3ZhbCA9IGh0bWxOZXdTQVhQYXJzZXJDdHh0KChjb25zdCBodG1sU0FYSGFuZGxlciAqKXNheCwgdXNlckRhdGEpOworICAgICAgICBkZXNyZXRfaHRtbFBhcnNlckN0eHRQdHIocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2NvbnN0X2h0bWxTQVhIYW5kbGVyX3B0cihuX3NheCwgKGNvbnN0IGh0bWxTQVhIYW5kbGVyICopc2F4LCAwKTsKKyAgICAgICAgZGVzX3VzZXJkYXRhKG5fdXNlckRhdGEsIHVzZXJEYXRhLCAxKTsKKyAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CisgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIGh0bWxOZXdTQVhQYXJzZXJDdHh0IiwKKwkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOworCSAgICB0ZXN0X3JldCsrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3NheCk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdXNlckRhdGEpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbl90ZXN0cysrOworI2VuZGlmCisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCiAKIHN0YXRpYyBpbnQKIHRlc3RfaHRtbE5vZGVTdGF0dXModm9pZCkgewpAQCAtMjI3OCw4ICsyNDAzLDggQEAKICAgICAgICAgc2l6ZSA9IGdlbl9pbnQobl9zaXplLCAyKTsKICAgICAgICAgdGVybWluYXRlID0gZ2VuX2ludChuX3Rlcm1pbmF0ZSwgMyk7CiAgICAgICAgIGlmICgoY2h1bmsgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGNodW5rKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBjaHVuaykpKQorICAgICAgICAgICAgc2l6ZSA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IGh0bWxQYXJzZUNodW5rKGN0eHQsIChjb25zdCBjaGFyICopY2h1bmssIHNpemUsIHRlcm1pbmF0ZSk7CiAgICAgICAgIGlmIChjdHh0ICE9IE5VTEwpIHt4bWxGcmVlRG9jKGN0eHQtPm15RG9jKTsgY3R4dC0+bXlEb2MgPSBOVUxMO30KQEAgLTI2MjQsOCArMjc0OSw4IEBACiAgICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDMpOwogICAgICAgICBvcHRpb25zID0gZ2VuX2ludChuX29wdGlvbnMsIDQpOwogICAgICAgICBpZiAoKGJ1ZmZlciAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHNpemUgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgYnVmZmVyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBidWZmZXIpKSkKKyAgICAgICAgICAgIHNpemUgPSAwOwogCiAgICAgICAgIHJldF92YWwgPSBodG1sUmVhZE1lbW9yeSgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgVVJMLCAoY29uc3QgY2hhciAqKWVuY29kaW5nLCBvcHRpb25zKTsKICAgICAgICAgZGVzcmV0X2h0bWxEb2NQdHIocmV0X3ZhbCk7CkBAIC0yNzgyLDEwICsyOTA3LDExIEBACiB0ZXN0X0hUTUxwYXJzZXIodm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIEhUTUxwYXJzZXIgOiAzMiBvZiAzOCBmdW5jdGlvbnMgLi4uXG4iKTsKKyAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIEhUTUxwYXJzZXIgOiAzNSBvZiA0MSBmdW5jdGlvbnMgLi4uXG4iKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X1VURjhUb0h0bWwoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X2h0bWxBdHRyQWxsb3dlZCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbEF1dG9DbG9zZVRhZygpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sQ3R4dFJlYWREb2MoKTsKQEAgLTI3OTksOSArMjkyNSwxMSBAQAogICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbEVudGl0eUxvb2t1cCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbEVudGl0eVZhbHVlTG9va3VwKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sSGFuZGxlT21pdHRlZEVsZW0oKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X2h0bWxJbml0QXV0b0Nsb3NlKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sSXNBdXRvQ2xvc2VkKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sSXNTY3JpcHRBdHRyaWJ1dGUoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X2h0bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sTmV3U0FYUGFyc2VyQ3R4dCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbE5vZGVTdGF0dXMoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X2h0bWxQYXJzZUNoYXJSZWYoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X2h0bWxQYXJzZUNodW5rKCk7CkBAIC0zODQzLDggKzM5NzEsOCBAQAogICAgICAgICB2YWx1ZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX3ZhbHVlLCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgodmFsdWUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgdmFsdWUpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgdmFsdWUpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgeG1sU0FYMkNEYXRhQmxvY2soY3R4LCAoY29uc3QgeG1sQ2hhciAqKXZhbHVlLCBsZW4pOwogICAgICAgICBjYWxsX3Rlc3RzKys7CkBAIC0zODkwLDggKzQwMTgsOCBAQAogICAgICAgICBjaCA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2NoLCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoY2ggIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgY2gpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgY2gpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgeG1sU0FYMkNoYXJhY3RlcnMoY3R4LCAoY29uc3QgeG1sQ2hhciAqKWNoLCBsZW4pOwogICAgICAgICBjYWxsX3Rlc3RzKys7CkBAIC00NTMzLDggKzQ2NjEsOCBAQAogICAgICAgICBjaCA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2NoLCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoY2ggIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgY2gpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgY2gpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgeG1sU0FYMklnbm9yYWJsZVdoaXRlc3BhY2UoY3R4LCAoY29uc3QgeG1sQ2hhciAqKWNoLCBsZW4pOwogICAgICAgICBjYWxsX3Rlc3RzKys7CkBAIC01MTcxLDggKzUyOTksMTYgQEAKICAgICBmb3IgKG5fdmVyc2lvbiA9IDA7bl92ZXJzaW9uIDwgZ2VuX25iX2ludDtuX3ZlcnNpb24rKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwogICAgICAgICB2ZXJzaW9uID0gZ2VuX2ludChuX3ZlcnNpb24sIDApOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgaW50IG9yaWdpbmFsX3ZlcnNpb24gPSB4bWxTQVhEZWZhdWx0VmVyc2lvbigyKTsKKwogCiAgICAgICAgIHJldF92YWwgPSB4bWxTQVhEZWZhdWx0VmVyc2lvbih2ZXJzaW9uKTsKKyAgICAgICAgCisgICAgICAgICAgICAodm9pZCl4bWxTQVhEZWZhdWx0VmVyc2lvbihvcmlnaW5hbF92ZXJzaW9uKTsKKyAgICAgICAgfQorCiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKICAgICAgICAgZGVzX2ludChuX3ZlcnNpb24sIHZlcnNpb24sIDApOwpAQCAtNTI4Miw3ICs1NDE4LDcgQEAKIHRlc3RfeG1sQzE0TkRvY0R1bXBNZW1vcnkodm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSNpZiBkZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKQorI2lmIGRlZmluZWQoTElCWE1MX0MxNE5fRU5BQkxFRCkKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgaW50IHJldF92YWw7CiAgICAgeG1sRG9jUHRyIGRvYzsgLyogdGhlIFhNTCBkb2N1bWVudCBmb3IgY2Fub25pemF0aW9uICovCkBAIC01MzUxLDcgKzU0ODcsNyBAQAogdGVzdF94bWxDMTRORG9jU2F2ZSh2b2lkKSB7CiAgICAgaW50IHRlc3RfcmV0ID0gMDsKIAotI2lmIGRlZmluZWQoTElCWE1MX0MxNE5fRU5BQkxFRCkgJiYgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpCisjaWYgZGVmaW5lZChMSUJYTUxfQzE0Tl9FTkFCTEVEKQogICAgIGludCBtZW1fYmFzZTsKICAgICBpbnQgcmV0X3ZhbDsKICAgICB4bWxEb2NQdHIgZG9jOyAvKiB0aGUgWE1MIGRvY3VtZW50IGZvciBjYW5vbml6YXRpb24gKi8KQEAgLTU0MjcsNyArNTU2Myw3IEBACiB0ZXN0X3htbEMxNE5Eb2NTYXZlVG8odm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSNpZiBkZWZpbmVkKExJQlhNTF9DMTROX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKQorI2lmIGRlZmluZWQoTElCWE1MX0MxNE5fRU5BQkxFRCkKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgaW50IHJldF92YWw7CiAgICAgeG1sRG9jUHRyIGRvYzsgLyogdGhlIFhNTCBkb2N1bWVudCBmb3IgY2Fub25pemF0aW9uICovCkBAIC04MTU0LDggKzgyOTAsOCBAQAogICAgICAgICBuYW1lID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKG5hbWUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbmFtZSkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBuYW1lKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxEaWN0RXhpc3RzKGRpY3QsIChjb25zdCB4bWxDaGFyICopbmFtZSwgbGVuKTsKICAgICAgICAgZGVzcmV0X2NvbnN0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtODE5OCwxMSArODMzNCwxMSBAQAogCiAgICAgaW50IG1lbV9iYXNlOwogICAgIGNvbnN0IHhtbENoYXIgKiByZXRfdmFsOwotICAgIHhtbERpY3RQdHIgZGljdDsgLyogdGhlIGRpY3Rpb25hcnkgKi8KKyAgICB4bWxEaWN0UHRyIGRpY3Q7IC8qIGRpY3Rpb25hcnkgKi8KICAgICBpbnQgbl9kaWN0OwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KKyAgICB4bWxDaGFyICogbmFtZTsgLyogc3RyaW5nIGtleSAqLwogICAgIGludCBuX25hbWU7Ci0gICAgaW50IGxlbjsgLyogdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSwgaWYgLTEgaXQgaXMgcmVjb21wdXRlZCAqLworICAgIGludCBsZW47IC8qIGxlbmd0aCBvZiB0aGUga2V5LCBpZiAtMSBpdCBpcyByZWNvbXB1dGVkICovCiAgICAgaW50IG5fbGVuOwogCiAgICAgZm9yIChuX2RpY3QgPSAwO25fZGljdCA8IGdlbl9uYl94bWxEaWN0UHRyO25fZGljdCsrKSB7CkBAIC04MjEzLDggKzgzNDksOCBAQAogICAgICAgICBuYW1lID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKG5hbWUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbmFtZSkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBuYW1lKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxEaWN0TG9va3VwKGRpY3QsIChjb25zdCB4bWxDaGFyICopbmFtZSwgbGVuKTsKICAgICAgICAgZGVzcmV0X2NvbnN0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtOTYxNSw3ICs5NzUxLDcgQEAKIHRlc3RfZW50aXRpZXModm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIGVudGl0aWVzIDogMTEgb2YgMTcgZnVuY3Rpb25zIC4uLlxuIik7CisgICAgaWYgKHF1aWV0ID09IDApIHByaW50ZigiVGVzdGluZyBlbnRpdGllcyA6IDExIG9mIDE4IGZ1bmN0aW9ucyAuLi5cbiIpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sQWRkRG9jRW50aXR5KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxBZGREdGRFbnRpdHkoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbENvcHlFbnRpdGllc1RhYmxlKCk7CkBAIC05NjQxLDM1ICs5Nzc3LDM1IEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgaW50IHJldF92YWw7Ci0gICAgeG1sSGFzaFRhYmxlUHRyIHRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwotICAgIGludCBuX3RhYmxlOwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lOwotICAgIHZvaWQgKiB1c2VyZGF0YTsgLyogYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX3VzZXJkYXRhOworICAgIHhtbEhhc2hUYWJsZVB0ciBoYXNoOyAvKiBoYXNoIHRhYmxlICovCisgICAgaW50IG5faGFzaDsKKyAgICB4bWxDaGFyICoga2V5OyAvKiBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5OworICAgIHZvaWQgKiBwYXlsb2FkOyAvKiBwb2ludGVyIHRvIHRoZSBwYXlsb2FkICovCisgICAgaW50IG5fcGF5bG9hZDsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl91c2VyZGF0YSA9IDA7bl91c2VyZGF0YSA8IGdlbl9uYl91c2VyZGF0YTtuX3VzZXJkYXRhKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fcGF5bG9hZCA9IDA7bl9wYXlsb2FkIDwgZ2VuX25iX3ZvaWRfcHRyO25fcGF5bG9hZCsrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKLSAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDEpOwotICAgICAgICB1c2VyZGF0YSA9IGdlbl91c2VyZGF0YShuX3VzZXJkYXRhLCAyKTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKKyAgICAgICAga2V5ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5LCAxKTsKKyAgICAgICAgcGF5bG9hZCA9IGdlbl92b2lkX3B0cihuX3BheWxvYWQsIDIpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoQWRkRW50cnkodGFibGUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgdXNlcmRhdGEpOworICAgICAgICByZXRfdmFsID0geG1sSGFzaEFkZEVudHJ5KGhhc2gsIChjb25zdCB4bWxDaGFyICopa2V5LCBwYXlsb2FkKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKICAgICAgICAgY2FsbF90ZXN0cysrOwotICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5fdGFibGUsIHRhYmxlLCAwKTsKLSAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAxKTsKLSAgICAgICAgZGVzX3VzZXJkYXRhKG5fdXNlcmRhdGEsIHVzZXJkYXRhLCAyKTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKKyAgICAgICAgZGVzX3ZvaWRfcHRyKG5fcGF5bG9hZCwgcGF5bG9hZCwgMik7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoQWRkRW50cnkiLAogCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CiAJICAgIHRlc3RfcmV0Kys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdGFibGUpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX25hbWUpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3VzZXJkYXRhKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9oYXNoKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9rZXkpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3BheWxvYWQpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTY4Nyw0MSArOTgyMyw0MSBAQAogCiAgICAgaW50IG1lbV9iYXNlOwogICAgIGludCByZXRfdmFsOwotICAgIHhtbEhhc2hUYWJsZVB0ciB0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi8KLSAgICBpbnQgbl90YWJsZTsKLSAgICB4bWxDaGFyICogbmFtZTsgLyogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTsKLSAgICB4bWxDaGFyICogbmFtZTI7IC8qIGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTI7Ci0gICAgdm9pZCAqIHVzZXJkYXRhOyAvKiBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fdXNlcmRhdGE7CisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7IC8qIGhhc2ggdGFibGUgKi8KKyAgICBpbnQgbl9oYXNoOworICAgIHhtbENoYXIgKiBrZXk7IC8qIGZpcnN0IHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXk7CisgICAgeG1sQ2hhciAqIGtleTI7IC8qIHNlY29uZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MjsKKyAgICB2b2lkICogcGF5bG9hZDsgLyogcG9pbnRlciB0byB0aGUgcGF5bG9hZCAqLworICAgIGludCBuX3BheWxvYWQ7CiAKLSAgICBmb3IgKG5fdGFibGUgPSAwO25fdGFibGUgPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25fdGFibGUrKykgewotICAgIGZvciAobl9uYW1lID0gMDtuX25hbWUgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lKyspIHsKLSAgICBmb3IgKG5fbmFtZTIgPSAwO25fbmFtZTIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lMisrKSB7Ci0gICAgZm9yIChuX3VzZXJkYXRhID0gMDtuX3VzZXJkYXRhIDwgZ2VuX25iX3VzZXJkYXRhO25fdXNlcmRhdGErKykgeworICAgIGZvciAobl9oYXNoID0gMDtuX2hhc2ggPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25faGFzaCsrKSB7CisgICAgZm9yIChuX2tleSA9IDA7bl9rZXkgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9rZXkrKykgeworICAgIGZvciAobl9rZXkyID0gMDtuX2tleTIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9rZXkyKyspIHsKKyAgICBmb3IgKG5fcGF5bG9hZCA9IDA7bl9wYXlsb2FkIDwgZ2VuX25iX3ZvaWRfcHRyO25fcGF5bG9hZCsrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKLSAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDEpOwotICAgICAgICBuYW1lMiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAyKTsKLSAgICAgICAgdXNlcmRhdGEgPSBnZW5fdXNlcmRhdGEobl91c2VyZGF0YSwgMyk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CisgICAgICAgIGtleTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAyKTsKKyAgICAgICAgcGF5bG9hZCA9IGdlbl92b2lkX3B0cihuX3BheWxvYWQsIDMpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoQWRkRW50cnkyKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZTIsIHVzZXJkYXRhKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hBZGRFbnRyeTIoaGFzaCwgKGNvbnN0IHhtbENoYXIgKilrZXksIChjb25zdCB4bWxDaGFyICopa2V5MiwgcGF5bG9hZCk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAyKTsKLSAgICAgICAgZGVzX3VzZXJkYXRhKG5fdXNlcmRhdGEsIHVzZXJkYXRhLCAzKTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MiwgKGNvbnN0IHhtbENoYXIgKilrZXkyLCAyKTsKKyAgICAgICAgZGVzX3ZvaWRfcHRyKG5fcGF5bG9hZCwgcGF5bG9hZCwgMyk7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoQWRkRW50cnkyIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdXNlcmRhdGEpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5Mik7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fcGF5bG9hZCk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC05NzQwLDQ3ICs5ODc2LDQ3IEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgaW50IHJldF92YWw7Ci0gICAgeG1sSGFzaFRhYmxlUHRyIHRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwotICAgIGludCBuX3RhYmxlOwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lOwotICAgIHhtbENoYXIgKiBuYW1lMjsgLyogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lMjsKLSAgICB4bWxDaGFyICogbmFtZTM7IC8qIGEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lMzsKLSAgICB2b2lkICogdXNlcmRhdGE7IC8qIGEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl91c2VyZGF0YTsKKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsgLyogaGFzaCB0YWJsZSAqLworICAgIGludCBuX2hhc2g7CisgICAgeG1sQ2hhciAqIGtleTsgLyogZmlyc3Qgc3RyaW5nIGtleSAqLworICAgIGludCBuX2tleTsKKyAgICB4bWxDaGFyICoga2V5MjsgLyogc2Vjb25kIHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXkyOworICAgIHhtbENoYXIgKiBrZXkzOyAvKiB0aGlyZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MzsKKyAgICB2b2lkICogcGF5bG9hZDsgLyogcG9pbnRlciB0byB0aGUgcGF5bG9hZCAqLworICAgIGludCBuX3BheWxvYWQ7CiAKLSAgICBmb3IgKG5fdGFibGUgPSAwO25fdGFibGUgPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25fdGFibGUrKykgewotICAgIGZvciAobl9uYW1lID0gMDtuX25hbWUgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lKyspIHsKLSAgICBmb3IgKG5fbmFtZTIgPSAwO25fbmFtZTIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lMisrKSB7Ci0gICAgZm9yIChuX25hbWUzID0gMDtuX25hbWUzIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fbmFtZTMrKykgewotICAgIGZvciAobl91c2VyZGF0YSA9IDA7bl91c2VyZGF0YSA8IGdlbl9uYl91c2VyZGF0YTtuX3VzZXJkYXRhKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fa2V5MiA9IDA7bl9rZXkyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5MisrKSB7CisgICAgZm9yIChuX2tleTMgPSAwO25fa2V5MyA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleTMrKykgeworICAgIGZvciAobl9wYXlsb2FkID0gMDtuX3BheWxvYWQgPCBnZW5fbmJfdm9pZF9wdHI7bl9wYXlsb2FkKyspIHsKICAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKLSAgICAgICAgdGFibGUgPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5fdGFibGUsIDApOwotICAgICAgICBuYW1lID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgMSk7Ci0gICAgICAgIG5hbWUyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZTIsIDIpOwotICAgICAgICBuYW1lMyA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUzLCAzKTsKLSAgICAgICAgdXNlcmRhdGEgPSBnZW5fdXNlcmRhdGEobl91c2VyZGF0YSwgNCk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CisgICAgICAgIGtleTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAyKTsKKyAgICAgICAga2V5MyA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleTMsIDMpOworICAgICAgICBwYXlsb2FkID0gZ2VuX3ZvaWRfcHRyKG5fcGF5bG9hZCwgNCk7CiAKLSAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hBZGRFbnRyeTModGFibGUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lMiwgKGNvbnN0IHhtbENoYXIgKiluYW1lMywgdXNlcmRhdGEpOworICAgICAgICByZXRfdmFsID0geG1sSGFzaEFkZEVudHJ5MyhoYXNoLCAoY29uc3QgeG1sQ2hhciAqKWtleSwgKGNvbnN0IHhtbENoYXIgKilrZXkyLCAoY29uc3QgeG1sQ2hhciAqKWtleTMsIHBheWxvYWQpOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7Ci0gICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl90YWJsZSwgdGFibGUsIDApOwotICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIDEpOwotICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lMiwgKGNvbnN0IHhtbENoYXIgKiluYW1lMiwgMik7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUzLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUzLCAzKTsKLSAgICAgICAgZGVzX3VzZXJkYXRhKG5fdXNlcmRhdGEsIHVzZXJkYXRhLCA0KTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MiwgKGNvbnN0IHhtbENoYXIgKilrZXkyLCAyKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MywgKGNvbnN0IHhtbENoYXIgKilrZXkzLCAzKTsKKyAgICAgICAgZGVzX3ZvaWRfcHRyKG5fcGF5bG9hZCwgcGF5bG9hZCwgNCk7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoQWRkRW50cnkzIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZTMpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3VzZXJkYXRhKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9oYXNoKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9rZXkpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleTIpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleTMpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3BheWxvYWQpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTgyOSwyOCArOTk2NSwyOCBAQAogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKICAgICBpbnQgbWVtX2Jhc2U7Ci0gICAgdm9pZCAqIGVudHJ5OyAvKiB0aGUgaGFzaCB0YWJsZSBlbnRyeSAqLworICAgIHZvaWQgKiBlbnRyeTsgLyogaGFzaCB0YWJsZSBlbnRyeSAqLwogICAgIGludCBuX2VudHJ5OwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgZW50cnkncyBuYW1lICovCi0gICAgaW50IG5fbmFtZTsKKyAgICB4bWxDaGFyICoga2V5OyAvKiB0aGUgZW50cnkncyBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5OwogCiAgICAgZm9yIChuX2VudHJ5ID0gMDtuX2VudHJ5IDwgZ2VuX25iX3ZvaWRfcHRyO25fZW50cnkrKykgewotICAgIGZvciAobl9uYW1lID0gMDtuX25hbWUgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lKyspIHsKKyAgICBmb3IgKG5fa2V5ID0gMDtuX2tleSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleSsrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CiAgICAgICAgIGVudHJ5ID0gZ2VuX3ZvaWRfcHRyKG5fZW50cnksIDApOwotICAgICAgICBuYW1lID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgMSk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CiAKLSAgICAgICAgeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcihlbnRyeSwgKGNvbnN0IHhtbENoYXIgKiluYW1lKTsKKyAgICAgICAgeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcihlbnRyeSwgKGNvbnN0IHhtbENoYXIgKilrZXkpOwogICAgICAgICBjYWxsX3Rlc3RzKys7CiAgICAgICAgIGRlc192b2lkX3B0cihuX2VudHJ5LCBlbnRyeSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleSwgKGNvbnN0IHhtbENoYXIgKilrZXksIDEpOwogICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKICAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sSGFzaERlZmF1bHREZWFsbG9jYXRvciIsCiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9lbnRyeSk7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5KTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTk4NjcsMjkgKzEwMDAzLDI5IEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgdm9pZCAqIHJldF92YWw7Ci0gICAgeG1sSGFzaFRhYmxlUHRyIHRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwotICAgIGludCBuX3RhYmxlOwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lOworICAgIHhtbEhhc2hUYWJsZVB0ciBoYXNoOyAvKiBoYXNoIHRhYmxlICovCisgICAgaW50IG5faGFzaDsKKyAgICB4bWxDaGFyICoga2V5OyAvKiBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5OwogCi0gICAgZm9yIChuX3RhYmxlID0gMDtuX3RhYmxlIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX3RhYmxlKyspIHsKLSAgICBmb3IgKG5fbmFtZSA9IDA7bl9uYW1lIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fbmFtZSsrKSB7CisgICAgZm9yIChuX2hhc2ggPSAwO25faGFzaCA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl9oYXNoKyspIHsKKyAgICBmb3IgKG5fa2V5ID0gMDtuX2tleSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleSsrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKLSAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDEpOworICAgICAgICBoYXNoID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIDApOworICAgICAgICBrZXkgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIDEpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoTG9va3VwKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUpOworICAgICAgICByZXRfdmFsID0geG1sSGFzaExvb2t1cChoYXNoLCAoY29uc3QgeG1sQ2hhciAqKWtleSk7CiAgICAgICAgIGRlc3JldF92b2lkX3B0cihyZXRfdmFsKTsKICAgICAgICAgY2FsbF90ZXN0cysrOwotICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5fdGFibGUsIHRhYmxlLCAwKTsKLSAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAxKTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKICAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbEhhc2hMb29rdXAiLAogCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CiAJICAgIHRlc3RfcmV0Kys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdGFibGUpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX25hbWUpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleSk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC05OTA2LDM1ICsxMDA0MiwzNSBAQAogCiAgICAgaW50IG1lbV9iYXNlOwogICAgIHZvaWQgKiByZXRfdmFsOwotICAgIHhtbEhhc2hUYWJsZVB0ciB0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi8KLSAgICBpbnQgbl90YWJsZTsKLSAgICB4bWxDaGFyICogbmFtZTsgLyogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTsKLSAgICB4bWxDaGFyICogbmFtZTI7IC8qIGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTI7CisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7IC8qIGhhc2ggdGFibGUgKi8KKyAgICBpbnQgbl9oYXNoOworICAgIHhtbENoYXIgKiBrZXk7IC8qIGZpcnN0IHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXk7CisgICAgeG1sQ2hhciAqIGtleTI7IC8qIHNlY29uZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MjsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl9uYW1lMiA9IDA7bl9uYW1lMiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUyKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fa2V5MiA9IDA7bl9rZXkyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5MisrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKLSAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDEpOwotICAgICAgICBuYW1lMiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAyKTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKKyAgICAgICAga2V5ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5LCAxKTsKKyAgICAgICAga2V5MiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleTIsIDIpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoTG9va3VwMih0YWJsZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hMb29rdXAyKGhhc2gsIChjb25zdCB4bWxDaGFyICopa2V5LCAoY29uc3QgeG1sQ2hhciAqKWtleTIpOwogICAgICAgICBkZXNyZXRfdm9pZF9wdHIocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAyKTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MiwgKGNvbnN0IHhtbENoYXIgKilrZXkyLCAyKTsKICAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbEhhc2hMb29rdXAyIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5faGFzaCk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5KTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9rZXkyKTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTk5NTIsNDEgKzEwMDg4LDQxIEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgdm9pZCAqIHJldF92YWw7Ci0gICAgeG1sSGFzaFRhYmxlUHRyIHRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwotICAgIGludCBuX3RhYmxlOwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lOwotICAgIHhtbENoYXIgKiBuYW1lMjsgLyogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lMjsKLSAgICB4bWxDaGFyICogbmFtZTM7IC8qIGEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lMzsKKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsgLyogaGFzaCB0YWJsZSAqLworICAgIGludCBuX2hhc2g7CisgICAgeG1sQ2hhciAqIGtleTsgLyogZmlyc3Qgc3RyaW5nIGtleSAqLworICAgIGludCBuX2tleTsKKyAgICB4bWxDaGFyICoga2V5MjsgLyogc2Vjb25kIHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXkyOworICAgIHhtbENoYXIgKiBrZXkzOyAvKiB0aGlyZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MzsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl9uYW1lMiA9IDA7bl9uYW1lMiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUyKyspIHsKLSAgICBmb3IgKG5fbmFtZTMgPSAwO25fbmFtZTMgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lMysrKSB7CisgICAgZm9yIChuX2hhc2ggPSAwO25faGFzaCA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl9oYXNoKyspIHsKKyAgICBmb3IgKG5fa2V5ID0gMDtuX2tleSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleSsrKSB7CisgICAgZm9yIChuX2tleTIgPSAwO25fa2V5MiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleTIrKykgeworICAgIGZvciAobl9rZXkzID0gMDtuX2tleTMgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9rZXkzKyspIHsKICAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKLSAgICAgICAgdGFibGUgPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5fdGFibGUsIDApOwotICAgICAgICBuYW1lID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgMSk7Ci0gICAgICAgIG5hbWUyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZTIsIDIpOwotICAgICAgICBuYW1lMyA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUzLCAzKTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKKyAgICAgICAga2V5ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5LCAxKTsKKyAgICAgICAga2V5MiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleTIsIDIpOworICAgICAgICBrZXkzID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MywgMyk7CiAKLSAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hMb29rdXAzKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZTIsIChjb25zdCB4bWxDaGFyICopbmFtZTMpOworICAgICAgICByZXRfdmFsID0geG1sSGFzaExvb2t1cDMoaGFzaCwgKGNvbnN0IHhtbENoYXIgKilrZXksIChjb25zdCB4bWxDaGFyICopa2V5MiwgKGNvbnN0IHhtbENoYXIgKilrZXkzKTsKICAgICAgICAgZGVzcmV0X3ZvaWRfcHRyKHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7Ci0gICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl90YWJsZSwgdGFibGUsIDApOwotICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIDEpOwotICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lMiwgKGNvbnN0IHhtbENoYXIgKiluYW1lMiwgMik7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUzLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUzLCAzKTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MiwgKGNvbnN0IHhtbENoYXIgKilrZXkyLCAyKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MywgKGNvbnN0IHhtbENoYXIgKilrZXkzLCAzKTsKICAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbEhhc2hMb29rdXAzIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZTMpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5Mik7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5Myk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDAwNSwyNSArMTAxNDEsMjUgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICB2b2lkICogcmV0X3ZhbDsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovCi0gICAgaW50IG5fdGFibGU7Ci0gICAgeG1sQ2hhciAqIHByZWZpeDsgLyogdGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEgKi8KKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsgLyogaGFzaCB0YWJsZSAqLworICAgIGludCBuX2hhc2g7CisgICAgeG1sQ2hhciAqIHByZWZpeDsgLyogcHJlZml4IG9mIHRoZSBzdHJpbmcga2V5ICovCiAgICAgaW50IG5fcHJlZml4OwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KKyAgICB4bWxDaGFyICogbmFtZTsgLyogbG9jYWwgbmFtZSBvZiB0aGUgc3RyaW5nIGtleSAqLwogICAgIGludCBuX25hbWU7CiAKLSAgICBmb3IgKG5fdGFibGUgPSAwO25fdGFibGUgPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25fdGFibGUrKykgeworICAgIGZvciAobl9oYXNoID0gMDtuX2hhc2ggPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25faGFzaCsrKSB7CiAgICAgZm9yIChuX3ByZWZpeCA9IDA7bl9wcmVmaXggPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9wcmVmaXgrKykgewogICAgIGZvciAobl9uYW1lID0gMDtuX25hbWUgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lKyspIHsKICAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKLSAgICAgICAgdGFibGUgPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5fdGFibGUsIDApOworICAgICAgICBoYXNoID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIDApOwogICAgICAgICBwcmVmaXggPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9wcmVmaXgsIDEpOwogICAgICAgICBuYW1lID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgMik7CiAKLSAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hRTG9va3VwKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeCwgKGNvbnN0IHhtbENoYXIgKiluYW1lKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hRTG9va3VwKGhhc2gsIChjb25zdCB4bWxDaGFyICopcHJlZml4LCAoY29uc3QgeG1sQ2hhciAqKW5hbWUpOwogICAgICAgICBkZXNyZXRfdm9pZF9wdHIocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7CisgICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl9oYXNoLCBoYXNoLCAwKTsKICAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fcHJlZml4LCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeCwgMSk7CiAgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMik7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CkBAIC0xMDAzMSw3ICsxMDE2Nyw3IEBACiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbEhhc2hRTG9va3VwIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9oYXNoKTsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9wcmVmaXgpOwogICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX25hbWUpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwpAQCAtMTAwNTEsMzMgKzEwMTg3LDMzIEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgdm9pZCAqIHJldF92YWw7Ci0gICAgeG1sSGFzaFRhYmxlUHRyIHRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwotICAgIGludCBuX3RhYmxlOwotICAgIHhtbENoYXIgKiBwcmVmaXg7IC8qIHRoZSBwcmVmaXggb2YgdGhlIHVzZXJkYXRhICovCisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7IC8qIGhhc2ggdGFibGUgKi8KKyAgICBpbnQgbl9oYXNoOworICAgIHhtbENoYXIgKiBwcmVmaXg7IC8qIGZpcnN0IHByZWZpeCAqLwogICAgIGludCBuX3ByZWZpeDsKLSAgICB4bWxDaGFyICogbmFtZTsgLyogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCisgICAgeG1sQ2hhciAqIG5hbWU7IC8qIGZpcnN0IGxvY2FsIG5hbWUgKi8KICAgICBpbnQgbl9uYW1lOwotICAgIHhtbENoYXIgKiBwcmVmaXgyOyAvKiB0aGUgc2Vjb25kIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEgKi8KKyAgICB4bWxDaGFyICogcHJlZml4MjsgLyogc2Vjb25kIHByZWZpeCAqLwogICAgIGludCBuX3ByZWZpeDI7Ci0gICAgeG1sQ2hhciAqIG5hbWUyOyAvKiBhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLworICAgIHhtbENoYXIgKiBuYW1lMjsgLyogc2Vjb25kIGxvY2FsIG5hbWUgKi8KICAgICBpbnQgbl9uYW1lMjsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7CisgICAgZm9yIChuX2hhc2ggPSAwO25faGFzaCA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl9oYXNoKyspIHsKICAgICBmb3IgKG5fcHJlZml4ID0gMDtuX3ByZWZpeCA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX3ByZWZpeCsrKSB7CiAgICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewogICAgIGZvciAobl9wcmVmaXgyID0gMDtuX3ByZWZpeDIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9wcmVmaXgyKyspIHsKICAgICBmb3IgKG5fbmFtZTIgPSAwO25fbmFtZTIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lMisrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKICAgICAgICAgcHJlZml4ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fcHJlZml4LCAxKTsKICAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDIpOwogICAgICAgICBwcmVmaXgyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fcHJlZml4MiwgMyk7CiAgICAgICAgIG5hbWUyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZTIsIDQpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoUUxvb2t1cDIodGFibGUsIChjb25zdCB4bWxDaGFyICopcHJlZml4LCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIChjb25zdCB4bWxDaGFyICopcHJlZml4MiwgKGNvbnN0IHhtbENoYXIgKiluYW1lMik7CisgICAgICAgIHJldF92YWwgPSB4bWxIYXNoUUxvb2t1cDIoaGFzaCwgKGNvbnN0IHhtbENoYXIgKilwcmVmaXgsIChjb25zdCB4bWxDaGFyICopbmFtZSwgKGNvbnN0IHhtbENoYXIgKilwcmVmaXgyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyKTsKICAgICAgICAgZGVzcmV0X3ZvaWRfcHRyKHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7Ci0gICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl90YWJsZSwgdGFibGUsIDApOworICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgaGFzaCwgMCk7CiAgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX3ByZWZpeCwgKGNvbnN0IHhtbENoYXIgKilwcmVmaXgsIDEpOwogICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIDIpOwogICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9wcmVmaXgyLCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeDIsIDMpOwpAQCAtMTAwODcsNyArMTAyMjMsNyBAQAogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoUUxvb2t1cDIiLAogCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CiAJICAgIHRlc3RfcmV0Kys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdGFibGUpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOwogICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3ByZWZpeCk7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZSk7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fcHJlZml4Mik7CkBAIC0xMDExMSwyMiArMTAyNDcsMjIgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICB2b2lkICogcmV0X3ZhbDsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovCi0gICAgaW50IG5fdGFibGU7Ci0gICAgeG1sQ2hhciAqIHByZWZpeDsgLyogdGhlIHByZWZpeCBvZiB0aGUgdXNlcmRhdGEgKi8KKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsgLyogaGFzaCB0YWJsZSAqLworICAgIGludCBuX2hhc2g7CisgICAgeG1sQ2hhciAqIHByZWZpeDsgLyogZmlyc3QgcHJlZml4ICovCiAgICAgaW50IG5fcHJlZml4OwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KKyAgICB4bWxDaGFyICogbmFtZTsgLyogZmlyc3QgbG9jYWwgbmFtZSAqLwogICAgIGludCBuX25hbWU7Ci0gICAgeG1sQ2hhciAqIHByZWZpeDI7IC8qIHRoZSBzZWNvbmQgcHJlZml4IG9mIHRoZSB1c2VyZGF0YSAqLworICAgIHhtbENoYXIgKiBwcmVmaXgyOyAvKiBzZWNvbmQgcHJlZml4ICovCiAgICAgaW50IG5fcHJlZml4MjsKLSAgICB4bWxDaGFyICogbmFtZTI7IC8qIGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCisgICAgeG1sQ2hhciAqIG5hbWUyOyAvKiBzZWNvbmQgbG9jYWwgbmFtZSAqLwogICAgIGludCBuX25hbWUyOwotICAgIHhtbENoYXIgKiBwcmVmaXgzOyAvKiB0aGUgdGhpcmQgcHJlZml4IG9mIHRoZSB1c2VyZGF0YSAqLworICAgIHhtbENoYXIgKiBwcmVmaXgzOyAvKiB0aGlyZCBwcmVmaXggKi8KICAgICBpbnQgbl9wcmVmaXgzOwotICAgIHhtbENoYXIgKiBuYW1lMzsgLyogYSB0aGlyZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLworICAgIHhtbENoYXIgKiBuYW1lMzsgLyogdGhpcmQgbG9jYWwgbmFtZSAqLwogICAgIGludCBuX25hbWUzOwogCi0gICAgZm9yIChuX3RhYmxlID0gMDtuX3RhYmxlIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX3RhYmxlKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgewogICAgIGZvciAobl9wcmVmaXggPSAwO25fcHJlZml4IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fcHJlZml4KyspIHsKICAgICBmb3IgKG5fbmFtZSA9IDA7bl9uYW1lIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fbmFtZSsrKSB7CiAgICAgZm9yIChuX3ByZWZpeDIgPSAwO25fcHJlZml4MiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX3ByZWZpeDIrKykgewpAQCAtMTAxMzQsNyArMTAyNzAsNyBAQAogICAgIGZvciAobl9wcmVmaXgzID0gMDtuX3ByZWZpeDMgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9wcmVmaXgzKyspIHsKICAgICBmb3IgKG5fbmFtZTMgPSAwO25fbmFtZTMgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lMysrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKICAgICAgICAgcHJlZml4ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fcHJlZml4LCAxKTsKICAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDIpOwogICAgICAgICBwcmVmaXgyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fcHJlZml4MiwgMyk7CkBAIC0xMDE0MiwxMCArMTAyNzgsMTAgQEAKICAgICAgICAgcHJlZml4MyA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX3ByZWZpeDMsIDUpOwogICAgICAgICBuYW1lMyA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUzLCA2KTsKIAotICAgICAgICByZXRfdmFsID0geG1sSGFzaFFMb29rdXAzKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeCwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeDIsIChjb25zdCB4bWxDaGFyICopbmFtZTIsIChjb25zdCB4bWxDaGFyICopcHJlZml4MywgKGNvbnN0IHhtbENoYXIgKiluYW1lMyk7CisgICAgICAgIHJldF92YWwgPSB4bWxIYXNoUUxvb2t1cDMoaGFzaCwgKGNvbnN0IHhtbENoYXIgKilwcmVmaXgsIChjb25zdCB4bWxDaGFyICopbmFtZSwgKGNvbnN0IHhtbENoYXIgKilwcmVmaXgyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeDMsIChjb25zdCB4bWxDaGFyICopbmFtZTMpOwogICAgICAgICBkZXNyZXRfdm9pZF9wdHIocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7CisgICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl9oYXNoLCBoYXNoLCAwKTsKICAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fcHJlZml4LCAoY29uc3QgeG1sQ2hhciAqKXByZWZpeCwgMSk7CiAgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMik7CiAgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX3ByZWZpeDIsIChjb25zdCB4bWxDaGFyICopcHJlZml4MiwgMyk7CkBAIC0xMDE1Nyw3ICsxMDI5Myw3IEBACiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbEhhc2hRTG9va3VwMyIsCiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl90YWJsZSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5faGFzaCk7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fcHJlZml4KTsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9wcmVmaXgyKTsKQEAgLTEwMTg1LDM1ICsxMDMyMSwzNSBAQAogCiAgICAgaW50IG1lbV9iYXNlOwogICAgIGludCByZXRfdmFsOwotICAgIHhtbEhhc2hUYWJsZVB0ciB0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi8KLSAgICBpbnQgbl90YWJsZTsKLSAgICB4bWxDaGFyICogbmFtZTsgLyogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTsKLSAgICB4bWxIYXNoRGVhbGxvY2F0b3IgZjsgLyogdGhlIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZW1vdmVkIGl0ZW0gKGlmIGFueSkgKi8KLSAgICBpbnQgbl9mOworICAgIHhtbEhhc2hUYWJsZVB0ciBoYXNoOyAvKiBoYXNoIHRhYmxlICovCisgICAgaW50IG5faGFzaDsKKyAgICB4bWxDaGFyICoga2V5OyAvKiBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5OworICAgIHhtbEhhc2hEZWFsbG9jYXRvciBkZWFsbG9jOyAvKiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIG9yIE5VTEwgKi8KKyAgICBpbnQgbl9kZWFsbG9jOwogCi0gICAgZm9yIChuX3RhYmxlID0gMDtuX3RhYmxlIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX3RhYmxlKyspIHsKLSAgICBmb3IgKG5fbmFtZSA9IDA7bl9uYW1lIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fbmFtZSsrKSB7Ci0gICAgZm9yIChuX2YgPSAwO25fZiA8IGdlbl9uYl94bWxIYXNoRGVhbGxvY2F0b3I7bl9mKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fZGVhbGxvYyA9IDA7bl9kZWFsbG9jIDwgZ2VuX25iX3htbEhhc2hEZWFsbG9jYXRvcjtuX2RlYWxsb2MrKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotICAgICAgICB0YWJsZSA9IGdlbl94bWxIYXNoVGFibGVQdHIobl90YWJsZSwgMCk7Ci0gICAgICAgIG5hbWUgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAxKTsKLSAgICAgICAgZiA9IGdlbl94bWxIYXNoRGVhbGxvY2F0b3Iobl9mLCAyKTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKKyAgICAgICAga2V5ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5LCAxKTsKKyAgICAgICAgZGVhbGxvYyA9IGdlbl94bWxIYXNoRGVhbGxvY2F0b3Iobl9kZWFsbG9jLCAyKTsKIAotICAgICAgICByZXRfdmFsID0geG1sSGFzaFJlbW92ZUVudHJ5KHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIGYpOworICAgICAgICByZXRfdmFsID0geG1sSGFzaFJlbW92ZUVudHJ5KGhhc2gsIChjb25zdCB4bWxDaGFyICopa2V5LCBkZWFsbG9jKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKICAgICAgICAgY2FsbF90ZXN0cysrOwotICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5fdGFibGUsIHRhYmxlLCAwKTsKLSAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAxKTsKLSAgICAgICAgZGVzX3htbEhhc2hEZWFsbG9jYXRvcihuX2YsIGYsIDIpOworICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgaGFzaCwgMCk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleSwgKGNvbnN0IHhtbENoYXIgKilrZXksIDEpOworICAgICAgICBkZXNfeG1sSGFzaERlYWxsb2NhdG9yKG5fZGVhbGxvYywgZGVhbGxvYywgMik7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoUmVtb3ZlRW50cnkiLAogCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CiAJICAgIHRlc3RfcmV0Kys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdGFibGUpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX25hbWUpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2YpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZGVhbGxvYyk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDIzMSw0MSArMTAzNjcsNDEgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICBpbnQgcmV0X3ZhbDsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovCi0gICAgaW50IG5fdGFibGU7Ci0gICAgeG1sQ2hhciAqIG5hbWU7IC8qIHRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX25hbWU7Ci0gICAgeG1sQ2hhciAqIG5hbWUyOyAvKiBhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX25hbWUyOwotICAgIHhtbEhhc2hEZWFsbG9jYXRvciBmOyAvKiB0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSAoaWYgYW55KSAqLwotICAgIGludCBuX2Y7CisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7IC8qIGhhc2ggdGFibGUgKi8KKyAgICBpbnQgbl9oYXNoOworICAgIHhtbENoYXIgKiBrZXk7IC8qIGZpcnN0IHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXk7CisgICAgeG1sQ2hhciAqIGtleTI7IC8qIHNlY29uZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MjsKKyAgICB4bWxIYXNoRGVhbGxvY2F0b3IgZGVhbGxvYzsgLyogZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSBvciBOVUxMICovCisgICAgaW50IG5fZGVhbGxvYzsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl9uYW1lMiA9IDA7bl9uYW1lMiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUyKyspIHsKLSAgICBmb3IgKG5fZiA9IDA7bl9mIDwgZ2VuX25iX3htbEhhc2hEZWFsbG9jYXRvcjtuX2YrKykgeworICAgIGZvciAobl9oYXNoID0gMDtuX2hhc2ggPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25faGFzaCsrKSB7CisgICAgZm9yIChuX2tleSA9IDA7bl9rZXkgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9rZXkrKykgeworICAgIGZvciAobl9rZXkyID0gMDtuX2tleTIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9rZXkyKyspIHsKKyAgICBmb3IgKG5fZGVhbGxvYyA9IDA7bl9kZWFsbG9jIDwgZ2VuX25iX3htbEhhc2hEZWFsbG9jYXRvcjtuX2RlYWxsb2MrKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotICAgICAgICB0YWJsZSA9IGdlbl94bWxIYXNoVGFibGVQdHIobl90YWJsZSwgMCk7Ci0gICAgICAgIG5hbWUgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAxKTsKLSAgICAgICAgbmFtZTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lMiwgMik7Ci0gICAgICAgIGYgPSBnZW5feG1sSGFzaERlYWxsb2NhdG9yKG5fZiwgMyk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CisgICAgICAgIGtleTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAyKTsKKyAgICAgICAgZGVhbGxvYyA9IGdlbl94bWxIYXNoRGVhbGxvY2F0b3Iobl9kZWFsbG9jLCAzKTsKIAotICAgICAgICByZXRfdmFsID0geG1sSGFzaFJlbW92ZUVudHJ5Mih0YWJsZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCBmKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hSZW1vdmVFbnRyeTIoaGFzaCwgKGNvbnN0IHhtbENoYXIgKilrZXksIChjb25zdCB4bWxDaGFyICopa2V5MiwgZGVhbGxvYyk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAyKTsKLSAgICAgICAgZGVzX3htbEhhc2hEZWFsbG9jYXRvcihuX2YsIGYsIDMpOworICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgaGFzaCwgMCk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleSwgKGNvbnN0IHhtbENoYXIgKilrZXksIDEpOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAoY29uc3QgeG1sQ2hhciAqKWtleTIsIDIpOworICAgICAgICBkZXNfeG1sSGFzaERlYWxsb2NhdG9yKG5fZGVhbGxvYywgZGVhbGxvYywgMyk7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoUmVtb3ZlRW50cnkyIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZik7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5faGFzaCk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5KTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9rZXkyKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9kZWFsbG9jKTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwMjg0LDQ3ICsxMDQyMCw0NyBAQAogCiAgICAgaW50IG1lbV9iYXNlOwogICAgIGludCByZXRfdmFsOwotICAgIHhtbEhhc2hUYWJsZVB0ciB0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi8KLSAgICBpbnQgbl90YWJsZTsKLSAgICB4bWxDaGFyICogbmFtZTsgLyogdGhlIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTsKLSAgICB4bWxDaGFyICogbmFtZTI7IC8qIGEgc2Vjb25kIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTI7Ci0gICAgeG1sQ2hhciAqIG5hbWUzOyAvKiBhIHRoaXJkIG5hbWUgb2YgdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fbmFtZTM7Ci0gICAgeG1sSGFzaERlYWxsb2NhdG9yIGY7IC8qIHRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVtb3ZlZCBpdGVtIChpZiBhbnkpICovCi0gICAgaW50IG5fZjsKKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsgLyogaGFzaCB0YWJsZSAqLworICAgIGludCBuX2hhc2g7CisgICAgeG1sQ2hhciAqIGtleTsgLyogZmlyc3Qgc3RyaW5nIGtleSAqLworICAgIGludCBuX2tleTsKKyAgICB4bWxDaGFyICoga2V5MjsgLyogc2Vjb25kIHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXkyOworICAgIHhtbENoYXIgKiBrZXkzOyAvKiB0aGlyZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MzsKKyAgICB4bWxIYXNoRGVhbGxvY2F0b3IgZGVhbGxvYzsgLyogZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlbW92ZWQgaXRlbSBvciBOVUxMICovCisgICAgaW50IG5fZGVhbGxvYzsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl9uYW1lMiA9IDA7bl9uYW1lMiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUyKyspIHsKLSAgICBmb3IgKG5fbmFtZTMgPSAwO25fbmFtZTMgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9uYW1lMysrKSB7Ci0gICAgZm9yIChuX2YgPSAwO25fZiA8IGdlbl9uYl94bWxIYXNoRGVhbGxvY2F0b3I7bl9mKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fa2V5MiA9IDA7bl9rZXkyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5MisrKSB7CisgICAgZm9yIChuX2tleTMgPSAwO25fa2V5MyA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleTMrKykgeworICAgIGZvciAobl9kZWFsbG9jID0gMDtuX2RlYWxsb2MgPCBnZW5fbmJfeG1sSGFzaERlYWxsb2NhdG9yO25fZGVhbGxvYysrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKLSAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDEpOwotICAgICAgICBuYW1lMiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAyKTsKLSAgICAgICAgbmFtZTMgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lMywgMyk7Ci0gICAgICAgIGYgPSBnZW5feG1sSGFzaERlYWxsb2NhdG9yKG5fZiwgNCk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CisgICAgICAgIGtleTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAyKTsKKyAgICAgICAga2V5MyA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleTMsIDMpOworICAgICAgICBkZWFsbG9jID0gZ2VuX3htbEhhc2hEZWFsbG9jYXRvcihuX2RlYWxsb2MsIDQpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoUmVtb3ZlRW50cnkzKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZTIsIChjb25zdCB4bWxDaGFyICopbmFtZTMsIGYpOworICAgICAgICByZXRfdmFsID0geG1sSGFzaFJlbW92ZUVudHJ5MyhoYXNoLCAoY29uc3QgeG1sQ2hhciAqKWtleSwgKGNvbnN0IHhtbENoYXIgKilrZXkyLCAoY29uc3QgeG1sQ2hhciAqKWtleTMsIGRlYWxsb2MpOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7Ci0gICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl90YWJsZSwgdGFibGUsIDApOwotICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIDEpOwotICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lMiwgKGNvbnN0IHhtbENoYXIgKiluYW1lMiwgMik7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUzLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUzLCAzKTsKLSAgICAgICAgZGVzX3htbEhhc2hEZWFsbG9jYXRvcihuX2YsIGYsIDQpOworICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgaGFzaCwgMCk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleSwgKGNvbnN0IHhtbENoYXIgKilrZXksIDEpOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAoY29uc3QgeG1sQ2hhciAqKWtleTIsIDIpOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkzLCAoY29uc3QgeG1sQ2hhciAqKWtleTMsIDMpOworICAgICAgICBkZXNfeG1sSGFzaERlYWxsb2NhdG9yKG5fZGVhbGxvYywgZGVhbGxvYywgNCk7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoUmVtb3ZlRW50cnkzIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZTMpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2YpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5Mik7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fa2V5Myk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZGVhbGxvYyk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDM4NCwyMyArMTA1MjAsMjMgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICBpbnQgcmV0X3ZhbDsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovCi0gICAgaW50IG5fdGFibGU7CisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7IC8qIGhhc2ggdGFibGUgKi8KKyAgICBpbnQgbl9oYXNoOwogCi0gICAgZm9yIChuX3RhYmxlID0gMDtuX3RhYmxlIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX3RhYmxlKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotICAgICAgICB0YWJsZSA9IGdlbl94bWxIYXNoVGFibGVQdHIobl90YWJsZSwgMCk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CiAKLSAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hTaXplKHRhYmxlKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hTaXplKGhhc2gpOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7Ci0gICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl90YWJsZSwgdGFibGUsIDApOworICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgaGFzaCwgMCk7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoU2l6ZSIsCiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl90YWJsZSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5faGFzaCk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQxNiw0MSArMTA1NTIsNDEgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICBpbnQgcmV0X3ZhbDsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovCi0gICAgaW50IG5fdGFibGU7Ci0gICAgeG1sQ2hhciAqIG5hbWU7IC8qIHRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX25hbWU7Ci0gICAgdm9pZCAqIHVzZXJkYXRhOyAvKiBhIHBvaW50ZXIgdG8gdGhlIHVzZXJkYXRhICovCi0gICAgaW50IG5fdXNlcmRhdGE7Ci0gICAgeG1sSGFzaERlYWxsb2NhdG9yIGY7IC8qIHRoZSBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSAoaWYgYW55KSAqLwotICAgIGludCBuX2Y7CisgICAgeG1sSGFzaFRhYmxlUHRyIGhhc2g7IC8qIGhhc2ggdGFibGUgKi8KKyAgICBpbnQgbl9oYXNoOworICAgIHhtbENoYXIgKiBrZXk7IC8qIHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXk7CisgICAgdm9pZCAqIHBheWxvYWQ7IC8qIHBvaW50ZXIgdG8gdGhlIHBheWxvYWQgKi8KKyAgICBpbnQgbl9wYXlsb2FkOworICAgIHhtbEhhc2hEZWFsbG9jYXRvciBkZWFsbG9jOyAvKiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSBvciBOVUxMICovCisgICAgaW50IG5fZGVhbGxvYzsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl91c2VyZGF0YSA9IDA7bl91c2VyZGF0YSA8IGdlbl9uYl91c2VyZGF0YTtuX3VzZXJkYXRhKyspIHsKLSAgICBmb3IgKG5fZiA9IDA7bl9mIDwgZ2VuX25iX3htbEhhc2hEZWFsbG9jYXRvcjtuX2YrKykgeworICAgIGZvciAobl9oYXNoID0gMDtuX2hhc2ggPCBnZW5fbmJfeG1sSGFzaFRhYmxlUHRyO25faGFzaCsrKSB7CisgICAgZm9yIChuX2tleSA9IDA7bl9rZXkgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9rZXkrKykgeworICAgIGZvciAobl9wYXlsb2FkID0gMDtuX3BheWxvYWQgPCBnZW5fbmJfdm9pZF9wdHI7bl9wYXlsb2FkKyspIHsKKyAgICBmb3IgKG5fZGVhbGxvYyA9IDA7bl9kZWFsbG9jIDwgZ2VuX25iX3htbEhhc2hEZWFsbG9jYXRvcjtuX2RlYWxsb2MrKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotICAgICAgICB0YWJsZSA9IGdlbl94bWxIYXNoVGFibGVQdHIobl90YWJsZSwgMCk7Ci0gICAgICAgIG5hbWUgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAxKTsKLSAgICAgICAgdXNlcmRhdGEgPSBnZW5fdXNlcmRhdGEobl91c2VyZGF0YSwgMik7Ci0gICAgICAgIGYgPSBnZW5feG1sSGFzaERlYWxsb2NhdG9yKG5fZiwgMyk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CisgICAgICAgIHBheWxvYWQgPSBnZW5fdm9pZF9wdHIobl9wYXlsb2FkLCAyKTsKKyAgICAgICAgZGVhbGxvYyA9IGdlbl94bWxIYXNoRGVhbGxvY2F0b3Iobl9kZWFsbG9jLCAzKTsKIAotICAgICAgICByZXRfdmFsID0geG1sSGFzaFVwZGF0ZUVudHJ5KHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIHVzZXJkYXRhLCBmKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hVcGRhdGVFbnRyeShoYXNoLCAoY29uc3QgeG1sQ2hhciAqKWtleSwgcGF5bG9hZCwgZGVhbGxvYyk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7Ci0gICAgICAgIGRlc191c2VyZGF0YShuX3VzZXJkYXRhLCB1c2VyZGF0YSwgMik7Ci0gICAgICAgIGRlc194bWxIYXNoRGVhbGxvY2F0b3Iobl9mLCBmLCAzKTsKKyAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX2hhc2gsIGhhc2gsIDApOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXksIChjb25zdCB4bWxDaGFyICopa2V5LCAxKTsKKyAgICAgICAgZGVzX3ZvaWRfcHRyKG5fcGF5bG9hZCwgcGF5bG9hZCwgMik7CisgICAgICAgIGRlc194bWxIYXNoRGVhbGxvY2F0b3Iobl9kZWFsbG9jLCBkZWFsbG9jLCAzKTsKICAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbEhhc2hVcGRhdGVFbnRyeSIsCiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl90YWJsZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdXNlcmRhdGEpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2YpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2hhc2gpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleSk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fcGF5bG9hZCk7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZGVhbGxvYyk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQ2OSw0NyArMTA2MDUsNDcgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICBpbnQgcmV0X3ZhbDsKLSAgICB4bWxIYXNoVGFibGVQdHIgdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovCi0gICAgaW50IG5fdGFibGU7Ci0gICAgeG1sQ2hhciAqIG5hbWU7IC8qIHRoZSBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX25hbWU7Ci0gICAgeG1sQ2hhciAqIG5hbWUyOyAvKiBhIHNlY29uZCBuYW1lIG9mIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX25hbWUyOwotICAgIHZvaWQgKiB1c2VyZGF0YTsgLyogYSBwb2ludGVyIHRvIHRoZSB1c2VyZGF0YSAqLwotICAgIGludCBuX3VzZXJkYXRhOwotICAgIHhtbEhhc2hEZWFsbG9jYXRvciBmOyAvKiB0aGUgZGVhbGxvY2F0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2VkIGl0ZW0gKGlmIGFueSkgKi8KLSAgICBpbnQgbl9mOworICAgIHhtbEhhc2hUYWJsZVB0ciBoYXNoOyAvKiBoYXNoIHRhYmxlICovCisgICAgaW50IG5faGFzaDsKKyAgICB4bWxDaGFyICoga2V5OyAvKiBmaXJzdCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5OworICAgIHhtbENoYXIgKiBrZXkyOyAvKiBzZWNvbmQgc3RyaW5nIGtleSAqLworICAgIGludCBuX2tleTI7CisgICAgdm9pZCAqIHBheWxvYWQ7IC8qIHBvaW50ZXIgdG8gdGhlIHBheWxvYWQgKi8KKyAgICBpbnQgbl9wYXlsb2FkOworICAgIHhtbEhhc2hEZWFsbG9jYXRvciBkZWFsbG9jOyAvKiBkZWFsbG9jYXRvciBmdW5jdGlvbiBmb3IgcmVwbGFjZWQgaXRlbSBvciBOVUxMICovCisgICAgaW50IG5fZGVhbGxvYzsKIAotICAgIGZvciAobl90YWJsZSA9IDA7bl90YWJsZSA8IGdlbl9uYl94bWxIYXNoVGFibGVQdHI7bl90YWJsZSsrKSB7Ci0gICAgZm9yIChuX25hbWUgPSAwO25fbmFtZSA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUrKykgewotICAgIGZvciAobl9uYW1lMiA9IDA7bl9uYW1lMiA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUyKyspIHsKLSAgICBmb3IgKG5fdXNlcmRhdGEgPSAwO25fdXNlcmRhdGEgPCBnZW5fbmJfdXNlcmRhdGE7bl91c2VyZGF0YSsrKSB7Ci0gICAgZm9yIChuX2YgPSAwO25fZiA8IGdlbl9uYl94bWxIYXNoRGVhbGxvY2F0b3I7bl9mKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fa2V5MiA9IDA7bl9rZXkyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5MisrKSB7CisgICAgZm9yIChuX3BheWxvYWQgPSAwO25fcGF5bG9hZCA8IGdlbl9uYl92b2lkX3B0cjtuX3BheWxvYWQrKykgeworICAgIGZvciAobl9kZWFsbG9jID0gMDtuX2RlYWxsb2MgPCBnZW5fbmJfeG1sSGFzaERlYWxsb2NhdG9yO25fZGVhbGxvYysrKSB7CiAgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIHRhYmxlID0gZ2VuX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCAwKTsKLSAgICAgICAgbmFtZSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIDEpOwotICAgICAgICBuYW1lMiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAyKTsKLSAgICAgICAgdXNlcmRhdGEgPSBnZW5fdXNlcmRhdGEobl91c2VyZGF0YSwgMyk7Ci0gICAgICAgIGYgPSBnZW5feG1sSGFzaERlYWxsb2NhdG9yKG5fZiwgNCk7CisgICAgICAgIGhhc2ggPSBnZW5feG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgMCk7CisgICAgICAgIGtleSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleSwgMSk7CisgICAgICAgIGtleTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAyKTsKKyAgICAgICAgcGF5bG9hZCA9IGdlbl92b2lkX3B0cihuX3BheWxvYWQsIDMpOworICAgICAgICBkZWFsbG9jID0gZ2VuX3htbEhhc2hEZWFsbG9jYXRvcihuX2RlYWxsb2MsIDQpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxIYXNoVXBkYXRlRW50cnkyKHRhYmxlLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZTIsIHVzZXJkYXRhLCBmKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEhhc2hVcGRhdGVFbnRyeTIoaGFzaCwgKGNvbnN0IHhtbENoYXIgKilrZXksIChjb25zdCB4bWxDaGFyICopa2V5MiwgcGF5bG9hZCwgZGVhbGxvYyk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAyKTsKLSAgICAgICAgZGVzX3VzZXJkYXRhKG5fdXNlcmRhdGEsIHVzZXJkYXRhLCAzKTsKLSAgICAgICAgZGVzX3htbEhhc2hEZWFsbG9jYXRvcihuX2YsIGYsIDQpOworICAgICAgICBkZXNfeG1sSGFzaFRhYmxlUHRyKG5faGFzaCwgaGFzaCwgMCk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleSwgKGNvbnN0IHhtbENoYXIgKilrZXksIDEpOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9rZXkyLCAoY29uc3QgeG1sQ2hhciAqKWtleTIsIDIpOworICAgICAgICBkZXNfdm9pZF9wdHIobl9wYXlsb2FkLCBwYXlsb2FkLCAzKTsKKyAgICAgICAgZGVzX3htbEhhc2hEZWFsbG9jYXRvcihuX2RlYWxsb2MsIGRlYWxsb2MsIDQpOwogICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKICAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sSGFzaFVwZGF0ZUVudHJ5MiIsCiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl90YWJsZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZTIpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3VzZXJkYXRhKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9mKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9oYXNoKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9rZXkpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleTIpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3BheWxvYWQpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2RlYWxsb2MpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA1MjksNTMgKzEwNjY1LDUzIEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgaW50IHJldF92YWw7Ci0gICAgeG1sSGFzaFRhYmxlUHRyIHRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwotICAgIGludCBuX3RhYmxlOwotICAgIHhtbENoYXIgKiBuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lOwotICAgIHhtbENoYXIgKiBuYW1lMjsgLyogYSBzZWNvbmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lMjsKLSAgICB4bWxDaGFyICogbmFtZTM7IC8qIGEgdGhpcmQgbmFtZSBvZiB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl9uYW1lMzsKLSAgICB2b2lkICogdXNlcmRhdGE7IC8qIGEgcG9pbnRlciB0byB0aGUgdXNlcmRhdGEgKi8KLSAgICBpbnQgbl91c2VyZGF0YTsKLSAgICB4bWxIYXNoRGVhbGxvY2F0b3IgZjsgLyogdGhlIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZXBsYWNlZCBpdGVtIChpZiBhbnkpICovCi0gICAgaW50IG5fZjsKKyAgICB4bWxIYXNoVGFibGVQdHIgaGFzaDsgLyogaGFzaCB0YWJsZSAqLworICAgIGludCBuX2hhc2g7CisgICAgeG1sQ2hhciAqIGtleTsgLyogZmlyc3Qgc3RyaW5nIGtleSAqLworICAgIGludCBuX2tleTsKKyAgICB4bWxDaGFyICoga2V5MjsgLyogc2Vjb25kIHN0cmluZyBrZXkgKi8KKyAgICBpbnQgbl9rZXkyOworICAgIHhtbENoYXIgKiBrZXkzOyAvKiB0aGlyZCBzdHJpbmcga2V5ICovCisgICAgaW50IG5fa2V5MzsKKyAgICB2b2lkICogcGF5bG9hZDsgLyogcG9pbnRlciB0byB0aGUgcGF5bG9hZCAqLworICAgIGludCBuX3BheWxvYWQ7CisgICAgeG1sSGFzaERlYWxsb2NhdG9yIGRlYWxsb2M7IC8qIGRlYWxsb2NhdG9yIGZ1bmN0aW9uIGZvciByZXBsYWNlZCBpdGVtIG9yIE5VTEwgKi8KKyAgICBpbnQgbl9kZWFsbG9jOwogCi0gICAgZm9yIChuX3RhYmxlID0gMDtuX3RhYmxlIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX3RhYmxlKyspIHsKLSAgICBmb3IgKG5fbmFtZSA9IDA7bl9uYW1lIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fbmFtZSsrKSB7Ci0gICAgZm9yIChuX25hbWUyID0gMDtuX25hbWUyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fbmFtZTIrKykgewotICAgIGZvciAobl9uYW1lMyA9IDA7bl9uYW1lMyA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX25hbWUzKyspIHsKLSAgICBmb3IgKG5fdXNlcmRhdGEgPSAwO25fdXNlcmRhdGEgPCBnZW5fbmJfdXNlcmRhdGE7bl91c2VyZGF0YSsrKSB7Ci0gICAgZm9yIChuX2YgPSAwO25fZiA8IGdlbl9uYl94bWxIYXNoRGVhbGxvY2F0b3I7bl9mKyspIHsKKyAgICBmb3IgKG5faGFzaCA9IDA7bl9oYXNoIDwgZ2VuX25iX3htbEhhc2hUYWJsZVB0cjtuX2hhc2grKykgeworICAgIGZvciAobl9rZXkgPSAwO25fa2V5IDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5KyspIHsKKyAgICBmb3IgKG5fa2V5MiA9IDA7bl9rZXkyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fa2V5MisrKSB7CisgICAgZm9yIChuX2tleTMgPSAwO25fa2V5MyA8IGdlbl9uYl9jb25zdF94bWxDaGFyX3B0cjtuX2tleTMrKykgeworICAgIGZvciAobl9wYXlsb2FkID0gMDtuX3BheWxvYWQgPCBnZW5fbmJfdm9pZF9wdHI7bl9wYXlsb2FkKyspIHsKKyAgICBmb3IgKG5fZGVhbGxvYyA9IDA7bl9kZWFsbG9jIDwgZ2VuX25iX3htbEhhc2hEZWFsbG9jYXRvcjtuX2RlYWxsb2MrKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotICAgICAgICB0YWJsZSA9IGdlbl94bWxIYXNoVGFibGVQdHIobl90YWJsZSwgMCk7Ci0gICAgICAgIG5hbWUgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lLCAxKTsKLSAgICAgICAgbmFtZTIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9uYW1lMiwgMik7Ci0gICAgICAgIG5hbWUzID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZTMsIDMpOwotICAgICAgICB1c2VyZGF0YSA9IGdlbl91c2VyZGF0YShuX3VzZXJkYXRhLCA0KTsKLSAgICAgICAgZiA9IGdlbl94bWxIYXNoRGVhbGxvY2F0b3Iobl9mLCA1KTsKKyAgICAgICAgaGFzaCA9IGdlbl94bWxIYXNoVGFibGVQdHIobl9oYXNoLCAwKTsKKyAgICAgICAga2V5ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5LCAxKTsKKyAgICAgICAga2V5MiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2tleTIsIDIpOworICAgICAgICBrZXkzID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5MywgMyk7CisgICAgICAgIHBheWxvYWQgPSBnZW5fdm9pZF9wdHIobl9wYXlsb2FkLCA0KTsKKyAgICAgICAgZGVhbGxvYyA9IGdlbl94bWxIYXNoRGVhbGxvY2F0b3Iobl9kZWFsbG9jLCA1KTsKIAotICAgICAgICByZXRfdmFsID0geG1sSGFzaFVwZGF0ZUVudHJ5Myh0YWJsZSwgKGNvbnN0IHhtbENoYXIgKiluYW1lLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUzLCB1c2VyZGF0YSwgZik7CisgICAgICAgIHJldF92YWwgPSB4bWxIYXNoVXBkYXRlRW50cnkzKGhhc2gsIChjb25zdCB4bWxDaGFyICopa2V5LCAoY29uc3QgeG1sQ2hhciAqKWtleTIsIChjb25zdCB4bWxDaGFyICopa2V5MywgcGF5bG9hZCwgZGVhbGxvYyk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX3htbEhhc2hUYWJsZVB0cihuX3RhYmxlLCB0YWJsZSwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUsIChjb25zdCB4bWxDaGFyICopbmFtZSwgMSk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX25hbWUyLCAoY29uc3QgeG1sQ2hhciAqKW5hbWUyLCAyKTsKLSAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fbmFtZTMsIChjb25zdCB4bWxDaGFyICopbmFtZTMsIDMpOwotICAgICAgICBkZXNfdXNlcmRhdGEobl91c2VyZGF0YSwgdXNlcmRhdGEsIDQpOwotICAgICAgICBkZXNfeG1sSGFzaERlYWxsb2NhdG9yKG5fZiwgZiwgNSk7CisgICAgICAgIGRlc194bWxIYXNoVGFibGVQdHIobl9oYXNoLCBoYXNoLCAwKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fa2V5LCAoY29uc3QgeG1sQ2hhciAqKWtleSwgMSk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleTIsIChjb25zdCB4bWxDaGFyICopa2V5MiwgMik7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2tleTMsIChjb25zdCB4bWxDaGFyICopa2V5MywgMyk7CisgICAgICAgIGRlc192b2lkX3B0cihuX3BheWxvYWQsIHBheWxvYWQsIDQpOworICAgICAgICBkZXNfeG1sSGFzaERlYWxsb2NhdG9yKG5fZGVhbGxvYywgZGVhbGxvYywgNSk7CiAgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CiAgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewogICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxIYXNoVXBkYXRlRW50cnkzIiwKIAkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwogCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3RhYmxlKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9uYW1lMik7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fbmFtZTMpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3VzZXJkYXRhKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9mKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9oYXNoKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9rZXkpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleTIpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2tleTMpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3BheWxvYWQpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2RlYWxsb2MpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIwMDUsMjMgKzEyMTQxLDIzIEBACiAKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciByZXRfdmFsOwotICAgIHhtbENoYXIgKiBjdXI7IC8qIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB4bWxDaGFyICovCi0gICAgaW50IG5fY3VyOworICAgIHhtbENoYXIgKiBzdHI7IC8qIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB4bWxDaGFyICovCisgICAgaW50IG5fc3RyOwogCi0gICAgZm9yIChuX2N1ciA9IDA7bl9jdXIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9jdXIrKykgeworICAgIGZvciAobl9zdHIgPSAwO25fc3RyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fc3RyKyspIHsKICAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKLSAgICAgICAgY3VyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fY3VyLCAwKTsKKyAgICAgICAgc3RyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fc3RyLCAwKTsKIAotICAgICAgICByZXRfdmFsID0geG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCgoY29uc3QgeG1sQ2hhciAqKWN1cik7CisgICAgICAgIHJldF92YWwgPSB4bWxDcmVhdGVEb2NQYXJzZXJDdHh0KChjb25zdCB4bWxDaGFyICopc3RyKTsKICAgICAgICAgZGVzcmV0X3htbFBhcnNlckN0eHRQdHIocmV0X3ZhbCk7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX2NvbnN0X3htbENoYXJfcHRyKG5fY3VyLCAoY29uc3QgeG1sQ2hhciAqKWN1ciwgMCk7CisgICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX3N0ciwgKGNvbnN0IHhtbENoYXIgKilzdHIsIDApOwogICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKICAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCIsCiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9jdXIpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3N0cik7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjA2MSw4ICsxMjE5Nyw4IEBACiAgICAgICAgIHNpemUgPSBnZW5faW50KG5fc2l6ZSwgMyk7CiAgICAgICAgIGZpbGVuYW1lID0gZ2VuX2ZpbGVvdXRwdXQobl9maWxlbmFtZSwgNCk7CiAgICAgICAgIGlmICgoY2h1bmsgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGNodW5rKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBjaHVuaykpKQorICAgICAgICAgICAgc2l6ZSA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KHNheCwgdXNlcl9kYXRhLCAoY29uc3QgY2hhciAqKWNodW5rLCBzaXplLCBmaWxlbmFtZSk7CiAgICAgICAgIGRlc3JldF94bWxQYXJzZXJDdHh0UHRyKHJldF92YWwpOwpAQCAtMTIxMDQsOCArMTIyNDAsOCBAQAogICAgIHhtbERvY1B0ciByZXRfdmFsOwogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsgLyogYW4gWE1MIHBhcnNlciBjb250ZXh0ICovCiAgICAgaW50IG5fY3R4dDsKLSAgICB4bWxDaGFyICogY3VyOyAvKiBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nICovCi0gICAgaW50IG5fY3VyOworICAgIHhtbENoYXIgKiBzdHI7IC8qIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgKi8KKyAgICBpbnQgbl9zdHI7CiAgICAgY29uc3QgY2hhciAqIFVSTDsgLyogdGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgdGhlIGRvY3VtZW50ICovCiAgICAgaW50IG5fVVJMOwogICAgIGNoYXIgKiBlbmNvZGluZzsgLyogdGhlIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMICovCkBAIC0xMjExNCwyMiArMTIyNTAsMjIgQEAKICAgICBpbnQgbl9vcHRpb25zOwogCiAgICAgZm9yIChuX2N0eHQgPSAwO25fY3R4dCA8IGdlbl9uYl94bWxQYXJzZXJDdHh0UHRyO25fY3R4dCsrKSB7Ci0gICAgZm9yIChuX2N1ciA9IDA7bl9jdXIgPCBnZW5fbmJfY29uc3RfeG1sQ2hhcl9wdHI7bl9jdXIrKykgeworICAgIGZvciAobl9zdHIgPSAwO25fc3RyIDwgZ2VuX25iX2NvbnN0X3htbENoYXJfcHRyO25fc3RyKyspIHsKICAgICBmb3IgKG5fVVJMID0gMDtuX1VSTCA8IGdlbl9uYl9maWxlcGF0aDtuX1VSTCsrKSB7CiAgICAgZm9yIChuX2VuY29kaW5nID0gMDtuX2VuY29kaW5nIDwgZ2VuX25iX2NvbnN0X2NoYXJfcHRyO25fZW5jb2RpbmcrKykgewogICAgIGZvciAobl9vcHRpb25zID0gMDtuX29wdGlvbnMgPCBnZW5fbmJfcGFyc2Vyb3B0aW9ucztuX29wdGlvbnMrKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwogICAgICAgICBjdHh0ID0gZ2VuX3htbFBhcnNlckN0eHRQdHIobl9jdHh0LCAwKTsKLSAgICAgICAgY3VyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fY3VyLCAxKTsKKyAgICAgICAgc3RyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fc3RyLCAxKTsKICAgICAgICAgVVJMID0gZ2VuX2ZpbGVwYXRoKG5fVVJMLCAyKTsKICAgICAgICAgZW5jb2RpbmcgPSBnZW5fY29uc3RfY2hhcl9wdHIobl9lbmNvZGluZywgMyk7CiAgICAgICAgIG9wdGlvbnMgPSBnZW5fcGFyc2Vyb3B0aW9ucyhuX29wdGlvbnMsIDQpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxDdHh0UmVhZERvYyhjdHh0LCAoY29uc3QgeG1sQ2hhciAqKWN1ciwgVVJMLCAoY29uc3QgY2hhciAqKWVuY29kaW5nLCBvcHRpb25zKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbEN0eHRSZWFkRG9jKGN0eHQsIChjb25zdCB4bWxDaGFyICopc3RyLCBVUkwsIChjb25zdCBjaGFyICopZW5jb2RpbmcsIG9wdGlvbnMpOwogICAgICAgICBkZXNyZXRfeG1sRG9jUHRyKHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7CiAgICAgICAgIGRlc194bWxQYXJzZXJDdHh0UHRyKG5fY3R4dCwgY3R4dCwgMCk7Ci0gICAgICAgIGRlc19jb25zdF94bWxDaGFyX3B0cihuX2N1ciwgKGNvbnN0IHhtbENoYXIgKiljdXIsIDEpOworICAgICAgICBkZXNfY29uc3RfeG1sQ2hhcl9wdHIobl9zdHIsIChjb25zdCB4bWxDaGFyICopc3RyLCAxKTsKICAgICAgICAgZGVzX2ZpbGVwYXRoKG5fVVJMLCBVUkwsIDIpOwogICAgICAgICBkZXNfY29uc3RfY2hhcl9wdHIobl9lbmNvZGluZywgKGNvbnN0IGNoYXIgKillbmNvZGluZywgMyk7CiAgICAgICAgIGRlc19wYXJzZXJvcHRpb25zKG5fb3B0aW9ucywgb3B0aW9ucywgNCk7CkBAIC0xMjEzOSw3ICsxMjI3NSw3IEBACiAJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKIAkgICAgdGVzdF9yZXQrKzsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9jdHh0KTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9jdXIpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3N0cik7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fVVJMKTsKICAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9lbmNvZGluZyk7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fb3B0aW9ucyk7CkBAIC0xMjI0Miw4ICsxMjM3OCw4IEBACiAgICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDQpOwogICAgICAgICBvcHRpb25zID0gZ2VuX3BhcnNlcm9wdGlvbnMobl9vcHRpb25zLCA1KTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sQ3R4dFJlYWRNZW1vcnkoY3R4dCwgKGNvbnN0IGNoYXIgKilidWZmZXIsIHNpemUsIFVSTCwgKGNvbnN0IGNoYXIgKillbmNvZGluZywgb3B0aW9ucyk7CiAgICAgICAgIGRlc3JldF94bWxEb2NQdHIocmV0X3ZhbCk7CkBAIC0xMjMzOCw4ICsxMjQ3NCw4IEBACiAgICAgICAgIGZpbGVuYW1lID0gZ2VuX2ZpbGVwYXRoKG5fZmlsZW5hbWUsIDMpOwogICAgICAgICBlbmNvZGluZyA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2VuY29kaW5nLCA0KTsKICAgICAgICAgaWYgKChjaHVuayAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHNpemUgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgY2h1bmspICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChzaXplID4geG1sU3RybGVuKEJBRF9DQVNUIGNodW5rKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sQ3R4dFJlc2V0UHVzaChjdHh0LCAoY29uc3QgY2hhciAqKWNodW5rLCBzaXplLCBmaWxlbmFtZSwgKGNvbnN0IGNoYXIgKillbmNvZGluZyk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CkBAIC0xMjM3Myw2ICsxMjUwOSwxNiBAQAogCiAKIHN0YXRpYyBpbnQKK3Rlc3RfeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24odm9pZCkgeworICAgIGludCB0ZXN0X3JldCA9IDA7CisKKworICAgIC8qIG1pc3NpbmcgdHlwZSBzdXBwb3J0ICovCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50CiB0ZXN0X3htbEN0eHRVc2VPcHRpb25zKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0xMjc2MCw2ICsxMjkwNiw0OSBAQAogfQogCiAKKyNkZWZpbmUgZ2VuX25iX2NvbnN0X3htbFNBWEhhbmRsZXJfcHRyIDEKKyNkZWZpbmUgZ2VuX2NvbnN0X3htbFNBWEhhbmRsZXJfcHRyKG5vLCBucikgTlVMTAorI2RlZmluZSBkZXNfY29uc3RfeG1sU0FYSGFuZGxlcl9wdHIobm8sIHZhbCwgbnIpCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sTmV3U0FYUGFyc2VyQ3R4dCh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworICAgIGludCBtZW1fYmFzZTsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIHJldF92YWw7CisgICAgeG1sU0FYSGFuZGxlciAqIHNheDsgLyogU0FYIGhhbmRsZXIgKi8KKyAgICBpbnQgbl9zYXg7CisgICAgdm9pZCAqIHVzZXJEYXRhOyAvKiB1c2VyIGRhdGEgKi8KKyAgICBpbnQgbl91c2VyRGF0YTsKKworICAgIGZvciAobl9zYXggPSAwO25fc2F4IDwgZ2VuX25iX2NvbnN0X3htbFNBWEhhbmRsZXJfcHRyO25fc2F4KyspIHsKKyAgICBmb3IgKG5fdXNlckRhdGEgPSAwO25fdXNlckRhdGEgPCBnZW5fbmJfdXNlcmRhdGE7bl91c2VyRGF0YSsrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHNheCA9IGdlbl9jb25zdF94bWxTQVhIYW5kbGVyX3B0cihuX3NheCwgMCk7CisgICAgICAgIHVzZXJEYXRhID0gZ2VuX3VzZXJkYXRhKG5fdXNlckRhdGEsIDEpOworCisgICAgICAgIHJldF92YWwgPSB4bWxOZXdTQVhQYXJzZXJDdHh0KChjb25zdCB4bWxTQVhIYW5kbGVyICopc2F4LCB1c2VyRGF0YSk7CisgICAgICAgIGRlc3JldF94bWxQYXJzZXJDdHh0UHRyKHJldF92YWwpOworICAgICAgICBjYWxsX3Rlc3RzKys7CisgICAgICAgIGRlc19jb25zdF94bWxTQVhIYW5kbGVyX3B0cihuX3NheCwgKGNvbnN0IHhtbFNBWEhhbmRsZXIgKilzYXgsIDApOworICAgICAgICBkZXNfdXNlcmRhdGEobl91c2VyRGF0YSwgdXNlckRhdGEsIDEpOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sTmV3U0FYUGFyc2VyQ3R4dCIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9zYXgpOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3VzZXJEYXRhKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb25fdGVzdHMrKzsKKworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKwogI2RlZmluZSBnZW5fbmJfeG1sTm9kZVB0cl9wdHIgMQogI2RlZmluZSBnZW5feG1sTm9kZVB0cl9wdHIobm8sIG5yKSBOVUxMCiAjZGVmaW5lIGRlc194bWxOb2RlUHRyX3B0cihubywgdmFsLCBucikKQEAgLTEyOTQ5LDggKzEzMTM4LDggQEAKICAgICAgICAgc2l6ZSA9IGdlbl9pbnQobl9zaXplLCAyKTsKICAgICAgICAgdGVybWluYXRlID0gZ2VuX2ludChuX3Rlcm1pbmF0ZSwgMyk7CiAgICAgICAgIGlmICgoY2h1bmsgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGNodW5rKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBjaHVuaykpKQorICAgICAgICAgICAgc2l6ZSA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFBhcnNlQ2h1bmsoY3R4dCwgKGNvbnN0IGNoYXIgKiljaHVuaywgc2l6ZSwgdGVybWluYXRlKTsKICAgICAgICAgaWYgKGN0eHQgIT0gTlVMTCkge3htbEZyZWVEb2MoY3R4dC0+bXlEb2MpOyBjdHh0LT5teURvYyA9IE5VTEw7fQpAQCAtMTM0MDksOCArMTM1OTgsOCBAQAogICAgICAgICBidWZmZXIgPSBnZW5fY29uc3RfY2hhcl9wdHIobl9idWZmZXIsIDApOwogICAgICAgICBzaXplID0gZ2VuX2ludChuX3NpemUsIDEpOwogICAgICAgICBpZiAoKGJ1ZmZlciAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHNpemUgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgYnVmZmVyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBidWZmZXIpKSkKKyAgICAgICAgICAgIHNpemUgPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxQYXJzZU1lbW9yeSgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSk7CiAgICAgICAgIGRlc3JldF94bWxEb2NQdHIocmV0X3ZhbCk7CkBAIC0xMzgwOSw4ICsxMzk5OCw4IEBACiAgICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDMpOwogICAgICAgICBvcHRpb25zID0gZ2VuX3BhcnNlcm9wdGlvbnMobl9vcHRpb25zLCA0KTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sUmVhZE1lbW9yeSgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgVVJMLCAoY29uc3QgY2hhciAqKWVuY29kaW5nLCBvcHRpb25zKTsKICAgICAgICAgZGVzcmV0X3htbERvY1B0cihyZXRfdmFsKTsKQEAgLTEzOTM0LDggKzE0MTIzLDggQEAKICAgICAgICAgYnVmZmVyID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fYnVmZmVyLCAwKTsKICAgICAgICAgc2l6ZSA9IGdlbl9pbnQobl9zaXplLCAxKTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sUmVjb3Zlck1lbW9yeSgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSk7CiAgICAgICAgIGRlc3JldF94bWxEb2NQdHIocmV0X3ZhbCk7CkBAIC0xNDIzOCw4ICsxNDQyNyw4IEBACiAgICAgICAgIHNpemUgPSBnZW5faW50KG5fc2l6ZSwgMik7CiAgICAgICAgIHJlY292ZXJ5ID0gZ2VuX2ludChuX3JlY292ZXJ5LCAzKTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU0FYUGFyc2VNZW1vcnkoc2F4LCAoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgcmVjb3ZlcnkpOwogICAgICAgICBkZXNyZXRfeG1sRG9jUHRyKHJldF92YWwpOwpAQCAtMTQzMDIsOCArMTQ0OTEsOCBAQAogICAgICAgICByZWNvdmVyeSA9IGdlbl9pbnQobl9yZWNvdmVyeSwgMyk7CiAgICAgICAgIGRhdGEgPSBnZW5fdXNlcmRhdGEobl9kYXRhLCA0KTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU0FYUGFyc2VNZW1vcnlXaXRoRGF0YShzYXgsIChjb25zdCBjaGFyICopYnVmZmVyLCBzaXplLCByZWNvdmVyeSwgZGF0YSk7CiAgICAgICAgIGRlc3JldF94bWxEb2NQdHIocmV0X3ZhbCk7CkBAIC0xNDQyMCw4ICsxNDYwOSw4IEBACiAgICAgICAgIGJ1ZmZlciA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2J1ZmZlciwgMik7CiAgICAgICAgIHNpemUgPSBnZW5faW50KG5fc2l6ZSwgMyk7CiAgICAgICAgIGlmICgoYnVmZmVyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoc2l6ZSA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBidWZmZXIpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChzaXplID4geG1sU3RybGVuKEJBRF9DQVNUIGJ1ZmZlcikpKQorICAgICAgICAgICAgc2l6ZSA9IDA7CiAgICAgICAgIAogI2lmZGVmIExJQlhNTF9TQVgxX0VOQUJMRUQKICAgICAgICAgaWYgKHNheCA9PSAoeG1sU0FYSGFuZGxlclB0cikmeG1sRGVmYXVsdFNBWEhhbmRsZXIpIHVzZXJfZGF0YSA9IE5VTEw7CkBAIC0xNDU3OSwxMSArMTQ3NjgsMjY3IEBACiAgICAgcmV0dXJuKHRlc3RfcmV0KTsKIH0KIAorCitzdGF0aWMgaW50Cit0ZXN0X3htbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworICAgIGludCBtZW1fYmFzZTsKKyAgICBpbnQgcmV0X3ZhbDsKKyAgICBpbnQgdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfaW50O25fdisrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHYgPSBnZW5faW50KG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZkRvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZSh2KTsKKyAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKKyAgICAgICAgY2FsbF90ZXN0cysrOworICAgICAgICBkZXNfaW50KG5fdiwgdiwgMCk7CisgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgeworICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUiLAorCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CisJICAgIHRlc3RfcmV0Kys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdik7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb25fdGVzdHMrKzsKKworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworICAgIGludCBtZW1fYmFzZTsKKyAgICBpbnQgcmV0X3ZhbDsKKyAgICBpbnQgdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfaW50O25fdisrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHYgPSBnZW5faW50KG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKHYpOworICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOworICAgICAgICBjYWxsX3Rlc3RzKys7CisgICAgICAgIGRlc19pbnQobl92LCB2LCAwKTsKKyAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CisgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlIiwKKwkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOworCSAgICB0ZXN0X3JldCsrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3YpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uX3Rlc3RzKys7CisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworICAgIGludCBtZW1fYmFzZTsKKyAgICBpbnQgcmV0X3ZhbDsKKyAgICBpbnQgdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfaW50O25fdisrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHYgPSBnZW5faW50KG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZktlZXBCbGFua3NEZWZhdWx0VmFsdWUodik7CisgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ludChuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl92KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbl90ZXN0cysrOworCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X3htbFRockRlZkxpbmVOdW1iZXJzRGVmYXVsdFZhbHVlKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisgICAgaW50IG1lbV9iYXNlOworICAgIGludCByZXRfdmFsOworICAgIGludCB2OyAvKiAgKi8KKyAgICBpbnQgbl92OworCisgICAgZm9yIChuX3YgPSAwO25fdiA8IGdlbl9uYl9pbnQ7bl92KyspIHsKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKyAgICAgICAgdiA9IGdlbl9pbnQobl92LCAwKTsKKworICAgICAgICByZXRfdmFsID0geG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUodik7CisgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ludChuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUiLAorCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CisJICAgIHRlc3RfcmV0Kys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdik7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb25fdGVzdHMrKzsKKworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisgICAgaW50IG1lbV9iYXNlOworICAgIGludCByZXRfdmFsOworICAgIGludCB2OyAvKiAgKi8KKyAgICBpbnQgbl92OworCisgICAgZm9yIChuX3YgPSAwO25fdiA8IGdlbl9uYl9pbnQ7bl92KyspIHsKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKyAgICAgICAgdiA9IGdlbl9pbnQobl92LCAwKTsKKworICAgICAgICByZXRfdmFsID0geG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSh2KTsKKyAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKKyAgICAgICAgY2FsbF90ZXN0cysrOworICAgICAgICBkZXNfaW50KG5fdiwgdiwgMCk7CisgICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgeworICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxUaHJEZWZMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIiwKKwkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOworCSAgICB0ZXN0X3JldCsrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3YpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uX3Rlc3RzKys7CisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworICAgIGludCBtZW1fYmFzZTsKKyAgICBpbnQgcmV0X3ZhbDsKKyAgICBpbnQgdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfaW50O25fdisrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHYgPSBnZW5faW50KG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZlBhcnNlckRlYnVnRW50aXRpZXModik7CisgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ludChuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcyIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl92KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbl90ZXN0cysrOworCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X3htbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisgICAgaW50IG1lbV9iYXNlOworICAgIGludCByZXRfdmFsOworICAgIGludCB2OyAvKiAgKi8KKyAgICBpbnQgbl92OworCisgICAgZm9yIChuX3YgPSAwO25fdiA8IGdlbl9uYl9pbnQ7bl92KyspIHsKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKyAgICAgICAgdiA9IGdlbl9pbnQobl92LCAwKTsKKworICAgICAgICByZXRfdmFsID0geG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUodik7CisgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ludChuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUiLAorCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CisJICAgIHRlc3RfcmV0Kys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdik7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb25fdGVzdHMrKzsKKworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUodm9pZCkgeworICAgIGludCB0ZXN0X3JldCA9IDA7CisKKyAgICBpbnQgbWVtX2Jhc2U7CisgICAgaW50IHJldF92YWw7CisgICAgaW50IHY7IC8qICAqLworICAgIGludCBuX3Y7CisKKyAgICBmb3IgKG5fdiA9IDA7bl92IDwgZ2VuX25iX2ludDtuX3YrKykgeworICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOworICAgICAgICB2ID0gZ2VuX2ludChuX3YsIDApOworCisgICAgICAgIHJldF92YWwgPSB4bWxUaHJEZWZTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUodik7CisgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ludChuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlIiwKKwkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOworCSAgICB0ZXN0X3JldCsrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3YpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uX3Rlc3RzKys7CisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCiBzdGF0aWMgaW50CiB0ZXN0X3BhcnNlcih2b2lkKSB7CiAgICAgaW50IHRlc3RfcmV0ID0gMDsKIAotICAgIGlmIChxdWlldCA9PSAwKSBwcmludGYoIlRlc3RpbmcgcGFyc2VyIDogNTggb2YgNzAgZnVuY3Rpb25zIC4uLlxuIik7CisgICAgaWYgKHF1aWV0ID09IDApIHByaW50ZigiVGVzdGluZyBwYXJzZXIgOiA2NyBvZiA4MCBmdW5jdGlvbnMgLi4uXG4iKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbEJ5dGVDb25zdW1lZCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sQ2xlYXJOb2RlSW5mb1NlcSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sQ2xlYXJQYXJzZXJDdHh0KCk7CkBAIC0xNDU5NCw2ICsxNTAzOSw3IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDdHh0UmVhZE1lbW9yeSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sQ3R4dFJlc2V0KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDdHh0UmVzZXRQdXNoKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbigpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sQ3R4dFVzZU9wdGlvbnMoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbEdldEV4dGVybmFsRW50aXR5TG9hZGVyKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxIYXNGZWF0dXJlKCk7CkBAIC0xNDYwNiw2ICsxNTA1Miw3IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5ld0lPSW5wdXRTdHJlYW0oKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5ld1BhcnNlckN0eHQoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5ld1NBWFBhcnNlckN0eHQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcigpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUGFyc2VDaHVuaygpOwpAQCAtMTQ2NDQsNiArMTUwOTEsMTQgQEAKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFNldHVwUGFyc2VyRm9yQnVmZmVyKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxTdG9wUGFyc2VyKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0KCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUaHJEZWZEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRockRlZkdldFdhcm5pbmdzRGVmYXVsdFZhbHVlKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUaHJEZWZLZWVwQmxhbmtzRGVmYXVsdFZhbHVlKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUaHJEZWZMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZSgpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSgpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcygpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZSgpOwogCiAgICAgaWYgKHRlc3RfcmV0ICE9IDApCiAJcHJpbnRmKCJNb2R1bGUgcGFyc2VyOiAlZCBlcnJvcnNcbiIsIHRlc3RfcmV0KTsKQEAgLTE0NjUxLDcyICsxNTEwNiw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXRlc3RfaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0KHZvaWQpIHsKLSAgICBpbnQgdGVzdF9yZXQgPSAwOwotCi0jaWYgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKQotICAgIGludCBtZW1fYmFzZTsKLSAgICBodG1sUGFyc2VyQ3R4dFB0ciByZXRfdmFsOwotICAgIGNvbnN0IGNoYXIgKiBmaWxlbmFtZTsgLyogdGhlIGZpbGVuYW1lICovCi0gICAgaW50IG5fZmlsZW5hbWU7Ci0gICAgY2hhciAqIGVuY29kaW5nOyAvKiBhIGZyZWUgZm9ybSBDIHN0cmluZyBkZXNjcmliaW5nIHRoZSBIVE1MIGRvY3VtZW50IGVuY29kaW5nLCBvciBOVUxMICovCi0gICAgaW50IG5fZW5jb2Rpbmc7Ci0KLSAgICBmb3IgKG5fZmlsZW5hbWUgPSAwO25fZmlsZW5hbWUgPCBnZW5fbmJfZmlsZW91dHB1dDtuX2ZpbGVuYW1lKyspIHsKLSAgICBmb3IgKG5fZW5jb2RpbmcgPSAwO25fZW5jb2RpbmcgPCBnZW5fbmJfY29uc3RfY2hhcl9wdHI7bl9lbmNvZGluZysrKSB7Ci0gICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7Ci0gICAgICAgIGZpbGVuYW1lID0gZ2VuX2ZpbGVvdXRwdXQobl9maWxlbmFtZSwgMCk7Ci0gICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDEpOwotCi0gICAgICAgIHJldF92YWwgPSBodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQoZmlsZW5hbWUsIChjb25zdCBjaGFyICopZW5jb2RpbmcpOwotICAgICAgICBkZXNyZXRfaHRtbFBhcnNlckN0eHRQdHIocmV0X3ZhbCk7Ci0gICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgZGVzX2ZpbGVvdXRwdXQobl9maWxlbmFtZSwgZmlsZW5hbWUsIDApOwotICAgICAgICBkZXNfY29uc3RfY2hhcl9wdHIobl9lbmNvZGluZywgKGNvbnN0IGNoYXIgKillbmNvZGluZywgMSk7Ci0gICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewotICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiBodG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQiLAotCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7Ci0JICAgIHRlc3RfcmV0Kys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZmlsZW5hbWUpOwotICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX2VuY29kaW5nKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb25fdGVzdHMrKzsKLSNlbmRpZgotCi0gICAgcmV0dXJuKHRlc3RfcmV0KTsKLX0KLQotCi1zdGF0aWMgaW50Ci10ZXN0X2h0bWxJbml0QXV0b0Nsb3NlKHZvaWQpIHsKLSAgICBpbnQgdGVzdF9yZXQgPSAwOwotCi0jaWYgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKQotICAgIGludCBtZW1fYmFzZTsKLQotICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotCi0gICAgICAgIGh0bWxJbml0QXV0b0Nsb3NlKCk7Ci0gICAgICAgIGNhbGxfdGVzdHMrKzsKLSAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7Ci0gICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIGh0bWxJbml0QXV0b0Nsb3NlIiwKLQkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOwotCSAgICB0ZXN0X3JldCsrOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgZnVuY3Rpb25fdGVzdHMrKzsKLSNlbmRpZgotCi0gICAgcmV0dXJuKHRlc3RfcmV0KTsKLX0KLQotCi1zdGF0aWMgaW50CiB0ZXN0X2lucHV0UG9wKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0xNTE0MSw4ICsxNTUzMCw4IEBACiAgICAgICAgIGJ1ZmZlciA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2J1ZmZlciwgMCk7CiAgICAgICAgIHNpemUgPSBnZW5faW50KG5fc2l6ZSwgMSk7CiAgICAgICAgIGlmICgoYnVmZmVyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoc2l6ZSA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBidWZmZXIpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChzaXplID4geG1sU3RybGVuKEJBRF9DQVNUIGJ1ZmZlcikpKQorICAgICAgICAgICAgc2l6ZSA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoKGNvbnN0IGNoYXIgKilidWZmZXIsIHNpemUpOwogICAgICAgICBkZXNyZXRfeG1sUGFyc2VyQ3R4dFB0cihyZXRfdmFsKTsKQEAgLTE1MjQ1LDQzICsxNTYzNCw2IEBACiAKIAogc3RhdGljIGludAotdGVzdF94bWxFcnJNZW1vcnkodm9pZCkgewotICAgIGludCB0ZXN0X3JldCA9IDA7Ci0KLSAgICBpbnQgbWVtX2Jhc2U7Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OyAvKiBhbiBYTUwgcGFyc2VyIGNvbnRleHQgKi8KLSAgICBpbnQgbl9jdHh0OwotICAgIGNoYXIgKiBleHRyYTsgLyogZXh0cmEgaW5mb3JtYXRpb24gKi8KLSAgICBpbnQgbl9leHRyYTsKLQotICAgIGZvciAobl9jdHh0ID0gMDtuX2N0eHQgPCBnZW5fbmJfeG1sUGFyc2VyQ3R4dFB0cjtuX2N0eHQrKykgewotICAgIGZvciAobl9leHRyYSA9IDA7bl9leHRyYSA8IGdlbl9uYl9jb25zdF9jaGFyX3B0cjtuX2V4dHJhKyspIHsKLSAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKLSAgICAgICAgY3R4dCA9IGdlbl94bWxQYXJzZXJDdHh0UHRyKG5fY3R4dCwgMCk7Ci0gICAgICAgIGV4dHJhID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZXh0cmEsIDEpOwotCi0gICAgICAgIHhtbEVyck1lbW9yeShjdHh0LCAoY29uc3QgY2hhciAqKWV4dHJhKTsKLSAgICAgICAgY2FsbF90ZXN0cysrOwotICAgICAgICBkZXNfeG1sUGFyc2VyQ3R4dFB0cihuX2N0eHQsIGN0eHQsIDApOwotICAgICAgICBkZXNfY29uc3RfY2hhcl9wdHIobl9leHRyYSwgKGNvbnN0IGNoYXIgKilleHRyYSwgMSk7Ci0gICAgICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIGlmIChtZW1fYmFzZSAhPSB4bWxNZW1CbG9ja3MoKSkgewotICAgICAgICAgICAgcHJpbnRmKCJMZWFrIG9mICVkIGJsb2NrcyBmb3VuZCBpbiB4bWxFcnJNZW1vcnkiLAotCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7Ci0JICAgIHRlc3RfcmV0Kys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fY3R4dCk7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZXh0cmEpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIH0KLSAgICBmdW5jdGlvbl90ZXN0cysrOwotCi0gICAgcmV0dXJuKHRlc3RfcmV0KTsKLX0KLQotCi1zdGF0aWMgaW50CiB0ZXN0X3htbElzTGV0dGVyKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0xNTc5OSw4ICsxNjE1MSw4IEBACiAgICAgICAgIGVuZDIgPSBnZW5feG1sQ2hhcihuX2VuZDIsIDUpOwogICAgICAgICBlbmQzID0gZ2VuX3htbENoYXIobl9lbmQzLCA2KTsKICAgICAgICAgaWYgKChzdHIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgc3RyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIHN0cikpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU3RyaW5nTGVuRGVjb2RlRW50aXRpZXMoY3R4dCwgKGNvbnN0IHhtbENoYXIgKilzdHIsIGxlbiwgd2hhdCwgZW5kLCBlbmQyLCBlbmQzKTsKICAgICAgICAgZGVzcmV0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtMTU5NjYsOSArMTYzMTgsNyBAQAogdGVzdF9wYXJzZXJJbnRlcm5hbHModm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIHBhcnNlckludGVybmFscyA6IDMzIG9mIDkwIGZ1bmN0aW9ucyAuLi5cbiIpOwotICAgIHRlc3RfcmV0ICs9IHRlc3RfaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0KCk7Ci0gICAgdGVzdF9yZXQgKz0gdGVzdF9odG1sSW5pdEF1dG9DbG9zZSgpOworICAgIGlmIChxdWlldCA9PSAwKSBwcmludGYoIlRlc3RpbmcgcGFyc2VySW50ZXJuYWxzIDogMzAgb2YgODcgZnVuY3Rpb25zIC4uLlxuIik7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9pbnB1dFBvcCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfaW5wdXRQdXNoKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF9uYW1lUG9wKCk7CkBAIC0xNTk4Myw3ICsxNjMzMyw2IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDcmVhdGVVUkxQYXJzZXJDdHh0KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDdXJyZW50Q2hhcigpOwotICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sRXJyTWVtb3J5KCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxJc0xldHRlcigpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sTmV3RW50aXR5SW5wdXRTdHJlYW0oKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5ld0lucHV0RnJvbUZpbGUoKTsKQEAgLTE2NzU0LDggKzE3MTAzLDggQEAKICAgICAgICAgYnVmZmVyID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fYnVmZmVyLCAwKTsKICAgICAgICAgc2l6ZSA9IGdlbl9pbnQobl9zaXplLCAxKTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sUmVsYXhOR05ld01lbVBhcnNlckN0eHQoKGNvbnN0IGNoYXIgKilidWZmZXIsIHNpemUpOwogICAgICAgICBkZXNyZXRfeG1sUmVsYXhOR1BhcnNlckN0eHRQdHIocmV0X3ZhbCk7CkBAIC0xNzAzMyw4ICsxNzM4Miw4IEBACiAgICAgICAgIGRhdGEgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9kYXRhLCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoZGF0YSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBkYXRhKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIGRhdGEpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFJlbGF4TkdWYWxpZGF0ZVB1c2hDRGF0YShjdHh0LCAoY29uc3QgeG1sQ2hhciAqKWRhdGEsIGxlbik7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CkBAIC0xNzczOSw4ICsxODA4OCw4IEBACiAgICAgICAgIHN0ciA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX3N0ciwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKHN0ciAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBzdHIpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1Qgc3RyKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxCdWZmZXJBZGQoYnVmLCAoY29uc3QgeG1sQ2hhciAqKXN0ciwgbGVuKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKQEAgLTE3Nzg4LDggKzE4MTM3LDggQEAKICAgICAgICAgc3RyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fc3RyLCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoc3RyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIHN0cikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBzdHIpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbEJ1ZmZlckFkZEhlYWQoYnVmLCAoY29uc3QgeG1sQ2hhciAqKXN0ciwgbGVuKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKQEAgLTE4MTY0LDcgKzE4NTEzLDYgQEAKICAgICAgICAgc2NoZW1lID0gZ2VuX3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUobl9zY2hlbWUsIDEpOwogCiAgICAgICAgIHhtbEJ1ZmZlclNldEFsbG9jYXRpb25TY2hlbWUoYnVmLCBzY2hlbWUpOwotICAgICAgICBpZiAoKGJ1ZiAhPSBOVUxMKSAmJiAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSAmJiAoYnVmLT5jb250ZW50ICE9IE5VTEwpICYmIChidWYtPmNvbnRlbnQgIT0gc3RhdGljX2J1Zl9jb250ZW50KSkgeyB4bWxGcmVlKGJ1Zi0+Y29udGVudCk7IGJ1Zi0+Y29udGVudCA9IE5VTEw7fQogICAgICAgICBjYWxsX3Rlc3RzKys7CiAgICAgICAgIGRlc194bWxCdWZmZXJQdHIobl9idWYsIGJ1ZiwgMCk7CiAgICAgICAgIGRlc194bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lKG5fc2NoZW1lLCBzY2hlbWUsIDEpOwpAQCAtMTgzNjAsOCArMTg3MDgsOCBAQAogICAgICAgICBtZW1vcnkgPSBnZW5feG1sQ2hhcl9wdHIobl9tZW1vcnksIDIpOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAzKTsKICAgICAgICAgaWYgKChwcmVmaXggIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcHJlZml4KSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIHByZWZpeCkpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sQnVpbGRRTmFtZSgoY29uc3QgeG1sQ2hhciAqKW5jbmFtZSwgKGNvbnN0IHhtbENoYXIgKilwcmVmaXgsIG1lbW9yeSwgbGVuKTsKICAgICAgICAgaWYgKChyZXRfdmFsICE9IE5VTEwpICYmIChyZXRfdmFsICE9IG5jbmFtZSkgJiYKQEAgLTE5MDM1LDYgKzE5MzgzLDE2IEBACiAKIAogc3RhdGljIGludAordGVzdF94bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQodm9pZCkgeworICAgIGludCB0ZXN0X3JldCA9IDA7CisKKworICAgIC8qIG1pc3NpbmcgdHlwZSBzdXBwb3J0ICovCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50CiB0ZXN0X3htbERvY0NvcHlOb2RlKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0yMDEzMSw4ICsyMDQ4OSw4IEBACiAgICAgICAgIGNvbnRlbnQgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9jb250ZW50LCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoY29udGVudCAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBjb250ZW50KSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIGNvbnRlbnQpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbE5ld0NEYXRhQmxvY2soZG9jLCAoY29uc3QgeG1sQ2hhciAqKWNvbnRlbnQsIGxlbik7CiAgICAgICAgIGRlc3JldF94bWxOb2RlUHRyKHJldF92YWwpOwpAQCAtMjA3MDcsOCArMjEwNjUsOCBAQAogICAgICAgICBjb250ZW50ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fY29udGVudCwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKGNvbnRlbnQgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgY29udGVudCkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBjb250ZW50KSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxOZXdEb2NUZXh0TGVuKGRvYywgKGNvbnN0IHhtbENoYXIgKiljb250ZW50LCBsZW4pOwogICAgICAgICBkZXNyZXRfeG1sTm9kZVB0cihyZXRfdmFsKTsKQEAgLTIxMjUzLDggKzIxNjExLDggQEAKICAgICAgICAgY29udGVudCA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2NvbnRlbnQsIDApOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAxKTsKICAgICAgICAgaWYgKChjb250ZW50ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGNvbnRlbnQpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgY29udGVudCkpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sTmV3VGV4dExlbigoY29uc3QgeG1sQ2hhciAqKWNvbnRlbnQsIGxlbik7CiAgICAgICAgIGRlc3JldF94bWxOb2RlUHRyKHJldF92YWwpOwpAQCAtMjEzNjksOCArMjE3MjcsOCBAQAogICAgICAgICBjb250ZW50ID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fY29udGVudCwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKGNvbnRlbnQgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgY29udGVudCkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBjb250ZW50KSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHhtbE5vZGVBZGRDb250ZW50TGVuKGN1ciwgKGNvbnN0IHhtbENoYXIgKiljb250ZW50LCBsZW4pOwogICAgICAgICBjYWxsX3Rlc3RzKys7CkBAIC0yMTkyMiw4ICsyMjI4MCw4IEBACiAgICAgICAgIGNvbnRlbnQgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9jb250ZW50LCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoY29udGVudCAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBjb250ZW50KSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIGNvbnRlbnQpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgeG1sTm9kZVNldENvbnRlbnRMZW4oY3VyLCAoY29uc3QgeG1sQ2hhciAqKWNvbnRlbnQsIGxlbik7CiAgICAgICAgIGNhbGxfdGVzdHMrKzsKQEAgLTIyMTQ1LDYgKzIyNTAzLDE2IEBACiAKIAogc3RhdGljIGludAordGVzdF94bWxSZWdpc3Rlck5vZGVEZWZhdWx0KHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisKKyAgICAvKiBtaXNzaW5nIHR5cGUgc3VwcG9ydCAqLworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAogdGVzdF94bWxSZW1vdmVQcm9wKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0yMjk4OSw4ICsyMzM1Nyw4IEBACiAgICAgICAgIHZhbHVlID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fdmFsdWUsIDEpOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAyKTsKICAgICAgICAgaWYgKCh2YWx1ZSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSB2YWx1ZSkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCB2YWx1ZSkpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU3RyaW5nTGVuR2V0Tm9kZUxpc3QoKGNvbnN0IHhtbERvYyAqKWRvYywgKGNvbnN0IHhtbENoYXIgKil2YWx1ZSwgbGVuKTsKICAgICAgICAgZGVzcmV0X3htbE5vZGVQdHIocmV0X3ZhbCk7CkBAIC0yMzAzOCw4ICsyMzQwNiw4IEBACiAgICAgICAgIGNvbnRlbnQgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9jb250ZW50LCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoY29udGVudCAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBjb250ZW50KSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIGNvbnRlbnQpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFRleHRDb25jYXQobm9kZSwgKGNvbnN0IHhtbENoYXIgKiljb250ZW50LCBsZW4pOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwpAQCAtMjMxMDksNiArMjM0NzcsOTAgQEAKIAogCiBzdGF0aWMgaW50Cit0ZXN0X3htbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisgICAgaW50IG1lbV9iYXNlOworICAgIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgcmV0X3ZhbDsKKyAgICB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lIHY7IC8qICAqLworICAgIGludCBuX3Y7CisKKyAgICBmb3IgKG5fdiA9IDA7bl92IDwgZ2VuX25iX3htbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWU7bl92KyspIHsKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKyAgICAgICAgdiA9IGdlbl94bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lKG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZkJ1ZmZlckFsbG9jU2NoZW1lKHYpOworICAgICAgICBkZXNyZXRfeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZShyZXRfdmFsKTsKKyAgICAgICAgY2FsbF90ZXN0cysrOworICAgICAgICBkZXNfeG1sQnVmZmVyQWxsb2NhdGlvblNjaGVtZShuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUiLAorCSAgICAgICAgICAgeG1sTWVtQmxvY2tzKCkgLSBtZW1fYmFzZSk7CisJICAgIHRlc3RfcmV0Kys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fdik7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb25fdGVzdHMrKzsKKworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZEZWZhdWx0QnVmZmVyU2l6ZSh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworICAgIGludCBtZW1fYmFzZTsKKyAgICBpbnQgcmV0X3ZhbDsKKyAgICBpbnQgdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfaW50O25fdisrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHYgPSBnZW5faW50KG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplKHYpOworICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOworICAgICAgICBjYWxsX3Rlc3RzKys7CisgICAgICAgIGRlc19pbnQobl92LCB2LCAwKTsKKyAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CisgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbFRockRlZkRlZmF1bHRCdWZmZXJTaXplIiwKKwkgICAgICAgICAgIHhtbE1lbUJsb2NrcygpIC0gbWVtX2Jhc2UpOworCSAgICB0ZXN0X3JldCsrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBuX3YpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uX3Rlc3RzKys7CisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmRGVyZWdpc3Rlck5vZGVEZWZhdWx0KHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisKKyAgICAvKiBtaXNzaW5nIHR5cGUgc3VwcG9ydCAqLworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0KHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisKKyAgICAvKiBtaXNzaW5nIHR5cGUgc3VwcG9ydCAqLworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAogdGVzdF94bWxVbnNldE5zUHJvcCh2b2lkKSB7CiAgICAgaW50IHRlc3RfcmV0ID0gMDsKIApAQCAtMjMyMDEsNyArMjM2NTMsNiBAQAogdGVzdF94bWxWYWxpZGF0ZU5DTmFtZSh2b2lkKSB7CiAgICAgaW50IHRlc3RfcmV0ID0gMDsKIAotI2lmIGRlZmluZWQoTElCWE1MX1RSRUVfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfWFBBVEhfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9ERUJVR19FTkFCTEVEKSB8fCBkZWZpbmVkIChMSUJYTUxfSFRNTF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQVgxX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0hUTUxfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfV1JJVEVSX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0xFR0FDWV9FTkFCTEVEKQogI2lmZGVmIExJQlhNTF9UUkVFX0VOQUJMRUQKICAgICBpbnQgbWVtX2Jhc2U7CiAgICAgaW50IHJldF92YWw7CkBAIC0yMzIzNCw3ICsyMzY4NSw2IEBACiAgICAgfQogICAgIGZ1bmN0aW9uX3Rlc3RzKys7CiAjZW5kaWYKLSNlbmRpZgogCiAgICAgcmV0dXJuKHRlc3RfcmV0KTsKIH0KQEAgLTIzMzcyLDcgKzIzODIyLDcgQEAKIHRlc3RfdHJlZSh2b2lkKSB7CiAgICAgaW50IHRlc3RfcmV0ID0gMDsKIAotICAgIGlmIChxdWlldCA9PSAwKSBwcmludGYoIlRlc3RpbmcgdHJlZSA6IDE0MiBvZiAxNjQgZnVuY3Rpb25zIC4uLlxuIik7CisgICAgaWYgKHF1aWV0ID09IDApIHByaW50ZigiVGVzdGluZyB0cmVlIDogMTQ0IG9mIDE3MCBmdW5jdGlvbnMgLi4uXG4iKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbEFkZENoaWxkKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxBZGRDaGlsZExpc3QoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbEFkZE5leHRTaWJsaW5nKCk7CkBAIC0yMzQxOSw2ICsyMzg2OSw3IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxET01XcmFwTmV3Q3R4dCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sRE9NV3JhcFJlY29uY2lsZU5hbWVzcGFjZXMoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbERPTVdyYXBSZW1vdmVOb2RlKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbERvY0NvcHlOb2RlKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxEb2NDb3B5Tm9kZUxpc3QoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbERvY0R1bXAoKTsKQEAgLTIzNDk0LDYgKzIzOTQ1LDcgQEAKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5vZGVTZXRTcGFjZVByZXNlcnZlKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxQcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxSZWNvbmNpbGlhdGVOcygpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUmVtb3ZlUHJvcCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUmVwbGFjZU5vZGUoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFNhdmVGaWxlKCk7CkBAIC0yMzUxNiw2ICsyMzk2OCwxMCBAQAogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sU3RyaW5nTGVuR2V0Tm9kZUxpc3QoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRleHRDb25jYXQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRleHRNZXJnZSgpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmQnVmZmVyQWxsb2NTY2hlbWUoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRockRlZkRlZmF1bHRCdWZmZXJTaXplKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUaHJEZWZEZXJlZ2lzdGVyTm9kZURlZmF1bHQoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRockRlZlJlZ2lzdGVyTm9kZURlZmF1bHQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFVuc2V0TnNQcm9wKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxVbnNldFByb3AoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFZhbGlkYXRlTkNOYW1lKCk7CkBAIC0yNTcwMCwyMyArMjYxNTYsMjMgQEAKICAgICBpbnQgbl9jdHh0OwogICAgIHhtbERvY1B0ciBkb2M7IC8qIGEgZG9jdW1lbnQgaW5zdGFuY2UgKi8KICAgICBpbnQgbl9kb2M7Ci0gICAgeG1sTm9kZVB0ciBlbGVtOyAvKiBhbiBlbGVtZW50IGluc3RhbmNlICovCi0gICAgaW50IG5fZWxlbTsKKyAgICB4bWxOb2RlUHRyIHJvb3Q7IC8qIGFuIGVsZW1lbnQgaW5zdGFuY2UgKi8KKyAgICBpbnQgbl9yb290OwogCiAgICAgZm9yIChuX2N0eHQgPSAwO25fY3R4dCA8IGdlbl9uYl94bWxWYWxpZEN0eHRQdHI7bl9jdHh0KyspIHsKICAgICBmb3IgKG5fZG9jID0gMDtuX2RvYyA8IGdlbl9uYl94bWxEb2NQdHI7bl9kb2MrKykgewotICAgIGZvciAobl9lbGVtID0gMDtuX2VsZW0gPCBnZW5fbmJfeG1sTm9kZVB0cjtuX2VsZW0rKykgeworICAgIGZvciAobl9yb290ID0gMDtuX3Jvb3QgPCBnZW5fbmJfeG1sTm9kZVB0cjtuX3Jvb3QrKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwogICAgICAgICBjdHh0ID0gZ2VuX3htbFZhbGlkQ3R4dFB0cihuX2N0eHQsIDApOwogICAgICAgICBkb2MgPSBnZW5feG1sRG9jUHRyKG5fZG9jLCAxKTsKLSAgICAgICAgZWxlbSA9IGdlbl94bWxOb2RlUHRyKG5fZWxlbSwgMik7CisgICAgICAgIHJvb3QgPSBnZW5feG1sTm9kZVB0cihuX3Jvb3QsIDIpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxWYWxpZGF0ZUVsZW1lbnQoY3R4dCwgZG9jLCBlbGVtKTsKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFZhbGlkYXRlRWxlbWVudChjdHh0LCBkb2MsIHJvb3QpOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwogICAgICAgICBjYWxsX3Rlc3RzKys7CiAgICAgICAgIGRlc194bWxWYWxpZEN0eHRQdHIobl9jdHh0LCBjdHh0LCAwKTsKICAgICAgICAgZGVzX3htbERvY1B0cihuX2RvYywgZG9jLCAxKTsKLSAgICAgICAgZGVzX3htbE5vZGVQdHIobl9lbGVtLCBlbGVtLCAyKTsKKyAgICAgICAgZGVzX3htbE5vZGVQdHIobl9yb290LCByb290LCAyKTsKICAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CiAgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbFZhbGlkYXRlRWxlbWVudCIsCkBAIC0yNTcyNCw3ICsyNjE4MCw3IEBACiAJICAgIHRlc3RfcmV0Kys7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fY3R4dCk7CiAgICAgICAgICAgICBwcmludGYoIiAlZCIsIG5fZG9jKTsKLSAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9lbGVtKTsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl9yb290KTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2MjczLDggKzI2NzI5LDggQEAKICAgICAgICAgZGF0YSA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2RhdGEsIDEpOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAyKTsKICAgICAgICAgaWYgKChkYXRhICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGRhdGEpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgZGF0YSkpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sVmFsaWRhdGVQdXNoQ0RhdGEoY3R4dCwgKGNvbnN0IHhtbENoYXIgKilkYXRhLCBsZW4pOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwpAQCAtMjc3MTAsNiArMjgxNjYsMTYgQEAKIAogCiBzdGF0aWMgaW50Cit0ZXN0X3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworCisgICAgLyogbWlzc2luZyB0eXBlIHN1cHBvcnQgKi8KKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCisKK3N0YXRpYyBpbnQKIHRlc3RfeG1sT3V0cHV0QnVmZmVyRmx1c2godm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKQEAgLTI3ODA5LDggKzI4Mjc1LDggQEAKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMSk7CiAgICAgICAgIGJ1ZiA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2J1ZiwgMik7CiAgICAgICAgIGlmICgoYnVmICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBidWYpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbE91dHB1dEJ1ZmZlcldyaXRlKG91dCwgbGVuLCAoY29uc3QgY2hhciAqKWJ1Zik7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CkBAIC0yODAxOCw2ICsyODQ4NCwxNiBAQAogCiAKIHN0YXRpYyBpbnQKK3Rlc3RfeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQodm9pZCkgeworICAgIGludCB0ZXN0X3JldCA9IDA7CisKKworICAgIC8qIG1pc3NpbmcgdHlwZSBzdXBwb3J0ICovCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50CiB0ZXN0X3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0yODAzOCw4ICsyODUxNCw4IEBACiAgICAgICAgIHNpemUgPSBnZW5faW50KG5fc2l6ZSwgMSk7CiAgICAgICAgIGVuYyA9IGdlbl94bWxDaGFyRW5jb2Rpbmcobl9lbmMsIDIpOwogICAgICAgICBpZiAoKG1lbSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHNpemUgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgbWVtKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc2l6ZSA+IHhtbFN0cmxlbihCQURfQ0FTVCBtZW0pKSkKKyAgICAgICAgICAgIHNpemUgPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbSgoY29uc3QgY2hhciAqKW1lbSwgc2l6ZSwgZW5jKTsKICAgICAgICAgZGVzcmV0X3htbFBhcnNlcklucHV0QnVmZmVyUHRyKHJldF92YWwpOwpAQCAtMjgwODcsOCArMjg1NjMsOCBAQAogICAgICAgICBzaXplID0gZ2VuX2ludChuX3NpemUsIDEpOwogICAgICAgICBlbmMgPSBnZW5feG1sQ2hhckVuY29kaW5nKG5fZW5jLCAyKTsKICAgICAgICAgaWYgKChtZW0gIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIG1lbSkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgbWVtKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMoKGNvbnN0IGNoYXIgKiltZW0sIHNpemUsIGVuYyk7CiAgICAgICAgIGRlc3JldF94bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cihyZXRfdmFsKTsKQEAgLTI4MTc1LDggKzI4NjUxLDggQEAKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMSk7CiAgICAgICAgIGJ1ZiA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2J1ZiwgMik7CiAgICAgICAgIGlmICgoYnVmICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBidWYpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFBhcnNlcklucHV0QnVmZmVyUHVzaChpbiwgbGVuLCAoY29uc3QgY2hhciAqKWJ1Zik7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CkBAIC0yODM2NiwxMSArMjg4NDIsMzEgQEAKICAgICByZXR1cm4odGVzdF9yZXQpOwogfQogCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0KHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisKKyAgICAvKiBtaXNzaW5nIHR5cGUgc3VwcG9ydCAqLworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworCisgICAgLyogbWlzc2luZyB0eXBlIHN1cHBvcnQgKi8KKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCiBzdGF0aWMgaW50CiB0ZXN0X3htbElPKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCi0gICAgaWYgKHF1aWV0ID09IDApIHByaW50ZigiVGVzdGluZyB4bWxJTyA6IDQxIG9mIDUxIGZ1bmN0aW9ucyAuLi5cbiIpOworICAgIGlmIChxdWlldCA9PSAwKSBwcmludGYoIlRlc3RpbmcgeG1sSU8gOiA0MSBvZiA1NSBmdW5jdGlvbnMgLi4uXG4iKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbEFsbG9jT3V0cHV0QnVmZmVyKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxBbGxvY1BhcnNlcklucHV0QnVmZmVyKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDaGVja0ZpbGVuYW1lKCk7CkBAIC0yODM5NSw2ICsyODg5MSw3IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxPdXRwdXRCdWZmZXJDcmVhdGVGZCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sT3V0cHV0QnVmZmVyRmx1c2goKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE91dHB1dEJ1ZmZlckdldENvbnRlbnQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE91dHB1dEJ1ZmZlckdldFNpemUoKTsKQEAgLTI4NDA1LDYgKzI4OTAyLDcgQEAKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZSgpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZVN0YXRpYygpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUGFyc2VySW5wdXRCdWZmZXJHcm93KCk7CkBAIC0yODQxNSw2ICsyODkxMyw4IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxSZWdpc3RlckRlZmF1bHRJbnB1dENhbGxiYWNrcygpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUmVnaXN0ZXJEZWZhdWx0T3V0cHV0Q2FsbGJhY2tzKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUaHJEZWZPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRockRlZlBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0KCk7CiAKICAgICBpZiAodGVzdF9yZXQgIT0gMCkKIAlwcmludGYoIk1vZHVsZSB4bWxJTzogJWQgZXJyb3JzXG4iLCB0ZXN0X3JldCk7CkBAIC0yODc3MCw2ICsyOTI3MCwxMCBAQAogfQogCiAKKyNkZWZpbmUgZ2VuX25iX2NvbnN0X3htbEVycm9yX3B0ciAxCisjZGVmaW5lIGdlbl9jb25zdF94bWxFcnJvcl9wdHIobm8sIG5yKSBOVUxMCisjZGVmaW5lIGRlc19jb25zdF94bWxFcnJvcl9wdHIobm8sIHZhbCwgbnIpCisKICNkZWZpbmUgZ2VuX25iX3htbEVycm9yUHRyIDEKICNkZWZpbmUgZ2VuX3htbEVycm9yUHRyKG5vLCBucikgTlVMTAogI2RlZmluZSBkZXNfeG1sRXJyb3JQdHIobm8sIHZhbCwgbnIpCkBAIC0yODc4MCwyMSArMjkyODQsMjEgQEAKIAogICAgIGludCBtZW1fYmFzZTsKICAgICBpbnQgcmV0X3ZhbDsKLSAgICB4bWxFcnJvclB0ciBmcm9tOyAvKiBhIHNvdXJjZSBlcnJvciAqLworICAgIHhtbEVycm9yICogZnJvbTsgLyogYSBzb3VyY2UgZXJyb3IgKi8KICAgICBpbnQgbl9mcm9tOwogICAgIHhtbEVycm9yUHRyIHRvOyAvKiBhIHRhcmdldCBlcnJvciAqLwogICAgIGludCBuX3RvOwogCi0gICAgZm9yIChuX2Zyb20gPSAwO25fZnJvbSA8IGdlbl9uYl94bWxFcnJvclB0cjtuX2Zyb20rKykgeworICAgIGZvciAobl9mcm9tID0gMDtuX2Zyb20gPCBnZW5fbmJfY29uc3RfeG1sRXJyb3JfcHRyO25fZnJvbSsrKSB7CiAgICAgZm9yIChuX3RvID0gMDtuX3RvIDwgZ2VuX25iX3htbEVycm9yUHRyO25fdG8rKykgewogICAgICAgICBtZW1fYmFzZSA9IHhtbE1lbUJsb2NrcygpOwotICAgICAgICBmcm9tID0gZ2VuX3htbEVycm9yUHRyKG5fZnJvbSwgMCk7CisgICAgICAgIGZyb20gPSBnZW5fY29uc3RfeG1sRXJyb3JfcHRyKG5fZnJvbSwgMCk7CiAgICAgICAgIHRvID0gZ2VuX3htbEVycm9yUHRyKG5fdG8sIDEpOwogCi0gICAgICAgIHJldF92YWwgPSB4bWxDb3B5RXJyb3IoZnJvbSwgdG8pOworICAgICAgICByZXRfdmFsID0geG1sQ29weUVycm9yKChjb25zdCB4bWxFcnJvciAqKWZyb20sIHRvKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKICAgICAgICAgY2FsbF90ZXN0cysrOwotICAgICAgICBkZXNfeG1sRXJyb3JQdHIobl9mcm9tLCBmcm9tLCAwKTsKKyAgICAgICAgZGVzX2NvbnN0X3htbEVycm9yX3B0cihuX2Zyb20sIChjb25zdCB4bWxFcnJvciAqKWZyb20sIDApOwogICAgICAgICBkZXNfeG1sRXJyb3JQdHIobl90bywgdG8sIDEpOwogICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKQEAgLTI5MDI3LDExICsyOTUzMSwzMSBAQAogICAgIHJldHVybih0ZXN0X3JldCk7CiB9CiAKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZTZXRHZW5lcmljRXJyb3JGdW5jKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisKKyAgICAvKiBtaXNzaW5nIHR5cGUgc3VwcG9ydCAqLworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKKworc3RhdGljIGludAordGVzdF94bWxUaHJEZWZTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisKKyAgICAvKiBtaXNzaW5nIHR5cGUgc3VwcG9ydCAqLworICAgIHJldHVybih0ZXN0X3JldCk7Cit9CisKIHN0YXRpYyBpbnQKIHRlc3RfeG1sZXJyb3Iodm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIHhtbGVycm9yIDogNyBvZiAxNSBmdW5jdGlvbnMgLi4uXG4iKTsKKyAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIHhtbGVycm9yIDogNyBvZiAxNyBmdW5jdGlvbnMgLi4uXG4iKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X2luaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYygpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sQ29weUVycm9yKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxDdHh0R2V0TGFzdEVycm9yKCk7CkBAIC0yOTA0Nyw2ICsyOTU3MSw4IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxSZXNldExhc3RFcnJvcigpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYygpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmU2V0R2VuZXJpY0Vycm9yRnVuYygpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmU2V0U3RydWN0dXJlZEVycm9yRnVuYygpOwogCiAgICAgaWYgKHRlc3RfcmV0ICE9IDApCiAJcHJpbnRmKCJNb2R1bGUgeG1sZXJyb3I6ICVkIGVycm9yc1xuIiwgdGVzdF9yZXQpOwpAQCAtMjkzNzMsOCArMjk4OTksOCBAQAogICAgICAgICBlbmNvZGluZyA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2VuY29kaW5nLCAzKTsKICAgICAgICAgb3B0aW9ucyA9IGdlbl9wYXJzZXJvcHRpb25zKG5fb3B0aW9ucywgNCk7CiAgICAgICAgIGlmICgoYnVmZmVyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoc2l6ZSA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBidWZmZXIpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChzaXplID4geG1sU3RybGVuKEJBRF9DQVNUIGJ1ZmZlcikpKQorICAgICAgICAgICAgc2l6ZSA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFJlYWRlckZvck1lbW9yeSgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgVVJMLCAoY29uc3QgY2hhciAqKWVuY29kaW5nLCBvcHRpb25zKTsKICAgICAgICAgZGVzcmV0X3htbFRleHRSZWFkZXJQdHIocmV0X3ZhbCk7CkBAIC0yOTU1OSw4ICszMDA4NSw4IEBACiAgICAgICAgIGVuY29kaW5nID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fZW5jb2RpbmcsIDQpOwogICAgICAgICBvcHRpb25zID0gZ2VuX3BhcnNlcm9wdGlvbnMobl9vcHRpb25zLCA1KTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sUmVhZGVyTmV3TWVtb3J5KHJlYWRlciwgKGNvbnN0IGNoYXIgKilidWZmZXIsIHNpemUsIFVSTCwgKGNvbnN0IGNoYXIgKillbmNvZGluZywgb3B0aW9ucyk7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CkBAIC0zMTg4MSw2ICszMjQwNywxNiBAQAogCiAKIHN0YXRpYyBpbnQKK3Rlc3RfeG1sVGV4dFJlYWRlclNldE1heEFtcGxpZmljYXRpb24odm9pZCkgeworICAgIGludCB0ZXN0X3JldCA9IDA7CisKKworICAgIC8qIG1pc3NpbmcgdHlwZSBzdXBwb3J0ICovCisgICAgcmV0dXJuKHRlc3RfcmV0KTsKK30KKworCitzdGF0aWMgaW50CiB0ZXN0X3htbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wKHZvaWQpIHsKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCkBAIC0zMjE0NSw3ICszMjY4MSw3IEBACiB0ZXN0X3htbHJlYWRlcih2b2lkKSB7CiAgICAgaW50IHRlc3RfcmV0ID0gMDsKIAotICAgIGlmIChxdWlldCA9PSAwKSBwcmludGYoIlRlc3RpbmcgeG1scmVhZGVyIDogNzYgb2YgODYgZnVuY3Rpb25zIC4uLlxuIik7CisgICAgaWYgKHF1aWV0ID09IDApIHByaW50ZigiVGVzdGluZyB4bWxyZWFkZXIgOiA3NiBvZiA4NyBmdW5jdGlvbnMgLi4uXG4iKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5ld1RleHRSZWFkZXIoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbE5ld1RleHRSZWFkZXJGaWxlbmFtZSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sUmVhZGVyRm9yRG9jKCk7CkBAIC0zMjIxNyw2ICszMjc1Myw3IEBACiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGUoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRleHRSZWFkZXJTY2hlbWFWYWxpZGF0ZUN0eHQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRleHRSZWFkZXJTZXRFcnJvckhhbmRsZXIoKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUZXh0UmVhZGVyU2V0UGFyc2VyUHJvcCgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGV4dFJlYWRlclNldFNjaGVtYSgpOwogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGV4dFJlYWRlclNldFN0cnVjdHVyZWRFcnJvckhhbmRsZXIoKTsKQEAgLTMzMjY4LDcgKzMzODA1LDcgQEAKICAgICBsb25nIHJldF92YWw7CiAgICAgeG1sU2F2ZUN0eHRQdHIgY3R4dDsgLyogYSBkb2N1bWVudCBzYXZpbmcgY29udGV4dCAqLwogICAgIGludCBuX2N0eHQ7Ci0gICAgeG1sTm9kZVB0ciBjdXI7IC8qICAqLworICAgIHhtbE5vZGVQdHIgY3VyOyAvKiB0aGUgdG9wIG5vZGUgb2YgdGhlIHN1YnRyZWUgdG8gc2F2ZSAqLwogICAgIGludCBuX2N1cjsKIAogICAgIGZvciAobl9jdHh0ID0gMDtuX2N0eHQgPCBnZW5fbmJfeG1sU2F2ZUN0eHRQdHI7bl9jdHh0KyspIHsKQEAgLTMzMjk5LDExICszMzgzNiwxMTMgQEAKICAgICByZXR1cm4odGVzdF9yZXQpOwogfQogCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworI2lmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKQorICAgIGludCBtZW1fYmFzZTsKKyAgICBpbnQgcmV0X3ZhbDsKKyAgICBpbnQgdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfaW50O25fdisrKSB7CisgICAgICAgIG1lbV9iYXNlID0geG1sTWVtQmxvY2tzKCk7CisgICAgICAgIHYgPSBnZW5faW50KG5fdiwgMCk7CisKKyAgICAgICAgcmV0X3ZhbCA9IHhtbFRockRlZkluZGVudFRyZWVPdXRwdXQodik7CisgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CisgICAgICAgIGNhbGxfdGVzdHMrKzsKKyAgICAgICAgZGVzX2ludChuX3YsIHYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl92KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbl90ZXN0cysrOworI2VuZGlmCisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzKHZvaWQpIHsKKyAgICBpbnQgdGVzdF9yZXQgPSAwOworCisjaWYgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpCisgICAgaW50IG1lbV9iYXNlOworICAgIGludCByZXRfdmFsOworICAgIGludCB2OyAvKiAgKi8KKyAgICBpbnQgbl92OworCisgICAgZm9yIChuX3YgPSAwO25fdiA8IGdlbl9uYl9pbnQ7bl92KyspIHsKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKyAgICAgICAgdiA9IGdlbl9pbnQobl92LCAwKTsKKworICAgICAgICByZXRfdmFsID0geG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzKHYpOworICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOworICAgICAgICBjYWxsX3Rlc3RzKys7CisgICAgICAgIGRlc19pbnQobl92LCB2LCAwKTsKKyAgICAgICAgeG1sUmVzZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKG1lbV9iYXNlICE9IHhtbE1lbUJsb2NrcygpKSB7CisgICAgICAgICAgICBwcmludGYoIkxlYWsgb2YgJWQgYmxvY2tzIGZvdW5kIGluIHhtbFRockRlZlNhdmVOb0VtcHR5VGFncyIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl92KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbl90ZXN0cysrOworI2VuZGlmCisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCisKK3N0YXRpYyBpbnQKK3Rlc3RfeG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyh2b2lkKSB7CisgICAgaW50IHRlc3RfcmV0ID0gMDsKKworI2lmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKQorICAgIGludCBtZW1fYmFzZTsKKyAgICBjb25zdCBjaGFyICogcmV0X3ZhbDsKKyAgICBjaGFyICogdjsgLyogICovCisgICAgaW50IG5fdjsKKworICAgIGZvciAobl92ID0gMDtuX3YgPCBnZW5fbmJfY29uc3RfY2hhcl9wdHI7bl92KyspIHsKKyAgICAgICAgbWVtX2Jhc2UgPSB4bWxNZW1CbG9ja3MoKTsKKyAgICAgICAgdiA9IGdlbl9jb25zdF9jaGFyX3B0cihuX3YsIDApOworCisgICAgICAgIHJldF92YWwgPSB4bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nKChjb25zdCBjaGFyICopdik7CisgICAgICAgIGRlc3JldF9jb25zdF9jaGFyX3B0cihyZXRfdmFsKTsKKyAgICAgICAgY2FsbF90ZXN0cysrOworICAgICAgICBkZXNfY29uc3RfY2hhcl9wdHIobl92LCAoY29uc3QgY2hhciAqKXYsIDApOworICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOworICAgICAgICBpZiAobWVtX2Jhc2UgIT0geG1sTWVtQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiTGVhayBvZiAlZCBibG9ja3MgZm91bmQgaW4geG1sVGhyRGVmVHJlZUluZGVudFN0cmluZyIsCisJICAgICAgICAgICB4bWxNZW1CbG9ja3MoKSAtIG1lbV9iYXNlKTsKKwkgICAgdGVzdF9yZXQrKzsKKyAgICAgICAgICAgIHByaW50ZigiICVkIiwgbl92KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbl90ZXN0cysrOworI2VuZGlmCisKKyAgICByZXR1cm4odGVzdF9yZXQpOworfQorCiBzdGF0aWMgaW50CiB0ZXN0X3htbHNhdmUodm9pZCkgewogICAgIGludCB0ZXN0X3JldCA9IDA7CiAKLSAgICBpZiAocXVpZXQgPT0gMCkgcHJpbnRmKCJUZXN0aW5nIHhtbHNhdmUgOiA0IG9mIDEwIGZ1bmN0aW9ucyAuLi5cbiIpOworICAgIGlmIChxdWlldCA9PSAwKSBwcmludGYoIlRlc3RpbmcgeG1sc2F2ZSA6IDcgb2YgMTMgZnVuY3Rpb25zIC4uLlxuIik7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxTYXZlQ2xvc2UoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFNhdmVEb2MoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFNhdmVGbHVzaCgpOwpAQCAtMzMzMTMsNiArMzM5NTIsOSBAQAogICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sU2F2ZVRvRmQoKTsKICAgICB0ZXN0X3JldCArPSB0ZXN0X3htbFNhdmVUb0ZpbGVuYW1lKCk7CiAgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxTYXZlVHJlZSgpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dCgpOworICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sVGhyRGVmU2F2ZU5vRW1wdHlUYWdzKCk7CisgICAgdGVzdF9yZXQgKz0gdGVzdF94bWxUaHJEZWZUcmVlSW5kZW50U3RyaW5nKCk7CiAKICAgICBpZiAodGVzdF9yZXQgIT0gMCkKIAlwcmludGYoIk1vZHVsZSB4bWxzYXZlOiAlZCBlcnJvcnNcbiIsIHRlc3RfcmV0KTsKQEAgLTMzNTc1LDggKzM0MjE3LDggQEAKICAgICAgICAgYnVmZmVyID0gZ2VuX2NvbnN0X2NoYXJfcHRyKG5fYnVmZmVyLCAwKTsKICAgICAgICAgc2l6ZSA9IGdlbl9pbnQobl9zaXplLCAxKTsKICAgICAgICAgaWYgKChidWZmZXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChzaXplID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGJ1ZmZlcikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHNpemUgPiB4bWxTdHJsZW4oQkFEX0NBU1QgYnVmZmVyKSkpCisgICAgICAgICAgICBzaXplID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU2NoZW1hTmV3TWVtUGFyc2VyQ3R4dCgoY29uc3QgY2hhciAqKWJ1ZmZlciwgc2l6ZSk7CiAgICAgICAgIGRlc3JldF94bWxTY2hlbWFQYXJzZXJDdHh0UHRyKHJldF92YWwpOwpAQCAtMzQ2MjUsOSArMzUyNjcsMTEgQEAKICAgICBpbnQgdGVzdF9yZXQgPSAwOwogCiAjaWYgZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKQorICAgIGludCByZXRfdmFsOwogCiAKLSAgICAgICAgeG1sU2NoZW1hSW5pdFR5cGVzKCk7CisgICAgICAgIHJldF92YWwgPSB4bWxTY2hlbWFJbml0VHlwZXMoKTsKKyAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKICAgICAgICAgY2FsbF90ZXN0cysrOwogICAgICAgICB4bWxSZXNldExhc3RFcnJvcigpOwogICAgIGZ1bmN0aW9uX3Rlc3RzKys7CkBAIC0zNTQzNyw4ICszNjA4MSw4IEBACiAgICAgICAgIGN1ciA9IGdlbl9jb25zdF9jaGFyX3B0cihuX2N1ciwgMCk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDEpOwogICAgICAgICBpZiAoKGN1ciAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBjdXIpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgY3VyKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxDaGFyU3RybmR1cCgoY29uc3QgY2hhciAqKWN1ciwgbGVuKTsKICAgICAgICAgZGVzcmV0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtMzU4NzksOCArMzY1MjMsOCBAQAogICAgICAgICBzdHIyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fc3RyMiwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKHN0cjIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgc3RyMikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBzdHIyKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxTdHJuY2FzZWNtcCgoY29uc3QgeG1sQ2hhciAqKXN0cjEsIChjb25zdCB4bWxDaGFyICopc3RyMiwgbGVuKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKQEAgLTM1OTI4LDggKzM2NTcyLDggQEAKICAgICAgICAgc3RyMiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX3N0cjIsIDEpOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAyKTsKICAgICAgICAgaWYgKChzdHIyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIHN0cjIpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1Qgc3RyMikpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU3RybmNhdE5ldygoY29uc3QgeG1sQ2hhciAqKXN0cjEsIChjb25zdCB4bWxDaGFyICopc3RyMiwgbGVuKTsKICAgICAgICAgZGVzcmV0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtMzU5NzcsOCArMzY2MjEsOCBAQAogICAgICAgICBzdHIyID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fc3RyMiwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKHN0cjIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgc3RyMikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBzdHIyKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxTdHJuY21wKChjb25zdCB4bWxDaGFyICopc3RyMSwgKGNvbnN0IHhtbENoYXIgKilzdHIyLCBsZW4pOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwpAQCAtMzYwMjIsOCArMzY2NjYsOCBAQAogICAgICAgICBjdXIgPSBnZW5fY29uc3RfeG1sQ2hhcl9wdHIobl9jdXIsIDApOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAxKTsKICAgICAgICAgaWYgKChjdXIgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChsZW4gPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgY3VyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIGN1cikpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sU3RybmR1cCgoY29uc3QgeG1sQ2hhciAqKWN1ciwgbGVuKTsKICAgICAgICAgZGVzcmV0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtMzYxMDcsMTEgKzM2NzUxLDExIEBACiAgICAgICAgIHN0YXJ0ID0gZ2VuX2ludChuX3N0YXJ0LCAxKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMik7CiAgICAgICAgIGlmICgoc3RyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoc3RhcnQgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgc3RyKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAoc3RhcnQgPiB4bWxTdHJsZW4oQkFEX0NBU1Qgc3RyKSkpCisgICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGlmICgoc3RyICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIHN0cikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCBzdHIpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFN0cnN1YigoY29uc3QgeG1sQ2hhciAqKXN0ciwgc3RhcnQsIGxlbik7CiAgICAgICAgIGRlc3JldF94bWxDaGFyX3B0cihyZXRfdmFsKTsKQEAgLTM2Mjk3LDggKzM2OTQxLDggQEAKICAgICAgICAgdXRmID0gZ2VuX2NvbnN0X3htbENoYXJfcHRyKG5fdXRmLCAwKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMSk7CiAgICAgICAgIGlmICgodXRmICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIHV0ZikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKGxlbiA+IHhtbFN0cmxlbihCQURfQ0FTVCB1dGYpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFVURjhTdHJuZHVwKChjb25zdCB4bWxDaGFyICopdXRmLCBsZW4pOwogICAgICAgICBkZXNyZXRfeG1sQ2hhcl9wdHIocmV0X3ZhbCk7CkBAIC0zNjM3OCw4ICszNzAyMiw4IEBACiAgICAgICAgIHV0ZiA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX3V0ZiwgMCk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDEpOwogICAgICAgICBpZiAoKHV0ZiAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSB1dGYpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgdXRmKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxVVEY4U3Ryc2l6ZSgoY29uc3QgeG1sQ2hhciAqKXV0ZiwgbGVuKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKQEAgLTM2NDI0LDExICszNzA2OCwxMSBAQAogICAgICAgICBzdGFydCA9IGdlbl9pbnQobl9zdGFydCwgMSk7CiAgICAgICAgIGxlbiA9IGdlbl9pbnQobl9sZW4sIDIpOwogICAgICAgICBpZiAoKHV0ZiAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHN0YXJ0ID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIHV0ZikgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHN0YXJ0ID4geG1sU3RybGVuKEJBRF9DQVNUIHV0ZikpKQorICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBpZiAoKHV0ZiAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSB1dGYpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgdXRmKSkpCisgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgIHJldF92YWwgPSB4bWxVVEY4U3Ryc3ViKChjb25zdCB4bWxDaGFyICopdXRmLCBzdGFydCwgbGVuKTsKICAgICAgICAgZGVzcmV0X3htbENoYXJfcHRyKHJldF92YWwpOwpAQCAtNDM3NDIsMTEgKzQ0Mzg2LDExIEBACiAgICAgICAgIHN0YXJ0ID0gZ2VuX2ludChuX3N0YXJ0LCAyKTsKICAgICAgICAgbGVuID0gZ2VuX2ludChuX2xlbiwgMyk7CiAgICAgICAgIGlmICgoZGF0YSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHN0YXJ0ID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGRhdGEpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChzdGFydCA+IHhtbFN0cmxlbihCQURfQ0FTVCBkYXRhKSkpCisgICAgICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGlmICgoZGF0YSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKGxlbiA+IChpbnQpIHN0cmxlbigoY29uc3QgY2hhciAqKSBkYXRhKSArIDEpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAobGVuID4geG1sU3RybGVuKEJBRF9DQVNUIGRhdGEpKSkKKyAgICAgICAgICAgIGxlbiA9IDA7CiAKICAgICAgICAgcmV0X3ZhbCA9IHhtbFRleHRXcml0ZXJXcml0ZUJhc2U2NCh3cml0ZXIsIChjb25zdCBjaGFyICopZGF0YSwgc3RhcnQsIGxlbik7CiAgICAgICAgIGRlc3JldF9pbnQocmV0X3ZhbCk7CkBAIC00MzgwMywxMSArNDQ0NDcsMTEgQEAKICAgICAgICAgc3RhcnQgPSBnZW5faW50KG5fc3RhcnQsIDIpOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAzKTsKICAgICAgICAgaWYgKChkYXRhICE9IE5VTEwpICYmCi0gICAgICAgICAgICAoc3RhcnQgPiAoaW50KSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgZGF0YSkgKyAxKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKHN0YXJ0ID4geG1sU3RybGVuKEJBRF9DQVNUIGRhdGEpKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgaWYgKChkYXRhICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGRhdGEpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgZGF0YSkpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sVGV4dFdyaXRlcldyaXRlQmluSGV4KHdyaXRlciwgKGNvbnN0IGNoYXIgKilkYXRhLCBzdGFydCwgbGVuKTsKICAgICAgICAgZGVzcmV0X2ludChyZXRfdmFsKTsKQEAgLTQ0NzM5LDggKzQ1MzgzLDggQEAKICAgICAgICAgY29udGVudCA9IGdlbl9jb25zdF94bWxDaGFyX3B0cihuX2NvbnRlbnQsIDEpOwogICAgICAgICBsZW4gPSBnZW5faW50KG5fbGVuLCAyKTsKICAgICAgICAgaWYgKChjb250ZW50ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobGVuID4gKGludCkgc3RybGVuKChjb25zdCBjaGFyICopIGNvbnRlbnQpICsgMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIChsZW4gPiB4bWxTdHJsZW4oQkFEX0NBU1QgY29udGVudCkpKQorICAgICAgICAgICAgbGVuID0gMDsKIAogICAgICAgICByZXRfdmFsID0geG1sVGV4dFdyaXRlcldyaXRlUmF3TGVuKHdyaXRlciwgKGNvbnN0IHhtbENoYXIgKiljb250ZW50LCBsZW4pOwogICAgICAgICBkZXNyZXRfaW50KHJldF92YWwpOwpkaWZmIC0tZ2l0IGEvdGVzdGNoYXIuYyBiL3Rlc3RjaGFyLmMKaW5kZXggYmQxYThkNi4uZjRiMmY0ZiAxMDA2NDQKLS0tIGEvdGVzdGNoYXIuYworKysgYi90ZXN0Y2hhci5jCkBAIC01LDE2ICs1LDE3IEBACiAgKiBjb3B5OiBzZWUgQ29weXJpZ2h0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgc29mdHdhcmUuCiAgKi8KIAorI2RlZmluZSBYTUxfREVQUkVDQVRFRAorCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAKLSNpbmNsdWRlICJidWYuaCIKLQogaW50IGxhc3RFcnJvcjsKIAotc3RhdGljIHZvaWQgZXJyb3JIYW5kbGVyKHZvaWQgKnVudXNlZCwgeG1sRXJyb3JQdHIgZXJyKSB7CitzdGF0aWMgdm9pZCBlcnJvckhhbmRsZXIodm9pZCAqdW51c2VkLCBjb25zdCB4bWxFcnJvciAqZXJyKSB7CiAgICAgaWYgKCh1bnVzZWQgPT0gTlVMTCkgJiYgKGVyciAhPSBOVUxMKSAmJiAobGFzdEVycm9yID09IDApKSB7CiAgICAgICAgIGxhc3RFcnJvciA9IGVyci0+Y29kZTsKICAgICB9CkBAIC0yNjAsMTkgKzI2MSw1NSBAQAogICAgIHJldHVybih0ZXN0X3JldCk7CiB9CiAKLXN0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworc3RhdGljIGludAordGVzdEN1cnJlbnRDaGFyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgaW50ICpsZW4pIHsKKyAgICBjb25zdCB4bWxDaGFyICpvbGRjdXI7CisgICAgaW50IGMsIGVyciwgbGVuMjsKKworICAgIGxhc3RFcnJvciA9IDA7CisgICAgYyA9IHhtbEN1cnJlbnRDaGFyKGN0eHQsIGxlbik7CisgICAgY3R4dC0+aW5wdXQtPmZsYWdzID0gMDsKKyAgICBlcnIgPSBsYXN0RXJyb3I7CisKKyAgICBvbGRjdXIgPSBjdHh0LT5pbnB1dC0+Y3VyOworICAgIGxhc3RFcnJvciA9IDA7CisgICAgeG1sTmV4dENoYXIoY3R4dCk7CisgICAgY3R4dC0+aW5wdXQtPmZsYWdzID0gMDsKKyAgICBsZW4yID0gY3R4dC0+aW5wdXQtPmN1ciAtIG9sZGN1cjsKKyAgICBjdHh0LT5pbnB1dC0+Y3VyID0gb2xkY3VyOworCisgICAgaWYgKCgqY3R4dC0+aW5wdXQtPmN1ciAhPSAwKSAmJiAoZXJyICE9IGxhc3RFcnJvcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bWxDdXJyZW50Q2hhciBhbmQgeG1sTmV4dENoYXIgcmVwb3J0IGRpZmZlcmVudCAiCisgICAgICAgICAgICAgICAgImVycm9yczogJWQgJWRcbiIsIGVyciwgbGFzdEVycm9yKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9PSAwKSAmJiAoKmxlbiAhPSBsZW4yKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhtbEN1cnJlbnRDaGFyIGFuZCB4bWxOZXh0Q2hhciByZXBvcnQgZGlmZmVyZW50ICIKKyAgICAgICAgICAgICAgICAibGVuZ3RoczogJWQgJWRcbiIsICpsZW4sIGxlbjIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGxhc3RFcnJvciA9IGVycjsKKworICAgIHJldHVybihjKTsKK30KKworc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTEoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CiAgICAgaW50IGkgPSAwOwogICAgIGludCBsZW4sIGM7CisgICAgY2hhciAqZGF0YSA9IChjaGFyICopIGN0eHQtPmlucHV0LT5jdXI7CiAKICAgICBkYXRhWzFdID0gMDsKICAgICBkYXRhWzJdID0gMDsKICAgICBkYXRhWzNdID0gMDsKICAgICBmb3IgKGkgPSAwO2kgPD0gMHhGRjtpKyspIHsKICAgICAgICAgZGF0YVswXSA9IChjaGFyKSBpOwotCWN0eHQtPmNoYXJzZXQgPSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4OworICAgICAgICBjdHh0LT5uYkVycm9ycyA9IDA7CiAKLQlsYXN0RXJyb3IgPSAwOwotICAgICAgICBjID0geG1sQ3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgICAgICAgIGMgPSB0ZXN0Q3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgICAgICAgIGlmIChjIDwgMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCWlmICgoaSA9PSAwKSB8fCAoaSA+PSAweDgwKSkgewogCSAgICAvKiB3ZSBtdXN0IHNlZSBhbiBlcnJvciB0aGVyZSAqLwogCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CkBAIC0yOTMsOSArMzMwLDEwIEBACiAgICAgcmV0dXJuKDApOwogfQogCi1zdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGUyKHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgewogICAgIGludCBpLCBqOwogICAgIGludCBsZW4sIGM7CisgICAgY2hhciAqZGF0YSA9IChjaGFyICopIGN0eHQtPmlucHV0LT5jdXI7CiAKICAgICBkYXRhWzJdID0gMDsKICAgICBkYXRhWzNdID0gMDsKQEAgLTMwMywxMCArMzQxLDExIEBACiAJZm9yIChqID0gMDtqIDw9IDB4RkY7aisrKSB7CiAJICAgIGRhdGFbMF0gPSAoY2hhcikgaTsKIAkgICAgZGF0YVsxXSA9IChjaGFyKSBqOwotCSAgICBjdHh0LT5jaGFyc2V0ID0gWE1MX0NIQVJfRU5DT0RJTkdfVVRGODsKKyAgICAgICAgICAgIGN0eHQtPm5iRXJyb3JzID0gMDsKIAotCSAgICBsYXN0RXJyb3IgPSAwOwotCSAgICBjID0geG1sQ3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgICAgICAgICAgICBjID0gdGVzdEN1cnJlbnRDaGFyKGN0eHQsICZsZW4pOworICAgICAgICAgICAgaWYgKGMgPCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAJICAgIC8qIGlmIGZpcnN0IGJpdCBvZiBmaXJzdCBjaGFyIGlzIHNldCwgdGhlbiBzZWNvbmQgYml0IG11c3QgdG9vICovCiAJICAgIGlmICgoaSAmIDB4ODApICYmICgoaSAmIDB4NDApID09IDApKSB7CkBAIC0zODAsMTAgKzQxOSwxMSBAQAogICAgIHJldHVybigwKTsKIH0KIAotc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTMoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CitzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKICAgICBpbnQgaSwgaiwgaywgSzsKICAgICBpbnQgbGVuLCBjOwogICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKKyAgICBjaGFyICpkYXRhID0gKGNoYXIgKikgY3R4dC0+aW5wdXQtPmN1cjsKICAgICBpbnQgdmFsdWU7CiAKICAgICBkYXRhWzNdID0gMDsKQEAgLTM5NSwxMCArNDM1LDExIEBACiAJSyA9IGxvd3Nba107CiAJZGF0YVsyXSA9IChjaGFyKSBLOwogCXZhbHVlID0gKEsgJiAweDNGKSArICgoaiAmIDB4M0YpIDw8IDYpICsgKChpICYgMHhGKSA8PCAxMik7Ci0JY3R4dC0+Y2hhcnNldCA9IFhNTF9DSEFSX0VOQ09ESU5HX1VURjg7CisgICAgICAgIGN0eHQtPm5iRXJyb3JzID0gMDsKIAotCWxhc3RFcnJvciA9IDA7Ci0JYyA9IHhtbEN1cnJlbnRDaGFyKGN0eHQsICZsZW4pOworICAgICAgICBjID0gdGVzdEN1cnJlbnRDaGFyKGN0eHQsICZsZW4pOworICAgICAgICBpZiAoYyA8IDApCisgICAgICAgICAgICBjb250aW51ZTsKIAogCS8qCiAJICogaWYgZm91cnRoIGJpdCBvZiBmaXJzdCBjaGFyIGlzIHNldCwgdGhlbiB0aGUgc2VxdWVuY2Ugd291bGQgbmVlZApAQCAtNDQwLDEwICs0ODEsOSBAQAogCX0KIAogICAgICAgICAvKgotCSAqIFRoZXJlIGFyZSB2YWx1ZXMgaW4gdGhhdCByYW5nZSB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiBYTUwtMS4wCisJICogVGhlcmUgYXJlIHZhbHVlcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiBVVEYtOAogCSAqLwotCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKLQkgICAgICAgICAoKHZhbHVlID4gMHhGRkZEKSAmJiAodmFsdWUgPDB4MTAwMDApKSkgeworCWVsc2UgaWYgKCh2YWx1ZSA+IDB4RDdGRikgJiYgKHZhbHVlIDwweEUwMDApKSB7CiAJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIDB4JTA0WCBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCkBAIC00NzcsMTAgKzUxNywxMSBAQAogICAgIHJldHVybigwKTsKIH0KIAotc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CitzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlNCh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKICAgICBpbnQgaSwgaiwgaywgSywgbCwgTDsKICAgICBpbnQgbGVuLCBjOwogICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKKyAgICBjaGFyICpkYXRhID0gKGNoYXIgKikgY3R4dC0+aW5wdXQtPmN1cjsKICAgICBpbnQgdmFsdWU7CiAKICAgICBkYXRhWzRdID0gMDsKQEAgLTQ5NiwxMCArNTM3LDExIEBACiAJZGF0YVszXSA9IChjaGFyKSBMOwogCXZhbHVlID0gKEwgJiAweDNGKSArICgoSyAmIDB4M0YpIDw8IDYpICsgKChqICYgMHgzRikgPDwgMTIpICsKIAkgICAgICAgICgoaSAmIDB4NykgPDwgMTgpOwotCWN0eHQtPmNoYXJzZXQgPSBYTUxfQ0hBUl9FTkNPRElOR19VVEY4OworICAgICAgICBjdHh0LT5uYkVycm9ycyA9IDA7CiAKLQlsYXN0RXJyb3IgPSAwOwotCWMgPSB4bWxDdXJyZW50Q2hhcihjdHh0LCAmbGVuKTsKKyAgICAgICAgYyA9IHRlc3RDdXJyZW50Q2hhcihjdHh0LCAmbGVuKTsKKyAgICAgICAgaWYgKGMgPCAwKQorICAgICAgICAgICAgY29udGludWU7CiAKIAkvKgogCSAqIGlmIGZpZnRoIGJpdCBvZiBmaXJzdCBjaGFyIGlzIHNldCwgdGhlbiB0aGUgc2VxdWVuY2Ugd291bGQgbmVlZApAQCAtNTQyLDEwICs1ODQsOSBAQAogCX0KIAogICAgICAgICAvKgotCSAqIFRoZXJlIGFyZSB2YWx1ZXMgaW4gdGhhdCByYW5nZSB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiBYTUwtMS4wCisJICogVGhlcmUgYXJlIHZhbHVlcyBpbiB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiBVVEYtOAogCSAqLwotCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKLQkgICAgICAgICAoKHZhbHVlID4gMHhGRkZEKSAmJiAodmFsdWUgPDB4MTAwMDApKSB8fAorCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8IDB4RTAwMCkpIHx8CiAJCSAodmFsdWUgPiAweDEwRkZGRikpIHsKIAkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgewogCQlmcHJpbnRmKHN0ZGVyciwKQEAgLTYyOSwxNiArNjcwLDE2IEBACiAKICAgICBwcmludGYoInRlc3RpbmcgY2hhciByYW5nZTogMSIpOwogICAgIGZmbHVzaChzdGRvdXQpOwotICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMShjdHh0LCBkYXRhKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTEoY3R4dCk7CiAgICAgcHJpbnRmKCIgMiIpOwogICAgIGZmbHVzaChzdGRvdXQpOwotICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMihjdHh0LCBkYXRhKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTIoY3R4dCk7CiAgICAgcHJpbnRmKCIgMyIpOwogICAgIGZmbHVzaChzdGRvdXQpOwotICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMyhjdHh0LCBkYXRhKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTMoY3R4dCk7CiAgICAgcHJpbnRmKCIgNCIpOwogICAgIGZmbHVzaChzdGRvdXQpOwotICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlNChjdHh0LCBkYXRhKTsKKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTQoY3R4dCk7CiAgICAgcHJpbnRmKCIgZG9uZVxuIik7CiAgICAgZmZsdXNoKHN0ZG91dCk7CiAKQEAgLTY0Nyw2ICs2ODgsMTk3IEBACiAgICAgcmV0dXJuKHRlc3RfcmV0KTsKIH0KIAorc3RhdGljIGludAordGVzdFVzZXJFbmNvZGluZyh2b2lkKSB7CisgICAgLyoKKyAgICAgKiBDcmVhdGUgYSBkb2N1bWVudCBlbmNvZGVkIGFzIFVURi0xNkxFIHdpdGggYW4gSVNPLTg4NTktMSBlbmNvZGluZworICAgICAqIGRlY2xhcmF0aW9uLCB0aGVuIHBhcnNlIGl0IHdpdGggeG1sUmVhZE1lbW9yeSBhbmQgdGhlIGVuY29kaW5nCisgICAgICogYXJndW1lbnQgc2V0IHRvIFVURi0xNkxFLgorICAgICAqLworICAgIHhtbERvY1B0ciBkb2MgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J0lTTy04ODU5LTEnPz48ZD4iOworICAgIGNvbnN0IGNoYXIgKmVuZCA9ICI8L2Q+IjsKKyAgICBjaGFyICpidWYgPSBOVUxMOworICAgIHhtbENoYXIgKnRleHQ7CisgICAgaW50IHN0YXJ0U2l6ZSA9IHN0cmxlbihzdGFydCk7CisgICAgaW50IHRleHRTaXplID0gMTAwMDAwOyAvKiBNYWtlIHN1cmUgdG8gZXhjZWVkIGludGVybmFsIGJ1ZmZlciBzaXplcy4gKi8KKyAgICBpbnQgZW5kU2l6ZSA9IHN0cmxlbihlbmQpOworICAgIGludCB0b3RhbFNpemUgPSBzdGFydFNpemUgKyB0ZXh0U2l6ZSArIGVuZFNpemU7CisgICAgaW50IGsgPSAwOworICAgIGludCBpOworICAgIGludCByZXQgPSAxOworCisgICAgYnVmID0geG1sTWFsbG9jKDIgKiB0b3RhbFNpemUpOworICAgIGZvciAoaSA9IDA7IHN0YXJ0W2ldICE9IDA7IGkrKykgeworICAgICAgICBidWZbaysrXSA9IHN0YXJ0W2ldOworICAgICAgICBidWZbaysrXSA9IDA7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0U2l6ZTsgaSsrKSB7CisgICAgICAgIGJ1ZltrKytdID0gJ3gnOworICAgICAgICBidWZbaysrXSA9IDA7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGVuZFtpXSAhPSAwOyBpKyspIHsKKyAgICAgICAgYnVmW2srK10gPSBlbmRbaV07CisgICAgICAgIGJ1ZltrKytdID0gMDsKKyAgICB9CisKKyAgICBkb2MgPSB4bWxSZWFkTWVtb3J5KGJ1ZiwgMiAqIHRvdGFsU2l6ZSwgTlVMTCwgIlVURi0xNkxFIiwgMCk7CisgICAgaWYgKGRvYyA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIHBhcnNlIGRvY3VtZW50XG4iKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICB0ZXh0ID0gZG9jLT5jaGlsZHJlbi0+Y2hpbGRyZW4tPmNvbnRlbnQ7CisgICAgZm9yIChpID0gMDsgaSA8IHRleHRTaXplOyBpKyspIHsKKyAgICAgICAgaWYgKHRleHRbaV0gIT0gJ3gnKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRleHQgbm9kZSBoYXMgd3JvbmcgY29udGVudCBhdCBvZmZzZXQgJWRcbiIsIGspOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IDA7CisKK2Vycm9yOgorICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICB4bWxGcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gcmV0OworfQorCisjaWYgZGVmaW5lZChMSUJYTUxfUFVTSF9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9PVVRQVVRfRU5BQkxFRCkKKworc3RhdGljIGNoYXIgKgorY29udmVydCh4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXIsIGNvbnN0IGNoYXIgKnV0ZjgsIGludCBzaXplLAorICAgICAgICBpbnQgKm91dFNpemUpIHsKKyAgICBjaGFyICpyZXQ7CisgICAgaW50IGlubGVuOworICAgIGludCByZXM7CisKKyAgICBpbmxlbiA9IHNpemU7CisgICAgKm91dFNpemUgPSBzaXplICogMjsKKyAgICByZXQgPSB4bWxNYWxsb2MoKm91dFNpemUpOworICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIHJlcyA9IGhhbmRsZXItPm91dHB1dChCQURfQ0FTVCByZXQsIG91dFNpemUsIEJBRF9DQVNUIHV0ZjgsICZpbmxlbik7CisgICAgaWYgKChyZXMgPCAwKSB8fCAoaW5sZW4gIT0gc2l6ZSkpIHsKKyAgICAgICAgeG1sRnJlZShyZXQpOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuKHJldCk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RVc2VyRW5jb2RpbmdQdXNoKHZvaWQpIHsKKyAgICB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGhhbmRsZXI7CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworICAgIHhtbERvY1B0ciBkb2M7CisgICAgY2hhciBidWZbXSA9CisgICAgICAgICJceEVGXHhCQlx4QkYiCisgICAgICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdJU08tODg1OS0xJz8+XG4iCisgICAgICAgICI8ZD50ZXh0PC9kPlxuIjsKKyAgICBjaGFyICp1dGYxNjsKKyAgICBpbnQgdXRmMTZTaXplOworICAgIGludCByZXQgPSAxOworCisgICAgaGFuZGxlciA9IHhtbEdldENoYXJFbmNvZGluZ0hhbmRsZXIoWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZMRSk7CisgICAgdXRmMTYgPSBjb252ZXJ0KGhhbmRsZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAmdXRmMTZTaXplKTsKKyAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CisgICAgeG1sU3dpdGNoRW5jb2RpbmcoY3R4dCwgWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZMRSk7CisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCB1dGYxNiwgdXRmMTZTaXplLCAwKTsKKyAgICB4bWxQYXJzZUNodW5rKGN0eHQsIE5VTEwsIDAsIDEpOworICAgIGRvYyA9IGN0eHQtPm15RG9jOworCisgICAgaWYgKChkb2MgIT0gTlVMTCkgJiYKKyAgICAgICAgKGRvYy0+Y2hpbGRyZW4gIT0gTlVMTCkgJiYKKyAgICAgICAgKGRvYy0+Y2hpbGRyZW4tPmNoaWxkcmVuICE9IE5VTEwpICYmCisgICAgICAgICh4bWxTdHJjbXAoZG9jLT5jaGlsZHJlbi0+Y2hpbGRyZW4tPmNvbnRlbnQsIEJBRF9DQVNUICJ0ZXh0IikgPT0gMCkpCisgICAgICAgIHJldCA9IDA7CisKKyAgICB4bWxGcmVlRG9jKGRvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisgICAgeG1sRnJlZSh1dGYxNik7CisKKyAgICByZXR1cm4ocmV0KTsKK30KKworc3RhdGljIGludAordGVzdFVURjhDaHVua3Modm9pZCkgeworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKyAgICB4bWxDaGFyICpvdXQ7CisgICAgaW50IG91dFNpemU7CisgICAgY2hhciAqYnVmOworICAgIGludCBpOworICAgIGludCByZXQgPSAwOworCisgICAgY3R4dCA9IHhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KE5VTEwsIE5VTEwsIE5VTEwsIDAsIE5VTEwpOworCisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCAiPGQ+IiwgMywgMCk7CisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCAiXHhGMCIsIDEsIDApOworICAgIHhtbFBhcnNlQ2h1bmsoY3R4dCwgIlx4OUYiLCAxLCAwKTsKKyAgICB4bWxQYXJzZUNodW5rKGN0eHQsICJceDk4IiwgMSwgMCk7CisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCAiXHg4QSIsIDEsIDApOworICAgIHhtbFBhcnNlQ2h1bmsoY3R4dCwgIjwvZD4iLCA0LCAxKTsKKworICAgIHhtbERvY0R1bXBNZW1vcnkoY3R4dC0+bXlEb2MsICZvdXQsICZvdXRTaXplKTsKKyAgICBpZiAoc3RyY21wKChjaGFyICopIG91dCwKKyAgICAgICAgICAgICAgICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPGQ+JiN4MUY2MEE7PC9kPlxuIikgIT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCBVVEYtOCBjaHVuayB0ZXN0IDFcbiIpOworICAgICAgICByZXQgKz0gMTsKKyAgICB9CisKKyAgICB4bWxGcmVlKG91dCk7CisgICAgeG1sRnJlZURvYyhjdHh0LT5teURvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisKKyAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CisKKyAgICB4bWxQYXJzZUNodW5rKGN0eHQsICI8ZD4iLCAzLCAwKTsKKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgY2h1bmsgbG9uZ2VyIHRoYW4gWE1MX1BBUlNFUl9CSUdfQlVGRkVSX1NJWkUgKDMwMCkgZW5kaW5nCisgICAgICogd2l0aCBhbiBpbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlLgorICAgICAqLworICAgIGJ1ZiA9IHhtbE1hbGxvYygxMDAwICogMiArIDEpOworICAgIGZvciAoaSA9IDA7IGkgPCAyMDAwOyBpICs9IDIpCisgICAgICAgIG1lbWNweShidWYgKyBpLCAiXHhDRVx4QjEiLCAyKTsKKyAgICBidWZbaV0gPSAnXHhDRSc7CisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCBidWYsIDIwMDEsIDApOworICAgIHhtbEZyZWUoYnVmKTsKKworICAgIHhtbFBhcnNlQ2h1bmsoY3R4dCwgIlx4QjE8L2Q+IiwgNCwgMCk7CisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCBOVUxMLCAwLCAwKTsKKworICAgIHhtbERvY0R1bXBNZW1vcnkoY3R4dC0+bXlEb2MsICZvdXQsICZvdXRTaXplKTsKKyAgICBpZiAoc3RybmNtcCgoY2hhciAqKSBvdXQsICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPGQ+IiwgMjUpICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgVVRGLTggY2h1bmsgdGVzdCAyLTFcbiIpOworICAgICAgICByZXQgKz0gMTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZm9yIChpID0gMjU7IGkgPCAyNSArIDEwMDEgKiA3OyBpICs9IDcpIHsKKyAgICAgICAgaWYgKG1lbWNtcChvdXQgKyBpLCAiJiN4M0IxOyIsIDcpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIFVURi04IGNodW5rIHRlc3QgMi0yICVkXG4iLCBpKTsKKyAgICAgICAgICAgIHJldCArPSAxOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RyY21wKChjaGFyICopIG91dCArIGksICI8L2Q+XG4iKSAhPSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIFVURi04IGNodW5rIHRlc3QgMi0zXG4iKTsKKyAgICAgICAgcmV0ICs9IDE7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCitlcnJvcjoKKyAgICB4bWxGcmVlKG91dCk7CisgICAgeG1sRnJlZURvYyhjdHh0LT5teURvYyk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisKKyAgICByZXR1cm4ocmV0KTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNlbmRpZgorCiBpbnQgbWFpbih2b2lkKSB7CiAKICAgICBpbnQgcmV0ID0gMDsKQEAgLTY2OSwxNCArOTAxLDE1IEBACiAgICAgICovCiAgICAgcmV0ICs9IHRlc3RDaGFyUmFuZ2VzKCk7CiAgICAgcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlcygpOworICAgIHJldCArPSB0ZXN0VXNlckVuY29kaW5nKCk7CisjaWYgZGVmaW5lZChMSUJYTUxfUFVTSF9FTkFCTEVEKSAmJiBkZWZpbmVkKExJQlhNTF9PVVRQVVRfRU5BQkxFRCkKKyAgICByZXQgKz0gdGVzdFVzZXJFbmNvZGluZ1B1c2goKTsKKyAgICByZXQgKz0gdGVzdFVURjhDaHVua3MoKTsKKyNlbmRpZgogCiAgICAgLyoKICAgICAgKiBDbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgWE1MIGxpYnJhcnkuCiAgICAgICovCiAgICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIC8qCi0gICAgICogdGhpcyBpcyB0byBkZWJ1ZyBtZW1vcnkgZm9yIHJlZ3Jlc3Npb24gdGVzdHMKLSAgICAgKi8KLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAgICAgcmV0dXJuKHJldCA/IDEgOiAwKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RkaWN0LmMgYi90ZXN0ZGljdC5jCmluZGV4IDQwYmViZDAuLmZmYmJjOTQgMTAwNjQ0Ci0tLSBhL3Rlc3RkaWN0LmMKKysrIGIvdGVzdGRpY3QuYwpAQCAtMSw3ICsxLDE5IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9kaWN0Lmg+CiAKKworLyoqKiogZGljdGlvbmFyeSB0ZXN0cyAqKioqLworCisjaWZkZWYgX19jbGFuZ19fCisgICNkZWZpbmUgQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIgXAorICAgIF9fYXR0cmlidXRlX18gKChub19zYW5pdGl6ZSgidW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyIpKSkgXAorICAgIF9fYXR0cmlidXRlX18gKChub19zYW5pdGl6ZSgidW5zaWduZWQtc2hpZnQtYmFzZSIpKSkKKyNlbHNlCisgICNkZWZpbmUgQVRUUklCVVRFX05PX1NBTklUSVpFX0lOVEVHRVIKKyNlbmRpZgorCiAvKiAjZGVmaW5lIFdJVEhfUFJJTlQgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKnNlZWRzMVtdID0gewpAQCAtMjIsOTkgKzM0LDcxIEBACiAgICBOVUxMCiB9OwogCi0jZGVmaW5lIE5CX1NUUklOR1NfTlMgMTAwCi0jZGVmaW5lIE5CX1NUUklOR1NfTUFYIDEwMDAwCisjZGVmaW5lIE5CX1NUUklOR1NfTUFYIDEwMDAwMAorI2RlZmluZSBOQl9TVFJJTkdTX05TICAxMDAwMAorI2RlZmluZSBOQl9TVFJJTkdTX1BSRUZJWCAoTkJfU1RSSU5HU19OUyAvIDIwKQogI2RlZmluZSBOQl9TVFJJTkdTX01JTiAxMAogCi1zdGF0aWMgeG1sQ2hhciAqc3RyaW5nczFbTkJfU1RSSU5HU19NQVhdOwotc3RhdGljIHhtbENoYXIgKnN0cmluZ3MyW05CX1NUUklOR1NfTUFYXTsKLXN0YXRpYyBjb25zdCB4bWxDaGFyICp0ZXN0MVtOQl9TVFJJTkdTX01BWF07Ci1zdGF0aWMgY29uc3QgeG1sQ2hhciAqdGVzdDJbTkJfU1RSSU5HU19NQVhdOworc3RhdGljIHhtbENoYXIgKipzdHJpbmdzMTsKK3N0YXRpYyB4bWxDaGFyICoqc3RyaW5nczI7CitzdGF0aWMgY29uc3QgeG1sQ2hhciAqKnRlc3QxOworc3RhdGljIGNvbnN0IHhtbENoYXIgKip0ZXN0MjsKIHN0YXRpYyBpbnQgbmJFcnJvcnMgPSAwOwogCi1zdGF0aWMgdm9pZCBmaWxsX3N0cmluZ3Modm9pZCkgeworc3RhdGljIHZvaWQKK2ZpbGxfc3RyaW5nX3Bvb2woeG1sQ2hhciAqKnN0cmluZ3MsIGNvbnN0IGNoYXIgKipzZWVkcykgewogICAgIGludCBpLCBqLCBrOworICAgIGludCBzdGFydF9ucyA9IE5CX1NUUklOR1NfTUFYIC0gTkJfU1RSSU5HU19OUzsKIAogICAgIC8qCiAgICAgICogVGhhdCdzIGEgYml0IG5hc3R5IGJ1dCB0aGUgb3V0cHV0IGlzIGZpbmUgYW5kIGl0IGRvZXNuJ3QgdGFrZSBob3VycwogICAgICAqIHRoZXJlIGlzIGEgc21hbGwgYnV0IHN1ZmZpY2llbnQgbnVtYmVyIG9mIGR1cGxpY2F0ZXMsIGFuZCB3ZSBoYXZlCiAgICAgICogIjp4eHgiIGFuZCBmdWxsIFFOYW1lcyBpbiB0aGUgbGFzdCBOQl9TVFJJTkdTX05TIHZhbHVlcwogICAgICAqLwotICAgIGZvciAoaSA9IDA7IHNlZWRzMVtpXSAhPSBOVUxMOyBpKyspIHsKLSAgICAgICAgc3RyaW5nczFbaV0gPSB4bWxTdHJkdXAoKGNvbnN0IHhtbENoYXIgKikgc2VlZHMxW2ldKTsKLQlpZiAoc3RyaW5nczFbaV0gPT0gTlVMTCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkgd2hpbGUgZ2VuZXJhdGluZyBzdHJpbmdzMVxuIik7CisgICAgZm9yIChpID0gMDsgc2VlZHNbaV0gIT0gTlVMTDsgaSsrKSB7CisgICAgICAgIHN0cmluZ3NbaV0gPSB4bWxTdHJkdXAoKGNvbnN0IHhtbENoYXIgKikgc2VlZHNbaV0pOworCWlmIChzdHJpbmdzW2ldID09IE5VTEwpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGdlbmVyYXRpbmcgc3RyaW5nc1xuIik7CiAJICAgIGV4aXQoMSk7CiAJfQogICAgIH0KLSAgICBmb3IgKGogPSAwLCBrID0gMDtpIDwgTkJfU1RSSU5HU19NQVggLSBOQl9TVFJJTkdTX05TO2krKyxqKyspIHsKLSAgICAgICAgc3RyaW5nczFbaV0gPSB4bWxTdHJuY2F0TmV3KHN0cmluZ3MxW2pdLCBzdHJpbmdzMVtrXSwgLTEpOwotCWlmIChzdHJpbmdzMVtpXSA9PSBOVUxMKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeSB3aGlsZSBnZW5lcmF0aW5nIHN0cmluZ3MxXG4iKTsKKyAgICBmb3IgKGogPSAwLCBrID0gMDsgaSA8IHN0YXJ0X25zOyBpKyspIHsKKyAgICAgICAgc3RyaW5nc1tpXSA9IHhtbFN0cm5jYXROZXcoc3RyaW5nc1tqXSwgc3RyaW5nc1trXSwgLTEpOworCWlmIChzdHJpbmdzW2ldID09IE5VTEwpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGdlbmVyYXRpbmcgc3RyaW5nc1xuIik7CiAJICAgIGV4aXQoMSk7CiAJfQorICAgICAgICBpZiAoeG1sU3RybGVuKHN0cmluZ3NbaV0pID4gMzApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIyMjICVzICVzXG4iLCBzdHJpbmdzW3N0YXJ0X25zK2pdLCBzdHJpbmdzW2tdKTsKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KKyAgICAgICAgaisrOwogCWlmIChqID49IDUwKSB7CiAJICAgIGogPSAwOwogCSAgICBrKys7CiAJfQogICAgIH0KLSAgICBmb3IgKGogPSAwOyAoaiA8IDUwKSAmJiAoaSA8IE5CX1NUUklOR1NfTUFYKTsgaSsrLCBqKz0yKSB7Ci0gICAgICAgIHN0cmluZ3MxW2ldID0geG1sU3RybmNhdE5ldyhzdHJpbmdzMVtqXSwgKGNvbnN0IHhtbENoYXIgKikgIjoiLCAtMSk7Ci0JaWYgKHN0cmluZ3MxW2ldID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGdlbmVyYXRpbmcgc3RyaW5nczFcbiIpOworICAgIGZvciAoaiA9IDAsIGsgPSAwOyAoaiA8IE5CX1NUUklOR1NfUFJFRklYKSAmJiAoaSA8IE5CX1NUUklOR1NfTUFYKTsKKyAgICAgICAgIGkrKywgaisrKSB7CisgICAgICAgIHN0cmluZ3NbaV0gPSB4bWxTdHJuY2F0TmV3KHN0cmluZ3Nba10sIChjb25zdCB4bWxDaGFyICopICI6IiwgLTEpOworCWlmIChzdHJpbmdzW2ldID09IE5VTEwpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGdlbmVyYXRpbmcgc3RyaW5nc1xuIik7CiAJICAgIGV4aXQoMSk7CiAJfQorICAgICAgICBrICs9IDE7CisgICAgICAgIGlmIChrID49IHN0YXJ0X25zKSBrID0gMDsKICAgICB9Ci0gICAgZm9yIChqID0gTkJfU1RSSU5HU19NQVggLSBOQl9TVFJJTkdTX05TLCBrID0gMDsKLSAgICAgICAgIGkgPCBOQl9TVFJJTkdTX01BWDtpKyssaisrKSB7Ci0gICAgICAgIHN0cmluZ3MxW2ldID0geG1sU3RybmNhdE5ldyhzdHJpbmdzMVtqXSwgc3RyaW5nczFba10sIC0xKTsKLQlpZiAoc3RyaW5nczFbaV0gPT0gTlVMTCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkgd2hpbGUgZ2VuZXJhdGluZyBzdHJpbmdzMVxuIik7CisgICAgZm9yIChqID0gMCwgayA9IDA7IGkgPCBOQl9TVFJJTkdTX01BWDsgaSsrKSB7CisgICAgICAgIHN0cmluZ3NbaV0gPSB4bWxTdHJuY2F0TmV3KHN0cmluZ3Nbc3RhcnRfbnMral0sIHN0cmluZ3Nba10sIC0xKTsKKwlpZiAoc3RyaW5nc1tpXSA9PSBOVUxMKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeSB3aGlsZSBnZW5lcmF0aW5nIHN0cmluZ3NcbiIpOwogCSAgICBleGl0KDEpOwogCX0KLQlrICs9IDM7Ci0JaWYgKGsgPj0gNTApIGsgPSAwOworICAgICAgICBqKys7CisgICAgICAgIGlmIChqID49IE5CX1NUUklOR1NfUFJFRklYKSBqID0gMDsKKwlrICs9IDU7CisgICAgICAgIGlmIChrID49IHN0YXJ0X25zKSBrID0gMDsKICAgICB9Ci0KLSAgICAvKgotICAgICAqIE5vdyBkbyB0aGUgc2FtZSB3aXRoIHRoZSBzZWNvbmQgcG9vbCBvZiBzdHJpbmdzCi0gICAgICovCi0gICAgZm9yIChpID0gMDsgc2VlZHMyW2ldICE9IE5VTEw7IGkrKykgewotICAgICAgICBzdHJpbmdzMltpXSA9IHhtbFN0cmR1cCgoY29uc3QgeG1sQ2hhciAqKSBzZWVkczJbaV0pOwotCWlmIChzdHJpbmdzMltpXSA9PSBOVUxMKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeSB3aGlsZSBnZW5lcmF0aW5nIHN0cmluZ3MyXG4iKTsKLQkgICAgZXhpdCgxKTsKLQl9Ci0gICAgfQotICAgIGZvciAoaiA9IDAsIGsgPSAwO2kgPCBOQl9TVFJJTkdTX01BWCAtIE5CX1NUUklOR1NfTlM7aSsrLGorKykgewotICAgICAgICBzdHJpbmdzMltpXSA9IHhtbFN0cm5jYXROZXcoc3RyaW5nczJbal0sIHN0cmluZ3MyW2tdLCAtMSk7Ci0JaWYgKHN0cmluZ3MyW2ldID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGdlbmVyYXRpbmcgc3RyaW5nczJcbiIpOwotCSAgICBleGl0KDEpOwotCX0KLQlpZiAoaiA+PSA1MCkgewotCSAgICBqID0gMDsKLQkgICAgaysrOwotCX0KLSAgICB9Ci0gICAgZm9yIChqID0gMDsgKGogPCA1MCkgJiYgKGkgPCBOQl9TVFJJTkdTX01BWCk7IGkrKywgais9MikgewotICAgICAgICBzdHJpbmdzMltpXSA9IHhtbFN0cm5jYXROZXcoc3RyaW5nczJbal0sIChjb25zdCB4bWxDaGFyICopICI6IiwgLTEpOwotCWlmIChzdHJpbmdzMltpXSA9PSBOVUxMKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeSB3aGlsZSBnZW5lcmF0aW5nIHN0cmluZ3MyXG4iKTsKLQkgICAgZXhpdCgxKTsKLQl9Ci0gICAgfQotICAgIGZvciAoaiA9IE5CX1NUUklOR1NfTUFYIC0gTkJfU1RSSU5HU19OUywgayA9IDA7Ci0gICAgICAgICBpIDwgTkJfU1RSSU5HU19NQVg7aSsrLGorKykgewotICAgICAgICBzdHJpbmdzMltpXSA9IHhtbFN0cm5jYXROZXcoc3RyaW5nczJbal0sIHN0cmluZ3MyW2tdLCAtMSk7Ci0JaWYgKHN0cmluZ3MyW2ldID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGdlbmVyYXRpbmcgc3RyaW5nczJcbiIpOwotCSAgICBleGl0KDEpOwotCX0KLQlrICs9IDM7Ci0JaWYgKGsgPj0gNTApIGsgPSAwOwotICAgIH0KLQogfQogCiAjaWZkZWYgV0lUSF9QUklOVApAQCAtMTQ2LDcgKzEzMCw4IEBACiAvKgogICogVGhpcyB0ZXN0cyB0aGUgc3ViLWRpY3Rpb25hcnkgc3VwcG9ydAogICovCi1zdGF0aWMgaW50IHJ1bl90ZXN0Mih4bWxEaWN0UHRyIHBhcmVudCkgeworc3RhdGljIGludAordGVzdF9zdWJkaWN0KHhtbERpY3RQdHIgcGFyZW50KSB7CiAgICAgaW50IGksIGo7CiAgICAgeG1sRGljdFB0ciBkaWN0OwogICAgIGludCByZXQgPSAwOwpAQCAtMTU5LDcgKzE0NCw4IEBACiAJZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5IHdoaWxlIGNyZWF0aW5nIHN1Yi1kaWN0aW9uYXJ5XG4iKTsKIAlleGl0KDEpOwogICAgIH0KLSAgICBtZW1zZXQodGVzdDIsIDAsIHNpemVvZih0ZXN0MikpOworICAgIC8qIENhc3QgdG8gYXZvaWQgYnVnZ3kgd2FybmluZyBvbiBNU1ZDLiAqLworICAgIG1lbXNldCgodm9pZCAqKSB0ZXN0MiwgMCwgc2l6ZW9mKHRlc3QyKSk7CiAKICAgICAvKgogICAgICAqIEZpbGwgaW4gTkJfU1RSSU5HU19NSU4sIGF0IHRoaXMgcG9pbnQgdGhlIGRpY3Rpb25hcnkgc2hvdWxkIG5vdCBncm93CkBAIC0zMDksMjAgKzI5NSwxNiBAQAogLyoKICAqIFRlc3QgYSBzaW5nbGUgZGljdGlvbmFyeQogICovCi1zdGF0aWMgaW50IHJ1bl90ZXN0MSh2b2lkKSB7CitzdGF0aWMgaW50Cit0ZXN0X2RpY3QoeG1sRGljdCAqZGljdCkgewogICAgIGludCBpLCBqOwotICAgIHhtbERpY3RQdHIgZGljdDsKICAgICBpbnQgcmV0ID0gMDsKICAgICB4bWxDaGFyIHByZWZpeFs0MF07CiAgICAgeG1sQ2hhciAqY3VyLCAqcHJlZjsKICAgICBjb25zdCB4bWxDaGFyICp0bXA7CiAKLSAgICBkaWN0ID0geG1sRGljdENyZWF0ZSgpOwotICAgIGlmIChkaWN0ID09IE5VTEwpIHsKLQlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkgd2hpbGUgY3JlYXRpbmcgZGljdGlvbmFyeVxuIik7Ci0JZXhpdCgxKTsKLSAgICB9Ci0gICAgbWVtc2V0KHRlc3QxLCAwLCBzaXplb2YodGVzdDEpKTsKKyAgICAvKiBDYXN0IHRvIGF2b2lkIGJ1Z2d5IHdhcm5pbmcgb24gTVNWQy4gKi8KKyAgICBtZW1zZXQoKHZvaWQgKikgdGVzdDEsIDAsIHNpemVvZih0ZXN0MSkpOwogCiAgICAgLyoKICAgICAgKiBGaWxsIGluIE5CX1NUUklOR1NfTUlOLCBhdCB0aGlzIHBvaW50IHRoZSBkaWN0aW9uYXJ5IHNob3VsZCBub3QgZ3JvdwpAQCAtNDE2LDI5ICszOTgsNDI2IEBACiAJfQogICAgIH0KIAotICAgIHJ1bl90ZXN0MihkaWN0KTsKLQotICAgIHhtbERpY3RGcmVlKGRpY3QpOwogICAgIHJldHVybihyZXQpOwogfQogCi1pbnQgbWFpbih2b2lkKQotewotICAgIGludCByZXQ7CitzdGF0aWMgaW50Cit0ZXN0YWxsX2RpY3Qodm9pZCkgeworICAgIHhtbERpY3RQdHIgZGljdDsKKyAgICBpbnQgcmV0ID0gMDsKIAotICAgIExJQlhNTF9URVNUX1ZFUlNJT04KLSAgICBmaWxsX3N0cmluZ3MoKTsKKyAgICBzdHJpbmdzMSA9IHhtbE1hbGxvYyhOQl9TVFJJTkdTX01BWCAqIHNpemVvZihzdHJpbmdzMVswXSkpOworICAgIG1lbXNldChzdHJpbmdzMSwgMCwgTkJfU1RSSU5HU19NQVggKiBzaXplb2Yoc3RyaW5nczFbMF0pKTsKKyAgICBzdHJpbmdzMiA9IHhtbE1hbGxvYyhOQl9TVFJJTkdTX01BWCAqIHNpemVvZihzdHJpbmdzMlswXSkpOworICAgIG1lbXNldChzdHJpbmdzMiwgMCwgTkJfU1RSSU5HU19NQVggKiBzaXplb2Yoc3RyaW5nczJbMF0pKTsKKyAgICB0ZXN0MSA9IHhtbE1hbGxvYyhOQl9TVFJJTkdTX01BWCAqIHNpemVvZih0ZXN0MVswXSkpOworICAgIG1lbXNldCh0ZXN0MSwgMCwgTkJfU1RSSU5HU19NQVggKiBzaXplb2YodGVzdDFbMF0pKTsKKyAgICB0ZXN0MiA9IHhtbE1hbGxvYyhOQl9TVFJJTkdTX01BWCAqIHNpemVvZih0ZXN0MlswXSkpOworICAgIG1lbXNldCh0ZXN0MiwgMCwgTkJfU1RSSU5HU19NQVggKiBzaXplb2YodGVzdDJbMF0pKTsKKworICAgIGZpbGxfc3RyaW5nX3Bvb2woc3RyaW5nczEsIHNlZWRzMSk7CisgICAgZmlsbF9zdHJpbmdfcG9vbChzdHJpbmdzMiwgc2VlZHMyKTsKICNpZmRlZiBXSVRIX1BSSU5UCiAgICAgcHJpbnRfc3RyaW5ncygpOwogI2VuZGlmCi0gICAgcmV0ID0gcnVuX3Rlc3QxKCk7Ci0gICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgIHByaW50ZigiZGljdGlvbmFyeSB0ZXN0cyBzdWNjZWVkZWQgJWQgc3RyaW5nc1xuIiwgMiAqIE5CX1NUUklOR1NfTUFYKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoImRpY3Rpb25hcnkgdGVzdHMgZmFpbGVkIHdpdGggJWQgZXJyb3JzXG4iLCBuYkVycm9ycyk7CisKKyAgICBkaWN0ID0geG1sRGljdENyZWF0ZSgpOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKwlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkgd2hpbGUgY3JlYXRpbmcgZGljdGlvbmFyeVxuIik7CisJZXhpdCgxKTsKICAgICB9CisgICAgaWYgKHRlc3RfZGljdChkaWN0KSAhPSAwKSB7CisgICAgICAgIHJldCA9IDE7CisgICAgfQorICAgIGlmICh0ZXN0X3N1YmRpY3QoZGljdCkgIT0gMCkgeworICAgICAgICByZXQgPSAxOworICAgIH0KKyAgICB4bWxEaWN0RnJlZShkaWN0KTsKKwogICAgIGNsZWFuX3N0cmluZ3MoKTsKKyAgICB4bWxGcmVlKHN0cmluZ3MxKTsKKyAgICB4bWxGcmVlKHN0cmluZ3MyKTsKKyAgICB4bWxGcmVlKHRlc3QxKTsKKyAgICB4bWxGcmVlKHRlc3QyKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqKiogSGFzaCB0YWJsZSB0ZXN0cyAqKioqLworCitzdGF0aWMgdW5zaWduZWQKK3JuZ19zdGF0ZVsyXSA9IHsgMTIzLCA0NTYgfTsKKworI2RlZmluZSBIQVNIX1JPTCh4LG4pICgoeCkgPDwgKG4pIHwgKCh4KSAmIDB4RkZGRkZGRkYpID4+ICgzMiAtIChuKSkpCisKK0FUVFJJQlVURV9OT19TQU5JVElaRV9JTlRFR0VSCitzdGF0aWMgdW5zaWduZWQKK215X3JhbmQodW5zaWduZWQgbWF4KSB7CisgICAgdW5zaWduZWQgczAgPSBybmdfc3RhdGVbMF07CisgICAgdW5zaWduZWQgczEgPSBybmdfc3RhdGVbMV07CisgICAgdW5zaWduZWQgcmVzdWx0ID0gSEFTSF9ST0woczAgKiAweDlFMzc3OUJCLCA1KSAqIDU7CisKKyAgICBzMSBePSBzMDsKKyAgICBybmdfc3RhdGVbMF0gPSBIQVNIX1JPTChzMCwgMjYpIF4gczEgXiAoczEgPDwgOSk7CisgICAgcm5nX3N0YXRlWzFdID0gSEFTSF9ST0woczEsIDEzKTsKKworICAgIHJldHVybigocmVzdWx0ICYgMHhGRkZGRkZGRikgJSBtYXgpOworfQorCitzdGF0aWMgeG1sQ2hhciAqCitnZW5fcmFuZG9tX3N0cmluZyh4bWxDaGFyIGlkKSB7CisgICAgdW5zaWduZWQgc2l6ZSA9IG15X3JhbmQoNjQpICsgMTsKKyAgICB1bnNpZ25lZCBpZF9wb3MgPSBteV9yYW5kKHNpemUpOworICAgIHNpemVfdCBqOworCisgICAgeG1sQ2hhciAqc3RyID0geG1sTWFsbG9jKHNpemUgKyAxKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgIHN0cltqXSA9ICdhJyArIG15X3JhbmQoMjYpOworICAgIH0KKyAgICBzdHJbaWRfcG9zXSA9IGlkOworICAgIHN0cltzaXplXSA9IDA7CisKKyAgICAvKiBHZW5lcmF0ZSBRTmFtZSBpbiA3NSUgb2YgY2FzZXMgKi8KKyAgICBpZiAoc2l6ZSA+IDMgJiYgbXlfcmFuZCg0KSA+IDApIHsKKyAgICAgICAgdW5zaWduZWQgY29sb25fcG9zID0gbXlfcmFuZChzaXplIC0gMykgKyAxOworCisgICAgICAgIGlmIChjb2xvbl9wb3MgPj0gaWRfcG9zKQorICAgICAgICAgICAgY29sb25fcG9zKys7CisgICAgICAgIHN0cltjb2xvbl9wb3NdID0gJzonOworICAgIH0KKworICAgIHJldHVybiBzdHI7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB4bWxDaGFyICoqc3RyaW5nczsKKyAgICBzaXplX3QgbnVtX2VudHJpZXM7CisgICAgc2l6ZV90IG51bV9rZXlzOworICAgIHNpemVfdCBudW1fc3RyaW5nczsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgeG1sQ2hhciBpZDsKK30gU3RyaW5nUG9vbDsKKworc3RhdGljIFN0cmluZ1Bvb2wgKgorcG9vbF9uZXcoc2l6ZV90IG51bV9lbnRyaWVzLCBzaXplX3QgbnVtX2tleXMsIHhtbENoYXIgaWQpIHsKKyAgICBTdHJpbmdQb29sICpyZXQ7CisgICAgc2l6ZV90IG51bV9zdHJpbmdzOworCisgICAgcmV0ID0geG1sTWFsbG9jKHNpemVvZigqcmV0KSk7CisgICAgcmV0LT5udW1fZW50cmllcyA9IG51bV9lbnRyaWVzOworICAgIHJldC0+bnVtX2tleXMgPSBudW1fa2V5czsKKyAgICBudW1fc3RyaW5ncyA9IG51bV9lbnRyaWVzICogbnVtX2tleXM7CisgICAgcmV0LT5zdHJpbmdzID0geG1sTWFsbG9jKG51bV9zdHJpbmdzICogc2l6ZW9mKHJldC0+c3RyaW5nc1swXSkpOworICAgIG1lbXNldChyZXQtPnN0cmluZ3MsIDAsIG51bV9zdHJpbmdzICogc2l6ZW9mKHJldC0+c3RyaW5nc1swXSkpOworICAgIHJldC0+bnVtX3N0cmluZ3MgPSBudW1fc3RyaW5nczsKKyAgICByZXQtPmluZGV4ID0gMDsKKyAgICByZXQtPmlkID0gaWQ7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorcG9vbF9mcmVlKFN0cmluZ1Bvb2wgKnBvb2wpIHsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwb29sLT5udW1fc3RyaW5nczsgaSsrKSB7CisgICAgICAgIHhtbEZyZWUocG9vbC0+c3RyaW5nc1tpXSk7CisgICAgfQorICAgIHhtbEZyZWUocG9vbC0+c3RyaW5ncyk7CisgICAgeG1sRnJlZShwb29sKTsKK30KKworc3RhdGljIGludAorcG9vbF9kb25lKFN0cmluZ1Bvb2wgKnBvb2wpIHsKKyAgICByZXR1cm4gcG9vbC0+aW5kZXggPj0gcG9vbC0+bnVtX3N0cmluZ3M7Cit9CisKK3N0YXRpYyB2b2lkCitwb29sX3Jlc2V0KFN0cmluZ1Bvb2wgKnBvb2wpIHsKKyAgICBwb29sLT5pbmRleCA9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3Bvb2xfYnVsa19pbnNlcnQoU3RyaW5nUG9vbCAqcG9vbCwgeG1sSGFzaFRhYmxlUHRyIGhhc2gsIHNpemVfdCBudW0pIHsKKyAgICBzaXplX3QgaSwgajsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGZvciAoaSA9IHBvb2wtPmluZGV4LCBqID0gMDsgaSA8IHBvb2wtPm51bV9zdHJpbmdzICYmIGogPCBudW07IGorKykgeworICAgICAgICB4bWxDaGFyICpzdHJbM107CisgICAgICAgIHNpemVfdCBrOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICB4bWxDaGFyIHRtcF9rZXlbMV07CisgICAgICAgICAgICBpbnQgcmVzOworCisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcG9vbC0+bnVtX2tleXM7IGsrKykKKyAgICAgICAgICAgICAgICBzdHJba10gPSBnZW5fcmFuZG9tX3N0cmluZyhwb29sLT5pZCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG9vbC0+bnVtX2tleXMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHhtbEhhc2hBZGRFbnRyeShoYXNoLCBzdHJbMF0sIHRtcF9rZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbEhhc2hVcGRhdGVFbnRyeShoYXNoLCBzdHJbMF0sIHN0clswXSwgTlVMTCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHhtbEhhc2hBZGRFbnRyeTIoaGFzaCwgc3RyWzBdLCBzdHJbMV0sIHRtcF9rZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbEhhc2hVcGRhdGVFbnRyeTIoaGFzaCwgc3RyWzBdLCBzdHJbMV0sIHN0clswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHhtbEhhc2hBZGRFbnRyeTMoaGFzaCwgc3RyWzBdLCBzdHJbMV0sIHN0clsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICB4bWxIYXNoVXBkYXRlRW50cnkzKGhhc2gsIHN0clswXSwgc3RyWzFdLCBzdHJbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0clswXSwgTlVMTCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlcyA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHBvb2wtPm51bV9rZXlzOyBrKyspCisgICAgICAgICAgICAgICAgeG1sRnJlZShzdHJba10pOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChrID0gMDsgayA8IHBvb2wtPm51bV9rZXlzOyBrKyspCisgICAgICAgICAgICBwb29sLT5zdHJpbmdzW2krK10gPSBzdHJba107CisgICAgfQorCisgICAgcG9vbC0+aW5kZXggPSBpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB4bWxDaGFyICoKK2hhc2hfcWxvb2t1cCh4bWxIYXNoVGFibGUgKmhhc2gsIHhtbENoYXIgKipuYW1lcywgc2l6ZV90IG51bV9rZXlzKSB7CisgICAgeG1sQ2hhciAqcHJlZml4WzNdOworICAgIGNvbnN0IHhtbENoYXIgKmxvY2FsWzNdOworICAgIHhtbENoYXIgKnJlczsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgaWYgKGkgPj0gbnVtX2tleXMpIHsKKyAgICAgICAgICAgIHByZWZpeFtpXSA9IE5VTEw7CisgICAgICAgICAgICBsb2NhbFtpXSA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpuYW1lID0gbmFtZXNbaV07CisgICAgICAgICAgICBjb25zdCB4bWxDaGFyICpjb2xvbiA9IEJBRF9DQVNUIHN0cmNocigoY29uc3QgY2hhciAqKSBuYW1lLCAnOicpOworCisgICAgICAgICAgICBpZiAoY29sb24gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHByZWZpeFtpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgbG9jYWxbaV0gPSBuYW1lOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmVmaXhbaV0gPSB4bWxTdHJuZHVwKG5hbWUsIGNvbG9uIC0gbmFtZSk7CisgICAgICAgICAgICAgICAgbG9jYWxbaV0gPSAmY29sb25bMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXMgPSB4bWxIYXNoUUxvb2t1cDMoaGFzaCwgcHJlZml4WzBdLCBsb2NhbFswXSwgcHJlZml4WzFdLCBsb2NhbFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4WzJdLCBsb2NhbFsyXSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICB4bWxGcmVlKHByZWZpeFtpXSk7CisKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50Citwb29sX2J1bGtfbG9va3VwKFN0cmluZ1Bvb2wgKnBvb2wsIHhtbEhhc2hUYWJsZVB0ciBoYXNoLCBzaXplX3QgbnVtLAorICAgICAgICAgICAgICAgICBpbnQgZXhpc3RpbmcpIHsKKyAgICBzaXplX3QgaSwgajsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGZvciAoaSA9IHBvb2wtPmluZGV4LCBqID0gMDsgaSA8IHBvb2wtPm51bV9zdHJpbmdzICYmIGogPCBudW07IGorKykgeworICAgICAgICB4bWxDaGFyICoqc3RyID0gJnBvb2wtPnN0cmluZ3NbaV07CisgICAgICAgIGludCBxOworCisgICAgICAgIGZvciAocSA9IDA7IHEgPCAyOyBxKyspIHsKKyAgICAgICAgICAgIHhtbENoYXIgKnJlcyA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChxKSB7CisgICAgICAgICAgICAgICAgcmVzID0gaGFzaF9xbG9va3VwKGhhc2gsIHN0ciwgcG9vbC0+bnVtX2tleXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvb2wtPm51bV9rZXlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHhtbEhhc2hMb29rdXAoaGFzaCwgc3RyWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB4bWxIYXNoTG9va3VwMihoYXNoLCBzdHJbMF0sIHN0clsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0geG1sSGFzaExvb2t1cDMoaGFzaCwgc3RyWzBdLCBzdHJbMV0sIHN0clsyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChleGlzdGluZykgeworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gc3RyWzBdKQorICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGkgKz0gcG9vbC0+bnVtX2tleXM7CisgICAgfQorCisgICAgcG9vbC0+aW5kZXggPSBpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Bvb2xfYnVsa19yZW1vdmUoU3RyaW5nUG9vbCAqcG9vbCwgeG1sSGFzaFRhYmxlUHRyIGhhc2gsIHNpemVfdCBudW0pIHsKKyAgICBzaXplX3QgaSwgajsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGZvciAoaSA9IHBvb2wtPmluZGV4LCBqID0gMDsgaSA8IHBvb2wtPm51bV9zdHJpbmdzICYmIGogPCBudW07IGorKykgeworICAgICAgICB4bWxDaGFyICoqc3RyID0gJnBvb2wtPnN0cmluZ3NbaV07CisgICAgICAgIGludCByZXMgPSAtMTsKKworICAgICAgICBzd2l0Y2ggKHBvb2wtPm51bV9rZXlzKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmVzID0geG1sSGFzaFJlbW92ZUVudHJ5KGhhc2gsIHN0clswXSwgTlVMTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmVzID0geG1sSGFzaFJlbW92ZUVudHJ5MihoYXNoLCBzdHJbMF0sIHN0clsxXSwgTlVMTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmVzID0geG1sSGFzaFJlbW92ZUVudHJ5MyhoYXNoLCBzdHJbMF0sIHN0clsxXSwgc3RyWzJdLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgICAgIHJldCA9IC0xOworCisgICAgICAgIGkgKz0gcG9vbC0+bnVtX2tleXM7CisgICAgfQorCisgICAgcG9vbC0+aW5kZXggPSBpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaGFzaChzaXplX3QgbnVtX2VudHJpZXMsIHNpemVfdCBudW1fa2V5cywgaW50IHVzZV9kaWN0KSB7CisgICAgeG1sRGljdCAqZGljdCA9IE5VTEw7CisgICAgeG1sSGFzaFRhYmxlICpoYXNoOworICAgIFN0cmluZ1Bvb2wgKnBvb2wxLCAqcG9vbDI7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiAodXNlX2RpY3QpIHsKKyAgICAgICAgZGljdCA9IHhtbERpY3RDcmVhdGUoKTsKKyAgICAgICAgaGFzaCA9IHhtbEhhc2hDcmVhdGVEaWN0KDAsIGRpY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIGhhc2ggPSB4bWxIYXNoQ3JlYXRlKDApOworICAgIH0KKyAgICBwb29sMSA9IHBvb2xfbmV3KG51bV9lbnRyaWVzLCBudW1fa2V5cywgJzEnKTsKKyAgICBwb29sMiA9IHBvb2xfbmV3KG51bV9lbnRyaWVzLCBudW1fa2V5cywgJzInKTsKKworICAgIC8qIEluc2VydCBhbGwgc3RyaW5ncyBmcm9tIHBvb2wyIGFuZCBhYm91dCBoYWxmIG9mIHBvb2wxLiAqLworICAgIHdoaWxlICghcG9vbF9kb25lKHBvb2wyKSkgeworICAgICAgICBpZiAocG9vbF9idWxrX2luc2VydChwb29sMSwgaGFzaCwgbXlfcmFuZCg1MCkpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9vbDE6IGhhc2ggaW5zZXJ0IGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChwb29sX2J1bGtfaW5zZXJ0KHBvb2wyLCBoYXNoLCBteV9yYW5kKDEwMCkpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9vbDE6IGhhc2ggaW5zZXJ0IGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgZXhpc3RpbmcgZW50cmllcyAqLworICAgIHBvb2xfcmVzZXQocG9vbDIpOworICAgIGlmIChwb29sX2J1bGtfbG9va3VwKHBvb2wyLCBoYXNoLCBwb29sMi0+bnVtX2VudHJpZXMsIDEpICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwb29sMjogaGFzaCBsb29rdXAgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgICAvKiBSZW1vdmUgYWxsIHN0cmluZ3MgZnJvbSBwb29sMiBhbmQgaW5zZXJ0IHRoZSByZXN0IG9mIHBvb2wxLiAqLworICAgIHBvb2xfcmVzZXQocG9vbDIpOworICAgIHdoaWxlICghcG9vbF9kb25lKHBvb2wxKSB8fCAhcG9vbF9kb25lKHBvb2wyKSkgeworICAgICAgICBpZiAocG9vbF9idWxrX2luc2VydChwb29sMSwgaGFzaCwgbXlfcmFuZCg1MCkpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9vbDE6IGhhc2ggaW5zZXJ0IGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChwb29sX2J1bGtfcmVtb3ZlKHBvb2wyLCBoYXNoLCBteV9yYW5kKDEwMCkpICE9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9vbDI6IGhhc2ggcmVtb3ZlIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgZXhpc3RpbmcgZW50cmllcyAqLworICAgIHBvb2xfcmVzZXQocG9vbDEpOworICAgIGlmIChwb29sX2J1bGtfbG9va3VwKHBvb2wxLCBoYXNoLCBwb29sMS0+bnVtX2VudHJpZXMsIDEpICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwb29sMTogaGFzaCBsb29rdXAgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgICAvKiBDaGVjayByZW1vdmVkIGVudHJpZXMgKi8KKyAgICBwb29sX3Jlc2V0KHBvb2wyKTsKKyAgICBpZiAocG9vbF9idWxrX2xvb2t1cChwb29sMiwgaGFzaCwgcG9vbDItPm51bV9lbnRyaWVzLCAwKSAhPSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9vbDI6IGhhc2ggbG9va3VwIHN1Y2NlZWRlZCB1bmV4cGVjdGVkbHlcbiIpOworICAgICAgICByZXQgPSAxOworICAgIH0KKworICAgIHBvb2xfZnJlZShwb29sMSk7CisgICAgcG9vbF9mcmVlKHBvb2wyKTsKKyAgICB4bWxIYXNoRnJlZShoYXNoLCBOVUxMKTsKKyAgICB4bWxEaWN0RnJlZShkaWN0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RhbGxfaGFzaCh2b2lkKSB7CisgICAgc2l6ZV90IG51bV9rZXlzOworCisgICAgZm9yIChudW1fa2V5cyA9IDE7IG51bV9rZXlzIDw9IDM7IG51bV9rZXlzKyspIHsKKyAgICAgICAgc2l6ZV90IG51bV9zdHJpbmdzOworICAgICAgICBzaXplX3QgbWF4X3N0cmluZ3MgPSBudW1fa2V5cyA9PSAxID8gMTAwMDAwIDogMTAwMDsKKworICAgICAgICBmb3IgKG51bV9zdHJpbmdzID0gMTA7IG51bV9zdHJpbmdzIDw9IG1heF9zdHJpbmdzOyBudW1fc3RyaW5ncyAqPSAxMCkgeworICAgICAgICAgICAgc2l6ZV90IHJlcHMsIGk7CisKKyAgICAgICAgICAgIHJlcHMgPSAxMDAwIC8gbnVtX3N0cmluZ3M7CisgICAgICAgICAgICBpZiAocmVwcyA9PSAwKQorICAgICAgICAgICAgICAgIHJlcHMgPSAxOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVwczsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRlc3RfaGFzaChudW1fc3RyaW5ncywgbnVtX2tleXMsIC8qIHVzZV9kaWN0ICovIDApICE9IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRlc3RfaGFzaChudW1fc3RyaW5ncywgbnVtX2tleXMsIC8qIHVzZV9kaWN0ICovIDEpICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKDApOworfQorCisKKy8qKioqIG1haW4gKioqKi8KKworaW50CittYWluKHZvaWQpIHsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIExJQlhNTF9URVNUX1ZFUlNJT04KKworICAgIGlmICh0ZXN0YWxsX2RpY3QoKSAhPSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZGljdGlvbmFyeSB0ZXN0cyBmYWlsZWRcbiIpOworICAgICAgICByZXQgPSAxOworICAgIH0KKyAgICBpZiAodGVzdGFsbF9oYXNoKCkgIT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImhhc2ggdGVzdHMgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisKICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgeG1sTWVtb3J5RHVtcCgpOwogICAgIHJldHVybihyZXQpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdGxpbWl0cy5jIGIvdGVzdGxpbWl0cy5jCmluZGV4IDBiMDQ1ZWEuLjc4ZDYyZmIgMTAwNjQ0Ci0tLSBhL3Rlc3RsaW1pdHMuYworKysgYi90ZXN0bGltaXRzLmMKQEAgLTEwLDE2ICsxMCwxMCBAQAogICogZGFuaWVsQHZlaWxsYXJkLmNvbQogICovCiAKLSNpbmNsdWRlICJsaWJ4bWwuaCIKICNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWYgIWRlZmluZWQoX1dJTjMyKQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KQEAgLTQwMiw3ICszOTYsNyBAQAogc3RhdGljIGNoYXIgdGVzdEVycm9yc1szMjc2OV07CiBzdGF0aWMgaW50IHRlc3RFcnJvcnNTaXplID0gMDsKIAotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiBjaGFubmVsKHZvaWQgKmN0eCAgQVRUUklCVVRFX1VOVVNFRCwgY29uc3QgY2hhciAqbXNnLCAuLi4pIHsKICAgICB2YV9saXN0IGFyZ3M7CiAgICAgaW50IHJlczsKQEAgLTQ4MSw3ICs0NzUsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotdGVzdFN0cnVjdHVyZWRFcnJvckhhbmRsZXIodm9pZCAqY3R4ICBBVFRSSUJVVEVfVU5VU0VELCB4bWxFcnJvclB0ciBlcnIpIHsKK3Rlc3RTdHJ1Y3R1cmVkRXJyb3JIYW5kbGVyKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCB4bWxFcnJvciAqZXJyKSB7CiAgICAgY2hhciAqZmlsZSA9IE5VTEw7CiAgICAgaW50IGxpbmUgPSAwOwogICAgIGludCBjb2RlID0gLTE7CkBAIC02NjQsOSArNjU4LDYgQEAKIAogc3RhdGljIHZvaWQKIGluaXRpYWxpemVMaWJ4bWwyKHZvaWQpIHsKLSAgICB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSA9IDA7Ci0gICAgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0KDApOwotCiAgICAgeG1sTWVtU2V0dXAoeG1sTWVtRnJlZSwgeG1sTWVtTWFsbG9jLCB4bWxNZW1SZWFsbG9jLCB4bWxNZW1vcnlTdHJkdXApOwogICAgIHhtbEluaXRQYXJzZXIoKTsKICAgICB4bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcih0ZXN0RXh0ZXJuYWxFbnRpdHlMb2FkZXIpOwpAQCAtMTExNyw3ICsxMTA4LDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhIHdhcm5pbmcgbWVzc2FnZXMsIGdpdmVzIGZpbGUsIGxpbmUsIHBvc2l0aW9uIGFuZAogICogZXh0cmEgcGFyYW1ldGVycy4KICAqLwotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiB3YXJuaW5nQ2FsbGJhY2sodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnIEFUVFJJQlVURV9VTlVTRUQsIC4uLikKIHsKQEAgLTExMzQsNyArMTEyNSw3IEBACiAgKiBEaXNwbGF5IGFuZCBmb3JtYXQgYSBlcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwgcG9zaXRpb24gYW5kCiAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIGVycm9yQ2FsbGJhY2sodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKm1zZyBBVFRSSUJVVEVfVU5VU0VELAogICAgICAgICAgICAgICAuLi4pCiB7CkBAIC0xMTUxLDcgKzExNDIsNyBAQAogICogRGlzcGxheSBhbmQgZm9ybWF0IGEgZmF0YWxFcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwgcG9zaXRpb24gYW5kCiAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIGZhdGFsRXJyb3JDYWxsYmFjayh2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cgQVRUUklCVVRFX1VOVVNFRCwgLi4uKQogewpAQCAtMTI2MSwxOSArMTI1MiwxNSBAQAogICAgIGludCByZXMgPSAwOwogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKICAgICB4bWxEb2NQdHIgZG9jOwotICAgIHhtbFNBWEhhbmRsZXJQdHIgb2xkX3NheDsKIAogICAgIG5iX3Rlc3RzKys7CiAKICAgICBtYXhsZW4gPSBsaW1pdDsKLSAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgIGN0eHQgPSB4bWxOZXdTQVhQYXJzZXJDdHh0KGNhbGxiYWNrU0FYMkhhbmRsZXIsIE5VTEwpOwogICAgIGlmIChjdHh0ID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIHBhcnNlciBjb250ZXh0XG4iKTsKIAlyZXR1cm4oMSk7CiAgICAgfQotICAgIG9sZF9zYXggPSBjdHh0LT5zYXg7Ci0gICAgY3R4dC0+c2F4ID0gY2FsbGJhY2tTQVgySGFuZGxlcjsKLSAgICBjdHh0LT51c2VyRGF0YSA9IE5VTEw7CiAgICAgZG9jID0geG1sQ3R4dFJlYWRGaWxlKGN0eHQsIGZpbGVuYW1lLCBOVUxMLCBvcHRpb25zKTsKIAogICAgIGlmIChkb2MgIT0gTlVMTCkgewpAQCAtMTI5Niw3ICsxMjgzLDYgQEAKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXMgPSAwOwogICAgIH0KLSAgICBjdHh0LT5zYXggPSBvbGRfc2F4OwogICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogCiAgICAgcmV0dXJuKHJlcyk7CkBAIC0xNjMyLDcgKzE2MTgsNiBAQAogCSAgICAgICBuYl90ZXN0cywgbmJfZXJyb3JzLCBuYl9sZWFrcyk7CiAgICAgfQogICAgIHhtbENsZWFudXBQYXJzZXIoKTsKLSAgICB4bWxNZW1vcnlEdW1wKCk7CiAKICAgICByZXR1cm4ocmV0KTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RwYXJzZXIuYyBiL3Rlc3RwYXJzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjdjZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHBhcnNlci5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogdGVzdHBhcnNlci5jOiBBZGRpdGlvbmFsIHBhcnNlciB0ZXN0cworICoKKyAqIFNlZSBDb3B5cmlnaHQgZm9yIHRoZSBzdGF0dXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorCitzdGF0aWMgaW50Cit0ZXN0U3RhbmRhbG9uZVdpdGhFbmNvZGluZyh2b2lkKSB7CisgICAgeG1sRG9jUHRyIGRvYzsKKyAgICBjb25zdCBjaGFyICpzdHIgPQorICAgICAgICAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+XG4iCisgICAgICAgICI8ZG9jPjwvZG9jPlxuIjsKKyAgICBpbnQgZXJyID0gMDsKKworICAgIHhtbFJlc2V0TGFzdEVycm9yKCk7CisKKyAgICBkb2MgPSB4bWxSZWFkRG9jKEJBRF9DQVNUIHN0ciwgTlVMTCwgIlVURi04IiwgMCk7CisgICAgaWYgKGRvYyA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAieG1sUmVhZERvYyBmYWlsZWRcbiIpOworICAgICAgICBlcnIgPSAxOworICAgIH0KKyAgICB4bWxGcmVlRG9jKGRvYyk7CisKKyAgICByZXR1cm4gZXJyOworfQorCisjaWZkZWYgTElCWE1MX1BVU0hfRU5BQkxFRAorc3RhdGljIGludAordGVzdEh1Z2VQdXNoKHZvaWQpIHsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgaW50IGVyciwgaTsKKworICAgIGN0eHQgPSB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dChOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxMKTsKKworICAgIC8qCisgICAgICogUHVzaCBwYXJzZSBhIGRvY3VtZW50IGxhcmdlciB0aGFuIFhNTF9NQVhfTE9PS1VQX0xJTUlUCisgICAgICogKDEwLDAwMCwwMDAgYnl0ZXMpLiBUaGlzIG1haW5seSB0ZXN0cyB3aGV0aGVyIHNocmlua2luZyB0aGUKKyAgICAgKiBidWZmZXIgd29ya3Mgd2hlbiBwdXNoIHBhcnNpbmcuCisgICAgICovCisgICAgeG1sUGFyc2VDaHVuayhjdHh0LCAiPGRvYz4iLCA1LCAwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDAwMDsgaSsrKQorICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsICI8ZWxlbT50ZXh0PC9lbGVtPiIsIDE3LCAwKTsKKyAgICB4bWxQYXJzZUNodW5rKGN0eHQsICI8L2RvYz4iLCA2LCAxKTsKKworICAgIGVyciA9IGN0eHQtPndlbGxGb3JtZWQgPyAwIDogMTsKKyAgICB4bWxGcmVlRG9jKGN0eHQtPm15RG9jKTsKKyAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RIdWdlRW5jb2RlZENodW5rKHZvaWQpIHsKKyAgICB4bWxCdWZmZXJQdHIgYnVmOworICAgIHhtbENoYXIgKmNodW5rOworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKyAgICBpbnQgZXJyLCBpOworCisgICAgLyoKKyAgICAgKiBUZXN0IHRoZSBwdXNoIHBhcnNlciB3aXRoIGEgYnVpbHQtaW4gZW5jb2RpbmcgaGFuZGxlciBsaWtlIElTTy04ODU5LTEKKyAgICAgKiBhbmQgYSBjaHVuayBsYXJnZXIgdGhhbiB0aGUgaW5pdGlhbCBkZWNvZGVkIGJ1ZmZlciAoY3VycmVudGx5IDQgS0IpLgorICAgICAqLworICAgIGJ1ZiA9IHhtbEJ1ZmZlckNyZWF0ZSgpOworICAgIHhtbEJ1ZmZlckNhdChidWYsCisgICAgICAgICAgICBCQURfQ0FTVCAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nSVNPLTg4NTktMSc/PlxuIik7CisgICAgeG1sQnVmZmVyQ2F0KGJ1ZiwgQkFEX0NBU1QgIjxkb2M+PCEtLSAiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKQorICAgICAgICB4bWxCdWZmZXJDYXQoYnVmLCBCQURfQ0FTVCAiMDEyMzQ1Njc4OSIpOworICAgIHhtbEJ1ZmZlckNhdChidWYsIEJBRF9DQVNUICIgLS0+PC9kb2M+Iik7CisgICAgY2h1bmsgPSB4bWxCdWZmZXJEZXRhY2goYnVmKTsKKyAgICB4bWxCdWZmZXJGcmVlKGJ1Zik7CisKKyAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CisKKyAgICB4bWxQYXJzZUNodW5rKGN0eHQsIChjaGFyICopIGNodW5rLCB4bWxTdHJsZW4oY2h1bmspLCAwKTsKKyAgICB4bWxQYXJzZUNodW5rKGN0eHQsIE5VTEwsIDAsIDEpOworCisgICAgZXJyID0gY3R4dC0+d2VsbEZvcm1lZCA/IDAgOiAxOworICAgIHhtbEZyZWVEb2MoY3R4dC0+bXlEb2MpOworICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworICAgIHhtbEZyZWUoY2h1bmspOworCisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitpbnQKK21haW4odm9pZCkgeworICAgIGludCBlcnIgPSAwOworCisgICAgZXJyIHw9IHRlc3RTdGFuZGFsb25lV2l0aEVuY29kaW5nKCk7CisjaWZkZWYgTElCWE1MX1BVU0hfRU5BQkxFRAorICAgIGVyciB8PSB0ZXN0SHVnZVB1c2goKTsKKyAgICBlcnIgfD0gdGVzdEh1Z2VFbmNvZGVkQ2h1bmsoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGVycjsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHJlY3Vyc2UuYyBiL3Rlc3RyZWN1cnNlLmMKaW5kZXggZmFiYzUxMy4uNjNiNmJjNCAxMDA2NDQKLS0tIGEvdGVzdHJlY3Vyc2UuYworKysgYi90ZXN0cmVjdXJzZS5jCkBAIC0xMCwyMyArMTAsMTcgQEAKICAqIGRhbmllbEB2ZWlsbGFyZC5jb20KICAqLwogCi0jaW5jbHVkZSAibGlieG1sLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2lmICFkZWZpbmVkKF9XSU4zMikKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KIAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+Ci0jaWZkZWYgTElCWE1MX1JFQURFUl9FTkFCTEVECi0jaW5jbHVkZSA8bGlieG1sL3htbHJlYWRlci5oPgotI2VuZGlmCiAKIC8qCiAgKiBPX0JJTkFSWSBpcyBqdXN0IGZvciBXaW5kb3dzIGNvbXBhdGliaWxpdHkgLSBpZiBpdCBpc24ndCBkZWZpbmVkCkBAIC0zOCw2ICszMiw5IEBACiAjZGVmaW5lCVJEX0ZMQUdTCU9fUkRPTkxZCiAjZW5kaWYKIAorI2RlZmluZSBPUFRfU0FYICAgICAgICAgKDE8PDApCisjZGVmaW5lIE9QVF9OT19TVUJTVCAgICAoMTw8MSkKKwogdHlwZWRlZiBpbnQgKCpmdW5jdGVzdCkgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3IsIGludCBvcHRpb25zKTsKIApAQCAtNTksNyArNTYsNiBAQAogI2lmIGRlZmluZWQoX1dJTjMyKQogCiAjaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPGlvLmg+CiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0xNTgsMTcgKzE1NCw2MiBAQAogCiAjaW5jbHVkZSA8bGlieG1sL3htbElPLmg+CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpVUkw7CisgICAgY29uc3QgY2hhciAqc3RhcnQ7CisgICAgY29uc3QgY2hhciAqc2VnbWVudDsKKyAgICBjb25zdCBjaGFyICpmaW5pc2g7Cit9IHhtbEh1Z2VEb2NQYXJ0czsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnN0YXJ0ID0gIjwhRE9DVFlQRSBmb28gW1wKLTwhRU5USVRZIGYgJ3NvbWUgaW50ZXJuYWwgZGF0YSc+IFwKLTwhRU5USVRZIGUgJyZmOyZmOyc+IFwKLTwhRU5USVRZIGQgJyZlOyZlOyc+IFwKLV0+IFwKLTxmb28+IjsKK3N0YXRpYyBjb25zdCB4bWxIdWdlRG9jUGFydHMgaHVnZURvY1RhYmxlW10gPSB7CisgICAgeworICAgICAgICAidGVzdC9yZWN1cnNlL2h1Z2UueG1sIiwKIAotc3RhdGljIGNvbnN0IGNoYXIgKnNlZ21lbnQgPSAiICA8YmFyPiZlOyAmZjsgJmQ7PC9iYXI+XG4iOwotc3RhdGljIGNvbnN0IGNoYXIgKmZpbmlzaCA9ICI8L2Zvbz4iOworICAgICAgICAiPCFET0NUWVBFIGZvbyBbIgorICAgICAgICAiPCFFTEVNRU5UIGZvbyAoYmFyKik+ICIKKyAgICAgICAgIjwhRUxFTUVOVCBiYXIgKCNQQ0RBVEEpPiAiCisgICAgICAgICI8IUFUVExJU1QgYmFyIGF0dHIgQ0RBVEEgI0lNUExJRUQ+ICIKKyAgICAgICAgIjwhRU5USVRZIGEgU1lTVEVNICdnYS5lbnQnPiAiCisgICAgICAgICI8IUVOVElUWSBiIFNZU1RFTSAnZ2IuZW50Jz4gIgorICAgICAgICAiPCFFTlRJVFkgYyBTWVNURU0gJ2djLmVudCc+ICIKKyAgICAgICAgIjwhRU5USVRZIGYgJ3NvbWUgaW50ZXJuYWwgZGF0YSc+ICIKKyAgICAgICAgIjwhRU5USVRZIGUgJyZmOyZmOyc+ICIKKyAgICAgICAgIjwhRU5USVRZIGQgJyZlOyZlOyc+ICIKKyAgICAgICAgIl0+ICIKKyAgICAgICAgIjxmb28+IiwKIAorICAgICAgICAiICA8YmFyIGF0dHI9JyZlOyAmZjsgJmQ7Jz4mYTsgJmI7ICZjOyAmZTsgJmY7ICZkOzwvYmFyPlxuIgorICAgICAgICAiICA8YmFyPl8xMjM0NTY3ODlfMTIzNDU2Nzg5XzEyMzQ1Njc4OV8xMjM0NTY3ODk8L2Jhcj5cbiIKKyAgICAgICAgIiAgPGJhcj5fMTIzNDU2Nzg5XzEyMzQ1Njc4OV8xMjM0NTY3ODlfMTIzNDU2Nzg5PC9iYXI+XG4iCisgICAgICAgICIgIDxiYXI+XzEyMzQ1Njc4OV8xMjM0NTY3ODlfMTIzNDU2Nzg5XzEyMzQ1Njc4OTwvYmFyPlxuIgorICAgICAgICAiICA8YmFyPl8xMjM0NTY3ODlfMTIzNDU2Nzg5XzEyMzQ1Njc4OV8xMjM0NTY3ODk8L2Jhcj5cbiIsCisKKyAgICAgICAgIjwvZm9vPiIKKyAgICB9LAorICAgIHsKKyAgICAgICAgInRlc3QvcmVjdXJzZS9odWdlX2R0ZC5kdGQiLAorCisgICAgICAgICI8IUVMRU1FTlQgZm9vICgjUENEQVRBKT5cbiIKKyAgICAgICAgIjwhRU5USVRZIGVudCAnc3VjY2Vzcyc+XG4iCisgICAgICAgICI8IUVOVElUWSAlIGEgU1lTVEVNICdwYS5lbnQnPlxuIgorICAgICAgICAiPCFFTlRJVFkgJSBiIFNZU1RFTSAncGIuZW50Jz5cbiIKKyAgICAgICAgIjwhRU5USVRZICUgYyBTWVNURU0gJ3BjLmVudCc+XG4iCisgICAgICAgICI8IUVOVElUWSAlIGQgJzwhLS0gY29tbWVudCAtLT4nPlxuIgorICAgICAgICAiPCFFTlRJVFkgJSBlICclZDslZDsnPlxuIgorICAgICAgICAiPCFFTlRJVFkgJSBmICclZTslZTsnPlxuIiwKKworICAgICAgICAiPCFFTlRJVFkgZW50ICclYTsgJWI7ICVjOyAlZDsgJWU7ICVmOyc+XG4iCisgICAgICAgICIlYTsgJWI7ICVjOyAlZDsgJWU7ICVmO1xuIgorICAgICAgICAiPCEtLSBfMTIzNDU2Nzg5XzEyMzQ1Njc4OV8xMjM0NTY3ODlfMTIzNDU2Nzg5IC0tPlxuIgorICAgICAgICAiPCEtLSBfMTIzNDU2Nzg5XzEyMzQ1Njc4OV8xMjM0NTY3ODlfMTIzNDU2Nzg5IC0tPlxuIgorICAgICAgICAiPCEtLSBfMTIzNDU2Nzg5XzEyMzQ1Njc4OV8xMjM0NTY3ODlfMTIzNDU2Nzg5IC0tPlxuIiwKKworICAgICAgICAiIgorICAgIH0sCisgICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCB4bWxIdWdlRG9jUGFydHMgKmh1Z2VEb2NQYXJ0czsKIHN0YXRpYyBpbnQgY3Vyc2VnID0gMDsKIHN0YXRpYyBjb25zdCBjaGFyICpjdXJyZW50Owogc3RhdGljIGludCBybGVuOwpAQCAtMTc3LDE0ICsyMTgsMjIgQEAKICAqIGh1Z2VNYXRjaDoKICAqIEBVUkk6IGFuIFVSSSB0byB0ZXN0CiAgKgotICogQ2hlY2sgZm9yIGFuIGh1Z2U6IHF1ZXJ5CisgKiBDaGVjayBmb3IgYSBodWdlIHF1ZXJ5CiAgKgogICogUmV0dXJucyAxIGlmIHllcyBhbmQgMCBpZiBhbm90aGVyIElucHV0IG1vZHVsZSBzaG91bGQgYmUgdXNlZAogICovCiBzdGF0aWMgaW50CiBodWdlTWF0Y2goY29uc3QgY2hhciAqIFVSSSkgewotICAgIGlmICgoVVJJICE9IE5VTEwpICYmICghc3RybmNtcChVUkksICJodWdlOiIsIDQpKSkKLSAgICAgICAgcmV0dXJuKDEpOworICAgIGludCBpOworCisgICAgaWYgKFVSSSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBmb3IgKGkgPSAwOyBodWdlRG9jVGFibGVbaV0uVVJMOyBpKyspIHsKKyAgICAgICAgaWYgKHN0cmNtcChVUkksIGh1Z2VEb2NUYWJsZVtpXS5VUkwpID09IDApCisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgfQorCiAgICAgcmV0dXJuKDApOwogfQogCkBAIC0xOTIsMjUgKzI0MSwzNiBAQAogICogaHVnZU9wZW46CiAgKiBAVVJJOiBhbiBVUkkgdG8gdGVzdAogICoKLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGh1Z2U6IHF1ZXJ5IGhhbmRsZXIsIGluIHRoaXMgZXhhbXBsZSBzaW1wbHkKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGh1Z2UgcXVlcnkgaGFuZGxlciwgaW4gdGhpcyBleGFtcGxlIHNpbXBseQogICogdGhlIGN1cnJlbnQgcG9pbnRlci4uLgogICoKICAqIFJldHVybnMgYW4gSW5wdXQgY29udGV4dCBvciBOVUxMIGluIGNhc2Ugb3IgZXJyb3IKICAqLwogc3RhdGljIHZvaWQgKgogaHVnZU9wZW4oY29uc3QgY2hhciAqIFVSSSkgewotICAgIGlmICgoVVJJID09IE5VTEwpIHx8IChzdHJuY21wKFVSSSwgImh1Z2U6IiwgNCkpKQorICAgIGludCBpOworCisgICAgaWYgKFVSSSA9PSBOVUxMKQogICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgcmxlbiA9IHN0cmxlbihzdGFydCk7Ci0gICAgY3VycmVudCA9IHN0YXJ0OwotICAgIHJldHVybigodm9pZCAqKSBjdXJyZW50KTsKKworICAgIGZvciAoaSA9IDA7IGh1Z2VEb2NUYWJsZVtpXS5VUkw7IGkrKykgeworICAgICAgICBpZiAoc3RyY21wKFVSSSwgaHVnZURvY1RhYmxlW2ldLlVSTCkgPT0gMCkgeworICAgICAgICAgICAgaHVnZURvY1BhcnRzID0gaHVnZURvY1RhYmxlICsgaTsKKyAgICAgICAgICAgIGN1cnNlZyA9IDA7CisgICAgICAgICAgICBjdXJyZW50ID0gaHVnZURvY1BhcnRzLT5zdGFydDsKKyAgICAgICAgICAgIHJsZW4gPSBzdHJsZW4oY3VycmVudCk7CisgICAgICAgICAgICByZXR1cm4oKHZvaWQgKikgY3VycmVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIC8qKgogICogaHVnZUNsb3NlOgogICogQGNvbnRleHQ6IHRoZSByZWFkIGNvbnRleHQKICAqCi0gKiBDbG9zZSB0aGUgaHVnZTogcXVlcnkgaGFuZGxlcgorICogQ2xvc2UgdGhlIGh1Z2UgcXVlcnkgaGFuZGxlcgogICoKICAqIFJldHVybnMgMCBvciAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KQEAgLTIyMCw3ICsyODAsNyBAQAogICAgIHJldHVybigwKTsKIH0KIAotI2RlZmluZSBNQVhfTk9ERVMgMTAwMDAwMAorI2RlZmluZSBNQVhfTk9ERVMgMTAwMAogCiAvKioKICAqIGh1Z2VSZWFkOgpAQCAtMjI4LDcgKzI4OCw3IEBACiAgKiBAYnVmZmVyOiB3aGVyZSB0byBzdG9yZSBkYXRhCiAgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAogICoKLSAqIEltcGxlbWVudCBhbiBodWdlOiBxdWVyeSByZWFkLgorICogSW1wbGVtZW50IGFuIGh1Z2UgcXVlcnkgcmVhZC4KICAqCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KQEAgLTI0OCwxNSArMzA4LDExIEBACiAJbWVtY3B5KGJ1ZmZlciwgY3VycmVudCwgbGVuKTsKICAgICAgICAgY3Vyc2VnICsrOwogICAgICAgICBpZiAoY3Vyc2VnID09IE1BWF9OT0RFUykgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gICAgICAgICAgICBybGVuID0gc3RybGVuKGZpbmlzaCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gZmluaXNoOworICAgICAgICAgICAgY3VycmVudCA9IGh1Z2VEb2NQYXJ0cy0+ZmluaXNoOwogCX0gZWxzZSB7Ci0JICAgIGlmIChjdXJzZWcgJSAoTUFYX05PREVTIC8gMTApID09IDApCi0JICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi4iKTsKLSAgICAgICAgICAgIHJsZW4gPSBzdHJsZW4oc2VnbWVudCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gc2VnbWVudDsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBodWdlRG9jUGFydHMtPnNlZ21lbnQ7CiAJfQorICAgICAgICBybGVuID0gc3RybGVuKGN1cnJlbnQpOwogICAgIH0gZWxzZSB7CiAJbWVtY3B5KGJ1ZmZlciwgY3VycmVudCwgbGVuKTsKIAlybGVuIC09IGxlbjsKQEAgLTMxMCw3ICszNjYsNyBAQAogc3RhdGljIGNoYXIgdGVzdEVycm9yc1szMjc2OV07CiBzdGF0aWMgaW50IHRlc3RFcnJvcnNTaXplID0gMDsKIAotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiBjaGFubmVsKHZvaWQgKmN0eCAgQVRUUklCVVRFX1VOVVNFRCwgY29uc3QgY2hhciAqbXNnLCAuLi4pIHsKICAgICB2YV9saXN0IGFyZ3M7CiAgICAgaW50IHJlczsKQEAgLTM4OSw3ICs0NDUsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotdGVzdFN0cnVjdHVyZWRFcnJvckhhbmRsZXIodm9pZCAqY3R4ICBBVFRSSUJVVEVfVU5VU0VELCB4bWxFcnJvclB0ciBlcnIpIHsKK3Rlc3RTdHJ1Y3R1cmVkRXJyb3JIYW5kbGVyKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCB4bWxFcnJvciAqZXJyKSB7CiAgICAgY2hhciAqZmlsZSA9IE5VTEw7CiAgICAgaW50IGxpbmUgPSAwOwogICAgIGludCBjb2RlID0gLTE7CkBAIC01NzIsOSArNjI4LDYgQEAKIAogc3RhdGljIHZvaWQKIGluaXRpYWxpemVMaWJ4bWwyKHZvaWQpIHsKLSAgICB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSA9IDA7Ci0gICAgeG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0KDApOwotCiAgICAgeG1sTWVtU2V0dXAoeG1sTWVtRnJlZSwgeG1sTWVtTWFsbG9jLCB4bWxNZW1SZWFsbG9jLCB4bWxNZW1vcnlTdHJkdXApOwogICAgIHhtbEluaXRQYXJzZXIoKTsKICAgICB4bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcih0ZXN0RXh0ZXJuYWxFbnRpdHlMb2FkZXIpOwpAQCAtNTg5LDYgKzY0MiwxOSBAQAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQKK2luaXRTQVgoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgY3R4dC0+c2F4LT5zdGFydEVsZW1lbnROcyA9IE5VTEw7CisgICAgY3R4dC0+c2F4LT5lbmRFbGVtZW50TnMgPSBOVUxMOworICAgIGN0eHQtPnNheC0+c3RhcnRFbGVtZW50ID0gTlVMTDsKKyAgICBjdHh0LT5zYXgtPmVuZEVsZW1lbnQgPSBOVUxMOworICAgIGN0eHQtPnNheC0+Y2hhcmFjdGVycyA9IE5VTEw7CisgICAgY3R4dC0+c2F4LT5jZGF0YUJsb2NrID0gTlVMTDsKKyAgICBjdHh0LT5zYXgtPmlnbm9yYWJsZVdoaXRlc3BhY2UgPSBOVUxMOworICAgIGN0eHQtPnNheC0+cHJvY2Vzc2luZ0luc3RydWN0aW9uID0gTlVMTDsKKyAgICBjdHh0LT5zYXgtPmNvbW1lbnQgPSBOVUxMOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJCQkJCSoKICAqCQlGaWxlIG5hbWUgYW5kIHBhdGggdXRpbGl0aWVzCQkJCSoKQEAgLTY3NiwxOSArNzQyLDI4IEBACiByZWN1cnNpdmVEZXRlY3RUZXN0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlc3VsdCBBVFRSSUJVVEVfVU5VU0VELAogICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVyciBBVFRSSUJVVEVfVU5VU0VELAotCSAgICAgaW50IG9wdGlvbnMgQVRUUklCVVRFX1VOVVNFRCkgeworCSAgICAgaW50IG9wdGlvbnMpIHsKICAgICB4bWxEb2NQdHIgZG9jOwogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKICAgICBpbnQgcmVzID0gMDsKKyAgICAvKgorICAgICAqIFhNTF9QQVJTRV9EVERWQUxJRCBpcyB0aGUgb25seSB3YXkgdG8gbG9hZCBleHRlcm5hbCBlbnRpdGllcworICAgICAqIHdpdGhvdXQgWE1MX1BBUlNFX05PRU5ULiBUaGUgdmFsaWRhdGlvbiByZXN1bHQgZG9lc24ndCBtYXR0ZXIKKyAgICAgKiBhbnl3YXkuCisgICAgICovCisgICAgaW50IHBhcnNlck9wdGlvbnMgPSBYTUxfUEFSU0VfRFREVkFMSUQ7CiAKICAgICBuYl90ZXN0cysrOwogCiAgICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICBpZiAob3B0aW9ucyAmIE9QVF9TQVgpCisgICAgICAgIGluaXRTQVgoY3R4dCk7CisgICAgaWYgKChvcHRpb25zICYgT1BUX05PX1NVQlNUKSA9PSAwKQorICAgICAgICBwYXJzZXJPcHRpb25zIHw9IFhNTF9QQVJTRV9OT0VOVDsKICAgICAvKgogICAgICAqIGJhc2Ugb2YgdGhlIHRlc3QsIHBhcnNlIHdpdGggdGhlIG9sZCBBUEkKICAgICAgKi8KLSAgICBkb2MgPSB4bWxDdHh0UmVhZEZpbGUoY3R4dCwgZmlsZW5hbWUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERMT0FEKTsKKyAgICBkb2MgPSB4bWxDdHh0UmVhZEZpbGUoY3R4dCwgZmlsZW5hbWUsIE5VTEwsIHBhcnNlck9wdGlvbnMpOwogICAgIGlmICgoZG9jICE9IE5VTEwpIHx8IChjdHh0LT5sYXN0RXJyb3IuY29kZSAhPSBYTUxfRVJSX0VOVElUWV9MT09QKSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBkZXRlY3QgcmVjdXJzaW9uIGluICVzXG4iLCBmaWxlbmFtZSk7CiAJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CkBAIC03MTUsMTkgKzc5MCwyMyBAQAogbm90UmVjdXJzaXZlRGV0ZWN0VGVzdChjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQgQVRUUklCVVRFX1VOVVNFRCwKICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnIgQVRUUklCVVRFX1VOVVNFRCwKLQkgICAgIGludCBvcHRpb25zIEFUVFJJQlVURV9VTlVTRUQpIHsKKwkgICAgIGludCBvcHRpb25zKSB7CiAgICAgeG1sRG9jUHRyIGRvYzsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAgICAgaW50IHJlcyA9IDA7CisgICAgaW50IHBhcnNlck9wdGlvbnMgPSBYTUxfUEFSU0VfRFRETE9BRDsKIAogICAgIG5iX3Rlc3RzKys7CiAKICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgIGlmIChvcHRpb25zICYgT1BUX1NBWCkKKyAgICAgICAgaW5pdFNBWChjdHh0KTsKKyAgICBpZiAoKG9wdGlvbnMgJiBPUFRfTk9fU1VCU1QpID09IDApCisgICAgICAgIHBhcnNlck9wdGlvbnMgfD0gWE1MX1BBUlNFX05PRU5UOwogICAgIC8qCiAgICAgICogYmFzZSBvZiB0aGUgdGVzdCwgcGFyc2Ugd2l0aCB0aGUgb2xkIEFQSQogICAgICAqLwotICAgIGRvYyA9IHhtbEN0eHRSZWFkRmlsZShjdHh0LCBmaWxlbmFtZSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1BBUlNFX05PRU5UIHwgWE1MX1BBUlNFX0RURExPQUQpOworICAgIGRvYyA9IHhtbEN0eHRSZWFkRmlsZShjdHh0LCBmaWxlbmFtZSwgTlVMTCwgcGFyc2VyT3B0aW9ucyk7CiAgICAgaWYgKGRvYyA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIGNvcnJlY3QgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOwogCXhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwpAQCAtNzM5LDcgKzgxOCw2IEBACiAgICAgcmV0dXJuKHJlcyk7CiB9CiAKLSNpZmRlZiBMSUJYTUxfUkVBREVSX0VOQUJMRUQKIC8qKgogICogbm90UmVjdXJzaXZlSHVnZVRlc3Q6CiAgKiBAZmlsZW5hbWU6IHRoZSBmaWxlIHRvIHBhcnNlCkBAIC03NTUsMzIgKzgzMywxODYgQEAKIG5vdFJlY3Vyc2l2ZUh1Z2VUZXN0KGNvbnN0IGNoYXIgKmZpbGVuYW1lIEFUVFJJQlVURV9VTlVTRUQsCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVzdWx0IEFUVFJJQlVURV9VTlVTRUQsCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyIEFUVFJJQlVURV9VTlVTRUQsCi0JICAgICBpbnQgb3B0aW9ucyBBVFRSSUJVVEVfVU5VU0VEKSB7Ci0gICAgeG1sVGV4dFJlYWRlclB0ciByZWFkZXI7CisJICAgICBpbnQgb3B0aW9ucykgeworICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKyAgICB4bWxEb2NQdHIgZG9jOwogICAgIGludCByZXMgPSAwOwotICAgIGludCByZXQ7CisgICAgaW50IHBhcnNlck9wdGlvbnMgPSBYTUxfUEFSU0VfRFREVkFMSUQ7CiAKICAgICBuYl90ZXN0cysrOwogCi0gICAgcmVhZGVyID0geG1sUmVhZGVyRm9yRmlsZSgiaHVnZTp0ZXN0IiAsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfUEFSU0VfTk9FTlQgfCBYTUxfUEFSU0VfRFRETE9BRCk7Ci0gICAgaWYgKHJlYWRlciA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gaHVnZTp0ZXN0XG4iKTsKLQlyZXR1cm4oMSk7Ci0gICAgfQotICAgIHJldCA9IHhtbFRleHRSZWFkZXJSZWFkKHJlYWRlcik7Ci0gICAgd2hpbGUgKHJldCA9PSAxKSB7Ci0gICAgICAgIHJldCA9IHhtbFRleHRSZWFkZXJSZWFkKHJlYWRlcik7Ci0gICAgfQotICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZXIgaHVnZTp0ZXN0IHdpdGggZW50aXRpZXNcbiIpOworICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgaWYgKG9wdGlvbnMgJiBPUFRfU0FYKQorICAgICAgICBpbml0U0FYKGN0eHQpOworICAgIGlmICgob3B0aW9ucyAmIE9QVF9OT19TVUJTVCkgPT0gMCkKKyAgICAgICAgcGFyc2VyT3B0aW9ucyB8PSBYTUxfUEFSU0VfTk9FTlQ7CisgICAgZG9jID0geG1sQ3R4dFJlYWRGaWxlKGN0eHQsICJ0ZXN0L3JlY3Vyc2UvaHVnZS54bWwiLCBOVUxMLCBwYXJzZXJPcHRpb25zKTsKKyAgICBpZiAoZG9jID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgaHVnZS54bWxcbiIpOwogCXJlcyA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeG1sRW50aXR5UHRyIGVudDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmaXhlZF9jb3N0ID0gMjA7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxsb3dlZF9leHBhbnNpb24gPSAxMDAwMDAwOworICAgICAgICB1bnNpZ25lZCBsb25nIGZfc2l6ZSA9IHhtbFN0cmxlbihCQURfQ0FTVCAic29tZSBpbnRlcm5hbCBkYXRhIik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZV9zaXplOworICAgICAgICB1bnNpZ25lZCBsb25nIGRfc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisgICAgICAgIGVudCA9IHhtbEdldERvY0VudGl0eShkb2MsIEJBRF9DQVNUICJlIik7CisgICAgICAgIGVfc2l6ZSA9IGZfc2l6ZSAqIDIgKworICAgICAgICAgICAgICAgICB4bWxTdHJsZW4oQkFEX0NBU1QgIiZmOyIpICogMiArCisgICAgICAgICAgICAgICAgIGZpeGVkX2Nvc3QgKiAyOworICAgICAgICBpZiAoZW50LT5leHBhbmRlZFNpemUgIT0gZV9zaXplKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldyb25nIHNpemUgZm9yIGVudGl0eSBlOiAlbHUgKGV4cGVjdGVkICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGVudC0+ZXhwYW5kZWRTaXplLCBlX3NpemUpOworICAgICAgICAgICAgcmVzID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGVudCA9IHhtbEdldERvY0VudGl0eShkb2MsIEJBRF9DQVNUICJiIik7CisgICAgICAgIGlmIChlbnQtPmV4cGFuZGVkU2l6ZSAhPSBlX3NpemUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3Jvbmcgc2l6ZSBmb3IgZW50aXR5IGI6ICVsdSAoZXhwZWN0ZWQgJWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZW50LT5leHBhbmRlZFNpemUsIGVfc2l6ZSk7CisgICAgICAgICAgICByZXMgPSAxOworICAgICAgICB9CisKKyAgICAgICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGRvYywgQkFEX0NBU1QgImQiKTsKKyAgICAgICAgZF9zaXplID0gZV9zaXplICogMiArCisgICAgICAgICAgICAgICAgIHhtbFN0cmxlbihCQURfQ0FTVCAiJmU7IikgKiAyICsKKyAgICAgICAgICAgICAgICAgZml4ZWRfY29zdCAqIDI7CisgICAgICAgIGlmIChlbnQtPmV4cGFuZGVkU2l6ZSAhPSBkX3NpemUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3Jvbmcgc2l6ZSBmb3IgZW50aXR5IGQ6ICVsdSAoZXhwZWN0ZWQgJWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZW50LT5leHBhbmRlZFNpemUsIGRfc2l6ZSk7CisgICAgICAgICAgICByZXMgPSAxOworICAgICAgICB9CisKKyAgICAgICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGRvYywgQkFEX0NBU1QgImMiKTsKKyAgICAgICAgaWYgKGVudC0+ZXhwYW5kZWRTaXplICE9IGRfc2l6ZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXcm9uZyBzaXplIGZvciBlbnRpdHkgYzogJWx1IChleHBlY3RlZCAlbHUpXG4iLAorICAgICAgICAgICAgICAgICAgICBlbnQtPmV4cGFuZGVkU2l6ZSwgZF9zaXplKTsKKyAgICAgICAgICAgIHJlcyA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3R4dC0+c2l6ZWVudGNvcHkgPCBhbGxvd2VkX2V4cGFuc2lvbikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJUb3RhbCBlbnRpdHkgc2l6ZSB0b28gc21hbGw6ICVsdVxuIiwKKyAgICAgICAgICAgICAgICAgICAgY3R4dC0+c2l6ZWVudGNvcHkpOworICAgICAgICAgICAgcmVzID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsX3NpemUgPSAoZl9zaXplICsgZV9zaXplICsgZF9zaXplICsgMyAqIGZpeGVkX2Nvc3QpICoKKyAgICAgICAgICAgICAgICAgICAgIChNQVhfTk9ERVMgLSAxKSAqIDM7CisgICAgICAgIGlmIChjdHh0LT5zaXplZW50Y29weSAhPSB0b3RhbF9zaXplKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldyb25nIHRvdGFsIGVudGl0eSBzaXplOiAlbHUgKGV4cGVjdGVkICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNpemVlbnRjb3B5LCB0b3RhbF9zaXplKTsKKyAgICAgICAgICAgIHJlcyA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3R4dC0+c2l6ZWVudGl0aWVzICE9IDMwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldyb25nIHBhcnNlZCBlbnRpdHkgc2l6ZTogJWx1IChleHBlY3RlZCAlbHUpXG4iLAorICAgICAgICAgICAgICAgICAgICBjdHh0LT5zaXplZW50aXRpZXMsIDMwbHUpOworICAgICAgICAgICAgcmVzID0gMTsKKyAgICAgICAgfQogICAgIH0KLSAgICB4bWxGcmVlVGV4dFJlYWRlcihyZWFkZXIpOworCisgICAgeG1sRnJlZURvYyhkb2MpOworICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogCiAgICAgcmV0dXJuKHJlcyk7CiB9Ci0jZW5kaWYKKworLyoqCisgKiBub3RSZWN1cnNpdmVIdWdlVGVzdDoKKyAqIEBmaWxlbmFtZTogdGhlIGZpbGUgdG8gcGFyc2UKKyAqIEByZXN1bHQ6IHRoZSBmaWxlIHdpdGggZXhwZWN0ZWQgcmVzdWx0CisgKiBAZXJyOiB0aGUgZmlsZSB3aXRoIGVycm9yIG1lc3NhZ2VzOiB1bnVzZWQKKyAqCisgKiBQYXJzZSBhIG1lbW9yeSBnZW5lcmF0ZWQgZmlsZQorICogZ29vZCBjYXNlcworICoKKyAqIFJldHVybnMgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQKK2h1Z2VEdGRUZXN0KGNvbnN0IGNoYXIgKmZpbGVuYW1lIEFUVFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVyciBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgaW50IG9wdGlvbnMpIHsKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgeG1sRG9jUHRyIGRvYzsKKyAgICBpbnQgcmVzID0gMDsKKyAgICBpbnQgcGFyc2VyT3B0aW9ucyA9IFhNTF9QQVJTRV9EVERWQUxJRDsKKworICAgIG5iX3Rlc3RzKys7CisKKyAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgIGlmIChvcHRpb25zICYgT1BUX1NBWCkKKyAgICAgICAgaW5pdFNBWChjdHh0KTsKKyAgICBpZiAoKG9wdGlvbnMgJiBPUFRfTk9fU1VCU1QpID09IDApCisgICAgICAgIHBhcnNlck9wdGlvbnMgfD0gWE1MX1BBUlNFX05PRU5UOworICAgIGRvYyA9IHhtbEN0eHRSZWFkRmlsZShjdHh0LCAidGVzdC9yZWN1cnNlL2h1Z2VfZHRkLnhtbCIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlck9wdGlvbnMpOworICAgIGlmIChkb2MgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBodWdlX2R0ZC54bWxcbiIpOworCXJlcyA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmaXhlZF9jb3N0ID0gMjA7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxsb3dlZF9leHBhbnNpb24gPSAxMDAwMDAwOworICAgICAgICB1bnNpZ25lZCBsb25nIGFfc2l6ZSA9IHhtbFN0cmxlbihCQURfQ0FTVCAiPCEtLSBjb21tZW50IC0tPiIpOworICAgICAgICB1bnNpZ25lZCBsb25nIGJfc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjX3NpemU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZV9zaXplOworICAgICAgICB1bnNpZ25lZCBsb25nIGZfc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisgICAgICAgIGlmIChjdHh0LT5zaXplZW50Y29weSA8IGFsbG93ZWRfZXhwYW5zaW9uKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRvdGFsIGVudGl0eSBzaXplIHRvbyBzbWFsbDogJWx1XG4iLAorICAgICAgICAgICAgICAgICAgICBjdHh0LT5zaXplZW50Y29weSk7CisgICAgICAgICAgICByZXMgPSAxOworICAgICAgICB9CisKKyAgICAgICAgYl9zaXplID0gKGFfc2l6ZSArIHN0cmxlbigiJmE7IikgKyBmaXhlZF9jb3N0KSAqIDI7CisgICAgICAgIGNfc2l6ZSA9IChiX3NpemUgKyBzdHJsZW4oIiZiOyIpICsgZml4ZWRfY29zdCkgKiAyOworICAgICAgICAvKgorICAgICAgICAgKiBJbnRlcm5hbCBwYXJhbWV0ZXIgZW50aXRlcyBhcmUgc3Vic3RpdHVlZCBlYWdlcmx5IGFuZAorICAgICAgICAgKiBuZWVkIGRpZmZlcmVudCBhY2NvdW50aW5nLgorICAgICAgICAgKi8KKyAgICAgICAgZV9zaXplID0gYV9zaXplICogMjsKKyAgICAgICAgZl9zaXplID0gZV9zaXplICogMjsKKyAgICAgICAgdG90YWxfc2l6ZSA9IC8qIGludGVybmFsICovCisgICAgICAgICAgICAgICAgICAgICBlX3NpemUgKyBmX3NpemUgKyBmaXhlZF9jb3N0ICogNCArCisgICAgICAgICAgICAgICAgICAgICAoYV9zaXplICsgZV9zaXplICsgZl9zaXplICsgZml4ZWRfY29zdCAqIDMpICoKKyAgICAgICAgICAgICAgICAgICAgIChNQVhfTk9ERVMgLSAxKSAqIDIgKworICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZXJuYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgIChhX3NpemUgKyBiX3NpemUgKyBjX3NpemUgKyBmaXhlZF9jb3N0ICogMykgKgorICAgICAgICAgICAgICAgICAgICAgKE1BWF9OT0RFUyAtIDEpICogMiArCisgICAgICAgICAgICAgICAgICAgICAvKiBmaW5hbCByZWZlcmVuY2UgaW4gbWFpbiBkb2MgKi8KKyAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigic3VjY2VzcyIpICsgZml4ZWRfY29zdDsKKyAgICAgICAgaWYgKGN0eHQtPnNpemVlbnRjb3B5ICE9IHRvdGFsX3NpemUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3JvbmcgdG90YWwgZW50aXR5IHNpemU6ICVsdSAoZXhwZWN0ZWQgJWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgY3R4dC0+c2l6ZWVudGNvcHksIHRvdGFsX3NpemUpOworICAgICAgICAgICAgcmVzID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsX3NpemUgPSBzdHJsZW4oaHVnZURvY1BhcnRzLT5zdGFydCkgKworICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGh1Z2VEb2NQYXJ0cy0+c2VnbWVudCkgKiAoTUFYX05PREVTIC0gMSkgKworICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGh1Z2VEb2NQYXJ0cy0+ZmluaXNoKSArCisgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICogT3RoZXIgZXh0ZXJuYWwgZW50aXRpZXMgcGEuZW50LCBwYi5lbnQsIHBjLmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAqIFRoZXNlIGFyZSBjdXJyZW50bHkgY291bnRlZCB0d2ljZSBiZWNhdXNlIHRoZXkncmUKKyAgICAgICAgICAgICAgICAgICAgICAqIHVzZWQgYm90aCBpbiBEVEQgYW5kIEVudGl0eVZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAoMTYgKyA2ICsgNikgKiAyOworICAgICAgICBpZiAoY3R4dC0+c2l6ZWVudGl0aWVzICE9IHRvdGFsX3NpemUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3JvbmcgcGFyc2VkIGVudGl0eSBzaXplOiAlbHUgKGV4cGVjdGVkICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGN0eHQtPnNpemVlbnRpdGllcywgdG90YWxfc2l6ZSk7CisgICAgICAgICAgICByZXMgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgeG1sRnJlZURvYyhkb2MpOworICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworCisgICAgcmV0dXJuKHJlcyk7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgpAQCAtNzkzLDE0ICsxMDI1LDM2IEBACiAgICAgeyAiUGFyc2luZyByZWN1cnNpdmUgdGVzdCBjYXNlcyIgLAogICAgICAgcmVjdXJzaXZlRGV0ZWN0VGVzdCwgIi4vdGVzdC9yZWN1cnNlL2xvbCoueG1sIiwgTlVMTCwgTlVMTCwgTlVMTCwKICAgICAgIDAgfSwKKyAgICB7ICJQYXJzaW5nIHJlY3Vyc2l2ZSB0ZXN0IGNhc2VzIChubyBzdWJzdGl0dXRpb24pIiAsCisgICAgICByZWN1cnNpdmVEZXRlY3RUZXN0LCAiLi90ZXN0L3JlY3Vyc2UvbG9sKi54bWwiLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgT1BUX05PX1NVQlNUIH0sCisgICAgeyAiUGFyc2luZyByZWN1cnNpdmUgdGVzdCBjYXNlcyAoU0FYKSIgLAorICAgICAgcmVjdXJzaXZlRGV0ZWN0VGVzdCwgIi4vdGVzdC9yZWN1cnNlL2xvbCoueG1sIiwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgIE9QVF9TQVggfSwKKyAgICB7ICJQYXJzaW5nIHJlY3Vyc2l2ZSB0ZXN0IGNhc2VzIChTQVgsIG5vIHN1YnN0aXR1dGlvbikiICwKKyAgICAgIHJlY3Vyc2l2ZURldGVjdFRlc3QsICIuL3Rlc3QvcmVjdXJzZS9sb2wqLnhtbCIsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICBPUFRfU0FYIHwgT1BUX05PX1NVQlNUIH0sCiAgICAgeyAiUGFyc2luZyBub24tcmVjdXJzaXZlIHRlc3QgY2FzZXMiICwKICAgICAgIG5vdFJlY3Vyc2l2ZURldGVjdFRlc3QsICIuL3Rlc3QvcmVjdXJzZS9nb29kKi54bWwiLCBOVUxMLCBOVUxMLCBOVUxMLAogICAgICAgMCB9LAotI2lmZGVmIExJQlhNTF9SRUFERVJfRU5BQkxFRAorICAgIHsgIlBhcnNpbmcgbm9uLXJlY3Vyc2l2ZSB0ZXN0IGNhc2VzIChTQVgpIiAsCisgICAgICBub3RSZWN1cnNpdmVEZXRlY3RUZXN0LCAiLi90ZXN0L3JlY3Vyc2UvZ29vZCoueG1sIiwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgIE9QVF9TQVggfSwKICAgICB7ICJQYXJzaW5nIG5vbi1yZWN1cnNpdmUgaHVnZSBjYXNlIiAsCiAgICAgICBub3RSZWN1cnNpdmVIdWdlVGVzdCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKICAgICAgIDAgfSwKLSNlbmRpZgorICAgIHsgIlBhcnNpbmcgbm9uLXJlY3Vyc2l2ZSBodWdlIGNhc2UgKG5vIHN1YnN0aXR1dGlvbikiICwKKyAgICAgIG5vdFJlY3Vyc2l2ZUh1Z2VUZXN0LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgT1BUX05PX1NVQlNUIH0sCisgICAgeyAiUGFyc2luZyBub24tcmVjdXJzaXZlIGh1Z2UgY2FzZSAoU0FYKSIgLAorICAgICAgbm90UmVjdXJzaXZlSHVnZVRlc3QsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICBPUFRfU0FYIH0sCisgICAgeyAiUGFyc2luZyBub24tcmVjdXJzaXZlIGh1Z2UgY2FzZSAoU0FYLCBubyBzdWJzdGl0dXRpb24pIiAsCisgICAgICBub3RSZWN1cnNpdmVIdWdlVGVzdCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgIE9QVF9TQVggfCBPUFRfTk9fU1VCU1QgfSwKKyAgICB7ICJQYXJzaW5nIG5vbi1yZWN1cnNpdmUgaHVnZSBEVEQgY2FzZSIgLAorICAgICAgaHVnZUR0ZFRlc3QsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICAwIH0sCiAgICAge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDB9CiB9OwogCkBAIC05NTksNyArMTIxMyw2IEBACiAJICAgICAgIG5iX3Rlc3RzLCBuYl9lcnJvcnMsIG5iX2xlYWtzKTsKICAgICB9CiAgICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIHhtbE1lbW9yeUR1bXAoKTsKIAogICAgIHJldHVybihyZXQpOwogfQpkaWZmIC0tZ2l0IGEvdGhyZWFkcy5jIGIvdGhyZWFkcy5jCmluZGV4IGY0NjJlYmYuLjQ2MWY0YTUgMTAwNjQ0Ci0tLSBhL3RocmVhZHMuYworKysgYi90aHJlYWRzLmMKQEAgLTE0LDQzICsxNCw2MSBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiAjaW5jbHVkZSA8bGlieG1sL3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgotCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZWxpZiBkZWZpbmVkIEhBVkVfV0lOMzJfVEhSRUFEUwotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2lmbmRlZiBIQVZFX0NPTVBJTEVSX1RMUwotI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAorI2luY2x1ZGUgPGxpYnhtbC9jYXRhbG9nLmg+CiAjZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9CRU9TX1RIUkVBRFMKLSNpbmNsdWRlIDxPUy5oPgotI2luY2x1ZGUgPFRMUy5oPgorI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKKyNpbmNsdWRlIDxsaWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg+CisjaW5jbHVkZSA8bGlieG1sL3JlbGF4bmcuaD4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChTT0xBUklTKQogI2luY2x1ZGUgPG5vdGUuaD4KICNlbmRpZgogCi0vKiAjZGVmaW5lIERFQlVHX1RIUkVBRFMgKi8KKyNpbmNsdWRlICJwcml2YXRlL2RpY3QuaCIKKyNpbmNsdWRlICJwcml2YXRlL2VuYy5oIgorI2luY2x1ZGUgInByaXZhdGUvZ2xvYmFscy5oIgorI2luY2x1ZGUgInByaXZhdGUvbWVtb3J5LmgiCisjaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRzLmgiCisjaW5jbHVkZSAicHJpdmF0ZS94cGF0aC5oIgogCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKKyNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfVEhSRUFEUykgJiYgXAorICAgIGRlZmluZWQoX19HTElCQ19fKSAmJiBcCisgICAgX19HTElCQ19fICogMTAwICsgX19HTElCQ19NSU5PUl9fID49IDIzNAogCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18gPj0gMzAzKSAmJiBcCi0gICAgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19saW51eF9fKQorLyoKKyAqIFRoZSBtb2Rlcm4gd2F5IGF2YWlsYWJsZSBzaW5jZSBnbGliYyAyLjMyLgorICoKKyAqIFRoZSBjaGVjayBhYm92ZSBpcyBmb3IgZ2xpYmMgMi4zNCB3aGljaCBtZXJnZWQgdGhlIHB0aHJlYWQgc3ltYm9scyBpbnRvCisgKiBsaWJjLiBTaW5jZSB3ZSBzdGlsbCBhbGxvdyBsaW5raW5nIHdpdGhvdXQgcHRocmVhZCBzeW1ib2xzIChzZWUgYmVsb3cpLAorICogdGhpcyBvbmx5IHdvcmtzIGlmIHB0aHJlYWQgc3ltYm9scyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUuCisgKi8KIAotc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAtMTsKKyNpbmNsdWRlIDxzeXMvc2luZ2xlX3RocmVhZGVkLmg+CiAKLSNkZWZpbmUgWE1MX1BUSFJFQURfV0VBSworI2RlZmluZSBYTUxfSVNfVEhSRUFERUQoKSAoIV9fbGliY19zaW5nbGVfdGhyZWFkZWQpCisjZGVmaW5lIFhNTF9JU19ORVZFUl9USFJFQURFRCgpIDAKIAotI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQotI3ByYWdtYSB3ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKLSNwcmFnbWEgd2VhayBwdGhyZWFkX3NldHNwZWNpZmljCi0jcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfY3JlYXRlCi0jcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlCisjZWxpZiBkZWZpbmVkKEhBVkVfUE9TSVhfVEhSRUFEUykgJiYgXAorICAgICAgZGVmaW5lZChfX0dMSUJDX18pICYmIFwKKyAgICAgIGRlZmluZWQoX19HTlVDX18pCisKKy8qCisgKiBUaGUgdHJhZGl0aW9uYWwgd2F5IHRvIGNoZWNrIGZvciBzaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb25zIHdpdGgKKyAqIGdsaWJjIHdhcyB0byBjaGVjayB3aGV0aGVyIHRoZSBzZXBhcmF0ZSBsaWJwdGhyZWFkIGxpYnJhcnkgaXMKKyAqIGxpbmtlZCBpbi4gVGhpcyB3b3JrcyBieSBub3QgbGlua2luZyBsaWJ4bWwyIHdpdGggbGlicHRocmVhZCAoc2VlCisgKiBCQVNFX1RIUkVBRF9MSUJTIGluIGNvbmZpZ3VyZS5hYyBhbmQgTWFrZWZpbGUuYW0pIGFuZCBkZWNsYXJpbmcKKyAqIHB0aHJlYWQgZnVuY3Rpb25zIGFzIHdlYWsgc3ltYm9scy4KKyAqCisgKiBJbiBnbGliYyAyLjM0LCB0aGUgcHRocmVhZCBzeW1ib2xzIHdlcmUgbW92ZWQgZnJvbSBsaWJwdGhyZWFkIHRvIGxpYmMsCisgKiBzbyB0aGlzIGRvZXNuJ3Qgd29yayBhbnltb3JlLgorICoKKyAqIEF0IHNvbWUgcG9pbnQsIHRoaXMgbGVnYWN5IGNvZGUgYW5kIHRoZSBCQVNFX1RIUkVBRF9MSUJTIGhhY2sgaW4KKyAqIGNvbmZpZ3VyZS5hYyBjYW4gcHJvYmFibHkgYmUgcmVtb3ZlZC4KKyAqLworCiAjcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9pbml0CiAjcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9kZXN0cm95CiAjcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrCkBAIC02MCwxNyArNzgsMjAgQEAKICNwcmFnbWEgd2VhayBwdGhyZWFkX2NvbmRfd2FpdAogI3ByYWdtYSB3ZWFrIHB0aHJlYWRfZXF1YWwKICNwcmFnbWEgd2VhayBwdGhyZWFkX3NlbGYKLSNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKLSNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKICNwcmFnbWEgd2VhayBwdGhyZWFkX2NvbmRfc2lnbmFsCiAKLSNlbHNlIC8qIF9fR05VQ19fLCBfX0dMSUJDX18sIF9fbGludXhfXyAqLworI2RlZmluZSBYTUxfUFRIUkVBRF9XRUFLCisjZGVmaW5lIFhNTF9JU19USFJFQURFRCgpIGxpYnhtbF9pc190aHJlYWRlZAorI2RlZmluZSBYTUxfSVNfTkVWRVJfVEhSRUFERUQoKSAoIWxpYnhtbF9pc190aHJlYWRlZCkKIAotc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAxOworc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAtMTsKIAotI2VuZGlmIC8qIF9fR05VQ19fLCBfX0dMSUJDX18sIF9fbGludXhfXyAqLworI2Vsc2UgLyogb3RoZXIgUE9TSVggcGxhdGZvcm1zICovCiAKLSNlbmRpZiAvKiBIQVZFX1BUSFJFQURfSCAqLworI2RlZmluZSBYTUxfSVNfVEhSRUFERUQoKSAxCisjZGVmaW5lIFhNTF9JU19ORVZFUl9USFJFQURFRCgpIDAKKworI2VuZGlmCiAKIC8qCiAgKiBUT0RPOiB0aGlzIG1vZHVsZSBzdGlsbCB1c2VzIG1hbGxvYy9mcmVlIGFuZCBub3QgeG1sTWFsbG9jL3htbEZyZWUKQEAgLTc5LDI2ICsxMDAsMTAgQEAKICAqLwogCiAvKgotICogeG1sTXV0ZXggYXJlIGEgc2ltcGxlIG11dHVhbCBleGNlcHRpb24gbG9ja3MKLSAqLwotc3RydWN0IF94bWxNdXRleCB7Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBwdGhyZWFkX211dGV4X3QgbG9jazsKLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0gICAgQ1JJVElDQUxfU0VDVElPTiBjczsKLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSAgICBzZW1faWQgc2VtOwotICAgIHRocmVhZF9pZCB0aWQ7Ci0jZWxzZQotICAgIGludCBlbXB0eTsKLSNlbmRpZgotfTsKLQotLyoKICAqIHhtbFJNdXRleCBhcmUgcmVlbnRyYW50IG11dHVhbCBleGNlcHRpb24gbG9ja3MKICAqLwogc3RydWN0IF94bWxSTXV0ZXggewotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCiAgICAgcHRocmVhZF9tdXRleF90IGxvY2s7CiAgICAgdW5zaWduZWQgaW50IGhlbGQ7CiAgICAgdW5zaWduZWQgaW50IHdhaXRlcnM7CkBAIC0xMDYsNTUgKzExMSwzMSBAQAogICAgIHB0aHJlYWRfY29uZF90IGN2OwogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKICAgICBDUklUSUNBTF9TRUNUSU9OIGNzOwotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIHhtbE11dGV4UHRyIGxvY2s7Ci0gICAgdGhyZWFkX2lkIHRpZDsKLSAgICBpbnQzMiBjb3VudDsKICNlbHNlCiAgICAgaW50IGVtcHR5OwogI2VuZGlmCiB9OwogCi0vKgotICogVGhpcyBtb2R1bGUgc3RpbGwgaGFzIHNvbWUgaW50ZXJuYWwgc3RhdGljIGRhdGEuCi0gKiAgIC0geG1sTGlicmFyeUxvY2sgYSBnbG9iYWwgbG9jawotICogICAtIGdsb2JhbGtleSB1c2VkIGZvciBwZXItdGhyZWFkIGRhdGEKLSAqLwotCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLXN0YXRpYyBwdGhyZWFkX2tleV90IGdsb2JhbGtleTsKLXN0YXRpYyBwdGhyZWFkX3QgbWFpbnRocmVhZDsKLXN0YXRpYyBwdGhyZWFkX29uY2VfdCBvbmNlX2NvbnRyb2wgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLXN0YXRpYyBwdGhyZWFkX29uY2VfdCBvbmNlX2NvbnRyb2xfaW5pdCA9IFBUSFJFQURfT05DRV9JTklUOwotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnbG9iYWxfaW5pdF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0jaWYgZGVmaW5lZChIQVZFX0NPTVBJTEVSX1RMUykKLXN0YXRpYyBfX2RlY2xzcGVjKHRocmVhZCkgeG1sR2xvYmFsU3RhdGUgdGxzdGF0ZTsKLXN0YXRpYyBfX2RlY2xzcGVjKHRocmVhZCkgaW50IHRsc3RhdGVfaW5pdGVkID0gMDsKLSNlbHNlIC8qIEhBVkVfQ09NUElMRVJfVExTICovCi1zdGF0aWMgRFdPUkQgZ2xvYmFsa2V5ID0gVExTX09VVF9PRl9JTkRFWEVTOwotI2VuZGlmIC8qIEhBVkVfQ09NUElMRVJfVExTICovCi1zdGF0aWMgRFdPUkQgbWFpbnRocmVhZDsKLXN0YXRpYyBzdHJ1Y3QgewotICAgIERXT1JEIGRvbmU7Ci0gICAgTE9ORyBjb250cm9sOwotfSBydW5fb25jZSA9IHsgMCwgMH07Ci1zdGF0aWMgdm9sYXRpbGUgTFBDUklUSUNBTF9TRUNUSU9OIGdsb2JhbF9pbml0X2xvY2sgPSBOVUxMOwotCi0vKiBlbmRpZiBIQVZFX1dJTjMyX1RIUkVBRFMgKi8KLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLWludDMyIGdsb2JhbGtleSA9IDA7Ci10aHJlYWRfaWQgbWFpbnRocmVhZCA9IDA7Ci1pbnQzMiBydW5fb25jZV9pbml0ID0gMDsKLXN0YXRpYyBpbnQzMiBnbG9iYWxfaW5pdF9sb2NrID0gLTE7Ci1zdGF0aWMgdmludDMyIGdsb2JhbF9pbml0X2NvdW50ID0gMDsKLSNlbmRpZgotCiBzdGF0aWMgeG1sUk11dGV4UHRyIHhtbExpYnJhcnlMb2NrID0gTlVMTDsKIAotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotc3RhdGljIHZvaWQgeG1sT25jZUluaXQodm9pZCk7CisvKioKKyAqIHhtbEluaXRNdXRleDoKKyAqIEBtdXRleDogIHRoZSBtdXRleAorICoKKyAqIEluaXRpYWxpemUgYSBtdXRleC4KKyAqLwordm9pZAoreG1sSW5pdE11dGV4KHhtbE11dGV4UHRyIG11dGV4KQoreworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICAgIGlmIChYTUxfSVNfTkVWRVJfVEhSRUFERUQoKSA9PSAwKQorICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoJm11dGV4LT5sb2NrLCBOVUxMKTsKKyNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCisgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmbXV0ZXgtPmNzKTsKKyNlbHNlCisgICAgKHZvaWQpIG11dGV4OwogI2VuZGlmCit9CiAKIC8qKgogICogeG1sTmV3TXV0ZXg6CkBAIC0xNzEsMjcgKzE1MiwzNCBAQAogCiAgICAgaWYgKCh0b2sgPSBtYWxsb2Moc2l6ZW9mKHhtbE11dGV4KSkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkICE9IDApCi0gICAgICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmdG9rLT5sb2NrLCBOVUxMKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0gICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmdG9rLT5jcyk7Ci0jZWxpZiBkZWZpbmVkIEhBVkVfQkVPU19USFJFQURTCi0gICAgaWYgKCh0b2stPnNlbSA9IGNyZWF0ZV9zZW0oMSwgInhtbE11dGV4IikpIDwgQl9PSykgewotICAgICAgICBmcmVlKHRvayk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICB0b2stPnRpZCA9IC0xOwotI2VuZGlmCisgICAgeG1sSW5pdE11dGV4KHRvayk7CiAgICAgcmV0dXJuICh0b2spOwogfQogCiAvKioKKyAqIHhtbENsZWFudXBNdXRleDoKKyAqIEBtdXRleDogIHRoZSBzaW1wbGUgbXV0ZXgKKyAqCisgKiBSZWNsYWltIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBtdXRleC4KKyAqLwordm9pZAoreG1sQ2xlYW51cE11dGV4KHhtbE11dGV4UHRyIG11dGV4KQoreworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICAgIGlmIChYTUxfSVNfTkVWRVJfVEhSRUFERUQoKSA9PSAwKQorICAgICAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4LT5sb2NrKTsKKyNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCisgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZtdXRleC0+Y3MpOworI2Vsc2UKKyAgICAodm9pZCkgbXV0ZXg7CisjZW5kaWYKK30KKworLyoqCiAgKiB4bWxGcmVlTXV0ZXg6CiAgKiBAdG9rOiAgdGhlIHNpbXBsZSBtdXRleAogICoKLSAqIHhtbEZyZWVNdXRleCgpIGlzIHVzZWQgdG8gcmVjbGFpbSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbGlieG1sMiB0b2tlbgotICogc3RydWN0LgorICogRnJlZSBhIG11dGV4LgogICovCiB2b2lkCiB4bWxGcmVlTXV0ZXgoeG1sTXV0ZXhQdHIgdG9rKQpAQCAtMTk5LDE0ICsxODcsNyBAQAogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkICE9IDApCi0gICAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmdG9rLT5sb2NrKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0gICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZ0b2stPmNzKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSAgICBkZWxldGVfc2VtKHRvay0+c2VtKTsKLSNlbmRpZgorICAgIHhtbENsZWFudXBNdXRleCh0b2spOwogICAgIGZyZWUodG9rKTsKIH0KIApAQCAtMjIxLDE5ICsyMDIsMTUgQEAKIHsKICAgICBpZiAodG9rID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSNpZmRlZiBIQVZFX1BUSFJFQURfSAotICAgIGlmIChsaWJ4bWxfaXNfdGhyZWFkZWQgIT0gMCkKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKyAgICAvKgorICAgICAqIFRoaXMgYXNzdW1lcyB0aGF0IF9fbGliY19zaW5nbGVfdGhyZWFkZWQgd29uJ3QgY2hhbmdlIHdoaWxlIHRoZQorICAgICAqIGxvY2sgaXMgaGVsZC4KKyAgICAgKi8KKyAgICBpZiAoWE1MX0lTX1RIUkVBREVEKCkgIT0gMCkKICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZ0b2stPmxvY2spOwogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmdG9rLT5jcyk7Ci0jZWxpZiBkZWZpbmVkIEhBVkVfQkVPU19USFJFQURTCi0gICAgaWYgKGFjcXVpcmVfc2VtKHRvay0+c2VtKSAhPSBCX05PX0VSUk9SKSB7Ci0jaWZkZWYgREVCVUdfVEhSRUFEUwotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxNdXRleExvY2soKTpCZU9TOkNvdWxkbid0IGFjcXVpcmUgc2VtYXBob3JlXG4iKTsKLSNlbmRpZgotICAgIH0KLSAgICB0b2stPnRpZCA9IGZpbmRfdGhyZWFkKE5VTEwpOwogI2VuZGlmCiAKIH0KQEAgLTI0OSwxNiArMjI2LDExIEBACiB7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkICE9IDApCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgICAgaWYgKFhNTF9JU19USFJFQURFRCgpICE9IDApCiAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0b2stPmxvY2spOwogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmdG9rLT5jcyk7Ci0jZWxpZiBkZWZpbmVkIEhBVkVfQkVPU19USFJFQURTCi0gICAgaWYgKHRvay0+dGlkID09IGZpbmRfdGhyZWFkKE5VTEwpKSB7Ci0gICAgICAgIHRvay0+dGlkID0gLTE7Ci0gICAgICAgIHJlbGVhc2Vfc2VtKHRvay0+c2VtKTsKLSAgICB9CiAjZW5kaWYKIH0KIApAQCAtMjc5LDggKzI1MSw4IEBACiAKICAgICBpZiAoKHRvayA9IG1hbGxvYyhzaXplb2YoeG1sUk11dGV4KSkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkICE9IDApIHsKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKyAgICBpZiAoWE1MX0lTX05FVkVSX1RIUkVBREVEKCkgPT0gMCkgewogICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoJnRvay0+bG9jaywgTlVMTCk7CiAgICAgICAgIHRvay0+aGVsZCA9IDA7CiAgICAgICAgIHRvay0+d2FpdGVycyA9IDA7CkBAIC0yODgsMTIgKzI2MCw2IEBACiAgICAgfQogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZ0b2stPmNzKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSAgICBpZiAoKHRvay0+bG9jayA9IHhtbE5ld011dGV4KCkpID09IE5VTEwpIHsKLSAgICAgICAgZnJlZSh0b2spOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgdG9rLT5jb3VudCA9IDA7CiAjZW5kaWYKICAgICByZXR1cm4gKHRvayk7CiB9CkBAIC0zMTAsMTUgKzI3NiwxMyBAQAogewogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICi0gICAgaWYgKGxpYnhtbF9pc190aHJlYWRlZCAhPSAwKSB7CisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgICAgaWYgKFhNTF9JU19ORVZFUl9USFJFQURFRCgpID09IDApIHsKICAgICAgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZ0b2stPmxvY2spOwogICAgICAgICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmdG9rLT5jdik7CiAgICAgfQogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKICAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJnRvay0+Y3MpOwotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIHhtbEZyZWVNdXRleCh0b2stPmxvY2spOwogI2VuZGlmCiAgICAgZnJlZSh0b2spOwogfQpAQCAtMzM0LDggKzI5OCw4IEBACiB7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkID09IDApCisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgICAgaWYgKFhNTF9JU19USFJFQURFRCgpID09IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdG9rLT5sb2NrKTsKQEAgLTM1NiwxNCArMzIwLDYgQEAKICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdG9rLT5sb2NrKTsKICNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCiAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJnRvay0+Y3MpOwotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIGlmICh0b2stPmxvY2stPnRpZCA9PSBmaW5kX3RocmVhZChOVUxMKSkgewotICAgICAgICB0b2stPmNvdW50Kys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICB4bWxNdXRleExvY2sodG9rLT5sb2NrKTsKLSAgICAgICAgdG9rLT5jb3VudCA9IDE7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTM3OCw4ICszMzQsOCBAQAogewogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICi0gICAgaWYgKGxpYnhtbF9pc190aHJlYWRlZCA9PSAwKQorI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworICAgIGlmIChYTUxfSVNfVEhSRUFERUQoKSA9PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRvay0+bG9jayk7CkBAIC0zOTIsMzUgKzM0OCwxNTAgQEAKICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdG9rLT5sb2NrKTsKICNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCiAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJnRvay0+Y3MpOwotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIGlmICh0b2stPmxvY2stPnRpZCA9PSBmaW5kX3RocmVhZChOVUxMKSkgewotICAgICAgICB0b2stPmNvdW50LS07Ci0gICAgICAgIGlmICh0b2stPmNvdW50ID09IDApIHsKLSAgICAgICAgICAgIHhtbE11dGV4VW5sb2NrKHRvay0+bG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KICNlbmRpZgogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkJCSoKKyAqCQkJTGlicmFyeSB3aWRlIHRocmVhZCBpbnRlcmZhY2VzCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIHhtbEdldFRocmVhZElkOgorICoKKyAqIERFUFJFQ0FURUQ6IEludGVybmFsIGZ1bmN0aW9uLCBkbyBub3QgdXNlLgorICoKKyAqIHhtbEdldFRocmVhZElkKCkgZmluZCB0aGUgY3VycmVudCB0aHJlYWQgSUQgbnVtYmVyCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBsaWtlbHkgdG8gYmUgYnJva2VuIG9uIHNvbWUgcGxhdGZvcm1zIHVzaW5nIHB0aHJlYWRzCisgKiBhcyB0aGUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IG1hbmRhdGUgcHRocmVhZF90IHRvIGJlIGFuIGludGVnZXIgdHlwZQorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGhyZWFkIElEIG51bWJlcgorICovCitpbnQKK3htbEdldFRocmVhZElkKHZvaWQpCit7CisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgICAgcHRocmVhZF90IGlkOworICAgIGludCByZXQ7CisKKyAgICBpZiAoWE1MX0lTX1RIUkVBREVEKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICBpZCA9IHB0aHJlYWRfc2VsZigpOworICAgIC8qIGhvcnJpYmxlIGJ1dCBwcmVzZXJ2ZXMgY29tcGF0LCBzZWUgd2FybmluZyBhYm92ZSAqLworICAgIG1lbWNweSgmcmV0LCAmaWQsIHNpemVvZihyZXQpKTsKKyAgICByZXR1cm4gKHJldCk7CisjZWxpZiBkZWZpbmVkIEhBVkVfV0lOMzJfVEhSRUFEUworICAgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKyNlbHNlCisgICAgcmV0dXJuICgoaW50KSAwKTsKKyNlbmRpZgorfQorCisvKioKKyAqIHhtbExvY2tMaWJyYXJ5OgorICoKKyAqIHhtbExvY2tMaWJyYXJ5KCkgaXMgdXNlZCB0byB0YWtlIG91dCBhIHJlLWVudHJhbnQgbG9jayBvbiB0aGUgbGlieG1sMgorICogbGlicmFyeS4KKyAqLwordm9pZAoreG1sTG9ja0xpYnJhcnkodm9pZCkKK3sKKyAgICB4bWxSTXV0ZXhMb2NrKHhtbExpYnJhcnlMb2NrKTsKK30KKworLyoqCisgKiB4bWxVbmxvY2tMaWJyYXJ5OgorICoKKyAqIHhtbFVubG9ja0xpYnJhcnkoKSBpcyB1c2VkIHRvIHJlbGVhc2UgYSByZS1lbnRyYW50IGxvY2sgb24gdGhlIGxpYnhtbDIKKyAqIGxpYnJhcnkuCisgKi8KK3ZvaWQKK3htbFVubG9ja0xpYnJhcnkodm9pZCkKK3sKKyAgICB4bWxSTXV0ZXhVbmxvY2soeG1sTGlicmFyeUxvY2spOworfQorCisvKioKKyAqIHhtbEluaXRUaHJlYWRzOgorICoKKyAqIERFUFJFQ0FURUQ6IEFsaWFzIGZvciB4bWxJbml0UGFyc2VyLgorICovCit2b2lkCit4bWxJbml0VGhyZWFkcyh2b2lkKQoreworICAgIHhtbEluaXRQYXJzZXIoKTsKK30KKworLyoqCisgKiB4bWxDbGVhbnVwVGhyZWFkczoKKyAqCisgKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIGlzIGEgbm8tb3AuIENhbGwgeG1sQ2xlYW51cFBhcnNlcgorICogdG8gZnJlZSBnbG9iYWwgc3RhdGUgYnV0IHNlZSB0aGUgd2FybmluZ3MgdGhlcmUuIHhtbENsZWFudXBQYXJzZXIKKyAqIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIGF0IHByb2dyYW0gZXhpdC4gSW4gbW9zdCBjYXNlcywgeW91IGRvbid0CisgKiBoYXZlIGNhbGwgY2xlYW51cCBmdW5jdGlvbnMgYXQgYWxsLgorICovCit2b2lkCit4bWxDbGVhbnVwVGhyZWFkcyh2b2lkKQoreworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkJCSoKKyAqCQkJTGlicmFyeSB3aWRlIGluaXRpYWxpemF0aW9uCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHhtbFBhcnNlckluaXRpYWxpemVkID0gMDsKK3N0YXRpYyBpbnQgeG1sUGFyc2VySW5uZXJJbml0aWFsaXplZCA9IDA7CisKKworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnbG9iYWxfaW5pdF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCitzdGF0aWMgdm9sYXRpbGUgTFBDUklUSUNBTF9TRUNUSU9OIGdsb2JhbF9pbml0X2xvY2sgPSBOVUxMOworI2VuZGlmCisKIC8qKgogICogeG1sR2xvYmFsSW5pdE11dGV4TG9jawogICoKICAqIE1ha2VzIHN1cmUgdGhhdCB0aGUgZ2xvYmFsIGluaXRpYWxpemF0aW9uIG11dGV4IGlzIGluaXRpYWxpemVkIGFuZAogICogbG9ja3MgaXQuCiAgKi8KLXZvaWQKLV9feG1sR2xvYmFsSW5pdE11dGV4TG9jayh2b2lkKQotewotICAgIC8qIE1ha2Ugc3VyZSB0aGUgZ2xvYmFsIGluaXQgbG9jayBpcyBpbml0aWFsaXplZCBhbmQgdGhlbiBsb2NrIGl0LiAqLwotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICi0gICAgLyogVGhlIG11dGV4IGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIHNvIHdlIGp1c3QgbG9jayBpdC4gKi8KK3N0YXRpYyB2b2lkCit4bWxHbG9iYWxJbml0TXV0ZXhMb2NrKHZvaWQpIHsKKyNpZmRlZiBIQVZFX1BPU0lYX1RIUkVBRFMKKwogI2lmZGVmIFhNTF9QVEhSRUFEX1dFQUsKLSAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZiAvKiBYTUxfUFRIUkVBRF9XRUFLICovCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZnbG9iYWxfaW5pdF9sb2NrKTsKKyAgICAvKgorICAgICAqIFRoaXMgaXMgc29tZXdoYXQgdW5yZWxpYWJsZSBzaW5jZSBsaWJwdGhyZWFkIGNvdWxkIGJlIGxvYWRlZAorICAgICAqIGxhdGVyIHdpdGggZGxvcGVuKCkgYW5kIHRocmVhZHMgY291bGQgYmUgY3JlYXRlZC4gQnV0IGl0J3MKKyAgICAgKiBsb25nLXN0YW5kaW5nIGJlaGF2aW9yIGFuZCBoYXJkIHRvIHdvcmsgYXJvdW5kLgorICAgICAqLworICAgIGlmIChsaWJ4bWxfaXNfdGhyZWFkZWQgPT0gLTEpCisgICAgICAgIGxpYnhtbF9pc190aHJlYWRlZCA9CisgICAgICAgICAgICAocHRocmVhZF9tdXRleF9pbml0ICE9IE5VTEwpICYmCisgICAgICAgICAgICAocHRocmVhZF9tdXRleF9kZXN0cm95ICE9IE5VTEwpICYmCisgICAgICAgICAgICAocHRocmVhZF9tdXRleF9sb2NrICE9IE5VTEwpICYmCisgICAgICAgICAgICAocHRocmVhZF9tdXRleF91bmxvY2sgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgIChwdGhyZWFkX2NvbmRfaW5pdCAhPSBOVUxMKSAmJgorICAgICAgICAgICAgKHB0aHJlYWRfY29uZF9kZXN0cm95ICE9IE5VTEwpICYmCisgICAgICAgICAgICAocHRocmVhZF9jb25kX3dhaXQgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBwdGhyZWFkX2VxdWFsIGNhbiBiZSBpbmxpbmUsIHJlc3V0aW5nIGluIC1XYWRkcmVzcyB3YXJuaW5ncy4KKyAgICAgICAgICAgICAqIExldCdzIGFzc3VtZSBpdCdzIGF2YWlsYWJsZSBpZiBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIChwdGhyZWFkX2VxdWFsICE9IE5VTEwpICYmICovCisgICAgICAgICAgICAocHRocmVhZF9zZWxmICE9IE5VTEwpICYmCisgICAgICAgICAgICAocHRocmVhZF9jb25kX3NpZ25hbCAhPSBOVUxMKTsKKyNlbmRpZgorCisgICAgLyogVGhlIG11dGV4IGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIHNvIHdlIGp1c3QgbG9jayBpdC4gKi8KKyAgICBpZiAoWE1MX0lTX1RIUkVBREVEKCkgIT0gMCkKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnbG9iYWxfaW5pdF9sb2NrKTsKKwogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKKwogICAgIExQQ1JJVElDQUxfU0VDVElPTiBjczsKIAogICAgIC8qIENyZWF0ZSBhIG5ldyBjcml0aWNhbCBzZWN0aW9uICovCkBAIC00NTMsNTIgKzUyNCwxOCBAQAogCiAgICAgLyogTG9jayB0aGUgY2hvc2VuIGNyaXRpY2FsIHNlY3Rpb24gKi8KICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbihnbG9iYWxfaW5pdF9sb2NrKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSAgICBpbnQzMiBzZW07CiAKLSAgICAvKiBBbGxvY2F0ZSBhIG5ldyBzZW1hcGhvcmUgKi8KLSAgICBzZW0gPSBjcmVhdGVfc2VtKDEsICJ4bWxHbG9iYWxpbml0TXV0ZXgiKTsKLQotICAgIHdoaWxlIChnbG9iYWxfaW5pdF9sb2NrID09IC0xKSB7Ci0gICAgICAgIGlmIChhdG9taWNfYWRkKCZnbG9iYWxfaW5pdF9jb3VudCwgMSkgPT0gMCkgewotICAgICAgICAgICAgZ2xvYmFsX2luaXRfbG9jayA9IHNlbTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNub296ZSgxKTsKLSAgICAgICAgICAgIGF0b21pY19hZGQoJmdsb2JhbF9pbml0X2NvdW50LCAtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJZiBhbm90aGVyIHRocmVhZCBzdWNjZXNzZnVsbHkgcmVjb3JkZWQgaXRzIGNyaXRpY2FsCi0gICAgICogc2VjdGlvbiBpbiB0aGUgZ2xvYmFsX2luaXRfbG9jayB0aGVuIGRpc2NhcmQgdGhlIG9uZQotICAgICAqIGFsbG9jYXRlZCBieSB0aGlzIHRocmVhZC4gKi8KLSAgICBpZiAoZ2xvYmFsX2luaXRfbG9jayAhPSBzZW0pCi0gICAgICAgIGRlbGV0ZV9zZW0oc2VtKTsKLQotICAgIC8qIEFjcXVpcmUgdGhlIGNob3NlbiBzZW1hcGhvcmUgKi8KLSAgICBpZiAoYWNxdWlyZV9zZW0oZ2xvYmFsX2luaXRfbG9jaykgIT0gQl9OT19FUlJPUikgewotI2lmZGVmIERFQlVHX1RIUkVBRFMKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAieG1sR2xvYmFsSW5pdE11dGV4TG9jaygpOkJlT1M6Q291bGRuJ3QgYWNxdWlyZSBzZW1hcGhvcmVcbiIpOwotI2VuZGlmCi0gICAgfQogI2VuZGlmCiB9CiAKLXZvaWQKLV9feG1sR2xvYmFsSW5pdE11dGV4VW5sb2NrKHZvaWQpCi17Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSNpZmRlZiBYTUxfUFRIUkVBRF9XRUFLCi0gICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZiAvKiBYTUxfUFRIUkVBRF9XRUFLICovCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdsb2JhbF9pbml0X2xvY2spOworc3RhdGljIHZvaWQKK3htbEdsb2JhbEluaXRNdXRleFVubG9jayh2b2lkKSB7CisjaWZkZWYgSEFWRV9QT1NJWF9USFJFQURTCisgICAgaWYgKFhNTF9JU19USFJFQURFRCgpICE9IDApCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnbG9iYWxfaW5pdF9sb2NrKTsKICNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0gICAgaWYgKGdsb2JhbF9pbml0X2xvY2sgIT0gTlVMTCkgeworICAgIGlmIChnbG9iYWxfaW5pdF9sb2NrICE9IE5VTEwpCiAJTGVhdmVDcml0aWNhbFNlY3Rpb24oZ2xvYmFsX2luaXRfbG9jayk7Ci0gICAgfQotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIHJlbGVhc2Vfc2VtKGdsb2JhbF9pbml0X2xvY2spOwogI2VuZGlmCiB9CiAKQEAgLTUwOCwxMCArNTQ1LDkgQEAKICAqIE1ha2VzIHN1cmUgdGhhdCB0aGUgZ2xvYmFsIGluaXRpYWxpemF0aW9uIG11dGV4IGlzIGRlc3Ryb3llZCBiZWZvcmUKICAqIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uLgogICovCi12b2lkCi1fX3htbEdsb2JhbEluaXRNdXRleERlc3Ryb3kodm9pZCkKLXsKLSNpZmRlZiBIQVZFX1BUSFJFQURfSAorc3RhdGljIHZvaWQKK3htbEdsb2JhbEluaXRNdXRleERlc3Ryb3kodm9pZCkgeworI2lmZGVmIEhBVkVfUE9TSVhfVEhSRUFEUwogI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKICAgICBpZiAoZ2xvYmFsX2luaXRfbG9jayAhPSBOVUxMKSB7CiAgICAgICAgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbihnbG9iYWxfaW5pdF9sb2NrKTsKQEAgLTUyMSwzNzIgKzU1Nyw2NiBAQAogI2VuZGlmCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCQkJCQkJKgotICoJCQlQZXIgdGhyZWFkIGdsb2JhbCBzdGF0ZSBoYW5kbGluZwkJKgotICoJCQkJCQkJCQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi0jaWZkZWYgeG1sTGFzdEVycm9yCi0jdW5kZWYgeG1sTGFzdEVycm9yCi0jZW5kaWYKLQogLyoqCi0gKiB4bWxGcmVlR2xvYmFsU3RhdGU6Ci0gKiBAc3RhdGU6ICBhIHRocmVhZCBnbG9iYWwgc3RhdGUKKyAqIHhtbEluaXRQYXJzZXI6CiAgKgotICogeG1sRnJlZUdsb2JhbFN0YXRlKCkgaXMgY2FsbGVkIHdoZW4gYSB0aHJlYWQgdGVybWluYXRlcyB3aXRoIGEgbm9uLU5VTEwKLSAqIGdsb2JhbCBzdGF0ZS4gSXQgaXMgaXMgdXNlZCBoZXJlIHRvIHJlY2xhaW0gbWVtb3J5IHJlc291cmNlcy4KLSAqLwotc3RhdGljIHZvaWQKLXhtbEZyZWVHbG9iYWxTdGF0ZSh2b2lkICpzdGF0ZSkKLXsKLSAgICB4bWxHbG9iYWxTdGF0ZSAqZ3MgPSAoeG1sR2xvYmFsU3RhdGUgKikgc3RhdGU7Ci0KLSAgICAvKiBmcmVlIGFueSBtZW1vcnkgYWxsb2NhdGVkIGluIHRoZSB0aHJlYWQncyB4bWxMYXN0RXJyb3IgKi8KLSAgICB4bWxSZXNldEVycm9yKCYoZ3MtPnhtbExhc3RFcnJvcikpOwotICAgIGZyZWUoc3RhdGUpOwotfQotCi0vKioKLSAqIHhtbE5ld0dsb2JhbFN0YXRlOgorICogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBYTUwgcGFyc2VyLgogICoKLSAqIHhtbE5ld0dsb2JhbFN0YXRlKCkgYWxsb2NhdGVzIGEgZ2xvYmFsIHN0YXRlLiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvCi0gKiBob2xkIGFsbCBkYXRhIGZvciB1c2UgYnkgYSB0aHJlYWQgd2hlbiBzdXBwb3J0aW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0gKiBvZiBsaWJ4bWwyIHRvIHByZS10aHJlYWQtc2FmZSBiZWhhdmlvdXIuCi0gKgotICogUmV0dXJucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHhtbEdsb2JhbFN0YXRlUHRyIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvcgotICovCi1zdGF0aWMgeG1sR2xvYmFsU3RhdGVQdHIKLXhtbE5ld0dsb2JhbFN0YXRlKHZvaWQpCi17Ci0gICAgeG1sR2xvYmFsU3RhdGUgKmdzOwotCi0gICAgZ3MgPSBtYWxsb2Moc2l6ZW9mKHhtbEdsb2JhbFN0YXRlKSk7Ci0gICAgaWYgKGdzID09IE5VTEwpIHsKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJ4bWxHZXRHbG9iYWxTdGF0ZTogb3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotCi0gICAgbWVtc2V0KGdzLCAwLCBzaXplb2YoeG1sR2xvYmFsU3RhdGUpKTsKLSAgICB4bWxJbml0aWFsaXplR2xvYmFsU3RhdGUoZ3MpOwotICAgIHJldHVybiAoZ3MpOwotfQotI2VuZGlmIC8qIExJQlhNTF9USFJFQURfRU5BQkxFRCAqLwotCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0jaWYgIWRlZmluZWQoSEFWRV9DT01QSUxFUl9UTFMpCi0jaWYgZGVmaW5lZChMSUJYTUxfU1RBVElDKSAmJiAhZGVmaW5lZChMSUJYTUxfU1RBVElDX0ZPUl9ETEwpCi10eXBlZGVmIHN0cnVjdCBfeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zIHsKLSAgICBIQU5ETEUgdGhyZWFkOwotICAgIHZvaWQgKm1lbW9yeTsKLX0geG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zOwotCi1zdGF0aWMgdm9pZCBYTUxDREVDTAoteG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyKHZvaWQgKnApCi17Ci0gICAgeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zICpwYXJhbXMgPQotICAgICAgICAoeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zICopIHA7Ci0gICAgV2FpdEZvclNpbmdsZU9iamVjdChwYXJhbXMtPnRocmVhZCwgSU5GSU5JVEUpOwotICAgIENsb3NlSGFuZGxlKHBhcmFtcy0+dGhyZWFkKTsKLSAgICB4bWxGcmVlR2xvYmFsU3RhdGUocGFyYW1zLT5tZW1vcnkpOwotICAgIGZyZWUocGFyYW1zKTsKLSAgICBfZW5kdGhyZWFkKCk7Ci19Ci0jZWxzZSAvKiBMSUJYTUxfU1RBVElDICYmICFMSUJYTUxfU1RBVElDX0ZPUl9ETEwgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX3htbEdsb2JhbFN0YXRlQ2xlYW51cEhlbHBlclBhcmFtcyB7Ci0gICAgdm9pZCAqbWVtb3J5OwotICAgIHN0cnVjdCBfeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zICpwcmV2OwotICAgIHN0cnVjdCBfeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zICpuZXh0OwotfSB4bWxHbG9iYWxTdGF0ZUNsZWFudXBIZWxwZXJQYXJhbXM7Ci0KLXN0YXRpYyB4bWxHbG9iYWxTdGF0ZUNsZWFudXBIZWxwZXJQYXJhbXMgKmNsZWFudXBfaGVscGVyc19oZWFkID0gTlVMTDsKLXN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIGNsZWFudXBfaGVscGVyc19jczsKLQotI2VuZGlmIC8qIExJQlhNTFNUQVRJQyAmJiAhTElCWE1MX1NUQVRJQ19GT1JfRExMICovCi0jZW5kaWYgLyogSEFWRV9DT01QSUxFUl9UTFMgKi8KLSNlbmRpZiAvKiBIQVZFX1dJTjMyX1RIUkVBRFMgKi8KLQotI2lmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLQotLyoqCi0gKiB4bWxHbG9iYWxTdGF0ZUNsZWFudXA6Ci0gKiBAZGF0YTogdW51c2VkIHBhcmFtZXRlcgotICoKLSAqIFVzZWQgZm9yIEJlb3Mgb25seQorICogQ2FsbCBvbmNlIGZyb20gdGhlIG1haW4gdGhyZWFkIGJlZm9yZSB1c2luZyB0aGUgbGlicmFyeSBpbgorICogbXVsdGl0aHJlYWRlZCBwcm9ncmFtcy4KICAqLwogdm9pZAoteG1sR2xvYmFsU3RhdGVDbGVhbnVwKHZvaWQgKmRhdGEpCi17Ci0gICAgdm9pZCAqZ2xvYmFsdmFsID0gdGxzX2dldChnbG9iYWxrZXkpOworeG1sSW5pdFBhcnNlcih2b2lkKSB7CisgICAgLyoKKyAgICAgKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBub3QgbWFrZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisgICAgICovCisgICAgaWYgKHhtbFBhcnNlckluaXRpYWxpemVkICE9IDApCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChnbG9iYWx2YWwgIT0gTlVMTCkKLSAgICAgICAgeG1sRnJlZUdsb2JhbFN0YXRlKGdsb2JhbHZhbCk7Ci19CisgICAgeG1sR2xvYmFsSW5pdE11dGV4TG9jaygpOworCisgICAgaWYgKHhtbFBhcnNlcklubmVySW5pdGlhbGl6ZWQgPT0gMCkgeworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBcCisgICAgIWRlZmluZWQoTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVEKSAmJiBcCisgICAgKCFkZWZpbmVkKExJQlhNTF9TVEFUSUMpIHx8IGRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKSkKKyAgICAgICAgaWYgKHhtbEZyZWUgPT0gZnJlZSkKKyAgICAgICAgICAgIGF0ZXhpdCh4bWxDbGVhbnVwUGFyc2VyKTsKICNlbmRpZgogCi0vKioKLSAqIHhtbEdldEdsb2JhbFN0YXRlOgotICoKLSAqIHhtbEdldEdsb2JhbFN0YXRlKCkgaXMgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgdGhyZWFkLgotICoKLSAqIFJldHVybnMgdGhlIHRocmVhZCBnbG9iYWwgc3RhdGUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yCi0gKi8KLXhtbEdsb2JhbFN0YXRlUHRyCi14bWxHZXRHbG9iYWxTdGF0ZSh2b2lkKQotewotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICi0gICAgeG1sR2xvYmFsU3RhdGUgKmdsb2JhbHZhbDsKKyAgICAgICAgeG1sSW5pdE1lbW9yeUludGVybmFsKCk7IC8qIFNob3VsZCBjb21lIHNlY29uZCAqLworICAgICAgICB4bWxJbml0R2xvYmFsc0ludGVybmFsKCk7CisgICAgICAgIHhtbEluaXRSYW5kb20oKTsKKyAgICAgICAgeG1sSW5pdERpY3RJbnRlcm5hbCgpOworICAgICAgICB4bWxJbml0RW5jb2RpbmdJbnRlcm5hbCgpOworI2lmIGRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkKKyAgICAgICAgeG1sSW5pdFhQYXRoSW50ZXJuYWwoKTsKKyNlbmRpZgogCi0gICAgaWYgKGxpYnhtbF9pc190aHJlYWRlZCA9PSAwKQotICAgICAgICByZXR1cm4gKE5VTEwpOworICAgICAgICB4bWxSZWdpc3RlckRlZmF1bHRJbnB1dENhbGxiYWNrcygpOworI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAorICAgICAgICB4bWxSZWdpc3RlckRlZmF1bHRPdXRwdXRDYWxsYmFja3MoKTsKKyNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KIAotICAgIHB0aHJlYWRfb25jZSgmb25jZV9jb250cm9sLCB4bWxPbmNlSW5pdCk7Ci0KLSAgICBpZiAoKGdsb2JhbHZhbCA9ICh4bWxHbG9iYWxTdGF0ZSAqKQotICAgICAgICAgcHRocmVhZF9nZXRzcGVjaWZpYyhnbG9iYWxrZXkpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHhtbEdsb2JhbFN0YXRlICp0c2QgPSB4bWxOZXdHbG9iYWxTdGF0ZSgpOwotCWlmICh0c2QgPT0gTlVMTCkKLQkgICAgcmV0dXJuKE5VTEwpOwotCi0gICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ2xvYmFsa2V5LCB0c2QpOwotICAgICAgICByZXR1cm4gKHRzZCk7CisgICAgICAgIHhtbFBhcnNlcklubmVySW5pdGlhbGl6ZWQgPSAxOwogICAgIH0KLSAgICByZXR1cm4gKGdsb2JhbHZhbCk7Ci0jZWxpZiBkZWZpbmVkIEhBVkVfV0lOMzJfVEhSRUFEUwotI2lmIGRlZmluZWQoSEFWRV9DT01QSUxFUl9UTFMpCi0gICAgaWYgKCF0bHN0YXRlX2luaXRlZCkgewotICAgICAgICB0bHN0YXRlX2luaXRlZCA9IDE7Ci0gICAgICAgIHhtbEluaXRpYWxpemVHbG9iYWxTdGF0ZSgmdGxzdGF0ZSk7Ci0gICAgfQotICAgIHJldHVybiAmdGxzdGF0ZTsKLSNlbHNlIC8qIEhBVkVfQ09NUElMRVJfVExTICovCi0gICAgeG1sR2xvYmFsU3RhdGUgKmdsb2JhbHZhbDsKLSAgICB4bWxHbG9iYWxTdGF0ZUNsZWFudXBIZWxwZXJQYXJhbXMgKnA7CiAKLSAgICB4bWxPbmNlSW5pdCgpOwotI2lmIGRlZmluZWQoTElCWE1MX1NUQVRJQykgJiYgIWRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKQotICAgIGdsb2JhbHZhbCA9ICh4bWxHbG9iYWxTdGF0ZSAqKSBUbHNHZXRWYWx1ZShnbG9iYWxrZXkpOwotI2Vsc2UKLSAgICBwID0gKHhtbEdsb2JhbFN0YXRlQ2xlYW51cEhlbHBlclBhcmFtcyAqKSBUbHNHZXRWYWx1ZShnbG9iYWxrZXkpOwotICAgIGdsb2JhbHZhbCA9ICh4bWxHbG9iYWxTdGF0ZSAqKSAocCA/IHAtPm1lbW9yeSA6IE5VTEwpOwotI2VuZGlmCi0gICAgaWYgKGdsb2JhbHZhbCA9PSBOVUxMKSB7Ci0gICAgICAgIHhtbEdsb2JhbFN0YXRlICp0c2QgPSB4bWxOZXdHbG9iYWxTdGF0ZSgpOworICAgIHhtbEdsb2JhbEluaXRNdXRleFVubG9jaygpOwogCi0gICAgICAgIGlmICh0c2QgPT0gTlVMTCkKLQkgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICBwID0gKHhtbEdsb2JhbFN0YXRlQ2xlYW51cEhlbHBlclBhcmFtcyAqKQotICAgICAgICAgICAgbWFsbG9jKHNpemVvZih4bWxHbG9iYWxTdGF0ZUNsZWFudXBIZWxwZXJQYXJhbXMpKTsKLQlpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sR2V0R2xvYmFsU3RhdGU6IG91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgeG1sRnJlZUdsb2JhbFN0YXRlKHRzZCk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0gICAgICAgIHAtPm1lbW9yeSA9IHRzZDsKLSNpZiBkZWZpbmVkKExJQlhNTF9TVEFUSUMpICYmICFkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkKLSAgICAgICAgRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEN1cnJlbnRQcm9jZXNzKCksICZwLT50aHJlYWQsIDAsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwotICAgICAgICBUbHNTZXRWYWx1ZShnbG9iYWxrZXksIHRzZCk7Ci0gICAgICAgIF9iZWdpbnRocmVhZCh4bWxHbG9iYWxTdGF0ZUNsZWFudXBIZWxwZXIsIDAsIHApOwotI2Vsc2UKLSAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNsZWFudXBfaGVscGVyc19jcyk7Ci0gICAgICAgIGlmIChjbGVhbnVwX2hlbHBlcnNfaGVhZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjbGVhbnVwX2hlbHBlcnNfaGVhZC0+cHJldiA9IHA7Ci0gICAgICAgIH0KLSAgICAgICAgcC0+bmV4dCA9IGNsZWFudXBfaGVscGVyc19oZWFkOwotICAgICAgICBwLT5wcmV2ID0gTlVMTDsKLSAgICAgICAgY2xlYW51cF9oZWxwZXJzX2hlYWQgPSBwOwotICAgICAgICBUbHNTZXRWYWx1ZShnbG9iYWxrZXksIHApOwotICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY2xlYW51cF9oZWxwZXJzX2NzKTsKLSNlbmRpZgotCi0gICAgICAgIHJldHVybiAodHNkKTsKLSAgICB9Ci0gICAgcmV0dXJuIChnbG9iYWx2YWwpOwotI2VuZGlmIC8qIEhBVkVfQ09NUElMRVJfVExTICovCi0jZWxpZiBkZWZpbmVkIEhBVkVfQkVPU19USFJFQURTCi0gICAgeG1sR2xvYmFsU3RhdGUgKmdsb2JhbHZhbDsKLQotICAgIHhtbE9uY2VJbml0KCk7Ci0KLSAgICBpZiAoKGdsb2JhbHZhbCA9ICh4bWxHbG9iYWxTdGF0ZSAqKSB0bHNfZ2V0KGdsb2JhbGtleSkpID09IE5VTEwpIHsKLSAgICAgICAgeG1sR2xvYmFsU3RhdGUgKnRzZCA9IHhtbE5ld0dsb2JhbFN0YXRlKCk7Ci0JaWYgKHRzZCA9PSBOVUxMKQotCSAgICByZXR1cm4gKE5VTEwpOwotCi0gICAgICAgIHRsc19zZXQoZ2xvYmFsa2V5LCB0c2QpOwotICAgICAgICBvbl9leGl0X3RocmVhZCh4bWxHbG9iYWxTdGF0ZUNsZWFudXAsIE5VTEwpOwotICAgICAgICByZXR1cm4gKHRzZCk7Ci0gICAgfQotICAgIHJldHVybiAoZ2xvYmFsdmFsKTsKLSNlbHNlCi0gICAgcmV0dXJuIChOVUxMKTsKLSNlbmRpZgotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQkJCQkJCSoKLSAqCQkJTGlicmFyeSB3aWRlIHRocmVhZCBpbnRlcmZhY2VzCQkJKgotICoJCQkJCQkJCQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIHhtbEdldFRocmVhZElkOgotICoKLSAqIHhtbEdldFRocmVhZElkKCkgZmluZCB0aGUgY3VycmVudCB0aHJlYWQgSUQgbnVtYmVyCi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBsaWtlbHkgdG8gYmUgYnJva2VuIG9uIHNvbWUgcGxhdGZvcm1zIHVzaW5nIHB0aHJlYWRzCi0gKiBhcyB0aGUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IG1hbmRhdGUgcHRocmVhZF90IHRvIGJlIGFuIGludGVnZXIgdHlwZQotICoKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGhyZWFkIElEIG51bWJlcgotICovCi1pbnQKLXhtbEdldFRocmVhZElkKHZvaWQpCi17Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBwdGhyZWFkX3QgaWQ7Ci0gICAgaW50IHJldDsKLQotICAgIGlmIChsaWJ4bWxfaXNfdGhyZWFkZWQgPT0gMCkKLSAgICAgICAgcmV0dXJuICgwKTsKLSAgICBpZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIC8qIGhvcnJpYmxlIGJ1dCBwcmVzZXJ2ZXMgY29tcGF0LCBzZWUgd2FybmluZyBhYm92ZSAqLwotICAgIG1lbWNweSgmcmV0LCAmaWQsIHNpemVvZihyZXQpKTsKLSAgICByZXR1cm4gKHJldCk7Ci0jZWxpZiBkZWZpbmVkIEhBVkVfV0lOMzJfVEhSRUFEUwotICAgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSAgICByZXR1cm4gZmluZF90aHJlYWQoTlVMTCk7Ci0jZWxzZQotICAgIHJldHVybiAoKGludCkgMCk7Ci0jZW5kaWYKKyAgICB4bWxQYXJzZXJJbml0aWFsaXplZCA9IDE7CiB9CiAKIC8qKgotICogeG1sSXNNYWluVGhyZWFkOgorICogeG1sQ2xlYW51cFBhcnNlcjoKICAqCi0gKiB4bWxJc01haW5UaHJlYWQoKSBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgbWFpbiB0aHJlYWQuCi0gKgotICogUmV0dXJucyAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgbWFpbiB0aHJlYWQsIDAgb3RoZXJ3aXNlCi0gKi8KLWludAoteG1sSXNNYWluVGhyZWFkKHZvaWQpCi17Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkID09IC0xKQotICAgICAgICB4bWxJbml0VGhyZWFkcygpOwotICAgIGlmIChsaWJ4bWxfaXNfdGhyZWFkZWQgPT0gMCkKLSAgICAgICAgcmV0dXJuICgxKTsKLSAgICBwdGhyZWFkX29uY2UoJm9uY2VfY29udHJvbCwgeG1sT25jZUluaXQpOwotI2VsaWYgZGVmaW5lZCBIQVZFX1dJTjMyX1RIUkVBRFMKLSAgICB4bWxPbmNlSW5pdCgpOwotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIHhtbE9uY2VJbml0KCk7Ci0jZW5kaWYKLQotI2lmZGVmIERFQlVHX1RIUkVBRFMKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgInhtbElzTWFpblRocmVhZCgpXG4iKTsKLSNlbmRpZgotI2lmZGVmIEhBVkVfUFRIUkVBRF9ICi0gICAgcmV0dXJuIChwdGhyZWFkX2VxdWFsKG1haW50aHJlYWQscHRocmVhZF9zZWxmKCkpKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9XSU4zMl9USFJFQURTCi0gICAgcmV0dXJuIChtYWludGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSNlbGlmIGRlZmluZWQgSEFWRV9CRU9TX1RIUkVBRFMKLSAgICByZXR1cm4gKG1haW50aHJlYWQgPT0gZmluZF90aHJlYWQoTlVMTCkpOwotI2Vsc2UKLSAgICByZXR1cm4gKDEpOwotI2VuZGlmCi19Ci0KLS8qKgotICogeG1sTG9ja0xpYnJhcnk6Ci0gKgotICogeG1sTG9ja0xpYnJhcnkoKSBpcyB1c2VkIHRvIHRha2Ugb3V0IGEgcmUtZW50cmFudCBsb2NrIG9uIHRoZSBsaWJ4bWwyCi0gKiBsaWJyYXJ5LgotICovCi12b2lkCi14bWxMb2NrTGlicmFyeSh2b2lkKQotewotI2lmZGVmIERFQlVHX1RIUkVBRFMKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgInhtbExvY2tMaWJyYXJ5KClcbiIpOwotI2VuZGlmCi0gICAgeG1sUk11dGV4TG9jayh4bWxMaWJyYXJ5TG9jayk7Ci19Ci0KLS8qKgotICogeG1sVW5sb2NrTGlicmFyeToKLSAqCi0gKiB4bWxVbmxvY2tMaWJyYXJ5KCkgaXMgdXNlZCB0byByZWxlYXNlIGEgcmUtZW50cmFudCBsb2NrIG9uIHRoZSBsaWJ4bWwyCi0gKiBsaWJyYXJ5LgotICovCi12b2lkCi14bWxVbmxvY2tMaWJyYXJ5KHZvaWQpCi17Ci0jaWZkZWYgREVCVUdfVEhSRUFEUwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAieG1sVW5sb2NrTGlicmFyeSgpXG4iKTsKLSNlbmRpZgotICAgIHhtbFJNdXRleFVubG9jayh4bWxMaWJyYXJ5TG9jayk7Ci19Ci0KLS8qKgotICogeG1sSW5pdFRocmVhZHM6Ci0gKgotICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvCi0gKiBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LgotICoKLSAqIHhtbEluaXRUaHJlYWRzKCkgaXMgdXNlZCB0byB0byBpbml0aWFsaXplIGFsbCB0aGUgdGhyZWFkIHJlbGF0ZWQKLSAqIGRhdGEgb2YgdGhlIGxpYnhtbDIgbGlicmFyeS4KLSAqLwotdm9pZAoteG1sSW5pdFRocmVhZHModm9pZCkKLXsKLSNpZmRlZiBIQVZFX1BUSFJFQURfSAotI2lmZGVmIFhNTF9QVEhSRUFEX1dFQUsKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkID09IC0xKSB7Ci0gICAgICAgIGlmICgocHRocmVhZF9vbmNlICE9IE5VTEwpICYmCi0gICAgICAgICAgICAocHRocmVhZF9nZXRzcGVjaWZpYyAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHB0aHJlYWRfc2V0c3BlY2lmaWMgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX2tleV9jcmVhdGUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX2tleV9kZWxldGUgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX211dGV4X2luaXQgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX211dGV4X2Rlc3Ryb3kgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX211dGV4X2xvY2sgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX211dGV4X3VubG9jayAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHB0aHJlYWRfY29uZF9pbml0ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAocHRocmVhZF9jb25kX2Rlc3Ryb3kgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX2NvbmRfd2FpdCAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKHB0aHJlYWRfZXF1YWwgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX3NlbGYgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChwdGhyZWFkX2NvbmRfc2lnbmFsICE9IE5VTEwpKSB7Ci0gICAgICAgICAgICBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAxOwotCi0vKiBmcHJpbnRmKHN0ZGVyciwgIlJ1bm5pbmcgbXVsdGl0aHJlYWRlZFxuIik7ICovCi0gICAgICAgIH0gZWxzZSB7Ci0KLS8qIGZwcmludGYoc3RkZXJyLCAiUnVubmluZyB3aXRob3V0IG11bHRpdGhyZWFkXG4iKTsgKi8KLSAgICAgICAgICAgIGxpYnhtbF9pc190aHJlYWRlZCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogWE1MX1BUSFJFQURfV0VBSyAqLwotI2VuZGlmCi19Ci0KLS8qKgotICogeG1sQ2xlYW51cFRocmVhZHM6Ci0gKgotICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxDbGVhbnVwUGFyc2VyCi0gKiB0byBmcmVlIGdsb2JhbCBzdGF0ZSBidXQgc2VlIHRoZSB3YXJuaW5ncyB0aGVyZS4geG1sQ2xlYW51cFBhcnNlcgotICogc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgYXQgcHJvZ3JhbSBleGl0LiBJbiBtb3N0IGNhc2VzLCB5b3UgZG9uJ3QKLSAqIGhhdmUgY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuCi0gKgotICogeG1sQ2xlYW51cFRocmVhZHMoKSBpcyB1c2VkIHRvIHRvIGNsZWFudXAgYWxsIHRoZSB0aHJlYWQgcmVsYXRlZAotICogZGF0YSBvZiB0aGUgbGlieG1sMiBsaWJyYXJ5IG9uY2UgcHJvY2Vzc2luZyBoYXMgZW5kZWQuCisgKiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXMgc29tZXdoYXQgbWlzbGVhZGluZy4gSXQgZG9lcyBub3QgY2xlYW4gdXAKKyAqIHBhcnNlciBzdGF0ZSwgaXQgY2xlYW5zIHVwIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGxpYnJhcnkgaXRzZWxmLgorICogSXQgaXMgYSBjbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgWE1MIGxpYnJhcnkuIEl0IHRyaWVzIHRvIHJlY2xhaW0gYWxsCisgKiByZWxhdGVkIGdsb2JhbCBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgbGlicmFyeSBwcm9jZXNzaW5nLgorICogSXQgZG9lc24ndCBkZWFsbG9jYXRlIGFueSBkb2N1bWVudCByZWxhdGVkIG1lbW9yeS4gT25lIHNob3VsZAorICogY2FsbCB4bWxDbGVhbnVwUGFyc2VyKCkgb25seSB3aGVuIHRoZSBwcm9jZXNzIGhhcyBmaW5pc2hlZCB1c2luZworICogdGhlIGxpYnJhcnkgYW5kIGFsbCBYTUwvSFRNTCBkb2N1bWVudHMgYnVpbHQgd2l0aCBpdC4KKyAqIFNlZSBhbHNvIHhtbEluaXRQYXJzZXIoKSB3aGljaCBoYXMgdGhlIG9wcG9zaXRlIGZ1bmN0aW9uIG9mIHByZXBhcmluZworICogdGhlIGxpYnJhcnkgZm9yIG9wZXJhdGlvbnMuCiAgKgogICogV0FSTklORzogaWYgeW91ciBhcHBsaWNhdGlvbiBpcyBtdWx0aXRocmVhZGVkIG9yIGhhcyBwbHVnaW4gc3VwcG9ydAogICogICAgICAgICAgY2FsbGluZyB0aGlzIG1heSBjcmFzaCB0aGUgYXBwbGljYXRpb24gaWYgYW5vdGhlciB0aHJlYWQgb3IKQEAgLTg5NywxNTMgKzYyNyw1NiBAQAogICogICAgICAgICAgdG8gYXZvaWQgbGVhayByZXBvcnRzIGZyb20gdmFsZ3JpbmQgIQogICovCiB2b2lkCi14bWxDbGVhbnVwVGhyZWFkcyh2b2lkKQotewotI2lmZGVmIERFQlVHX1RIUkVBRFMKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgInhtbENsZWFudXBUaHJlYWRzKClcbiIpOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICBpZiAobGlieG1sX2lzX3RocmVhZGVkICE9IDApCi0gICAgICAgIHB0aHJlYWRfa2V5X2RlbGV0ZShnbG9iYWxrZXkpOwotICAgIG9uY2VfY29udHJvbCA9IG9uY2VfY29udHJvbF9pbml0OwotI2VsaWYgZGVmaW5lZChIQVZFX1dJTjMyX1RIUkVBRFMpCi0jaWYgIWRlZmluZWQoSEFWRV9DT01QSUxFUl9UTFMpCi0gICAgaWYgKGdsb2JhbGtleSAhPSBUTFNfT1VUX09GX0lOREVYRVMpIHsKLSNpZiAhZGVmaW5lZChMSUJYTUxfU1RBVElDKSB8fCBkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkKLSAgICAgICAgeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zICpwOworeG1sQ2xlYW51cFBhcnNlcih2b2lkKSB7CisgICAgaWYgKCF4bWxQYXJzZXJJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZjbGVhbnVwX2hlbHBlcnNfY3MpOwotICAgICAgICBwID0gY2xlYW51cF9oZWxwZXJzX2hlYWQ7Ci0gICAgICAgIHdoaWxlIChwICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHhtbEdsb2JhbFN0YXRlQ2xlYW51cEhlbHBlclBhcmFtcyAqdGVtcCA9IHA7CisgICAgLyogVGhlc2UgZnVuY3Rpb25zIGNhbiBjYWxsIHhtbEZyZWUuICovCiAKLSAgICAgICAgICAgIHAgPSBwLT5uZXh0OwotICAgICAgICAgICAgeG1sRnJlZUdsb2JhbFN0YXRlKHRlbXAtPm1lbW9yeSk7Ci0gICAgICAgICAgICBmcmVlKHRlbXApOwotICAgICAgICB9Ci0gICAgICAgIGNsZWFudXBfaGVscGVyc19oZWFkID0gMDsKLSAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNsZWFudXBfaGVscGVyc19jcyk7CisgICAgeG1sQ2xlYW51cENoYXJFbmNvZGluZ0hhbmRsZXJzKCk7CisjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAorICAgIHhtbENhdGFsb2dDbGVhbnVwKCk7CiAjZW5kaWYKLSAgICAgICAgVGxzRnJlZShnbG9iYWxrZXkpOwotICAgICAgICBnbG9iYWxrZXkgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0gICAgfQotI2lmICFkZWZpbmVkKExJQlhNTF9TVEFUSUMpIHx8IGRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKQotICAgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigmY2xlYW51cF9oZWxwZXJzX2NzKTsKKyNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECisgICAgeG1sU2NoZW1hQ2xlYW51cFR5cGVzKCk7CisgICAgeG1sUmVsYXhOR0NsZWFudXBUeXBlcygpOwogI2VuZGlmCisKKyAgICAvKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5ldmVyIGNhbGwgeG1sRnJlZS4gKi8KKworICAgIHhtbENsZWFudXBJbnB1dENhbGxiYWNrcygpOworI2lmZGVmIExJQlhNTF9PVVRQVVRfRU5BQkxFRAorICAgIHhtbENsZWFudXBPdXRwdXRDYWxsYmFja3MoKTsKICNlbmRpZgotICAgIHJ1bl9vbmNlLmRvbmUgPSAwOwotICAgIHJ1bl9vbmNlLmNvbnRyb2wgPSAwOwotI2VuZGlmCisKKyAgICB4bWxDbGVhbnVwRGljdEludGVybmFsKCk7CisgICAgeG1sQ2xlYW51cFJhbmRvbSgpOworICAgIHhtbENsZWFudXBHbG9iYWxzSW50ZXJuYWwoKTsKKyAgICAvKgorICAgICAqIE11c3QgY29tZSBsYXN0LiBPbiBXaW5kb3dzLCB4bWxDbGVhbnVwR2xvYmFsc0ludGVybmFsIGNhbiBjYWxsCisgICAgICogeG1sRnJlZSB3aGljaCB1c2VzIHhtbE1lbU11dGV4IGluIGRlYnVnIG1vZGUuCisgICAgICovCisgICAgeG1sQ2xlYW51cE1lbW9yeUludGVybmFsKCk7CisKKyAgICB4bWxHbG9iYWxJbml0TXV0ZXhEZXN0cm95KCk7CisKKyAgICB4bWxQYXJzZXJJbml0aWFsaXplZCA9IDA7CisgICAgeG1sUGFyc2VySW5uZXJJbml0aWFsaXplZCA9IDA7CiB9CiAKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLQotLyoqCi0gKiB4bWxPbmNlSW5pdAotICoKLSAqIHhtbE9uY2VJbml0KCkgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSB2YWx1ZSBvZiBtYWludGhyZWFkIGZvciB1c2UKLSAqIGluIG90aGVyIHJvdXRpbmVzLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB1c2luZwotICogcHRocmVhZF9vbmNlKCkgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgb25jZV9jb250cm9sIHZhcmlhYmxlIHRvIGVuc3VyZQotICogdGhhdCB0aGUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb25jZS4gU2VlIG1hbiBwdGhyZWFkX29uY2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKi8KKyNpZiBkZWZpbmVkKEhBVkVfQVRUUklCVVRFX0RFU1RSVUNUT1IpICYmIFwKKyAgICAhZGVmaW5lZChMSUJYTUxfVEhSRUFEX0FMTE9DX0VOQUJMRUQpICYmIFwKKyAgICAhZGVmaW5lZChMSUJYTUxfU1RBVElDKSAmJiBcCisgICAgIWRlZmluZWQoX1dJTjMyKQogc3RhdGljIHZvaWQKLXhtbE9uY2VJbml0KHZvaWQpCi17Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSAgICAodm9pZCkgcHRocmVhZF9rZXlfY3JlYXRlKCZnbG9iYWxrZXksIHhtbEZyZWVHbG9iYWxTdGF0ZSk7Ci0gICAgbWFpbnRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIF9feG1sSW5pdGlhbGl6ZURpY3QoKTsKLSNlbGlmIGRlZmluZWQoSEFWRV9XSU4zMl9USFJFQURTKQotICAgIGlmICghcnVuX29uY2UuZG9uZSkgewotICAgICAgICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnJ1bl9vbmNlLmNvbnRyb2wpID09IDEpIHsKLSNpZiAhZGVmaW5lZChIQVZFX0NPTVBJTEVSX1RMUykKLSNpZiAhZGVmaW5lZChMSUJYTUxfU1RBVElDKSB8fCBkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkKLSAgICAgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJmNsZWFudXBfaGVscGVyc19jcyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGdsb2JhbGtleSA9IFRsc0FsbG9jKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1haW50aHJlYWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLQkgICAgX194bWxJbml0aWFsaXplRGljdCgpOwotICAgICAgICAgICAgcnVuX29uY2UuZG9uZSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBBbm90aGVyIHRocmVhZCBpcyB3b3JraW5nOyBnaXZlIHVwIG91ciBzbGljZSBhbmQKLSAgICAgICAgICAgICAqIHdhaXQgdW50aWwgdGhleSdyZSBkb25lLiAqLwotICAgICAgICAgICAgd2hpbGUgKCFydW5fb25jZS5kb25lKQotICAgICAgICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICB9Ci0gICAgfQotI2VsaWYgZGVmaW5lZCBIQVZFX0JFT1NfVEhSRUFEUwotICAgIGlmIChhdG9taWNfYWRkKCZydW5fb25jZV9pbml0LCAxKSA9PSAwKSB7Ci0gICAgICAgIGdsb2JhbGtleSA9IHRsc19hbGxvY2F0ZSgpOwotICAgICAgICB0bHNfc2V0KGdsb2JhbGtleSwgTlVMTCk7Ci0gICAgICAgIG1haW50aHJlYWQgPSBmaW5kX3RocmVhZChOVUxMKTsKLQlfX3htbEluaXRpYWxpemVEaWN0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGF0b21pY19hZGQoJnJ1bl9vbmNlX2luaXQsIC0xKTsKLSNlbmRpZgorQVRUUklCVVRFX0RFU1RSVUNUT1IKK3htbERlc3RydWN0b3Iodm9pZCkgeworICAgIC8qCisgICAgICogQ2FsbGluZyBjdXN0b20gZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbiBhIGRlc3RydWN0b3IgY2FuIGNhdXNlCisgICAgICogcHJvYmxlbXMsIGZvciBleGFtcGxlIHdpdGggTm9rb2dpcmkuCisgICAgICovCisgICAgaWYgKHhtbEZyZWUgPT0gZnJlZSkKKyAgICAgICAgeG1sQ2xlYW51cFBhcnNlcigpOwogfQogI2VuZGlmCiAKLS8qKgotICogRGxsTWFpbjoKLSAqIEBoaW5zdERMTDogaGFuZGxlIHRvIERMTCBpbnN0YW5jZQotICogQGZkd1JlYXNvbjogUmVhc29uIGNvZGUgZm9yIGVudHJ5Ci0gKiBAbHB2UmVzZXJ2ZWQ6IGdlbmVyaWMgcG9pbnRlciAoZGVwZW5kcyB1cG9uIHJlYXNvbiBjb2RlKQotICoKLSAqIEVudHJ5IHBvaW50IGZvciBXaW5kb3dzIGxpYnJhcnkuIEl0IGlzIGJlaW5nIHVzZWQgdG8gZnJlZSB0aHJlYWQtc3BlY2lmaWMKLSAqIHN0b3JhZ2UuCi0gKgotICogUmV0dXJucyBUUlVFIGFsd2F5cwotICovCi0jaWZkZWYgSEFWRV9QVEhSRUFEX0gKLSNlbGlmIGRlZmluZWQoSEFWRV9XSU4zMl9USFJFQURTKSAmJiAhZGVmaW5lZChIQVZFX0NPTVBJTEVSX1RMUykgJiYgKCFkZWZpbmVkKExJQlhNTF9TVEFUSUMpIHx8IGRlZmluZWQoTElCWE1MX1NUQVRJQ19GT1JfRExMKSkKLSNpZiBkZWZpbmVkKExJQlhNTF9TVEFUSUNfRk9SX0RMTCkKLWludCBYTUxDQUxMCi14bWxEbGxNYWluKEFUVFJJQlVURV9VTlVTRUQgdm9pZCAqaGluc3RETEwsIHVuc2lnbmVkIGxvbmcgZmR3UmVhc29uLAotICAgICAgICAgICBBVFRSSUJVVEVfVU5VU0VEIHZvaWQgKmxwdlJlc2VydmVkKQotI2Vsc2UKLS8qIGRlY2xhcmUgdG8gYXZvaWQgIm5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ0RsbE1haW4nIiB3YXJuaW5nICovCi0vKiBOb3RlIHRoYXQgd2UgZG8gTk9UIHdhbnQgdG8gaW5jbHVkZSB0aGlzIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGluCi0gICBhIHB1YmxpYyBoZWFkZXIgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlIGNhbGxlZCBieSBXaW5kb3dzIGl0c2VsZiwKLSAgIG5vdCBhIHByb2dyYW0gdGhhdCB1c2VzIHRoaXMgbGlicmFyeS4gIFRoaXMgYWxzbyBoYXMgdG8gYmUgZXhwb3J0ZWQuICovCi0KLVhNTFBVQkZVTiBCT09MIFdJTkFQSQotRGxsTWFpbiAoSElOU1RBTkNFIGhpbnN0RExMLAotICAgICAgICAgRFdPUkQgICAgIGZkd1JlYXNvbiwKLSAgICAgICAgIExQVk9JRCAgICBscHZSZXNlcnZlZCk7Ci0KLUJPT0wgV0lOQVBJCi1EbGxNYWluKEFUVFJJQlVURV9VTlVTRUQgSElOU1RBTkNFIGhpbnN0RExMLCBEV09SRCBmZHdSZWFzb24sCi0gICAgICAgIEFUVFJJQlVURV9VTlVTRUQgTFBWT0lEIGxwdlJlc2VydmVkKQotI2VuZGlmCi17Ci0gICAgc3dpdGNoIChmZHdSZWFzb24pIHsKLSAgICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKLSAgICAgICAgICAgIGlmIChnbG9iYWxrZXkgIT0gVExTX09VVF9PRl9JTkRFWEVTKSB7Ci0gICAgICAgICAgICAgICAgeG1sR2xvYmFsU3RhdGUgKmdsb2JhbHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgeG1sR2xvYmFsU3RhdGVDbGVhbnVwSGVscGVyUGFyYW1zICpwID0KLSAgICAgICAgICAgICAgICAgICAgKHhtbEdsb2JhbFN0YXRlQ2xlYW51cEhlbHBlclBhcmFtcyAqKQotICAgICAgICAgICAgICAgICAgICBUbHNHZXRWYWx1ZShnbG9iYWxrZXkpOwotICAgICAgICAgICAgICAgIGdsb2JhbHZhbCA9ICh4bWxHbG9iYWxTdGF0ZSAqKSAocCA/IHAtPm1lbW9yeSA6IE5VTEwpOwotICAgICAgICAgICAgICAgIGlmIChnbG9iYWx2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgeG1sRnJlZUdsb2JhbFN0YXRlKGdsb2JhbHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGdsb2JhbGtleSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZjbGVhbnVwX2hlbHBlcnNfY3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBjbGVhbnVwX2hlbHBlcnNfaGVhZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFudXBfaGVscGVyc19oZWFkID0gcC0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcC0+cHJldi0+bmV4dCA9IHAtPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwLT5uZXh0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBwLT5uZXh0LT5wcmV2ID0gcC0+cHJldjsKLSAgICAgICAgICAgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNsZWFudXBfaGVscGVyc19jcyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS90cmVlLmMgYi90cmVlLmMKaW5kZXggNGM5ZjAwZC4uZGMzYWM0ZiAxMDA2NDQKLS0tIGEvdHJlZS5jCisrKyBiL3RyZWUuYwpAQCAtMjgsMTUgKzI4LDEzIEBACiAjaW5jbHVkZSA8emxpYi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvZW50aXRpZXMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvdmFsaWQuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KICNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECiAjaW5jbHVkZSA8bGlieG1sL0hUTUx0cmVlLmg+CiAjZW5kaWYKQEAgLTQ0LDggKzQyLDEwIEBACiAjaW5jbHVkZSA8bGlieG1sL2RlYnVnWE1MLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgImJ1Zi5oIgotI2luY2x1ZGUgInNhdmUuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZW50aXRpZXMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS90cmVlLmgiCiAKIGludCBfX3htbFJlZ2lzdGVyQ2FsbGJhY2tzID0gMDsKIApAQCAtMTQwLDkgKzE0MCw2IEBACiAjZGVmaW5lIElTX1NUUl9YTUwoc3RyKSAoKHN0ciAhPSBOVUxMKSAmJiAoc3RyWzBdID09ICd4JykgJiYgXAogICAoc3RyWzFdID09ICdtJykgJiYgKHN0clsyXSA9PSAnbCcpICYmIChzdHJbM10gPT0gMCkpCiAKLS8qICNkZWZpbmUgREVCVUdfQlVGRkVSICovCi0vKiAjZGVmaW5lIERFQlVHX1RSRUUgKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCiAgKgkJRnVuY3Rpb25zIHRvIG1vdmUgdG8gZW50aXRpZXMuYyBvbmNlIHRoZQkJKgpAQCAtMzU1LDcgKzM1Miw2IEBACiAKICNkZWZpbmUgQ1VSX1NDSEFSKHMsIGwpIHhtbFN0cmluZ0N1cnJlbnRDaGFyKE5VTEwsIHMsICZsKQogCi0jaWYgZGVmaW5lZChMSUJYTUxfVFJFRV9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9YUEFUSF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX0RFQlVHX0VOQUJMRUQpIHx8IGRlZmluZWQgKExJQlhNTF9IVE1MX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NBWDFfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfSFRNTF9FTkFCTEVEKSB8fCBkZWZpbmVkKExJQlhNTF9XUklURVJfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfTEVHQUNZX0VOQUJMRUQpCiAvKioKICAqIHhtbFZhbGlkYXRlTkNOYW1lOgogICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gY2hlY2sKQEAgLTQyNyw3ICs0MjMsNiBAQAogCiAgICAgcmV0dXJuKDApOwogfQotI2VuZGlmCiAKICNpZiBkZWZpbmVkKExJQlhNTF9UUkVFX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkKIC8qKgpAQCAtODAzLDEwICs3OTgsNiBAQAogdm9pZAogeG1sU2V0TnMoeG1sTm9kZVB0ciBub2RlLCB4bWxOc1B0ciBucykgewogICAgIGlmIChub2RlID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sU2V0TnM6IG5vZGUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm47CiAgICAgfQogICAgIGlmICgobm9kZS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB8fApAQCAtODIzLDEwICs4MTQsNiBAQAogdm9pZAogeG1sRnJlZU5zKHhtbE5zUHRyIGN1cikgewogICAgIGlmIChjdXIgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxGcmVlTnMgOiBucyA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybjsKICAgICB9CiAgICAgaWYgKGN1ci0+aHJlZiAhPSBOVUxMKSB4bWxGcmVlKChjaGFyICopIGN1ci0+aHJlZik7CkBAIC04NDQsMTAgKzgzMSw2IEBACiB4bWxGcmVlTnNMaXN0KHhtbE5zUHRyIGN1cikgewogICAgIHhtbE5zUHRyIG5leHQ7CiAgICAgaWYgKGN1ciA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEZyZWVOc0xpc3QgOiBucyA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybjsKICAgICB9CiAgICAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7CkBAIC04NzUsMTIgKzg1OCw2IEBACiAgICAgeG1sRHRkUHRyIGN1cjsKIAogICAgIGlmICgoZG9jICE9IE5VTEwpICYmIChkb2MtPmV4dFN1YnNldCAhPSBOVUxMKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOZXdEdGQoJXMpOiBkb2N1bWVudCAlcyBhbHJlYWR5IGhhdmUgYSBEVEQgJXNcbiIsCi0JICAgIC8qICEhISAqLyAoY2hhciAqKSBuYW1lLCBkb2MtPm5hbWUsCi0JICAgIC8qICEhISAqLyAoY2hhciAqKWRvYy0+ZXh0U3Vic2V0LT5uYW1lKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKQEAgLTk0OSwxMiArOTI2LDYgQEAKICAgICB4bWxEdGRQdHIgY3VyOwogCiAgICAgaWYgKChkb2MgIT0gTlVMTCkgJiYgKHhtbEdldEludFN1YnNldChkb2MpICE9IE5VTEwpKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQotICAgICAieG1sQ3JlYXRlSW50U3Vic2V0KCk6IGRvY3VtZW50ICVzIGFscmVhZHkgaGF2ZSBhbiBpbnRlcm5hbCBzdWJzZXRcbiIsCi0JICAgIGRvYy0+bmFtZSk7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0xMjA4LDE3ICsxMTc5LDggQEAKICAgICB4bWxEaWN0UHRyIGRpY3QgPSBOVUxMOwogCiAgICAgaWYgKGN1ciA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEZyZWVEb2MgOiBkb2N1bWVudCA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybjsKICAgICB9Ci0jaWZkZWYgTElCWE1MX0RFQlVHX1JVTlRJTUUKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAotICAgIHhtbERlYnVnQ2hlY2tEb2N1bWVudChzdGRlcnIsIGN1cik7Ci0jZW5kaWYKLSNlbmRpZgogCiAgICAgaWYgKGN1ciAhPSBOVUxMKSBkaWN0ID0gY3VyLT5kaWN0OwogCkBAIC0xNDE0LDE0ICsxMzc2LDIxIEBACiAJCQkgICAgaWYgKHZhbCAhPSBOVUxMKSB4bWxGcmVlKHZhbCk7CiAJCQkgICAgZ290byBvdXQ7CiAJCQl9Ci0JCQllbHNlIGlmICgoZW50ICE9IE5VTEwpICYmIChlbnQtPmNoaWxkcmVuID09IE5VTEwpKSB7CisJCQllbHNlIGlmICgoZW50ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGVudC0+ZmxhZ3MgJiBYTUxfRU5UX1BBUlNFRCkgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZW50LT5mbGFncyAmIFhNTF9FTlRfRVhQQU5ESU5HKSA9PSAwKSkgewogCQkJICAgIHhtbE5vZGVQdHIgdGVtcDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0byBub24tTlVMTCB2YWx1ZSB0byBhdm9pZCByZWN1cnNpb24uICovCi0JCQkgICAgZW50LT5jaGlsZHJlbiA9ICh4bWxOb2RlUHRyKSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBlbnRpdHkgc2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGFscmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnV0IHNldCB0aGUgZmxhZyBhbnl3YXkgdG8gYXZvaWQgcmVjdXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9FWFBBTkRJTkc7CiAJCQkgICAgZW50LT5jaGlsZHJlbiA9IHhtbFN0cmluZ0dldE5vZGVMaXN0KGRvYywKIAkJCQkgICAgKGNvbnN0IHhtbENoYXIqKW5vZGUtPmNvbnRlbnQpOwogCQkJICAgIGVudC0+b3duZXIgPSAxOworCQkJICAgIGVudC0+ZmxhZ3MgJj0gflhNTF9FTlRfRVhQQU5ESU5HOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9QQVJTRUQ7CiAJCQkgICAgdGVtcCA9IGVudC0+Y2hpbGRyZW47CiAJCQkgICAgd2hpbGUgKHRlbXApIHsKIAkJCQl0ZW1wLT5wYXJlbnQgPSAoeG1sTm9kZVB0cillbnQ7CkBAIC0xNDkzLDkgKzE0NjIsOSBAQAogICovCiB4bWxOb2RlUHRyCiB4bWxTdHJpbmdHZXROb2RlTGlzdChjb25zdCB4bWxEb2MgKmRvYywgY29uc3QgeG1sQ2hhciAqdmFsdWUpIHsKLSAgICB4bWxOb2RlUHRyIHJldCA9IE5VTEwsIGxhc3QgPSBOVUxMOworICAgIHhtbE5vZGVQdHIgcmV0ID0gTlVMTCwgaGVhZCA9IE5VTEwsIGxhc3QgPSBOVUxMOwogICAgIHhtbE5vZGVQdHIgbm9kZTsKLSAgICB4bWxDaGFyICp2YWw7CisgICAgeG1sQ2hhciAqdmFsID0gTlVMTDsKICAgICBjb25zdCB4bWxDaGFyICpjdXIgPSB2YWx1ZTsKICAgICBjb25zdCB4bWxDaGFyICpxOwogICAgIHhtbEVudGl0eVB0ciBlbnQ7CkBAIC0xNTkzLDE0ICsxNTYyLDEyIEBACiAJCQkgKi8KIAkJCWlmICgheG1sQnVmSXNFbXB0eShidWYpKSB7CiAJCQkgICAgbm9kZSA9IHhtbE5ld0RvY1RleHQoZG9jLCBOVUxMKTsKLQkJCSAgICBpZiAobm9kZSA9PSBOVUxMKSB7Ci0JCQkJaWYgKHZhbCAhPSBOVUxMKSB4bWxGcmVlKHZhbCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQkgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogCQkJICAgIG5vZGUtPmNvbnRlbnQgPSB4bWxCdWZEZXRhY2goYnVmKTsKIAogCQkJICAgIGlmIChsYXN0ID09IE5VTEwpIHsKLQkJCQlsYXN0ID0gcmV0ID0gbm9kZTsKKwkJCQlsYXN0ID0gaGVhZCA9IG5vZGU7CiAJCQkgICAgfSBlbHNlIHsKIAkJCQlsYXN0ID0geG1sQWRkTmV4dFNpYmxpbmcobGFzdCwgbm9kZSk7CiAJCQkgICAgfQpAQCAtMTYxMCwxOCArMTU3NywyMyBAQAogCQkJICogQ3JlYXRlIGEgbmV3IFJFRkVSRU5DRV9SRUYgbm9kZQogCQkJICovCiAJCQlub2RlID0geG1sTmV3UmVmZXJlbmNlKGRvYywgdmFsKTsKLQkJCWlmIChub2RlID09IE5VTEwpIHsKLQkJCSAgICBpZiAodmFsICE9IE5VTEwpIHhtbEZyZWUodmFsKTsKKwkJCWlmIChub2RlID09IE5VTEwpCiAJCQkgICAgZ290byBvdXQ7Ci0JCQl9Ci0JCQllbHNlIGlmICgoZW50ICE9IE5VTEwpICYmIChlbnQtPmNoaWxkcmVuID09IE5VTEwpKSB7CisJCQlpZiAoKGVudCAhPSBOVUxMKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZW50LT5mbGFncyAmIFhNTF9FTlRfUEFSU0VEKSA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZW50LT5mbGFncyAmIFhNTF9FTlRfRVhQQU5ESU5HKSA9PSAwKSkgewogCQkJICAgIHhtbE5vZGVQdHIgdGVtcDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0byBub24tTlVMTCB2YWx1ZSB0byBhdm9pZCByZWN1cnNpb24uICovCi0JCQkgICAgZW50LT5jaGlsZHJlbiA9ICh4bWxOb2RlUHRyKSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBlbnRpdHkgc2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGFscmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnV0IHNldCB0aGUgZmxhZyBhbnl3YXkgdG8gYXZvaWQgcmVjdXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9FWFBBTkRJTkc7CiAJCQkgICAgZW50LT5jaGlsZHJlbiA9IHhtbFN0cmluZ0dldE5vZGVMaXN0KGRvYywKIAkJCQkgICAgKGNvbnN0IHhtbENoYXIqKW5vZGUtPmNvbnRlbnQpOwogCQkJICAgIGVudC0+b3duZXIgPSAxOworCQkJICAgIGVudC0+ZmxhZ3MgJj0gflhNTF9FTlRfRVhQQU5ESU5HOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudC0+ZmxhZ3MgfD0gWE1MX0VOVF9QQVJTRUQ7CiAJCQkgICAgdGVtcCA9IGVudC0+Y2hpbGRyZW47CiAJCQkgICAgd2hpbGUgKHRlbXApIHsKIAkJCQl0ZW1wLT5wYXJlbnQgPSAoeG1sTm9kZVB0cillbnQ7CkBAIC0xNjMwLDEyICsxNjAyLDEzIEBACiAJCQkgICAgfQogCQkJfQogCQkJaWYgKGxhc3QgPT0gTlVMTCkgewotCQkJICAgIGxhc3QgPSByZXQgPSBub2RlOworCQkJICAgIGxhc3QgPSBoZWFkID0gbm9kZTsKIAkJCX0gZWxzZSB7CiAJCQkgICAgbGFzdCA9IHhtbEFkZE5leHRTaWJsaW5nKGxhc3QsIG5vZGUpOwogCQkJfQogCQkgICAgfQogCQkgICAgeG1sRnJlZSh2YWwpOworICAgICAgICAgICAgICAgICAgICB2YWwgPSBOVUxMOwogCQl9CiAJCWN1cisrOwogCQlxID0gY3VyOwpAQCAtMTY1NCw3ICsxNjI3LDcgQEAKIAl9IGVsc2UKIAkgICAgY3VyKys7CiAgICAgfQotICAgIGlmICgoY3VyICE9IHEpIHx8IChyZXQgPT0gTlVMTCkpIHsKKyAgICBpZiAoKGN1ciAhPSBxKSB8fCAoaGVhZCA9PSBOVUxMKSkgewogICAgICAgICAvKgogCSAqIEhhbmRsZSB0aGUgbGFzdCBwaWVjZSBvZiB0ZXh0LgogCSAqLwpAQCAtMTY2MywyMSArMTYzNiwyNCBAQAogCiAgICAgaWYgKCF4bWxCdWZJc0VtcHR5KGJ1ZikpIHsKIAlub2RlID0geG1sTmV3RG9jVGV4dChkb2MsIE5VTEwpOwotICAgICAgICBpZiAobm9kZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB4bWxCdWZGcmVlKGJ1Zik7Ci0gICAgICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gb3V0OwogCW5vZGUtPmNvbnRlbnQgPSB4bWxCdWZEZXRhY2goYnVmKTsKIAogCWlmIChsYXN0ID09IE5VTEwpIHsKLQkgICAgcmV0ID0gbm9kZTsKKwkgICAgaGVhZCA9IG5vZGU7CiAJfSBlbHNlIHsKIAkgICAgeG1sQWRkTmV4dFNpYmxpbmcobGFzdCwgbm9kZSk7CiAJfQogICAgIH0KIAorICAgIHJldCA9IGhlYWQ7CisgICAgaGVhZCA9IE5VTEw7CisKIG91dDoKICAgICB4bWxCdWZGcmVlKGJ1Zik7CisgICAgaWYgKHZhbCAhPSBOVUxMKSB4bWxGcmVlKHZhbCk7CisgICAgaWYgKGhlYWQgIT0gTlVMTCkgeG1sRnJlZU5vZGVMaXN0KGhlYWQpOwogICAgIHJldHVybihyZXQpOwogfQogCkBAIC0xODYzLDcgKzE4MzksNyBAQAogCiAgICAgaWYgKChub2RlICE9IE5VTEwpICYmIChub2RlLT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUpKSB7CiAgICAgICAgIGlmICgoZWF0bmFtZSA9PSAxKSAmJgotCSAgICAoKG5vZGUtPmRvYyA9PSBOVUxMKSB8fAorCSAgICAoKG5vZGUtPmRvYyA9PSBOVUxMKSB8fCAobm9kZS0+ZG9jLT5kaWN0ID09IE5VTEwpIHx8CiAJICAgICAoISh4bWxEaWN0T3ducyhub2RlLT5kb2MtPmRpY3QsIG5hbWUpKSkpKQogICAgICAgICAgICAgeG1sRnJlZSgoeG1sQ2hhciAqKSBuYW1lKTsKICAgICAgICAgcmV0dXJuIChOVUxMKTsKQEAgLTE4NzYsNiArMTg1Miw3IEBACiAgICAgaWYgKGN1ciA9PSBOVUxMKSB7CiAgICAgICAgIGlmICgoZWF0bmFtZSA9PSAxKSAmJgogCSAgICAoKG5vZGUgPT0gTlVMTCkgfHwgKG5vZGUtPmRvYyA9PSBOVUxMKSB8fAorICAgICAgICAgICAgIChub2RlLT5kb2MtPmRpY3QgPT0gTlVMTCkgfHwKIAkgICAgICghKHhtbERpY3RPd25zKG5vZGUtPmRvYy0+ZGljdCwgbmFtZSkpKSkpCiAgICAgICAgICAgICB4bWxGcmVlKCh4bWxDaGFyICopIG5hbWUpOwogICAgICAgICB4bWxUcmVlRXJyTWVtb3J5KCJidWlsZGluZyBhdHRyaWJ1dGUiKTsKQEAgLTE5NTMsMTAgKzE5MzAsNiBAQAogeG1sTmV3UHJvcCh4bWxOb2RlUHRyIG5vZGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKnZhbHVlKSB7CiAKICAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5ld1Byb3AgOiBuYW1lID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtMTk3OSwxMCArMTk1Miw2IEBACiAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnZhbHVlKSB7CiAKICAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5ld05zUHJvcCA6IG5hbWUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yMDA0LDEwICsxOTczLDYgQEAKICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqdmFsdWUpIHsKIAogICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTmV3TnNQcm9wRWF0TmFtZSA6IG5hbWUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yMDMzLDEwICsxOTk4LDYgQEAKICAgICB4bWxBdHRyUHRyIGN1cjsKIAogICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTmV3RG9jUHJvcCA6IG5hbWUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yMTMxLDE3ICsyMDkyLDkgQEAKIHhtbFJlbW92ZVByb3AoeG1sQXR0clB0ciBjdXIpIHsKICAgICB4bWxBdHRyUHRyIHRtcDsKICAgICBpZiAoY3VyID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sUmVtb3ZlUHJvcCA6IGN1ciA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybigtMSk7CiAgICAgfQogICAgIGlmIChjdXItPnBhcmVudCA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbFJlbW92ZVByb3AgOiBjdXItPnBhcmVudCA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybigtMSk7CiAgICAgfQogICAgIHRtcCA9IGN1ci0+cGFyZW50LT5wcm9wZXJ0aWVzOwpAQCAtMjE2MiwxMCArMjExNSw2IEBACiAJfQogICAgICAgICB0bXAgPSB0bXAtPm5leHQ7CiAgICAgfQotI2lmZGVmIERFQlVHX1RSRUUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgInhtbFJlbW92ZVByb3AgOiBhdHRyaWJ1dGUgbm90IG93bmVkIGJ5IGl0cyBub2RlXG4iKTsKLSNlbmRpZgogICAgIHJldHVybigtMSk7CiB9CiAKQEAgLTIxODMsMTAgKzIxMzIsNiBAQAogICAgIHhtbE5vZGVQdHIgY3VyOwogCiAgICAgaWYgKG5hbWUgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOZXdQSSA6IG5hbWUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yMjQ4LDEwICsyMTkzLDYgQEAKICAgICB4bWxOb2RlUHRyIGN1cjsKIAogICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTmV3Tm9kZSA6IG5hbWUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yMjkyLDEwICsyMjMzLDYgQEAKICAgICB4bWxOb2RlUHRyIGN1cjsKIAogICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTmV3Tm9kZSA6IG5hbWUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0yMzg2LDggKzIzMjMsOSBAQAogCX0KICAgICB9IGVsc2UgewogICAgICAgICAvKiBpZiBuYW1lIGRvbid0IGNvbWUgZnJvbSB0aGUgZG9jIGRpY3Rpb25hcnkgZnJlZSBpdCBoZXJlICovCi0gICAgICAgIGlmICgobmFtZSAhPSBOVUxMKSAmJiAoZG9jICE9IE5VTEwpICYmCi0JICAgICghKHhtbERpY3RPd25zKGRvYy0+ZGljdCwgbmFtZSkpKSkKKyAgICAgICAgaWYgKChuYW1lICE9IE5VTEwpICYmCisgICAgICAgICAgICAoKGRvYyA9PSBOVUxMKSB8fCAoZG9jLT5kaWN0ID09IE5VTEwpIHx8CisJICAgICAoISh4bWxEaWN0T3ducyhkb2MtPmRpY3QsIG5hbWUpKSkpKQogCSAgICB4bWxGcmVlKG5hbWUpOwogICAgIH0KICAgICByZXR1cm4oY3VyKTsKQEAgLTI1MTMsMTggKzI0NTEsMTAgQEAKICAgICB4bWxOb2RlUHRyIGN1ciwgcHJldjsKIAogICAgIGlmIChwYXJlbnQgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOZXdUZXh0Q2hpbGQgOiBwYXJlbnQgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOZXdUZXh0Q2hpbGQgOiBuYW1lID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtMjk0OCwxOCArMjg3OCwxMCBAQAogICAgIHhtbE5vZGVQdHIgY3VyLCBwcmV2OwogCiAgICAgaWYgKHBhcmVudCA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5ld0NoaWxkIDogcGFyZW50ID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIAogICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTmV3Q2hpbGQgOiBuYW1lID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtMzA3NiwyNSArMjk5OCwxMyBAQAogeG1sTm9kZVB0cgogeG1sQWRkTmV4dFNpYmxpbmcoeG1sTm9kZVB0ciBjdXIsIHhtbE5vZGVQdHIgZWxlbSkgewogICAgIGlmICgoY3VyID09IE5VTEwpIHx8IChjdXItPnR5cGUgPT0gWE1MX05BTUVTUEFDRV9ERUNMKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxBZGROZXh0U2libGluZyA6IGN1ciA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgaWYgKChlbGVtID09IE5VTEwpIHx8IChlbGVtLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkTmV4dFNpYmxpbmcgOiBlbGVtID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIAogICAgIGlmIChjdXIgPT0gZWxlbSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxBZGROZXh0U2libGluZyA6IGN1ciA9PSBlbGVtXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKQEAgLTMxNTYsMjUgKzMwNjYsMTMgQEAKIHhtbE5vZGVQdHIKIHhtbEFkZFByZXZTaWJsaW5nKHhtbE5vZGVQdHIgY3VyLCB4bWxOb2RlUHRyIGVsZW0pIHsKICAgICBpZiAoKGN1ciA9PSBOVUxMKSB8fCAoY3VyLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkUHJldlNpYmxpbmcgOiBjdXIgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogICAgIGlmICgoZWxlbSA9PSBOVUxMKSB8fCAoZWxlbS0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEFkZFByZXZTaWJsaW5nIDogZWxlbSA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKICAgICBpZiAoY3VyID09IGVsZW0pIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkUHJldlNpYmxpbmcgOiBjdXIgPT0gZWxlbVxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCkBAIC0zMjM2LDI2ICszMTM0LDE0IEBACiAgICAgeG1sTm9kZVB0ciBwYXJlbnQ7CiAKICAgICBpZiAoKGN1ciA9PSBOVUxMKSB8fCAoY3VyLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkU2libGluZyA6IGN1ciA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKICAgICBpZiAoKGVsZW0gPT0gTlVMTCkgfHwgKGVsZW0tPnR5cGUgPT0gWE1MX05BTUVTUEFDRV9ERUNMKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxBZGRTaWJsaW5nIDogZWxlbSA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKICAgICBpZiAoY3VyID09IGVsZW0pIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkU2libGluZyA6IGN1ciA9PSBlbGVtXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKQEAgLTMzMTQsMjcgKzMyMDAsMTUgQEAKICAgICB4bWxOb2RlUHRyIHByZXY7CiAKICAgICBpZiAoKHBhcmVudCA9PSBOVUxMKSB8fCAocGFyZW50LT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkQ2hpbGRMaXN0IDogcGFyZW50ID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIAogICAgIGlmICgoY3VyID09IE5VTEwpIHx8IChjdXItPnR5cGUgPT0gWE1MX05BTUVTUEFDRV9ERUNMKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxBZGRDaGlsZExpc3QgOiBjaGlsZCA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAKICAgICBpZiAoKGN1ci0+ZG9jICE9IE5VTEwpICYmIChwYXJlbnQtPmRvYyAhPSBOVUxMKSAmJgogICAgICAgICAoY3VyLT5kb2MgIT0gcGFyZW50LT5kb2MpKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiRWxlbWVudHMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgZG9jdW1lbnRcbiIpOwotI2VuZGlmCiAgICAgfQogCiAgICAgLyoKQEAgLTM0MDYsMjYgKzMyODAsMTQgQEAKICAgICB4bWxOb2RlUHRyIHByZXY7CiAKICAgICBpZiAoKHBhcmVudCA9PSBOVUxMKSB8fCAocGFyZW50LT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkQ2hpbGQgOiBwYXJlbnQgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCiAgICAgaWYgKChjdXIgPT0gTlVMTCkgfHwgKGN1ci0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEFkZENoaWxkIDogY2hpbGQgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogCiAgICAgaWYgKHBhcmVudCA9PSBjdXIpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQWRkQ2hpbGQgOiBwYXJlbnQgPT0gY3VyXG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgLyoKQEAgLTM1MjgsMTAgKzMzOTAsNiBAQAogeG1sTm9kZVB0cgogeG1sR2V0TGFzdENoaWxkKGNvbnN0IHhtbE5vZGUgKnBhcmVudCkgewogICAgIGlmICgocGFyZW50ID09IE5VTEwpIHx8IChwYXJlbnQtPnR5cGUgPT0gWE1MX05BTUVTUEFDRV9ERUNMKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxHZXRMYXN0Q2hpbGQgOiBwYXJlbnQgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogICAgIHJldHVybihwYXJlbnQtPmxhc3QpOwpAQCAtMzg5NiwxMCArMzc1NCw2IEBACiB2b2lkCiB4bWxVbmxpbmtOb2RlKHhtbE5vZGVQdHIgY3VyKSB7CiAgICAgaWYgKGN1ciA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbFVubGlua05vZGUgOiBub2RlID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuOwogICAgIH0KICAgICBpZiAoY3VyLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkKQEAgLTM5NzYsMTAgKzM4MzAsNiBAQAogICAgIGlmIChvbGQgPT0gY3VyKSByZXR1cm4oTlVMTCk7CiAgICAgaWYgKChvbGQgPT0gTlVMTCkgfHwgKG9sZC0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpIHx8CiAgICAgICAgIChvbGQtPnBhcmVudCA9PSBOVUxMKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxSZXBsYWNlTm9kZSA6IG9sZCA9PSBOVUxMIG9yIHdpdGhvdXQgcGFyZW50XG4iKTsKLSNlbmRpZgogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgaWYgKChjdXIgPT0gTlVMTCkgfHwgKGN1ci0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpKSB7CkBAIC0zOTkwLDE3ICszODQwLDkgQEAKIAlyZXR1cm4ob2xkKTsKICAgICB9CiAgICAgaWYgKChvbGQtPnR5cGU9PVhNTF9BVFRSSUJVVEVfTk9ERSkgJiYgKGN1ci0+dHlwZSE9WE1MX0FUVFJJQlVURV9OT0RFKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxSZXBsYWNlTm9kZSA6IFRyeWluZyB0byByZXBsYWNlIGF0dHJpYnV0ZSBub2RlIHdpdGggb3RoZXIgbm9kZSB0eXBlXG4iKTsKLSNlbmRpZgogCXJldHVybihvbGQpOwogICAgIH0KICAgICBpZiAoKGN1ci0+dHlwZT09WE1MX0FUVFJJQlVURV9OT0RFKSAmJiAob2xkLT50eXBlIT1YTUxfQVRUUklCVVRFX05PREUpKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbFJlcGxhY2VOb2RlIDogVHJ5aW5nIHRvIHJlcGxhY2UgYSBub24tYXR0cmlidXRlIG5vZGUgd2l0aCBhdHRyaWJ1dGUgbm9kZVxuIik7Ci0jZW5kaWYKIAlyZXR1cm4ob2xkKTsKICAgICB9CiAgICAgeG1sVW5saW5rTm9kZShjdXIpOwpAQCAtNDA1MywxMCArMzg5NSw2IEBACiAJICAgIHJldCA9IHhtbE5ld05zKE5VTEwsIGN1ci0+aHJlZiwgY3VyLT5wcmVmaXgpOwogCSAgICBicmVhazsKIAlkZWZhdWx0OgotI2lmZGVmIERFQlVHX1RSRUUKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAieG1sQ29weU5hbWVzcGFjZTogaW52YWxpZCB0eXBlICVkXG4iLCBjdXItPnR5cGUpOwotI2VuZGlmCiAJICAgIHJldHVybihOVUxMKTsKICAgICB9CiAgICAgcmV0dXJuKHJldCk7CkBAIC00MDc3LDYgKzM5MTUsMTAgQEAKIAogICAgIHdoaWxlIChjdXIgIT0gTlVMTCkgewogICAgICAgICBxID0geG1sQ29weU5hbWVzcGFjZShjdXIpOworICAgICAgICBpZiAocSA9PSBOVUxMKSB7CisgICAgICAgICAgICB4bWxGcmVlTnNMaXN0KHJldCk7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KIAlpZiAocCA9PSBOVUxMKSB7CiAJICAgIHJldCA9IHAgPSBxOwogCX0gZWxzZSB7CkBAIC00MDg4LDkgKzM5MzAsNiBAQAogICAgIHJldHVybihyZXQpOwogfQogCi1zdGF0aWMgeG1sTm9kZVB0cgoteG1sU3RhdGljQ29weU5vZGVMaXN0KHhtbE5vZGVQdHIgbm9kZSwgeG1sRG9jUHRyIGRvYywgeG1sTm9kZVB0ciBwYXJlbnQpOwotCiBzdGF0aWMgeG1sQXR0clB0cgogeG1sQ29weVByb3BJbnRlcm5hbCh4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIHRhcmdldCwgeG1sQXR0clB0ciBjdXIpIHsKICAgICB4bWxBdHRyUHRyIHJldDsKQEAgLTQyMjEsOCArNDA2MCwxMCBAQAogICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7CiAgICAgICAgIHEgPSB4bWxDb3B5UHJvcCh0YXJnZXQsIGN1cik7Ci0JaWYgKHEgPT0gTlVMTCkKKwlpZiAocSA9PSBOVUxMKSB7CisgICAgICAgICAgICB4bWxGcmVlUHJvcExpc3QocmV0KTsKIAkgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB9CiAJaWYgKHAgPT0gTlVMTCkgewogCSAgICByZXQgPSBwID0gcTsKIAl9IGVsc2UgewpAQCAtNDI1NCw3ICs0MDk1LDcgQEAKICAqIG5hbWVzcGFjZSBpbmZvLCBidXQgZG9uJ3QgcmVjdXJzZSBvbiBjaGlsZHJlbi4KICAqLwogCi1zdGF0aWMgeG1sTm9kZVB0cgoreG1sTm9kZVB0cgogeG1sU3RhdGljQ29weU5vZGUoeG1sTm9kZVB0ciBub2RlLCB4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIHBhcmVudCwKICAgICAgICAgICAgICAgICAgIGludCBleHRlbmRlZCkgewogICAgIHhtbE5vZGVQdHIgcmV0OwpAQCAtNDM2NSw3ICs0MjA2LDEwIEBACiAJICAgIC8qCiAJICAgICAqIEh1bW0sIHdlIGFyZSBjb3B5aW5nIGFuIGVsZW1lbnQgd2hvc2UgbmFtZXNwYWNlIGlzIGRlZmluZWQKIAkgICAgICogb3V0IG9mIHRoZSBuZXcgdHJlZSBzY29wZS4gU2VhcmNoIGl0IGluIHRoZSBvcmlnaW5hbCB0cmVlCi0JICAgICAqIGFuZCBhZGQgaXQgYXQgdGhlIHRvcCBvZiB0aGUgbmV3IHRyZWUKKwkgICAgICogYW5kIGFkZCBpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXcgdHJlZS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBUT0RPOiBTZWFyY2hpbmcgdGhlIG9yaWdpbmFsIHRyZWUgc2VlbXMgdW5uZWNlc3NhcnkuIFdlCisgICAgICAgICAgICAgKiBhbHJlYWR5IGhhdmUgYSBuYW1lc3BhY2UgVVJJLgogCSAgICAgKi8KIAkgICAgbnMgPSB4bWxTZWFyY2hOcyhub2RlLT5kb2MsIG5vZGUsIG5vZGUtPm5zLT5wcmVmaXgpOwogCSAgICBpZiAobnMgIT0gTlVMTCkgewpAQCAtNDM3Myw4ICs0MjE3LDggQEAKIAogCQl3aGlsZSAocm9vdC0+cGFyZW50ICE9IE5VTEwpIHJvb3QgPSByb290LT5wYXJlbnQ7CiAJCXJldC0+bnMgPSB4bWxOZXdOcyhyb290LCBucy0+aHJlZiwgbnMtPnByZWZpeCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQtPm5zID0geG1sTmV3UmVjb25jaWxlZE5zKGRvYywgcmV0LCBub2RlLT5ucyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldC0+bnMgPSB4bWxOZXdSZWNvbmNpbGVkTnMoZG9jLCByZXQsIG5vZGUtPm5zKTsKIAkgICAgfQogCX0gZWxzZSB7CiAJICAgIC8qCkBAIC00NDUzLDEwICs0Mjk3LDEyIEBACiAgICAgcmV0dXJuKHJldCk7CiB9CiAKLXN0YXRpYyB4bWxOb2RlUHRyCit4bWxOb2RlUHRyCiB4bWxTdGF0aWNDb3B5Tm9kZUxpc3QoeG1sTm9kZVB0ciBub2RlLCB4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIHBhcmVudCkgewogICAgIHhtbE5vZGVQdHIgcmV0ID0gTlVMTDsKICAgICB4bWxOb2RlUHRyIHAgPSBOVUxMLHE7CisgICAgeG1sRHRkUHRyIG5ld1N1YnNldCA9IE5VTEw7CisgICAgaW50IGxpbmtlZFN1YnNldCA9IDA7CiAKICAgICB3aGlsZSAobm9kZSAhPSBOVUxMKSB7CiAjaWZkZWYgTElCWE1MX1RSRUVfRU5BQkxFRApAQCAtNDQ2NSwyMSArNDMxMSwyMiBAQAogCQlub2RlID0gbm9kZS0+bmV4dDsKIAkJY29udGludWU7CiAJICAgIH0KLQkgICAgaWYgKGRvYy0+aW50U3Vic2V0ID09IE5VTEwpIHsKKwkgICAgaWYgKChkb2MtPmludFN1YnNldCA9PSBOVUxMKSAmJiAobmV3U3Vic2V0ID09IE5VTEwpKSB7CiAJCXEgPSAoeG1sTm9kZVB0cikgeG1sQ29weUR0ZCggKHhtbER0ZFB0cikgbm9kZSApOwotCQlpZiAocSA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CisJCWlmIChxID09IE5VTEwpIGdvdG8gZXJyb3I7CiAJCXEtPmRvYyA9IGRvYzsKIAkJcS0+cGFyZW50ID0gcGFyZW50OwotCQlkb2MtPmludFN1YnNldCA9ICh4bWxEdGRQdHIpIHE7CisJCW5ld1N1YnNldCA9ICh4bWxEdGRQdHIpIHE7CiAJCXhtbEFkZENoaWxkKHBhcmVudCwgcSk7CiAJICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGlua2VkU3Vic2V0ID0gMTsKIAkJcSA9ICh4bWxOb2RlUHRyKSBkb2MtPmludFN1YnNldDsKIAkJeG1sQWRkQ2hpbGQocGFyZW50LCBxKTsKIAkgICAgfQogCX0gZWxzZQogI2VuZGlmIC8qIExJQlhNTF9UUkVFX0VOQUJMRUQgKi8KIAkgICAgcSA9IHhtbFN0YXRpY0NvcHlOb2RlKG5vZGUsIGRvYywgcGFyZW50LCAxKTsKLQlpZiAocSA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CisJaWYgKHEgPT0gTlVMTCkgZ290byBlcnJvcjsKIAlpZiAocmV0ID09IE5VTEwpIHsKIAkgICAgcS0+cHJldiA9IE5VTEw7CiAJICAgIHJldCA9IHAgPSBxOwpAQCAtNDQ5MSw3ICs0MzM4LDE0IEBACiAJfQogCW5vZGUgPSBub2RlLT5uZXh0OwogICAgIH0KKyAgICBpZiAoKGRvYyAhPSBOVUxMKSAmJiAobmV3U3Vic2V0ICE9IE5VTEwpKQorICAgICAgICBkb2MtPmludFN1YnNldCA9IG5ld1N1YnNldDsKICAgICByZXR1cm4ocmV0KTsKK2Vycm9yOgorICAgIGlmIChsaW5rZWRTdWJzZXQgIT0gMCkKKyAgICAgICAgeG1sVW5saW5rTm9kZSgoeG1sTm9kZVB0cikgZG9jLT5pbnRTdWJzZXQpOworICAgIHhtbEZyZWVOb2RlTGlzdChyZXQpOworICAgIHJldHVybihOVUxMKTsKIH0KIAogLyoqCkBAIC00ODA4LDEyICs0NjYyLDEyIEBACiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAKICAgICBidWZfbGVuID0gNTAwOwotICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhidWZfbGVuICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBidWZmZXIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoYnVmX2xlbik7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJeG1sVHJlZUVyck1lbW9yeSgiZ2V0dGluZyBub2RlIHBhdGgiKTsKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB9Ci0gICAgYnVmID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKGJ1Zl9sZW4gKiBzaXplb2YoeG1sQ2hhcikpOworICAgIGJ1ZiA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhidWZfbGVuKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKIAl4bWxUcmVlRXJyTWVtb3J5KCJnZXR0aW5nIG5vZGUgcGF0aCIpOwogICAgICAgICB4bWxGcmVlKGJ1ZmZlcik7CkBAIC01NzUyLDEwICs1NjA2LDYgQEAKIHZvaWQKIHhtbE5vZGVTZXRDb250ZW50KHhtbE5vZGVQdHIgY3VyLCBjb25zdCB4bWxDaGFyICpjb250ZW50KSB7CiAgICAgaWYgKGN1ciA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5vZGVTZXRDb250ZW50IDogbm9kZSA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybjsKICAgICB9CiAgICAgc3dpdGNoIChjdXItPnR5cGUpIHsKQEAgLTU4MjUsMTAgKzU2NzUsNiBAQAogdm9pZAogeG1sTm9kZVNldENvbnRlbnRMZW4oeG1sTm9kZVB0ciBjdXIsIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQsIGludCBsZW4pIHsKICAgICBpZiAoY3VyID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sTm9kZVNldENvbnRlbnRMZW4gOiBub2RlID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuOwogICAgIH0KICAgICBzd2l0Y2ggKGN1ci0+dHlwZSkgewpAQCAtNTg5NSwxMCArNTc0MSw2IEBACiB2b2lkCiB4bWxOb2RlQWRkQ29udGVudExlbih4bWxOb2RlUHRyIGN1ciwgY29uc3QgeG1sQ2hhciAqY29udGVudCwgaW50IGxlbikgewogICAgIGlmIChjdXIgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOb2RlQWRkQ29udGVudExlbiA6IG5vZGUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm47CiAgICAgfQogICAgIGlmIChsZW4gPD0gMCkgcmV0dXJuOwpAQCAtNTk2OSwxMCArNTgxMSw2IEBACiAgICAgaW50IGxlbjsKIAogICAgIGlmIChjdXIgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOb2RlQWRkQ29udGVudCA6IG5vZGUgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm47CiAgICAgfQogICAgIGlmIChjb250ZW50ID09IE5VTEwpIHJldHVybjsKQEAgLTYwMTksNyArNTg1Nyw3IEBACiAgICAgeG1sTnNQdHIgY3VyOwogICAgIHhtbE5zUHRyICpyZXQgPSBOVUxMOwogICAgIGludCBuYm5zID0gMDsKLSAgICBpbnQgbWF4bnMgPSAxMDsKKyAgICBpbnQgbWF4bnMgPSAwOwogICAgIGludCBpOwogCiAgICAgaWYgKChub2RlID09IE5VTEwpIHx8IChub2RlLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpCkBAIC02MDI5LDE2ICs1ODY3LDYgQEAKICAgICAgICAgaWYgKG5vZGUtPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkgewogICAgICAgICAgICAgY3VyID0gbm9kZS0+bnNEZWY7CiAgICAgICAgICAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh4bWxOc1B0ciAqKSB4bWxNYWxsb2MoKG1heG5zICsgMSkgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoeG1sTnNQdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0JCQl4bWxUcmVlRXJyTWVtb3J5KCJnZXR0aW5nIG5hbWVzcGFjZSBsaXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldFtuYm5zXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYm5zOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChjdXItPnByZWZpeCA9PSByZXRbaV0tPnByZWZpeCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICh4bWxTdHJFcXVhbChjdXItPnByZWZpeCwgcmV0W2ldLT5wcmVmaXgpKSkKQEAgLTYwNDYsMTUgKzU4NzQsMTggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGkgPj0gbmJucykgewogICAgICAgICAgICAgICAgICAgICBpZiAobmJucyA+PSBtYXhucykgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4bnMgKj0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICh4bWxOc1B0ciAqKSB4bWxSZWFsbG9jKHJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhucyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgeG1sTnNQdHIgKnRtcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF4bnMgPSBtYXhucyA/IG1heG5zICogMiA6IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHhtbE5zUHRyICopIHhtbFJlYWxsb2MocmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heG5zICsgMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHhtbE5zUHRyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewogCQkJICAgIHhtbFRyZWVFcnJNZW1vcnkoImdldHRpbmcgbmFtZXNwYWNlIGxpc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXRbbmJucysrXSA9IGN1cjsKICAgICAgICAgICAgICAgICAgICAgcmV0W25ibnNdID0gTlVMTDsKQEAgLTYzNDUsMTcgKzYxNzYsOSBAQAogICAgIGludCBjb3VudGVyID0gMTsKIAogICAgIGlmICgodHJlZSA9PSBOVUxMKSB8fCAodHJlZS0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFKSkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxOZXdSZWNvbmNpbGVkTnMgOiB0cmVlID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICBpZiAoKG5zID09IE5VTEwpIHx8IChucy0+dHlwZSAhPSBYTUxfTkFNRVNQQUNFX0RFQ0wpKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbE5ld1JlY29uY2lsZWROcyA6IG5zID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICAvKgpAQCAtNzEwMiwxMCArNjkyNSw2IEBACiAgICAgICAgIChub2RlLT50eXBlICE9IFhNTF9DREFUQV9TRUNUSU9OX05PREUpICYmCiAJKG5vZGUtPnR5cGUgIT0gWE1MX0NPTU1FTlRfTk9ERSkgJiYKIAkobm9kZS0+dHlwZSAhPSBYTUxfUElfTk9ERSkpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxUZXh0Q29uY2F0OiBub2RlIGlzIG5vdCB0ZXh0IG5vciBDREFUQVxuIik7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICB9CiAgICAgLyogbmVlZCB0byBjaGVjayBpZiBjb250ZW50IGlzIGN1cnJlbnRseSBpbiB0aGUgZGljdGlvbmFyeSAqLwpAQCAtNzE0Niw3ICs2OTY1LDcgQEAKICAgICByZXQtPnVzZSA9IDA7CiAgICAgcmV0LT5zaXplID0geG1sRGVmYXVsdEJ1ZmZlclNpemU7CiAgICAgcmV0LT5hbGxvYyA9IHhtbEJ1ZmZlckFsbG9jU2NoZW1lOwotICAgIHJldC0+Y29udGVudCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhyZXQtPnNpemUgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIHJldC0+Y29udGVudCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhyZXQtPnNpemUpOwogICAgIGlmIChyZXQtPmNvbnRlbnQgPT0gTlVMTCkgewogCXhtbFRyZWVFcnJNZW1vcnkoImNyZWF0aW5nIGJ1ZmZlciIpOwogCXhtbEZyZWUocmV0KTsKQEAgLTcxNzksNyArNjk5OCw3IEBACiAgICAgcmV0LT5hbGxvYyA9IHhtbEJ1ZmZlckFsbG9jU2NoZW1lOwogICAgIHJldC0+c2l6ZSA9IChzaXplID8gc2l6ZSArIDEgOiAwKTsgICAgICAgICAvKiArMSBmb3IgZW5kaW5nIG51bGwgKi8KICAgICBpZiAocmV0LT5zaXplKXsKLSAgICAgICAgcmV0LT5jb250ZW50ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHJldC0+c2l6ZSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgICAgIHJldC0+Y29udGVudCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhyZXQtPnNpemUpOwogICAgICAgICBpZiAocmV0LT5jb250ZW50ID09IE5VTEwpIHsKIAkgICAgeG1sVHJlZUVyck1lbW9yeSgiY3JlYXRpbmcgYnVmZmVyIik7CiAgICAgICAgICAgICB4bWxGcmVlKHJldCk7CkBAIC03MjA4LDggKzcwMjcsNiBAQAogCiAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpCi0gICAgICAgIHJldHVybihOVUxMKTsKIAogICAgIHJldCA9IGJ1Zi0+Y29udGVudDsKICAgICBidWYtPmNvbnRlbnQgPSBOVUxMOwpAQCAtNzIyNSwzMSArNzA0MiwxNCBAQAogICogQG1lbTogdGhlIG1lbW9yeSBhcmVhCiAgKiBAc2l6ZTogIHRoZSBzaXplIGluIGJ5dGUKICAqCi0gKiByb3V0aW5lIHRvIGNyZWF0ZSBhbiBYTUwgYnVmZmVyIGZyb20gYW4gaW1tdXRhYmxlIG1lbW9yeSBhcmVhLgotICogVGhlIGFyZWEgd29uJ3QgYmUgbW9kaWZpZWQgbm9yIGNvcGllZCwgYW5kIGlzIGV4cGVjdGVkIHRvIGJlCi0gKiBwcmVzZW50IHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBsaWZldGltZS4KLSAqCi0gKiByZXR1cm5zIHRoZSBuZXcgc3RydWN0dXJlLgorICogUmV0dXJucyBhbiBYTUwgYnVmZmVyIGluaXRpYWxpemVkIHdpdGggYnl0ZXMuCiAgKi8KIHhtbEJ1ZmZlclB0cgogeG1sQnVmZmVyQ3JlYXRlU3RhdGljKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIHsKLSAgICB4bWxCdWZmZXJQdHIgcmV0OworICAgIHhtbEJ1ZmZlclB0ciBidWYgPSB4bWxCdWZmZXJDcmVhdGVTaXplKHNpemUpOwogCi0gICAgaWYgKChtZW0gPT0gTlVMTCkgfHwgKHNpemUgPT0gMCkpCi0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICBpZiAoc2l6ZSA+IFVJTlRfTUFYKQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0KLSAgICByZXQgPSAoeG1sQnVmZmVyUHRyKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbEJ1ZmZlcikpOwotICAgIGlmIChyZXQgPT0gTlVMTCkgewotCXhtbFRyZWVFcnJNZW1vcnkoImNyZWF0aW5nIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHJldC0+dXNlID0gc2l6ZTsKLSAgICByZXQtPnNpemUgPSBzaXplOwotICAgIHJldC0+YWxsb2MgPSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRTsKLSAgICByZXQtPmNvbnRlbnQgPSAoeG1sQ2hhciAqKSBtZW07Ci0gICAgcmV0dXJuKHJldCk7CisgICAgeG1sQnVmZmVyQWRkKGJ1ZiwgbWVtLCBzaXplKTsKKyAgICByZXR1cm4oYnVmKTsKIH0KIAogLyoqCkBAIC03MjYzLDE4ICs3MDYzLDEyIEBACiB4bWxCdWZmZXJTZXRBbGxvY2F0aW9uU2NoZW1lKHhtbEJ1ZmZlclB0ciBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWUgc2NoZW1lKSB7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfQlVGRkVSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQnVmZmVyU2V0QWxsb2NhdGlvblNjaGVtZTogYnVmID09IE5VTExcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSB8fAotICAgICAgICAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKSkgcmV0dXJuOworICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pIHJldHVybjsKICAgICBpZiAoKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUKSB8fAogICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QpIHx8Ci0gICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19IWUJSSUQpIHx8Ci0gICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpKQorICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSFlCUklEKSkKIAlidWYtPmFsbG9jID0gc2NoZW1lOwogfQogCkBAIC03Mjg4LDE4ICs3MDgyLDEzIEBACiB2b2lkCiB4bWxCdWZmZXJGcmVlKHhtbEJ1ZmZlclB0ciBidWYpIHsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19CVUZGRVIKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxCdWZmZXJGcmVlOiBidWYgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm47CiAgICAgfQogCiAgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmCiAgICAgICAgIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgewogICAgICAgICB4bWxGcmVlKGJ1Zi0+Y29udGVudElPKTsKLSAgICB9IGVsc2UgaWYgKChidWYtPmNvbnRlbnQgIT0gTlVMTCkgJiYKLSAgICAgICAgKGJ1Zi0+YWxsb2MgIT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpKSB7CisgICAgfSBlbHNlIGlmIChidWYtPmNvbnRlbnQgIT0gTlVMTCkgewogICAgICAgICB4bWxGcmVlKGJ1Zi0+Y29udGVudCk7CiAgICAgfQogICAgIHhtbEZyZWUoYnVmKTsKQEAgLTczMTYsMTAgKzcxMDUsNyBAQAogICAgIGlmIChidWYgPT0gTlVMTCkgcmV0dXJuOwogICAgIGlmIChidWYtPmNvbnRlbnQgPT0gTlVMTCkgcmV0dXJuOwogICAgIGJ1Zi0+dXNlID0gMDsKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgewotICAgICAgICBidWYtPmNvbnRlbnQgPSBCQURfQ0FTVCAiIjsKLSAgICB9IGVsc2UgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmCi0gICAgICAgICAgICAgICAoYnVmLT5jb250ZW50SU8gIT0gTlVMTCkpIHsKKyAgICBpZiAoKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTykgJiYgKGJ1Zi0+Y29udGVudElPICE9IE5VTEwpKSB7CiAgICAgICAgIHNpemVfdCBzdGFydF9idWYgPSBidWYtPmNvbnRlbnQgLSBidWYtPmNvbnRlbnRJTzsKIAogCWJ1Zi0+c2l6ZSArPSBzdGFydF9idWY7CkBAIC03MzQ2LDggKzcxMzIsNyBAQAogICAgIGlmIChsZW4gPiBidWYtPnVzZSkgcmV0dXJuKC0xKTsKIAogICAgIGJ1Zi0+dXNlIC09IGxlbjsKLSAgICBpZiAoKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHx8Ci0gICAgICAgICgoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lPKSAmJiAoYnVmLT5jb250ZW50SU8gIT0gTlVMTCkpKSB7CisgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgewogCS8qCiAJICogd2UganVzdCBtb3ZlIHRoZSBjb250ZW50IHBvaW50ZXIsIGJ1dCBhbHNvIG1ha2Ugc3VyZQogCSAqIHRoZSBwZXJjZWl2ZWQgYnVmZmVyIHNpemUgaGFzIHNocnVuayBhY2NvcmRpbmdseQpAQCAtNzM5MSw3ICs3MTc2LDYgQEAKIAogICAgIGlmIChidWYgPT0gTlVMTCkgcmV0dXJuKC0xKTsKIAotICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSByZXR1cm4oMCk7CiAgICAgaWYgKGxlbiA8IGJ1Zi0+c2l6ZSAtIGJ1Zi0+dXNlKQogICAgICAgICByZXR1cm4oMCk7CiAgICAgaWYgKGxlbiA+PSBVSU5UX01BWCAtIGJ1Zi0+dXNlKSB7CkBAIC03NDQxLDIzICs3MjI1LDE1IEBACiAgICAgc2l6ZV90IHJldDsKIAogICAgIGlmIChidWYgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX0JVRkZFUgotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEJ1ZmZlckR1bXA6IGJ1ZiA9PSBOVUxMXG4iKTsKLSNlbmRpZgogCXJldHVybigwKTsKICAgICB9CiAgICAgaWYgKGJ1Zi0+Y29udGVudCA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfQlVGRkVSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQnVmZmVyRHVtcDogYnVmLT5jb250ZW50ID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuKDApOwogICAgIH0KICAgICBpZiAoZmlsZSA9PSBOVUxMKQogCWZpbGUgPSBzdGRvdXQ7Ci0gICAgcmV0ID0gZndyaXRlKGJ1Zi0+Y29udGVudCwgc2l6ZW9mKHhtbENoYXIpLCBidWYtPnVzZSwgZmlsZSk7Ci0gICAgcmV0dXJuKHJldCA+IElOVF9NQVggPyBJTlRfTUFYIDogKGludClyZXQpOworICAgIHJldCA9IGZ3cml0ZShidWYtPmNvbnRlbnQsIDEsIGJ1Zi0+dXNlLCBmaWxlKTsKKyAgICByZXR1cm4ocmV0ID4gSU5UX01BWCA/IElOVF9NQVggOiByZXQpOwogfQogCiAvKioKQEAgLTc1MTUsOCArNzI5MSw2IEBACiAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4oMCk7CiAKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuKDApOwotCiAgICAgLyogRG9uJ3QgcmVzaXplIGlmIHdlIGRvbid0IGhhdmUgdG8gKi8KICAgICBpZiAoc2l6ZSA8IGJ1Zi0+c2l6ZSkKICAgICAgICAgcmV0dXJuIDE7CkBAIC03NjM0LDEyICs3NDA4LDcgQEAKICAgICBpZiAoKHN0ciA9PSBOVUxMKSB8fCAoYnVmID09IE5VTEwpKSB7CiAJcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuIC0xOwogICAgIGlmIChsZW4gPCAtMSkgewotI2lmZGVmIERFQlVHX0JVRkZFUgotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInhtbEJ1ZmZlckFkZDogbGVuIDwgMFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuIDA7CkBAIC03NjYzLDcgKzc0MzIsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbWVtbW92ZSgmYnVmLT5jb250ZW50W2J1Zi0+dXNlXSwgc3RyLCBsZW4qc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBtZW1tb3ZlKCZidWYtPmNvbnRlbnRbYnVmLT51c2VdLCBzdHIsIGxlbik7CiAgICAgYnVmLT51c2UgKz0gbGVuOwogICAgIGJ1Zi0+Y29udGVudFtidWYtPnVzZV0gPSAwOwogICAgIHJldHVybiAwOwpAQCAtNzY4NywxOSArNzQ1NiwxMCBAQAogCiAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4oLTEpOwotICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSByZXR1cm4gLTE7CiAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfQlVGRkVSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkieG1sQnVmZmVyQWRkSGVhZDogc3RyID09IE5VTExcbiIpOwotI2VuZGlmCiAJcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAobGVuIDwgLTEpIHsKLSNpZmRlZiBERUJVR19CVUZGRVIKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxCdWZmZXJBZGRIZWFkOiBsZW4gPCAwXG4iKTsKLSNlbmRpZgogCXJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDsKQEAgLTc3NTgsNyArNzUxOCw2IEBACiB4bWxCdWZmZXJDYXQoeG1sQnVmZmVyUHRyIGJ1ZiwgY29uc3QgeG1sQ2hhciAqc3RyKSB7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4oLTEpOwotICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSByZXR1cm4gLTE7CiAgICAgaWYgKHN0ciA9PSBOVUxMKSByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHhtbEJ1ZmZlckFkZChidWYsIHN0ciwgLTEpOwogfQpAQCAtNzc5MCw3ICs3NTQ5LDYgQEAKIHhtbEJ1ZmZlcldyaXRlQ0hBUih4bWxCdWZmZXJQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHJpbmcpIHsKICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuOwogICAgIHhtbEJ1ZmZlckNhdChidWYsIHN0cmluZyk7CiB9CiAKQEAgLTc4MDYsNyArNzU2NCw2IEBACiB4bWxCdWZmZXJXcml0ZUNoYXIoeG1sQnVmZmVyUHRyIGJ1ZiwgY29uc3QgY2hhciAqc3RyaW5nKSB7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHJldHVybjsKICAgICB4bWxCdWZmZXJDQ2F0KGJ1Ziwgc3RyaW5nKTsKIH0KIApAQCAtNzgyNSwxMyArNzU4Miw4IEBACiAgICAgY29uc3QgeG1sQ2hhciAqY3VyLCAqYmFzZTsKICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuOwogICAgIGlmICh4bWxTdHJjaHIoc3RyaW5nLCAnXCInKSkgewogICAgICAgICBpZiAoeG1sU3RyY2hyKHN0cmluZywgJ1wnJykpIHsKLSNpZmRlZiBERUJVR19CVUZGRVIKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gInhtbEJ1ZmZlcldyaXRlUXVvdGVkU3RyaW5nOiBzdHJpbmcgY29udGFpbnMgcXVvdGUgYW5kIGRvdWJsZS1xdW90ZXMgIVxuIik7Ci0jZW5kaWYKIAkgICAgeG1sQnVmZmVyQ0NhdChidWYsICJcIiIpOwogICAgICAgICAgICAgYmFzZSA9IGN1ciA9IHN0cmluZzsKICAgICAgICAgICAgIHdoaWxlKCpjdXIgIT0gMCl7CkBAIC0xMDI0OCwzICsxMDAwMCw5MCBAQAogICAgIHJldHVybiAoMCk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJKgorICoJCQlYSFRNTCBkZXRlY3Rpb24JCQkJCSoKKyAqCQkJCQkJCQkJKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBYSFRNTF9TVFJJQ1RfUFVCTElDX0lEIEJBRF9DQVNUIFwKKyAgICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyNkZWZpbmUgWEhUTUxfU1RSSUNUX1NZU1RFTV9JRCBCQURfQ0FTVCBcCisgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCIKKyNkZWZpbmUgWEhUTUxfRlJBTUVfUFVCTElDX0lEIEJBRF9DQVNUIFwKKyAgICItLy9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIgorI2RlZmluZSBYSFRNTF9GUkFNRV9TWVNURU1fSUQgQkFEX0NBU1QgXAorICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLWZyYW1lc2V0LmR0ZCIKKyNkZWZpbmUgWEhUTUxfVFJBTlNfUFVCTElDX0lEIEJBRF9DQVNUIFwKKyAgICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKKyNkZWZpbmUgWEhUTUxfVFJBTlNfU1lTVEVNX0lEIEJBRF9DQVNUIFwKKyAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIgorCisvKioKKyAqIHhtbElzWEhUTUw6CisgKiBAc3lzdGVtSUQ6ICB0aGUgc3lzdGVtIGlkZW50aWZpZXIKKyAqIEBwdWJsaWNJRDogIHRoZSBwdWJsaWMgaWRlbnRpZmllcgorICoKKyAqIFRyeSB0byBmaW5kIGlmIHRoZSBkb2N1bWVudCBjb3JyZXNwb25kIHRvIGFuIFhIVE1MIERURAorICoKKyAqIFJldHVybnMgMSBpZiB0cnVlLCAwIGlmIG5vdCBhbmQgLTEgaW4gY2FzZSBvZiBlcnJvcgorICovCitpbnQKK3htbElzWEhUTUwoY29uc3QgeG1sQ2hhciAqc3lzdGVtSUQsIGNvbnN0IHhtbENoYXIgKnB1YmxpY0lEKSB7CisgICAgaWYgKChzeXN0ZW1JRCA9PSBOVUxMKSAmJiAocHVibGljSUQgPT0gTlVMTCkpCisJcmV0dXJuKC0xKTsKKyAgICBpZiAocHVibGljSUQgIT0gTlVMTCkgeworCWlmICh4bWxTdHJFcXVhbChwdWJsaWNJRCwgWEhUTUxfU1RSSUNUX1BVQkxJQ19JRCkpIHJldHVybigxKTsKKwlpZiAoeG1sU3RyRXF1YWwocHVibGljSUQsIFhIVE1MX0ZSQU1FX1BVQkxJQ19JRCkpIHJldHVybigxKTsKKwlpZiAoeG1sU3RyRXF1YWwocHVibGljSUQsIFhIVE1MX1RSQU5TX1BVQkxJQ19JRCkpIHJldHVybigxKTsKKyAgICB9CisgICAgaWYgKHN5c3RlbUlEICE9IE5VTEwpIHsKKwlpZiAoeG1sU3RyRXF1YWwoc3lzdGVtSUQsIFhIVE1MX1NUUklDVF9TWVNURU1fSUQpKSByZXR1cm4oMSk7CisJaWYgKHhtbFN0ckVxdWFsKHN5c3RlbUlELCBYSFRNTF9GUkFNRV9TWVNURU1fSUQpKSByZXR1cm4oMSk7CisJaWYgKHhtbFN0ckVxdWFsKHN5c3RlbUlELCBYSFRNTF9UUkFOU19TWVNURU1fSUQpKSByZXR1cm4oMSk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJCQkqCisgKgkJCU5vZGUgY2FsbGJhY2tzCQkJCQkqCisgKgkJCQkJCQkJCSoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdDoKKyAqIEBmdW5jOiBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgUmVnaXN0ZXJOb2RlRnVuYworICoKKyAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZvciBub2RlIGNyZWF0aW9uCisgKgorICogUmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAqLworeG1sUmVnaXN0ZXJOb2RlRnVuYworeG1sUmVnaXN0ZXJOb2RlRGVmYXVsdCh4bWxSZWdpc3Rlck5vZGVGdW5jIGZ1bmMpCit7CisgICAgeG1sUmVnaXN0ZXJOb2RlRnVuYyBvbGQgPSB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWU7CisKKyAgICBfX3htbFJlZ2lzdGVyQ2FsbGJhY2tzID0gMTsKKyAgICB4bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBmdW5jOworICAgIHJldHVybihvbGQpOworfQorCisvKioKKyAqIHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdDoKKyAqIEBmdW5jOiBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBuZXcgRGVyZWdpc3Rlck5vZGVGdW5jCisgKgorICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZm9yIG5vZGUgZGVzdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAqLworeG1sRGVyZWdpc3Rlck5vZGVGdW5jCit4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQoeG1sRGVyZWdpc3Rlck5vZGVGdW5jIGZ1bmMpCit7CisgICAgeG1sRGVyZWdpc3Rlck5vZGVGdW5jIG9sZCA9IHhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlOworCisgICAgX194bWxSZWdpc3RlckNhbGxiYWNrcyA9IDE7CisgICAgeG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgPSBmdW5jOworICAgIHJldHVybihvbGQpOworfQorCmRpZmYgLS1naXQgYS91cmkuYyBiL3VyaS5jCmluZGV4IGU1Yzc5MGUuLjAzYjVhMzEgMTAwNjQ0Ci0tLSBhL3VyaS5jCisrKyBiL3VyaS5jCkBAIC0xNiw5ICsxNiwxMCBAQAogCiAjaW5jbHVkZSA8bGlieG1sL3htbG1lbW9yeS5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgogCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgorCiAvKioKICAqIE1BWF9VUklfTEVOR1RIOgogICoKQEAgLTMzLDYgKzM0LDkgQEAKICAqLwogI2RlZmluZSBNQVhfVVJJX0xFTkdUSCAxMDI0ICogMTAyNAogCisjZGVmaW5lIFBPUlRfRU1QVFkgICAgICAgICAgIDAKKyNkZWZpbmUgUE9SVF9FTVBUWV9TRVJWRVIgICAtMQorCiBzdGF0aWMgdm9pZAogeG1sVVJJRXJyTWVtb3J5KGNvbnN0IGNoYXIgKmV4dHJhKQogewpAQCAtNzY4LDggKzc3MiwxMSBAQAogICAgICAgICBjdXIgKz0gMjsKIAlyZXQgPSB4bWxQYXJzZTM5ODZBdXRob3JpdHkodXJpLCAmY3VyKTsKIAlpZiAocmV0ICE9IDApIHJldHVybihyZXQpOwotCWlmICh1cmktPnNlcnZlciA9PSBOVUxMKQotCSAgICB1cmktPnBvcnQgPSAtMTsKKyAgICAgICAgLyoKKyAgICAgICAgICogQW4gZW1wdHkgc2VydmVyIGlzIG1hcmtlZCB3aXRoIGEgc3BlY2lhbCBVUkkgdmFsdWUuCisgICAgICAgICAqLworCWlmICgodXJpLT5zZXJ2ZXIgPT0gTlVMTCkgJiYgKHVyaS0+cG9ydCA9PSBQT1JUX0VNUFRZKSkKKwkgICAgdXJpLT5wb3J0ID0gUE9SVF9FTVBUWV9TRVJWRVI7CiAJcmV0ID0geG1sUGFyc2UzOTg2UGF0aEFiRW1wdHkodXJpLCAmY3VyKTsKIAlpZiAocmV0ICE9IDApIHJldHVybihyZXQpOwogCSpzdHIgPSBjdXI7CkBAIC0xMDI2LDYgKzEwMzMsNyBAQAogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKHhtbFVSSSkpOworICAgIHJldC0+cG9ydCA9IFBPUlRfRU1QVFk7CiAgICAgcmV0dXJuKHJldCk7CiB9CiAKQEAgLTEwNzQsNyArMTA4Miw3IEBACiAKIAogICAgIG1heCA9IDgwOwotICAgIHJldCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYygobWF4ICsgMSkgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIHJldCA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhtYXggKyAxKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKICAgICAgICAgeG1sVVJJRXJyTWVtb3J5KCJzYXZpbmcgVVJJXG4iKTsKIAlyZXR1cm4oTlVMTCk7CkBAIC0xMTE3LDcgKzExMjUsNyBAQAogCSAgICB9CiAJfQogICAgIH0gZWxzZSB7Ci0JaWYgKCh1cmktPnNlcnZlciAhPSBOVUxMKSB8fCAodXJpLT5wb3J0ID09IC0xKSkgeworCWlmICgodXJpLT5zZXJ2ZXIgIT0gTlVMTCkgfHwgKHVyaS0+cG9ydCAhPSBQT1JUX0VNUFRZKSkgewogCSAgICBpZiAobGVuICsgMyA+PSBtYXgpIHsKICAgICAgICAgICAgICAgICB0ZW1wID0geG1sU2F2ZVVyaVJlYWxsb2MocmV0LCAmbWF4KTsKICAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSBnb3RvIG1lbV9lcnJvcjsKQEAgLTExNjIsMTcgKzExNzAsMTggQEAKIAkJCWlmICh0ZW1wID09IE5VTEwpIGdvdG8gbWVtX2Vycm9yOwogCQkJcmV0ID0gdGVtcDsKIAkJICAgIH0KLQkJICAgIHJldFtsZW4rK10gPSAqcCsrOwotCQl9Ci0JCWlmICh1cmktPnBvcnQgPiAwKSB7Ci0JCSAgICBpZiAobGVuICsgMTAgPj0gbWF4KSB7Ci0JCQl0ZW1wID0geG1sU2F2ZVVyaVJlYWxsb2MocmV0LCAmbWF4KTsKLQkJCWlmICh0ZW1wID09IE5VTEwpIGdvdG8gbWVtX2Vycm9yOwotCQkJcmV0ID0gdGVtcDsKLQkJICAgIH0KLQkJICAgIGxlbiArPSBzbnByaW50ZigoY2hhciAqKSAmcmV0W2xlbl0sIG1heCAtIGxlbiwgIjolZCIsIHVyaS0+cG9ydCk7CisgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGVzY2FwaW5nPyAqLworCQkgICAgcmV0W2xlbisrXSA9ICh4bWxDaGFyKSAqcCsrOwogCQl9CiAJICAgIH0KKyAgICAgICAgICAgIGlmICh1cmktPnBvcnQgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiArIDEwID49IG1heCkgeworICAgICAgICAgICAgICAgICAgICB0ZW1wID0geG1sU2F2ZVVyaVJlYWxsb2MocmV0LCAmbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgZ290byBtZW1fZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHRlbXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxlbiArPSBzbnByaW50ZigoY2hhciAqKSAmcmV0W2xlbl0sIG1heCAtIGxlbiwgIjolZCIsIHVyaS0+cG9ydCk7CisgICAgICAgICAgICB9CiAJfSBlbHNlIGlmICh1cmktPmF1dGhvcml0eSAhPSBOVUxMKSB7CiAJICAgIGlmIChsZW4gKyAzID49IG1heCkgewogICAgICAgICAgICAgICAgIHRlbXAgPSB4bWxTYXZlVXJpUmVhbGxvYyhyZXQsICZtYXgpOwpAQCAtMTY1NSw2ICsxNjY0LDcgQEAKIAkgICAgICAgIGMgPSBjICogMTYgKyAoKmluIC0gJ0EnKSArIDEwOwogCSAgICBpbisrOwogCSAgICBsZW4gLT0gMzsKKyAgICAgICAgICAgIC8qIEV4cGxpY2l0IHNpZ24gY2hhbmdlICovCiAJICAgICpvdXQrKyA9IChjaGFyKSBjOwogCX0gZWxzZSB7CiAJICAgICpvdXQrKyA9ICppbisrOwpAQCAtMTY3MCw4ICsxNjgwLDggQEAKICAqIEBzdHI6ICBzdHJpbmcgdG8gZXNjYXBlCiAgKiBAbGlzdDogZXhjZXB0aW9uIGxpc3Qgc3RyaW5nIG9mIGNoYXJzIG5vdCB0byBlc2NhcGUKICAqCi0gKiBUaGlzIHJvdXRpbmUgZXNjYXBlcyBhIHN0cmluZyB0byBoZXgsIGlnbm9yaW5nIHJlc2VydmVkIGNoYXJhY3RlcnMgKGEteikKLSAqIGFuZCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZXhjZXB0aW9uIGxpc3QuCisgKiBUaGlzIHJvdXRpbmUgZXNjYXBlcyBhIHN0cmluZyB0byBoZXgsIGlnbm9yaW5nIHJlc2VydmVkIGNoYXJhY3RlcnMKKyAqIChhLXosIEEtWiwgMC05LCAiQC1fLiF+KicoKSIpIGFuZCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZXhjZXB0aW9uIGxpc3QuCiAgKgogICogUmV0dXJucyBhIG5ldyBlc2NhcGVkIHN0cmluZyBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KQEAgLTE4MTcsMTAgKzE4MjcsMTAgQEAKICAgICAgICAgeG1sRnJlZShzZWdtZW50KTsKICAgICB9CiAKLSAgICBpZiAodXJpLT5wb3J0KSB7Ci0gICAgICAgIHhtbENoYXIgcG9ydFsxMF07CisgICAgaWYgKHVyaS0+cG9ydCA+IDApIHsKKyAgICAgICAgeG1sQ2hhciBwb3J0WzExXTsKIAotICAgICAgICBzbnByaW50ZigoY2hhciAqKSBwb3J0LCAxMCwgIiVkIiwgdXJpLT5wb3J0KTsKKyAgICAgICAgc25wcmludGYoKGNoYXIgKikgcG9ydCwgMTEsICIlZCIsIHVyaS0+cG9ydCk7CiAgICAgICAgIHJldCA9IHhtbFN0cmNhdChyZXQsIEJBRF9DQVNUICI6Iik7CiAgICAgICAgIHJldCA9IHhtbFN0cmNhdChyZXQsIHBvcnQpOwogICAgIH0KQEAgLTE5NjYsMTIgKzE5NzYsMTMgQEAKICAgICBpZiAocmVzID09IE5VTEwpCiAJZ290byBkb25lOwogICAgIGlmICgocmVmLT5zY2hlbWUgPT0gTlVMTCkgJiYgKHJlZi0+cGF0aCA9PSBOVUxMKSAmJgotCSgocmVmLT5hdXRob3JpdHkgPT0gTlVMTCkgJiYgKHJlZi0+c2VydmVyID09IE5VTEwpKSkgeworCSgocmVmLT5hdXRob3JpdHkgPT0gTlVMTCkgJiYgKHJlZi0+c2VydmVyID09IE5VTEwpICYmCisgICAgICAgICAocmVmLT5wb3J0ID09IFBPUlRfRU1QVFkpKSkgewogCWlmIChiYXMtPnNjaGVtZSAhPSBOVUxMKQogCSAgICByZXMtPnNjaGVtZSA9IHhtbE1lbVN0cmR1cChiYXMtPnNjaGVtZSk7CiAJaWYgKGJhcy0+YXV0aG9yaXR5ICE9IE5VTEwpCiAJICAgIHJlcy0+YXV0aG9yaXR5ID0geG1sTWVtU3RyZHVwKGJhcy0+YXV0aG9yaXR5KTsKLQllbHNlIGlmICgoYmFzLT5zZXJ2ZXIgIT0gTlVMTCkgfHwgKGJhcy0+cG9ydCA9PSAtMSkpIHsKKwllbHNlIHsKIAkgICAgaWYgKGJhcy0+c2VydmVyICE9IE5VTEwpCiAJCXJlcy0+c2VydmVyID0geG1sTWVtU3RyZHVwKGJhcy0+c2VydmVyKTsKIAkgICAgaWYgKGJhcy0+dXNlciAhPSBOVUxMKQpAQCAtMjAyMCwxMSArMjAzMSwxMyBAQAogICAgICAqICAgIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBhbHNvIGJlIHVuZGVmaW5lZCBpZiB0aGUgVVJJIHNjaGVtZSBkb2VzIG5vdAogICAgICAqICAgIHVzZSBhbiBhdXRob3JpdHkgY29tcG9uZW50LgogICAgICAqLwotICAgIGlmICgocmVmLT5hdXRob3JpdHkgIT0gTlVMTCkgfHwgKHJlZi0+c2VydmVyICE9IE5VTEwpKSB7CisgICAgaWYgKChyZWYtPmF1dGhvcml0eSAhPSBOVUxMKSB8fCAocmVmLT5zZXJ2ZXIgIT0gTlVMTCkgfHwKKyAgICAgICAgIChyZWYtPnBvcnQgIT0gUE9SVF9FTVBUWSkpIHsKIAlpZiAocmVmLT5hdXRob3JpdHkgIT0gTlVMTCkKIAkgICAgcmVzLT5hdXRob3JpdHkgPSB4bWxNZW1TdHJkdXAocmVmLT5hdXRob3JpdHkpOwogCWVsc2UgewotCSAgICByZXMtPnNlcnZlciA9IHhtbE1lbVN0cmR1cChyZWYtPnNlcnZlcik7CisgICAgICAgICAgICBpZiAocmVmLT5zZXJ2ZXIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXMtPnNlcnZlciA9IHhtbE1lbVN0cmR1cChyZWYtPnNlcnZlcik7CiAJICAgIGlmIChyZWYtPnVzZXIgIT0gTlVMTCkKIAkJcmVzLT51c2VyID0geG1sTWVtU3RyZHVwKHJlZi0+dXNlcik7CiAgICAgICAgICAgICByZXMtPnBvcnQgPSByZWYtPnBvcnQ7CkBAIC0yMDM1LDcgKzIwNDgsNyBAQAogICAgIH0KICAgICBpZiAoYmFzLT5hdXRob3JpdHkgIT0gTlVMTCkKIAlyZXMtPmF1dGhvcml0eSA9IHhtbE1lbVN0cmR1cChiYXMtPmF1dGhvcml0eSk7Ci0gICAgZWxzZSBpZiAoKGJhcy0+c2VydmVyICE9IE5VTEwpIHx8IChiYXMtPnBvcnQgPT0gLTEpKSB7CisgICAgZWxzZSBpZiAoKGJhcy0+c2VydmVyICE9IE5VTEwpIHx8IChiYXMtPnBvcnQgIT0gUE9SVF9FTVBUWSkpIHsKIAlpZiAoYmFzLT5zZXJ2ZXIgIT0gTlVMTCkKIAkgICAgcmVzLT5zZXJ2ZXIgPSB4bWxNZW1TdHJkdXAoYmFzLT5zZXJ2ZXIpOwogCWlmIChiYXMtPnVzZXIgIT0gTlVMTCkKQEAgLTIxMDUsNyArMjExOCw3IEBACiAJLyoKIAkgKiBFbnN1cmUgdGhlIHBhdGggaW5jbHVkZXMgYSAnLycKIAkgKi8KLQlpZiAoKG91dCA9PSAwKSAmJiAoYmFzLT5zZXJ2ZXIgIT0gTlVMTCkpCisJaWYgKChvdXQgPT0gMCkgJiYgKChiYXMtPnNlcnZlciAhPSBOVUxMKSB8fCBiYXMtPnBvcnQgIT0gUE9SVF9FTVBUWSkpCiAJICAgIHJlcy0+cGF0aFtvdXQrK10gPSAnLyc7CiAJd2hpbGUgKHJlZi0+cGF0aFtpbmR4XSAhPSAwKSB7CiAJICAgIHJlcy0+cGF0aFtvdXQrK10gPSByZWYtPnBhdGhbaW5keCsrXTsKQEAgLTIyMjMsNyArMjIzNiw4IEBACiAgICAgaWYgKChyZWYtPnNjaGVtZSAhPSBOVUxMKSAmJgogCSgoYmFzLT5zY2hlbWUgPT0gTlVMTCkgfHwKIAkgKHhtbFN0cmNtcCAoKHhtbENoYXIgKiliYXMtPnNjaGVtZSwgKHhtbENoYXIgKilyZWYtPnNjaGVtZSkpIHx8Ci0JICh4bWxTdHJjbXAgKCh4bWxDaGFyICopYmFzLT5zZXJ2ZXIsICh4bWxDaGFyICopcmVmLT5zZXJ2ZXIpKSkpIHsKKwkgKHhtbFN0cmNtcCAoKHhtbENoYXIgKiliYXMtPnNlcnZlciwgKHhtbENoYXIgKilyZWYtPnNlcnZlcikpIHx8CisgICAgICAgICAoYmFzLT5wb3J0ICE9IHJlZi0+cG9ydCkpKSB7CiAJdmFsID0geG1sU3RyZHVwIChVUkkpOwogCWdvdG8gZG9uZTsKICAgICB9CmRpZmYgLS1naXQgYS92YWxpZC5jIGIvdmFsaWQuYwppbmRleCAxZGE4MTJlLi43NmQ2NTdkIDEwMDY0NAotLS0gYS92YWxpZC5jCisrKyBiL3ZhbGlkLmMKQEAgLTIxLDEyICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4KICNpbmNsdWRlIDxsaWJ4bWwvbGlzdC5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAKLXN0YXRpYyB4bWxFbGVtZW50UHRyIHhtbEdldER0ZEVsZW1lbnREZXNjMih4bWxEdGRQdHIgZHRkLCBjb25zdCB4bWxDaGFyICpuYW1lLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcmVhdGUpOwotLyogI2RlZmluZSBERUJVR19WQUxJRF9BTEdPICovCi0vKiAjZGVmaW5lIERFQlVHX1JFR0VYUF9BTEdPICovCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgorI2luY2x1ZGUgInByaXZhdGUvcGFyc2VyLmgiCisKK3N0YXRpYyB4bWxFbGVtZW50UHRyCit4bWxHZXREdGRFbGVtZW50RGVzYzIoeG1sVmFsaWRDdHh0UHRyIGN0eHQsIHhtbER0ZFB0ciBkdGQsIGNvbnN0IHhtbENoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGNyZWF0ZSk7CiAKICNkZWZpbmUgVE9ETwkJCQkJCQkJXAogICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAkJCQlcCkBAIC02NCw5ICs2NSw3IEBACiAJLyogTG9vayB1cCBmbGFnIHRvIGRldGVjdCBpZiBpdCBpcyBwYXJ0IG9mIGEgcGFyc2luZwogCSAgIGNvbnRleHQgKi8KIAlpZiAoY3R4dC0+ZmxhZ3MgJiBYTUxfVkNUWFRfVVNFX1BDVFhUKSB7Ci0JICAgIGxvbmcgZGVsdGEgPSAoY2hhciAqKSBjdHh0IC0gKGNoYXIgKikgY3R4dC0+dXNlckRhdGE7Ci0JICAgIGlmICgoZGVsdGEgPiAwKSAmJiAoZGVsdGEgPCAyNTApKQotCQlwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOworCSAgICBwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOwogCX0KICAgICB9CiAgICAgaWYgKGV4dHJhKQpAQCAtMTAzLDkgKzEwMiw3IEBACiAJLyogTG9vayB1cCBmbGFnIHRvIGRldGVjdCBpZiBpdCBpcyBwYXJ0IG9mIGEgcGFyc2luZwogCSAgIGNvbnRleHQgKi8KIAlpZiAoY3R4dC0+ZmxhZ3MgJiBYTUxfVkNUWFRfVVNFX1BDVFhUKSB7Ci0JICAgIGxvbmcgZGVsdGEgPSAoY2hhciAqKSBjdHh0IC0gKGNoYXIgKikgY3R4dC0+dXNlckRhdGE7Ci0JICAgIGlmICgoZGVsdGEgPiAwKSAmJiAoZGVsdGEgPCAyNTApKQotCQlwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOworCSAgICBwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOwogCX0KICAgICB9CiAgICAgaWYgKGV4dHJhKQpAQCAtMTQ5LDkgKzE0Niw3IEBACiAJLyogTG9vayB1cCBmbGFnIHRvIGRldGVjdCBpZiBpdCBpcyBwYXJ0IG9mIGEgcGFyc2luZwogCSAgIGNvbnRleHQgKi8KIAlpZiAoY3R4dC0+ZmxhZ3MgJiBYTUxfVkNUWFRfVVNFX1BDVFhUKSB7Ci0JICAgIGxvbmcgZGVsdGEgPSAoY2hhciAqKSBjdHh0IC0gKGNoYXIgKikgY3R4dC0+dXNlckRhdGE7Ci0JICAgIGlmICgoZGVsdGEgPiAwKSAmJiAoZGVsdGEgPCAyNTApKQotCQlwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOworCSAgICBwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOwogCX0KICAgICB9CiAgICAgX194bWxSYWlzZUVycm9yKHNjaGFubmVsLCBjaGFubmVsLCBkYXRhLCBwY3R4dCwgbm9kZSwgWE1MX0ZST01fVkFMSUQsIGVycm9yLApAQCAtMTkxLDkgKzE4Niw3IEBACiAJLyogTG9vayB1cCBmbGFnIHRvIGRldGVjdCBpZiBpdCBpcyBwYXJ0IG9mIGEgcGFyc2luZwogCSAgIGNvbnRleHQgKi8KIAlpZiAoY3R4dC0+ZmxhZ3MgJiBYTUxfVkNUWFRfVVNFX1BDVFhUKSB7Ci0JICAgIGxvbmcgZGVsdGEgPSAoY2hhciAqKSBjdHh0IC0gKGNoYXIgKikgY3R4dC0+dXNlckRhdGE7Ci0JICAgIGlmICgoZGVsdGEgPiAwKSAmJiAoZGVsdGEgPCAyNTApKQotCQlwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOworCSAgICBwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOwogCX0KICAgICB9CiAgICAgX194bWxSYWlzZUVycm9yKHNjaGFubmVsLCBjaGFubmVsLCBkYXRhLCBwY3R4dCwgbm9kZSwgWE1MX0ZST01fVkFMSUQsIGVycm9yLApAQCAtMjMxLDkgKzIyNCw3IEBACiAJLyogTG9vayB1cCBmbGFnIHRvIGRldGVjdCBpZiBpdCBpcyBwYXJ0IG9mIGEgcGFyc2luZwogCSAgIGNvbnRleHQgKi8KIAlpZiAoY3R4dC0+ZmxhZ3MgJiBYTUxfVkNUWFRfVVNFX1BDVFhUKSB7Ci0JICAgIGxvbmcgZGVsdGEgPSAoY2hhciAqKSBjdHh0IC0gKGNoYXIgKikgY3R4dC0+dXNlckRhdGE7Ci0JICAgIGlmICgoZGVsdGEgPiAwKSAmJiAoZGVsdGEgPCAyNTApKQotCQlwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOworCSAgICBwY3R4dCA9IGN0eHQtPnVzZXJEYXRhOwogCX0KICAgICB9CiAgICAgX194bWxSYWlzZUVycm9yKHNjaGFubmVsLCBjaGFubmVsLCBkYXRhLCBwY3R4dCwgbm9kZSwgWE1MX0ZST01fVkFMSUQsIGVycm9yLApAQCAtNDcxLDE1MSArNDYyLDYgQEAKICAgICByZXR1cm4gKHJldCk7CiB9CiAKLSNpZmRlZiBERUJVR19WQUxJRF9BTEdPCi1zdGF0aWMgdm9pZAoteG1sVmFsaWRQcmludE5vZGUoeG1sTm9kZVB0ciBjdXIpIHsKLSAgICBpZiAoY3VyID09IE5VTEwpIHsKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIm51bGwiKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAoY3VyLT50eXBlKSB7Ci0JY2FzZSBYTUxfRUxFTUVOVF9OT0RFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzICIsIGN1ci0+bmFtZSk7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX1RFWFRfTk9ERToKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJ0ZXh0ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9DREFUQV9TRUNUSU9OX05PREU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiY2RhdGEgIik7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX0VOVElUWV9SRUZfTk9ERToKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICImJXM7ICIsIGN1ci0+bmFtZSk7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX1BJX05PREU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAicGkoJXMpICIsIGN1ci0+bmFtZSk7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX0NPTU1FTlRfTk9ERToKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJjb21tZW50ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9BVFRSSUJVVEVfTk9ERToKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICI/YXR0cj8gIik7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX0VOVElUWV9OT0RFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIj9lbnQ/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9ET0NVTUVOVF9OT0RFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIj9kb2M/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9ET0NVTUVOVF9UWVBFX05PREU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiP2RvY3R5cGU/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9ET0NVTUVOVF9GUkFHX05PREU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiP2ZyYWc/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9OT1RBVElPTl9OT0RFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIj9ub3RhPyAiKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYTUxfSFRNTF9ET0NVTUVOVF9OT0RFOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIj9odG1sPyAiKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYTUxfRFREX05PREU6Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiP2R0ZD8gIik7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX0VMRU1FTlRfREVDTDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICI/ZWRlY2w/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9BVFRSSUJVVEVfREVDTDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICI/YWRlY2w/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9FTlRJVFlfREVDTDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICI/ZW50ZGVjbD8gIik7Ci0JICAgIGJyZWFrOwotCWNhc2UgWE1MX05BTUVTUEFDRV9ERUNMOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIj9uc2RlY2w/ICIpOwotCSAgICBicmVhazsKLQljYXNlIFhNTF9YSU5DTFVERV9TVEFSVDoKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJpbmNzdGFydCAiKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYTUxfWElOQ0xVREVfRU5EOgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImluY2VuZCAiKTsKLQkgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAoteG1sVmFsaWRQcmludE5vZGVMaXN0KHhtbE5vZGVQdHIgY3VyKSB7Ci0gICAgaWYgKGN1ciA9PSBOVUxMKQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAibnVsbCAiKTsKLSAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLQl4bWxWYWxpZFByaW50Tm9kZShjdXIpOwotCWN1ciA9IGN1ci0+bmV4dDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi14bWxWYWxpZERlYnVnKHhtbE5vZGVQdHIgY3VyLCB4bWxFbGVtZW50Q29udGVudFB0ciBjb250KSB7Ci0gICAgY2hhciBleHByWzUwMDBdOwotCi0gICAgZXhwclswXSA9IDA7Ci0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJ2YWxpZDogIik7Ci0gICAgeG1sVmFsaWRQcmludE5vZGVMaXN0KGN1cik7Ci0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJhZ2FpbnN0ICIpOwotICAgIHhtbFNucHJpbnRmRWxlbWVudENvbnRlbnQoZXhwciwgNTAwMCwgY29udCwgMSk7Ci0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICIlc1xuIiwgZXhwcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi14bWxWYWxpZERlYnVnU3RhdGUoeG1sVmFsaWRTdGF0ZVB0ciBzdGF0ZSkgewotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiKCIpOwotICAgIGlmIChzdGF0ZS0+Y29udCA9PSBOVUxMKQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAibnVsbCwiKTsKLSAgICBlbHNlCi0Jc3dpdGNoIChzdGF0ZS0+Y29udC0+dHlwZSkgewotICAgICAgICAgICAgY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX1BDREFUQToKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJwY2RhdGEsIik7Ci0JCWJyZWFrOwotICAgICAgICAgICAgY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX0VMRU1FTlQ6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiJXMsIiwKLQkJCSAgICAgICAgc3RhdGUtPmNvbnQtPm5hbWUpOwotCQlicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX0VMRU1FTlRfQ09OVEVOVF9TRVE6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAic2VxLCIpOwotCQlicmVhazsKLSAgICAgICAgICAgIGNhc2UgWE1MX0VMRU1FTlRfQ09OVEVOVF9PUjoKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJvciwiKTsKLQkJYnJlYWs7Ci0JfQotICAgIHhtbFZhbGlkUHJpbnROb2RlKHN0YXRlLT5ub2RlKTsKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiwlZCwlWCwlZCkiLAotCSAgICBzdGF0ZS0+ZGVwdGgsIHN0YXRlLT5vY2N1cnMsIHN0YXRlLT5zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi14bWxWYWxpZFN0YXRlRGVidWcoeG1sVmFsaWRDdHh0UHRyIGN0eHQpIHsKLSAgICBpbnQgaSwgajsKLQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAic3RhdGU6ICIpOwotICAgIHhtbFZhbGlkRGVidWdTdGF0ZShjdHh0LT52c3RhdGUpOwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiIHN0YWNrOiAlZCAiLAotCSAgICBjdHh0LT52c3RhdGVOciAtIDEpOwotICAgIGZvciAoaSA9IDAsIGogPSBjdHh0LT52c3RhdGVOciAtIDE7KGkgPCAzKSAmJiAoaiA+IDApO2krKyxqLS0pCi0JeG1sVmFsaWREZWJ1Z1N0YXRlKCZjdHh0LT52c3RhdGVUYWJbal0pOwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiXG4iKTsKLX0KLQotLyoqKioqCi0jZGVmaW5lIERFQlVHX1ZBTElEX1NUQVRFKG4sYykgeG1sVmFsaWREZWJ1ZyhuLGMpOwotICoqKioqLwotCi0jZGVmaW5lIERFQlVHX1ZBTElEX1NUQVRFKG4sYykgeG1sVmFsaWRTdGF0ZURlYnVnKGN0eHQpOwotI2RlZmluZSBERUJVR19WQUxJRF9NU0cobSkJCQkJCVwKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIiVzXG4iLCBtKTsKLQotI2Vsc2UKLSNkZWZpbmUgREVCVUdfVkFMSURfU1RBVEUobixjKQotI2RlZmluZSBERUJVR19WQUxJRF9NU0cobSkKLSNlbmRpZgotCiAvKiBUT0RPOiB1c2UgaGFzaCB0YWJsZSBmb3IgYWNjZXNzZXMgdG8gZWxlbSBhbmQgYXR0cmlidXRlIGRlZmluaXRpb25zICovCiAKIApAQCAtODMyLDExICs2NzgsOCBAQAogCXhtbFNucHJpbnRmRWxlbWVudENvbnRlbnQoZXhwciwgNTAwMCwgZWxlbS0+Y29udGVudCwgMSk7CiAJeG1sRXJyVmFsaWROb2RlKGN0eHQsICh4bWxOb2RlUHRyKSBlbGVtLAogCSAgICAgICAgICAgICAgICBYTUxfRFREX0NPTlRFTlRfTk9UX0RFVEVSTUlOSVNULAotCSAgICAgICAiQ29udGVudCBtb2RlbCBvZiAlcyBpcyBub3QgZGV0ZXJtaW5pc3Q6ICVzXG4iLAorCSAgICAgICAiQ29udGVudCBtb2RlbCBvZiAlcyBpcyBub3QgZGV0ZXJtaW5pc3RpYzogJXNcbiIsCiAJICAgICAgIGVsZW0tPm5hbWUsIEJBRF9DQVNUIGV4cHIsIE5VTEwpOwotI2lmZGVmIERFQlVHX1JFR0VYUF9BTEdPCi0gICAgICAgIHhtbFJlZ2V4cFByaW50KHN0ZGVyciwgZWxlbS0+Y29udE1vZGVsKTsKLSNlbmRpZgogICAgICAgICBjdHh0LT52YWxpZCA9IDA7CiAJY3R4dC0+c3RhdGUgPSBOVUxMOwogCXhtbEZyZWVBdXRvbWF0YShjdHh0LT5hbSk7CkBAIC04ODUsNiArNzI4LDggQEAKICAqLwogdm9pZAogeG1sRnJlZVZhbGlkQ3R4dCh4bWxWYWxpZEN0eHRQdHIgY3VyKSB7CisgICAgaWYgKGN1ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGN1ci0+dnN0YXRlVGFiICE9IE5VTEwpCiAgICAgICAgIHhtbEZyZWUoY3VyLT52c3RhdGVUYWIpOwogICAgIGlmIChjdXItPm5vZGVUYWIgIT0gTlVMTCkKQEAgLTEwNTYsNyArOTAxLDcgQEAKIAkgICAgaWYgKGN1ci0+YzEgIT0gTlVMTCkKIAkgICAgICAgIHRtcC0+YzEgPSB4bWxDb3B5RG9jRWxlbWVudENvbnRlbnQoZG9jLGN1ci0+YzEpOwogCSAgICBpZiAodG1wLT5jMSAhPSBOVUxMKQotCQl0bXAtPmMxLT5wYXJlbnQgPSByZXQ7CisJCXRtcC0+YzEtPnBhcmVudCA9IHRtcDsKIAkgICAgcHJldiA9IHRtcDsKIAkgICAgY3VyID0gY3VyLT5jMjsKIAl9CkBAIC0yMTIwLDcgKzE5NjUsNyBAQAogICAgICAqIFZhbGlkaXR5IENoZWNrOgogICAgICAqIE11bHRpcGxlIElEIHBlciBlbGVtZW50CiAgICAgICovCi0gICAgZWxlbURlZiA9IHhtbEdldER0ZEVsZW1lbnREZXNjMihkdGQsIGVsZW0sIDEpOworICAgIGVsZW1EZWYgPSB4bWxHZXREdGRFbGVtZW50RGVzYzIoY3R4dCwgZHRkLCBlbGVtLCAxKTsKICAgICBpZiAoZWxlbURlZiAhPSBOVUxMKSB7CiAKICNpZmRlZiBMSUJYTUxfVkFMSURfRU5BQkxFRApAQCAtMzI4NCw3ICszMTI5LDggQEAKICAqLwogCiBzdGF0aWMgeG1sRWxlbWVudFB0cgoteG1sR2V0RHRkRWxlbWVudERlc2MyKHhtbER0ZFB0ciBkdGQsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGludCBjcmVhdGUpIHsKK3htbEdldER0ZEVsZW1lbnREZXNjMih4bWxWYWxpZEN0eHRQdHIgY3R4dCwgeG1sRHRkUHRyIGR0ZCwgY29uc3QgeG1sQ2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgY3JlYXRlKSB7CiAgICAgeG1sRWxlbWVudFRhYmxlUHRyIHRhYmxlOwogICAgIHhtbEVsZW1lbnRQdHIgY3VyOwogICAgIHhtbENoYXIgKnVxbmFtZSA9IE5VTEwsICpwcmVmaXggPSBOVUxMOwpAQCAtMzMwNyw3ICszMTUzLDcgQEAKIAkgICAgZHRkLT5lbGVtZW50cyA9ICh2b2lkICopIHRhYmxlOwogCX0KIAlpZiAodGFibGUgPT0gTlVMTCkgewotCSAgICB4bWxWRXJyTWVtb3J5KE5VTEwsICJlbGVtZW50IHRhYmxlIGFsbG9jYXRpb24gZmFpbGVkIik7CisJICAgIHhtbFZFcnJNZW1vcnkoY3R4dCwgImVsZW1lbnQgdGFibGUgYWxsb2NhdGlvbiBmYWlsZWQiKTsKIAkgICAgcmV0dXJuKE5VTEwpOwogCX0KICAgICB9CkBAIC0zMzIwLDggKzMxNjYsOCBAQAogICAgIGlmICgoY3VyID09IE5VTEwpICYmIChjcmVhdGUpKSB7CiAJY3VyID0gKHhtbEVsZW1lbnRQdHIpIHhtbE1hbGxvYyhzaXplb2YoeG1sRWxlbWVudCkpOwogCWlmIChjdXIgPT0gTlVMTCkgewotCSAgICB4bWxWRXJyTWVtb3J5KE5VTEwsICJtYWxsb2MgZmFpbGVkIik7Ci0JICAgIHJldHVybihOVUxMKTsKKwkgICAgeG1sVkVyck1lbW9yeShjdHh0LCAibWFsbG9jIGZhaWxlZCIpOworCSAgICBnb3RvIGVycm9yOwogCX0KIAltZW1zZXQoY3VyLCAwLCBzaXplb2YoeG1sRWxlbWVudCkpOwogCWN1ci0+dHlwZSA9IFhNTF9FTEVNRU5UX0RFQ0w7CkBAIC0zMzMzLDggKzMxNzksMTMgQEAKIAljdXItPnByZWZpeCA9IHhtbFN0cmR1cChwcmVmaXgpOwogCWN1ci0+ZXR5cGUgPSBYTUxfRUxFTUVOVF9UWVBFX1VOREVGSU5FRDsKIAotCXhtbEhhc2hBZGRFbnRyeTIodGFibGUsIG5hbWUsIHByZWZpeCwgY3VyKTsKKwlpZiAoeG1sSGFzaEFkZEVudHJ5Mih0YWJsZSwgbmFtZSwgcHJlZml4LCBjdXIpIDwgMCkgeworCSAgICB4bWxWRXJyTWVtb3J5KGN0eHQsICJhZGRpbmcgZW50cnkgZmFpbGVkIik7CisgICAgICAgICAgICB4bWxGcmVlRWxlbWVudChjdXIpOworICAgICAgICAgICAgY3VyID0gTlVMTDsKKyAgICAgICAgfQogICAgIH0KK2Vycm9yOgogICAgIGlmIChwcmVmaXggIT0gTlVMTCkgeG1sRnJlZShwcmVmaXgpOwogICAgIGlmICh1cW5hbWUgIT0gTlVMTCkgeG1sRnJlZSh1cW5hbWUpOwogICAgIHJldHVybihjdXIpOwpAQCAtNDg5MCwyNCArNDc0MSwyMSBAQAogICAgICAqIGVwc2lsb24gdHJhbnNpdGlvbiwgZ28gZGlyZWN0bHkgdG8gdGhlIGFuYWx5c2lzIHBoYXNlCiAgICAgICovCiAgICAgaWYgKFNUQVRFID09IFJPTExCQUNLX1BBUkVOVCkgewotCURFQlVHX1ZBTElEX01TRygicmVzdG9yZWQgcGFyZW50IGJyYW5jaCIpOwotCURFQlVHX1ZBTElEX1NUQVRFKE5PREUsIENPTlQpCiAJcmV0ID0gMTsKIAlnb3RvIGFuYWx5emU7CiAgICAgfQogCi0gICAgREVCVUdfVkFMSURfU1RBVEUoTk9ERSwgQ09OVCkKICAgICAvKgogICAgICAqIHdlIG1heSBoYXZlIHRvIHNhdmUgYSBiYWNrdXAgc3RhdGUgaGVyZS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudAogICAgICAqIG9mIGhhbmRsaW5nIGVwc2lsb24gdHJhbnNpdGlvbiBpbiBORkFzLgogICAgICAqLwogICAgIGlmICgoQ09OVCAhPSBOVUxMKSAmJgogCSgoQ09OVC0+cGFyZW50ID09IE5VTEwpIHx8CisJIChDT05ULT5wYXJlbnQgPT0gKHhtbEVsZW1lbnRDb250ZW50UHRyKSAxKSB8fAogCSAoQ09OVC0+cGFyZW50LT50eXBlICE9IFhNTF9FTEVNRU5UX0NPTlRFTlRfT1IpKSAmJgogCSgoQ09OVC0+b2N1ciA9PSBYTUxfRUxFTUVOVF9DT05URU5UX01VTFQpIHx8CiAJIChDT05ULT5vY3VyID09IFhNTF9FTEVNRU5UX0NPTlRFTlRfT1BUKSB8fAogCSAoKENPTlQtPm9jdXIgPT0gWE1MX0VMRU1FTlRfQ09OVEVOVF9QTFVTKSAmJiAoT0NDVVJSRU5DRSkpKSkgewotCURFQlVHX1ZBTElEX01TRygic2F2aW5nIHBhcmVudCBicmFuY2giKTsKIAlpZiAodnN0YXRlVlB1c2goY3R4dCwgQ09OVCwgTk9ERSwgREVQVEgsIE9DQ1VSUywgUk9MTEJBQ0tfUEFSRU5UKSA8IDApCiAJICAgIHJldHVybigwKTsKICAgICB9CkBAIC00OTE5LDEyICs0NzY3LDEwIEBACiAgICAgc3dpdGNoIChDT05ULT50eXBlKSB7CiAJY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX1BDREFUQToKIAkgICAgaWYgKE5PREUgPT0gTlVMTCkgewotCQlERUJVR19WQUxJRF9NU0coInBjZGF0YSBmYWlsZWQgbm8gbm9kZSIpOwogCQlyZXQgPSAwOwogCQlicmVhazsKIAkgICAgfQogCSAgICBpZiAoTk9ERS0+dHlwZSA9PSBYTUxfVEVYVF9OT0RFKSB7Ci0JCURFQlVHX1ZBTElEX01TRygicGNkYXRhIGZvdW5kLCBza2lwIHRvIG5leHQiKTsKIAkJLyoKIAkJICogZ28gdG8gbmV4dCBlbGVtZW50IGluIHRoZSBjb250ZW50IG1vZGVsCiAJCSAqIHNraXBwaW5nIGlnbm9yYWJsZSBlbGVtcwpAQCAtNDk0MiwxNCArNDc4OCwxMiBAQAogICAgICAgICAgICAgICAgIHJldCA9IDE7CiAJCWJyZWFrOwogCSAgICB9IGVsc2UgewotCQlERUJVR19WQUxJRF9NU0coInBjZGF0YSBmYWlsZWQiKTsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAJICAgIH0KIAkgICAgYnJlYWs7CiAJY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX0VMRU1FTlQ6CiAJICAgIGlmIChOT0RFID09IE5VTEwpIHsKLQkJREVCVUdfVkFMSURfTVNHKCJlbGVtZW50IGZhaWxlZCBubyBub2RlIik7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCSAgICB9CkBAIC00OTY1LDcgKzQ4MDksNiBAQAogCQl9CiAJICAgIH0KIAkgICAgaWYgKHJldCA9PSAxKSB7Ci0JCURFQlVHX1ZBTElEX01TRygiZWxlbWVudCBmb3VuZCwgc2tpcCB0byBuZXh0Iik7CiAJCS8qCiAJCSAqIGdvIHRvIG5leHQgZWxlbWVudCBpbiB0aGUgY29udGVudCBtb2RlbAogCQkgKiBza2lwcGluZyBpZ25vcmFibGUgZWxlbXMKQEAgLTQ5ODEsNyArNDgyNCw2IEBACiAJCQkgIChOT0RFLT50eXBlICE9IFhNTF9URVhUX05PREUpICYmCiAJCQkgIChOT0RFLT50eXBlICE9IFhNTF9DREFUQV9TRUNUSU9OX05PREUpKSk7CiAJICAgIH0gZWxzZSB7Ci0JCURFQlVHX1ZBTElEX01TRygiZWxlbWVudCBmYWlsZWQiKTsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAJICAgIH0KQEAgLTUwMTQsOCArNDg1Niw3IEBACiAJICAgIC8qCiAJICAgICAqIHNhdmUgdGhlIHNlY29uZCBicmFuY2ggJ29yJyBicmFuY2gKIAkgICAgICovCi0JICAgIERFQlVHX1ZBTElEX01TRygic2F2aW5nICdvcicgYnJhbmNoIik7Ci0JICAgIGlmICh2c3RhdGVWUHVzaChjdHh0LCBDT05ULT5jMiwgTk9ERSwgKHVuc2lnbmVkIGNoYXIpKERFUFRIICsgMSksCisJICAgIGlmICh2c3RhdGVWUHVzaChjdHh0LCBDT05ULT5jMiwgTk9ERSwgREVQVEggKyAxLAogCQkJICAgIE9DQ1VSUywgUk9MTEJBQ0tfT1IpIDwgMCkKIAkJcmV0dXJuKC0xKTsKIAkgICAgREVQVEgrKzsKQEAgLTUwNTYsNyArNDg5Nyw2IEBACiAgICAgICogQXQgdGhpcyBwb2ludCBoYW5kbGUgZ29pbmcgdXAgaW4gdGhlIHRyZWUKICAgICAgKi8KICAgICBpZiAocmV0ID09IC0xKSB7Ci0JREVCVUdfVkFMSURfTVNHKCJlcnJvciBmb3VuZCByZXR1cm5pbmciKTsKIAlyZXR1cm4ocmV0KTsKICAgICB9CiBhbmFseXplOgpAQCAtNTA3MSw5ICs0OTExLDcgQEAKIAogCQljYXNlIFhNTF9FTEVNRU5UX0NPTlRFTlRfT05DRToKIAkJICAgIGN1ciA9IGN0eHQtPnZzdGF0ZS0+bm9kZTsKLQkJICAgIERFQlVHX1ZBTElEX01TRygiT25jZSBicmFuY2ggZmFpbGVkLCByb2xsYmFjayIpOwogCQkgICAgaWYgKHZzdGF0ZVZQb3AoY3R4dCkgPCAwICkgewotCQkJREVCVUdfVkFMSURfTVNHKCJleGhhdXN0aW9uLCBmYWlsZWQiKTsKIAkJCXJldHVybigwKTsKIAkJICAgIH0KIAkJICAgIGlmIChjdXIgIT0gY3R4dC0+dnN0YXRlLT5ub2RlKQpAQCAtNTA4Miw2OSArNDkyMCw1MCBAQAogCQljYXNlIFhNTF9FTEVNRU5UX0NPTlRFTlRfUExVUzoKIAkJICAgIGlmIChPQ0NVUlJFTkNFID09IDApIHsKIAkJCWN1ciA9IGN0eHQtPnZzdGF0ZS0+bm9kZTsKLQkJCURFQlVHX1ZBTElEX01TRygiUGx1cyBicmFuY2ggZmFpbGVkLCByb2xsYmFjayIpOwogCQkJaWYgKHZzdGF0ZVZQb3AoY3R4dCkgPCAwICkgewotCQkJICAgIERFQlVHX1ZBTElEX01TRygiZXhoYXVzdGlvbiwgZmFpbGVkIik7CiAJCQkgICAgcmV0dXJuKDApOwogCQkJfQogCQkJaWYgKGN1ciAhPSBjdHh0LT52c3RhdGUtPm5vZGUpCiAJCQkgICAgZGV0ZXJtaW5pc3QgPSAtMzsKIAkJCWdvdG8gY29udDsKIAkJICAgIH0KLQkJICAgIERFQlVHX1ZBTElEX01TRygiUGx1cyBicmFuY2ggZm91bmQiKTsKIAkJICAgIHJldCA9IDE7CiAJCSAgICBicmVhazsKIAkJY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX01VTFQ6Ci0jaWZkZWYgREVCVUdfVkFMSURfQUxHTwotCQkgICAgaWYgKE9DQ1VSUkVOQ0UgPT0gMCkgewotCQkJREVCVUdfVkFMSURfTVNHKCJNdWx0IGJyYW5jaCBmYWlsZWQiKTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlERUJVR19WQUxJRF9NU0coIk11bHQgYnJhbmNoIGZvdW5kIik7Ci0JCSAgICB9Ci0jZW5kaWYKIAkJICAgIHJldCA9IDE7CiAJCSAgICBicmVhazsKIAkJY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX09QVDoKLQkJICAgIERFQlVHX1ZBTElEX01TRygiT3B0aW9uIGJyYW5jaCBmYWlsZWQiKTsKIAkJICAgIHJldCA9IDE7CiAJCSAgICBicmVhazsKIAkgICAgfQogCX0gZWxzZSB7CiAJICAgIHN3aXRjaCAoQ09OVC0+b2N1cikgewogCQljYXNlIFhNTF9FTEVNRU5UX0NPTlRFTlRfT1BUOgotCQkgICAgREVCVUdfVkFMSURfTVNHKCJPcHRpb24gYnJhbmNoIHN1Y2NlZWRlZCIpOwogCQkgICAgcmV0ID0gMTsKIAkJICAgIGJyZWFrOwogCQljYXNlIFhNTF9FTEVNRU5UX0NPTlRFTlRfT05DRToKLQkJICAgIERFQlVHX1ZBTElEX01TRygiT25jZSBicmFuY2ggc3VjY2VlZGVkIik7CiAJCSAgICByZXQgPSAxOwogCQkgICAgYnJlYWs7CiAJCWNhc2UgWE1MX0VMRU1FTlRfQ09OVEVOVF9QTFVTOgogCQkgICAgaWYgKFNUQVRFID09IFJPTExCQUNLX1BBUkVOVCkgewotCQkJREVCVUdfVkFMSURfTVNHKCJQbHVzIGJyYW5jaCByb2xsYmFjayIpOwogCQkJcmV0ID0gMTsKIAkJCWJyZWFrOwogCQkgICAgfQogCQkgICAgaWYgKE5PREUgPT0gTlVMTCkgewotCQkJREVCVUdfVkFMSURfTVNHKCJQbHVzIGJyYW5jaCBleGhhdXN0ZWQiKTsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJICAgIH0KLQkJICAgIERFQlVHX1ZBTElEX01TRygiUGx1cyBicmFuY2ggc3VjY2VlZGVkLCBjb250aW51aW5nIik7CiAJCSAgICBTRVRfT0NDVVJSRU5DRTsKIAkJICAgIGdvdG8gY29udDsKIAkJY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX01VTFQ6CiAJCSAgICBpZiAoU1RBVEUgPT0gUk9MTEJBQ0tfUEFSRU5UKSB7Ci0JCQlERUJVR19WQUxJRF9NU0coIk11bHQgYnJhbmNoIHJvbGxiYWNrIik7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJCSAgICB9CiAJCSAgICBpZiAoTk9ERSA9PSBOVUxMKSB7Ci0JCQlERUJVR19WQUxJRF9NU0coIk11bHQgYnJhbmNoIGV4aGF1c3RlZCIpOwogCQkJcmV0ID0gMTsKIAkJCWJyZWFrOwogCQkgICAgfQotCQkgICAgREVCVUdfVkFMSURfTVNHKCJNdWx0IGJyYW5jaCBzdWNjZWVkZWQsIGNvbnRpbnVpbmciKTsKIAkJICAgIC8qIFNFVF9PQ0NVUlJFTkNFOyAqLwogCQkgICAgZ290byBjb250OwogCSAgICB9CkBAIC01MTU1LDM4ICs0OTc0LDMyIEBACiAJICogVGhlbiBhY3QgYWNjb3JkaW5nbHkgYXQgdGhlIHBhcmVudCBsZXZlbAogCSAqLwogCVJFU0VUX09DQ1VSUkVOQ0U7Ci0JaWYgKENPTlQtPnBhcmVudCA9PSBOVUxMKQorCWlmICgoQ09OVC0+cGFyZW50ID09IE5VTEwpIHx8CisgICAgICAgICAgICAoQ09OVC0+cGFyZW50ID09ICh4bWxFbGVtZW50Q29udGVudFB0cikgMSkpCiAJICAgIGJyZWFrOwogCiAJc3dpdGNoIChDT05ULT5wYXJlbnQtPnR5cGUpIHsKIAkgICAgY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX1BDREFUQToKLQkJREVCVUdfVkFMSURfTVNHKCJFcnJvcjogcGFyZW50IHBjZGF0YSIpOwogCQlyZXR1cm4oLTEpOwogCSAgICBjYXNlIFhNTF9FTEVNRU5UX0NPTlRFTlRfRUxFTUVOVDoKLQkJREVCVUdfVkFMSURfTVNHKCJFcnJvcjogcGFyZW50IGVsZW1lbnQiKTsKIAkJcmV0dXJuKC0xKTsKIAkgICAgY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX09SOgogCQlpZiAocmV0ID09IDEpIHsKLQkJICAgIERFQlVHX1ZBTElEX01TRygiT3Igc3VjY2VlZGVkIik7CiAJCSAgICBDT05UID0gQ09OVC0+cGFyZW50OwogCQkgICAgREVQVEgtLTsKIAkJfSBlbHNlIHsKLQkJICAgIERFQlVHX1ZBTElEX01TRygiT3IgZmFpbGVkIik7CiAJCSAgICBDT05UID0gQ09OVC0+cGFyZW50OwogCQkgICAgREVQVEgtLTsKIAkJfQogCQlicmVhazsKIAkgICAgY2FzZSBYTUxfRUxFTUVOVF9DT05URU5UX1NFUToKIAkJaWYgKHJldCA9PSAwKSB7Ci0JCSAgICBERUJVR19WQUxJRF9NU0coIlNlcXVlbmNlIGZhaWxlZCIpOwogCQkgICAgQ09OVCA9IENPTlQtPnBhcmVudDsKIAkJICAgIERFUFRILS07CiAJCX0gZWxzZSBpZiAoQ09OVCA9PSBDT05ULT5wYXJlbnQtPmMxKSB7Ci0JCSAgICBERUJVR19WQUxJRF9NU0coIlNlcXVlbmNlIHRlc3RpbmcgMm5kIGJyYW5jaCIpOwogCQkgICAgQ09OVCA9IENPTlQtPnBhcmVudC0+YzI7CiAJCSAgICBnb3RvIGNvbnQ7CiAJCX0gZWxzZSB7Ci0JCSAgICBERUJVR19WQUxJRF9NU0coIlNlcXVlbmNlIHN1Y2NlZWRlZCIpOwogCQkgICAgQ09OVCA9IENPTlQtPnBhcmVudDsKIAkJICAgIERFUFRILS07CiAJCX0KQEAgLTUxOTYsOSArNTAwOSw3IEBACiAJeG1sTm9kZVB0ciBjdXI7CiAKIAljdXIgPSBjdHh0LT52c3RhdGUtPm5vZGU7Ci0JREVCVUdfVkFMSURfTVNHKCJGYWlsZWQsIHJlbWFpbmluZyBpbnB1dCwgcm9sbGJhY2siKTsKIAlpZiAodnN0YXRlVlBvcChjdHh0KSA8IDAgKSB7Ci0JICAgIERFQlVHX1ZBTElEX01TRygiZXhoYXVzdGlvbiwgZmFpbGVkIik7CiAJICAgIHJldHVybigwKTsKIAl9CiAJaWYgKGN1ciAhPSBjdHh0LT52c3RhdGUtPm5vZGUpCkBAIC01MjA5LDkgKzUwMjAsNyBAQAogCXhtbE5vZGVQdHIgY3VyOwogCiAJY3VyID0gY3R4dC0+dnN0YXRlLT5ub2RlOwotCURFQlVHX1ZBTElEX01TRygiRmFpbHVyZSwgcm9sbGJhY2siKTsKIAlpZiAodnN0YXRlVlBvcChjdHh0KSA8IDAgKSB7Ci0JICAgIERFQlVHX1ZBTElEX01TRygiZXhoYXVzdGlvbiwgZmFpbGVkIik7CiAJICAgIHJldHVybigwKTsKIAl9CiAJaWYgKGN1ciAhPSBjdHh0LT52c3RhdGUtPm5vZGUpCkBAIC01NDM3LDE2ICs1MjQ2LDE5IEBACiAgICAgU1RBVEUgPSAwOwogICAgIHJldCA9IHhtbFZhbGlkYXRlRWxlbWVudFR5cGUoY3R4dCk7CiAgICAgaWYgKChyZXQgPT0gLTMpICYmICh3YXJuKSkgewotCXhtbEVyclZhbGlkV2FybmluZyhjdHh0LCBjaGlsZCwgWE1MX0RURF9DT05URU5UX05PVF9ERVRFUk1JTklTVCwKLQkgICAgICAgIkNvbnRlbnQgbW9kZWwgZm9yIEVsZW1lbnQgJXMgaXMgYW1iaWd1b3VzXG4iLAotCSAgICAgICAgICAgICAgICAgICBuYW1lLCBOVUxMLCBOVUxMKTsKKwljaGFyIGV4cHJbNTAwMF07CisJZXhwclswXSA9IDA7CisJeG1sU25wcmludGZFbGVtZW50Q29udGVudChleHByLCA1MDAwLCBlbGVtRGVjbC0+Y29udGVudCwgMSk7CisJeG1sRXJyVmFsaWROb2RlKGN0eHQsICh4bWxOb2RlUHRyKSBlbGVtRGVjbCwKKyAgICAgICAgICAgICAgICBYTUxfRFREX0NPTlRFTlRfTk9UX0RFVEVSTUlOSVNULAorCSAgICAgICAgIkNvbnRlbnQgbW9kZWwgb2YgJXMgaXMgbm90IGRldGVybWluaXN0aWM6ICVzXG4iLAorCSAgICAgICAgbmFtZSwgQkFEX0NBU1QgZXhwciwgTlVMTCk7CiAgICAgfSBlbHNlIGlmIChyZXQgPT0gLTIpIHsKIAkvKgogCSAqIEFuIGVudGl0aWVzIHJlZmVyZW5jZSBhcHBlYXJlZCBhdCB0aGlzIGxldmVsLgogCSAqIEJ1aWxkIGEgbWluaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG5vZGUgY29udGVudAogCSAqIHN1ZmZpY2llbnQgdG8gcnVuIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3Mgb24gaXQKIAkgKi8KLQlERUJVR19WQUxJRF9NU0coIkZvdW5kIGFuIGVudGl0eSByZWZlcmVuY2UsIGxpbmVhcml6aW5nIik7CiAJY3VyID0gY2hpbGQ7CiAJd2hpbGUgKGN1ciAhPSBOVUxMKSB7CiAJICAgIHN3aXRjaCAoY3VyLT50eXBlKSB7CkBAIC01NjYwLDYgKzU0NzIsNyBAQAogICAgIHJldHVybihyZXQpOwogfQogCisjaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECiAvKioKICAqIHhtbFZhbGlkYXRlQ2hlY2tNaXhlZDoKICAqIEBjdHh0OiAgdGhlIHZhbGlkYXRpb24gY29udGV4dApAQCAtNTcyNSw2ICs1NTM4LDcgQEAKICAgICB9CiAgICAgcmV0dXJuKDApOwogfQorI2VuZGlmIC8qIExJQlhNTF9SRUdFWFBfRU5BQkxFRCAqLwogCiAvKioKICAqIHhtbFZhbGlkR2V0RWxlbURlY2w6CkBAIC01OTg5LDExICs1ODAzLDEyIEBACiAJICAgIGlmIChlbGVtRGVjbC0+ZXR5cGUgPT0gWE1MX0VMRU1FTlRfVFlQRV9FTEVNRU5UKSB7CiAJCWlmIChzdGF0ZS0+ZXhlYyAhPSBOVUxMKSB7CiAJCSAgICByZXQgPSB4bWxSZWdFeGVjUHVzaFN0cmluZyhzdGF0ZS0+ZXhlYywgTlVMTCwgTlVMTCk7Ci0JCSAgICBpZiAocmV0ID09IDApIHsKKwkJICAgIGlmIChyZXQgPD0gMCkgewogCQkJeG1sRXJyVmFsaWROb2RlKGN0eHQsIHN0YXRlLT5ub2RlLAogCQkJICAgICAgICAgICAgICAgIFhNTF9EVERfQ09OVEVOVF9NT0RFTCwKLQkgICAiRWxlbWVudCAlcyBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBFeHBlY3RpbmcgbW9yZSBjaGlsZFxuIiwKKwkgICAiRWxlbWVudCAlcyBjb250ZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgRFRELCBFeHBlY3RpbmcgbW9yZSBjaGlsZHJlblxuIiwKIAkJCSAgICAgICBzdGF0ZS0+bm9kZS0+bmFtZSwgTlVMTCxOVUxMKTsKKwkJCXJldCA9IDA7CiAJCSAgICB9IGVsc2UgewogCQkJLyoKIAkJCSAqIHByZXZpb3VzIHZhbGlkYXRpb24gZXJyb3JzIHNob3VsZCBub3QgZ2VuZXJhdGUKQEAgLTY0NDksNyArNjI2NCw3IEBACiAgKiB4bWxWYWxpZGF0ZUVsZW1lbnQ6CiAgKiBAY3R4dDogIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQKICAqIEBkb2M6ICBhIGRvY3VtZW50IGluc3RhbmNlCi0gKiBAZWxlbTogIGFuIGVsZW1lbnQgaW5zdGFuY2UKKyAqIEByb290OiAgYW4gZWxlbWVudCBpbnN0YW5jZQogICoKICAqIFRyeSB0byB2YWxpZGF0ZSB0aGUgc3VidHJlZSB1bmRlciBhbiBlbGVtZW50CiAgKgpAQCAtNjQ1Nyw2MCArNjI3Miw2MCBAQAogICovCiAKIGludAoteG1sVmFsaWRhdGVFbGVtZW50KHhtbFZhbGlkQ3R4dFB0ciBjdHh0LCB4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIGVsZW0pIHsKLSAgICB4bWxOb2RlUHRyIGNoaWxkOworeG1sVmFsaWRhdGVFbGVtZW50KHhtbFZhbGlkQ3R4dFB0ciBjdHh0LCB4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIHJvb3QpIHsKKyAgICB4bWxOb2RlUHRyIGVsZW07CiAgICAgeG1sQXR0clB0ciBhdHRyOwogICAgIHhtbE5zUHRyIG5zOwogICAgIGNvbnN0IHhtbENoYXIgKnZhbHVlOwogICAgIGludCByZXQgPSAxOwogCi0gICAgaWYgKGVsZW0gPT0gTlVMTCkgcmV0dXJuKDApOwotCi0gICAgLyoKLSAgICAgKiBYSW5jbHVkZSBlbGVtZW50cyB3ZXJlIGFkZGVkIGFmdGVyIHBhcnNpbmcgaW4gdGhlIGluZm9zZXQsCi0gICAgICogdGhleSBkb24ndCByZWFsbHkgbWVhbiBhbnl0aGluZyB2YWxpZGF0aW9uIHdpc2UuCi0gICAgICovCi0gICAgaWYgKChlbGVtLT50eXBlID09IFhNTF9YSU5DTFVERV9TVEFSVCkgfHwKLQkoZWxlbS0+dHlwZSA9PSBYTUxfWElOQ0xVREVfRU5EKSB8fAotCShlbGVtLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpCi0JcmV0dXJuKDEpOworICAgIGlmIChyb290ID09IE5VTEwpIHJldHVybigwKTsKIAogICAgIENIRUNLX0RURDsKIAotICAgIC8qCi0gICAgICogRW50aXRpZXMgcmVmZXJlbmNlcyBoYXZlIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseQotICAgICAqLwotICAgIGlmIChlbGVtLT50eXBlID09IFhNTF9FTlRJVFlfUkVGX05PREUpIHsKLQlyZXR1cm4oMSk7CisgICAgZWxlbSA9IHJvb3Q7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcmV0ICY9IHhtbFZhbGlkYXRlT25lRWxlbWVudChjdHh0LCBkb2MsIGVsZW0pOworCisgICAgICAgIGlmIChlbGVtLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgIGF0dHIgPSBlbGVtLT5wcm9wZXJ0aWVzOworICAgICAgICAgICAgd2hpbGUgKGF0dHIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoZG9jLCBhdHRyLT5jaGlsZHJlbiwgMCk7CisgICAgICAgICAgICAgICAgcmV0ICY9IHhtbFZhbGlkYXRlT25lQXR0cmlidXRlKGN0eHQsIGRvYywgZWxlbSwgYXR0ciwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB4bWxGcmVlKChjaGFyICopdmFsdWUpOworICAgICAgICAgICAgICAgIGF0dHI9IGF0dHItPm5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5zID0gZWxlbS0+bnNEZWY7CisgICAgICAgICAgICB3aGlsZSAobnMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChlbGVtLT5ucyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXQgJj0geG1sVmFsaWRhdGVPbmVOYW1lc3BhY2UoY3R4dCwgZG9jLCBlbGVtLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnMsIG5zLT5ocmVmKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldCAmPSB4bWxWYWxpZGF0ZU9uZU5hbWVzcGFjZShjdHh0LCBkb2MsIGVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLT5ucy0+cHJlZml4LCBucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLT5ocmVmKTsKKyAgICAgICAgICAgICAgICBucyA9IG5zLT5uZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZWxlbS0+Y2hpbGRyZW4gIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLT5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAoZWxlbSA9PSByb290KQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIGlmIChlbGVtLT5uZXh0ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbGVtID0gZWxlbS0+cGFyZW50OworICAgICAgICB9CisgICAgICAgIGVsZW0gPSBlbGVtLT5uZXh0OwogICAgIH0KIAotICAgIHJldCAmPSB4bWxWYWxpZGF0ZU9uZUVsZW1lbnQoY3R4dCwgZG9jLCBlbGVtKTsKLSAgICBpZiAoZWxlbS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFKSB7Ci0JYXR0ciA9IGVsZW0tPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKGF0dHIgIT0gTlVMTCkgewotCSAgICB2YWx1ZSA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgYXR0ci0+Y2hpbGRyZW4sIDApOwotCSAgICByZXQgJj0geG1sVmFsaWRhdGVPbmVBdHRyaWJ1dGUoY3R4dCwgZG9jLCBlbGVtLCBhdHRyLCB2YWx1ZSk7Ci0JICAgIGlmICh2YWx1ZSAhPSBOVUxMKQotCQl4bWxGcmVlKChjaGFyICopdmFsdWUpOwotCSAgICBhdHRyPSBhdHRyLT5uZXh0OwotCX0KLQlucyA9IGVsZW0tPm5zRGVmOwotCXdoaWxlIChucyAhPSBOVUxMKSB7Ci0JICAgIGlmIChlbGVtLT5ucyA9PSBOVUxMKQotCQlyZXQgJj0geG1sVmFsaWRhdGVPbmVOYW1lc3BhY2UoY3R4dCwgZG9jLCBlbGVtLCBOVUxMLAotCQkJCQkgICAgICAgbnMsIG5zLT5ocmVmKTsKLQkgICAgZWxzZQotCQlyZXQgJj0geG1sVmFsaWRhdGVPbmVOYW1lc3BhY2UoY3R4dCwgZG9jLCBlbGVtLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS0+bnMtPnByZWZpeCwgbnMsIG5zLT5ocmVmKTsKLQkgICAgbnMgPSBucy0+bmV4dDsKLQl9Ci0gICAgfQotICAgIGNoaWxkID0gZWxlbS0+Y2hpbGRyZW47Ci0gICAgd2hpbGUgKGNoaWxkICE9IE5VTEwpIHsKLSAgICAgICAgcmV0ICY9IHhtbFZhbGlkYXRlRWxlbWVudChjdHh0LCBkb2MsIGNoaWxkKTsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dDsKLSAgICB9Ci0KK2RvbmU6CiAgICAgcmV0dXJuKHJldCk7CiB9CiAKQEAgLTcwMDcsNyArNjgyMiw3IEBACiAvKgogICogRHVtbXkgZnVuY3Rpb24gdG8gc3VwcHJlc3MgbWVzc2FnZXMgd2hpbGUgd2UgdHJ5IG91dCB2YWxpZCBlbGVtZW50cwogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTCB4bWxOb1ZhbGlkaXR5RXJyKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELAorc3RhdGljIHZvaWQgeG1sTm9WYWxpZGl0eUVycih2b2lkICpjdHggQVRUUklCVVRFX1VOVVNFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnIEFUVFJJQlVURV9VTlVTRUQsIC4uLikgewogICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3dpbjMyL01ha2VmaWxlLmJjYiBiL3dpbjMyL01ha2VmaWxlLmJjYgppbmRleCBjNGI1MTI1Li4xM2UwMjM5IDEwMDY0NAotLS0gYS93aW4zMi9NYWtlZmlsZS5iY2IKKysrIGIvd2luMzIvTWFrZWZpbGUuYmNiCkBAIC0zMSw3ICszMSw2IEBACiBYTUxfQkFTRU5BTUUgPSBsaWIkKFhNTF9OQU1FKQogWE1MX1NPID0gJChYTUxfQkFTRU5BTUUpLmRsbAogWE1MX0lNUCA9ICQoWE1MX0JBU0VOQU1FKS5saWIKLVhNTF9ERUYgPSAkKFhNTF9CQVNFTkFNRSkuZGVmCiBYTUxfQSA9ICQoWE1MX0JBU0VOQU1FKV9hLmxpYgogRFVNTVkgPSBkaXIuZXhpc3RzCiAKQEAgLTQyLDcgKzQxLDcgQEAKIFVUSUxTX0lOVERJUiA9IGludC51dGlscy5iY2IKIAogIyBUaGUgcHJlcHJvY2Vzc29yIGFuZCBpdHMgb3B0aW9ucy4KLUNQUCA9IGNwcDMyLmV4ZSAtUC0gLURXSU4zMgorQ1BQID0gY3BwMzIuZXhlIC1QLQogQ1BQRkxBR1MgPSAtSSIkKFhNTF9TUkNESVIpXGluY2x1ZGUiIC1ETk9MSUJUT09MIAogIWlmICIkKFdJVEhfVEhSRUFEUykiICE9ICJubyIKIENQUEZMQUdTID0gJChDUFBGTEFHUykgLURfUkVFTlRSQU5UIC1EX19NVF9fCkBAIC01MCw3ICs0OSw3IEBACiAKICMgVGhlIGNvbXBpbGVyIGFuZCBpdHMgb3B0aW9ucy4KIENDID0gYmNjMzIuZXhlCi1DRkxBR1MgPSAtcSAtRFdJTjMyIC1EX05PX1ZDTCAtRF9XSU5ET1dTIC1EX01CQ1MgLURFSUxTRVE9MiAtRE5PTElCVE9PTCAtdy0KK0NGTEFHUyA9IC1xIC1EX05PX1ZDTCAtRF9XSU5ET1dTIC1EX01CQ1MgLURFSUxTRVE9MiAtRE5PTElCVE9PTCAtdy0KIENGTEFHUyA9ICQoQ0ZMQUdTKSAtSSIkKFhNTF9TUkNESVIpIiAtSSIkKFhNTF9TUkNESVIpXGluY2x1ZGUiIC1JIiQoSU5DUFJFRklYKSIgLUkiJChJTkNMVURFKSIKICFpZiAiJChXSVRIX1RIUkVBRFMpIiAhPSAibm8iCiBDRkxBR1MgPSAkKENGTEFHUykgLURfUkVFTlRSQU5UIC10V00KQEAgLTU4LDEwICs1Nyw4IEBACiAhaWYgIiQoRFlOUlVOVElNRSkiID09ICIxIgogQ0ZMQUdTID0gJChDRkxBR1MpIC10V1IKICFlbmRpZgotIWlmICIkKFdJVEhfVEhSRUFEUykiID09ICJ5ZXMiIHx8ICIkKFdJVEhfVEhSRUFEUykiID09ICJjdGxzIgotQ0ZMQUdTID0gJChDRkxBR1MpIC1ESEFWRV9XSU4zMl9USFJFQURTIC1ESEFWRV9DT01QSUxFUl9UTFMKLSFlbHNlIGlmICIkKFdJVEhfVEhSRUFEUykiID09ICJuYXRpdmUiCi1DRkxBR1MgPSAkKENGTEFHUykgLURIQVZFX1dJTjMyX1RIUkVBRFMKKyFpZiAiJChXSVRIX1RIUkVBRFMpIiA9PSAiY3RscyIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAiLURYTUxfVEhSRUFEX0xPQ0FMPV9fZGVjbHNwZWModGhyZWFkKSIKICFlbHNlIGlmICIkKFdJVEhfVEhSRUFEUykiID09ICJwb3NpeCIKIENGTEFHUyA9ICQoQ0ZMQUdTKSAtREhBVkVfUFRIUkVBRF9ICiAhZW5kaWYKQEAgLTIwNSw3ICsyMDIsNiBAQAogIyBYbWxsaW50IGFuZCBmcmllbmRzIGV4ZWN1dGFibGVzLgogVVRJTFMgPSAkKEJJTkRJUilceG1sbGludC5leGVcCiAJJChCSU5ESVIpXHhtbGNhdGFsb2cuZXhlXAotCSQoQklORElSKVx0ZXN0QXV0b21hdGEuZXhlXAogCSQoQklORElSKVx0ZXN0TW9kdWxlLmV4ZVwKIAkkKEJJTkRJUilccnVudGVzdC5leGVcCiAJJChCSU5ESVIpXHJ1bnN1aXRlLmV4ZVwKQEAgLTI5NSwxNyArMjkxLDEyIEBACiAKICNkZWY0YmNiLmV4ZSA6IGRlZjRiY2IuYwogCi0jIENyZWF0ZXMgdGhlIGV4cG9ydCBkZWZpbml0aW9uIGZpbGUgKERFRikgZm9yIGxpYnhtbC4KLSMkKFhNTF9JTlRESVIpXCQoWE1MX0RFRikgOiAkKFhNTF9JTlRESVIpXCQoRFVNTVkpICQoWE1MX0RFRikuc3JjIGRlZjRiY2IuZXhlCi0jCSQoQ1BQKSAkKENQUEZMQUdTKSAtbyAkKFhNTF9JTlRESVIpXCQoWE1MX0RFRikudG1wICQoWE1MX0RFRikuc3JjCi0jCWRlZjRiY2IgLW1zbmFtZXMgPCAkKFhNTF9JTlRESVIpXCQoWE1MX0RFRikudG1wID4gJChYTUxfSU5URElSKVwkKFhNTF9ERUYpCi0KICMgQ3JlYXRlcyB0aGUgbGlieG1sIHNoYXJlZCBvYmplY3QuCiAkKEJJTkRJUilcJChYTUxfU08pIDogJChCSU5ESVIpXCQoRFVNTVkpICQoWE1MX09CSlMpCiAJJChMRCkgJChMREZMQUdTKSAtVHBkIC1HaSBjMGQzMi5vYmogJChYTUxfT0JKUyksJChCSU5ESVIpXCQoWE1MX1NPKSwsJChMSUJTKQogCi0jJChCSU5ESVIpXCQoWE1MX1NPKSA6ICQoQklORElSKVwkKERVTU1ZKSAkKFhNTF9PQkpTKSAkKFhNTF9JTlRESVIpXCQoWE1MX0RFRikKLSMJJChMRCkgJChMREZMQUdTKSAtVHBkIC1HaSBjMGQzMi5vYmogJChYTUxfT0JKUyksJChCSU5ESVIpXCQoWE1MX1NPKSwsJChMSUJTKSwkKFhNTF9JTlRESVIpXCQoWE1MX0RFRikKKyMkKEJJTkRJUilcJChYTUxfU08pIDogJChCSU5ESVIpXCQoRFVNTVkpICQoWE1MX09CSlMpCisjCSQoTEQpICQoTERGTEFHUykgLVRwZCAtR2kgYzBkMzIub2JqICQoWE1MX09CSlMpLCQoQklORElSKVwkKFhNTF9TTyksLCQoTElCUykKIAogIyBDcmVhdGVzIHRoZSBsaWJ4bWwgYXJjaGl2ZS4KICQoQklORElSKVwkKFhNTF9BKSA6ICQoQklORElSKVwkKERVTU1ZKSAkKFhNTF9PQkpTX0EpCmRpZmYgLS1naXQgYS93aW4zMi9NYWtlZmlsZS5taW5ndyBiL3dpbjMyL01ha2VmaWxlLm1pbmd3CmluZGV4IDEzZjJkOTYuLjYyMGRjMWQgMTAwNjQ0Ci0tLSBhL3dpbjMyL01ha2VmaWxlLm1pbmd3CisrKyBiL3dpbjMyL01ha2VmaWxlLm1pbmd3CkBAIC00MCwxOSArNDAsMTMgQEAKIAogIyBUaGUgY29tcGlsZXIgYW5kIGl0cyBvcHRpb25zLgogQ0MgPSBnY2MuZXhlCi1DRkxBR1MgKz0gLURXSU4zMiAtRF9XSU5ET1dTIC1EX01CQ1MgLUROT0xJQlRPT0wgCitDRkxBR1MgKz0gLURfV0lORE9XUyAtRF9NQkNTIC1ETk9MSUJUT09MCiBDRkxBR1MgKz0gLUkkKFhNTF9TUkNESVIpIC1JJChYTUxfU1JDRElSKS9pbmNsdWRlIC1JJChJTkNQUkVGSVgpICQoSU5DTFVERSkKIGlmbmVxICgkKFdJVEhfVEhSRUFEUyksbm8pCiBDRkxBR1MgKz0gLURfUkVFTlRSQU5UCiBlbmRpZgotaWZlcSAoJChXSVRIX1RIUkVBRFMpLHllcykgCi1DRkxBR1MgKz0gLURIQVZFX1dJTjMyX1RIUkVBRFMgLURIQVZFX0NPTVBJTEVSX1RMUwotZW5kaWYKIGlmZXEgKCQoV0lUSF9USFJFQURTKSxjdGxzKQotQ0ZMQUdTICs9IC1ESEFWRV9XSU4zMl9USFJFQURTIC1ESEFWRV9DT01QSUxFUl9UTFMKLWVuZGlmCi1pZmVxICgkKFdJVEhfVEhSRUFEUyksbmF0aXZlKQotQ0ZMQUdTICs9IC1ESEFWRV9XSU4zMl9USFJFQURTCitDRkxBR1MgKz0gIi1EWE1MX1RIUkVBRF9MT0NBTD1fX2RlY2xzcGVjKHRocmVhZCkiCiBlbmRpZgogaWZlcSAoJChXSVRIX1RIUkVBRFMpLHBvc2l4KQogQ0ZMQUdTICs9IC1ESEFWRV9QVEhSRUFEX0gKQEAgLTIwMSw3ICsxOTUsNiBAQAogIyBYbWxsaW50IGFuZCBmcmllbmRzIGV4ZWN1dGFibGVzLgogVVRJTFMgPSAkKEJJTkRJUikveG1sbGludC5leGVcCiAJJChCSU5ESVIpL3htbGNhdGFsb2cuZXhlXAotCSQoQklORElSKS90ZXN0QXV0b21hdGEuZXhlXAogCSQoQklORElSKS90ZXN0TW9kdWxlLmV4ZVwKIAkkKEJJTkRJUikvcnVudGVzdC5leGVcCiAJJChCSU5ESVIpL3J1bnN1aXRlLmV4ZVwKZGlmZiAtLWdpdCBhL3dpbjMyL01ha2VmaWxlLm1zdmMgYi93aW4zMi9NYWtlZmlsZS5tc3ZjCmluZGV4IDgwZTY0ZTIuLmJjOGRkZDAgMTAwNjQ0Ci0tLSBhL3dpbjMyL01ha2VmaWxlLm1zdmMKKysrIGIvd2luMzIvTWFrZWZpbGUubXN2YwpAQCAtMjQsNyArMjQsNiBAQAogWE1MX1NPID0gJChYTUxfQkFTRU5BTUUpLmRsbAogWE1MX1JFUyA9ICQoWE1MX0JBU0VOQU1FKS5yZXMKIFhNTF9JTVAgPSAkKFhNTF9CQVNFTkFNRSkubGliCi1YTUxfREVGID0gJChYTUxfQkFTRU5BTUUpLmRlZgogWE1MX0EgPSAkKFhNTF9CQVNFTkFNRSlfYS5saWIKIFhNTF9BX0RMTCA9ICQoWE1MX0JBU0VOQU1FKV9hX2RsbC5saWIKIApAQCAtNDksMTAgKzQ4LDggQEAKICFpZiAiJChXSVRIX1RIUkVBRFMpIiAhPSAibm8iCiBDRkxBR1MgPSAkKENGTEFHUykgL0QgIl9SRUVOVFJBTlQiCiAhZW5kaWYKLSFpZiAiJChXSVRIX1RIUkVBRFMpIiA9PSAieWVzIiB8fCAiJChXSVRIX1RIUkVBRFMpIiA9PSAiY3RscyIKLUNGTEFHUyA9ICQoQ0ZMQUdTKSAvRCAiSEFWRV9XSU4zMl9USFJFQURTIiAvRCAiSEFWRV9DT01QSUxFUl9UTFMiCi0hZWxzZSBpZiAiJChXSVRIX1RIUkVBRFMpIiA9PSAibmF0aXZlIgotQ0ZMQUdTID0gJChDRkxBR1MpIC9EICJIQVZFX1dJTjMyX1RIUkVBRFMiCishaWYgIiQoV0lUSF9USFJFQURTKSIgPT0gImN0bHMiCitDRkxBR1MgPSAkKENGTEFHUykgL0QgIlhNTF9USFJFQURfTE9DQUw9X19kZWNsc3BlYyh0aHJlYWQpIgogIWVsc2UgaWYgIiQoV0lUSF9USFJFQURTKSIgPT0gInBvc2l4IgogQ0ZMQUdTID0gJChDRkxBR1MpIC9EICJIQVZFX1BUSFJFQURfSCIKICFlbmRpZgpAQCAtMjU1LDcgKzI1Miw2IEBACiAjIFhtbGxpbnQgYW5kIGZyaWVuZHMgZXhlY3V0YWJsZXMuCiBVVElMUyA9ICQoQklORElSKVx4bWxsaW50LmV4ZVwKIAkkKEJJTkRJUilceG1sY2F0YWxvZy5leGVcCi0JJChCSU5ESVIpXHRlc3RBdXRvbWF0YS5leGVcCiAJJChCSU5ESVIpXHRlc3RNb2R1bGUuZXhlXAogCSQoQklORElSKVxydW50ZXN0LmV4ZVwKIAkkKEJJTkRJUilccnVuc3VpdGUuZXhlXApAQCAtMzY4LDIyICszNjQsMTUgQEAKICMgQ29tcGlsZXMgc3RhdGljIGZvciBkbGwgbGlieG1sIHNvdXJjZS4gVXNlcyB0aGUgaW1wbGljaXQgcnVsZSBmb3IgY29tbWFuZHMuCiAkKFhNTF9PQkpTX0FfRExMKSA6ICQoWE1MX0lOVERJUl9BX0RMTCkgCiAKLSMgQ3JlYXRlcyB0aGUgZXhwb3J0IGRlZmluaXRpb24gZmlsZSAoREVGKSBmb3IgbGlieG1sLgotJChYTUxfSU5URElSKVwkKFhNTF9ERUYpIDogJChYTUxfSU5URElSKSAkKFhNTF9ERUYpLnNyYwotCSQoQ1BQKSAkKENQUEZMQUdTKSAkKFhNTF9ERUYpLnNyYyA+ICQoWE1MX0lOVERJUilcJChYTUxfREVGKQogJChYTUxfSU5URElSKVwkKFhNTF9SRVMpIDogJChYTUxfSU5URElSKSBsaWJ4bWwyLnJjCiAJcmMgLUZvICQoWE1MX0lOVERJUilcJChYTUxfUkVTKSBsaWJ4bWwyLnJjCiAKICMgQ3JlYXRlcyB0aGUgbGlieG1sIHNoYXJlZCBvYmplY3QuCi0kKEJJTkRJUilcJChYTUxfU08pIDogJChCSU5ESVIpICQoWE1MX09CSlMpICQoWE1MX0lOVERJUilcJChYTUxfREVGKSAkKFhNTF9JTlRESVIpXCQoWE1MX1JFUykKKyQoQklORElSKVwkKFhNTF9TTykgOiAkKEJJTkRJUikgJChYTUxfT0JKUykgJChYTUxfSU5URElSKVwkKFhNTF9SRVMpCiAJJChMRCkgJChMREZMQUdTKSAvRExMIFwKIAkJL0lNUExJQjokKEJJTkRJUilcJChYTUxfSU1QKSAvT1VUOiQoQklORElSKVwkKFhNTF9TTykgJChYTUxfT0JKUykgJChYTUxfSU5URElSKVwkKFhNTF9SRVMpICQoTElCUykKIAlAJChfVkNfTUFOSUZFU1RfRU1CRURfRExMKQogCi0jJChCSU5ESVIpXCQoWE1MX1NPKSA6ICQoQklORElSKSAkKFhNTF9PQkpTKSAkKFhNTF9JTlRESVIpXCQoWE1MX0RFRikKLSMJJChMRCkgJChMREZMQUdTKSAvRExMIC9ERUY6JChYTUxfSU5URElSKVwkKFhNTF9ERUYpIFwKLSMJCS9JTVBMSUI6JChCSU5ESVIpXCQoWE1MX0lNUCkgL09VVDokKEJJTkRJUilcJChYTUxfU08pICQoWE1MX09CSlMpICQoTElCUykKLQogIyBDcmVhdGVzIHRoZSBsaWJ4bWwgYXJjaGl2ZS4KICQoQklORElSKVwkKFhNTF9BKSA6ICQoQklORElSKSAkKFhNTF9PQkpTX0EpCiAJJChBUikgJChBUkZMQUdTKSAvT1VUOiQoQklORElSKVwkKFhNTF9BKSAkKFhNTF9PQkpTX0EpCmRpZmYgLS1naXQgYS93aW4zMi9SZWFkbWUudHh0IGIvd2luMzIvUmVhZG1lLnR4dAppbmRleCBkMDIwNzBlLi4yMzg2ODZlIDEwMDY0NAotLS0gYS93aW4zMi9SZWFkbWUudHh0CisrKyBiL3dpbjMyL1JlYWRtZS50eHQKQEAgLTIsNiArMiw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd3MgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT0KIAorREVQUkVDQVRJT04gV0FSTklORzogVGhlIGJ1aWxkIHN5c3RlbSBpbiB0aGUgd2luMzIgZGlyZWN0b3J5IGlzIGRlcHJlY2F0ZWQKK2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gUGxlYXNlIHN3aXRjaCB0byBDTWFrZS4KKwogVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMgc29mdHdhcmUgb24gdGhlCiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybS4gVGhpcyBpcyBub3QgYSBwbGFjZSB0byBsb29rIGZvciBoZWxwIGlmIHlvdSBhcmUKIHVzaW5nIGEgUE9TSVggZW11bGF0b3IsIHN1Y2ggYXMgQ3lnd2luLiBDaGVjayB0aGUgVW5peCBpbnN0cnVjdGlvbnMgZm9yIApkaWZmIC0tZ2l0IGEvd2luMzIvY29uZmlndXJlLmpzIGIvd2luMzIvY29uZmlndXJlLmpzCmluZGV4IDg0OTk0MjguLjNlNDk2MzUgMTAwNjQ0Ci0tLSBhL3dpbjMyL2NvbmZpZ3VyZS5qcworKysgYi93aW4zMi9jb25maWd1cmUuanMKQEAgLTQ2LDcgKzQ2LDYgQEAKIHZhciB3aXRoTHptYSA9IGZhbHNlOwogdmFyIHdpdGhEZWJ1ZyA9IHRydWU7CiB2YXIgd2l0aE1lbURlYnVnID0gZmFsc2U7Ci12YXIgd2l0aFJ1bkRlYnVnID0gZmFsc2U7CiB2YXIgd2l0aFNjaGVtYXMgPSB0cnVlOwogdmFyIHdpdGhTY2hlbWF0cm9uID0gdHJ1ZTsKIHZhciB3aXRoUmVnRXhwcyA9IHRydWU7CkBAIC0xMzIsNyArMTMxLDYgQEAKIAl0eHQgKz0gIiAgbHptYTogICAgICAgRW5hYmxlIGx6bWEgc3VwcG9ydCAoIiArICh3aXRoTHptYT8gInllcyIgOiAibm8iKSAgKyAiKVxuIjsKIAl0eHQgKz0gIiAgeG1sX2RlYnVnOiAgRW5hYmxlIFhNTCBkZWJidWdnaW5nIG1vZHVsZSAoIiArICh3aXRoRGVidWc/ICJ5ZXMiIDogIm5vIikgICsgIilcbiI7CiAJdHh0ICs9ICIgIG1lbV9kZWJ1ZzogIEVuYWJsZSBtZW1vcnkgZGVidWdnZXIgKCIgKyAod2l0aE1lbURlYnVnPyAieWVzIiA6ICJubyIpICArICIpXG4iOwotCXR4dCArPSAiICBydW5fZGVidWc6ICBFbmFibGUgbWVtb3J5IGRlYnVnZ2VyICgiICsgKHdpdGhSdW5EZWJ1Zz8gInllcyIgOiAibm8iKSAgKyAiKVxuIjsKIAl0eHQgKz0gIiAgcmVnZXhwczogICAgRW5hYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKCIgKyAod2l0aFJlZ0V4cHM/ICJ5ZXMiIDogIm5vIikgKyAiKVxuIjsKIAl0eHQgKz0gIiAgbW9kdWxlczogICAgRW5hYmxlIG1vZHVsZSBzdXBwb3J0ICgiICsgKHdpdGhNb2R1bGVzPyAieWVzIiA6ICJubyIpICsgIilcbiI7CiAJdHh0ICs9ICIgIHRyZWU6ICAgICAgIEVuYWJsZSB0cmVlIGFwaSAoIiArICh3aXRoVHJlZT8gInllcyIgOiAibm8iKSArICIpXG4iOwpAQCAtMjI5LDcgKzIyNyw2IEBACiAJdmYuV3JpdGVMaW5lKCJXSVRIX0xaTUE9IiArICh3aXRoTHptYT8gIjEiIDogIjAiKSk7CiAJdmYuV3JpdGVMaW5lKCJXSVRIX0RFQlVHPSIgKyAod2l0aERlYnVnPyAiMSIgOiAiMCIpKTsKIAl2Zi5Xcml0ZUxpbmUoIldJVEhfTUVNX0RFQlVHPSIgKyAod2l0aE1lbURlYnVnPyAiMSIgOiAiMCIpKTsKLQl2Zi5Xcml0ZUxpbmUoIldJVEhfUlVOX0RFQlVHPSIgKyAod2l0aFJ1bkRlYnVnPyAiMSIgOiAiMCIpKTsKIAl2Zi5Xcml0ZUxpbmUoIldJVEhfU0NIRU1BUz0iICsgKHdpdGhTY2hlbWFzPyAiMSIgOiAiMCIpKTsKIAl2Zi5Xcml0ZUxpbmUoIldJVEhfU0NIRU1BVFJPTj0iICsgKHdpdGhTY2hlbWF0cm9uPyAiMSIgOiAiMCIpKTsKIAl2Zi5Xcml0ZUxpbmUoIldJVEhfUkVHRVhQUz0iICsgKHdpdGhSZWdFeHBzPyAiMSIgOiAiMCIpKTsKQEAgLTMzNyw4ICszMzQsNiBAQAogCQkJb2YuV3JpdGVMaW5lKHMucmVwbGFjZSgvXEBXSVRIX0RFQlVHXEAvLCB3aXRoRGVidWc/ICIxIiA6ICIwIikpOwogCQl9IGVsc2UgaWYgKHMuc2VhcmNoKC9cQFdJVEhfTUVNX0RFQlVHXEAvKSAhPSAtMSkgewogCQkJb2YuV3JpdGVMaW5lKHMucmVwbGFjZSgvXEBXSVRIX01FTV9ERUJVR1xALywgd2l0aE1lbURlYnVnPyAiMSIgOiAiMCIpKTsKLQkJfSBlbHNlIGlmIChzLnNlYXJjaCgvXEBXSVRIX1JVTl9ERUJVR1xALykgIT0gLTEpIHsKLQkJCW9mLldyaXRlTGluZShzLnJlcGxhY2UoL1xAV0lUSF9SVU5fREVCVUdcQC8sIHdpdGhSdW5EZWJ1Zz8gIjEiIDogIjAiKSk7CiAJCX0gZWxzZSBpZiAocy5zZWFyY2goL1xAV0lUSF9TQ0hFTUFTXEAvKSAhPSAtMSkgewogCQkJb2YuV3JpdGVMaW5lKHMucmVwbGFjZSgvXEBXSVRIX1NDSEVNQVNcQC8sIHdpdGhTY2hlbWFzPyAiMSIgOiAiMCIpKTsKIAkJfSBlbHNlIGlmIChzLnNlYXJjaCgvXEBXSVRIX1NDSEVNQVRST05cQC8pICE9IC0xKSB7CkBAIC00OTIsOCArNDg3LDYgQEAKIAkJCXdpdGhEZWJ1ZyA9IHN0clRvQm9vbChhcmcuc3Vic3RyaW5nKG9wdC5sZW5ndGggKyAxLCBhcmcubGVuZ3RoKSk7CiAJCWVsc2UgaWYgKG9wdCA9PSAibWVtX2RlYnVnIikKIAkJCXdpdGhNZW1EZWJ1ZyA9IHN0clRvQm9vbChhcmcuc3Vic3RyaW5nKG9wdC5sZW5ndGggKyAxLCBhcmcubGVuZ3RoKSk7Ci0JCWVsc2UgaWYgKG9wdCA9PSAicnVuX2RlYnVnIikKLQkJCXdpdGhSdW5EZWJ1ZyA9IHN0clRvQm9vbChhcmcuc3Vic3RyaW5nKG9wdC5sZW5ndGggKyAxLCBhcmcubGVuZ3RoKSk7CiAJCWVsc2UgaWYgKG9wdCA9PSAic2NoZW1hcyIpCiAJCQl3aXRoU2NoZW1hcyA9IHN0clRvQm9vbChhcmcuc3Vic3RyaW5nKG9wdC5sZW5ndGggKyAxLCBhcmcubGVuZ3RoKSk7CiAJCWVsc2UgaWYgKG9wdCA9PSAic2NoZW1hdHJvbiIpCkBAIC02NzIsNyArNjY1LDYgQEAKIHR4dE91dCArPSAiICAgICAgbHptYSBzdXBwb3J0OiAiICsgYm9vbFRvU3RyKHdpdGhMem1hKSArICJcbiI7CiB0eHRPdXQgKz0gIiAgRGVidWdnaW5nIG1vZHVsZTogIiArIGJvb2xUb1N0cih3aXRoRGVidWcpICsgIlxuIjsKIHR4dE91dCArPSAiICBNZW1vcnkgZGVidWdnaW5nOiAiICsgYm9vbFRvU3RyKHdpdGhNZW1EZWJ1ZykgKyAiXG4iOwotdHh0T3V0ICs9ICIgUnVudGltZSBkZWJ1Z2dpbmc6ICIgKyBib29sVG9TdHIod2l0aFJ1bkRlYnVnKSArICJcbiI7CiB0eHRPdXQgKz0gIiAgICBSZWdleHAgc3VwcG9ydDogIiArIGJvb2xUb1N0cih3aXRoUmVnRXhwcykgKyAiXG4iOwogdHh0T3V0ICs9ICIgICAgTW9kdWxlIHN1cHBvcnQ6ICIgKyBib29sVG9TdHIod2l0aE1vZHVsZXMpICsgIlxuIjsKIHR4dE91dCArPSAiICAgICAgVHJlZSBzdXBwb3J0OiAiICsgYm9vbFRvU3RyKHdpdGhUcmVlKSArICJcbiI7CkBAIC03MDYsNiArNjk4LDEwIEBACiB0eHRPdXQgKz0gIlB1dCBzaGFyZWQgbGlicyBpbjogIiArIGJ1aWxkU29QcmVmaXggKyAiXG4iOwogdHh0T3V0ICs9ICIgICAgICBJbmNsdWRlIHBhdGg6ICIgKyBidWlsZEluY2x1ZGUgKyAiXG4iOwogdHh0T3V0ICs9ICIgICAgICAgICAgTGliIHBhdGg6ICIgKyBidWlsZExpYiArICJcbiI7Cit0eHRPdXQgKz0gIlxuIjsKK3R4dE91dCArPSAiREVQUkVDQVRJT04gV0FSTklORzogVGhlIGJ1aWxkIHN5c3RlbSBpbiB0aGUgd2luMzIgZGlyZWN0b3J5IGlzXG4iOwordHh0T3V0ICs9ICJkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gUGxlYXNlIHN3aXRjaFxuIjsKK3R4dE91dCArPSAidG8gQ01ha2UuXG4iOwogV1NjcmlwdC5FY2hvKHR4dE91dCk7CiAKIC8vCmRpZmYgLS1naXQgYS93aW4zMi9kZWZnZW4ueHNsIGIvd2luMzIvZGVmZ2VuLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIzYTIzMS4uMDAwMDAwMAotLS0gYS93aW4zMi9kZWZnZW4ueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSAKLQl3aW4zMi9kZWZnZW4ueHNsCi0JVGhpcyBzdHlsZXNoZWV0IGlzIHVzZWQgdG8gdHJhbnNmb3JtIGRvYy9saWJ4bWwyLWFwaS54bWwgaW50byBhIHBzZXVkby1zb3VyY2UsCi0Jd2hpY2ggY2FuIHRoZW4gYmUgcHJlcHJvY2Vzc2VkIHRvIGdldCB0aGUgLkRFRiBmaWxlIGZvciB0aGUgTWljcm9zb2Z0J3MgbGlua2VyLgotCQotCVVzZSBhbnkgWFNMVCBwcm9jZXNzb3IgdG8gcHJvZHVjZSBhIGZpbGUgY2FsbGVkIGxpYnhtbDIuZGVmLnNyYyBpbiB0aGUgd2luMzIKLQlzdWJkaXJlY3RvcnksIGZvciBleGFtcGxlLCBydW4geHNsdHByb2MgZnJvbSB0aGUgd2luMzIgc3ViZGlyZWN0b3J5OgotCQotCSAgeHNsdHByb2MgLW8gbGlieG1sMi5kZWYuc3JjIGRlZmdlbi54c2wgLi4vZG9jL2xpYnhtbDItYXBpLnhtbAotCSAgCi0JT25jZSB0aGF0IGZpbmlzaGVzLCByZXN0IGFzc3VyZWQsIHRoZSBNYWtlZmlsZSB3aWxsIGtub3cgd2hhdCB0byBkbyB3aXRoIHRoZQotCWdlbmVyYXRlZCBmaWxlLiAKLQotCUFwcmlsIDIwMDMsIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+Ci0tLT4KLTwhRE9DVFlQRSB4c2w6c3R5bGVzaGVldCBbIDwhRU5USVRZIG5sICcmI3hkOyYjeGE7Jz4gXT4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KLQk8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSIqIi8+Ci0JPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0Ii8+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTx4c2w6dGV4dD4jZGVmaW5lIExJQlhNTDJfQ09NUElMSU5HX01TQ0NERUYmbmw7PC94c2w6dGV4dD4KLQkJPHhzbDp0ZXh0PiNpbmNsdWRlICIuLi9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgiJm5sOzwveHNsOnRleHQ+Ci0JCTx4c2w6dGV4dD5MSUJSQVJZIGxpYnhtbDImbmw7PC94c2w6dGV4dD4KLQkJPHhzbDp0ZXh0PkVYUE9SVFMmbmw7PC94c2w6dGV4dD4KLQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9hcGkvc3ltYm9scy8qW3NlbGY6OnZhcmlhYmxlIG9yIHNlbGY6OmZ1bmN0aW9uXSI+Ci0JCQk8IS0tIEJhc2ljIHRlc3RzIC0tPgotCQkJPHhzbDppZiB0ZXN0PSJAZmlsZSA9ICdjMTRuJyI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfQzE0Tl9FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iQGZpbGUgPSAnY2F0YWxvZyciPgotCQkJCTx4c2w6dGV4dD4jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ2RlYnVnWE1MJyI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAZmlsZSA9ICdIVE1McGFyc2VyJykgCi0JCQkJCW9yIChAZmlsZSA9ICdIVE1MdHJlZScpIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSJAZmlsZSA9ICduYW5vaHR0cCciPgotCQkJCTx4c2w6dGV4dD4jaWZkZWYgTElCWE1MX0hUVFBfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ25hbm9mdHAnIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAZmlsZSA9ICdyZWxheG5nJykgCi0JCQkJCW9yIChAZmlsZSA9ICd4bWxzY2hlbWFzJykgCi0JCQkJCW9yIChAZmlsZSA9ICd4bWxzY2hlbWFzdHlwZXMnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iQGZpbGUgPSAneGluY2x1ZGUnIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iQGZpbGUgPSAneGxpbmsnIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9YTElOS19FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iQGZpbGUgPSAneG1sYXV0b21hdGEnIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iKEBmaWxlID0gJ3htbHJlZ2V4cCcpIAotCQkJCQlvciAoQGZpbGUgPSAneG1sdW5pY29kZScpIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAZmlsZSA9ICd4cGF0aCcpIAotCQkJCQlvciAoQGZpbGUgPSAneHBhdGhJbnRlcm5hbHMnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ3hwb2ludGVyJyI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTwhLS0gRXh0ZW5kZWQgdGVzdHMgLS0+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAbmFtZSA9ICdodG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0JykgCi0JCQkJCW9yIChAbmFtZSA9ICdodG1sSW5pdEF1dG9DbG9zZScpIAotCQkJCQlvciAoQG5hbWUgPSAnaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0JykgCi0JCQkJCW9yIChAbmFtZSA9ICdpbml0aHRtbERlZmF1bHRTQVhIYW5kbGVyJykKLQkJCQkJb3IgKEBuYW1lID0gJ3htbElzWEhUTUwnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbElPSFRUUE9wZW5XJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBNYXRjaCcpCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBPcGVuJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBSZWFkJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBDbG9zZScpIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSJAbmFtZSA9ICd4bWxWYWxpZEJ1aWxkQ29udGVudE1vZGVsJyI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSIoQG5hbWUgPSAneG1sSU9GVFBNYXRjaCcpIAotCQkJCQlvciAoQG5hbWUgPSAneG1sSU9GVFBPcGVuJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0ZUUFJlYWQnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbElPRlRQQ2xvc2UnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSIoQG5hbWUgPSAneG1sVGV4dFJlYWRlclJlbGF4TkdWYWxpZGF0ZScpIAotCQkJCQlvciAoQG5hbWUgPSAneG1sVGV4dFJlYWRlclJlbGF4TkdTZXRTY2hlbWEnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iKEBuYW1lID0gJ3htbFhQYXRoRGVidWdEdW1wT2JqZWN0JykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxYUGF0aERlYnVnRHVtcENvbXBFeHByJykiPgotCQkJCTx4c2w6dGV4dD4jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSIoQG5hbWUgPSAneG1sTWFsbG9jTG9jJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxNYWxsb2NBdG9taWNMb2MnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbFJlYWxsb2NMb2MnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbE1lbVN0cmR1cExvYycpIj4KLQkJCQk8eHNsOnRleHQ+I2lmZGVmIERFQlVHX01FTU9SWV9MT0NBVElPTiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8IS0tIFN5bWJvbCAtLT4KLQkJCTx4c2w6Y2hvb3NlPgotCQkJCTx4c2w6d2hlbiB0ZXN0PSIoQG5hbWUgPSAneG1sTWFsbG9jJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sTWFsbG9jQXRvbWljJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sUmVhbGxvYycpIAotCQkJCQkJb3IgKEBuYW1lID0gJ3htbEZyZWUnKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxNZW1TdHJkdXAnKSI+Ci0JCQkJCTx4c2w6dGV4dD4jaWZkZWYgTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6dGV4dD5fXzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotCQkJCQk8eHNsOnRleHQ+Jm5sOzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6dGV4dD4jZWxzZSZubDs8L3hzbDp0ZXh0PgotCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLQkJCQkJPHhzbDp0ZXh0PiBEQVRBJm5sOzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6dGV4dD4jZW5kaWYmbmw7PC94c2w6dGV4dD4KLQkJCQk8L3hzbDp3aGVuPgotCQkJCTx4c2w6d2hlbiB0ZXN0PSIoQG5hbWUgPSAnaHRtbERlZmF1bHRTQVhIYW5kbGVyJykgCi0JCQkJCQlvciAoQG5hbWUgPSAnb2xkWE1MV0Rjb21wYXRpYmlsaXR5JykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sQnVmZmVyQWxsb2NTY2hlbWUnKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxEZWZhdWx0QnVmZmVyU2l6ZScpIAotCQkJCQkJb3IgKEBuYW1lID0gJ3htbERlZmF1bHRTQVhIYW5kbGVyJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sRGVmYXVsdFNBWExvY2F0b3InKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUnKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxHZW5lcmljRXJyb3InKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxHZW5lcmljRXJyb3JDb250ZXh0JykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUnKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxJbmRlbnRUcmVlT3V0cHV0JykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sVHJlZUluZGVudFN0cmluZycpIAotCQkJCQkJb3IgKEBuYW1lID0gJ3htbEtlZXBCbGFua3NEZWZhdWx0VmFsdWUnKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxMaW5lTnVtYmVyc0RlZmF1bHRWYWx1ZScpIAotCQkJCQkJb3IgKEBuYW1lID0gJ3htbExvYWRFeHREdGREZWZhdWx0VmFsdWUnKSAKLQkJCQkJCW9yIChAbmFtZSA9ICd4bWxQYXJzZXJEZWJ1Z0VudGl0aWVzJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sUGFyc2VyVmVyc2lvbicpIAotCQkJCQkJb3IgKEBuYW1lID0gJ3htbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sU2F2ZU5vRW1wdHlUYWdzJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdFZhbHVlJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sUmVnaXN0ZXJOb2RlRGVmYXVsdFZhbHVlJykgCi0JCQkJCQlvciAoQG5hbWUgPSAneG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUnKSI+Ci0JCQkJCTx4c2w6dGV4dD4jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVEJm5sOzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6aWYgdGVzdD0iQG5hbWUgPSAnaHRtbERlZmF1bHRTQVhIYW5kbGVyJyI+Ci0JCQkJCQk8eHNsOnRleHQ+I2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQmbmw7PC94c2w6dGV4dD4KLQkJCQkJPC94c2w6aWY+Ci0JCQkJCTx4c2w6dGV4dD5fXzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotCQkJCQk8eHNsOnRleHQ+Jm5sOzwveHNsOnRleHQ+Ci0JCQkJCTx4c2w6aWYgdGVzdD0iQG5hbWUgPSAnaHRtbERlZmF1bHRTQVhIYW5kbGVyJyI+Ci0JCQkJCQk8eHNsOnRleHQ+I2VuZGlmJm5sOzwveHNsOnRleHQ+Ci0JCQkJCTwveHNsOmlmPgotCQkJCQk8eHNsOnRleHQ+I2Vsc2Umbmw7PC94c2w6dGV4dD4KLQkJCQkJPHhzbDppZiB0ZXN0PSJAbmFtZSA9ICdodG1sRGVmYXVsdFNBWEhhbmRsZXInIj4KLQkJCQkJCTx4c2w6dGV4dD4jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRCZubDs8L3hzbDp0ZXh0PgotCQkJCQk8L3hzbDppZj4KLQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0JCQkJCTx4c2w6dGV4dD4gREFUQSZubDs8L3hzbDp0ZXh0PgotCQkJCQk8eHNsOmlmIHRlc3Q9IkBuYW1lID0gJ2h0bWxEZWZhdWx0U0FYSGFuZGxlciciPgotCQkJCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJCQk8L3hzbDppZj4KLQkJCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJCTwveHNsOndoZW4+Ci0JCQkJPHhzbDpvdGhlcndpc2U+Ci0JCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotCQkJCQk8eHNsOmlmIHRlc3Q9InNlbGY6OnZhcmlhYmxlIj4KLQkJCQkJCTx4c2w6dGV4dD4gREFUQTwveHNsOnRleHQ+Ci0JCQkJCTwveHNsOmlmPgotCQkJCQk8eHNsOnRleHQ+Jm5sOzwveHNsOnRleHQ+Ci0JCQkJPC94c2w6b3RoZXJ3aXNlPgotCQkJPC94c2w6Y2hvb3NlPgotCQkJPCEtLSBCYXNpYyB0ZXN0cyAoY2xvc2UpIC0tPgotCQkJPHhzbDppZiB0ZXN0PSJAZmlsZSA9ICdjMTRuJyI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ2NhdGFsb2cnIj4KLQkJCQk8eHNsOnRleHQ+I2VuZGlmJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iQGZpbGUgPSAnZGVidWdYTUwnIj4KLQkJCQk8eHNsOnRleHQ+I2VuZGlmJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iKEBmaWxlID0gJ0hUTUxwYXJzZXInKSAKLQkJCQkJb3IgKEBmaWxlID0gJ0hUTUx0cmVlJykiPgotCQkJCTx4c2w6dGV4dD4jZW5kaWYmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSJAZmlsZSA9ICduYW5vaHR0cCciPgotCQkJCTx4c2w6dGV4dD4jZW5kaWYmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSJAZmlsZSA9ICduYW5vZnRwJyI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAZmlsZSA9ICdyZWxheG5nJykgCi0JCQkJCW9yIChAZmlsZSA9ICd4bWxzY2hlbWFzJykgCi0JCQkJCW9yIChAZmlsZSA9ICd4bWxzY2hlbWFzdHlwZXMnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ3hpbmNsdWRlJyI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ3hsaW5rJyI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ3htbGF1dG9tYXRhJyI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAZmlsZSA9ICd4bWxyZWdleHAnKSAKLQkJCQkJb3IgKEBmaWxlID0gJ3htbHVuaWNvZGUnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAZmlsZSA9ICd4cGF0aCcpIAotCQkJCQlvciAoQGZpbGUgPSAneHBhdGhJbnRlcm5hbHMnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IkBmaWxlID0gJ3hwb2ludGVyJyI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8IS0tIEV4dGVuZGVkIHRlc3RzIChjbG9zZSkgLS0+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAbmFtZSA9ICdodG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0JykgCi0JCQkJCW9yIChAbmFtZSA9ICdodG1sSW5pdEF1dG9DbG9zZScpIAotCQkJCQlvciAoQG5hbWUgPSAnaHRtbENyZWF0ZUZpbGVQYXJzZXJDdHh0JykgCi0JCQkJCW9yIChAbmFtZSA9ICdpbml0aHRtbERlZmF1bHRTQVhIYW5kbGVyJykKLQkJCQkJb3IgKEBuYW1lID0gJ3htbElzWEhUTUwnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbElPSFRUUE9wZW5XJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxSZWdpc3RlckhUVFBQb3N0Q2FsbGJhY2tzJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBNYXRjaCcpCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBPcGVuJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBSZWFkJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0hUVFBDbG9zZScpIj4KLQkJCQk8eHNsOnRleHQ+I2VuZGlmJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iQG5hbWUgPSAneG1sVmFsaWRCdWlsZENvbnRlbnRNb2RlbCciPgotCQkJCTx4c2w6dGV4dD4jZW5kaWYmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSIoQG5hbWUgPSAneG1sSU9GVFBNYXRjaCcpIAotCQkJCQlvciAoQG5hbWUgPSAneG1sSU9GVFBPcGVuJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxJT0ZUUFJlYWQnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbElPRlRQQ2xvc2UnKSI+Ci0JCQkJPHhzbDp0ZXh0PiNlbmRpZiZubDs8L3hzbDp0ZXh0PgotCQkJPC94c2w6aWY+Ci0JCQk8eHNsOmlmIHRlc3Q9IihAbmFtZSA9ICd4bWxUZXh0UmVhZGVyUmVsYXhOR1ZhbGlkYXRlJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxUZXh0UmVhZGVyUmVsYXhOR1NldFNjaGVtYScpIj4KLQkJCQk8eHNsOnRleHQ+I2VuZGlmJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJCTx4c2w6aWYgdGVzdD0iKEBuYW1lID0gJ3htbFhQYXRoRGVidWdEdW1wT2JqZWN0JykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxYUGF0aERlYnVnRHVtcENvbXBFeHByJykiPgotCQkJCTx4c2w6dGV4dD4jZW5kaWYmbmw7PC94c2w6dGV4dD4KLQkJCTwveHNsOmlmPgotCQkJPHhzbDppZiB0ZXN0PSIoQG5hbWUgPSAneG1sTWFsbG9jTG9jJykgCi0JCQkJCW9yIChAbmFtZSA9ICd4bWxNYWxsb2NBdG9taWNMb2MnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbFJlYWxsb2NMb2MnKSAKLQkJCQkJb3IgKEBuYW1lID0gJ3htbE1lbVN0cmR1cExvYycpIj4KLQkJCQk8eHNsOnRleHQ+I2VuZGlmJm5sOzwveHNsOnRleHQ+Ci0JCQk8L3hzbDppZj4KLQkJPC94c2w6Zm9yLWVhY2g+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgotCmRpZmYgLS1naXQgYS93aW4zMi9saWJ4bWwyLmRlZi5zcmMgYi93aW4zMi9saWJ4bWwyLmRlZi5zcmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4M2RiZjQuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGlieG1sMi5kZWYuc3JjCisrKyAvZGV2L251bGwKQEAgLTEsMzE0NiArMCwwIEBACi0jZGVmaW5lIExJQlhNTDJfQ09NUElMSU5HX01TQ0NERUYKLSNpbmNsdWRlICIuLi9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgiCi1MSUJSQVJZIGxpYnhtbDIKLUVYUE9SVFMKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLWVtcHR5RXhwIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAotZm9yYmlkZGVuRXhwIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLV9faHRtbERlZmF1bHRTQVhIYW5kbGVyCi0jZW5kaWYKLSNlbHNlCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbERlZmF1bHRTQVhIYW5kbGVyIERBVEEKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX29sZFhNTFdEY29tcGF0aWJpbGl0eQotI2Vsc2UKLW9sZFhNTFdEY29tcGF0aWJpbGl0eSBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sQnVmZmVyQWxsb2NTY2hlbWUKLSNlbHNlCi14bWxCdWZmZXJBbGxvY1NjaGVtZSBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sRGVmYXVsdEJ1ZmZlclNpemUKLSNlbHNlCi14bWxEZWZhdWx0QnVmZmVyU2l6ZSBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sRGVmYXVsdFNBWEhhbmRsZXIKLSNlbHNlCi14bWxEZWZhdWx0U0FYSGFuZGxlciBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sRGVmYXVsdFNBWExvY2F0b3IKLSNlbHNlCi14bWxEZWZhdWx0U0FYTG9jYXRvciBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sRGVyZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUKLSNlbHNlCi14bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHRWYWx1ZSBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlCi0jZWxzZQoteG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRAotX194bWxGcmVlCi0jZWxzZQoteG1sRnJlZSBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sR2VuZXJpY0Vycm9yCi0jZWxzZQoteG1sR2VuZXJpY0Vycm9yIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotX194bWxHZW5lcmljRXJyb3JDb250ZXh0Ci0jZWxzZQoteG1sR2VuZXJpY0Vycm9yQ29udGV4dCBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUKLSNlbHNlCi14bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sSW5kZW50VHJlZU91dHB1dAotI2Vsc2UKLXhtbEluZGVudFRyZWVPdXRwdXQgREFUQQotI2VuZGlmCi14bWxJc0Jhc2VDaGFyR3JvdXAgREFUQQoteG1sSXNDaGFyR3JvdXAgREFUQQoteG1sSXNDb21iaW5pbmdHcm91cCBEQVRBCi14bWxJc0RpZ2l0R3JvdXAgREFUQQoteG1sSXNFeHRlbmRlckdyb3VwIERBVEEKLXhtbElzSWRlb2dyYXBoaWNHcm91cCBEQVRBCi14bWxJc1B1YmlkQ2hhcl90YWIgREFUQQotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotX194bWxLZWVwQmxhbmtzRGVmYXVsdFZhbHVlCi0jZWxzZQoteG1sS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZSBEQVRBCi0jZW5kaWYKLXhtbExhc3RFcnJvciBEQVRBCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX3htbExpbmVOdW1iZXJzRGVmYXVsdFZhbHVlCi0jZWxzZQoteG1sTGluZU51bWJlcnNEZWZhdWx0VmFsdWUgREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX3htbExvYWRFeHREdGREZWZhdWx0VmFsdWUKLSNlbHNlCi14bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9USFJFQURfQUxMT0NfRU5BQkxFRAotX194bWxNYWxsb2MKLSNlbHNlCi14bWxNYWxsb2MgREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVECi1fX3htbE1hbGxvY0F0b21pYwotI2Vsc2UKLXhtbE1hbGxvY0F0b21pYyBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0FMTE9DX0VOQUJMRUQKLV9feG1sTWVtU3RyZHVwCi0jZWxzZQoteG1sTWVtU3RyZHVwIERBVEEKLSNlbmRpZgoteG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVWYWx1ZSBEQVRBCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX3htbFBhcnNlckRlYnVnRW50aXRpZXMKLSNlbHNlCi14bWxQYXJzZXJEZWJ1Z0VudGl0aWVzIERBVEEKLSNlbmRpZgoteG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZVZhbHVlIERBVEEKLXhtbFBhcnNlck1heERlcHRoIERBVEEKLSNpZmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLV9feG1sUGFyc2VyVmVyc2lvbgotI2Vsc2UKLXhtbFBhcnNlclZlcnNpb24gREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX3htbFBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlCi0jZWxzZQoteG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0VmFsdWUgREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9BTExPQ19FTkFCTEVECi1fX3htbFJlYWxsb2MKLSNlbHNlCi14bWxSZWFsbG9jIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotX194bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUKLSNlbHNlCi14bWxSZWdpc3Rlck5vZGVEZWZhdWx0VmFsdWUgREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX3htbFNhdmVOb0VtcHR5VGFncwotI2Vsc2UKLXhtbFNhdmVOb0VtcHR5VGFncyBEQVRBCi0jZW5kaWYKLXhtbFN0cmluZ0NvbW1lbnQgREFUQQoteG1sU3RyaW5nVGV4dCBEQVRBCi14bWxTdHJpbmdUZXh0Tm9lbmMgREFUQQoteG1sU3RydWN0dXJlZEVycm9yIERBVEEKLXhtbFN0cnVjdHVyZWRFcnJvckNvbnRleHQgREFUQQotI2lmZGVmIExJQlhNTF9USFJFQURfRU5BQkxFRAotX194bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUKLSNlbHNlCi14bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0VmFsdWUgREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1RIUkVBRF9FTkFCTEVECi1fX3htbFRyZWVJbmRlbnRTdHJpbmcKLSNlbHNlCi14bWxUcmVlSW5kZW50U3RyaW5nIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5BTiBEQVRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOSU5GIERBVEEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFBJTkYgREFUQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotVVRGOFRvSHRtbAotI2VuZGlmCi1VVEY4VG9pc29sYXQxCi1hdHRyaWJ1dGUKLWF0dHJpYnV0ZURlY2wKLWNkYXRhQmxvY2sKLWNoYXJhY3RlcnMKLWNoZWNrTmFtZXNwYWNlCi1jb21tZW50Ci1lbGVtZW50RGVjbAotZW5kRG9jdW1lbnQKLWVuZEVsZW1lbnQKLWVudGl0eURlY2wKLWV4dGVybmFsU3Vic2V0Ci1nZXRDb2x1bW5OdW1iZXIKLWdldEVudGl0eQotZ2V0TGluZU51bWJlcgotZ2V0TmFtZXNwYWNlCi1nZXRQYXJhbWV0ZXJFbnRpdHkKLWdldFB1YmxpY0lkCi1nZXRTeXN0ZW1JZAotZ2xvYmFsTmFtZXNwYWNlCi1oYXNFeHRlcm5hbFN1YnNldAotaGFzSW50ZXJuYWxTdWJzZXQKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sQXR0ckFsbG93ZWQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxBdXRvQ2xvc2VUYWcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxDcmVhdGVGaWxlUGFyc2VyQ3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEN0eHRSZWFkRG9jCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sQ3R4dFJlYWRGZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEN0eHRSZWFkRmlsZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEN0eHRSZWFkSU8KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxDdHh0UmVhZE1lbW9yeQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEN0eHRSZXNldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEN0eHRVc2VPcHRpb25zCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sRGVmYXVsdFNBWEhhbmRsZXJJbml0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sRG9jQ29udGVudER1bXBGb3JtYXRPdXRwdXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxEb2NDb250ZW50RHVtcE91dHB1dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbERvY0R1bXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxEb2NEdW1wTWVtb3J5Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sRG9jRHVtcE1lbW9yeUZvcm1hdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEVsZW1lbnRBbGxvd2VkSGVyZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEVsZW1lbnRTdGF0dXNIZXJlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sRW5jb2RlRW50aXRpZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxFbnRpdHlMb29rdXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxFbnRpdHlWYWx1ZUxvb2t1cAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbEZyZWVQYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sR2V0TWV0YUVuY29kaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sSGFuZGxlT21pdHRlZEVsZW0KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxJbml0QXV0b0Nsb3NlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sSXNBdXRvQ2xvc2VkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sSXNCb29sZWFuQXR0cgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbElzU2NyaXB0QXR0cmlidXRlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sTmV3RG9jCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sTmV3RG9jTm9EdEQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxOZXdQYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sTm9kZUR1bXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxOb2RlRHVtcEZpbGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxOb2RlRHVtcEZpbGVGb3JtYXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxOb2RlRHVtcEZvcm1hdE91dHB1dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbE5vZGVEdW1wT3V0cHV0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sTm9kZVN0YXR1cwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFBhcnNlQ2hhclJlZgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFBhcnNlQ2h1bmsKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxQYXJzZURvYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFBhcnNlRG9jdW1lbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxQYXJzZUVsZW1lbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxQYXJzZUVudGl0eVJlZgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFBhcnNlRmlsZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFJlYWREb2MKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxSZWFkRmQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxSZWFkRmlsZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFJlYWRJTwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFJlYWRNZW1vcnkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxTQVhQYXJzZURvYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFNBWFBhcnNlRmlsZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFNhdmVGaWxlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1odG1sU2F2ZUZpbGVFbmMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLWh0bWxTYXZlRmlsZUZvcm1hdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFNldE1ldGFFbmNvZGluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAotaHRtbFRhZ0xvb2t1cAotI2VuZGlmCi1pZ25vcmFibGVXaGl0ZXNwYWNlCi1pbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi1pbml0aHRtbERlZmF1bHRTQVhIYW5kbGVyCi0jZW5kaWYKLWluaXR4bWxEZWZhdWx0U0FYSGFuZGxlcgotaW5wdXRQb3AKLWlucHV0UHVzaAotaW50ZXJuYWxTdWJzZXQKLWlzU3RhbmRhbG9uZQotaXNvbGF0MVRvVVRGOAotbmFtZVBvcAotbmFtZVB1c2gKLW5hbWVzcGFjZURlY2wKLW5vZGVQb3AKLW5vZGVQdXNoCi1ub3RhdGlvbkRlY2wKLXByb2Nlc3NpbmdJbnN0cnVjdGlvbgotcmVmZXJlbmNlCi1yZXNvbHZlRW50aXR5Ci1zZXREb2N1bWVudExvY2F0b3IKLXNldE5hbWVzcGFjZQotc3RhcnREb2N1bWVudAotc3RhcnRFbGVtZW50Ci11bnBhcnNlZEVudGl0eURlY2wKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAotdmFsdWVQb3AKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi12YWx1ZVB1c2gKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YTElOS19FTkFCTEVECi14bGlua0dldERlZmF1bHREZXRlY3QKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YTElOS19FTkFCTEVECi14bGlua0dldERlZmF1bHRIYW5kbGVyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWExJTktfRU5BQkxFRAoteGxpbmtJc0xpbmsKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YTElOS19FTkFCTEVECi14bGlua1NldERlZmF1bHREZXRlY3QKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YTElOS19FTkFCTEVECi14bGlua1NldERlZmF1bHRIYW5kbGVyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxBQ2F0YWxvZ0FkZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQUNhdGFsb2dEdW1wCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxBQ2F0YWxvZ1JlbW92ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQUNhdGFsb2dSZXNvbHZlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxBQ2F0YWxvZ1Jlc29sdmVQdWJsaWMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbEFDYXRhbG9nUmVzb2x2ZVN5c3RlbQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQUNhdGFsb2dSZXNvbHZlVVJJCi0jZW5kaWYKLXhtbEFkZEF0dHJpYnV0ZURlY2wKLXhtbEFkZENoaWxkCi14bWxBZGRDaGlsZExpc3QKLXhtbEFkZERvY0VudGl0eQoteG1sQWRkRHRkRW50aXR5Ci14bWxBZGRFbGVtZW50RGVjbAoteG1sQWRkRW5jb2RpbmdBbGlhcwoteG1sQWRkSUQKLXhtbEFkZE5leHRTaWJsaW5nCi14bWxBZGROb3RhdGlvbkRlY2wKLXhtbEFkZFByZXZTaWJsaW5nCi14bWxBZGRSZWYKLXhtbEFkZFNpYmxpbmcKLXhtbEFsbG9jT3V0cHV0QnVmZmVyCi14bWxBbGxvY1BhcnNlcklucHV0QnVmZmVyCi14bWxBdHRyU2VyaWFsaXplVHh0Q29udGVudAotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YUNvbXBpbGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YUdldEluaXRTdGF0ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEF1dG9tYXRhSXNEZXRlcm1pbmlzdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEF1dG9tYXRhTmV3QWxsVHJhbnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld0NvdW50VHJhbnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld0NvdW50VHJhbnMyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQVVUT01BVEFfRU5BQkxFRAoteG1sQXV0b21hdGFOZXdDb3VudGVkVHJhbnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld0NvdW50ZXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld0NvdW50ZXJUcmFucwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEF1dG9tYXRhTmV3RXBzaWxvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEF1dG9tYXRhTmV3TmVnVHJhbnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld09uY2VUcmFucwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEF1dG9tYXRhTmV3T25jZVRyYW5zMgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEF1dG9tYXRhTmV3U3RhdGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld1RyYW5zaXRpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9BVVRPTUFUQV9FTkFCTEVECi14bWxBdXRvbWF0YU5ld1RyYW5zaXRpb24yCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQVVUT01BVEFfRU5BQkxFRAoteG1sQXV0b21hdGFTZXRGaW5hbFN0YXRlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sQm9vbFRvVGV4dAotI2VuZGlmCi14bWxCdWZDb250ZW50Ci14bWxCdWZFbmQKLXhtbEJ1ZkdldE5vZGVDb250ZW50Ci14bWxCdWZOb2RlRHVtcAoteG1sQnVmU2hyaW5rCi14bWxCdWZVc2UKLXhtbEJ1ZmZlckFkZAoteG1sQnVmZmVyQWRkSGVhZAoteG1sQnVmZmVyQ0NhdAoteG1sQnVmZmVyQ2F0Ci14bWxCdWZmZXJDb250ZW50Ci14bWxCdWZmZXJDcmVhdGUKLXhtbEJ1ZmZlckNyZWF0ZVNpemUKLXhtbEJ1ZmZlckNyZWF0ZVN0YXRpYwoteG1sQnVmZmVyRGV0YWNoCi14bWxCdWZmZXJEdW1wCi14bWxCdWZmZXJFbXB0eQoteG1sQnVmZmVyRnJlZQoteG1sQnVmZmVyR3JvdwoteG1sQnVmZmVyTGVuZ3RoCi14bWxCdWZmZXJSZXNpemUKLXhtbEJ1ZmZlclNldEFsbG9jYXRpb25TY2hlbWUKLXhtbEJ1ZmZlclNocmluawoteG1sQnVmZmVyV3JpdGVDSEFSCi14bWxCdWZmZXJXcml0ZUNoYXIKLXhtbEJ1ZmZlcldyaXRlUXVvdGVkU3RyaW5nCi14bWxCdWlsZFFOYW1lCi14bWxCdWlsZFJlbGF0aXZlVVJJCi14bWxCdWlsZFVSSQoteG1sQnl0ZUNvbnN1bWVkCi0jaWZkZWYgTElCWE1MX0MxNE5fRU5BQkxFRAoteG1sQzE0TkRvY0R1bXBNZW1vcnkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DMTROX0VOQUJMRUQKLXhtbEMxNE5Eb2NTYXZlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQzE0Tl9FTkFCTEVECi14bWxDMTRORG9jU2F2ZVRvCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQzE0Tl9FTkFCTEVECi14bWxDMTRORXhlY3V0ZQotI2VuZGlmCi14bWxDYW5vbmljUGF0aAotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENhdGFsb2dBZGQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENhdGFsb2dBZGRMb2NhbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ0NsZWFudXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENhdGFsb2dDb252ZXJ0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxDYXRhbG9nRHVtcAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ0ZyZWVMb2NhbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ0dldERlZmF1bHRzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxDYXRhbG9nR2V0UHVibGljCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxDYXRhbG9nR2V0U3lzdGVtCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxDYXRhbG9nSXNFbXB0eQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ0xvY2FsUmVzb2x2ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ0xvY2FsUmVzb2x2ZVVSSQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ1JlbW92ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ1Jlc29sdmUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENhdGFsb2dSZXNvbHZlUHVibGljCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxDYXRhbG9nUmVzb2x2ZVN5c3RlbQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ1Jlc29sdmVVUkkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENhdGFsb2dTZXREZWJ1ZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sQ2F0YWxvZ1NldERlZmF1bHRQcmVmZXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENhdGFsb2dTZXREZWZhdWx0cwotI2VuZGlmCi14bWxDaGFyRW5jQ2xvc2VGdW5jCi14bWxDaGFyRW5jRmlyc3RMaW5lCi14bWxDaGFyRW5jSW5GdW5jCi14bWxDaGFyRW5jT3V0RnVuYwoteG1sQ2hhckluUmFuZ2UKLXhtbENoYXJTdHJkdXAKLXhtbENoYXJTdHJuZHVwCi14bWxDaGVja0ZpbGVuYW1lCi14bWxDaGVja0hUVFBJbnB1dAoteG1sQ2hlY2tMYW5ndWFnZUlECi14bWxDaGVja1VURjgKLXhtbENoZWNrVmVyc2lvbgoteG1sQ2hpbGRFbGVtZW50Q291bnQKLXhtbENsZWFudXBDaGFyRW5jb2RpbmdIYW5kbGVycwoteG1sQ2xlYW51cEVuY29kaW5nQWxpYXNlcwoteG1sQ2xlYW51cEdsb2JhbHMKLXhtbENsZWFudXBJbnB1dENhbGxiYWNrcwoteG1sQ2xlYW51cE1lbW9yeQoteG1sQ2xlYW51cE91dHB1dENhbGxiYWNrcwoteG1sQ2xlYW51cFBhcnNlcgoteG1sQ2xlYW51cFByZWRlZmluZWRFbnRpdGllcwoteG1sQ2xlYW51cFRocmVhZHMKLXhtbENsZWFyTm9kZUluZm9TZXEKLXhtbENsZWFyUGFyc2VyQ3R4dAotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbENvbnZlcnRTR01MQ2F0YWxvZwotI2VuZGlmCi14bWxDb3B5QXR0cmlidXRlVGFibGUKLXhtbENvcHlDaGFyCi14bWxDb3B5Q2hhck11bHRpQnl0ZQoteG1sQ29weURvYwoteG1sQ29weURvY0VsZW1lbnRDb250ZW50Ci14bWxDb3B5RHRkCi14bWxDb3B5RWxlbWVudENvbnRlbnQKLXhtbENvcHlFbGVtZW50VGFibGUKLXhtbENvcHlFbnRpdGllc1RhYmxlCi14bWxDb3B5RW51bWVyYXRpb24KLXhtbENvcHlFcnJvcgoteG1sQ29weU5hbWVzcGFjZQoteG1sQ29weU5hbWVzcGFjZUxpc3QKLXhtbENvcHlOb2RlCi14bWxDb3B5Tm9kZUxpc3QKLXhtbENvcHlOb3RhdGlvblRhYmxlCi14bWxDb3B5UHJvcAoteG1sQ29weVByb3BMaXN0Ci14bWxDcmVhdGVEb2NQYXJzZXJDdHh0Ci14bWxDcmVhdGVFbnRpdGllc1RhYmxlCi14bWxDcmVhdGVFbnRpdHlQYXJzZXJDdHh0Ci14bWxDcmVhdGVFbnVtZXJhdGlvbgoteG1sQ3JlYXRlRmlsZVBhcnNlckN0eHQKLXhtbENyZWF0ZUlPUGFyc2VyQ3R4dAoteG1sQ3JlYXRlSW50U3Vic2V0Ci14bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0Ci14bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dAoteG1sQ3JlYXRlVVJJCi14bWxDcmVhdGVVUkxQYXJzZXJDdHh0Ci14bWxDdHh0R2V0TGFzdEVycm9yCi14bWxDdHh0UmVhZERvYwoteG1sQ3R4dFJlYWRGZAoteG1sQ3R4dFJlYWRGaWxlCi14bWxDdHh0UmVhZElPCi14bWxDdHh0UmVhZE1lbW9yeQoteG1sQ3R4dFJlc2V0Ci14bWxDdHh0UmVzZXRMYXN0RXJyb3IKLXhtbEN0eHRSZXNldFB1c2gKLXhtbEN0eHRVc2VPcHRpb25zCi14bWxDdXJyZW50Q2hhcgoteG1sRE9NV3JhcEFkb3B0Tm9kZQoteG1sRE9NV3JhcENsb25lTm9kZQoteG1sRE9NV3JhcEZyZWVDdHh0Ci14bWxET01XcmFwTmV3Q3R4dAoteG1sRE9NV3JhcFJlY29uY2lsZU5hbWVzcGFjZXMKLXhtbERPTVdyYXBSZW1vdmVOb2RlCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbERlYnVnQ2hlY2tEb2N1bWVudAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbERlYnVnRHVtcEF0dHIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxEZWJ1Z0R1bXBBdHRyTGlzdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbERlYnVnRHVtcERURAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbERlYnVnRHVtcERvY3VtZW50Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sRGVidWdEdW1wRG9jdW1lbnRIZWFkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sRGVidWdEdW1wRW50aXRpZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxEZWJ1Z0R1bXBOb2RlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sRGVidWdEdW1wTm9kZUxpc3QKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxEZWJ1Z0R1bXBPbmVOb2RlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sRGVidWdEdW1wU3RyaW5nCi0jZW5kaWYKLXhtbERlY29kZUVudGl0aWVzCi14bWxEZWZhdWx0U0FYSGFuZGxlckluaXQKLXhtbERlbEVuY29kaW5nQWxpYXMKLXhtbERlcmVnaXN0ZXJOb2RlRGVmYXVsdAoteG1sRGV0ZWN0Q2hhckVuY29kaW5nCi14bWxEaWN0Q2xlYW51cAoteG1sRGljdENyZWF0ZQoteG1sRGljdENyZWF0ZVN1YgoteG1sRGljdEV4aXN0cwoteG1sRGljdEZyZWUKLXhtbERpY3RHZXRVc2FnZQoteG1sRGljdExvb2t1cAoteG1sRGljdE93bnMKLXhtbERpY3RRTG9va3VwCi14bWxEaWN0UmVmZXJlbmNlCi14bWxEaWN0U2V0TGltaXQKLXhtbERpY3RTaXplCi14bWxEbGxNYWluCi14bWxEb2NDb3B5Tm9kZQoteG1sRG9jQ29weU5vZGVMaXN0Ci14bWxEb2NEdW1wCi14bWxEb2NEdW1wRm9ybWF0TWVtb3J5Ci14bWxEb2NEdW1wRm9ybWF0TWVtb3J5RW5jCi14bWxEb2NEdW1wTWVtb3J5Ci14bWxEb2NEdW1wTWVtb3J5RW5jCi14bWxEb2NGb3JtYXREdW1wCi14bWxEb2NHZXRSb290RWxlbWVudAoteG1sRG9jU2V0Um9vdEVsZW1lbnQKLXhtbER1bXBBdHRyaWJ1dGVEZWNsCi14bWxEdW1wQXR0cmlidXRlVGFibGUKLXhtbER1bXBFbGVtZW50RGVjbAoteG1sRHVtcEVsZW1lbnRUYWJsZQoteG1sRHVtcEVudGl0aWVzVGFibGUKLXhtbER1bXBFbnRpdHlEZWNsCi14bWxEdW1wTm90YXRpb25EZWNsCi14bWxEdW1wTm90YXRpb25UYWJsZQoteG1sRWxlbUR1bXAKLXhtbEVuY29kZUVudGl0aWVzCi14bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudAoteG1sRW5jb2RlU3BlY2lhbENoYXJzCi14bWxFcnJNZW1vcnkKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbEV4cEN0eHROYkNvbnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sRXhwQ3R4dE5iTm9kZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sRXhwRHVtcAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBFeHBEZXJpdmUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sRXhwRnJlZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBGcmVlQ3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBHZXRMYW5ndWFnZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBHZXRTdGFydAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBJc05pbGxhYmxlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbEV4cE1heFRva2VuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbEV4cE5ld0F0b20KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sRXhwTmV3Q3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBOZXdPcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBOZXdSYW5nZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBOZXdTZXEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sRXhwUGFyc2UKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sRXhwUmVmCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbEV4cFN0cmluZ0Rlcml2ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxFeHBTdWJzdW1lCi0jZW5kaWYKLXhtbEZpbGVDbG9zZQoteG1sRmlsZU1hdGNoCi14bWxGaWxlT3BlbgoteG1sRmlsZVJlYWQKLXhtbEZpbmRDaGFyRW5jb2RpbmdIYW5kbGVyCi14bWxGaXJzdEVsZW1lbnRDaGlsZAoteG1sRnJlZUF0dHJpYnV0ZVRhYmxlCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbEZyZWVBdXRvbWF0YQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sRnJlZUNhdGFsb2cKLSNlbmRpZgoteG1sRnJlZURvYwoteG1sRnJlZURvY0VsZW1lbnRDb250ZW50Ci14bWxGcmVlRHRkCi14bWxGcmVlRWxlbWVudENvbnRlbnQKLXhtbEZyZWVFbGVtZW50VGFibGUKLXhtbEZyZWVFbnRpdGllc1RhYmxlCi14bWxGcmVlRW51bWVyYXRpb24KLXhtbEZyZWVJRFRhYmxlCi14bWxGcmVlSW5wdXRTdHJlYW0KLXhtbEZyZWVNdXRleAoteG1sRnJlZU5vZGUKLXhtbEZyZWVOb2RlTGlzdAoteG1sRnJlZU5vdGF0aW9uVGFibGUKLXhtbEZyZWVOcwoteG1sRnJlZU5zTGlzdAoteG1sRnJlZVBhcnNlckN0eHQKLXhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcgoteG1sRnJlZVBhdHRlcm4KLXhtbEZyZWVQYXR0ZXJuTGlzdAoteG1sRnJlZVByb3AKLXhtbEZyZWVQcm9wTGlzdAoteG1sRnJlZVJNdXRleAoteG1sRnJlZVJlZlRhYmxlCi14bWxGcmVlU3RyZWFtQ3R4dAoteG1sRnJlZVRleHRSZWFkZXIKLXhtbEZyZWVUZXh0V3JpdGVyCi14bWxGcmVlVVJJCi14bWxGcmVlVmFsaWRDdHh0Ci14bWxHY01lbUdldAoteG1sR2NNZW1TZXR1cAoteG1sR2V0QnVmZmVyQWxsb2NhdGlvblNjaGVtZQoteG1sR2V0Q2hhckVuY29kaW5nSGFuZGxlcgoteG1sR2V0Q2hhckVuY29kaW5nTmFtZQoteG1sR2V0Q29tcHJlc3NNb2RlCi14bWxHZXREb2NDb21wcmVzc01vZGUKLXhtbEdldERvY0VudGl0eQoteG1sR2V0RHRkQXR0ckRlc2MKLXhtbEdldER0ZEVsZW1lbnREZXNjCi14bWxHZXREdGRFbnRpdHkKLXhtbEdldER0ZE5vdGF0aW9uRGVzYwoteG1sR2V0RHRkUUF0dHJEZXNjCi14bWxHZXREdGRRRWxlbWVudERlc2MKLXhtbEdldEVuY29kaW5nQWxpYXMKLXhtbEdldEV4dGVybmFsRW50aXR5TG9hZGVyCi14bWxHZXRGZWF0dXJlCi14bWxHZXRGZWF0dXJlc0xpc3QKLXhtbEdldEdsb2JhbFN0YXRlCi14bWxHZXRJRAoteG1sR2V0SW50U3Vic2V0Ci14bWxHZXRMYXN0Q2hpbGQKLXhtbEdldExhc3RFcnJvcgoteG1sR2V0TGluZU5vCi14bWxHZXROb05zUHJvcAoteG1sR2V0Tm9kZVBhdGgKLXhtbEdldE5zTGlzdAoteG1sR2V0TnNQcm9wCi14bWxHZXRQYXJhbWV0ZXJFbnRpdHkKLXhtbEdldFByZWRlZmluZWRFbnRpdHkKLXhtbEdldFByb3AKLXhtbEdldFJlZnMKLXhtbEdldFRocmVhZElkCi14bWxHZXRVVEY4Q2hhcgoteG1sSGFuZGxlRW50aXR5Ci14bWxIYXNGZWF0dXJlCi14bWxIYXNOc1Byb3AKLXhtbEhhc1Byb3AKLXhtbEhhc2hBZGRFbnRyeQoteG1sSGFzaEFkZEVudHJ5MgoteG1sSGFzaEFkZEVudHJ5MwoteG1sSGFzaENvcHkKLXhtbEhhc2hDcmVhdGUKLXhtbEhhc2hDcmVhdGVEaWN0Ci14bWxIYXNoRGVmYXVsdERlYWxsb2NhdG9yCi14bWxIYXNoRnJlZQoteG1sSGFzaExvb2t1cAoteG1sSGFzaExvb2t1cDIKLXhtbEhhc2hMb29rdXAzCi14bWxIYXNoUUxvb2t1cAoteG1sSGFzaFFMb29rdXAyCi14bWxIYXNoUUxvb2t1cDMKLXhtbEhhc2hSZW1vdmVFbnRyeQoteG1sSGFzaFJlbW92ZUVudHJ5MgoteG1sSGFzaFJlbW92ZUVudHJ5MwoteG1sSGFzaFNjYW4KLXhtbEhhc2hTY2FuMwoteG1sSGFzaFNjYW5GdWxsCi14bWxIYXNoU2NhbkZ1bGwzCi14bWxIYXNoU2l6ZQoteG1sSGFzaFVwZGF0ZUVudHJ5Ci14bWxIYXNoVXBkYXRlRW50cnkyCi14bWxIYXNoVXBkYXRlRW50cnkzCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxJT0ZUUENsb3NlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbElPRlRQTWF0Y2gKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sSU9GVFBPcGVuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbElPRlRQUmVhZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAoteG1sSU9IVFRQQ2xvc2UKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLXhtbElPSFRUUE1hdGNoCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi14bWxJT0hUVFBPcGVuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRNTF9FTkFCTEVECi14bWxJT0hUVFBPcGVuVwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAoteG1sSU9IVFRQUmVhZAotI2VuZGlmCi14bWxJT1BhcnNlRFRECi14bWxJbml0Q2hhckVuY29kaW5nSGFuZGxlcnMKLXhtbEluaXRHbG9iYWxzCi14bWxJbml0TWVtb3J5Ci14bWxJbml0Tm9kZUluZm9TZXEKLXhtbEluaXRQYXJzZXIKLXhtbEluaXRQYXJzZXJDdHh0Ci14bWxJbml0VGhyZWFkcwotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbEluaXRpYWxpemVDYXRhbG9nCi0jZW5kaWYKLXhtbEluaXRpYWxpemVEaWN0Ci14bWxJbml0aWFsaXplR2xvYmFsU3RhdGUKLXhtbEluaXRpYWxpemVQcmVkZWZpbmVkRW50aXRpZXMKLXhtbElzQmFzZUNoYXIKLXhtbElzQmxhbmsKLXhtbElzQmxhbmtOb2RlCi14bWxJc0NoYXIKLXhtbElzQ29tYmluaW5nCi14bWxJc0RpZ2l0Ci14bWxJc0V4dGVuZGVyCi14bWxJc0lECi14bWxJc0lkZW9ncmFwaGljCi14bWxJc0xldHRlcgoteG1sSXNNYWluVGhyZWFkCi14bWxJc01peGVkRWxlbWVudAoteG1sSXNQdWJpZENoYXIKLXhtbElzUmVmCi0jaWZkZWYgTElCWE1MX0hUTUxfRU5BQkxFRAoteG1sSXNYSFRNTAotI2VuZGlmCi14bWxLZWVwQmxhbmtzRGVmYXVsdAoteG1sTGFzdEVsZW1lbnRDaGlsZAoteG1sTGluZU51bWJlcnNEZWZhdWx0Ci14bWxMaW5rR2V0RGF0YQoteG1sTGlzdEFwcGVuZAoteG1sTGlzdENsZWFyCi14bWxMaXN0Q29weQoteG1sTGlzdENyZWF0ZQoteG1sTGlzdERlbGV0ZQoteG1sTGlzdER1cAoteG1sTGlzdEVtcHR5Ci14bWxMaXN0RW5kCi14bWxMaXN0RnJvbnQKLXhtbExpc3RJbnNlcnQKLXhtbExpc3RNZXJnZQoteG1sTGlzdFBvcEJhY2sKLXhtbExpc3RQb3BGcm9udAoteG1sTGlzdFB1c2hCYWNrCi14bWxMaXN0UHVzaEZyb250Ci14bWxMaXN0UmVtb3ZlQWxsCi14bWxMaXN0UmVtb3ZlRmlyc3QKLXhtbExpc3RSZW1vdmVMYXN0Ci14bWxMaXN0UmV2ZXJzZQoteG1sTGlzdFJldmVyc2VTZWFyY2gKLXhtbExpc3RSZXZlcnNlV2FsawoteG1sTGlzdFNlYXJjaAoteG1sTGlzdFNpemUKLXhtbExpc3RTb3J0Ci14bWxMaXN0V2FsawotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbExvYWRBQ2F0YWxvZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAoteG1sTG9hZENhdGFsb2cKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9DQVRBTE9HX0VOQUJMRUQKLXhtbExvYWRDYXRhbG9ncwotI2VuZGlmCi14bWxMb2FkRXh0ZXJuYWxFbnRpdHkKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxMb2FkU0dNTFN1cGVyQ2F0YWxvZwotI2VuZGlmCi14bWxMb2NrTGlicmFyeQotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxMc0NvdW50Tm9kZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbExzT25lTm9kZQotI2VuZGlmCi0jaWZkZWYgREVCVUdfTUVNT1JZX0xPQ0FUSU9OCi14bWxNYWxsb2NBdG9taWNMb2MKLSNlbmRpZgotI2lmZGVmIERFQlVHX01FTU9SWV9MT0NBVElPTgoteG1sTWFsbG9jTG9jCi0jZW5kaWYKLXhtbE1lbUJsb2NrcwoteG1sTWVtRGlzcGxheQoteG1sTWVtRGlzcGxheUxhc3QKLXhtbE1lbUZyZWUKLXhtbE1lbUdldAoteG1sTWVtTWFsbG9jCi14bWxNZW1SZWFsbG9jCi14bWxNZW1TZXR1cAoteG1sTWVtU2hvdwotI2lmZGVmIERFQlVHX01FTU9SWV9MT0NBVElPTgoteG1sTWVtU3RyZHVwTG9jCi0jZW5kaWYKLXhtbE1lbVVzZWQKLXhtbE1lbW9yeUR1bXAKLXhtbE1lbW9yeVN0cmR1cAoteG1sTW9kdWxlQ2xvc2UKLXhtbE1vZHVsZUZyZWUKLXhtbE1vZHVsZU9wZW4KLXhtbE1vZHVsZVN5bWJvbAoteG1sTXV0ZXhMb2NrCi14bWxNdXRleFVubG9jawoteG1sTmFtZXNwYWNlUGFyc2VOQ05hbWUKLXhtbE5hbWVzcGFjZVBhcnNlTlNEZWYKLXhtbE5hbWVzcGFjZVBhcnNlUU5hbWUKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbE5hbm9GVFBDaGVja1Jlc3BvbnNlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbE5hbm9GVFBDbGVhbnVwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbE5hbm9GVFBDbG9zZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQQ2xvc2VDb25uZWN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbE5hbm9GVFBDb25uZWN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfRlRQX0VOQUJMRUQKLXhtbE5hbm9GVFBDb25uZWN0VG8KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sTmFub0ZUUEN3ZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQRGVsZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQRnJlZUN0eHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sTmFub0ZUUEdldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQR2V0Q29ubmVjdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQR2V0UmVzcG9uc2UKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sTmFub0ZUUEdldFNvY2tldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQSW5pdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQTGlzdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQTmV3Q3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQT3BlbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQUHJveHkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sTmFub0ZUUFF1aXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sTmFub0ZUUFJlYWQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9GVFBfRU5BQkxFRAoteG1sTmFub0ZUUFNjYW5Qcm94eQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0ZUUF9FTkFCTEVECi14bWxOYW5vRlRQVXBkYXRlVVJMCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUEF1dGhIZWFkZXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVFRQX0VOQUJMRUQKLXhtbE5hbm9IVFRQQ2xlYW51cAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUVFBfRU5BQkxFRAoteG1sTmFub0hUVFBDbG9zZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUVFBfRU5BQkxFRAoteG1sTmFub0hUVFBDb250ZW50TGVuZ3RoCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUEVuY29kaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUEZldGNoCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUEluaXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVFRQX0VOQUJMRUQKLXhtbE5hbm9IVFRQTWV0aG9kCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUE1ldGhvZFJlZGlyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUE1pbWVUeXBlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUE9wZW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVFRQX0VOQUJMRUQKLXhtbE5hbm9IVFRQT3BlblJlZGlyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUFJlYWQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVFRQX0VOQUJMRUQKLXhtbE5hbm9IVFRQUmVkaXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9IVFRQX0VOQUJMRUQKLXhtbE5hbm9IVFRQUmV0dXJuQ29kZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0hUVFBfRU5BQkxFRAoteG1sTmFub0hUVFBTYXZlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfSFRUUF9FTkFCTEVECi14bWxOYW5vSFRUUFNjYW5Qcm94eQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0FVVE9NQVRBX0VOQUJMRUQKLXhtbE5ld0F1dG9tYXRhCi0jZW5kaWYKLXhtbE5ld0NEYXRhQmxvY2sKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxOZXdDYXRhbG9nCi0jZW5kaWYKLXhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIKLXhtbE5ld0NoYXJSZWYKLXhtbE5ld0NoaWxkCi14bWxOZXdDb21tZW50Ci14bWxOZXdEb2MKLXhtbE5ld0RvY0NvbW1lbnQKLXhtbE5ld0RvY0VsZW1lbnRDb250ZW50Ci14bWxOZXdEb2NGcmFnbWVudAoteG1sTmV3RG9jTm9kZQoteG1sTmV3RG9jTm9kZUVhdE5hbWUKLXhtbE5ld0RvY1BJCi14bWxOZXdEb2NQcm9wCi14bWxOZXdEb2NSYXdOb2RlCi14bWxOZXdEb2NUZXh0Ci14bWxOZXdEb2NUZXh0TGVuCi14bWxOZXdEdGQKLXhtbE5ld0VsZW1lbnRDb250ZW50Ci14bWxOZXdFbnRpdHkKLXhtbE5ld0VudGl0eUlucHV0U3RyZWFtCi14bWxOZXdHbG9iYWxOcwoteG1sTmV3SU9JbnB1dFN0cmVhbQoteG1sTmV3SW5wdXRGcm9tRmlsZQoteG1sTmV3SW5wdXRTdHJlYW0KLXhtbE5ld011dGV4Ci14bWxOZXdOb2RlCi14bWxOZXdOb2RlRWF0TmFtZQoteG1sTmV3TnMKLXhtbE5ld05zUHJvcAoteG1sTmV3TnNQcm9wRWF0TmFtZQoteG1sTmV3UEkKLXhtbE5ld1BhcnNlckN0eHQKLXhtbE5ld1Byb3AKLXhtbE5ld1JNdXRleAoteG1sTmV3UmVmZXJlbmNlCi14bWxOZXdTdHJpbmdJbnB1dFN0cmVhbQoteG1sTmV3VGV4dAoteG1sTmV3VGV4dENoaWxkCi14bWxOZXdUZXh0TGVuCi14bWxOZXdUZXh0UmVhZGVyCi14bWxOZXdUZXh0UmVhZGVyRmlsZW5hbWUKLXhtbE5ld1RleHRXcml0ZXIKLXhtbE5ld1RleHRXcml0ZXJEb2MKLXhtbE5ld1RleHRXcml0ZXJGaWxlbmFtZQoteG1sTmV3VGV4dFdyaXRlck1lbW9yeQoteG1sTmV3VGV4dFdyaXRlclB1c2hQYXJzZXIKLXhtbE5ld1RleHRXcml0ZXJUcmVlCi14bWxOZXdWYWxpZEN0eHQKLXhtbE5leHRDaGFyCi14bWxOZXh0RWxlbWVudFNpYmxpbmcKLXhtbE5vTmV0RXh0ZXJuYWxFbnRpdHlMb2FkZXIKLXhtbE5vZGVBZGRDb250ZW50Ci14bWxOb2RlQWRkQ29udGVudExlbgoteG1sTm9kZUJ1ZkdldENvbnRlbnQKLXhtbE5vZGVEdW1wCi14bWxOb2RlRHVtcE91dHB1dAoteG1sTm9kZUdldEJhc2UKLXhtbE5vZGVHZXRDb250ZW50Ci14bWxOb2RlR2V0TGFuZwoteG1sTm9kZUdldFNwYWNlUHJlc2VydmUKLXhtbE5vZGVJc1RleHQKLXhtbE5vZGVMaXN0R2V0UmF3U3RyaW5nCi14bWxOb2RlTGlzdEdldFN0cmluZwoteG1sTm9kZVNldEJhc2UKLXhtbE5vZGVTZXRDb250ZW50Ci14bWxOb2RlU2V0Q29udGVudExlbgoteG1sTm9kZVNldExhbmcKLXhtbE5vZGVTZXROYW1lCi14bWxOb2RlU2V0U3BhY2VQcmVzZXJ2ZQoteG1sTm9ybWFsaXplVVJJUGF0aAoteG1sTm9ybWFsaXplV2luZG93c1BhdGgKLXhtbE91dHB1dEJ1ZmZlckNsb3NlCi14bWxPdXRwdXRCdWZmZXJDcmVhdGVCdWZmZXIKLXhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZkCi14bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlCi14bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZQoteG1sT3V0cHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ci14bWxPdXRwdXRCdWZmZXJDcmVhdGVJTwoteG1sT3V0cHV0QnVmZmVyRmx1c2gKLXhtbE91dHB1dEJ1ZmZlckdldENvbnRlbnQKLXhtbE91dHB1dEJ1ZmZlckdldFNpemUKLXhtbE91dHB1dEJ1ZmZlcldyaXRlCi14bWxPdXRwdXRCdWZmZXJXcml0ZUVzY2FwZQoteG1sT3V0cHV0QnVmZmVyV3JpdGVTdHJpbmcKLXhtbFBhcnNlQXR0VmFsdWUKLXhtbFBhcnNlQXR0cmlidXRlCi14bWxQYXJzZUF0dHJpYnV0ZUxpc3REZWNsCi14bWxQYXJzZUF0dHJpYnV0ZVR5cGUKLXhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeQoteG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcgoteG1sUGFyc2VDRFNlY3QKLSNpZmRlZiBMSUJYTUxfQ0FUQUxPR19FTkFCTEVECi14bWxQYXJzZUNhdGFsb2dGaWxlCi0jZW5kaWYKLXhtbFBhcnNlQ2hhckRhdGEKLXhtbFBhcnNlQ2hhckVuY29kaW5nCi14bWxQYXJzZUNoYXJSZWYKLXhtbFBhcnNlQ2h1bmsKLXhtbFBhcnNlQ29tbWVudAoteG1sUGFyc2VDb250ZW50Ci14bWxQYXJzZUN0eHRFeHRlcm5hbEVudGl0eQoteG1sUGFyc2VEVEQKLXhtbFBhcnNlRGVmYXVsdERlY2wKLXhtbFBhcnNlRG9jCi14bWxQYXJzZURvY1R5cGVEZWNsCi14bWxQYXJzZURvY3VtZW50Ci14bWxQYXJzZUVsZW1lbnQKLXhtbFBhcnNlRWxlbWVudENoaWxkcmVuQ29udGVudERlY2wKLXhtbFBhcnNlRWxlbWVudENvbnRlbnREZWNsCi14bWxQYXJzZUVsZW1lbnREZWNsCi14bWxQYXJzZUVsZW1lbnRNaXhlZENvbnRlbnREZWNsCi14bWxQYXJzZUVuY05hbWUKLXhtbFBhcnNlRW5jb2RpbmdEZWNsCi14bWxQYXJzZUVuZFRhZwoteG1sUGFyc2VFbnRpdHkKLXhtbFBhcnNlRW50aXR5RGVjbAoteG1sUGFyc2VFbnRpdHlSZWYKLXhtbFBhcnNlRW50aXR5VmFsdWUKLXhtbFBhcnNlRW51bWVyYXRlZFR5cGUKLXhtbFBhcnNlRW51bWVyYXRpb25UeXBlCi14bWxQYXJzZUV4dFBhcnNlZEVudAoteG1sUGFyc2VFeHRlcm5hbEVudGl0eQoteG1sUGFyc2VFeHRlcm5hbElECi14bWxQYXJzZUV4dGVybmFsU3Vic2V0Ci14bWxQYXJzZUZpbGUKLXhtbFBhcnNlSW5Ob2RlQ29udGV4dAoteG1sUGFyc2VNYXJrdXBEZWNsCi14bWxQYXJzZU1lbW9yeQoteG1sUGFyc2VNaXNjCi14bWxQYXJzZU5hbWUKLXhtbFBhcnNlTmFtZXNwYWNlCi14bWxQYXJzZU5tdG9rZW4KLXhtbFBhcnNlTm90YXRpb25EZWNsCi14bWxQYXJzZU5vdGF0aW9uVHlwZQoteG1sUGFyc2VQRVJlZmVyZW5jZQoteG1sUGFyc2VQSQoteG1sUGFyc2VQSVRhcmdldAoteG1sUGFyc2VQdWJpZExpdGVyYWwKLXhtbFBhcnNlUXVvdGVkU3RyaW5nCi14bWxQYXJzZVJlZmVyZW5jZQoteG1sUGFyc2VTRERlY2wKLXhtbFBhcnNlU3RhcnRUYWcKLXhtbFBhcnNlU3lzdGVtTGl0ZXJhbAoteG1sUGFyc2VUZXh0RGVjbAoteG1sUGFyc2VVUkkKLXhtbFBhcnNlVVJJUmF3Ci14bWxQYXJzZVVSSVJlZmVyZW5jZQoteG1sUGFyc2VWZXJzaW9uSW5mbwoteG1sUGFyc2VWZXJzaW9uTnVtCi14bWxQYXJzZVhNTERlY2wKLXhtbFBhcnNlckFkZE5vZGVJbmZvCi14bWxQYXJzZXJFcnJvcgoteG1sUGFyc2VyRmluZE5vZGVJbmZvCi14bWxQYXJzZXJGaW5kTm9kZUluZm9JbmRleAoteG1sUGFyc2VyR2V0RGlyZWN0b3J5Ci14bWxQYXJzZXJIYW5kbGVQRVJlZmVyZW5jZQoteG1sUGFyc2VySGFuZGxlUmVmZXJlbmNlCi14bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZkCi14bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGUKLXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWUKLXhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlRmlsZW5hbWVEZWZhdWx0Ci14bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPCi14bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbQoteG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMKLXhtbFBhcnNlcklucHV0QnVmZmVyR3JvdwoteG1sUGFyc2VySW5wdXRCdWZmZXJQdXNoCi14bWxQYXJzZXJJbnB1dEJ1ZmZlclJlYWQKLXhtbFBhcnNlcklucHV0R3JvdwoteG1sUGFyc2VySW5wdXRSZWFkCi14bWxQYXJzZXJJbnB1dFNocmluawoteG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dAoteG1sUGFyc2VyUHJpbnRGaWxlSW5mbwoteG1sUGFyc2VyVmFsaWRpdHlFcnJvcgoteG1sUGFyc2VyVmFsaWRpdHlXYXJuaW5nCi14bWxQYXJzZXJXYXJuaW5nCi14bWxQYXRoVG9VUkkKLXhtbFBhdHRlcm5Gcm9tUm9vdAoteG1sUGF0dGVybkdldFN0cmVhbUN0eHQKLXhtbFBhdHRlcm5NYXRjaAoteG1sUGF0dGVybk1heERlcHRoCi14bWxQYXR0ZXJuTWluRGVwdGgKLXhtbFBhdHRlcm5TdHJlYW1hYmxlCi14bWxQYXR0ZXJuY29tcGlsZQoteG1sUGVkYW50aWNQYXJzZXJEZWZhdWx0Ci14bWxQb3BJbnB1dAoteG1sUG9wSW5wdXRDYWxsYmFja3MKLXhtbFBvcE91dHB1dENhbGxiYWNrcwoteG1sUHJldmlvdXNFbGVtZW50U2libGluZwoteG1sUHJpbnRVUkkKLXhtbFB1c2hJbnB1dAoteG1sUk11dGV4TG9jawoteG1sUk11dGV4VW5sb2NrCi14bWxSZWFkRG9jCi14bWxSZWFkRmQKLXhtbFJlYWRGaWxlCi14bWxSZWFkSU8KLXhtbFJlYWRNZW1vcnkKLXhtbFJlYWRlckZvckRvYwoteG1sUmVhZGVyRm9yRmQKLXhtbFJlYWRlckZvckZpbGUKLXhtbFJlYWRlckZvcklPCi14bWxSZWFkZXJGb3JNZW1vcnkKLXhtbFJlYWRlck5ld0RvYwoteG1sUmVhZGVyTmV3RmQKLXhtbFJlYWRlck5ld0ZpbGUKLXhtbFJlYWRlck5ld0lPCi14bWxSZWFkZXJOZXdNZW1vcnkKLXhtbFJlYWRlck5ld1dhbGtlcgoteG1sUmVhZGVyV2Fsa2VyCi0jaWZkZWYgREVCVUdfTUVNT1JZX0xPQ0FUSU9OCi14bWxSZWFsbG9jTG9jCi0jZW5kaWYKLXhtbFJlY29uY2lsaWF0ZU5zCi14bWxSZWNvdmVyRG9jCi14bWxSZWNvdmVyRmlsZQoteG1sUmVjb3Zlck1lbW9yeQotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sUmVnRXhlY0VyckluZm8KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sUmVnRXhlY05leHRWYWx1ZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sUmVnRXhlY1B1c2hTdHJpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sUmVnRXhlY1B1c2hTdHJpbmcyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFJlZ0ZyZWVFeGVjQ3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxSZWdGcmVlUmVnZXhwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFJlZ05ld0V4ZWNDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFJlZ2V4cENvbXBpbGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sUmVnZXhwRXhlYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxSZWdleHBJc0RldGVybWluaXN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFJlZ2V4cFByaW50Ci0jZW5kaWYKLXhtbFJlZ2lzdGVyQ2hhckVuY29kaW5nSGFuZGxlcgoteG1sUmVnaXN0ZXJEZWZhdWx0SW5wdXRDYWxsYmFja3MKLXhtbFJlZ2lzdGVyRGVmYXVsdE91dHB1dENhbGxiYWNrcwotI2lmZGVmIExJQlhNTF9IVE1MX0VOQUJMRUQKLXhtbFJlZ2lzdGVySFRUUFBvc3RDYWxsYmFja3MKLSNlbmRpZgoteG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcwoteG1sUmVnaXN0ZXJOb2RlRGVmYXVsdAoteG1sUmVnaXN0ZXJPdXRwdXRDYWxsYmFja3MKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HQ2xlYW51cFR5cGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HRHVtcAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR0R1bXBUcmVlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HRnJlZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR0ZyZWVQYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HRnJlZVZhbGlkQ3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR0dldFBhcnNlckVycm9ycwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR0dldFZhbGlkRXJyb3JzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HSW5pdFR5cGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HTmV3RG9jUGFyc2VyQ3R4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR05ld01lbVBhcnNlckN0eHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdOZXdQYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HTmV3VmFsaWRDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HUGFyc2UKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdTZXRQYXJzZXJFcnJvcnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdTZXRQYXJzZXJTdHJ1Y3R1cmVkRXJyb3JzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxSZWxheE5HU2V0VmFsaWRFcnJvcnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdTZXRWYWxpZFN0cnVjdHVyZWRFcnJvcnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdWYWxpZGF0ZURvYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR1ZhbGlkYXRlRnVsbEVsZW1lbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdWYWxpZGF0ZVBvcEVsZW1lbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4TkdWYWxpZGF0ZVB1c2hDRGF0YQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sUmVsYXhOR1ZhbGlkYXRlUHVzaEVsZW1lbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFJlbGF4UGFyc2VyU2V0RmxhZwotI2VuZGlmCi14bWxSZW1vdmVJRAoteG1sUmVtb3ZlUHJvcAoteG1sUmVtb3ZlUmVmCi14bWxSZXBsYWNlTm9kZQoteG1sUmVzZXRFcnJvcgoteG1sUmVzZXRMYXN0RXJyb3IKLXhtbFNBWDJBdHRyaWJ1dGVEZWNsCi14bWxTQVgyQ0RhdGFCbG9jawoteG1sU0FYMkNoYXJhY3RlcnMKLXhtbFNBWDJDb21tZW50Ci14bWxTQVgyRWxlbWVudERlY2wKLXhtbFNBWDJFbmREb2N1bWVudAoteG1sU0FYMkVuZEVsZW1lbnQKLXhtbFNBWDJFbmRFbGVtZW50TnMKLXhtbFNBWDJFbnRpdHlEZWNsCi14bWxTQVgyRXh0ZXJuYWxTdWJzZXQKLXhtbFNBWDJHZXRDb2x1bW5OdW1iZXIKLXhtbFNBWDJHZXRFbnRpdHkKLXhtbFNBWDJHZXRMaW5lTnVtYmVyCi14bWxTQVgyR2V0UGFyYW1ldGVyRW50aXR5Ci14bWxTQVgyR2V0UHVibGljSWQKLXhtbFNBWDJHZXRTeXN0ZW1JZAoteG1sU0FYMkhhc0V4dGVybmFsU3Vic2V0Ci14bWxTQVgySGFzSW50ZXJuYWxTdWJzZXQKLXhtbFNBWDJJZ25vcmFibGVXaGl0ZXNwYWNlCi14bWxTQVgySW5pdERlZmF1bHRTQVhIYW5kbGVyCi14bWxTQVgySW5pdEh0bWxEZWZhdWx0U0FYSGFuZGxlcgoteG1sU0FYMkludGVybmFsU3Vic2V0Ci14bWxTQVgySXNTdGFuZGFsb25lCi14bWxTQVgyTm90YXRpb25EZWNsCi14bWxTQVgyUHJvY2Vzc2luZ0luc3RydWN0aW9uCi14bWxTQVgyUmVmZXJlbmNlCi14bWxTQVgyUmVzb2x2ZUVudGl0eQoteG1sU0FYMlNldERvY3VtZW50TG9jYXRvcgoteG1sU0FYMlN0YXJ0RG9jdW1lbnQKLXhtbFNBWDJTdGFydEVsZW1lbnQKLXhtbFNBWDJTdGFydEVsZW1lbnROcwoteG1sU0FYMlVucGFyc2VkRW50aXR5RGVjbAoteG1sU0FYRGVmYXVsdFZlcnNpb24KLXhtbFNBWFBhcnNlRFRECi14bWxTQVhQYXJzZURvYwoteG1sU0FYUGFyc2VFbnRpdHkKLXhtbFNBWFBhcnNlRmlsZQoteG1sU0FYUGFyc2VGaWxlV2l0aERhdGEKLXhtbFNBWFBhcnNlTWVtb3J5Ci14bWxTQVhQYXJzZU1lbW9yeVdpdGhEYXRhCi14bWxTQVhVc2VyUGFyc2VGaWxlCi14bWxTQVhVc2VyUGFyc2VNZW1vcnkKLXhtbFNBWFZlcnNpb24KLXhtbFNhdmVDbG9zZQoteG1sU2F2ZURvYwoteG1sU2F2ZUZpbGUKLXhtbFNhdmVGaWxlRW5jCi14bWxTYXZlRmlsZVRvCi14bWxTYXZlRmx1c2gKLXhtbFNhdmVGb3JtYXRGaWxlCi14bWxTYXZlRm9ybWF0RmlsZUVuYwoteG1sU2F2ZUZvcm1hdEZpbGVUbwoteG1sU2F2ZVNldEF0dHJFc2NhcGUKLXhtbFNhdmVTZXRFc2NhcGUKLXhtbFNhdmVUb0J1ZmZlcgoteG1sU2F2ZVRvRmQKLXhtbFNhdmVUb0ZpbGVuYW1lCi14bWxTYXZlVG9JTwoteG1sU2F2ZVRyZWUKLXhtbFNhdmVVcmkKLXhtbFNjYW5OYW1lCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hQ2hlY2tGYWNldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hQ2xlYW51cFR5cGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFDb2xsYXBzZVN0cmluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hQ29tcGFyZVZhbHVlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hQ29tcGFyZVZhbHVlc1dodHNwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFDb3B5VmFsdWUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUR1bXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUZyZWUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUZyZWVGYWNldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hRnJlZVBhcnNlckN0eHQKLSNlbmRpZgoteG1sU2NoZW1hRnJlZVR5cGUKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFGcmVlVmFsaWRDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFGcmVlVmFsdWUKLSNlbmRpZgoteG1sU2NoZW1hRnJlZVdpbGRjYXJkCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hR2V0QnVpbHRJbkxpc3RTaW1wbGVUeXBlSXRlbVR5cGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUdldEJ1aWx0SW5UeXBlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFHZXRDYW5vblZhbHVlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFHZXRDYW5vblZhbHVlV2h0c3AKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUdldEZhY2V0VmFsdWVBc1VMb25nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFHZXRQYXJzZXJFcnJvcnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUdldFByZWRlZmluZWRUeXBlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFHZXRWYWxUeXBlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFHZXRWYWxpZEVycm9ycwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hSW5pdFR5cGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFJc0J1aWx0SW5UeXBlRmFjZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYUlzVmFsaWQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYU5ld0RvY1BhcnNlckN0eHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYU5ld0ZhY2V0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFOZXdNZW1QYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFOZXdOT1RBVElPTlZhbHVlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFOZXdQYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFOZXdRTmFtZVZhbHVlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFOZXdTdHJpbmdWYWx1ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hTmV3VmFsaWRDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFQYXJzZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hU0FYUGx1ZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hU0FYVW5wbHVnCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFTZXRQYXJzZXJFcnJvcnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVNldFBhcnNlclN0cnVjdHVyZWRFcnJvcnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVNldFZhbGlkRXJyb3JzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFTZXRWYWxpZE9wdGlvbnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVNldFZhbGlkU3RydWN0dXJlZEVycm9ycwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsUHJlZGVmVHlwZU5vZGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbFByZWRlZlR5cGVOb2RlTm9Ob3JtCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFWYWxpZEN0eHRHZXRPcHRpb25zCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFWYWxpZEN0eHRHZXRQYXJzZXJDdHh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFWYWxpZGF0ZURvYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsaWRhdGVGYWNldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsaWRhdGVGYWNldFdodHNwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFWYWxpZGF0ZUZpbGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbGlkYXRlTGVuZ3RoRmFjZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbGlkYXRlTGVuZ3RoRmFjZXRXaHRzcAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsaWRhdGVMaXN0U2ltcGxlVHlwZUZhY2V0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFWYWxpZGF0ZU9uZUVsZW1lbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbGlkYXRlUHJlZGVmaW5lZFR5cGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbGlkYXRlU2V0RmlsZW5hbWUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbGlkYXRlU2V0TG9jYXRvcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsaWRhdGVTdHJlYW0KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9TQ0hFTUFTX0VOQUJMRUQKLXhtbFNjaGVtYVZhbHVlQXBwZW5kCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFWYWx1ZUdldEFzQm9vbGVhbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsdWVHZXRBc1N0cmluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sU2NoZW1hVmFsdWVHZXROZXh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxTY2hlbWFXaGl0ZVNwYWNlUmVwbGFjZQotI2VuZGlmCi14bWxTY2hlbWF0cm9uRnJlZQoteG1sU2NoZW1hdHJvbkZyZWVQYXJzZXJDdHh0Ci14bWxTY2hlbWF0cm9uRnJlZVZhbGlkQ3R4dAoteG1sU2NoZW1hdHJvbk5ld0RvY1BhcnNlckN0eHQKLXhtbFNjaGVtYXRyb25OZXdNZW1QYXJzZXJDdHh0Ci14bWxTY2hlbWF0cm9uTmV3UGFyc2VyQ3R4dAoteG1sU2NoZW1hdHJvbk5ld1ZhbGlkQ3R4dAoteG1sU2NoZW1hdHJvblBhcnNlCi14bWxTY2hlbWF0cm9uU2V0VmFsaWRTdHJ1Y3R1cmVkRXJyb3JzCi14bWxTY2hlbWF0cm9uVmFsaWRhdGVEb2MKLXhtbFNlYXJjaE5zCi14bWxTZWFyY2hOc0J5SHJlZgoteG1sU2V0QnVmZmVyQWxsb2NhdGlvblNjaGVtZQoteG1sU2V0Q29tcHJlc3NNb2RlCi14bWxTZXREb2NDb21wcmVzc01vZGUKLXhtbFNldEVudGl0eVJlZmVyZW5jZUZ1bmMKLXhtbFNldEV4dGVybmFsRW50aXR5TG9hZGVyCi14bWxTZXRGZWF0dXJlCi14bWxTZXRHZW5lcmljRXJyb3JGdW5jCi14bWxTZXRMaXN0RG9jCi14bWxTZXROcwoteG1sU2V0TnNQcm9wCi14bWxTZXRQcm9wCi14bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jCi14bWxTZXRUcmVlRG9jCi14bWxTZXR1cFBhcnNlckZvckJ1ZmZlcgotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxTaGVsbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbFNoZWxsQmFzZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbFNoZWxsQ2F0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sU2hlbGxEaXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxTaGVsbER1Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sU2hlbGxMaXN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sU2hlbGxMb2FkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sU2hlbGxQcmludE5vZGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxTaGVsbFByaW50WFBhdGhFcnJvcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbFNoZWxsUHJpbnRYUGF0aFJlc3VsdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbFNoZWxsUHdkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sU2hlbGxTYXZlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAoteG1sU2hlbGxWYWxpZGF0ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbFNoZWxsV3JpdGUKLSNlbmRpZgoteG1sU2tpcEJsYW5rQ2hhcnMKLXhtbFNucHJpbnRmRWxlbWVudENvbnRlbnQKLXhtbFNwbGl0UU5hbWUKLXhtbFNwbGl0UU5hbWUyCi14bWxTcGxpdFFOYW1lMwoteG1sU3ByaW50ZkVsZW1lbnRDb250ZW50Ci14bWxTdG9wUGFyc2VyCi14bWxTdHJFcXVhbAoteG1sU3RyUHJpbnRmCi14bWxTdHJRRXF1YWwKLXhtbFN0clZQcmludGYKLXhtbFN0cmNhc2VjbXAKLXhtbFN0cmNhc2VzdHIKLXhtbFN0cmNhdAoteG1sU3RyY2hyCi14bWxTdHJjbXAKLXhtbFN0cmR1cAoteG1sU3RyZWFtUG9wCi14bWxTdHJlYW1QdXNoCi14bWxTdHJlYW1QdXNoQXR0cgoteG1sU3RyZWFtUHVzaE5vZGUKLXhtbFN0cmVhbVdhbnRzQW55Tm9kZQoteG1sU3RyaW5nQ3VycmVudENoYXIKLXhtbFN0cmluZ0RlY29kZUVudGl0aWVzCi14bWxTdHJpbmdHZXROb2RlTGlzdAoteG1sU3RyaW5nTGVuRGVjb2RlRW50aXRpZXMKLXhtbFN0cmluZ0xlbkdldE5vZGVMaXN0Ci14bWxTdHJsZW4KLXhtbFN0cm5jYXNlY21wCi14bWxTdHJuY2F0Ci14bWxTdHJuY2F0TmV3Ci14bWxTdHJuY21wCi14bWxTdHJuZHVwCi14bWxTdHJzdHIKLXhtbFN0cnN1YgoteG1sU3Vic3RpdHV0ZUVudGl0aWVzRGVmYXVsdAoteG1sU3dpdGNoRW5jb2RpbmcKLXhtbFN3aXRjaElucHV0RW5jb2RpbmcKLXhtbFN3aXRjaFRvRW5jb2RpbmcKLXhtbFRleHRDb25jYXQKLXhtbFRleHRNZXJnZQoteG1sVGV4dFJlYWRlckF0dHJpYnV0ZUNvdW50Ci14bWxUZXh0UmVhZGVyQmFzZVVyaQoteG1sVGV4dFJlYWRlckJ5dGVDb25zdW1lZAoteG1sVGV4dFJlYWRlckNsb3NlCi14bWxUZXh0UmVhZGVyQ29uc3RCYXNlVXJpCi14bWxUZXh0UmVhZGVyQ29uc3RFbmNvZGluZwoteG1sVGV4dFJlYWRlckNvbnN0TG9jYWxOYW1lCi14bWxUZXh0UmVhZGVyQ29uc3ROYW1lCi14bWxUZXh0UmVhZGVyQ29uc3ROYW1lc3BhY2VVcmkKLXhtbFRleHRSZWFkZXJDb25zdFByZWZpeAoteG1sVGV4dFJlYWRlckNvbnN0U3RyaW5nCi14bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZQoteG1sVGV4dFJlYWRlckNvbnN0WG1sTGFuZwoteG1sVGV4dFJlYWRlckNvbnN0WG1sVmVyc2lvbgoteG1sVGV4dFJlYWRlckN1cnJlbnREb2MKLXhtbFRleHRSZWFkZXJDdXJyZW50Tm9kZQoteG1sVGV4dFJlYWRlckRlcHRoCi14bWxUZXh0UmVhZGVyRXhwYW5kCi14bWxUZXh0UmVhZGVyR2V0QXR0cmlidXRlCi14bWxUZXh0UmVhZGVyR2V0QXR0cmlidXRlTm8KLXhtbFRleHRSZWFkZXJHZXRBdHRyaWJ1dGVOcwoteG1sVGV4dFJlYWRlckdldEVycm9ySGFuZGxlcgoteG1sVGV4dFJlYWRlckdldFBhcnNlckNvbHVtbk51bWJlcgoteG1sVGV4dFJlYWRlckdldFBhcnNlckxpbmVOdW1iZXIKLXhtbFRleHRSZWFkZXJHZXRQYXJzZXJQcm9wCi14bWxUZXh0UmVhZGVyR2V0UmVtYWluZGVyCi14bWxUZXh0UmVhZGVySGFzQXR0cmlidXRlcwoteG1sVGV4dFJlYWRlckhhc1ZhbHVlCi14bWxUZXh0UmVhZGVySXNEZWZhdWx0Ci14bWxUZXh0UmVhZGVySXNFbXB0eUVsZW1lbnQKLXhtbFRleHRSZWFkZXJJc05hbWVzcGFjZURlY2wKLXhtbFRleHRSZWFkZXJJc1ZhbGlkCi14bWxUZXh0UmVhZGVyTG9jYWxOYW1lCi14bWxUZXh0UmVhZGVyTG9jYXRvckJhc2VVUkkKLXhtbFRleHRSZWFkZXJMb2NhdG9yTGluZU51bWJlcgoteG1sVGV4dFJlYWRlckxvb2t1cE5hbWVzcGFjZQoteG1sVGV4dFJlYWRlck1vdmVUb0F0dHJpYnV0ZQoteG1sVGV4dFJlYWRlck1vdmVUb0F0dHJpYnV0ZU5vCi14bWxUZXh0UmVhZGVyTW92ZVRvQXR0cmlidXRlTnMKLXhtbFRleHRSZWFkZXJNb3ZlVG9FbGVtZW50Ci14bWxUZXh0UmVhZGVyTW92ZVRvRmlyc3RBdHRyaWJ1dGUKLXhtbFRleHRSZWFkZXJNb3ZlVG9OZXh0QXR0cmlidXRlCi14bWxUZXh0UmVhZGVyTmFtZQoteG1sVGV4dFJlYWRlck5hbWVzcGFjZVVyaQoteG1sVGV4dFJlYWRlck5leHQKLXhtbFRleHRSZWFkZXJOZXh0U2libGluZwoteG1sVGV4dFJlYWRlck5vZGVUeXBlCi14bWxUZXh0UmVhZGVyTm9ybWFsaXphdGlvbgoteG1sVGV4dFJlYWRlclByZWZpeAoteG1sVGV4dFJlYWRlclByZXNlcnZlCi14bWxUZXh0UmVhZGVyUHJlc2VydmVQYXR0ZXJuCi14bWxUZXh0UmVhZGVyUXVvdGVDaGFyCi14bWxUZXh0UmVhZGVyUmVhZAoteG1sVGV4dFJlYWRlclJlYWRBdHRyaWJ1dGVWYWx1ZQoteG1sVGV4dFJlYWRlclJlYWRJbm5lclhtbAoteG1sVGV4dFJlYWRlclJlYWRPdXRlclhtbAoteG1sVGV4dFJlYWRlclJlYWRTdGF0ZQoteG1sVGV4dFJlYWRlclJlYWRTdHJpbmcKLSNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECi14bWxUZXh0UmVhZGVyUmVsYXhOR1NldFNjaGVtYQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAoteG1sVGV4dFJlYWRlclJlbGF4TkdWYWxpZGF0ZQotI2VuZGlmCi14bWxUZXh0UmVhZGVyUmVsYXhOR1ZhbGlkYXRlQ3R4dAoteG1sVGV4dFJlYWRlclNjaGVtYVZhbGlkYXRlCi14bWxUZXh0UmVhZGVyU2NoZW1hVmFsaWRhdGVDdHh0Ci14bWxUZXh0UmVhZGVyU2V0RXJyb3JIYW5kbGVyCi14bWxUZXh0UmVhZGVyU2V0UGFyc2VyUHJvcAoteG1sVGV4dFJlYWRlclNldFNjaGVtYQoteG1sVGV4dFJlYWRlclNldFN0cnVjdHVyZWRFcnJvckhhbmRsZXIKLXhtbFRleHRSZWFkZXJTZXR1cAoteG1sVGV4dFJlYWRlclN0YW5kYWxvbmUKLXhtbFRleHRSZWFkZXJWYWx1ZQoteG1sVGV4dFJlYWRlclhtbExhbmcKLXhtbFRleHRXcml0ZXJFbmRBdHRyaWJ1dGUKLXhtbFRleHRXcml0ZXJFbmRDREFUQQoteG1sVGV4dFdyaXRlckVuZENvbW1lbnQKLXhtbFRleHRXcml0ZXJFbmREVEQKLXhtbFRleHRXcml0ZXJFbmREVERBdHRsaXN0Ci14bWxUZXh0V3JpdGVyRW5kRFRERWxlbWVudAoteG1sVGV4dFdyaXRlckVuZERUREVudGl0eQoteG1sVGV4dFdyaXRlckVuZERvY3VtZW50Ci14bWxUZXh0V3JpdGVyRW5kRWxlbWVudAoteG1sVGV4dFdyaXRlckVuZFBJCi14bWxUZXh0V3JpdGVyRmx1c2gKLXhtbFRleHRXcml0ZXJGdWxsRW5kRWxlbWVudAoteG1sVGV4dFdyaXRlclNldEluZGVudAoteG1sVGV4dFdyaXRlclNldEluZGVudFN0cmluZwoteG1sVGV4dFdyaXRlclNldFF1b3RlQ2hhcgoteG1sVGV4dFdyaXRlclN0YXJ0QXR0cmlidXRlCi14bWxUZXh0V3JpdGVyU3RhcnRBdHRyaWJ1dGVOUwoteG1sVGV4dFdyaXRlclN0YXJ0Q0RBVEEKLXhtbFRleHRXcml0ZXJTdGFydENvbW1lbnQKLXhtbFRleHRXcml0ZXJTdGFydERURAoteG1sVGV4dFdyaXRlclN0YXJ0RFREQXR0bGlzdAoteG1sVGV4dFdyaXRlclN0YXJ0RFRERWxlbWVudAoteG1sVGV4dFdyaXRlclN0YXJ0RFRERW50aXR5Ci14bWxUZXh0V3JpdGVyU3RhcnREb2N1bWVudAoteG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudAoteG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudE5TCi14bWxUZXh0V3JpdGVyU3RhcnRQSQoteG1sVGV4dFdyaXRlcldyaXRlQXR0cmlidXRlCi14bWxUZXh0V3JpdGVyV3JpdGVBdHRyaWJ1dGVOUwoteG1sVGV4dFdyaXRlcldyaXRlQmFzZTY0Ci14bWxUZXh0V3JpdGVyV3JpdGVCaW5IZXgKLXhtbFRleHRXcml0ZXJXcml0ZUNEQVRBCi14bWxUZXh0V3JpdGVyV3JpdGVDb21tZW50Ci14bWxUZXh0V3JpdGVyV3JpdGVEVEQKLXhtbFRleHRXcml0ZXJXcml0ZURUREF0dGxpc3QKLXhtbFRleHRXcml0ZXJXcml0ZURUREVsZW1lbnQKLXhtbFRleHRXcml0ZXJXcml0ZURUREVudGl0eQoteG1sVGV4dFdyaXRlcldyaXRlRFRERXh0ZXJuYWxFbnRpdHkKLXhtbFRleHRXcml0ZXJXcml0ZURUREV4dGVybmFsRW50aXR5Q29udGVudHMKLXhtbFRleHRXcml0ZXJXcml0ZURUREludGVybmFsRW50aXR5Ci14bWxUZXh0V3JpdGVyV3JpdGVEVEROb3RhdGlvbgoteG1sVGV4dFdyaXRlcldyaXRlRWxlbWVudAoteG1sVGV4dFdyaXRlcldyaXRlRWxlbWVudE5TCi14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRBdHRyaWJ1dGUKLXhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdEF0dHJpYnV0ZU5TCi14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDREFUQQoteG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0Q29tbWVudAoteG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RFRECi14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXREVERBdHRsaXN0Ci14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXREVERFbGVtZW50Ci14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXREVERJbnRlcm5hbEVudGl0eQoteG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RWxlbWVudAoteG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RWxlbWVudE5TCi14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRQSQoteG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0UmF3Ci14bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRTdHJpbmcKLXhtbFRleHRXcml0ZXJXcml0ZVBJCi14bWxUZXh0V3JpdGVyV3JpdGVSYXcKLXhtbFRleHRXcml0ZXJXcml0ZVJhd0xlbgoteG1sVGV4dFdyaXRlcldyaXRlU3RyaW5nCi14bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0QXR0cmlidXRlCi14bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0QXR0cmlidXRlTlMKLXhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXRDREFUQQoteG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdENvbW1lbnQKLXhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXREVEQKLXhtbFRleHRXcml0ZXJXcml0ZVZGb3JtYXREVERBdHRsaXN0Ci14bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0RFRERWxlbWVudAoteG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdERUREludGVybmFsRW50aXR5Ci14bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0RWxlbWVudAoteG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdEVsZW1lbnROUwoteG1sVGV4dFdyaXRlcldyaXRlVkZvcm1hdFBJCi14bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0UmF3Ci14bWxUZXh0V3JpdGVyV3JpdGVWRm9ybWF0U3RyaW5nCi14bWxUaHJEZWZCdWZmZXJBbGxvY1NjaGVtZQoteG1sVGhyRGVmRGVmYXVsdEJ1ZmZlclNpemUKLXhtbFRockRlZkRlcmVnaXN0ZXJOb2RlRGVmYXVsdAoteG1sVGhyRGVmRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlCi14bWxUaHJEZWZHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZQoteG1sVGhyRGVmSW5kZW50VHJlZU91dHB1dAoteG1sVGhyRGVmS2VlcEJsYW5rc0RlZmF1bHRWYWx1ZQoteG1sVGhyRGVmTGluZU51bWJlcnNEZWZhdWx0VmFsdWUKLXhtbFRockRlZkxvYWRFeHREdGREZWZhdWx0VmFsdWUKLXhtbFRockRlZk91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lRGVmYXVsdAoteG1sVGhyRGVmUGFyc2VyRGVidWdFbnRpdGllcwoteG1sVGhyRGVmUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZURlZmF1bHQKLXhtbFRockRlZlBlZGFudGljUGFyc2VyRGVmYXVsdFZhbHVlCi14bWxUaHJEZWZSZWdpc3Rlck5vZGVEZWZhdWx0Ci14bWxUaHJEZWZTYXZlTm9FbXB0eVRhZ3MKLXhtbFRockRlZlNldEdlbmVyaWNFcnJvckZ1bmMKLXhtbFRockRlZlNldFN0cnVjdHVyZWRFcnJvckZ1bmMKLXhtbFRockRlZlN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHRWYWx1ZQoteG1sVGhyRGVmVHJlZUluZGVudFN0cmluZwotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNBZWdlYW5OdW1iZXJzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQWxwaGFiZXRpY1ByZXNlbnRhdGlvbkZvcm1zCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQXJhYmljCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQXJhYmljUHJlc2VudGF0aW9uRm9ybXNBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQXJhYmljUHJlc2VudGF0aW9uRm9ybXNCCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQXJtZW5pYW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNBcnJvd3MKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNCYXNpY0xhdGluCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQmVuZ2FsaQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0Jsb2NrCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQmxvY2tFbGVtZW50cwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0JvcG9tb2ZvCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQm9wb21vZm9FeHRlbmRlZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0JveERyYXdpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNCcmFpbGxlUGF0dGVybnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNCdWhpZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0J5emFudGluZU11c2ljYWxTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ0pLQ29tcGF0aWJpbGl0eQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NKS0NvbXBhdGliaWxpdHlGb3JtcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NKS0NvbXBhdGliaWxpdHlJZGVvZ3JhcGhzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ0pLQ29tcGF0aWJpbGl0eUlkZW9ncmFwaHNTdXBwbGVtZW50Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ0pLUmFkaWNhbHNTdXBwbGVtZW50Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ0pLU3ltYm9sc2FuZFB1bmN0dWF0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ0pLVW5pZmllZElkZW9ncmFwaHMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoc0V4dGVuc2lvbkEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDSktVbmlmaWVkSWRlb2dyYXBoc0V4dGVuc2lvbkIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRDCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0Q2MKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRDZgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdENvCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0Q3MKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRMCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0TGwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRMbQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdExvCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0THQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRMdQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdE0KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRNYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdE1lCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0TW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXROCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0TmQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRObAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdE5vCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0UAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdFBjCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0UGQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRQZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdFBmCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0UGkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRQbwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdFBzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0UwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdFNjCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0U2sKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRTbQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdFNvCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0WgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NhdFpsCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ2F0WnAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNDYXRacwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NoZXJva2VlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ29tYmluaW5nRGlhY3JpdGljYWxNYXJrcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0NvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3Nmb3JTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ29tYmluaW5nSGFsZk1hcmtzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ29tYmluaW5nTWFya3Nmb3JTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ29udHJvbFBpY3R1cmVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ3VycmVuY3lTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ3lwcmlvdFN5bGxhYmFyeQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0N5cmlsbGljCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzQ3lyaWxsaWNTdXBwbGVtZW50Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzRGVzZXJldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0RldmFuYWdhcmkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNEaW5nYmF0cwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0VuY2xvc2VkQWxwaGFudW1lcmljcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0VuY2xvc2VkQ0pLTGV0dGVyc2FuZE1vbnRocwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0V0aGlvcGljCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzR2VuZXJhbFB1bmN0dWF0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzR2VvbWV0cmljU2hhcGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzR2VvcmdpYW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNHb3RoaWMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNHcmVlawotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0dyZWVrRXh0ZW5kZWQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNHcmVla2FuZENvcHRpYwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0d1amFyYXRpCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzR3VybXVraGkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNIYWxmd2lkdGhhbmRGdWxsd2lkdGhGb3JtcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0hhbmd1bENvbXBhdGliaWxpdHlKYW1vCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzSGFuZ3VsSmFtbwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0hhbmd1bFN5bGxhYmxlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0hhbnVub28KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNIZWJyZXcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNIaWdoUHJpdmF0ZVVzZVN1cnJvZ2F0ZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNIaWdoU3Vycm9nYXRlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0hpcmFnYW5hCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzSVBBRXh0ZW5zaW9ucwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0lkZW9ncmFwaGljRGVzY3JpcHRpb25DaGFyYWN0ZXJzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzS2FuYnVuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzS2FuZ3hpUmFkaWNhbHMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNLYW5uYWRhCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzS2F0YWthbmEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNLYXRha2FuYVBob25ldGljRXh0ZW5zaW9ucwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0tobWVyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzS2htZXJTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTGFvCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTGF0aW4xU3VwcGxlbWVudAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0xhdGluRXh0ZW5kZWRBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTGF0aW5FeHRlbmRlZEFkZGl0aW9uYWwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNMYXRpbkV4dGVuZGVkQgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0xldHRlcmxpa2VTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTGltYnUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNMaW5lYXJCSWRlb2dyYW1zCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTGluZWFyQlN5bGxhYmFyeQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc0xvd1N1cnJvZ2F0ZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNNYWxheWFsYW0KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNNYXRoZW1hdGljYWxBbHBoYW51bWVyaWNTeW1ib2xzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTWF0aGVtYXRpY2FsT3BlcmF0b3JzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTWlzY2VsbGFuZW91c01hdGhlbWF0aWNhbFN5bWJvbHNBCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTWlzY2VsbGFuZW91c01hdGhlbWF0aWNhbFN5bWJvbHNCCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzTWlzY2VsbGFuZW91c1N5bWJvbHMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNNaXNjZWxsYW5lb3VzU3ltYm9sc2FuZEFycm93cwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc01pc2NlbGxhbmVvdXNUZWNobmljYWwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNNb25nb2xpYW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNNdXNpY2FsU3ltYm9scwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc015YW5tYXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNOdW1iZXJGb3JtcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc09naGFtCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzT2xkSXRhbGljCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzT3B0aWNhbENoYXJhY3RlclJlY29nbml0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzT3JpeWEKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNPc21hbnlhCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzUGhvbmV0aWNFeHRlbnNpb25zCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzUHJpdmF0ZVVzZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1ByaXZhdGVVc2VBcmVhCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzUnVuaWMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNTaGF2aWFuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzU2luaGFsYQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1NtYWxsRm9ybVZhcmlhbnRzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzU3BhY2luZ01vZGlmaWVyTGV0dGVycwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1NwZWNpYWxzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzU3VwZXJzY3JpcHRzYW5kU3Vic2NyaXB0cwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1N1cHBsZW1lbnRhbEFycm93c0EKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNTdXBwbGVtZW50YWxBcnJvd3NCCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzU3VwcGxlbWVudGFsTWF0aGVtYXRpY2FsT3BlcmF0b3JzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzU3VwcGxlbWVudGFyeVByaXZhdGVVc2VBcmVhQQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1N1cHBsZW1lbnRhcnlQcml2YXRlVXNlQXJlYUIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNTeXJpYWMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNUYWdhbG9nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzVGFnYmFud2EKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNUYWdzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzVGFpTGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNUYWlYdWFuSmluZ1N5bWJvbHMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNUYW1pbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1RlbHVndQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1RoYWFuYQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1RoYWkKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNUaWJldGFuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzVWdhcml0aWMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNVbmlmaWVkQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzVmFyaWF0aW9uU2VsZWN0b3JzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKLXhtbFVDU0lzVmFyaWF0aW9uU2VsZWN0b3JzU3VwcGxlbWVudAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1lpUmFkaWNhbHMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAoteG1sVUNTSXNZaVN5bGxhYmxlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxVQ1NJc1lpamluZ0hleGFncmFtU3ltYm9scwotI2VuZGlmCi14bWxVUklFc2NhcGUKLXhtbFVSSUVzY2FwZVN0cgoteG1sVVJJVW5lc2NhcGVTdHJpbmcKLXhtbFVURjhDaGFyY21wCi14bWxVVEY4U2l6ZQoteG1sVVRGOFN0cmxlbgoteG1sVVRGOFN0cmxvYwoteG1sVVRGOFN0cm5kdXAKLXhtbFVURjhTdHJwb3MKLXhtbFVURjhTdHJzaXplCi14bWxVVEY4U3Ryc3ViCi14bWxVbmxpbmtOb2RlCi14bWxVbmxvY2tMaWJyYXJ5Ci14bWxVbnNldE5zUHJvcAoteG1sVW5zZXRQcm9wCi0jaWZkZWYgTElCWE1MX1JFR0VYUF9FTkFCTEVECi14bWxWYWxpZEJ1aWxkQ29udGVudE1vZGVsCi0jZW5kaWYKLXhtbFZhbGlkQ3R4dE5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlCi14bWxWYWxpZEdldFBvdGVudGlhbENoaWxkcmVuCi14bWxWYWxpZEdldFZhbGlkRWxlbWVudHMKLXhtbFZhbGlkTm9ybWFsaXplQXR0cmlidXRlVmFsdWUKLXhtbFZhbGlkYXRlQXR0cmlidXRlRGVjbAoteG1sVmFsaWRhdGVBdHRyaWJ1dGVWYWx1ZQoteG1sVmFsaWRhdGVEb2N1bWVudAoteG1sVmFsaWRhdGVEb2N1bWVudEZpbmFsCi14bWxWYWxpZGF0ZUR0ZAoteG1sVmFsaWRhdGVEdGRGaW5hbAoteG1sVmFsaWRhdGVFbGVtZW50Ci14bWxWYWxpZGF0ZUVsZW1lbnREZWNsCi14bWxWYWxpZGF0ZU5DTmFtZQoteG1sVmFsaWRhdGVOTVRva2VuCi14bWxWYWxpZGF0ZU5hbWUKLXhtbFZhbGlkYXRlTmFtZVZhbHVlCi14bWxWYWxpZGF0ZU5hbWVzVmFsdWUKLXhtbFZhbGlkYXRlTm10b2tlblZhbHVlCi14bWxWYWxpZGF0ZU5tdG9rZW5zVmFsdWUKLXhtbFZhbGlkYXRlTm90YXRpb25EZWNsCi14bWxWYWxpZGF0ZU5vdGF0aW9uVXNlCi14bWxWYWxpZGF0ZU9uZUF0dHJpYnV0ZQoteG1sVmFsaWRhdGVPbmVFbGVtZW50Ci14bWxWYWxpZGF0ZU9uZU5hbWVzcGFjZQoteG1sVmFsaWRhdGVQb3BFbGVtZW50Ci14bWxWYWxpZGF0ZVB1c2hDRGF0YQoteG1sVmFsaWRhdGVQdXNoRWxlbWVudAoteG1sVmFsaWRhdGVRTmFtZQoteG1sVmFsaWRhdGVSb290Ci0jaWZkZWYgTElCWE1MX1hJTkNMVURFX0VOQUJMRUQKLXhtbFhJbmNsdWRlRnJlZUNvbnRleHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECi14bWxYSW5jbHVkZU5ld0NvbnRleHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECi14bWxYSW5jbHVkZVByb2Nlc3MKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECi14bWxYSW5jbHVkZVByb2Nlc3NGbGFncwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hJTkNMVURFX0VOQUJMRUQKLXhtbFhJbmNsdWRlUHJvY2Vzc0ZsYWdzRGF0YQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hJTkNMVURFX0VOQUJMRUQKLXhtbFhJbmNsdWRlUHJvY2Vzc05vZGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YSU5DTFVERV9FTkFCTEVECi14bWxYSW5jbHVkZVByb2Nlc3NUcmVlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWElOQ0xVREVfRU5BQkxFRAoteG1sWEluY2x1ZGVQcm9jZXNzVHJlZUZsYWdzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWElOQ0xVREVfRU5BQkxFRAoteG1sWEluY2x1ZGVQcm9jZXNzVHJlZUZsYWdzRGF0YQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hJTkNMVURFX0VOQUJMRUQKLXhtbFhJbmNsdWRlU2V0RmxhZ3MKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEFkZFZhbHVlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQm9vbGVhbkZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDYXN0Qm9vbGVhblRvTnVtYmVyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDYXN0Qm9vbGVhblRvU3RyaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDYXN0Tm9kZVNldFRvQm9vbGVhbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdE5vZGVTZXRUb051bWJlcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdE5vZGVTZXRUb1N0cmluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdE5vZGVUb051bWJlcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdE5vZGVUb1N0cmluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdE51bWJlclRvQm9vbGVhbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdE51bWJlclRvU3RyaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDYXN0U3RyaW5nVG9Cb29sZWFuCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDYXN0U3RyaW5nVG9OdW1iZXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENhc3RUb0Jvb2xlYW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENhc3RUb051bWJlcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ2FzdFRvU3RyaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDZWlsaW5nRnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENtcE5vZGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDb21wYXJlVmFsdWVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDb21waWxlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhDb21waWxlZEV2YWwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENvbXBpbGVkRXZhbFRvQm9vbGVhbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ29uY2F0RnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENvbnRhaW5zRnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENvbnRleHRTZXRDYWNoZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoQ29udmVydEJvb2xlYW4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENvbnZlcnROdW1iZXIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENvbnZlcnRTdHJpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aENvdW50RnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEN0eHRDb21waWxlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi14bWxYUGF0aERlYnVnRHVtcENvbXBFeHByCi0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLXhtbFhQYXRoRGVidWdEdW1wT2JqZWN0Ci0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aERpZmZlcmVuY2UKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aERpc3RpbmN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhEaXN0aW5jdFNvcnRlZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoRGl2VmFsdWVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhFcXVhbFZhbHVlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoRXJyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhFdmFsCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhFdmFsRXhwcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoRXZhbEV4cHJlc3Npb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEV2YWxQcmVkaWNhdGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEV2YWx1YXRlUHJlZGljYXRlUmVzdWx0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhGYWxzZUZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhGbG9vckZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhGcmVlQ29tcEV4cHIKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEZyZWVDb250ZXh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhGcmVlTm9kZVNldAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoRnJlZU5vZGVTZXRMaXN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhGcmVlT2JqZWN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhGcmVlUGFyc2VyQ29udGV4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoRnVuY3Rpb25Mb29rdXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEZ1bmN0aW9uTG9va3VwTlMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aEhhc1NhbWVOb2RlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoSWRGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoSW5pdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoSW50ZXJzZWN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhJc0luZgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoSXNOYU4KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aElzTm9kZVR5cGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aExhbmdGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTGFzdEZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhMZWFkaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhMZWFkaW5nU29ydGVkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhMb2NhbE5hbWVGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTW9kVmFsdWVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhNdWx0VmFsdWVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOYW1lc3BhY2VVUklGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV3Qm9vbGVhbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV3Q1N0cmluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV3Q29udGV4dAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV3RmxvYXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5ld05vZGVTZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5ld05vZGVTZXRMaXN0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOZXdQYXJzZXJDb250ZXh0Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOZXdTdHJpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5ld1ZhbHVlVHJlZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV4dEFuY2VzdG9yCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOZXh0QW5jZXN0b3JPclNlbGYKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5leHRBdHRyaWJ1dGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5leHRDaGlsZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV4dERlc2NlbmRhbnQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5leHREZXNjZW5kYW50T3JTZWxmCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOZXh0Rm9sbG93aW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOZXh0Rm9sbG93aW5nU2libGluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV4dE5hbWVzcGFjZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV4dFBhcmVudAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV4dFByZWNlZGluZwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTmV4dFByZWNlZGluZ1NpYmxpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5leHRTZWxmCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb2RlRXZhbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm9kZUxlYWRpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5vZGVMZWFkaW5nU29ydGVkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb2RlU2V0QWRkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb2RlU2V0QWRkTnMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5vZGVTZXRBZGRVbmlxdWUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5vZGVTZXRDb250YWlucwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm9kZVNldENyZWF0ZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm9kZVNldERlbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm9kZVNldEZyZWVOcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm9kZVNldE1lcmdlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb2RlU2V0UmVtb3ZlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb2RlU2V0U29ydAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm9kZVRyYWlsaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb2RlVHJhaWxpbmdTb3J0ZWQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5vcm1hbGl6ZUZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOb3RFcXVhbFZhbHVlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoTm90RnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aE5zTG9va3VwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhOdW1iZXJGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoT2JqZWN0Q29weQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoT3JkZXJEb2NFbGVtcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoUGFyc2VOQ05hbWUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFBhcnNlTmFtZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoUG9wQm9vbGVhbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoUG9wRXh0ZXJuYWwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFBvcE5vZGVTZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFBvcE51bWJlcgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoUG9wU3RyaW5nCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhQb3NpdGlvbkZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSZWdpc3RlckFsbEZ1bmN0aW9ucwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoUmVnaXN0ZXJGdW5jCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSZWdpc3RlckZ1bmNMb29rdXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFJlZ2lzdGVyRnVuY05TCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSZWdpc3Rlck5zCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSZWdpc3RlclZhcmlhYmxlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSZWdpc3RlclZhcmlhYmxlTG9va3VwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSZWdpc3RlclZhcmlhYmxlTlMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFJlZ2lzdGVyZWRGdW5jc0NsZWFudXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFJlZ2lzdGVyZWROc0NsZWFudXAKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFJlZ2lzdGVyZWRWYXJpYWJsZXNDbGVhbnVwCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSb290Ci0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhSb3VuZEZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhTZXRDb250ZXh0Tm9kZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoU3RhcnRzV2l0aEZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhTdHJpbmdFdmFsTnVtYmVyCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhTdHJpbmdGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoU3RyaW5nTGVuZ3RoRnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFN1YlZhbHVlcwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoU3Vic3RyaW5nQWZ0ZXJGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoU3Vic3RyaW5nQmVmb3JlRnVuY3Rpb24KLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFN1YnN0cmluZ0Z1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhTdW1GdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoVHJhaWxpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFRyYWlsaW5nU29ydGVkCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhUcmFuc2xhdGVGdW5jdGlvbgotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoVHJ1ZUZ1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhWYWx1ZUZsaXBTaWduCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAoteG1sWFBhdGhWYXJpYWJsZUxvb2t1cAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoVmFyaWFibGVMb29rdXBOUwotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoV3JhcENTdHJpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFdyYXBFeHRlcm5hbAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKLXhtbFhQYXRoV3JhcE5vZGVTZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aFdyYXBTdHJpbmcKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECi14bWxYUGF0aGVycm9yCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECi14bWxYUHRyQnVpbGROb2RlTGlzdAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAoteG1sWFB0ckV2YWwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJFdmFsUmFuZ2VQcmVkaWNhdGUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJGcmVlTG9jYXRpb25TZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJMb2NhdGlvblNldEFkZAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAoteG1sWFB0ckxvY2F0aW9uU2V0Q3JlYXRlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECi14bWxYUHRyTG9jYXRpb25TZXREZWwKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJMb2NhdGlvblNldE1lcmdlCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECi14bWxYUHRyTG9jYXRpb25TZXRSZW1vdmUKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJOZXdDb2xsYXBzZWRSYW5nZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAoteG1sWFB0ck5ld0NvbnRleHQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJOZXdMb2NhdGlvblNldE5vZGVTZXQKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJOZXdMb2NhdGlvblNldE5vZGVzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECi14bWxYUHRyTmV3UmFuZ2UKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJOZXdSYW5nZU5vZGVPYmplY3QKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJOZXdSYW5nZU5vZGVQb2ludAotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAoteG1sWFB0ck5ld1JhbmdlTm9kZXMKLSNlbmRpZgotI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKLXhtbFhQdHJOZXdSYW5nZVBvaW50Tm9kZQotI2VuZGlmCi0jaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAoteG1sWFB0ck5ld1JhbmdlUG9pbnRzCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECi14bWxYUHRyUmFuZ2VUb0Z1bmN0aW9uCi0jZW5kaWYKLSNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECi14bWxYUHRyV3JhcExvY2F0aW9uU2V0Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3hpbmNsdWRlLmMgYi94aW5jbHVkZS5jCmluZGV4IDBjNmIzZjIuLmI2NTgxNTUgMTAwNjQ0Ci0tLSBhL3hpbmNsdWRlLmMKKysrIGIveGluY2x1ZGUuYwpAQCAtMjIsMjIgKzIyLDE3IEBACiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgogI2luY2x1ZGUgPGxpYnhtbC9lbmNvZGluZy5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAKICNpZmRlZiBMSUJYTUxfWElOQ0xVREVfRU5BQkxFRAogI2luY2x1ZGUgPGxpYnhtbC94aW5jbHVkZS5oPgogCi0jaW5jbHVkZSAiYnVmLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9idWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS90cmVlLmgiCisjaW5jbHVkZSAicHJpdmF0ZS94aW5jbHVkZS5oIgogCiAjZGVmaW5lIFhJTkNMVURFX01BWF9ERVBUSCA0MAogCi0vKiAjZGVmaW5lIERFQlVHX1hJTkNMVURFICovCi0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAotI2luY2x1ZGUgPGxpYnhtbC9kZWJ1Z1hNTC5oPgotI2VuZGlmCi0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCiAgKgkJCVhJbmNsdWRlIGNvbnRleHQgaGFuZGxpbmcJCQkqCkBAIC01NCw0NSArNDksNjcgQEAKIHN0cnVjdCBfeG1sWEluY2x1ZGVSZWYgewogICAgIHhtbENoYXIgICAgICAgICAgICAgICpVUkk7IC8qIHRoZSBmdWxseSByZXNvbHZlZCByZXNvdXJjZSBVUkwgKi8KICAgICB4bWxDaGFyICAgICAgICAgKmZyYWdtZW50OyAvKiB0aGUgZnJhZ21lbnQgaW4gdGhlIFVSSSAqLwotICAgIHhtbERvY1B0cgkJICBkb2M7IC8qIHRoZSBwYXJzZWQgZG9jdW1lbnQgKi8KLSAgICB4bWxOb2RlUHRyICAgICAgICAgICAgcmVmOyAvKiB0aGUgbm9kZSBtYWtpbmcgdGhlIHJlZmVyZW5jZSBpbiB0aGUgc291cmNlICovCisgICAgeG1sTm9kZVB0ciAgICAgICAgICAgZWxlbTsgLyogdGhlIHhpOmluY2x1ZGUgZWxlbWVudCAqLwogICAgIHhtbE5vZGVQdHIgICAgICAgICAgICBpbmM7IC8qIHRoZSBpbmNsdWRlZCBjb3B5ICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgIHhtbDsgLyogeG1sIG9yIHR4dCAqLwotICAgIGludCAgICAgICAgICAgICAgICAgY291bnQ7IC8qIGhvdyBtYW55IHJlZnMgdXNlIHRoYXQgc3BlY2lmaWMgZG9jICovCiAgICAgaW50CSAgICAgICAgICAgICBmYWxsYmFjazsgLyogZmFsbGJhY2sgd2FzIGxvYWRlZCAqLwogICAgIGludAkJICAgICAgZW1wdHlGYjsgLyogZmxhZyB0byBzaG93IGZhbGxiYWNrIGVtcHR5ICovCisgICAgaW50CQkgICAgZXhwYW5kaW5nOyAvKiBmbGFnIHRvIGRldGVjdCBpbmNsdXNpb24gbG9vcHMgKi8KKyAgICBpbnQJCSAgICAgIHJlcGxhY2U7IC8qIHNob3VsZCB0aGUgbm9kZSBiZSByZXBsYWNlZD8gKi8KK307CisKK3R5cGVkZWYgc3RydWN0IF94bWxYSW5jbHVkZURvYyB4bWxYSW5jbHVkZURvYzsKK3R5cGVkZWYgeG1sWEluY2x1ZGVEb2MgKnhtbFhJbmNsdWRlRG9jUHRyOworc3RydWN0IF94bWxYSW5jbHVkZURvYyB7CisgICAgeG1sRG9jUHRyICAgICAgICAgICAgIGRvYzsgLyogdGhlIHBhcnNlZCBkb2N1bWVudCAqLworICAgIHhtbENoYXIgICAgICAgICAgICAgICp1cmw7IC8qIHRoZSBVUkwgKi8KKyAgICBpbnQgICAgICAgICAgICAgZXhwYW5kaW5nOyAvKiBmbGFnIHRvIGRldGVjdCBpbmNsdXNpb24gbG9vcHMgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IF94bWxYSW5jbHVkZVR4dCB4bWxYSW5jbHVkZVR4dDsKK3R5cGVkZWYgeG1sWEluY2x1ZGVUeHQgKnhtbFhJbmNsdWRlVHh0UHRyOworc3RydWN0IF94bWxYSW5jbHVkZVR4dCB7CisgICAgeG1sQ2hhcgkJKnRleHQ7IC8qIHRleHQgc3RyaW5nICovCisgICAgeG1sQ2hhciAgICAgICAgICAgICAgKnVybDsgLyogdGhlIFVSTCAqLwogfTsKIAogc3RydWN0IF94bWxYSW5jbHVkZUN0eHQgewogICAgIHhtbERvY1B0ciAgICAgICAgICAgICBkb2M7IC8qIHRoZSBzb3VyY2UgZG9jdW1lbnQgKi8KLSAgICBpbnQgICAgICAgICAgICAgICBpbmNCYXNlOyAvKiB0aGUgZmlyc3QgaW5jbHVkZSBmb3IgdGhpcyBkb2N1bWVudCAqLwogICAgIGludCAgICAgICAgICAgICAgICAgaW5jTnI7IC8qIG51bWJlciBvZiBpbmNsdWRlcyAqLwogICAgIGludCAgICAgICAgICAgICAgICBpbmNNYXg7IC8qIHNpemUgb2YgaW5jbHVkZXMgdGFiICovCiAgICAgeG1sWEluY2x1ZGVSZWZQdHIgKmluY1RhYjsgLyogYXJyYXkgb2YgaW5jbHVkZWQgcmVmZXJlbmNlcyAqLwogCiAgICAgaW50ICAgICAgICAgICAgICAgICB0eHROcjsgLyogbnVtYmVyIG9mIHVucGFyc2VkIGRvY3VtZW50cyAqLwogICAgIGludCAgICAgICAgICAgICAgICB0eHRNYXg7IC8qIHNpemUgb2YgdW5wYXJzZWQgZG9jdW1lbnRzIHRhYiAqLwotICAgIHhtbENoYXIgKiAgICAgICAgICp0eHRUYWI7IC8qIGFycmF5IG9mIHVucGFyc2VkIHRleHQgc3RyaW5ncyAqLwotICAgIHhtbFVSTCAgICAgICAgICp0eHR1cmxUYWI7IC8qIGFycmF5IG9mIHVucGFyc2VkIHRleHQgVVJMcyAqLworICAgIHhtbFhJbmNsdWRlVHh0ICAgICp0eHRUYWI7IC8qIGFycmF5IG9mIHVucGFyc2VkIGRvY3VtZW50cyAqLwogCi0gICAgeG1sQ2hhciAqICAgICAgICAgICAgIHVybDsgLyogdGhlIGN1cnJlbnQgVVJMIHByb2Nlc3NlZCAqLwotICAgIGludCAgICAgICAgICAgICAgICAgdXJsTnI7IC8qIG51bWJlciBvZiBVUkxzIHN0YWNrZWQgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgdXJsTWF4OyAvKiBzaXplIG9mIFVSTCBzdGFjayAqLwotICAgIHhtbENoYXIgKiAgICAgICAgICp1cmxUYWI7IC8qIFVSTCBzdGFjayAqLworICAgIGludCAgICAgICAgICAgICAgICAgdXJsTnI7IC8qIG51bWJlciBvZiBkb2N1bWVudHMgc3RhY2tlZCAqLworICAgIGludCAgICAgICAgICAgICAgICB1cmxNYXg7IC8qIHNpemUgb2YgZG9jdW1lbnQgc3RhY2sgKi8KKyAgICB4bWxYSW5jbHVkZURvYyAgICAqdXJsVGFiOyAvKiBkb2N1bWVudCBzdGFjayAqLwogCiAgICAgaW50ICAgICAgICAgICAgICBuYkVycm9yczsgLyogdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgKi8KKyAgICBpbnQgICAgICAgICAgICAgIGZhdGFsRXJyOyAvKiBhYm9ydCBwcm9jZXNzaW5nICovCiAgICAgaW50ICAgICAgICAgICAgICAgIGxlZ2FjeTsgLyogdXNpbmcgWElOQ0xVREVfT0xEX05TICovCiAgICAgaW50ICAgICAgICAgICAgcGFyc2VGbGFnczsgLyogdGhlIGZsYWdzIHVzZWQgZm9yIHBhcnNpbmcgWE1MIGRvY3VtZW50cyAqLwogICAgIHhtbENoYXIgKgkJIGJhc2U7IC8qIHRoZSBjdXJyZW50IHhtbDpiYXNlICovCiAKICAgICB2b2lkICAgICAgICAgICAgKl9wcml2YXRlOyAvKiBhcHBsaWNhdGlvbiBkYXRhICovCiAKKyNpZmRlZiBGVVpaSU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OCiAgICAgdW5zaWduZWQgbG9uZyAgICBpbmNUb3RhbDsgLyogdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlZCBpbmNsdXNpb25zICovCisjZW5kaWYKKyAgICBpbnQJCQlkZXB0aDsgLyogcmVjdXJzaW9uIGRlcHRoICovCisgICAgaW50CQkgICAgIGlzU3RyZWFtOyAvKiBzdHJlYW1pbmcgbW9kZSAqLwogfTsKIAorc3RhdGljIHhtbFhJbmNsdWRlUmVmUHRyCit4bWxYSW5jbHVkZUV4cGFuZE5vZGUoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgbm9kZSk7CisKIHN0YXRpYyBpbnQKLXhtbFhJbmNsdWRlRG9Qcm9jZXNzKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCB4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc2tpcFJvb3QpOworeG1sWEluY2x1ZGVMb2FkTm9kZSh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sWEluY2x1ZGVSZWZQdHIgcmVmKTsKKworc3RhdGljIGludAoreG1sWEluY2x1ZGVEb1Byb2Nlc3MoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgdHJlZSk7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTk3LDE1ICsyMTQsNiBAQAogeG1sWEluY2x1ZGVGcmVlUmVmKHhtbFhJbmNsdWRlUmVmUHRyIHJlZikgewogICAgIGlmIChyZWYgPT0gTlVMTCkKIAlyZXR1cm47Ci0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkZyZWVpbmcgcmVmXG4iKTsKLSNlbmRpZgotICAgIGlmIChyZWYtPmRvYyAhPSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfWElOQ0xVREUKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkZyZWVpbmcgZG9jICVzXG4iLCByZWYtPlVSSSk7Ci0jZW5kaWYKLQl4bWxGcmVlRG9jKHJlZi0+ZG9jKTsKLSAgICB9CiAgICAgaWYgKHJlZi0+VVJJICE9IE5VTEwpCiAJeG1sRnJlZShyZWYtPlVSSSk7CiAgICAgaWYgKHJlZi0+ZnJhZ21lbnQgIT0gTlVMTCkKQEAgLTIxNyw2ICsyMjUsNyBAQAogICogeG1sWEluY2x1ZGVOZXdSZWY6CiAgKiBAY3R4dDogdGhlIFhJbmNsdWRlIGNvbnRleHQKICAqIEBVUkk6ICB0aGUgcmVzb3VyY2UgVVJJCisgKiBAZWxlbTogIHRoZSB4aTppbmNsdWRlIGVsZW1lbnQKICAqCiAgKiBDcmVhdGVzIGEgbmV3IHJlZmVyZW5jZSB3aXRoaW4gYW4gWEluY2x1ZGUgY29udGV4dAogICoKQEAgLTIyNCwxNSArMjMzLDEyIEBACiAgKi8KIHN0YXRpYyB4bWxYSW5jbHVkZVJlZlB0cgogeG1sWEluY2x1ZGVOZXdSZWYoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKlVSSSwKLQkgICAgICAgICAgeG1sTm9kZVB0ciByZWYpIHsKKwkgICAgICAgICAgeG1sTm9kZVB0ciBlbGVtKSB7CiAgICAgeG1sWEluY2x1ZGVSZWZQdHIgcmV0OwogCi0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIk5ldyByZWYgJXNcbiIsIFVSSSk7Ci0jZW5kaWYKICAgICByZXQgPSAoeG1sWEluY2x1ZGVSZWZQdHIpIHhtbE1hbGxvYyhzaXplb2YoeG1sWEluY2x1ZGVSZWYpKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKLSAgICAgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgcmVmLCAiZ3Jvd2luZyBYSW5jbHVkZSBjb250ZXh0Iik7CisgICAgICAgIHhtbFhJbmNsdWRlRXJyTWVtb3J5KGN0eHQsIGVsZW0sICJncm93aW5nIFhJbmNsdWRlIGNvbnRleHQiKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQogICAgIG1lbXNldChyZXQsIDAsIHNpemVvZih4bWxYSW5jbHVkZVJlZikpOwpAQCAtMjQxLDMwICsyNDcsMjYgQEAKICAgICBlbHNlCiAJcmV0LT5VUkkgPSB4bWxTdHJkdXAoVVJJKTsKICAgICByZXQtPmZyYWdtZW50ID0gTlVMTDsKLSAgICByZXQtPnJlZiA9IHJlZjsKLSAgICByZXQtPmRvYyA9IE5VTEw7Ci0gICAgcmV0LT5jb3VudCA9IDA7CisgICAgcmV0LT5lbGVtID0gZWxlbTsKICAgICByZXQtPnhtbCA9IDA7CiAgICAgcmV0LT5pbmMgPSBOVUxMOwotICAgIGlmIChjdHh0LT5pbmNNYXggPT0gMCkgewotCWN0eHQtPmluY01heCA9IDQ7Ci0gICAgICAgIGN0eHQtPmluY1RhYiA9ICh4bWxYSW5jbHVkZVJlZlB0ciAqKSB4bWxNYWxsb2MoY3R4dC0+aW5jTWF4ICoKLQkJCQkJICAgICAgc2l6ZW9mKGN0eHQtPmluY1RhYlswXSkpOwotICAgICAgICBpZiAoY3R4dC0+aW5jVGFiID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgcmVmLCAiZ3Jvd2luZyBYSW5jbHVkZSBjb250ZXh0Iik7Ci0JICAgIHhtbFhJbmNsdWRlRnJlZVJlZihyZXQpOwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQotICAgIH0KICAgICBpZiAoY3R4dC0+aW5jTnIgPj0gY3R4dC0+aW5jTWF4KSB7Ci0JY3R4dC0+aW5jTWF4ICo9IDI7Ci0gICAgICAgIGN0eHQtPmluY1RhYiA9ICh4bWxYSW5jbHVkZVJlZlB0ciAqKSB4bWxSZWFsbG9jKGN0eHQtPmluY1RhYiwKLQkgICAgICAgICAgICAgY3R4dC0+aW5jTWF4ICogc2l6ZW9mKGN0eHQtPmluY1RhYlswXSkpOwotICAgICAgICBpZiAoY3R4dC0+aW5jVGFiID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgcmVmLCAiZ3Jvd2luZyBYSW5jbHVkZSBjb250ZXh0Iik7CisgICAgICAgIHhtbFhJbmNsdWRlUmVmUHRyICp0bXA7CisjaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgorICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGN0eHQtPmluY01heCA/IGN0eHQtPmluY01heCAqIDIgOiAxOworI2Vsc2UKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBjdHh0LT5pbmNNYXggPyBjdHh0LT5pbmNNYXggKiAyIDogNDsKKyNlbmRpZgorCisgICAgICAgIHRtcCA9ICh4bWxYSW5jbHVkZVJlZlB0ciAqKSB4bWxSZWFsbG9jKGN0eHQtPmluY1RhYiwKKwkgICAgICAgICAgICAgbmV3U2l6ZSAqIHNpemVvZihjdHh0LT5pbmNUYWJbMF0pKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisJICAgIHhtbFhJbmNsdWRlRXJyTWVtb3J5KGN0eHQsIGVsZW0sICJncm93aW5nIFhJbmNsdWRlIGNvbnRleHQiKTsKIAkgICAgeG1sWEluY2x1ZGVGcmVlUmVmKHJldCk7CiAJICAgIHJldHVybihOVUxMKTsKIAl9CisgICAgICAgIGN0eHQtPmluY1RhYiA9IHRtcDsKKyAgICAgICAgY3R4dC0+aW5jTWF4ID0gbmV3U2l6ZTsKICAgICB9CiAgICAgY3R4dC0+aW5jVGFiW2N0eHQtPmluY05yKytdID0gcmV0OwogICAgIHJldHVybihyZXQpOwpAQCAtMjgyLDkgKzI4NCw2IEBACiB4bWxYSW5jbHVkZU5ld0NvbnRleHQoeG1sRG9jUHRyIGRvYykgewogICAgIHhtbFhJbmNsdWRlQ3R4dFB0ciByZXQ7CiAKLSNpZmRlZiBERUJVR19YSU5DTFVERQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiTmV3IGNvbnRleHRcbiIpOwotI2VuZGlmCiAgICAgaWYgKGRvYyA9PSBOVUxMKQogCXJldHVybihOVUxMKTsKICAgICByZXQgPSAoeG1sWEluY2x1ZGVDdHh0UHRyKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFhJbmNsdWRlQ3R4dCkpOwpAQCAtMjk2LDcgKzI5NSw2IEBACiAgICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKHhtbFhJbmNsdWRlQ3R4dCkpOwogICAgIHJldC0+ZG9jID0gZG9jOwogICAgIHJldC0+aW5jTnIgPSAwOwotICAgIHJldC0+aW5jQmFzZSA9IDA7CiAgICAgcmV0LT5pbmNNYXggPSAwOwogICAgIHJldC0+aW5jVGFiID0gTlVMTDsKICAgICByZXQtPm5iRXJyb3JzID0gMDsKQEAgLTMwNCw3MyArMzAyLDYgQEAKIH0KIAogLyoqCi0gKiB4bWxYSW5jbHVkZVVSTFB1c2g6Ci0gKiBAY3R4dDogIHRoZSBwYXJzZXIgY29udGV4dAotICogQHZhbHVlOiAgdGhlIHVybAotICoKLSAqIFB1c2hlcyBhIG5ldyB1cmwgb24gdG9wIG9mIHRoZSB1cmwgc3RhY2sKLSAqCi0gKiBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBpbmRleCBpbiB0aGUgc3RhY2sgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQKLXhtbFhJbmNsdWRlVVJMUHVzaCh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwKLQkgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKnZhbHVlKQotewotICAgIGlmIChjdHh0LT51cmxOciA+IFhJTkNMVURFX01BWF9ERVBUSCkgewotCXhtbFhJbmNsdWRlRXJyKGN0eHQsIE5VTEwsIFhNTF9YSU5DTFVERV9SRUNVUlNJT04sCi0JICAgICAgICAgICAgICAgImRldGVjdGVkIGEgcmVjdXJzaW9uIGluICVzXG4iLCB2YWx1ZSk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKGN0eHQtPnVybFRhYiA9PSBOVUxMKSB7Ci0JY3R4dC0+dXJsTWF4ID0gNDsKLQljdHh0LT51cmxOciA9IDA7Ci0JY3R4dC0+dXJsVGFiID0gKHhtbENoYXIgKiAqKSB4bWxNYWxsb2MoCi0JCSAgICAgICAgY3R4dC0+dXJsTWF4ICogc2l6ZW9mKGN0eHQtPnVybFRhYlswXSkpOwotICAgICAgICBpZiAoY3R4dC0+dXJsVGFiID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgTlVMTCwgImFkZGluZyBVUkwiKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjdHh0LT51cmxOciA+PSBjdHh0LT51cmxNYXgpIHsKLSAgICAgICAgY3R4dC0+dXJsTWF4ICo9IDI7Ci0gICAgICAgIGN0eHQtPnVybFRhYiA9Ci0gICAgICAgICAgICAoeG1sQ2hhciAqICopIHhtbFJlYWxsb2MoY3R4dC0+dXJsVGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT51cmxNYXggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY3R4dC0+dXJsVGFiWzBdKSk7Ci0gICAgICAgIGlmIChjdHh0LT51cmxUYWIgPT0gTlVMTCkgewotCSAgICB4bWxYSW5jbHVkZUVyck1lbW9yeShjdHh0LCBOVUxMLCAiYWRkaW5nIFVSTCIpOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY3R4dC0+dXJsID0gY3R4dC0+dXJsVGFiW2N0eHQtPnVybE5yXSA9IHhtbFN0cmR1cCh2YWx1ZSk7Ci0gICAgcmV0dXJuIChjdHh0LT51cmxOcisrKTsKLX0KLQotLyoqCi0gKiB4bWxYSW5jbHVkZVVSTFBvcDoKLSAqIEBjdHh0OiB0aGUgcGFyc2VyIGNvbnRleHQKLSAqCi0gKiBQb3BzIHRoZSB0b3AgVVJMIGZyb20gdGhlIFVSTCBzdGFjawotICovCi1zdGF0aWMgdm9pZAoteG1sWEluY2x1ZGVVUkxQb3AoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQpCi17Ci0gICAgeG1sQ2hhciAqIHJldDsKLQotICAgIGlmIChjdHh0LT51cmxOciA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgY3R4dC0+dXJsTnItLTsKLSAgICBpZiAoY3R4dC0+dXJsTnIgPiAwKQotICAgICAgICBjdHh0LT51cmwgPSBjdHh0LT51cmxUYWJbY3R4dC0+dXJsTnIgLSAxXTsKLSAgICBlbHNlCi0gICAgICAgIGN0eHQtPnVybCA9IE5VTEw7Ci0gICAgcmV0ID0gY3R4dC0+dXJsVGFiW2N0eHQtPnVybE5yXTsKLSAgICBjdHh0LT51cmxUYWJbY3R4dC0+dXJsTnJdID0gTlVMTDsKLSAgICBpZiAocmV0ICE9IE5VTEwpCi0JeG1sRnJlZShyZXQpOwotfQotCi0vKioKICAqIHhtbFhJbmNsdWRlRnJlZUNvbnRleHQ6CiAgKiBAY3R4dDogdGhlIFhJbmNsdWRlIGNvbnRleHQKICAqCkBAIC0zODAsMTUgKzMxMSwxNSBAQAogeG1sWEluY2x1ZGVGcmVlQ29udGV4dCh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCkgewogICAgIGludCBpOwogCi0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkZyZWVpbmcgY29udGV4dFxuIik7Ci0jZW5kaWYKICAgICBpZiAoY3R4dCA9PSBOVUxMKQogCXJldHVybjsKLSAgICB3aGlsZSAoY3R4dC0+dXJsTnIgPiAwKQotCXhtbFhJbmNsdWRlVVJMUG9wKGN0eHQpOwotICAgIGlmIChjdHh0LT51cmxUYWIgIT0gTlVMTCkKKyAgICBpZiAoY3R4dC0+dXJsVGFiICE9IE5VTEwpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4dC0+dXJsTnI7IGkrKykgeworCSAgICB4bWxGcmVlRG9jKGN0eHQtPnVybFRhYltpXS5kb2MpOworCSAgICB4bWxGcmVlKGN0eHQtPnVybFRhYltpXS51cmwpOworCX0KIAl4bWxGcmVlKGN0eHQtPnVybFRhYik7CisgICAgfQogICAgIGZvciAoaSA9IDA7aSA8IGN0eHQtPmluY05yO2krKykgewogCWlmIChjdHh0LT5pbmNUYWJbaV0gIT0gTlVMTCkKIAkgICAgeG1sWEluY2x1ZGVGcmVlUmVmKGN0eHQtPmluY1RhYltpXSk7CkBAIC0zOTcsMTggKzMyOCwxMSBAQAogCXhtbEZyZWUoY3R4dC0+aW5jVGFiKTsKICAgICBpZiAoY3R4dC0+dHh0VGFiICE9IE5VTEwpIHsKIAlmb3IgKGkgPSAwO2kgPCBjdHh0LT50eHROcjtpKyspIHsKLQkgICAgaWYgKGN0eHQtPnR4dFRhYltpXSAhPSBOVUxMKQotCQl4bWxGcmVlKGN0eHQtPnR4dFRhYltpXSk7CisJICAgIHhtbEZyZWUoY3R4dC0+dHh0VGFiW2ldLnRleHQpOworCSAgICB4bWxGcmVlKGN0eHQtPnR4dFRhYltpXS51cmwpOwogCX0KIAl4bWxGcmVlKGN0eHQtPnR4dFRhYik7CiAgICAgfQotICAgIGlmIChjdHh0LT50eHR1cmxUYWIgIT0gTlVMTCkgewotCWZvciAoaSA9IDA7aSA8IGN0eHQtPnR4dE5yO2krKykgewotCSAgICBpZiAoY3R4dC0+dHh0dXJsVGFiW2ldICE9IE5VTEwpCi0JCXhtbEZyZWUoY3R4dC0+dHh0dXJsVGFiW2ldKTsKLQl9Ci0JeG1sRnJlZShjdHh0LT50eHR1cmxUYWIpOwotICAgIH0KICAgICBpZiAoY3R4dC0+YmFzZSAhPSBOVUxMKSB7CiAgICAgICAgIHhtbEZyZWUoY3R4dC0+YmFzZSk7CiAgICAgfQpAQCAtNDk0LDcgKzQxOCw3IEBACiAgKgogICogQWRkIGEgbmV3IG5vZGUgdG8gcHJvY2VzcyB0byBhbiBYSW5jbHVkZSBjb250ZXh0CiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyB4bWxYSW5jbHVkZVJlZlB0cgogeG1sWEluY2x1ZGVBZGROb2RlKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCB4bWxOb2RlUHRyIGN1cikgewogICAgIHhtbFhJbmNsdWRlUmVmUHRyIHJlZjsKICAgICB4bWxVUklQdHIgdXJpOwpAQCAtNTA0LDE4ICs0MjgsMTUgQEAKICAgICB4bWxDaGFyICpwYXJzZTsKICAgICB4bWxDaGFyICpiYXNlOwogICAgIHhtbENoYXIgKlVSSTsKLSAgICBpbnQgeG1sID0gMSwgaTsgLyogZGVmYXVsdCBJc3N1ZSA2NCAqLworICAgIGludCB4bWwgPSAxOwogICAgIGludCBsb2NhbCA9IDA7CiAKIAogICAgIGlmIChjdHh0ID09IE5VTEwpCi0JcmV0dXJuKC0xKTsKKwlyZXR1cm4oTlVMTCk7CiAgICAgaWYgKGN1ciA9PSBOVUxMKQotCXJldHVybigtMSk7CisJcmV0dXJuKE5VTEwpOwogCi0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkFkZCBub2RlXG4iKTsKLSNlbmRpZgogICAgIC8qCiAgICAgICogcmVhZCB0aGUgYXR0cmlidXRlcwogICAgICAqLwpAQCAtNTIzLDcgKzQ0NCw3IEBACiAgICAgaWYgKGhyZWYgPT0gTlVMTCkgewogCWhyZWYgPSB4bWxTdHJkdXAoQkFEX0NBU1QgIiIpOyAvKiBAQEBAIGhyZWYgaXMgbm93IG9wdGlvbmFsICovCiAJaWYgKGhyZWYgPT0gTlVMTCkKLQkgICAgcmV0dXJuKC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICBwYXJzZSA9IHhtbFhJbmNsdWRlR2V0UHJvcChjdHh0LCBjdXIsIFhJTkNMVURFX1BBUlNFKTsKICAgICBpZiAocGFyc2UgIT0gTlVMTCkgewpAQCAtNTM4LDcgKzQ1OSw3IEBACiAJCXhtbEZyZWUoaHJlZik7CiAJICAgIGlmIChwYXJzZSAhPSBOVUxMKQogCQl4bWxGcmVlKHBhcnNlKTsKLQkgICAgcmV0dXJuKC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOwogCX0KICAgICB9CiAKQEAgLTU3NCw3ICs0OTUsNyBAQAogICAgIGlmIChVUkkgPT0gTlVMTCkgewogCXhtbFhJbmNsdWRlRXJyKGN0eHQsIGN1ciwgWE1MX1hJTkNMVURFX0hSRUZfVVJJLAogCSAgICAgICAgICAgICAgICJmYWlsZWQgYnVpbGQgVVJMXG4iLCBOVUxMKTsKLQlyZXR1cm4oLTEpOworCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgZnJhZ21lbnQgPSB4bWxYSW5jbHVkZUdldFByb3AoY3R4dCwgY3VyLCBYSU5DTFVERV9QQVJTRV9YUE9JTlRFUik7CiAKQEAgLTU4OCw3ICs1MDksNyBAQAogCWlmIChmcmFnbWVudCAhPSBOVUxMKQogCSAgICB4bWxGcmVlKGZyYWdtZW50KTsKIAl4bWxGcmVlKFVSSSk7Ci0JcmV0dXJuKC0xKTsKKwlyZXR1cm4oTlVMTCk7CiAgICAgfQogCiAgICAgaWYgKHVyaS0+ZnJhZ21lbnQgIT0gTlVMTCkgewpAQCAtNjA2LDIwICs1MjcsMjEgQEAKIAkgICAgICAgIHhtbEZyZWUoZnJhZ21lbnQpOwogCSAgICB4bWxGcmVlVVJJKHVyaSk7CiAJICAgIHhtbEZyZWUoVVJJKTsKLQkgICAgcmV0dXJuKC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOwogCX0KIAl1cmktPmZyYWdtZW50ID0gTlVMTDsKICAgICB9CiAgICAgVVJMID0geG1sU2F2ZVVyaSh1cmkpOwogICAgIHhtbEZyZWVVUkkodXJpKTsKLSAgICB4bWxGcmVlKFVSSSk7CiAgICAgaWYgKFVSTCA9PSBOVUxMKSB7CiAJeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3VyLCBYTUxfWElOQ0xVREVfSFJFRl9VUkksCiAJICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgVVJJICVzXG4iLCBVUkkpOwogCWlmIChmcmFnbWVudCAhPSBOVUxMKQogCSAgICB4bWxGcmVlKGZyYWdtZW50KTsKLQlyZXR1cm4oLTEpOworICAgICAgICB4bWxGcmVlKFVSSSk7CisJcmV0dXJuKE5VTEwpOwogICAgIH0KKyAgICB4bWxGcmVlKFVSSSk7CiAKICAgICBpZiAoeG1sU3RyRXF1YWwoVVJMLCBjdHh0LT5kb2MtPlVSTCkpCiAJbG9jYWwgPSAxOwpAQCAtNjM0LDM0ICs1NTYsMTggQEAKIAkJICAgICAgIFVSTCk7CiAgICAgICAgIHhtbEZyZWUoVVJMKTsKICAgICAgICAgeG1sRnJlZShmcmFnbWVudCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIENoZWNrIHRoZSBVUkwgYWdhaW5zdCB0aGUgc3RhY2sgZm9yIHJlY3Vyc2lvbnMKLSAgICAgKi8KLSAgICBpZiAoKCFsb2NhbCkgJiYgKHhtbCA9PSAxKSkgewotCWZvciAoaSA9IDA7aSA8IGN0eHQtPnVybE5yO2krKykgewotCSAgICBpZiAoeG1sU3RyRXF1YWwoVVJMLCBjdHh0LT51cmxUYWJbaV0pKSB7Ci0JCXhtbFhJbmNsdWRlRXJyKGN0eHQsIGN1ciwgWE1MX1hJTkNMVURFX1JFQ1VSU0lPTiwKLQkJICAgICAgICAgICAgICAgImRldGVjdGVkIGEgcmVjdXJzaW9uIGluICVzXG4iLCBVUkwpOwotICAgICAgICAgICAgICAgIHhtbEZyZWUoVVJMKTsKLSAgICAgICAgICAgICAgICB4bWxGcmVlKGZyYWdtZW50KTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCX0KKwlyZXR1cm4oTlVMTCk7CiAgICAgfQogCiAgICAgcmVmID0geG1sWEluY2x1ZGVOZXdSZWYoY3R4dCwgVVJMLCBjdXIpOwogICAgIHhtbEZyZWUoVVJMKTsKICAgICBpZiAocmVmID09IE5VTEwpIHsKLQlyZXR1cm4oLTEpOworICAgICAgICB4bWxGcmVlKGZyYWdtZW50KTsKKwlyZXR1cm4oTlVMTCk7CiAgICAgfQogICAgIHJlZi0+ZnJhZ21lbnQgPSBmcmFnbWVudDsKLSAgICByZWYtPmRvYyA9IE5VTEw7CiAgICAgcmVmLT54bWwgPSB4bWw7Ci0gICAgcmVmLT5jb3VudCA9IDE7Ci0gICAgcmV0dXJuKDApOworICAgIHJldHVybihyZWYpOwogfQogCiAvKioKQEAgLTY3NSwxMzggKzU4MSwzNSBAQAogc3RhdGljIHZvaWQKIHhtbFhJbmNsdWRlUmVjdXJzZURvYyh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sRG9jUHRyIGRvYywKIAkgICAgICAgICAgICAgIGNvbnN0IHhtbFVSTCB1cmwgQVRUUklCVVRFX1VOVVNFRCkgewotICAgIHhtbFhJbmNsdWRlQ3R4dFB0ciBuZXdjdHh0OworICAgIHhtbERvY1B0ciBvbGREb2M7CisgICAgeG1sWEluY2x1ZGVSZWZQdHIgKm9sZEluY1RhYjsKKyAgICBpbnQgb2xkSW5jTWF4LCBvbGRJbmNOciwgb2xkSXNTdHJlYW07CiAgICAgaW50IGk7CiAKLSAgICAvKgotICAgICAqIEF2b2lkIHJlY3Vyc2lvbiBpbiBhbHJlYWR5IHN1YnN0aXR1dGVkIHJlc291cmNlcwotICAgIGZvciAoaSA9IDA7aSA8IGN0eHQtPnVybE5yO2krKykgewotCWlmICh4bWxTdHJFcXVhbChkb2MtPlVSTCwgY3R4dC0+dXJsVGFiW2ldKSkKLQkgICAgcmV0dXJuOworICAgIG9sZERvYyA9IGN0eHQtPmRvYzsKKyAgICBvbGRJbmNNYXggPSBjdHh0LT5pbmNNYXg7CisgICAgb2xkSW5jTnIgPSBjdHh0LT5pbmNOcjsKKyAgICBvbGRJbmNUYWIgPSBjdHh0LT5pbmNUYWI7CisgICAgb2xkSXNTdHJlYW0gPSBjdHh0LT5pc1N0cmVhbTsKKyAgICBjdHh0LT5kb2MgPSBkb2M7CisgICAgY3R4dC0+aW5jTWF4ID0gMDsKKyAgICBjdHh0LT5pbmNOciA9IDA7CisgICAgY3R4dC0+aW5jVGFiID0gTlVMTDsKKyAgICBjdHh0LT5pc1N0cmVhbSA9IDA7CisKKyAgICB4bWxYSW5jbHVkZURvUHJvY2VzcyhjdHh0LCB4bWxEb2NHZXRSb290RWxlbWVudChkb2MpKTsKKworICAgIGlmIChjdHh0LT5pbmNUYWIgIT0gTlVMTCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3R4dC0+aW5jTnI7IGkrKykKKyAgICAgICAgICAgIHhtbFhJbmNsdWRlRnJlZVJlZihjdHh0LT5pbmNUYWJbaV0pOworICAgICAgICB4bWxGcmVlKGN0eHQtPmluY1RhYik7CiAgICAgfQotICAgICAqLwogCi0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlJlY3Vyc2luZyBpbiBkb2MgJXNcbiIsIGRvYy0+VVJMKTsKLSNlbmRpZgotICAgIC8qCi0gICAgICogSGFuZGxlIHJlY3Vyc2lvbiBoZXJlLgotICAgICAqLwotCi0gICAgbmV3Y3R4dCA9IHhtbFhJbmNsdWRlTmV3Q29udGV4dChkb2MpOwotICAgIGlmIChuZXdjdHh0ICE9IE5VTEwpIHsKLQkvKgotCSAqIENvcHkgdGhlIHByaXZhdGUgdXNlciBkYXRhCi0JICovCi0JbmV3Y3R4dC0+X3ByaXZhdGUgPSBjdHh0LT5fcHJpdmF0ZTsKLQkvKgotCSAqIENvcHkgdGhlIGV4aXN0aW5nIGRvY3VtZW50IHNldAotCSAqLwotCW5ld2N0eHQtPmluY01heCA9IGN0eHQtPmluY01heDsKLQluZXdjdHh0LT5pbmNOciA9IGN0eHQtPmluY05yOwotICAgICAgICBuZXdjdHh0LT5pbmNUYWIgPSAoeG1sWEluY2x1ZGVSZWZQdHIgKikgeG1sTWFsbG9jKG5ld2N0eHQtPmluY01heCAqCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ld2N0eHQtPmluY1RhYlswXSkpOwotICAgICAgICBpZiAobmV3Y3R4dC0+aW5jVGFiID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgKHhtbE5vZGVQdHIpIGRvYywgInByb2Nlc3NpbmcgZG9jIik7Ci0JICAgIHhtbEZyZWUobmV3Y3R4dCk7Ci0JICAgIHJldHVybjsKLQl9Ci0JLyoKLQkgKiBjb3B5IHRoZSB1cmxUYWIKLQkgKi8KLQluZXdjdHh0LT51cmxNYXggPSBjdHh0LT51cmxNYXg7Ci0JbmV3Y3R4dC0+dXJsTnIgPSBjdHh0LT51cmxOcjsKLQluZXdjdHh0LT51cmxUYWIgPSBjdHh0LT51cmxUYWI7Ci0KLQkvKgotCSAqIEluaGVyaXQgdGhlIGV4aXN0aW5nIGJhc2UKLQkgKi8KLQluZXdjdHh0LT5iYXNlID0geG1sU3RyZHVwKGN0eHQtPmJhc2UpOwotCi0JLyoKLQkgKiBJbmhlcml0IHRoZSBkb2N1bWVudHMgYWxyZWFkeSBpbiB1c2UgYnkgb3RoZXIgaW5jbHVkZXMKLQkgKi8KLQluZXdjdHh0LT5pbmNCYXNlID0gY3R4dC0+aW5jTnI7Ci0JZm9yIChpID0gMDtpIDwgY3R4dC0+aW5jTnI7aSsrKSB7Ci0JICAgIG5ld2N0eHQtPmluY1RhYltpXSA9IGN0eHQtPmluY1RhYltpXTsKLQkgICAgbmV3Y3R4dC0+aW5jVGFiW2ldLT5jb3VudCsrOyAvKiBwcmV2ZW50IHRoZSByZWN1cnNpb24gZnJvbQotCQkJCQkgICAgZnJlZWluZyBpdCAqLwotCX0KLQkvKgotCSAqIFRoZSBuZXcgY29udGV4dCBzaG91bGQgYWxzbyBpbmhlcml0IHRoZSBQYXJzZSBGbGFncwotCSAqIChidWcgMTMyNTk3KQotCSAqLwotCW5ld2N0eHQtPnBhcnNlRmxhZ3MgPSBjdHh0LT5wYXJzZUZsYWdzOwotICAgICAgICBuZXdjdHh0LT5pbmNUb3RhbCA9IGN0eHQtPmluY1RvdGFsOwotCXhtbFhJbmNsdWRlRG9Qcm9jZXNzKG5ld2N0eHQsIGRvYywgeG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9jKSwgMCk7Ci0gICAgICAgIGN0eHQtPmluY1RvdGFsID0gbmV3Y3R4dC0+aW5jVG90YWw7Ci0JZm9yIChpID0gMDtpIDwgY3R4dC0+aW5jTnI7aSsrKSB7Ci0JICAgIG5ld2N0eHQtPmluY1RhYltpXS0+Y291bnQtLTsKLQkgICAgbmV3Y3R4dC0+aW5jVGFiW2ldID0gTlVMTDsKLQl9Ci0KLQkvKiB1cmxUYWIgbWF5IGhhdmUgYmVlbiByZWFsbG9jYXRlZCAqLwotCWN0eHQtPnVybFRhYiA9IG5ld2N0eHQtPnVybFRhYjsKLQljdHh0LT51cmxNYXggPSBuZXdjdHh0LT51cmxNYXg7Ci0KLQluZXdjdHh0LT51cmxNYXggPSAwOwotCW5ld2N0eHQtPnVybE5yID0gMDsKLQluZXdjdHh0LT51cmxUYWIgPSBOVUxMOwotCi0JeG1sWEluY2x1ZGVGcmVlQ29udGV4dChuZXdjdHh0KTsKLSAgICB9Ci0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkRvbmUgcmVjdXJzaW5nIGluIGRvYyAlc1xuIiwgdXJsKTsKLSNlbmRpZgotfQotCi0vKioKLSAqIHhtbFhJbmNsdWRlQWRkVHh0OgotICogQGN0eHQ6ICB0aGUgWEluY2x1ZGUgY29udGV4dAotICogQHR4dDogIHRoZSBuZXcgdGV4dCBub2RlCi0gKiBAdXJsOiAgdGhlIGFzc29jaWF0ZWQgVVJMCi0gKgotICogQWRkIGEgbmV3IHRleHQgbm9kZSB0byB0aGUgbGlzdAotICovCi1zdGF0aWMgdm9pZAoteG1sWEluY2x1ZGVBZGRUeHQoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIGNvbnN0IHhtbENoYXIgKnR4dCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbFVSTCB1cmwpIHsKLSNpZmRlZiBERUJVR19YSU5DTFVERQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiQWRkaW5nIHRleHQgJXNcbiIsIHVybCk7Ci0jZW5kaWYKLSAgICBpZiAoY3R4dC0+dHh0TWF4ID09IDApIHsKLQljdHh0LT50eHRNYXggPSA0OwotICAgICAgICBjdHh0LT50eHRUYWIgPSAoeG1sQ2hhciAqKikgeG1sTWFsbG9jKGN0eHQtPnR4dE1heCAqCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0eHQtPnR4dFRhYlswXSkpOwotICAgICAgICBpZiAoY3R4dC0+dHh0VGFiID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgTlVMTCwgInByb2Nlc3NpbmcgdGV4dCIpOwotCSAgICByZXR1cm47Ci0JfQotICAgICAgICBjdHh0LT50eHR1cmxUYWIgPSAoeG1sVVJMICopIHhtbE1hbGxvYyhjdHh0LT50eHRNYXggKgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdHh0LT50eHR1cmxUYWJbMF0pKTsKLSAgICAgICAgaWYgKGN0eHQtPnR4dHVybFRhYiA9PSBOVUxMKSB7Ci0JICAgIHhtbFhJbmNsdWRlRXJyTWVtb3J5KGN0eHQsIE5VTEwsICJwcm9jZXNzaW5nIHRleHQiKTsKLQkgICAgcmV0dXJuOwotCX0KLSAgICB9Ci0gICAgaWYgKGN0eHQtPnR4dE5yID49IGN0eHQtPnR4dE1heCkgewotCWN0eHQtPnR4dE1heCAqPSAyOwotICAgICAgICBjdHh0LT50eHRUYWIgPSAoeG1sQ2hhciAqKikgeG1sUmVhbGxvYyhjdHh0LT50eHRUYWIsCi0JICAgICAgICAgICAgIGN0eHQtPnR4dE1heCAqIHNpemVvZihjdHh0LT50eHRUYWJbMF0pKTsKLSAgICAgICAgaWYgKGN0eHQtPnR4dFRhYiA9PSBOVUxMKSB7Ci0JICAgIHhtbFhJbmNsdWRlRXJyTWVtb3J5KGN0eHQsIE5VTEwsICJwcm9jZXNzaW5nIHRleHQiKTsKLQkgICAgcmV0dXJuOwotCX0KLSAgICAgICAgY3R4dC0+dHh0dXJsVGFiID0gKHhtbFVSTCAqKSB4bWxSZWFsbG9jKGN0eHQtPnR4dHVybFRhYiwKLQkgICAgICAgICAgICAgY3R4dC0+dHh0TWF4ICogc2l6ZW9mKGN0eHQtPnR4dHVybFRhYlswXSkpOwotICAgICAgICBpZiAoY3R4dC0+dHh0dXJsVGFiID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgTlVMTCwgInByb2Nlc3NpbmcgdGV4dCIpOwotCSAgICByZXR1cm47Ci0JfQotICAgIH0KLSAgICBjdHh0LT50eHRUYWJbY3R4dC0+dHh0TnJdID0geG1sU3RyZHVwKHR4dCk7Ci0gICAgY3R4dC0+dHh0dXJsVGFiW2N0eHQtPnR4dE5yXSA9IHhtbFN0cmR1cCh1cmwpOwotICAgIGN0eHQtPnR4dE5yKys7CisgICAgY3R4dC0+ZG9jID0gb2xkRG9jOworICAgIGN0eHQtPmluY01heCA9IG9sZEluY01heDsKKyAgICBjdHh0LT5pbmNOciA9IG9sZEluY05yOworICAgIGN0eHQtPmluY1RhYiA9IG9sZEluY1RhYjsKKyAgICBjdHh0LT5pc1N0cmVhbSA9IG9sZElzU3RyZWFtOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MTUsNzAgKzYxOCwxMDcgQEAKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHhtbE5vZGVQdHIKLXhtbFhJbmNsdWRlQ29weU5vZGVMaXN0KHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCB4bWxEb2NQdHIgdGFyZ2V0LAotCSAgICAgICAgICAgICAgICB4bWxEb2NQdHIgc291cmNlLCB4bWxOb2RlUHRyIGVsZW0pOwotCiAvKioKICAqIHhtbFhJbmNsdWRlQ29weU5vZGU6CiAgKiBAY3R4dDogIHRoZSBYSW5jbHVkZSBjb250ZXh0Ci0gKiBAdGFyZ2V0OiAgdGhlIGRvY3VtZW50IHRhcmdldAotICogQHNvdXJjZTogIHRoZSBkb2N1bWVudCBzb3VyY2UKICAqIEBlbGVtOiAgdGhlIGVsZW1lbnQKKyAqIEBjb3B5Q2hpbGRyZW46ICBjb3B5IGNoaWxkcmVuIGluc3RlYWQgb2Ygbm9kZSBpZiB0cnVlCiAgKgotICogTWFrZSBhIGNvcHkgb2YgdGhlIG5vZGUgd2hpbGUgcHJlc2VydmluZyB0aGUgWEluY2x1ZGUgc2VtYW50aWMKLSAqIG9mIHRoZSBJbmZvc2V0IGNvcHkKKyAqIE1ha2UgYSBjb3B5IG9mIHRoZSBub2RlIHdoaWxlIGV4cGFuZGluZyBuZXN0ZWQgWEluY2x1ZGVzLgorICoKKyAqIFJldHVybnMgYSBub2RlIGxpc3QsIG5vdCBhIHNpbmdsZSBub2RlLgogICovCiBzdGF0aWMgeG1sTm9kZVB0cgoteG1sWEluY2x1ZGVDb3B5Tm9kZSh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sRG9jUHRyIHRhcmdldCwKLQkgICAgICAgICAgICB4bWxEb2NQdHIgc291cmNlLCB4bWxOb2RlUHRyIGVsZW0pIHsKK3htbFhJbmNsdWRlQ29weU5vZGUoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvcHlDaGlsZHJlbikgewogICAgIHhtbE5vZGVQdHIgcmVzdWx0ID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIGluc2VydFBhcmVudCA9IE5VTEw7CisgICAgeG1sTm9kZVB0ciBpbnNlcnRMYXN0ID0gTlVMTDsKKyAgICB4bWxOb2RlUHRyIGN1cjsKIAotICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAodGFyZ2V0ID09IE5VTEwpIHx8IChzb3VyY2UgPT0gTlVMTCkgfHwKLQkoZWxlbSA9PSBOVUxMKSkKLQlyZXR1cm4oTlVMTCk7Ci0gICAgaWYgKGVsZW0tPnR5cGUgPT0gWE1MX0RURF9OT0RFKQotCXJldHVybihOVUxMKTsKLSAgICBpZiAoZWxlbS0+dHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkKLQlyZXN1bHQgPSB4bWxYSW5jbHVkZUNvcHlOb2RlTGlzdChjdHh0LCB0YXJnZXQsIHNvdXJjZSwgZWxlbS0+Y2hpbGRyZW4pOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0geG1sRG9jQ29weU5vZGUoZWxlbSwgdGFyZ2V0LCAxKTsKLSAgICByZXR1cm4ocmVzdWx0KTsKLX0KLQotLyoqCi0gKiB4bWxYSW5jbHVkZUNvcHlOb2RlTGlzdDoKLSAqIEBjdHh0OiAgdGhlIFhJbmNsdWRlIGNvbnRleHQKLSAqIEB0YXJnZXQ6ICB0aGUgZG9jdW1lbnQgdGFyZ2V0Ci0gKiBAc291cmNlOiAgdGhlIGRvY3VtZW50IHNvdXJjZQotICogQGVsZW06ICB0aGUgZWxlbWVudCBsaXN0Ci0gKgotICogTWFrZSBhIGNvcHkgb2YgdGhlIG5vZGUgbGlzdCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBYSW5jbHVkZSBzZW1hbnRpYwotICogb2YgdGhlIEluZm9zZXQgY29weQotICovCi1zdGF0aWMgeG1sTm9kZVB0cgoteG1sWEluY2x1ZGVDb3B5Tm9kZUxpc3QoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbERvY1B0ciB0YXJnZXQsCi0JICAgICAgICAgICAgICAgIHhtbERvY1B0ciBzb3VyY2UsIHhtbE5vZGVQdHIgZWxlbSkgewotICAgIHhtbE5vZGVQdHIgY3VyLCByZXMsIHJlc3VsdCA9IE5VTEwsIGxhc3QgPSBOVUxMOwotCi0gICAgaWYgKChjdHh0ID09IE5VTEwpIHx8ICh0YXJnZXQgPT0gTlVMTCkgfHwgKHNvdXJjZSA9PSBOVUxMKSB8fAotCShlbGVtID09IE5VTEwpKQotCXJldHVybihOVUxMKTsKLSAgICBjdXIgPSBlbGVtOwotICAgIHdoaWxlIChjdXIgIT0gTlVMTCkgewotCXJlcyA9IHhtbFhJbmNsdWRlQ29weU5vZGUoY3R4dCwgdGFyZ2V0LCBzb3VyY2UsIGN1cik7Ci0JaWYgKHJlcyAhPSBOVUxMKSB7Ci0JICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotCQlyZXN1bHQgPSBsYXN0ID0gcmVzOwotCSAgICB9IGVsc2UgewotCQlsYXN0LT5uZXh0ID0gcmVzOwotCQlyZXMtPnByZXYgPSBsYXN0OwotCQlsYXN0ID0gcmVzOwotCSAgICB9Ci0JfQotCWN1ciA9IGN1ci0+bmV4dDsKKyAgICBpZiAoY29weUNoaWxkcmVuKSB7CisgICAgICAgIGN1ciA9IGVsZW0tPmNoaWxkcmVuOworICAgICAgICBpZiAoY3VyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3VyID0gZWxlbTsKICAgICB9Ci0gICAgcmV0dXJuKHJlc3VsdCk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICB4bWxOb2RlUHRyIGNvcHkgPSBOVUxMOworICAgICAgICBpbnQgcmVjdXJzZSA9IDA7CisKKyAgICAgICAgaWYgKChjdXItPnR5cGUgPT0gWE1MX0RPQ1VNRU5UX05PREUpIHx8CisgICAgICAgICAgICAoY3VyLT50eXBlID09IFhNTF9EVERfTk9ERSkpIHsKKyAgICAgICAgICAgIDsKKyAgICAgICAgfSBlbHNlIGlmICgoY3VyLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpICYmCisgICAgICAgICAgICAgICAgICAgKGN1ci0+bnMgIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICAgICAgICAoeG1sU3RyRXF1YWwoY3VyLT5uYW1lLCBYSU5DTFVERV9OT0RFKSkgJiYKKyAgICAgICAgICAgICAgICAgICAoKHhtbFN0ckVxdWFsKGN1ci0+bnMtPmhyZWYsIFhJTkNMVURFX05TKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKHhtbFN0ckVxdWFsKGN1ci0+bnMtPmhyZWYsIFhJTkNMVURFX09MRF9OUykpKSkgeworICAgICAgICAgICAgeG1sWEluY2x1ZGVSZWZQdHIgcmVmID0geG1sWEluY2x1ZGVFeHBhbmROb2RlKGN0eHQsIGN1cik7CisKKyAgICAgICAgICAgIGlmIChyZWYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRPRE86IEluc2VydCBYTUxfWElOQ0xVREVfU1RBUlQgYW5kIFhNTF9YSU5DTFVERV9FTkQgbm9kZXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHJlZi0+aW5jICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb3B5ID0geG1sU3RhdGljQ29weU5vZGVMaXN0KHJlZi0+aW5jLCBjdHh0LT5kb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRQYXJlbnQpOworICAgICAgICAgICAgICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb3B5ID0geG1sU3RhdGljQ29weU5vZGUoY3VyLCBjdHh0LT5kb2MsIGluc2VydFBhcmVudCwgMik7CisgICAgICAgICAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIHJlY3Vyc2UgPSAoY3VyLT50eXBlICE9IFhNTF9FTlRJVFlfUkVGX05PREUpICYmCisgICAgICAgICAgICAgICAgICAgICAgKGN1ci0+Y2hpbGRyZW4gIT0gTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29weSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29weTsKKyAgICAgICAgICAgIGlmIChpbnNlcnRMYXN0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRMYXN0LT5uZXh0ID0gY29weTsKKyAgICAgICAgICAgICAgICBjb3B5LT5wcmV2ID0gaW5zZXJ0TGFzdDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zZXJ0UGFyZW50ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRQYXJlbnQtPmNoaWxkcmVuID0gY29weTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc2VydExhc3QgPSBjb3B5OworICAgICAgICAgICAgd2hpbGUgKGluc2VydExhc3QtPm5leHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGluc2VydExhc3QgPSBpbnNlcnRMYXN0LT5uZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlY3Vyc2UpIHsKKyAgICAgICAgICAgIGN1ciA9IGN1ci0+Y2hpbGRyZW47CisgICAgICAgICAgICBpbnNlcnRQYXJlbnQgPSBpbnNlcnRMYXN0OworICAgICAgICAgICAgaW5zZXJ0TGFzdCA9IE5VTEw7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXIgPT0gZWxlbSkKKyAgICAgICAgICAgIHJldHVybihyZXN1bHQpOworCisgICAgICAgIHdoaWxlIChjdXItPm5leHQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKGluc2VydFBhcmVudCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGluc2VydFBhcmVudC0+bGFzdCA9IGluc2VydExhc3Q7CisgICAgICAgICAgICBjdXIgPSBjdXItPnBhcmVudDsKKyAgICAgICAgICAgIGlmIChjdXIgPT0gZWxlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4ocmVzdWx0KTsKKyAgICAgICAgICAgIGluc2VydExhc3QgPSBpbnNlcnRQYXJlbnQ7CisgICAgICAgICAgICBpbnNlcnRQYXJlbnQgPSBpbnNlcnRQYXJlbnQtPnBhcmVudDsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKK2Vycm9yOgorICAgIHhtbEZyZWVOb2RlTGlzdChyZXN1bHQpOworICAgIHJldHVybihOVUxMKTsKIH0KIAogI2lmZGVmIExJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRApAQCAtOTEzLDggKzc1Myw2IEBACiAvKioKICAqIHhtbFhJbmNsdWRlQ29weVJhbmdlOgogICogQGN0eHQ6ICB0aGUgWEluY2x1ZGUgY29udGV4dAotICogQHRhcmdldDogIHRoZSBkb2N1bWVudCB0YXJnZXQKLSAqIEBzb3VyY2U6ICB0aGUgZG9jdW1lbnQgc291cmNlCiAgKiBAb2JqOiAgdGhlIFhQb2ludGVyIHJlc3VsdCBmcm9tIHRoZSBldmFsdWF0aW9uLgogICoKICAqIEJ1aWxkIGEgbm9kZSBsaXN0IHRyZWUgY29weSBvZiB0aGUgWFBvaW50ZXIgcmVzdWx0LgpAQCAtOTIzLDggKzc2MSw3IEBACiAgKiAgICAgICAgIFRoZSBjYWxsZXIgaGFzIHRvIGZyZWUgdGhlIG5vZGUgdHJlZS4KICAqLwogc3RhdGljIHhtbE5vZGVQdHIKLXhtbFhJbmNsdWRlQ29weVJhbmdlKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCB4bWxEb2NQdHIgdGFyZ2V0LAotCSAgICAgICAgICAgICAgICB4bWxEb2NQdHIgc291cmNlLCB4bWxYUGF0aE9iamVjdFB0ciByYW5nZSkgeworeG1sWEluY2x1ZGVDb3B5UmFuZ2UoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbFhQYXRoT2JqZWN0UHRyIHJhbmdlKSB7CiAgICAgLyogcG9pbnRlcnMgdG8gZ2VuZXJhdGVkIG5vZGVzICovCiAgICAgeG1sTm9kZVB0ciBsaXN0ID0gTlVMTCwgbGFzdCA9IE5VTEwsIGxpc3RQYXJlbnQgPSBOVUxMOwogICAgIHhtbE5vZGVQdHIgdG1wLCB0bXAyOwpAQCAtOTMzLDggKzc3MCw3IEBACiAgICAgaW50IGluZGV4MSwgaW5kZXgyOwogICAgIGludCBsZXZlbCA9IDAsIGxhc3RMZXZlbCA9IDAsIGVuZExldmVsID0gMCwgZW5kRmxhZyA9IDA7CiAKLSAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKHRhcmdldCA9PSBOVUxMKSB8fCAoc291cmNlID09IE5VTEwpIHx8Ci0JKHJhbmdlID09IE5VTEwpKQorICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAocmFuZ2UgPT0gTlVMTCkpCiAJcmV0dXJuKE5VTEwpOwogICAgIGlmIChyYW5nZS0+dHlwZSAhPSBYUEFUSF9SQU5HRSkKIAlyZXR1cm4oTlVMTCk7CkBAIC05NDQsNyArNzgwLDcgQEAKIAlyZXR1cm4oTlVMTCk7CiAgICAgZW5kID0gcmFuZ2UtPnVzZXIyOwogICAgIGlmIChlbmQgPT0gTlVMTCkKLQlyZXR1cm4oeG1sRG9jQ29weU5vZGUoc3RhcnQsIHRhcmdldCwgMSkpOworCXJldHVybih4bWxEb2NDb3B5Tm9kZShzdGFydCwgY3R4dC0+ZG9jLCAxKSk7CiAgICAgaWYgKGVuZC0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpCiAgICAgICAgIHJldHVybihOVUxMKTsKIApAQCAtOTY2LDcgKzgwMiw3IEBACiAJaWYgKGxldmVsIDwgMCkgewogCSAgICB3aGlsZSAobGV2ZWwgPCAwKSB7CiAJICAgICAgICAvKiBjb3B5IG11c3QgaW5jbHVkZSBuYW1lc3BhY2VzIGFuZCBwcm9wZXJ0aWVzICovCi0JICAgICAgICB0bXAyID0geG1sRG9jQ29weU5vZGUobGlzdFBhcmVudCwgdGFyZ2V0LCAyKTsKKwkgICAgICAgIHRtcDIgPSB4bWxEb2NDb3B5Tm9kZShsaXN0UGFyZW50LCBjdHh0LT5kb2MsIDIpOwogCSAgICAgICAgeG1sQWRkQ2hpbGQodG1wMiwgbGlzdCk7CiAJICAgICAgICBsaXN0ID0gdG1wMjsKIAkgICAgICAgIGxpc3RQYXJlbnQgPSBsaXN0UGFyZW50LT5wYXJlbnQ7CkBAIC05ODgsNyArODI0LDcgQEAKIAkJaW50IGxlbjsKIAogCQlpZiAoY29udGVudCA9PSBOVUxMKSB7Ci0JCSAgICB0bXAgPSB4bWxOZXdEb2NUZXh0TGVuKHRhcmdldCwgTlVMTCwgMCk7CisJCSAgICB0bXAgPSB4bWxOZXdEb2NUZXh0TGVuKGN0eHQtPmRvYywgTlVMTCwgMCk7CiAJCX0gZWxzZSB7CiAJCSAgICBsZW4gPSBpbmRleDI7CiAJCSAgICBpZiAoKGN1ciA9PSBzdGFydCkgJiYgKGluZGV4MSA+IDEpKSB7CkBAIC05OTcsNyArODMzLDcgQEAKIAkJICAgIH0gZWxzZSB7CiAJCQlsZW4gPSBpbmRleDI7CiAJCSAgICB9Ci0JCSAgICB0bXAgPSB4bWxOZXdEb2NUZXh0TGVuKHRhcmdldCwgY29udGVudCwgbGVuKTsKKwkJICAgIHRtcCA9IHhtbE5ld0RvY1RleHRMZW4oY3R4dC0+ZG9jLCBjb250ZW50LCBsZW4pOwogCQl9CiAJCS8qIHNpbmdsZSBzdWIgdGV4dCBub2RlIHNlbGVjdGlvbiAqLwogCQlpZiAobGlzdCA9PSBOVUxMKQpAQCAtMTAxMiw3ICs4NDgsNyBAQAogCSAgICAgICAgZW5kTGV2ZWwgPSBsZXZlbDsJLyogcmVtZW1iZXIgdGhlIGxldmVsIG9mIHRoZSBlbmQgbm9kZSAqLwogCQllbmRGbGFnID0gMTsKIAkJLyogbGFzdCBub2RlIC0gbmVlZCB0byB0YWtlIGNhcmUgb2YgcHJvcGVydGllcyArIG5hbWVzcGFjZXMgKi8KLQkJdG1wID0geG1sRG9jQ29weU5vZGUoY3VyLCB0YXJnZXQsIDIpOworCQl0bXAgPSB4bWxEb2NDb3B5Tm9kZShjdXIsIGN0eHQtPmRvYywgMik7CiAJCWlmIChsaXN0ID09IE5VTEwpIHsKIAkJICAgIGxpc3QgPSB0bXA7CiAJCSAgICBsaXN0UGFyZW50ID0gY3VyLT5wYXJlbnQ7CkBAIC0xMDQ4LDEzICs4ODQsMTMgQEAKIAkJY29uc3QgeG1sQ2hhciAqY29udGVudCA9IGN1ci0+Y29udGVudDsKIAogCQlpZiAoY29udGVudCA9PSBOVUxMKSB7Ci0JCSAgICB0bXAgPSB4bWxOZXdEb2NUZXh0TGVuKHRhcmdldCwgTlVMTCwgMCk7CisJCSAgICB0bXAgPSB4bWxOZXdEb2NUZXh0TGVuKGN0eHQtPmRvYywgTlVMTCwgMCk7CiAJCX0gZWxzZSB7CiAJCSAgICBpZiAoaW5kZXgxID4gMSkgewogCQkJY29udGVudCArPSAoaW5kZXgxIC0gMSk7CiAJCQlpbmRleDEgPSAwOwogCQkgICAgfQotCQkgICAgdG1wID0geG1sTmV3RG9jVGV4dCh0YXJnZXQsIGNvbnRlbnQpOworCQkgICAgdG1wID0geG1sTmV3RG9jVGV4dChjdHh0LT5kb2MsIGNvbnRlbnQpOwogCQl9CiAJCWxhc3QgPSBsaXN0ID0gdG1wOwogCQlsaXN0UGFyZW50ID0gY3VyLT5wYXJlbnQ7CkBAIC0xMDYzLDcgKzg5OSw3IEBACiAJCSAqIHN0YXJ0IG9mIHRoZSByYW5nZSAtIG5lZWQgdG8gdGFrZSBjYXJlIG9mCiAJCSAqIHByb3BlcnRpZXMgYW5kIG5hbWVzcGFjZXMKIAkJICovCi0JCXRtcCA9IHhtbERvY0NvcHlOb2RlKGN1ciwgdGFyZ2V0LCAyKTsKKwkJdG1wID0geG1sRG9jQ29weU5vZGUoY3VyLCBjdHh0LT5kb2MsIDIpOwogCQlsaXN0ID0gbGFzdCA9IHRtcDsKIAkJbGlzdFBhcmVudCA9IGN1ci0+cGFyZW50OwogCQlpZiAoaW5kZXgxID4gMSkgewkvKiBEbyB3ZSBuZWVkIHRvIHBvc2l0aW9uPyAqLwpAQCAtMTEwMCw3ICs5MzYsNyBAQAogCQkgICAgICogTWlkZGxlIG9mIHRoZSByYW5nZSAtIG5lZWQgdG8gdGFrZSBjYXJlIG9mCiAJCSAgICAgKiBwcm9wZXJ0aWVzIGFuZCBuYW1lc3BhY2VzCiAJCSAgICAgKi8KLQkJICAgIHRtcCA9IHhtbERvY0NvcHlOb2RlKGN1ciwgdGFyZ2V0LCAyKTsKKwkJICAgIHRtcCA9IHhtbERvY0NvcHlOb2RlKGN1ciwgY3R4dC0+ZG9jLCAyKTsKIAkJICAgIGJyZWFrOwogCSAgICB9CiAJICAgIGlmICh0bXAgIT0gTlVMTCkgewpAQCAtMTEyNCwxMCArOTYwLDggQEAKICNlbmRpZiAvKiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQgKi8KIAogLyoqCi0gKiB4bWxYSW5jbHVkZUJ1aWxkTm9kZUxpc3Q6CisgKiB4bWxYSW5jbHVkZUNvcHlYUG9pbnRlcjoKICAqIEBjdHh0OiAgdGhlIFhJbmNsdWRlIGNvbnRleHQKLSAqIEB0YXJnZXQ6ICB0aGUgZG9jdW1lbnQgdGFyZ2V0Ci0gKiBAc291cmNlOiAgdGhlIGRvY3VtZW50IHNvdXJjZQogICogQG9iajogIHRoZSBYUG9pbnRlciByZXN1bHQgZnJvbSB0aGUgZXZhbHVhdGlvbi4KICAqCiAgKiBCdWlsZCBhIG5vZGUgbGlzdCB0cmVlIGNvcHkgb2YgdGhlIFhQb2ludGVyIHJlc3VsdC4KQEAgLTExMzcsMTUgKzk3MSwxMSBAQAogICogICAgICAgICB0aGUgY2FsbGVyIGhhcyB0byBmcmVlIHRoZSBub2RlIHRyZWUuCiAgKi8KIHN0YXRpYyB4bWxOb2RlUHRyCi14bWxYSW5jbHVkZUNvcHlYUG9pbnRlcih4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sRG9jUHRyIHRhcmdldCwKLQkgICAgICAgICAgICAgICAgeG1sRG9jUHRyIHNvdXJjZSwgeG1sWFBhdGhPYmplY3RQdHIgb2JqKSB7Ci0gICAgeG1sTm9kZVB0ciBsaXN0ID0gTlVMTCwgbGFzdCA9IE5VTEw7Cit4bWxYSW5jbHVkZUNvcHlYUG9pbnRlcih4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sWFBhdGhPYmplY3RQdHIgb2JqKSB7CisgICAgeG1sTm9kZVB0ciBsaXN0ID0gTlVMTCwgbGFzdCA9IE5VTEwsIGNvcHk7CiAgICAgaW50IGk7CiAKLSAgICBpZiAoc291cmNlID09IE5VTEwpCi0Jc291cmNlID0gY3R4dC0+ZG9jOwotICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAodGFyZ2V0ID09IE5VTEwpIHx8IChzb3VyY2UgPT0gTlVMTCkgfHwKLQkob2JqID09IE5VTEwpKQorICAgIGlmICgoY3R4dCA9PSBOVUxMKSB8fCAob2JqID09IE5VTEwpKQogCXJldHVybihOVUxMKTsKICAgICBzd2l0Y2ggKG9iai0+dHlwZSkgewogICAgICAgICBjYXNlIFhQQVRIX05PREVTRVQ6IHsKQEAgLTExNTMsNzAgKzk4Myw1NiBAQAogCSAgICBpZiAoc2V0ID09IE5VTEwpCiAJCXJldHVybihOVUxMKTsKIAkgICAgZm9yIChpID0gMDtpIDwgc2V0LT5ub2RlTnI7aSsrKSB7CisgICAgICAgICAgICAgICAgeG1sTm9kZVB0ciBub2RlOworCiAJCWlmIChzZXQtPm5vZGVUYWJbaV0gPT0gTlVMTCkKIAkJICAgIGNvbnRpbnVlOwogCQlzd2l0Y2ggKHNldC0+bm9kZVRhYltpXS0+dHlwZSkgeworCQkgICAgY2FzZSBYTUxfRE9DVU1FTlRfTk9ERToKKwkJICAgIGNhc2UgWE1MX0hUTUxfRE9DVU1FTlRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB4bWxEb2NHZXRSb290RWxlbWVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHhtbERvY1B0cikgc2V0LT5ub2RlVGFiW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxYSW5jbHVkZUVycihjdHh0LCBzZXQtPm5vZGVUYWJbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VSUl9JTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQgd2l0aG91dCByb290XG4iLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCQkgICAgY2FzZSBYTUxfVEVYVF9OT0RFOgogCQkgICAgY2FzZSBYTUxfQ0RBVEFfU0VDVElPTl9OT0RFOgogCQkgICAgY2FzZSBYTUxfRUxFTUVOVF9OT0RFOgotCQkgICAgY2FzZSBYTUxfRU5USVRZX1JFRl9OT0RFOgotCQkgICAgY2FzZSBYTUxfRU5USVRZX05PREU6CiAJCSAgICBjYXNlIFhNTF9QSV9OT0RFOgogCQkgICAgY2FzZSBYTUxfQ09NTUVOVF9OT0RFOgotCQkgICAgY2FzZSBYTUxfRE9DVU1FTlRfTk9ERToKLQkJICAgIGNhc2UgWE1MX0hUTUxfRE9DVU1FTlRfTk9ERToKLQkJICAgIGNhc2UgWE1MX1hJTkNMVURFX0VORDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZXQtPm5vZGVUYWJbaV07CiAJCQlicmVhazsKLQkJICAgIGNhc2UgWE1MX1hJTkNMVURFX1NUQVJUOiB7Ci0JICAgICAgICAgICAgICAgIHhtbE5vZGVQdHIgdG1wLCBjdXIgPSBzZXQtPm5vZGVUYWJbaV07Ci0KLQkJCWN1ciA9IGN1ci0+bmV4dDsKLQkJCXdoaWxlIChjdXIgIT0gTlVMTCkgewotCQkJICAgIHN3aXRjaChjdXItPnR5cGUpIHsKLQkJCQljYXNlIFhNTF9URVhUX05PREU6Ci0JCQkJY2FzZSBYTUxfQ0RBVEFfU0VDVElPTl9OT0RFOgotCQkJCWNhc2UgWE1MX0VMRU1FTlRfTk9ERToKLQkJCQljYXNlIFhNTF9FTlRJVFlfUkVGX05PREU6Ci0JCQkJY2FzZSBYTUxfRU5USVRZX05PREU6Ci0JCQkJY2FzZSBYTUxfUElfTk9ERToKLQkJCQljYXNlIFhNTF9DT01NRU5UX05PREU6Ci0JCQkJICAgIHRtcCA9IHhtbFhJbmNsdWRlQ29weU5vZGUoY3R4dCwgdGFyZ2V0LAotCQkJCQkJCSAgICAgIHNvdXJjZSwgY3VyKTsKLQkJCQkgICAgaWYgKGxhc3QgPT0gTlVMTCkgewotCQkJCQlsaXN0ID0gbGFzdCA9IHRtcDsKLQkJCQkgICAgfSBlbHNlIHsKLQkJCQkJbGFzdCA9IHhtbEFkZE5leHRTaWJsaW5nKGxhc3QsIHRtcCk7Ci0JCQkJICAgIH0KLQkJCQkgICAgY3VyID0gY3VyLT5uZXh0OwotCQkJCSAgICBjb250aW51ZTsKLQkJCQlkZWZhdWx0OgotCQkJCSAgICBicmVhazsKLQkJCSAgICB9Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJICAgIGNhc2UgWE1MX0FUVFJJQlVURV9OT0RFOgotCQkgICAgY2FzZSBYTUxfTkFNRVNQQUNFX0RFQ0w6Ci0JCSAgICBjYXNlIFhNTF9ET0NVTUVOVF9UWVBFX05PREU6Ci0JCSAgICBjYXNlIFhNTF9ET0NVTUVOVF9GUkFHX05PREU6Ci0JCSAgICBjYXNlIFhNTF9OT1RBVElPTl9OT0RFOgotCQkgICAgY2FzZSBYTUxfRFREX05PREU6Ci0JCSAgICBjYXNlIFhNTF9FTEVNRU5UX0RFQ0w6Ci0JCSAgICBjYXNlIFhNTF9BVFRSSUJVVEVfREVDTDoKLQkJICAgIGNhc2UgWE1MX0VOVElUWV9ERUNMOgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgc2V0LT5ub2RlVGFiW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX1hQVFJfUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbm9kZSB0eXBlIGluIFhQdHIgcmVzdWx0XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAJCQljb250aW51ZTsgLyogZm9yICovCiAJCX0KLQkJaWYgKGxhc3QgPT0gTlVMTCkKLQkJICAgIGxpc3QgPSBsYXN0ID0geG1sWEluY2x1ZGVDb3B5Tm9kZShjdHh0LCB0YXJnZXQsIHNvdXJjZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC0+bm9kZVRhYltpXSk7Ci0JCWVsc2UgewotCQkgICAgeG1sQWRkTmV4dFNpYmxpbmcobGFzdCwKLQkJCSAgICB4bWxYSW5jbHVkZUNvcHlOb2RlKGN0eHQsIHRhcmdldCwgc291cmNlLAotCQkJCSAgICAgICAgICAgICAgICBzZXQtPm5vZGVUYWJbaV0pKTsKLQkJICAgIGlmIChsYXN0LT5uZXh0ICE9IE5VTEwpCi0JCQlsYXN0ID0gbGFzdC0+bmV4dDsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIE9QVElNSVpFIFRPRE86IEV4dGVybmFsIGRvY3VtZW50cyBzaG91bGQgYWxyZWFkeSBiZQorICAgICAgICAgICAgICAgICAqIGV4cGFuZGVkLCBzbyB4bWxEb2NDb3B5Tm9kZSBzaG91bGQgd29yayBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAqIHhtbFhJbmNsdWRlQ29weU5vZGUgaXMgb25seSByZXF1aXJlZCBmb3IgdGhlIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgKiBkb2N1bWVudC4KKyAgICAgICAgICAgICAgICAgKi8KKwkJY29weSA9IHhtbFhJbmNsdWRlQ29weU5vZGUoY3R4dCwgbm9kZSwgMCk7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICB4bWxGcmVlTm9kZUxpc3QobGlzdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisJCWlmIChsYXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGNvcHk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxhc3QtPm5leHQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBsYXN0LT5uZXh0OworICAgICAgICAgICAgICAgICAgICBjb3B5LT5wcmV2ID0gbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgbGFzdC0+bmV4dCA9IGNvcHk7CiAJCX0KKyAgICAgICAgICAgICAgICBsYXN0ID0gY29weTsKIAkgICAgfQogCSAgICBicmVhazsKIAl9CkBAIC0xMjI3LDEyICsxMDQzLDExIEBACiAJCXJldHVybihOVUxMKTsKIAkgICAgZm9yIChpID0gMDtpIDwgc2V0LT5sb2NOcjtpKyspIHsKIAkJaWYgKGxhc3QgPT0gTlVMTCkKLQkJICAgIGxpc3QgPSBsYXN0ID0geG1sWEluY2x1ZGVDb3B5WFBvaW50ZXIoY3R4dCwgdGFyZ2V0LCBzb3VyY2UsCisJCSAgICBsaXN0ID0gbGFzdCA9IHhtbFhJbmNsdWRlQ29weVhQb2ludGVyKGN0eHQsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LT5sb2NUYWJbaV0pOwogCQllbHNlCiAJCSAgICB4bWxBZGROZXh0U2libGluZyhsYXN0LAotCQkJICAgIHhtbFhJbmNsdWRlQ29weVhQb2ludGVyKGN0eHQsIHRhcmdldCwgc291cmNlLAotCQkJCSAgICAgICAgICAgICAgICAgICAgc2V0LT5sb2NUYWJbaV0pKTsKKwkJCSAgICB4bWxYSW5jbHVkZUNvcHlYUG9pbnRlcihjdHh0LCBzZXQtPmxvY1RhYltpXSkpOwogCQlpZiAobGFzdCAhPSBOVUxMKSB7CiAJCSAgICB3aGlsZSAobGFzdC0+bmV4dCAhPSBOVUxMKQogCQkJbGFzdCA9IGxhc3QtPm5leHQ7CkBAIC0xMjQxLDcgKzEwNTYsNyBAQAogCSAgICBicmVhazsKIAl9CiAJY2FzZSBYUEFUSF9SQU5HRToKLQkgICAgcmV0dXJuKHhtbFhJbmNsdWRlQ29weVJhbmdlKGN0eHQsIHRhcmdldCwgc291cmNlLCBvYmopKTsKKwkgICAgcmV0dXJuKHhtbFhJbmNsdWRlQ29weVJhbmdlKGN0eHQsIG9iaikpOwogCWNhc2UgWFBBVEhfUE9JTlQ6CiAJICAgIC8qIHBvaW50cyBhcmUgaWdub3JlZCBpbiBYSW5jbHVkZSAqLwogCSAgICBicmVhazsKQEAgLTEyNjgsNyArMTA4Myw3IEBACiAgKiB4bWxYSW5jbHVkZU1lcmdlT25lRW50aXR5OgogICogQGVudDogdGhlIGVudGl0eQogICogQGRvYzogIHRoZSBpbmNsdWRpbmcgZG9jCi0gKiBAbnI6IHRoZSBlbnRpdHkgbmFtZQorICogQG5hbWU6IHRoZSBlbnRpdHkgbmFtZQogICoKICAqIEltcGxlbWVudHMgdGhlIG1lcmdlIG9mIG9uZSBlbnRpdHkKICAqLwpAQCAtMTQwNiw1OSArMTIyMSw1MCBAQAogICogeG1sWEluY2x1ZGVMb2FkRG9jOgogICogQGN0eHQ6ICB0aGUgWEluY2x1ZGUgY29udGV4dAogICogQHVybDogIHRoZSBhc3NvY2lhdGVkIFVSTAotICogQG5yOiAgdGhlIHhpbmNsdWRlIG5vZGUgbnVtYmVyCisgKiBAcmVmOiAgYW4gWE1MWGluY2x1ZGVSZWZQdHIKICAqCiAgKiBMb2FkIHRoZSBkb2N1bWVudCwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIFhJbmNsdWRlIGNvbnRleHQKICAqCiAgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBpbiBjYXNlIG9mIGZhaWx1cmUKICAqLwogc3RhdGljIGludAoteG1sWEluY2x1ZGVMb2FkRG9jKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICp1cmwsIGludCBucikgeworeG1sWEluY2x1ZGVMb2FkRG9jKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICp1cmwsCisgICAgICAgICAgICAgICAgICAgeG1sWEluY2x1ZGVSZWZQdHIgcmVmKSB7CisgICAgeG1sWEluY2x1ZGVEb2NQdHIgY2FjaGU7CiAgICAgeG1sRG9jUHRyIGRvYzsKICAgICB4bWxVUklQdHIgdXJpOwotICAgIHhtbENoYXIgKlVSTDsKKyAgICB4bWxDaGFyICpVUkwgPSBOVUxMOwogICAgIHhtbENoYXIgKmZyYWdtZW50ID0gTlVMTDsKICAgICBpbnQgaSA9IDA7CisgICAgaW50IHJldCA9IC0xOworICAgIGludCBjYWNoZU5yOwogI2lmZGVmIExJQlhNTF9YUFRSX0VOQUJMRUQKICAgICBpbnQgc2F2ZUZsYWdzOwogI2VuZGlmCiAKLSNpZmRlZiBERUJVR19YSU5DTFVERQotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiTG9hZGluZyBkb2MgJXM6JWRcbiIsIHVybCwgbnIpOwotI2VuZGlmCiAgICAgLyoKICAgICAgKiBDaGVjayB0aGUgVVJMIGFuZCByZW1vdmUgYW55IGZyYWdtZW50IGlkZW50aWZpZXIKICAgICAgKi8KICAgICB1cmkgPSB4bWxQYXJzZVVSSSgoY29uc3QgY2hhciAqKXVybCk7CiAgICAgaWYgKHVyaSA9PSBOVUxMKSB7Ci0JeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLAotCSAgICAgICAgICAgICAgIFhNTF9YSU5DTFVERV9IUkVGX1VSSSwKKwl4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sIFhNTF9YSU5DTFVERV9IUkVGX1VSSSwKIAkJICAgICAgICJpbnZhbGlkIHZhbHVlIFVSSSAlc1xuIiwgdXJsKTsKLQlyZXR1cm4oLTEpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAodXJpLT5mcmFnbWVudCAhPSBOVUxMKSB7CiAJZnJhZ21lbnQgPSAoeG1sQ2hhciAqKSB1cmktPmZyYWdtZW50OwogCXVyaS0+ZnJhZ21lbnQgPSBOVUxMOwogICAgIH0KLSAgICBpZiAoKGN0eHQtPmluY1RhYiAhPSBOVUxMKSAmJiAoY3R4dC0+aW5jVGFiW25yXSAhPSBOVUxMKSAmJgotICAgICAgICAoY3R4dC0+aW5jVGFiW25yXS0+ZnJhZ21lbnQgIT0gTlVMTCkpIHsKKyAgICBpZiAocmVmLT5mcmFnbWVudCAhPSBOVUxMKSB7CiAJaWYgKGZyYWdtZW50ICE9IE5VTEwpIHhtbEZyZWUoZnJhZ21lbnQpOwotCWZyYWdtZW50ID0geG1sU3RyZHVwKGN0eHQtPmluY1RhYltucl0tPmZyYWdtZW50KTsKKwlmcmFnbWVudCA9IHhtbFN0cmR1cChyZWYtPmZyYWdtZW50KTsKICAgICB9CiAgICAgVVJMID0geG1sU2F2ZVVyaSh1cmkpOwogICAgIHhtbEZyZWVVUkkodXJpKTsKICAgICBpZiAoVVJMID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGN0eHQtPmluY1RhYiAhPSBOVUxMKQotCSAgICB4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCi0JCQkgICBYTUxfWElOQ0xVREVfSFJFRl9VUkksCi0JCQkgICAiaW52YWxpZCB2YWx1ZSBVUkkgJXNcbiIsIHVybCk7Ci0JZWxzZQotCSAgICB4bWxYSW5jbHVkZUVycihjdHh0LCBOVUxMLAotCQkJICAgWE1MX1hJTkNMVURFX0hSRUZfVVJJLAotCQkJICAgImludmFsaWQgdmFsdWUgVVJJICVzXG4iLCB1cmwpOwotCWlmIChmcmFnbWVudCAhPSBOVUxMKQotCSAgICB4bWxGcmVlKGZyYWdtZW50KTsKLQlyZXR1cm4oLTEpOworICAgICAgICB4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sIFhNTF9YSU5DTFVERV9IUkVGX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgVVJJICVzXG4iLCB1cmwpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qCkBAIC0xNDcyLDE1ICsxMjc4LDE4IEBACiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBQcmV2ZW50IHJlbG9hZGluZyB0d2ljZSB0aGUgZG9jdW1lbnQuCisgICAgICogUHJldmVudCByZWxvYWRpbmcgdGhlIGRvY3VtZW50IHR3aWNlLgogICAgICAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBjdHh0LT5pbmNOcjsgaSsrKSB7Ci0JaWYgKCh4bWxTdHJFcXVhbChVUkwsIGN0eHQtPmluY1RhYltpXS0+VVJJKSkgJiYKLQkgICAgKGN0eHQtPmluY1RhYltpXS0+ZG9jICE9IE5VTEwpKSB7Ci0JICAgIGRvYyA9IGN0eHQtPmluY1RhYltpXS0+ZG9jOwotI2lmZGVmIERFQlVHX1hJTkNMVURFCi0JICAgIHByaW50ZigiQWxyZWFkeSBsb2FkZWQgJXNcbiIsIFVSTCk7Ci0jZW5kaWYKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3R4dC0+dXJsTnI7IGkrKykgeworCWlmICh4bWxTdHJFcXVhbChVUkwsIGN0eHQtPnVybFRhYltpXS51cmwpKSB7CisgICAgICAgICAgICBpZiAoY3R4dC0+dXJsVGFiW2ldLmV4cGFuZGluZykgeworICAgICAgICAgICAgICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIHJlZi0+ZWxlbSwgWE1MX1hJTkNMVURFX1JFQ1VSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVzaW9uIGxvb3AgZGV0ZWN0ZWRcbiIsIE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisJICAgIGRvYyA9IGN0eHQtPnVybFRhYltpXS5kb2M7CisgICAgICAgICAgICBpZiAoZG9jID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAkgICAgZ290byBsb2FkZWQ7CiAJfQogICAgIH0KQEAgLTE0ODgsOSArMTI5Nyw2IEBACiAgICAgLyoKICAgICAgKiBMb2FkIGl0LgogICAgICAqLwotI2lmZGVmIERFQlVHX1hJTkNMVURFCi0gICAgcHJpbnRmKCJsb2FkaW5nICVzXG4iLCBVUkwpOwotI2VuZGlmCiAjaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAogICAgIC8qCiAgICAgICogSWYgdGhpcyBpcyBhbiBYUG9pbnRlciBldmFsdWF0aW9uLCB3ZSB3YW50IHRvIGFzc3VyZSB0aGF0CkBAIC0xNTA3LDEzICsxMzEzLDM0IEBACiAjaWZkZWYgTElCWE1MX1hQVFJfRU5BQkxFRAogICAgIGN0eHQtPnBhcnNlRmxhZ3MgPSBzYXZlRmxhZ3M7CiAjZW5kaWYKLSAgICBpZiAoZG9jID09IE5VTEwpIHsKLQl4bWxGcmVlKFVSTCk7Ci0JaWYgKGZyYWdtZW50ICE9IE5VTEwpCi0JICAgIHhtbEZyZWUoZnJhZ21lbnQpOwotCXJldHVybigtMSk7CisKKyAgICAvKiBBbHNvIGNhY2hlIE5VTEwgZG9jcyAqLworICAgIGlmIChjdHh0LT51cmxOciA+PSBjdHh0LT51cmxNYXgpIHsKKyAgICAgICAgeG1sWEluY2x1ZGVEb2MgKnRtcDsKKyNpZmRlZiBGVVpaSU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gY3R4dC0+dXJsTWF4ID8gY3R4dC0+dXJsTWF4ICogMiA6IDE7CisjZWxzZQorICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGN0eHQtPnVybE1heCA/IGN0eHQtPnVybE1heCAqIDIgOiA4OworI2VuZGlmCisKKyAgICAgICAgdG1wID0geG1sUmVhbGxvYyhjdHh0LT51cmxUYWIsIHNpemVvZih4bWxYSW5jbHVkZURvYykgKiBuZXdTaXplKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICB4bWxYSW5jbHVkZUVyck1lbW9yeShjdHh0LCByZWYtPmVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3Jvd2luZyBYSW5jbHVkZSBVUkwgdGFibGUiKTsKKyAgICAgICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgY3R4dC0+dXJsTWF4ID0gbmV3U2l6ZTsKKyAgICAgICAgY3R4dC0+dXJsVGFiID0gdG1wOwogICAgIH0KLSAgICBjdHh0LT5pbmNUYWJbbnJdLT5kb2MgPSBkb2M7CisgICAgY2FjaGVOciA9IGN0eHQtPnVybE5yKys7CisgICAgY2FjaGUgPSAmY3R4dC0+dXJsVGFiW2NhY2hlTnJdOworICAgIGNhY2hlLT5kb2MgPSBkb2M7CisgICAgY2FjaGUtPnVybCA9IHhtbFN0cmR1cChVUkwpOworICAgIGNhY2hlLT5leHBhbmRpbmcgPSAwOworCisgICAgaWYgKGRvYyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIC8qCiAgICAgICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSByZXF1ZXN0ZWQgVVJMIGhhcyBiZWVuIG1hcHBlZCB0byBhCiAgICAgICogY29tcGxldGVseSBkaWZmZXJlbnQgbG9jYXRpb24gKGUuZy4gdGhyb3VnaCBhIGNhdGFsb2cgZW50cnkpLgpAQCAtMTUyNCwxNSArMTM1MSw2IEBACiAgICAgICAgeG1sRnJlZShVUkwpOwogICAgICAgIFVSTCA9IHhtbFN0cmR1cChkb2MtPlVSTCk7CiAgICB9Ci0gICAgZm9yIChpID0gbnIgKyAxOyBpIDwgY3R4dC0+aW5jTnI7IGkrKykgewotCWlmICh4bWxTdHJFcXVhbChVUkwsIGN0eHQtPmluY1RhYltpXS0+VVJJKSkgewotCSAgICBjdHh0LT5pbmNUYWJbbnJdLT5jb3VudCsrOwotI2lmZGVmIERFQlVHX1hJTkNMVURFCi0JICAgIHByaW50ZigiSW5jcmVhc2luZyAlcyBjb3VudCBzaW5jZSByZXVzZWRcbiIsIFVSTCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotCX0KLSAgICB9CiAKICAgICAvKgogICAgICAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBlbnRpdGllcyBmaXhlZCB1cApAQCAtMTU1MiwxNSArMTM3MCwxOCBAQAogCWRvYy0+ZXh0U3Vic2V0ID0gTlVMTDsKICAgICB9CiAgICAgICovCisgICAgY2FjaGUtPmV4cGFuZGluZyA9IDE7CiAgICAgeG1sWEluY2x1ZGVSZWN1cnNlRG9jKGN0eHQsIGRvYywgVVJMKTsKKyAgICAvKiB1cmxUYWIgbWlnaHQgYmUgcmVhbGxvY2F0ZWQuICovCisgICAgY2FjaGUgPSAmY3R4dC0+dXJsVGFiW2NhY2hlTnJdOworICAgIGNhY2hlLT5leHBhbmRpbmcgPSAwOwogCiBsb2FkZWQ6CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwpIHsKIAkvKgogCSAqIEFkZCB0aGUgdG9wIGNoaWxkcmVuIGxpc3QgYXMgdGhlIHJlcGxhY2VtZW50IGNvcHkuCiAJICovCi0JY3R4dC0+aW5jVGFiW25yXS0+aW5jID0geG1sWEluY2x1ZGVDb3B5Tm9kZUxpc3QoY3R4dCwgY3R4dC0+ZG9jLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jLCBkb2MtPmNoaWxkcmVuKTsKKyAgICAgICAgcmVmLT5pbmMgPSB4bWxEb2NDb3B5Tm9kZSh4bWxEb2NHZXRSb290RWxlbWVudChkb2MpLCBjdHh0LT5kb2MsIDEpOwogICAgIH0KICNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECiAgICAgZWxzZSB7CkBAIC0xNTcyLDI1ICsxMzkzLDI2IEBACiAJeG1sWFBhdGhDb250ZXh0UHRyIHhwdHJjdHh0OwogCXhtbE5vZGVTZXRQdHIgc2V0OwogCisgICAgICAgIGlmIChjdHh0LT5pc1N0cmVhbSAmJiBkb2MgPT0gY3R4dC0+ZG9jKSB7CisJICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIHJlZi0+ZWxlbSwgWE1MX1hJTkNMVURFX1hQVFJfRkFJTEVELAorCQkJICAgIlhQb2ludGVyIGV4cHJlc3Npb25zIG5vdCBhbGxvd2VkIGluIHN0cmVhbWluZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbW9kZVxuIiwgTlVMTCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKIAl4cHRyY3R4dCA9IHhtbFhQdHJOZXdDb250ZXh0KGRvYywgTlVMTCwgTlVMTCk7CiAJaWYgKHhwdHJjdHh0ID09IE5VTEwpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLAotCSAgICAgICAgICAgICAgICAgICBYTUxfWElOQ0xVREVfWFBUUl9GQUlMRUQsCisJICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIHJlZi0+ZWxlbSwgWE1MX1hJTkNMVURFX1hQVFJfRkFJTEVELAogCQkJICAgImNvdWxkIG5vdCBjcmVhdGUgWFBvaW50ZXIgY29udGV4dFxuIiwgTlVMTCk7Ci0JICAgIHhtbEZyZWUoVVJMKTsKLQkgICAgeG1sRnJlZShmcmFnbWVudCk7Ci0JICAgIHJldHVybigtMSk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogCX0KIAl4cHRyID0geG1sWFB0ckV2YWwoZnJhZ21lbnQsIHhwdHJjdHh0KTsKIAlpZiAoeHB0ciA9PSBOVUxMKSB7Ci0JICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIGN0eHQtPmluY1RhYltucl0tPnJlZiwKLQkgICAgICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX1hQVFJfRkFJTEVELAorCSAgICB4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sIFhNTF9YSU5DTFVERV9YUFRSX0ZBSUxFRCwKIAkJCSAgICJYUG9pbnRlciBldmFsdWF0aW9uIGZhaWxlZDogIyVzXG4iLAogCQkJICAgZnJhZ21lbnQpOwogCSAgICB4bWxYUGF0aEZyZWVDb250ZXh0KHhwdHJjdHh0KTsKLQkgICAgeG1sRnJlZShVUkwpOwotCSAgICB4bWxGcmVlKGZyYWdtZW50KTsKLQkgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAJfQogCXN3aXRjaCAoeHB0ci0+dHlwZSkgewogCSAgICBjYXNlIFhQQVRIX1VOREVGSU5FRDoKQEAgLTE2MDIsMjMgKzE0MjQsMTggQEAKICNlbmRpZgogCSAgICBjYXNlIFhQQVRIX1VTRVJTOgogCSAgICBjYXNlIFhQQVRIX1hTTFRfVFJFRToKLQkJeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLAotCQkgICAgICAgICAgICAgICBYTUxfWElOQ0xVREVfWFBUUl9SRVNVTFQsCisJCXhtbFhJbmNsdWRlRXJyKGN0eHQsIHJlZi0+ZWxlbSwgWE1MX1hJTkNMVURFX1hQVFJfUkVTVUxULAogCQkJICAgICAgICJYUG9pbnRlciBpcyBub3QgYSByYW5nZTogIyVzXG4iLAogCQkJICAgICAgIGZyYWdtZW50KTsKICAgICAgICAgICAgICAgICB4bWxYUGF0aEZyZWVPYmplY3QoeHB0cik7CiAJCXhtbFhQYXRoRnJlZUNvbnRleHQoeHB0cmN0eHQpOwotCQl4bWxGcmVlKFVSTCk7Ci0JCXhtbEZyZWUoZnJhZ21lbnQpOwotCQlyZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAJICAgIGNhc2UgWFBBVEhfTk9ERVNFVDoKIAkgICAgICAgIGlmICgoeHB0ci0+bm9kZXNldHZhbCA9PSBOVUxMKSB8fAogCQkgICAgKHhwdHItPm5vZGVzZXR2YWwtPm5vZGVOciA8PSAwKSkgewogICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aEZyZWVPYmplY3QoeHB0cik7CiAJCSAgICB4bWxYUGF0aEZyZWVDb250ZXh0KHhwdHJjdHh0KTsKLQkJICAgIHhtbEZyZWUoVVJMKTsKLQkJICAgIHhtbEZyZWUoZnJhZ21lbnQpOwotCQkgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAkJfQogCiAjaWZkZWYgTElCWE1MX1hQVFJfTE9DU19FTkFCTEVECkBAIC0xNjQ1LDE0ICsxNDYyLDE0IEBACiAJCQljb250aW51ZTsKIAogCQkgICAgY2FzZSBYTUxfQVRUUklCVVRFX05PREU6Ci0JCQl4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCisJCQl4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sCiAJCQkgICAgICAgICAgICAgICBYTUxfWElOQ0xVREVfWFBUUl9SRVNVTFQsCiAJCQkJICAgICAgICJYUG9pbnRlciBzZWxlY3RzIGFuIGF0dHJpYnV0ZTogIyVzXG4iLAogCQkJCSAgICAgICBmcmFnbWVudCk7CiAJCQlzZXQtPm5vZGVUYWJbaV0gPSBOVUxMOwogCQkJY29udGludWU7CiAJCSAgICBjYXNlIFhNTF9OQU1FU1BBQ0VfREVDTDoKLQkJCXhtbFhJbmNsdWRlRXJyKGN0eHQsIGN0eHQtPmluY1RhYltucl0tPnJlZiwKKwkJCXhtbFhJbmNsdWRlRXJyKGN0eHQsIHJlZi0+ZWxlbSwKIAkJCSAgICAgICAgICAgICAgIFhNTF9YSU5DTFVERV9YUFRSX1JFU1VMVCwKIAkJCQkgICAgICAgIlhQb2ludGVyIHNlbGVjdHMgYSBuYW1lc3BhY2U6ICMlc1xuIiwKIAkJCQkgICAgICAgZnJhZ21lbnQpOwpAQCAtMTY2Nyw3ICsxNDg0LDcgQEAKIAkJICAgIGNhc2UgWE1MX0VOVElUWV9ERUNMOgogCQkgICAgY2FzZSBYTUxfWElOQ0xVREVfU1RBUlQ6CiAJCSAgICBjYXNlIFhNTF9YSU5DTFVERV9FTkQ6Ci0JCQl4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCisJCQl4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sCiAJCQkgICAgICAgICAgICAgICBYTUxfWElOQ0xVREVfWFBUUl9SRVNVTFQsCiAJCQkJICAgIlhQb2ludGVyIHNlbGVjdHMgdW5leHBlY3RlZCBub2RlczogIyVzXG4iLAogCQkJCSAgICAgICBmcmFnbWVudCk7CkBAIC0xNjc3LDExICsxNDk0LDkgQEAKIAkJfQogCSAgICB9CiAJfQotICAgICAgICBjdHh0LT5pbmNUYWJbbnJdLT5pbmMgPQotICAgICAgICAgICAgeG1sWEluY2x1ZGVDb3B5WFBvaW50ZXIoY3R4dCwgY3R4dC0+ZG9jLCBkb2MsIHhwdHIpOworICAgICAgICByZWYtPmluYyA9IHhtbFhJbmNsdWRlQ29weVhQb2ludGVyKGN0eHQsIHhwdHIpOwogICAgICAgICB4bWxYUGF0aEZyZWVPYmplY3QoeHB0cik7CiAJeG1sWFBhdGhGcmVlQ29udGV4dCh4cHRyY3R4dCk7Ci0JeG1sRnJlZShmcmFnbWVudCk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTE2OTksOCArMTUxNCw3IEBACiAJICogVGhlIGJhc2UgaXMgb25seSBhZGp1c3RlZCBpZiAibmVjZXNzYXJ5IiwgaS5lLiBpZiB0aGUgeGluY2x1ZGUgbm9kZQogCSAqIGhhcyBhIGJhc2Ugc3BlY2lmaWVkLCBvciB0aGUgVVJMIGlzIHJlbGF0aXZlCiAJICovCi0JYmFzZSA9IHhtbEdldE5zUHJvcChjdHh0LT5pbmNUYWJbbnJdLT5yZWYsIEJBRF9DQVNUICJiYXNlIiwKLQkJCVhNTF9YTUxfTkFNRVNQQUNFKTsKKwliYXNlID0geG1sR2V0TnNQcm9wKHJlZi0+ZWxlbSwgQkFEX0NBU1QgImJhc2UiLCBYTUxfWE1MX05BTUVTUEFDRSk7CiAJaWYgKGJhc2UgPT0gTlVMTCkgewogCSAgICAvKgogCSAgICAgKiBObyB4bWw6YmFzZSBvbiB0aGUgeGluY2x1ZGUgbm9kZSwgc28gd2UgY2hlY2sgd2hldGhlciB0aGUKQEAgLTE3MDgsMTkgKzE1MjIsMTggQEAKIAkgICAgICovCiAJICAgIGN1ckJhc2UgPSB4bWxCdWlsZFJlbGF0aXZlVVJJKFVSTCwgY3R4dC0+YmFzZSk7CiAJICAgIGlmIChjdXJCYXNlID09IE5VTEwpIHsJLyogRXJyb3IgcmV0dXJuICovCi0JICAgICAgICB4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCi0JICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX0hSRUZfVVJJLAorCSAgICAgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgcmVmLT5lbGVtLCBYTUxfWElOQ0xVREVfSFJFRl9VUkksCiAJCSAgICAgICAidHJ5aW5nIHRvIGJ1aWxkIHJlbGF0aXZlIFVSSSBmcm9tICVzXG4iLCBVUkwpOwogCSAgICB9IGVsc2UgewogCQkvKiBJZiB0aGUgVVJJIGRvZXNuJ3QgY29udGFpbiBhIHNsYXNoLCBpdCdzIG5vdCByZWxhdGl2ZSAqLwotCSAgICAgICAgaWYgKCF4bWxTdHJjaHIoY3VyQmFzZSwgKHhtbENoYXIpICcvJykpCisJICAgICAgICBpZiAoIXhtbFN0cmNocihjdXJCYXNlLCAnLycpKQogCQkgICAgeG1sRnJlZShjdXJCYXNlKTsKIAkJZWxzZQogCQkgICAgYmFzZSA9IGN1ckJhc2U7CiAJICAgIH0KIAl9CiAJaWYgKGJhc2UgIT0gTlVMTCkgewkvKiBBZGp1c3RtZW50IG1heSBiZSBuZWVkZWQgKi8KLQkgICAgbm9kZSA9IGN0eHQtPmluY1RhYltucl0tPmluYzsKKwkgICAgbm9kZSA9IHJlZi0+aW5jOwogCSAgICB3aGlsZSAobm9kZSAhPSBOVUxMKSB7CiAJCS8qIE9ubHkgd29yayBvbiBlbGVtZW50IG5vZGVzICovCiAJCWlmIChub2RlLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpIHsKQEAgLTE3NTAsNyArMTU2Myw3IEBACiAJCQkJcmVsQmFzZSA9IHhtbEJ1aWxkVVJJKHhtbEJhc2UsIGJhc2UpOwogCQkJCWlmIChyZWxCYXNlID09IE5VTEwpIHsgLyogZXJyb3IgKi8KIAkJCQkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwKLQkJCQkJCWN0eHQtPmluY1RhYltucl0tPnJlZiwKKwkJCQkJCXJlZi0+ZWxlbSwKIAkJCQkJCVhNTF9YSU5DTFVERV9IUkVGX1VSSSwKIAkJCQkJInRyeWluZyB0byByZWJ1aWxkIGJhc2UgZnJvbSAlc1xuIiwKIAkJCQkJCXhtbEJhc2UpOwpAQCAtMTc2OSw0MCArMTU4Miw0MCBAQAogCSAgICB4bWxGcmVlKGJhc2UpOwogCX0KICAgICB9Ci0gICAgaWYgKChuciA8IGN0eHQtPmluY05yKSAmJiAoY3R4dC0+aW5jVGFiW25yXS0+ZG9jICE9IE5VTEwpICYmCi0JKGN0eHQtPmluY1RhYltucl0tPmNvdW50IDw9IDEpKSB7Ci0jaWZkZWYgREVCVUdfWElOQ0xVREUKLSAgICAgICAgcHJpbnRmKCJmcmVlaW5nICVzXG4iLCBjdHh0LT5pbmNUYWJbbnJdLT5kb2MtPlVSTCk7Ci0jZW5kaWYKLQl4bWxGcmVlRG9jKGN0eHQtPmluY1RhYltucl0tPmRvYyk7Ci0JY3R4dC0+aW5jVGFiW25yXS0+ZG9jID0gTlVMTDsKLSAgICB9CisgICAgcmV0ID0gMDsKKworZXJyb3I6CiAgICAgeG1sRnJlZShVUkwpOwotICAgIHJldHVybigwKTsKKyAgICB4bWxGcmVlKGZyYWdtZW50KTsKKyAgICByZXR1cm4ocmV0KTsKIH0KIAogLyoqCiAgKiB4bWxYSW5jbHVkZUxvYWRUeHQ6CiAgKiBAY3R4dDogIHRoZSBYSW5jbHVkZSBjb250ZXh0CiAgKiBAdXJsOiAgdGhlIGFzc29jaWF0ZWQgVVJMCi0gKiBAbnI6ICB0aGUgeGluY2x1ZGUgbm9kZSBudW1iZXIKKyAqIEByZWY6ICBhbiBYTUxYaW5jbHVkZVJlZlB0cgogICoKICAqIExvYWQgdGhlIGNvbnRlbnQsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBYSW5jbHVkZSBjb250ZXh0CiAgKgogICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgLTEgaW4gY2FzZSBvZiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQKLXhtbFhJbmNsdWRlTG9hZFR4dCh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqdXJsLCBpbnQgbnIpIHsKK3htbFhJbmNsdWRlTG9hZFR4dCh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgY29uc3QgeG1sQ2hhciAqdXJsLAorICAgICAgICAgICAgICAgICAgIHhtbFhJbmNsdWRlUmVmUHRyIHJlZikgewogICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGJ1ZjsKLSAgICB4bWxOb2RlUHRyIG5vZGU7Ci0gICAgeG1sVVJJUHRyIHVyaTsKLSAgICB4bWxDaGFyICpVUkw7CisgICAgeG1sTm9kZVB0ciBub2RlID0gTlVMTDsKKyAgICB4bWxVUklQdHIgdXJpID0gTlVMTDsKKyAgICB4bWxDaGFyICpVUkwgPSBOVUxMOwogICAgIGludCBpOworICAgIGludCByZXQgPSAtMTsKICAgICB4bWxDaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgeG1sQ2hhckVuY29kaW5nIGVuYyA9ICh4bWxDaGFyRW5jb2RpbmcpIDA7Ci0gICAgeG1sUGFyc2VyQ3R4dFB0ciBwY3R4dDsKLSAgICB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dFN0cmVhbTsKLSAgICBpbnQgeGluY2x1ZGVfbXVsdGlieXRlX2ZhbGxiYWNrX3VzZWQgPSAwOworICAgIHhtbFBhcnNlckN0eHRQdHIgcGN0eHQgPSBOVUxMOworICAgIHhtbFBhcnNlcklucHV0UHRyIGlucHV0U3RyZWFtID0gTlVMTDsKKyAgICBpbnQgbGVuOworICAgIGNvbnN0IHhtbENoYXIgKmNvbnRlbnQ7CisKIAogICAgIC8qIERvbid0IHJlYWQgZnJvbSBzdGRpbi4gKi8KICAgICBpZiAoeG1sU3RyY21wKHVybCwgQkFEX0NBU1QgIi0iKSA9PSAwKQpAQCAtMTgxMywyMyArMTYyNiwyMSBAQAogICAgICAqLwogICAgIHVyaSA9IHhtbFBhcnNlVVJJKChjb25zdCBjaGFyICopdXJsKTsKICAgICBpZiAodXJpID09IE5VTEwpIHsKLQl4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsIFhNTF9YSU5DTFVERV9IUkVGX1VSSSwKKwl4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sIFhNTF9YSU5DTFVERV9IUkVGX1VSSSwKIAkgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZSBVUkkgJXNcbiIsIHVybCk7Ci0JcmV0dXJuKC0xKTsKKwlnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAodXJpLT5mcmFnbWVudCAhPSBOVUxMKSB7Ci0JeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLCBYTUxfWElOQ0xVREVfVEVYVF9GUkFHTUVOVCwKKwl4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sIFhNTF9YSU5DTFVERV9URVhUX0ZSQUdNRU5ULAogCSAgICAgICAgICAgICAgICJmcmFnbWVudCBpZGVudGlmaWVyIGZvcmJpZGRlbiBmb3IgdGV4dDogJXNcbiIsCiAJCSAgICAgICAoY29uc3QgeG1sQ2hhciAqKSB1cmktPmZyYWdtZW50KTsKLQl4bWxGcmVlVVJJKHVyaSk7Ci0JcmV0dXJuKC0xKTsKKwlnb3RvIGVycm9yOwogICAgIH0KICAgICBVUkwgPSB4bWxTYXZlVXJpKHVyaSk7Ci0gICAgeG1sRnJlZVVSSSh1cmkpOwogICAgIGlmIChVUkwgPT0gTlVMTCkgewotCXhtbFhJbmNsdWRlRXJyKGN0eHQsIGN0eHQtPmluY1RhYltucl0tPnJlZiwgWE1MX1hJTkNMVURFX0hSRUZfVVJJLAorCXhtbFhJbmNsdWRlRXJyKGN0eHQsIHJlZi0+ZWxlbSwgWE1MX1hJTkNMVURFX0hSRUZfVVJJLAogCSAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIFVSSSAlc1xuIiwgdXJsKTsKLQlyZXR1cm4oLTEpOworCWdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyoKQEAgLTE4MzcsMjcgKzE2NDgsMjYgQEAKICAgICAgKiBkaXJlY3RseSB0aHJvdWdoIGN0eHQtPmRvYy4KICAgICAgKi8KICAgICBpZiAoVVJMWzBdID09IDApIHsKLQl4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCi0JICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX1RFWFRfRE9DVU1FTlQsCisJeG1sWEluY2x1ZGVFcnIoY3R4dCwgcmVmLT5lbGVtLCBYTUxfWElOQ0xVREVfVEVYVF9ET0NVTUVOVCwKIAkJICAgICAgICJ0ZXh0IHNlcmlhbGl6YXRpb24gb2YgZG9jdW1lbnQgbm90IGF2YWlsYWJsZVxuIiwgTlVMTCk7Ci0JeG1sRnJlZShVUkwpOwotCXJldHVybigtMSk7CisJZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKgotICAgICAqIFByZXZlbnQgcmVsb2FkaW5nIHR3aWNlIHRoZSBkb2N1bWVudC4KKyAgICAgKiBQcmV2ZW50IHJlbG9hZGluZyB0aGUgZG9jdW1lbnQgdHdpY2UuCiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IGN0eHQtPnR4dE5yOyBpKyspIHsKLQlpZiAoeG1sU3RyRXF1YWwoVVJMLCBjdHh0LT50eHR1cmxUYWJbaV0pKSB7Ci0gICAgICAgICAgICBub2RlID0geG1sTmV3RG9jVGV4dChjdHh0LT5kb2MsIGN0eHQtPnR4dFRhYltpXSk7CisJaWYgKHhtbFN0ckVxdWFsKFVSTCwgY3R4dC0+dHh0VGFiW2ldLnVybCkpIHsKKyAgICAgICAgICAgIG5vZGUgPSB4bWxOZXdEb2NUZXh0KGN0eHQtPmRvYywgY3R4dC0+dHh0VGFiW2ldLnRleHQpOwogCSAgICBnb3RvIGxvYWRlZDsKIAl9CiAgICAgfQorCiAgICAgLyoKICAgICAgKiBUcnkgdG8gZ2V0IHRoZSBlbmNvZGluZyBpZiBhdmFpbGFibGUKICAgICAgKi8KLSAgICBpZiAoKGN0eHQtPmluY1RhYltucl0gIT0gTlVMTCkgJiYgKGN0eHQtPmluY1RhYltucl0tPnJlZiAhPSBOVUxMKSkgewotCWVuY29kaW5nID0geG1sR2V0UHJvcChjdHh0LT5pbmNUYWJbbnJdLT5yZWYsIFhJTkNMVURFX1BBUlNFX0VOQ09ESU5HKTsKKyAgICBpZiAocmVmLT5lbGVtICE9IE5VTEwpIHsKKwllbmNvZGluZyA9IHhtbEdldFByb3AocmVmLT5lbGVtLCBYSU5DTFVERV9QQVJTRV9FTkNPRElORyk7CiAgICAgfQogICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7CiAJLyoKQEAgLTE4NjgsMTQgKzE2NzgsMTAgQEAKIAkgKi8KICAgICAgICAgZW5jID0geG1sUGFyc2VDaGFyRW5jb2RpbmcoKGNvbnN0IGNoYXIgKikgZW5jb2RpbmcpOwogCWlmIChlbmMgPT0gWE1MX0NIQVJfRU5DT0RJTkdfRVJST1IpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLAotCSAgICAgICAgICAgICAgICAgICBYTUxfWElOQ0xVREVfVU5LTk9XTl9FTkNPRElORywKKwkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgcmVmLT5lbGVtLCBYTUxfWElOQ0xVREVfVU5LTk9XTl9FTkNPRElORywKIAkJCSAgICJlbmNvZGluZyAlcyBub3Qgc3VwcG9ydGVkXG4iLCBlbmNvZGluZyk7Ci0JICAgIHhtbEZyZWUoZW5jb2RpbmcpOwotCSAgICB4bWxGcmVlKFVSTCk7Ci0JICAgIHJldHVybigtMSk7CisJICAgIGdvdG8gZXJyb3I7CiAJfQotCXhtbEZyZWUoZW5jb2RpbmcpOwogICAgIH0KIAogICAgIC8qCkBAIC0xODgzLDc5ICsxNjg5LDg5IEBACiAgICAgICovCiAgICAgcGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CiAgICAgaW5wdXRTdHJlYW0gPSB4bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKGNvbnN0IGNoYXIqKVVSTCwgTlVMTCwgcGN0eHQpOwotICAgIGlmKGlucHV0U3RyZWFtID09IE5VTEwpIHsKLQl4bWxGcmVlUGFyc2VyQ3R4dChwY3R4dCk7Ci0JeG1sRnJlZShVUkwpOwotCXJldHVybigtMSk7Ci0gICAgfQorICAgIGlmKGlucHV0U3RyZWFtID09IE5VTEwpCisJZ290byBlcnJvcjsKICAgICBidWYgPSBpbnB1dFN0cmVhbS0+YnVmOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotCXhtbEZyZWVJbnB1dFN0cmVhbSAoaW5wdXRTdHJlYW0pOwotCXhtbEZyZWVQYXJzZXJDdHh0KHBjdHh0KTsKLQl4bWxGcmVlKFVSTCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorCWdvdG8gZXJyb3I7CiAgICAgaWYgKGJ1Zi0+ZW5jb2RlcikKIAl4bWxDaGFyRW5jQ2xvc2VGdW5jKGJ1Zi0+ZW5jb2Rlcik7CiAgICAgYnVmLT5lbmNvZGVyID0geG1sR2V0Q2hhckVuY29kaW5nSGFuZGxlcihlbmMpOwogICAgIG5vZGUgPSB4bWxOZXdEb2NUZXh0KGN0eHQtPmRvYywgTlVMTCk7CisgICAgaWYgKG5vZGUgPT0gTlVMTCkgeworICAgICAgICB4bWxYSW5jbHVkZUVyck1lbW9yeShjdHh0LCByZWYtPmVsZW0sIE5VTEwpOworCWdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgLyoKICAgICAgKiBTY2FuIGFsbCBjaGFycyBmcm9tIHRoZSByZXNvdXJjZSBhbmQgYWRkIHRoZSB0byB0aGUgbm9kZQogICAgICAqLwoteGluY2x1ZGVfbXVsdGlieXRlX2ZhbGxiYWNrOgotICAgIHdoaWxlICh4bWxQYXJzZXJJbnB1dEJ1ZmZlclJlYWQoYnVmLCAxMjgpID4gMCkgewotCWludCBsZW47Ci0JY29uc3QgeG1sQ2hhciAqY29udGVudDsKKyAgICB3aGlsZSAoeG1sUGFyc2VySW5wdXRCdWZmZXJSZWFkKGJ1ZiwgNDA5NikgPiAwKQorICAgICAgICA7CiAKLQljb250ZW50ID0geG1sQnVmQ29udGVudChidWYtPmJ1ZmZlcik7Ci0JbGVuID0geG1sQnVmTGVuZ3RoKGJ1Zi0+YnVmZmVyKTsKLQlmb3IgKGkgPSAwO2kgPCBsZW47KSB7Ci0JICAgIGludCBjdXI7Ci0JICAgIGludCBsOworICAgIGNvbnRlbnQgPSB4bWxCdWZDb250ZW50KGJ1Zi0+YnVmZmVyKTsKKyAgICBsZW4gPSB4bWxCdWZMZW5ndGgoYnVmLT5idWZmZXIpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisgICAgICAgIGludCBjdXI7CisgICAgICAgIGludCBsOwogCi0JICAgIGN1ciA9IHhtbFN0cmluZ0N1cnJlbnRDaGFyKE5VTEwsICZjb250ZW50W2ldLCAmbCk7Ci0JICAgIGlmICghSVNfQ0hBUihjdXIpKSB7Ci0JCS8qIEhhbmRsZSBzcGxpdCBtdWx0aWJ5dGUgY2hhciBhdCBidWZmZXIgYm91bmRhcnkgKi8KLQkJaWYgKCgobGVuIC0gaSkgPCA0KSAmJiAoIXhpbmNsdWRlX211bHRpYnl0ZV9mYWxsYmFja191c2VkKSkgewotCQkgICAgeGluY2x1ZGVfbXVsdGlieXRlX2ZhbGxiYWNrX3VzZWQgPSAxOwotCQkgICAgeG1sQnVmU2hyaW5rKGJ1Zi0+YnVmZmVyLCBpKTsKLQkJICAgIGdvdG8geGluY2x1ZGVfbXVsdGlieXRlX2ZhbGxiYWNrOwotCQl9IGVsc2UgewotCQkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLAotCQkJCSAgIFhNTF9YSU5DTFVERV9JTlZBTElEX0NIQVIsCi0JCQkJICAgIiVzIGNvbnRhaW5zIGludmFsaWQgY2hhclxuIiwgVVJMKTsKLQkJICAgIHhtbEZyZWVQYXJzZXJDdHh0KHBjdHh0KTsKLQkJICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOwotCQkgICAgeG1sRnJlZShVUkwpOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotCSAgICB9IGVsc2UgewotCQl4aW5jbHVkZV9tdWx0aWJ5dGVfZmFsbGJhY2tfdXNlZCA9IDA7Ci0JCXhtbE5vZGVBZGRDb250ZW50TGVuKG5vZGUsICZjb250ZW50W2ldLCBsKTsKLQkgICAgfQotCSAgICBpICs9IGw7Ci0JfQotCXhtbEJ1ZlNocmluayhidWYtPmJ1ZmZlciwgbGVuKTsKKyAgICAgICAgbCA9IGxlbiAtIGk7CisgICAgICAgIGN1ciA9IHhtbEdldFVURjhDaGFyKCZjb250ZW50W2ldLCAmbCk7CisgICAgICAgIGlmICgoY3VyIDwgMCkgfHwgKCFJU19DSEFSKGN1cikpKSB7CisgICAgICAgICAgICB4bWxYSW5jbHVkZUVycihjdHh0LCByZWYtPmVsZW0sIFhNTF9YSU5DTFVERV9JTlZBTElEX0NIQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgY29udGFpbnMgaW52YWxpZCBjaGFyXG4iLCBVUkwpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIGkgKz0gbDsKICAgICB9Ci0gICAgeG1sRnJlZVBhcnNlckN0eHQocGN0eHQpOwotICAgIHhtbFhJbmNsdWRlQWRkVHh0KGN0eHQsIG5vZGUtPmNvbnRlbnQsIFVSTCk7Ci0gICAgeG1sRnJlZUlucHV0U3RyZWFtKGlucHV0U3RyZWFtKTsKKworICAgIHhtbE5vZGVBZGRDb250ZW50TGVuKG5vZGUsIGNvbnRlbnQsIGxlbik7CisKKyAgICBpZiAoY3R4dC0+dHh0TnIgPj0gY3R4dC0+dHh0TWF4KSB7CisgICAgICAgIHhtbFhJbmNsdWRlVHh0ICp0bXA7CisjaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgorICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGN0eHQtPnR4dE1heCA/IGN0eHQtPnR4dE1heCAqIDIgOiAxOworI2Vsc2UKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBjdHh0LT50eHRNYXggPyBjdHh0LT50eHRNYXggKiAyIDogODsKKyNlbmRpZgorCisgICAgICAgIHRtcCA9IHhtbFJlYWxsb2MoY3R4dC0+dHh0VGFiLCBzaXplb2YoeG1sWEluY2x1ZGVUeHQpICogbmV3U2l6ZSk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICAgICAgeG1sWEluY2x1ZGVFcnJNZW1vcnkoY3R4dCwgcmVmLT5lbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdyb3dpbmcgWEluY2x1ZGUgdGV4dCB0YWJsZSIpOworCSAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGN0eHQtPnR4dE1heCA9IG5ld1NpemU7CisgICAgICAgIGN0eHQtPnR4dFRhYiA9IHRtcDsKKyAgICB9CisgICAgY3R4dC0+dHh0VGFiW2N0eHQtPnR4dE5yXS50ZXh0ID0geG1sU3RyZHVwKG5vZGUtPmNvbnRlbnQpOworICAgIGN0eHQtPnR4dFRhYltjdHh0LT50eHROcl0udXJsID0geG1sU3RyZHVwKFVSTCk7CisgICAgY3R4dC0+dHh0TnIrKzsKIAogbG9hZGVkOgogICAgIC8qCiAgICAgICogQWRkIHRoZSBlbGVtZW50IGFzIHRoZSByZXBsYWNlbWVudCBjb3B5LgogICAgICAqLwotICAgIGN0eHQtPmluY1RhYltucl0tPmluYyA9IG5vZGU7CisgICAgcmVmLT5pbmMgPSBub2RlOworICAgIG5vZGUgPSBOVUxMOworICAgIHJldCA9IDA7CisKK2Vycm9yOgorICAgIHhtbEZyZWVOb2RlKG5vZGUpOworICAgIHhtbEZyZWVJbnB1dFN0cmVhbShpbnB1dFN0cmVhbSk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQocGN0eHQpOworICAgIHhtbEZyZWUoZW5jb2RpbmcpOworICAgIHhtbEZyZWVVUkkodXJpKTsKICAgICB4bWxGcmVlKFVSTCk7Ci0gICAgcmV0dXJuKDApOworICAgIHJldHVybihyZXQpOwogfQogCiAvKioKICAqIHhtbFhJbmNsdWRlTG9hZEZhbGxiYWNrOgogICogQGN0eHQ6ICB0aGUgWEluY2x1ZGUgY29udGV4dAogICogQGZhbGxiYWNrOiAgdGhlIGZhbGxiYWNrIG5vZGUKLSAqIEBucjogIHRoZSB4aW5jbHVkZSBub2RlIG51bWJlcgorICogQHJlZjogIGFuIFhNTFhpbmNsdWRlUmVmUHRyCiAgKgogICogTG9hZCB0aGUgY29udGVudCBvZiB0aGUgZmFsbGJhY2sgbm9kZSwgYW5kIHN0b3JlIHRoZSByZXN1bHQKICAqIGluIHRoZSBYSW5jbHVkZSBjb250ZXh0CkBAIC0xOTYzLDEwICsxNzc5LDEwIEBACiAgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBpbiBjYXNlIG9mIGZhaWx1cmUKICAqLwogc3RhdGljIGludAoteG1sWEluY2x1ZGVMb2FkRmFsbGJhY2soeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgZmFsbGJhY2ssIGludCBucikgewotICAgIHhtbFhJbmNsdWRlQ3R4dFB0ciBuZXdjdHh0OworeG1sWEluY2x1ZGVMb2FkRmFsbGJhY2soeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgZmFsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICB4bWxYSW5jbHVkZVJlZlB0ciByZWYpIHsKICAgICBpbnQgcmV0ID0gMDsKLSAgICBpbnQgb2xkTmJFcnJvcnMgPSBjdHh0LT5uYkVycm9yczsKKyAgICBpbnQgb2xkTmJFcnJvcnM7CiAKICAgICBpZiAoKGZhbGxiYWNrID09IE5VTEwpIHx8IChmYWxsYmFjay0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpIHx8CiAgICAgICAgIChjdHh0ID09IE5VTEwpKQpAQCAtMTk3NiwyOSArMTc5MiwxNyBAQAogCSAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmFsbGJhY2sgYWxzbyBoYXMgJ2luY2x1ZGVzJwogCSAqIChCdWcgMTI5OTY5KSwgc28gd2UgcmUtcHJvY2VzcyB0aGUgZmFsbGJhY2sganVzdCBpbiBjYXNlCiAJICovCi0JbmV3Y3R4dCA9IHhtbFhJbmNsdWRlTmV3Q29udGV4dChjdHh0LT5kb2MpOwotCWlmIChuZXdjdHh0ID09IE5VTEwpCi0JICAgIHJldHVybiAoLTEpOwotCW5ld2N0eHQtPl9wcml2YXRlID0gY3R4dC0+X3ByaXZhdGU7Ci0JbmV3Y3R4dC0+YmFzZSA9IHhtbFN0cmR1cChjdHh0LT5iYXNlKTsJLyogSW5oZXJpdCB0aGUgYmFzZSBmcm9tIHRoZSBleGlzdGluZyBjb250ZXh0ICovCi0JeG1sWEluY2x1ZGVTZXRGbGFncyhuZXdjdHh0LCBjdHh0LT5wYXJzZUZsYWdzKTsKLSAgICAgICAgbmV3Y3R4dC0+aW5jVG90YWwgPSBjdHh0LT5pbmNUb3RhbDsKLSAgICAgICAgaWYgKHhtbFhJbmNsdWRlRG9Qcm9jZXNzKG5ld2N0eHQsIGN0eHQtPmRvYywgZmFsbGJhY2ssIDEpIDwgMCkKLSAgICAgICAgICAgIHJldCA9IC0xOwotICAgICAgICBjdHh0LT5pbmNUb3RhbCA9IG5ld2N0eHQtPmluY1RvdGFsOworICAgICAgICBvbGROYkVycm9ycyA9IGN0eHQtPm5iRXJyb3JzOworCXJlZi0+aW5jID0geG1sWEluY2x1ZGVDb3B5Tm9kZShjdHh0LCBmYWxsYmFjaywgMSk7CiAJaWYgKGN0eHQtPm5iRXJyb3JzID4gb2xkTmJFcnJvcnMpCiAJICAgIHJldCA9IC0xOwotCXhtbFhJbmNsdWRlRnJlZUNvbnRleHQobmV3Y3R4dCk7Ci0KLQljdHh0LT5pbmNUYWJbbnJdLT5pbmMgPSB4bWxEb2NDb3B5Tm9kZUxpc3QoY3R4dC0+ZG9jLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjay0+Y2hpbGRyZW4pOwotICAgICAgICBpZiAoY3R4dC0+aW5jVGFiW25yXS0+aW5jID09IE5VTEwpCi0gICAgICAgICAgICBjdHh0LT5pbmNUYWJbbnJdLT5lbXB0eUZiID0gMTsKKyAgICAgICAgZWxzZSBpZiAocmVmLT5pbmMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJlZi0+ZW1wdHlGYiA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY3R4dC0+aW5jVGFiW25yXS0+aW5jID0gTlVMTDsKLQljdHh0LT5pbmNUYWJbbnJdLT5lbXB0eUZiID0gMTsJLyogZmxhZyBlbXB0eSBjYWxsYmFjayAqLworICAgICAgICByZWYtPmluYyA9IE5VTEw7CisJcmVmLT5lbXB0eUZiID0gMTsJLyogZmxhZyBlbXB0eSBjYWxsYmFjayAqLwogICAgIH0KLSAgICBjdHh0LT5pbmNUYWJbbnJdLT5mYWxsYmFjayA9IDE7CisgICAgcmVmLT5mYWxsYmFjayA9IDE7CiAgICAgcmV0dXJuKHJldCk7CiB9CiAKQEAgLTIwMDksMzIgKzE4MTMsODggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgotICogeG1sWEluY2x1ZGVQcmVQcm9jZXNzTm9kZToKKyAqIHhtbFhJbmNsdWRlRXhwYW5kTm9kZToKICAqIEBjdHh0OiBhbiBYSW5jbHVkZSBjb250ZXh0CiAgKiBAbm9kZTogYW4gWEluY2x1ZGUgbm9kZQogICoKLSAqIEltcGxlbWVudCB0aGUgWEluY2x1ZGUgcHJlcHJvY2Vzc2luZywgY3VycmVudGx5IGp1c3QgYWRkaW5nIHRoZSBlbGVtZW50Ci0gKiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgorICogSWYgdGhlIFhJbmNsdWRlIG5vZGUgd2Fzbid0IHByb2Nlc3NlZCB5ZXQsIGNyZWF0ZSBhIG5ldyBSZWZQdHIsCisgKiBhZGQgaXQgdG8gY3R4dC0+aW5jVGFiIGFuZCBsb2FkIHRoZSBpbmNsdWRlZCBpdGVtcy4KICAqCi0gKiBSZXR1cm5zIHRoZSByZXN1bHQgbGlzdCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqIFJldHVybnMgdGhlIG5ldyBvciBleGlzdGluZyB4bWxYSW5jbHVkZVJlZlB0ciwgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCi1zdGF0aWMgeG1sTm9kZVB0cgoteG1sWEluY2x1ZGVQcmVQcm9jZXNzTm9kZSh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sTm9kZVB0ciBub2RlKSB7Ci0gICAgeG1sWEluY2x1ZGVBZGROb2RlKGN0eHQsIG5vZGUpOwotICAgIHJldHVybihOVUxMKTsKK3N0YXRpYyB4bWxYSW5jbHVkZVJlZlB0cgoreG1sWEluY2x1ZGVFeHBhbmROb2RlKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCB4bWxOb2RlUHRyIG5vZGUpIHsKKyAgICB4bWxYSW5jbHVkZVJlZlB0ciByZWY7CisgICAgaW50IGk7CisKKyAgICBpZiAoY3R4dC0+ZmF0YWxFcnIpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICBpZiAoY3R4dC0+ZGVwdGggPj0gWElOQ0xVREVfTUFYX0RFUFRIKSB7CisgICAgICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIG5vZGUsIFhNTF9YSU5DTFVERV9SRUNVUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZFxuIiwgTlVMTCk7CisgICAgICAgIGN0eHQtPmZhdGFsRXJyID0gMTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKworI2lmZGVmIEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04KKyAgICAvKgorICAgICAqIFRoZSBYSW5jbHVkZSBlbmdpbmUgb2ZmZXJzIG5vIHByb3RlY3Rpb24gYWdhaW5zdCBleHBvbmVudGlhbAorICAgICAqIGV4cGFuc2lvbiBhdHRhY2tzIHNpbWlsYXIgdG8gImJpbGxpb24gbGF1Z2hzIi4gQXZvaWQgdGltZW91dHMgYnkKKyAgICAgKiBsaW1pdGluZyB0aGUgdG90YWwgbnVtYmVyIG9mIHJlcGxhY2VtZW50cyB3aGVuIGZ1enppbmcuCisgICAgICoKKyAgICAgKiBVbmZvcnR1YXRlbHksIGEgc2luZ2xlIFhJbmNsdWRlIGNhbiBhbHJlYWR5IHJlc3VsdCBpbiBxdWFkcmF0aWMKKyAgICAgKiBiZWhhdmlvcjoKKyAgICAgKgorICAgICAqICAgICA8ZG9jIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgICAgKiAgICAgICA8eGk6aW5jbHVkZSB4cG9pbnRlcj0ieHBvaW50ZXIoLy9lKSIvPgorICAgICAqICAgICAgIDxlPgorICAgICAqICAgICAgICAgPGU+CisgICAgICogICAgICAgICAgIDxlPgorICAgICAqICAgICAgICAgICAgIDwhLS0gbW9yZSBuZXN0ZWQgZWxlbWVudHMgLS0+CisgICAgICogICAgICAgICAgIDwvZT4KKyAgICAgKiAgICAgICAgIDwvZT4KKyAgICAgKiAgICAgICA8L2U+CisgICAgICogICAgIDwvZG9jPgorICAgICAqLworICAgIGlmIChjdHh0LT5pbmNUb3RhbCA+PSAyMCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIGN0eHQtPmluY1RvdGFsKys7CisjZW5kaWYKKworICAgIGZvciAoaSA9IDA7IGkgPCBjdHh0LT5pbmNOcjsgaSsrKSB7CisgICAgICAgIGlmIChjdHh0LT5pbmNUYWJbaV0tPmVsZW0gPT0gbm9kZSkgeworICAgICAgICAgICAgaWYgKGN0eHQtPmluY1RhYltpXS0+ZXhwYW5kaW5nKSB7CisgICAgICAgICAgICAgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgbm9kZSwgWE1MX1hJTkNMVURFX1JFQ1VSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVzaW9uIGxvb3AgZGV0ZWN0ZWRcbiIsIE5VTEwpOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybihjdHh0LT5pbmNUYWJbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmVmID0geG1sWEluY2x1ZGVBZGROb2RlKGN0eHQsIG5vZGUpOworICAgIGlmIChyZWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIHJlZi0+ZXhwYW5kaW5nID0gMTsKKyAgICBjdHh0LT5kZXB0aCsrOworICAgIHhtbFhJbmNsdWRlTG9hZE5vZGUoY3R4dCwgcmVmKTsKKyAgICBjdHh0LT5kZXB0aC0tOworICAgIHJlZi0+ZXhwYW5kaW5nID0gMDsKKworICAgIHJldHVybihyZWYpOwogfQogCiAvKioKICAqIHhtbFhJbmNsdWRlTG9hZE5vZGU6CiAgKiBAY3R4dDogYW4gWEluY2x1ZGUgY29udGV4dAotICogQG5yOiB0aGUgbm9kZSBudW1iZXIKKyAqIEByZWY6IGFuIHhtbFhJbmNsdWRlUmVmUHRyCiAgKgogICogRmluZCBhbmQgbG9hZCB0aGUgaW5mb3NldCByZXBsYWNlbWVudCBmb3IgdGhlIGdpdmVuIG5vZGUuCiAgKgogICogUmV0dXJucyAwIGlmIHN1YnN0aXR1dGlvbiBzdWNjZWVkZWQsIC0xIGlmIHNvbWUgcHJvY2Vzc2luZyBmYWlsZWQKICAqLwogc3RhdGljIGludAoteG1sWEluY2x1ZGVMb2FkTm9kZSh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgaW50IG5yKSB7Cit4bWxYSW5jbHVkZUxvYWROb2RlKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCB4bWxYSW5jbHVkZVJlZlB0ciByZWYpIHsKICAgICB4bWxOb2RlUHRyIGN1cjsKICAgICB4bWxDaGFyICpocmVmOwogICAgIHhtbENoYXIgKnBhcnNlOwpAQCAtMjA0NCwxMSArMTkwNCw5IEBACiAgICAgaW50IHhtbCA9IDE7IC8qIGRlZmF1bHQgSXNzdWUgNjQgKi8KICAgICBpbnQgcmV0OwogCi0gICAgaWYgKGN0eHQgPT0gTlVMTCkKKyAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKHJlZiA9PSBOVUxMKSkKIAlyZXR1cm4oLTEpOwotICAgIGlmICgobnIgPCAwKSB8fCAobnIgPj0gY3R4dC0+aW5jTnIpKQotCXJldHVybigtMSk7Ci0gICAgY3VyID0gY3R4dC0+aW5jVGFiW25yXS0+cmVmOworICAgIGN1ciA9IHJlZi0+ZWxlbTsKICAgICBpZiAoY3VyID09IE5VTEwpCiAJcmV0dXJuKC0xKTsKIApAQCAtMjA2OCw4ICsxOTI2LDcgQEAKIAllbHNlIGlmICh4bWxTdHJFcXVhbChwYXJzZSwgWElOQ0xVREVfUEFSU0VfVEVYVCkpCiAJICAgIHhtbCA9IDA7CiAJZWxzZSB7Ci0JICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIGN0eHQtPmluY1RhYltucl0tPnJlZiwKLQkgICAgICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX1BBUlNFX1ZBTFVFLAorCSAgICB4bWxYSW5jbHVkZUVycihjdHh0LCBjdXIsIFhNTF9YSU5DTFVERV9QQVJTRV9WQUxVRSwKIAkJCSAgICJpbnZhbGlkIHZhbHVlICVzIGZvciAncGFyc2UnXG4iLCBwYXJzZSk7CiAJICAgIGlmIChocmVmICE9IE5VTEwpCiAJCXhtbEZyZWUoaHJlZik7CkBAIC0yMTAzLDggKzE5NjAsOCBAQAogCSAgICB4bWxGcmVlKGVzY2hyZWYpOwogICAgIH0KICAgICBpZiAoVVJJID09IE5VTEwpIHsKLQl4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCi0JICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX0hSRUZfVVJJLCAiZmFpbGVkIGJ1aWxkIFVSTFxuIiwgTlVMTCk7CisJeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3VyLCBYTUxfWElOQ0xVREVfSFJFRl9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgYnVpbGQgVVJMXG4iLCBOVUxMKTsKIAlpZiAocGFyc2UgIT0gTlVMTCkKIAkgICAgeG1sRnJlZShwYXJzZSk7CiAJaWYgKGhyZWYgIT0gTlVMTCkKQEAgLTIxMTMsMTEgKzE5NzAsNiBAQAogCSAgICB4bWxGcmVlKGJhc2UpOwogCXJldHVybigtMSk7CiAgICAgfQotI2lmZGVmIERFQlVHX1hJTkNMVURFCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJwYXJzZTogJXNcbiIsCi0JICAgIHhtbCA/ICJ4bWwiOiAidGV4dCIpOwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiVVJJOiAlc1xuIiwgVVJJKTsKLSNlbmRpZgogCiAgICAgLyoKICAgICAgKiBTYXZlIHRoZSBiYXNlIGZvciB0aGlzIGluY2x1ZGUgKHNhdmluZyB0aGUgY3VycmVudCBvbmUpCkBAIC0yMTI2LDEwICsxOTc4LDEwIEBACiAgICAgY3R4dC0+YmFzZSA9IGJhc2U7CiAKICAgICBpZiAoeG1sKSB7Ci0JcmV0ID0geG1sWEluY2x1ZGVMb2FkRG9jKGN0eHQsIFVSSSwgbnIpOworCXJldCA9IHhtbFhJbmNsdWRlTG9hZERvYyhjdHh0LCBVUkksIHJlZik7CiAJLyogeG1sWEluY2x1ZGVHZXRGcmFnbWVudChjdHh0LCBjdXIsIFVSSSk7ICovCiAgICAgfSBlbHNlIHsKLQlyZXQgPSB4bWxYSW5jbHVkZUxvYWRUeHQoY3R4dCwgVVJJLCBucik7CisJcmV0ID0geG1sWEluY2x1ZGVMb2FkVHh0KGN0eHQsIFVSSSwgcmVmKTsKICAgICB9CiAKICAgICAvKgpAQCAtMjE0Myw5ICsxOTk1LDYgQEAKIAkvKgogCSAqIFRpbWUgdG8gdHJ5IGEgZmFsbGJhY2sgaWYgYXZhaWxhYmxlCiAJICovCi0jaWZkZWYgREVCVUdfWElOQ0xVREUKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImVycm9yIGxvb2tpbmcgZm9yIGZhbGxiYWNrXG4iKTsKLSNlbmRpZgogCWNoaWxkcmVuID0gY3VyLT5jaGlsZHJlbjsKIAl3aGlsZSAoY2hpbGRyZW4gIT0gTlVMTCkgewogCSAgICBpZiAoKGNoaWxkcmVuLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpICYmCkBAIC0yMTUzLDE1ICsyMDAyLDE0IEBACiAJCSh4bWxTdHJFcXVhbChjaGlsZHJlbi0+bmFtZSwgWElOQ0xVREVfRkFMTEJBQ0spKSAmJgogCQkoKHhtbFN0ckVxdWFsKGNoaWxkcmVuLT5ucy0+aHJlZiwgWElOQ0xVREVfTlMpKSB8fAogCQkgKHhtbFN0ckVxdWFsKGNoaWxkcmVuLT5ucy0+aHJlZiwgWElOQ0xVREVfT0xEX05TKSkpKSB7Ci0JCXJldCA9IHhtbFhJbmNsdWRlTG9hZEZhbGxiYWNrKGN0eHQsIGNoaWxkcmVuLCBucik7CisJCXJldCA9IHhtbFhJbmNsdWRlTG9hZEZhbGxiYWNrKGN0eHQsIGNoaWxkcmVuLCByZWYpOwogCQlicmVhazsKIAkgICAgfQogCSAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLT5uZXh0OwogCX0KICAgICB9CiAgICAgaWYgKHJldCA8IDApIHsKLQl4bWxYSW5jbHVkZUVycihjdHh0LCBjdHh0LT5pbmNUYWJbbnJdLT5yZWYsCi0JICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX05PX0ZBTExCQUNLLAorCXhtbFhJbmNsdWRlRXJyKGN0eHQsIGN1ciwgWE1MX1hJTkNMVURFX05PX0ZBTExCQUNLLAogCQkgICAgICAgImNvdWxkIG5vdCBsb2FkICVzLCBhbmQgbm8gZmFsbGJhY2sgd2FzIGZvdW5kXG4iLAogCQkgICAgICAgVVJJKTsKICAgICB9CkBAIC0yMTgzLDI3ICsyMDMxLDI1IEBACiAvKioKICAqIHhtbFhJbmNsdWRlSW5jbHVkZU5vZGU6CiAgKiBAY3R4dDogYW4gWEluY2x1ZGUgY29udGV4dAotICogQG5yOiB0aGUgbm9kZSBudW1iZXIKKyAqIEByZWY6IGFuIHhtbFhJbmNsdWRlUmVmUHRyCiAgKgogICogSW1wbGVtZW50IHRoZSBpbmZvc2V0IHJlcGxhY2VtZW50IGZvciB0aGUgZ2l2ZW4gbm9kZQogICoKICAqIFJldHVybnMgMCBpZiBzdWJzdGl0dXRpb24gc3VjY2VlZGVkLCAtMSBpZiBzb21lIHByb2Nlc3NpbmcgZmFpbGVkCiAgKi8KIHN0YXRpYyBpbnQKLXhtbFhJbmNsdWRlSW5jbHVkZU5vZGUoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIGludCBucikgeworeG1sWEluY2x1ZGVJbmNsdWRlTm9kZSh4bWxYSW5jbHVkZUN0eHRQdHIgY3R4dCwgeG1sWEluY2x1ZGVSZWZQdHIgcmVmKSB7CiAgICAgeG1sTm9kZVB0ciBjdXIsIGVuZCwgbGlzdCwgdG1wOwogCi0gICAgaWYgKGN0eHQgPT0gTlVMTCkKKyAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKHJlZiA9PSBOVUxMKSkKIAlyZXR1cm4oLTEpOwotICAgIGlmICgobnIgPCAwKSB8fCAobnIgPj0gY3R4dC0+aW5jTnIpKQotCXJldHVybigtMSk7Ci0gICAgY3VyID0gY3R4dC0+aW5jVGFiW25yXS0+cmVmOworICAgIGN1ciA9IHJlZi0+ZWxlbTsKICAgICBpZiAoKGN1ciA9PSBOVUxMKSB8fCAoY3VyLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkpCiAJcmV0dXJuKC0xKTsKIAotICAgIGxpc3QgPSBjdHh0LT5pbmNUYWJbbnJdLT5pbmM7Ci0gICAgY3R4dC0+aW5jVGFiW25yXS0+aW5jID0gTlVMTDsKLSAgICBjdHh0LT5pbmNUYWJbbnJdLT5lbXB0eUZiID0gMDsKKyAgICBsaXN0ID0gcmVmLT5pbmM7CisgICAgcmVmLT5pbmMgPSBOVUxMOworICAgIHJlZi0+ZW1wdHlGYiA9IDA7CiAKICAgICAvKgogICAgICAqIENoZWNrIGFnYWluc3QgdGhlIHJpc2sgb2YgZ2VuZXJhdGluZyBhIG11bHRpLXJvb3RlZCBkb2N1bWVudApAQCAtMjIxOSw4ICsyMDY1LDcgQEAKIAkgICAgdG1wID0gdG1wLT5uZXh0OwogCX0KIAlpZiAobmJfZWxlbSA+IDEpIHsKLQkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgY3R4dC0+aW5jVGFiW25yXS0+cmVmLAotCSAgICAgICAgICAgICAgICAgICBYTUxfWElOQ0xVREVfTVVMVElQTEVfUk9PVCwKKwkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgcmVmLT5lbGVtLCBYTUxfWElOQ0xVREVfTVVMVElQTEVfUk9PVCwKIAkJICAgICAgICJYSW5jbHVkZSBlcnJvcjogd291bGQgcmVzdWx0IGluIG11bHRpcGxlIHJvb3Qgbm9kZXNcbiIsCiAJCQkgICBOVUxMKTsKICAgICAgICAgICAgIHhtbEZyZWVOb2RlTGlzdChsaXN0KTsKQEAgLTIyNTAsNyArMjA5NSw3IEBACiAJICogQ2hhbmdlIHRoZSBjdXJyZW50IG5vZGUgYXMgYW4gWEluY2x1ZGUgc3RhcnQgb25lLCBhbmQgYWRkIGFuCiAJICogWEluY2x1ZGUgZW5kIG9uZQogCSAqLwotICAgICAgICBpZiAoY3R4dC0+aW5jVGFiW25yXS0+ZmFsbGJhY2spCisgICAgICAgIGlmIChyZWYtPmZhbGxiYWNrKQogICAgICAgICAgICAgeG1sVW5zZXRQcm9wKGN1ciwgQkFEX0NBU1QgImhyZWYiKTsKIAljdXItPnR5cGUgPSBYTUxfWElOQ0xVREVfU1RBUlQ7CiAgICAgICAgIC8qIFJlbW92ZSBmYWxsYmFjayBjaGlsZHJlbiAqLwpAQCAtMjI2MSw4ICsyMTA2LDcgQEAKICAgICAgICAgfQogCWVuZCA9IHhtbE5ld0RvY05vZGUoY3VyLT5kb2MsIGN1ci0+bnMsIGN1ci0+bmFtZSwgTlVMTCk7CiAJaWYgKGVuZCA9PSBOVUxMKSB7Ci0JICAgIHhtbFhJbmNsdWRlRXJyKGN0eHQsIGN0eHQtPmluY1RhYltucl0tPnJlZiwKLQkgICAgICAgICAgICAgICAgICAgWE1MX1hJTkNMVURFX0JVSUxEX0ZBSUxFRCwKKwkgICAgeG1sWEluY2x1ZGVFcnIoY3R4dCwgcmVmLT5lbGVtLCBYTUxfWElOQ0xVREVfQlVJTERfRkFJTEVELAogCQkJICAgImZhaWxlZCB0byBidWlsZCBub2RlXG4iLCBOVUxMKTsKICAgICAgICAgICAgIHhtbEZyZWVOb2RlTGlzdChsaXN0KTsKIAkgICAgcmV0dXJuKC0xKTsKQEAgLTIzNjQsOSArMjIwOCw3IEBACiAvKioKICAqIHhtbFhJbmNsdWRlRG9Qcm9jZXNzOgogICogQGN0eHQ6IHRoZSBYSW5jbHVkZSBwcm9jZXNzaW5nIGNvbnRleHQKLSAqIEBkb2M6IGFuIFhNTCBkb2N1bWVudAogICogQHRyZWU6IHRoZSB0b3Agb2YgdGhlIHRyZWUgdG8gcHJvY2VzcwotICogQHNraXBSb290OiBkb24ndCBwcm9jZXNzIHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUKICAqCiAgKiBJbXBsZW1lbnQgdGhlIFhJbmNsdWRlIHN1YnN0aXR1dGlvbiBvbiB0aGUgWE1MIGRvY3VtZW50IEBkb2MKICAqCkBAIC0yMzc0LDYzICsyMjE2LDMxIEBACiAgKiAgICBvciB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgZG9uZS4KICAqLwogc3RhdGljIGludAoteG1sWEluY2x1ZGVEb1Byb2Nlc3MoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBza2lwUm9vdCkgeworeG1sWEluY2x1ZGVEb1Byb2Nlc3MoeG1sWEluY2x1ZGVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgdHJlZSkgeworICAgIHhtbFhJbmNsdWRlUmVmUHRyIHJlZjsKICAgICB4bWxOb2RlUHRyIGN1cjsKICAgICBpbnQgcmV0ID0gMDsKICAgICBpbnQgaSwgc3RhcnQ7CiAKLSAgICBpZiAoKGRvYyA9PSBOVUxMKSB8fCAodHJlZSA9PSBOVUxMKSB8fCAodHJlZS0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpKQorICAgIGlmICgodHJlZSA9PSBOVUxMKSB8fCAodHJlZS0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpKQogCXJldHVybigtMSk7Ci0gICAgaWYgKChza2lwUm9vdCkgJiYgKHRyZWUtPmNoaWxkcmVuID09IE5VTEwpKQotICAgICAgICByZXR1cm4oLTEpOwogICAgIGlmIChjdHh0ID09IE5VTEwpCiAJcmV0dXJuKC0xKTsKIAotICAgIGlmIChkb2MtPlVSTCAhPSBOVUxMKSB7Ci0JcmV0ID0geG1sWEluY2x1ZGVVUkxQdXNoKGN0eHQsIGRvYy0+VVJMKTsKLQlpZiAocmV0IDwgMCkKLQkgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgc3RhcnQgPSBjdHh0LT5pbmNOcjsKLQotICAgIC8qCi0gICAgICogVE9ETzogVGhlIHBoYXNlcyBtdXN0IHJ1biBzZXBhcmF0ZWx5IGZvciByZWN1cnNpdmUgaW5jbHVzaW9ucy4KLSAgICAgKgotICAgICAqIC0gUGhhc2UgMSBzaG91bGQgc3RhcnQgd2l0aCB0b3AtbGV2ZWwgWEluY2x1ZGUgbm9kZXMsIGxvYWQgZG9jdW1lbnRzLAotICAgICAqICAgZXhlY3V0ZSBYUG9pbnRlciBleHByZXNzaW9ucywgdGhlbiBwcm9jZXNzIG9ubHkgdGhlIHJlc3VsdCBub2RlcwotICAgICAqICAgKG5vdCB3aG9sZSBkb2N1bWVudCwgc2VlIGJ1ZyAjMzI0MDgxKSBhbmQgb25seSBmb3IgcGhhc2UgMQotICAgICAqICAgcmVjdXJzaXZlbHkuIFdlIHdpbGwgbmVlZCBhIGJhY2tyZWZlcmVuY2UgZnJvbSB4bWxOb2RlcyB0bwotICAgICAqICAgeG1sSW5jbHVkZVJlZnMgdG8gZGV0ZWN0IHJlZmVyZW5jZXMgdGhhdCB3ZXJlIGFscmVhZHkgdmlzaXRlZC4KLSAgICAgKiAgIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgcHJvcGVyIGN5Y2xlIGRldGVjdGlvbiwgc2VlIGJ1ZyAjMzQ0MjQwLgotICAgICAqCi0gICAgICogLSBQaGFzZSAyIHNob3VsZCB2aXNpdCBhbGwgdG9wLWxldmVsIFhJbmNsdWRlIG5vZGVzIGFuZCBleHBhbmQKLSAgICAgKiAgIHBvc3NpYmxlIHN1YnJlZmVyZW5jZXMgaW4gdGhlIHJlcGxhY2VtZW50IHJlY3Vyc2l2ZWx5LgotICAgICAqCi0gICAgICogLSBQaGFzZSAzIHNob3VsZCBmaW5hbGx5IHJlcGxhY2UgdGhlIHRvcC1sZXZlbCBYSW5jbHVkZSBub2Rlcy4KLSAgICAgKiAgIEl0IGNvdWxkIGFsc28gYmUgcnVuIHRvZ2V0aGVyIHdpdGggcGhhc2UgMi4KLSAgICAgKi8KLQogICAgIC8qCiAgICAgICogRmlyc3QgcGhhc2U6IGxvb2t1cCB0aGUgZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50CiAgICAgICovCi0gICAgaWYgKHNraXBSb290KQotICAgICAgICBjdXIgPSB0cmVlLT5jaGlsZHJlbjsKLSAgICBlbHNlCi0gICAgICAgIGN1ciA9IHRyZWU7CisgICAgc3RhcnQgPSBjdHh0LT5pbmNOcjsKKyAgICBjdXIgPSB0cmVlOwogICAgIGRvIHsKIAkvKiBUT0RPOiBuZWVkIHRvIHdvcmsgb24gZW50aXRpZXMgLT4gc3RhY2sgKi8KICAgICAgICAgaWYgKHhtbFhJbmNsdWRlVGVzdE5vZGUoY3R4dCwgY3VyKSA9PSAxKSB7Ci0jaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgorICAgICAgICAgICAgcmVmID0geG1sWEluY2x1ZGVFeHBhbmROb2RlKGN0eHQsIGN1cik7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogQXZvaWQgc3VwZXJsaW5lYXIgZXhwYW5zaW9uIGJ5IGxpbWl0aW5nIHRoZSB0b3RhbCBudW1iZXIKLSAgICAgICAgICAgICAqIG9mIHJlcGxhY2VtZW50cy4KKyAgICAgICAgICAgICAqIE1hcmsgZGlyZWN0IGluY2x1ZGVzLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoY3R4dC0+aW5jVG90YWwgPj0gMjApCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZgotICAgICAgICAgICAgY3R4dC0+aW5jVG90YWwrKzsKLSAgICAgICAgICAgIHhtbFhJbmNsdWRlUHJlUHJvY2Vzc05vZGUoY3R4dCwgY3VyKTsKKyAgICAgICAgICAgIGlmIChyZWYgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZWYtPnJlcGxhY2UgPSAxOwogICAgICAgICB9IGVsc2UgaWYgKChjdXItPmNoaWxkcmVuICE9IE5VTEwpICYmCiAgICAgICAgICAgICAgICAgICAgKChjdXItPnR5cGUgPT0gWE1MX0RPQ1VNRU5UX05PREUpIHx8CiAgICAgICAgICAgICAgICAgICAgIChjdXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkpKSB7CkBAIC0yNDQ5LDMyICsyMjU5LDQwIEBACiAgICAgfSB3aGlsZSAoKGN1ciAhPSBOVUxMKSAmJiAoY3VyICE9IHRyZWUpKTsKIAogICAgIC8qCi0gICAgICogU2Vjb25kIFBoYXNlIDogY29sbGVjdCB0aGUgaW5mb3NldHMgZnJhZ21lbnRzCisgICAgICogU2Vjb25kIHBoYXNlOiBleHRlbmQgdGhlIG9yaWdpbmFsIGRvY3VtZW50IGluZm9zZXQuCiAgICAgICovCi0gICAgZm9yIChpID0gc3RhcnQ7aSA8IGN0eHQtPmluY05yOyBpKyspIHsKLSAgICAgICAgeG1sWEluY2x1ZGVMb2FkTm9kZShjdHh0LCBpKTsKKyAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGN0eHQtPmluY05yOyBpKyspIHsKKwlpZiAoY3R4dC0+aW5jVGFiW2ldLT5yZXBsYWNlICE9IDApIHsKKyAgICAgICAgICAgIGlmICgoY3R4dC0+aW5jVGFiW2ldLT5pbmMgIT0gTlVMTCkgfHwKKyAgICAgICAgICAgICAgICAoY3R4dC0+aW5jVGFiW2ldLT5lbXB0eUZiICE9IDApKSB7CS8qIChlbXB0eSBmYWxsYmFjaykgKi8KKyAgICAgICAgICAgICAgICB4bWxYSW5jbHVkZUluY2x1ZGVOb2RlKGN0eHQsIGN0eHQtPmluY1RhYltpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHh0LT5pbmNUYWJbaV0tPnJlcGxhY2UgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElnbm9yZSBpbmNsdWRlcyB3aGljaCB3ZXJlIGFkZGVkIGluZGlyZWN0bHksIGZvciBleGFtcGxlCisgICAgICAgICAgICAgKiBpbnNpZGUgeGk6ZmFsbGJhY2sgZWxlbWVudHMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChjdHh0LT5pbmNUYWJbaV0tPmluYyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgeG1sRnJlZU5vZGVMaXN0KGN0eHQtPmluY1RhYltpXS0+aW5jKTsKKyAgICAgICAgICAgICAgICBjdHh0LT5pbmNUYWJbaV0tPmluYyA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAlyZXQrKzsKICAgICB9CiAKLSAgICAvKgotICAgICAqIFRoaXJkIHBoYXNlOiBleHRlbmQgdGhlIG9yaWdpbmFsIGRvY3VtZW50IGluZm9zZXQuCi0gICAgICoKLSAgICAgKiBPcmlnaW5hbGx5IHdlIGJ5cGFzc2VkIHRoZSBpbmNsdXNpb24gaWYgdGhlcmUgd2VyZSBhbnkgZXJyb3JzCi0gICAgICogZW5jb3VudGVyZWQgb24gYW55IG9mIHRoZSBYSW5jbHVkZXMuICBBIGJ1ZyB3YXMgcmFpc2VkIChidWcKLSAgICAgKiAxMzI1ODgpIHJlcXVlc3RpbmcgdGhhdCB3ZSBvdXRwdXQgdGhlIFhJbmNsdWRlcyB3aXRob3V0IGVycm9yLAotICAgICAqIHNvIHRoZSBjaGVjayBmb3IgaW5jIT1OVUxMIHx8IHhwdHIhPU5VTEwgd2FzIHB1dCBpbi4gIFRoaXMgbWF5Ci0gICAgICogZ2l2ZSBzb21lIG90aGVyIHByb2JsZW1zIGluIHRoZSBmdXR1cmUsIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHRvCi0gICAgICogd29yayBvay4KLSAgICAgKgotICAgICAqLwotICAgIGZvciAoaSA9IGN0eHQtPmluY0Jhc2U7aSA8IGN0eHQtPmluY05yOyBpKyspIHsKLQlpZiAoKGN0eHQtPmluY1RhYltpXS0+aW5jICE9IE5VTEwpIHx8Ci0JICAgIChjdHh0LT5pbmNUYWJbaV0tPmVtcHR5RmIgIT0gMCkpCS8qIChlbXB0eSBmYWxsYmFjaykgKi8KLQkgICAgeG1sWEluY2x1ZGVJbmNsdWRlTm9kZShjdHh0LCBpKTsKKyAgICBpZiAoY3R4dC0+aXNTdHJlYW0pIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogaW5jVGFiIHJlZmVyZW5jZXMgbm9kZXMgd2hpY2ggd2lsbCBldmVudHVhbGx5IGJlIGRlbGV0ZWQgaW4KKyAgICAgICAgICogc3RyZWFtaW5nIG1vZGUuIFRoZSB0YWJsZSBpcyBvbmx5IHJlcXVpcmVkIGZvciBYUG9pbnRlcgorICAgICAgICAgKiBleHByZXNzaW9ucyB3aGljaCBhcmVuJ3QgYWxsb3dlZCBpbiBzdHJlYW1pbmcgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIGZvciAoaSA9IDA7aSA8IGN0eHQtPmluY05yO2krKykgeworICAgICAgICAgICAgeG1sWEluY2x1ZGVGcmVlUmVmKGN0eHQtPmluY1RhYltpXSk7CisgICAgICAgIH0KKyAgICAgICAgY3R4dC0+aW5jTnIgPSAwOwogICAgIH0KIAotICAgIGlmIChkb2MtPlVSTCAhPSBOVUxMKQotCXhtbFhJbmNsdWRlVVJMUG9wKGN0eHQpOwogICAgIHJldHVybihyZXQpOwogfQogCkBAIC0yNDk2LDYgKzIzMTQsMjMgQEAKIH0KIAogLyoqCisgKiB4bWxYSW5jbHVkZVNldFN0cmVhbWluZ01vZGU6CisgKiBAY3R4dDogIGFuIFhJbmNsdWRlIHByb2Nlc3NpbmcgY29udGV4dAorICogQG1vZGU6ICB3aGV0aGVyIHN0cmVhbWluZyBtb2RlIHNob3VsZCBiZSBlbmFibGVkCisgKgorICogSW4gc3RyZWFtaW5nIG1vZGUsIFhQb2ludGVyIGV4cHJlc3Npb25zIGFyZW4ndCBhbGxvd2VkLgorICoKKyAqIFJldHVybnMgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK2ludAoreG1sWEluY2x1ZGVTZXRTdHJlYW1pbmdNb2RlKHhtbFhJbmNsdWRlQ3R4dFB0ciBjdHh0LCBpbnQgbW9kZSkgeworICAgIGlmIChjdHh0ID09IE5VTEwpCisgICAgICAgIHJldHVybigtMSk7CisgICAgY3R4dC0+aXNTdHJlYW0gPSAhIW1vZGU7CisgICAgcmV0dXJuKDApOworfQorCisvKioKICAqIHhtbFhJbmNsdWRlUHJvY2Vzc1RyZWVGbGFnc0RhdGE6CiAgKiBAdHJlZTogYW4gWE1MIG5vZGUKICAqIEBmbGFnczogYSBzZXQgb2YgeG1sUGFyc2VyT3B0aW9uIHVzZWQgZm9yIHBhcnNpbmcgWE1MIGluY2x1ZGVzCkBAIC0yNTIzLDcgKzIzNTgsNyBAQAogICAgIGN0eHQtPl9wcml2YXRlID0gZGF0YTsKICAgICBjdHh0LT5iYXNlID0geG1sU3RyZHVwKCh4bWxDaGFyICopdHJlZS0+ZG9jLT5VUkwpOwogICAgIHhtbFhJbmNsdWRlU2V0RmxhZ3MoY3R4dCwgZmxhZ3MpOwotICAgIHJldCA9IHhtbFhJbmNsdWRlRG9Qcm9jZXNzKGN0eHQsIHRyZWUtPmRvYywgdHJlZSwgMCk7CisgICAgcmV0ID0geG1sWEluY2x1ZGVEb1Byb2Nlc3MoY3R4dCwgdHJlZSk7CiAgICAgaWYgKChyZXQgPj0gMCkgJiYgKGN0eHQtPm5iRXJyb3JzID4gMCkpCiAgICAgICAgIHJldCA9IC0xOwogCkBAIC0yNjA3LDcgKzI0NDIsNyBAQAogCXJldHVybigtMSk7CiAgICAgY3R4dC0+YmFzZSA9IHhtbE5vZGVHZXRCYXNlKHRyZWUtPmRvYywgdHJlZSk7CiAgICAgeG1sWEluY2x1ZGVTZXRGbGFncyhjdHh0LCBmbGFncyk7Ci0gICAgcmV0ID0geG1sWEluY2x1ZGVEb1Byb2Nlc3MoY3R4dCwgdHJlZS0+ZG9jLCB0cmVlLCAwKTsKKyAgICByZXQgPSB4bWxYSW5jbHVkZURvUHJvY2VzcyhjdHh0LCB0cmVlKTsKICAgICBpZiAoKHJldCA+PSAwKSAmJiAoY3R4dC0+bmJFcnJvcnMgPiAwKSkKIAlyZXQgPSAtMTsKIApAQCAtMjY0Nyw3ICsyNDgyLDcgQEAKICAgICBpZiAoKG5vZGUgPT0gTlVMTCkgfHwgKG5vZGUtPnR5cGUgPT0gWE1MX05BTUVTUEFDRV9ERUNMKSB8fAogICAgICAgICAobm9kZS0+ZG9jID09IE5VTEwpIHx8IChjdHh0ID09IE5VTEwpKQogCXJldHVybigtMSk7Ci0gICAgcmV0ID0geG1sWEluY2x1ZGVEb1Byb2Nlc3MoY3R4dCwgbm9kZS0+ZG9jLCBub2RlLCAwKTsKKyAgICByZXQgPSB4bWxYSW5jbHVkZURvUHJvY2VzcyhjdHh0LCBub2RlKTsKICAgICBpZiAoKHJldCA+PSAwKSAmJiAoY3R4dC0+bmJFcnJvcnMgPiAwKSkKIAlyZXQgPSAtMTsKICAgICByZXR1cm4ocmV0KTsKZGlmZiAtLWdpdCBhL3hsaW5rLmMgYi94bGluay5jCmluZGV4IDY1NzE1Y2IuLjNhNzdiMTkgMTAwNjQ0Ci0tLSBhL3hsaW5rLmMKKysrIGIveGxpbmsuYwpAQCAtMTksOSArMTksNyBAQAogI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvdmFsaWQuaD4KICNpbmNsdWRlIDxsaWJ4bWwveGxpbmsuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogCiAjZGVmaW5lIFhMSU5LX05BTUVTUEFDRSAoQkFEX0NBU1QgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsvbmFtZXNwYWNlLyIpCiAjZGVmaW5lIFhIVE1MX05BTUVTUEFDRSAoQkFEX0NBU1QgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwvIikKZGlmZiAtLWdpdCBhL3htbDItY29uZmlnLmluIGIveG1sMi1jb25maWcuaW4KaW5kZXggYmRhMzIyMS4uMWY4MmY4MCAxMDA2NDQKLS0tIGEveG1sMi1jb25maWcuaW4KKysrIGIveG1sMi1jb25maWcuaW4KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAtLWxpYnMpCiAgICAgICAgIGlmIFsgIiQyIiA9ICItLWR5bmFtaWMiIF07IHRoZW4KICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICBsaWJzPSJAWE1MX0xJQlNAIgorICAgICAgICAgICAgbGlicz0iQFhNTF9MSUJTQCBAWE1MX1BSSVZBVEVfTElCU19OT19TSEFSRURAIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsaWJzPSJAWE1MX0xJQlNAIEBYTUxfUFJJVkFURV9MSUJTQCBATU9EVUxFX1BMQVRGT1JNX0xJQlNAIEBMSUJTQCIKICAgICAgICAgZmkKZGlmZiAtLWdpdCBhL3htbElPLmMgYi94bWxJTy5jCmluZGV4IDE2YzI5ZjUuLjk1ZDI3MTUgMTAwNjQ0Ci0tLSBhL3htbElPLmMKKysrIGIveG1sSU8uYwpAQCAtMTUsOSArMTUsNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpZmRlZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCkBAIC01MywxMCArNTAsMTAgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2luY2x1ZGUgPGxpYnhtbC94bWxJTy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgotI2luY2x1ZGUgPGxpYnhtbC94bWxJTy5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvbmFub2h0dHAuaD4KICNpbmNsdWRlIDxsaWJ4bWwvbmFub2Z0cC5oPgpAQCAtNjQsMjAgKzYxLDE2IEBACiAjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAogI2luY2x1ZGUgPGxpYnhtbC9jYXRhbG9nLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogCi0jaW5jbHVkZSAiYnVmLmgiCi0jaW5jbHVkZSAiZW5jLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9idWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2VuYy5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKKyNpbmNsdWRlICJwcml2YXRlL2lvLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9wYXJzZXIuaCIKIAogLyogI2RlZmluZSBWRVJCT1NFX0ZBSUxVUkUgKi8KLS8qICNkZWZpbmUgREVCVUdfRVhURVJOQUxfRU5USVRJRVMgKi8KLS8qICNkZWZpbmUgREVCVUdfSU5QVVQgKi8KIAotI2lmZGVmIERFQlVHX0lOUFVUCi0jZGVmaW5lIE1JTkxFTiA0MAotI2Vsc2UKICNkZWZpbmUgTUlOTEVOIDQwMDAKLSNlbmRpZgogCiAvKgogICogSW5wdXQgSS9PIGNhbGxiYWNrIHNldHMKQEAgLTExMSw5ICsxMDQsNiBAQAogc3RhdGljIHhtbE91dHB1dENhbGxiYWNrIHhtbE91dHB1dENhbGxiYWNrVGFibGVbTUFYX09VVFBVVF9DQUxMQkFDS107CiBzdGF0aWMgaW50IHhtbE91dHB1dENhbGxiYWNrTnIgPSAwOwogc3RhdGljIGludCB4bWxPdXRwdXRDYWxsYmFja0luaXRpYWxpemVkID0gMDsKLQoteG1sT3V0cHV0QnVmZmVyUHRyCi14bWxBbGxvY091dHB1dEJ1ZmZlckludGVybmFsKHhtbENoYXJFbmNvZGluZ0hhbmRsZXJQdHIgZW5jb2Rlcik7CiAjZW5kaWYgLyogTElCWE1MX09VVFBVVF9FTkFCTEVEICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIxNCw2ICsyMDQsNyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKExJQlhNTF9IVFRQX0VOQUJMRUQpICYmIGRlZmluZWQoTElCWE1MX09VVFBVVF9FTkFCTEVEKQogLyoqCiAgKiB4bWxJT0Vyck1lbW9yeToKICAqIEBleHRyYTogIGV4dHJhIGluZm9ybWF0aW9uCkBAIC0yMjUsNiArMjE2LDcgQEAKIHsKICAgICBfX3htbFNpbXBsZUVycm9yKFhNTF9GUk9NX0lPLCBYTUxfRVJSX05PX01FTU9SWSwgTlVMTCwgTlVMTCwgZXh0cmEpOwogfQorI2VuZGlmCiAKIC8qKgogICogX194bWxJT0VycjoKQEAgLTcyMCwyMCArNzEyLDYgQEAKIH0KIAogLyoqCi0gKiB4bWxJbnB1dFJlYWRDYWxsYmFja05vcDoKLSAqCi0gKiBObyBPcGVyYXRpb24geG1sSW5wdXRSZWFkQ2FsbGJhY2sgZnVuY3Rpb24sIGRvZXMgbm90aGluZy4KLSAqCi0gKiBSZXR1cm5zIHplcm8KLSAqLwotaW50Ci14bWxJbnB1dFJlYWRDYWxsYmFja05vcCh2b2lkICpjb250ZXh0IEFUVFJJQlVURV9VTlVTRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIgQVRUUklCVVRFX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gQVRUUklCVVRFX1VOVVNFRCkgewotICAgIHJldHVybigwKTsKLX0KLQotLyoqCiAgKiB4bWxGZFJlYWQ6CiAgKiBAY29udGV4dDogIHRoZSBJL08gY29udGV4dAogICogQGJ1ZmZlcjogIHdoZXJlIHRvIGRyb3AgZGF0YQpAQCAtMTI2Niw3ICsxMjQ0LDcgQEAKICAqCQlJL08gZm9yIGNvbXByZXNzZWQgZmlsZSBhY2Nlc3NlcwkJCSoKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJ4emxpYi5oIgorI2luY2x1ZGUgInByaXZhdGUveHpsaWIuaCIKIC8qKgogICogeG1sWHpmaWxlTWF0Y2g6CiAgKiBAZmlsZW5hbWU6ICB0aGUgVVJJIGZvciBtYXRjaGluZwpAQCAtMTQ2NCwyMyArMTQ0MiwxMSBAQAogc3RhdGljIHZvaWQKIHhtbEZyZWVaTWVtQnVmZiggeG1sWk1lbUJ1ZmZQdHIgYnVmZiApIHsKIAotI2lmZGVmIERFQlVHX0hUVFAKLSAgICBpbnQgel9lcnI7Ci0jZW5kaWYKLQogICAgIGlmICggYnVmZiA9PSBOVUxMICkKIAlyZXR1cm47CiAKICAgICB4bWxGcmVlKCBidWZmLT56YnVmZiApOwotI2lmZGVmIERFQlVHX0hUVFAKLSAgICB6X2VyciA9IGRlZmxhdGVFbmQoICZidWZmLT56Y3RybCApOwotICAgIGlmICggel9lcnIgIT0gWl9PSyApCi0JeG1sR2VuZXJpY0Vycm9yKCB4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJInhtbEZyZWVaTWVtQnVmZjogIEVycm9yIHJlbGVhc2luZyB6bGliIGNvbnRleHQ6ICAlZFxuIiwKLQkJCXpfZXJyICk7Ci0jZWxzZQogICAgIGRlZmxhdGVFbmQoICZidWZmLT56Y3RybCApOwotI2VuZGlmCiAKICAgICB4bWxGcmVlKCBidWZmICk7CiAgICAgcmV0dXJuOwpAQCAtMTU3OCwxNSArMTU0NCw2IEBACiAgICAgY3VyX3VzZWQgPSBidWZmLT56Y3RybC5uZXh0X291dCAtIGJ1ZmYtPnpidWZmOwogICAgIG5ld19zaXplID0gYnVmZi0+c2l6ZSArIGV4dF9hbXQ7CiAKLSNpZmRlZiBERUJVR19IVFRQCi0gICAgaWYgKCBjdXJfdXNlZCA+IG5ld19zaXplICkKLQl4bWxHZW5lcmljRXJyb3IoIHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkieG1sWk1lbUJ1ZmZFeHRlbmQ6ICAlc1xuJXMgJWQgYnl0ZXMuXG4iLAotCQkJIkJ1ZmZlciBvdmVyd3JpdGUgZGV0ZWN0ZWQgZHVyaW5nIGNvbXByZXNzZWQgbWVtb3J5IiwKLQkJCSJidWZmZXIgZXh0ZW5zaW9uLiAgT3ZlcmZsb3dlZCBieSIsCi0JCQkoY3VyX3VzZWQgLSBuZXdfc2l6ZSApICk7Ci0jZW5kaWYKLQogICAgIHRtcF9wdHIgPSB4bWxSZWFsbG9jKCBidWZmLT56YnVmZiwgbmV3X3NpemUgKTsKICAgICBpZiAoIHRtcF9wdHIgIT0gTlVMTCApIHsKIAlyYyA9IDA7CkBAIC0yMDA3LDU4ICsxOTY0LDYgQEAKIAkJCQkJY29udGVudF9sZ3RoICk7CiAKIAlpZiAoIGh0dHBfY3R4dCAhPSBOVUxMICkgewotI2lmZGVmIERFQlVHX0hUVFAKLQkgICAgLyogIElmIHRlc3RpbmcvZGVidWdnaW5nIC0gZHVtcCByZXBseSB3aXRoIHJlcXVlc3QgY29udGVudCAgKi8KLQotCSAgICBGSUxFICoJdHN0X2ZpbGUgPSBOVUxMOwotCSAgICBjaGFyCWJ1ZmZlclsgNDA5NiBdOwotCSAgICBjaGFyICoJZHVtcF9uYW1lID0gTlVMTDsKLQkgICAgaW50CQlhdmFpbDsKLQotCSAgICB4bWxHZW5lcmljRXJyb3IoIHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkieG1sTmFub0hUVFBDbG9zZVdyaXRlOiAgSFRUUCAlcyB0b1xuJXMgcmV0dXJuZWQgJWQuXG4iLAotCQkJaHR0cF9tdGhkLCBjdHh0LT51cmksCi0JCQl4bWxOYW5vSFRUUFJldHVybkNvZGUoIGh0dHBfY3R4dCApICk7Ci0KLQkgICAgLyoKLQkgICAgKiogIFNpbmNlIGVpdGhlciBjb250ZW50IG9yIHJlcGx5IG1heSBiZSBnemlwcGVkLAotCSAgICAqKiAgZHVtcCB0aGVtIHRvIHNlcGFyYXRlIGZpbGVzIGluc3RlYWQgb2YgdGhlCi0JICAgICoqICBzdGFuZGFyZCBlcnJvciBjb250ZXh0LgotCSAgICAqLwotCi0JICAgIGR1bXBfbmFtZSA9IHRlbXBuYW0oIE5VTEwsICJseG1sIiApOwotCSAgICBpZiAoIGR1bXBfbmFtZSAhPSBOVUxMICkgewotCQkodm9pZClzbnByaW50ZiggYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzLmNvbnRlbnQiLCBkdW1wX25hbWUgKTsKLQotCQl0c3RfZmlsZSA9IGZvcGVuKCBidWZmZXIsICJ3YiIgKTsKLQkJaWYgKCB0c3RfZmlsZSAhPSBOVUxMICkgewotCQkgICAgeG1sR2VuZXJpY0Vycm9yKCB4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIlRyYW5zbWl0dGVkIGNvbnRlbnQgc2F2ZWQgaW4gZmlsZTogICVzXG4iLCBidWZmZXIgKTsKLQotCQkgICAgZndyaXRlKCBodHRwX2NvbnRlbnQsIHNpemVvZiggY2hhciApLAotCQkJCQljb250ZW50X2xndGgsIHRzdF9maWxlICk7Ci0JCSAgICBmY2xvc2UoIHRzdF9maWxlICk7Ci0JCX0KLQotCQkodm9pZClzbnByaW50ZiggYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzLnJlcGx5IiwgZHVtcF9uYW1lICk7Ci0JCXRzdF9maWxlID0gZm9wZW4oIGJ1ZmZlciwgIndiIiApOwotCQlpZiAoIHRzdF9maWxlICE9IE5VTEwgKSB7Ci0JCSAgICB4bWxHZW5lcmljRXJyb3IoIHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUmVwbHkgY29udGVudCBzYXZlZCBpbiBmaWxlOiAgJXNcbiIsIGJ1ZmZlciApOwotCi0KLQkJICAgIHdoaWxlICggKGF2YWlsID0geG1sTmFub0hUVFBSZWFkKCBodHRwX2N0eHQsCi0JCQkJCWJ1ZmZlciwgc2l6ZW9mKCBidWZmZXIgKSApKSA+IDAgKSB7Ci0KLQkJCWZ3cml0ZSggYnVmZmVyLCBzaXplb2YoIGNoYXIgKSwgYXZhaWwsIHRzdF9maWxlICk7Ci0JCSAgICB9Ci0KLQkJICAgIGZjbG9zZSggdHN0X2ZpbGUgKTsKLQkJfQotCi0JCWZyZWUoIGR1bXBfbmFtZSApOwotCSAgICB9Ci0jZW5kaWYgIC8qICBERUJVR19IVFRQICAqLwogCiAJICAgIGh0dHBfcnRuID0geG1sTmFub0hUVFBSZXR1cm5Db2RlKCBodHRwX2N0eHQgKTsKIAkgICAgaWYgKCAoIGh0dHBfcnRuID49IDIwMCApICYmICggaHR0cF9ydG4gPCAzMDAgKSApCkBAIC0yMzQzLDEwICsyMjQ4LDkgQEAKIAogICAgIHJldCA9ICh4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxQYXJzZXJJbnB1dEJ1ZmZlcikpOwogICAgIGlmIChyZXQgPT0gTlVMTCkgewotCXhtbElPRXJyTWVtb3J5KCJjcmVhdGluZyBpbnB1dCBidWZmZXIiKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAsIChzaXplX3QpIHNpemVvZih4bWxQYXJzZXJJbnB1dEJ1ZmZlcikpOworICAgIG1lbXNldChyZXQsIDAsIHNpemVvZih4bWxQYXJzZXJJbnB1dEJ1ZmZlcikpOwogICAgIHJldC0+YnVmZmVyID0geG1sQnVmQ3JlYXRlU2l6ZSgyICogeG1sRGVmYXVsdEJ1ZmZlclNpemUpOwogICAgIGlmIChyZXQtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEZyZWUocmV0KTsKQEAgLTIzODIsMTAgKzIyODYsOSBAQAogCiAgICAgcmV0ID0gKHhtbE91dHB1dEJ1ZmZlclB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxPdXRwdXRCdWZmZXIpKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKLQl4bWxJT0Vyck1lbW9yeSgiY3JlYXRpbmcgb3V0cHV0IGJ1ZmZlciIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCwgKHNpemVfdCkgc2l6ZW9mKHhtbE91dHB1dEJ1ZmZlcikpOworICAgIG1lbXNldChyZXQsIDAsIHNpemVvZih4bWxPdXRwdXRCdWZmZXIpKTsKICAgICByZXQtPmJ1ZmZlciA9IHhtbEJ1ZkNyZWF0ZSgpOwogICAgIGlmIChyZXQtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEZyZWUocmV0KTsKQEAgLTI0MzAsMTAgKzIzMzMsOSBAQAogCiAgICAgcmV0ID0gKHhtbE91dHB1dEJ1ZmZlclB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxPdXRwdXRCdWZmZXIpKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKLQl4bWxJT0Vyck1lbW9yeSgiY3JlYXRpbmcgb3V0cHV0IGJ1ZmZlciIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCwgKHNpemVfdCkgc2l6ZW9mKHhtbE91dHB1dEJ1ZmZlcikpOworICAgIG1lbXNldChyZXQsIDAsIHNpemVvZih4bWxPdXRwdXRCdWZmZXIpKTsKICAgICByZXQtPmJ1ZmZlciA9IHhtbEJ1ZkNyZWF0ZSgpOwogICAgIGlmIChyZXQtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIHhtbEZyZWUocmV0KTsKQEAgLTI5MjgsMzggKzI4MzAsNzggQEAKICAgICByZXR1cm4ocmV0KTsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKm1lbTsKKyAgICBjb25zdCBjaGFyICpjdXI7CisgICAgc2l6ZV90IHNpemU7Cit9IHhtbE1lbUlPQ3R4dDsKKworc3RhdGljIGludAoreG1sTWVtUmVhZCh2b2lkICp2Y3R4dCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkgeworICAgIHhtbE1lbUlPQ3R4dCAqY3R4dCA9IHZjdHh0OworCisgICAgaWYgKChzaXplX3QpIHNpemUgPiBjdHh0LT5zaXplKQorICAgICAgICBzaXplID0gY3R4dC0+c2l6ZTsKKworICAgIG1lbWNweShidWYsIGN0eHQtPmN1ciwgc2l6ZSk7CisgICAgY3R4dC0+Y3VyICs9IHNpemU7CisgICAgY3R4dC0+c2l6ZSAtPSBzaXplOworCisgICAgcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQKK3htbE1lbUNsb3NlKHZvaWQgKnZjdHh0KSB7CisgICAgeG1sTWVtSU9DdHh0ICpjdHh0ID0gdmN0eHQ7CisKKyAgICBpZiAoY3R4dC0+bWVtICE9IDApCisgICAgICAgIHhtbEZyZWUoY3R4dC0+bWVtKTsKKyAgICB4bWxGcmVlKGN0eHQpOworICAgIHJldHVybigwKTsKK30KKwogLyoqCiAgKiB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbToKICAqIEBtZW06ICB0aGUgbWVtb3J5IGlucHV0CiAgKiBAc2l6ZTogIHRoZSBsZW5ndGggb2YgdGhlIG1lbW9yeSBibG9jawogICogQGVuYzogIHRoZSBjaGFyc2V0IGVuY29kaW5nIGlmIGtub3duCiAgKgotICogQ3JlYXRlIGEgYnVmZmVyZWQgcGFyc2VyIGlucHV0IGZvciB0aGUgcHJvZ3Jlc3NpdmUgcGFyc2luZyBmb3IgdGhlIGlucHV0Ci0gKiBmcm9tIGEgbWVtb3J5IGFyZWEuCisgKiBDcmVhdGUgYSBwYXJzZXIgaW5wdXQgYnVmZmVyIGZvciBwYXJzaW5nIGZyb20gYSBtZW1vcnkgYXJlYS4KICAqCi0gKiBSZXR1cm5zIHRoZSBuZXcgcGFyc2VyIGlucHV0IG9yIE5VTEwKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSB3aG9sZSBpbnB1dCBidWZmZXIuIElmIHlvdSBhcmUgc3VyZQorICogdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgZG9jdW1lbnQKKyAqIHdhcyBwYXJzZWQsIHlvdSBjYW4gYXZvaWQgdGhlIGNvcHkgYnkgdXNpbmcKKyAqIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljLgorICoKKyAqIFRoZSBlbmNvZGluZyBhcmd1bWVudCBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgc2V0IHRvCisgKiBYTUxfQ0hBUl9FTkNPRElOR19OT05FLiBUaGUgZW5jb2RpbmcgY2FuIGJlIGNoYW5nZWQgd2l0aAorICogeG1sU3dpdGNoRW5jb2Rpbmcgb3IgeG1sU3dpdGNoRW5jb2RpbmdOYW1lIGxhdGVyIG9uLgorICoKKyAqIFJldHVybnMgdGhlIG5ldyBwYXJzZXIgaW5wdXQgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cgogeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0oY29uc3QgY2hhciAqbWVtLCBpbnQgc2l6ZSwgeG1sQ2hhckVuY29kaW5nIGVuYykgewotICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIHJldDsKLSAgICBpbnQgZXJyY29kZTsKKyAgICB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBidWY7CisgICAgeG1sTWVtSU9DdHh0ICpjdHh0OworICAgIGNoYXIgKmNvcHk7CiAKLSAgICBpZiAoc2l6ZSA8IDApIHJldHVybihOVUxMKTsKLSAgICBpZiAobWVtID09IE5VTEwpIHJldHVybihOVUxMKTsKKyAgICBpZiAoKHNpemUgPCAwKSB8fCAobWVtID09IE5VTEwpKQorICAgICAgICByZXR1cm4oTlVMTCk7CiAKLSAgICByZXQgPSB4bWxBbGxvY1BhcnNlcklucHV0QnVmZmVyKGVuYyk7Ci0gICAgaWYgKHJldCAhPSBOVUxMKSB7Ci0gICAgICAgIHJldC0+Y29udGV4dCA9ICh2b2lkICopIG1lbTsKLQlyZXQtPnJlYWRjYWxsYmFjayA9IHhtbElucHV0UmVhZENhbGxiYWNrTm9wOwotCXJldC0+Y2xvc2VjYWxsYmFjayA9IE5VTEw7Ci0JZXJyY29kZSA9IHhtbEJ1ZkFkZChyZXQtPmJ1ZmZlciwgKGNvbnN0IHhtbENoYXIgKikgbWVtLCBzaXplKTsKLQlpZiAoZXJyY29kZSAhPSAwKSB7Ci0JICAgIHhtbEZyZWUocmV0KTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0KKyAgICBjb3B5ID0gKGNoYXIgKikgeG1sU3RybmR1cCgoY29uc3QgeG1sQ2hhciAqKSBtZW0sIHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKworICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGNvcHksIHNpemUsIGVuYyk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIHhtbEZyZWUoY29weSk7CisgICAgICAgIHJldHVybihOVUxMKTsKICAgICB9CiAKLSAgICByZXR1cm4ocmV0KTsKKyAgICBjdHh0ID0gYnVmLT5jb250ZXh0OworICAgIGN0eHQtPm1lbSA9IGNvcHk7CisKKyAgICByZXR1cm4oYnVmKTsKIH0KIAogLyoqCkBAIC0yOTY4LDQxICsyOTEwLDEwMiBAQAogICogQHNpemU6ICB0aGUgbGVuZ3RoIG9mIHRoZSBtZW1vcnkgYmxvY2sKICAqIEBlbmM6ICB0aGUgY2hhcnNldCBlbmNvZGluZyBpZiBrbm93bgogICoKLSAqIENyZWF0ZSBhIGJ1ZmZlcmVkIHBhcnNlciBpbnB1dCBmb3IgdGhlIHByb2dyZXNzaXZlIHBhcnNpbmcgZm9yIHRoZSBpbnB1dAotICogZnJvbSBhbiBpbW11dGFibGUgbWVtb3J5IGFyZWEuIFRoaXMgd2lsbCBub3QgY29weSB0aGUgbWVtb3J5IGFyZWEgdG8KLSAqIHRoZSBidWZmZXIsIGJ1dCB0aGUgbWVtb3J5IGlzIGV4cGVjdGVkIHRvIGJlIGF2YWlsYWJsZSB1bnRpbCB0aGUgZW5kIG9mCi0gKiB0aGUgcGFyc2luZywgdGhpcyBpcyB1c2VmdWwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyBtbWFwJ2VkIGZpbGUuCisgKiBDcmVhdGUgYSBwYXJzZXIgaW5wdXQgYnVmZmVyIGZvciBwYXJzaW5nIGZyb20gYSBtZW1vcnkgYXJlYS4KICAqCi0gKiBSZXR1cm5zIHRoZSBuZXcgcGFyc2VyIGlucHV0IG9yIE5VTEwKKyAqIFRoaXMgZnVuY3Rpb25zIGFzc3VtZXMgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGlucHV0IGJ1ZmZlciByZW1haW4KKyAqIHZhbGlkIHVudGlsIHRoZSBkb2N1bWVudCB3YXMgcGFyc2VkLiBVc2UgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0KKyAqIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgZW5jb2RpbmcgYXJndW1lbnQgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHNldCB0bworICogWE1MX0NIQVJfRU5DT0RJTkdfTk9ORS4gVGhlIGVuY29kaW5nIGNhbiBiZSBjaGFuZ2VkIHdpdGgKKyAqIHhtbFN3aXRjaEVuY29kaW5nIG9yIHhtbFN3aXRjaEVuY29kaW5nTmFtZSBsYXRlciBvbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXcgcGFyc2VyIGlucHV0IG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KICAqLwogeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIKIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGNvbnN0IGNoYXIgKm1lbSwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDaGFyRW5jb2RpbmcgZW5jKSB7CiAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgcmV0OworICAgIHhtbE1lbUlPQ3R4dCAqY3R4dDsKIAotICAgIGlmIChzaXplIDwgMCkgcmV0dXJuKE5VTEwpOwotICAgIGlmIChtZW0gPT0gTlVMTCkgcmV0dXJuKE5VTEwpOworICAgIGlmICgoc2l6ZSA8IDApIHx8IChtZW0gPT0gTlVMTCkpCisgICAgICAgIHJldHVybihOVUxMKTsKIAotICAgIHJldCA9ICh4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxQYXJzZXJJbnB1dEJ1ZmZlcikpOwotICAgIGlmIChyZXQgPT0gTlVMTCkgewotCXhtbElPRXJyTWVtb3J5KCJjcmVhdGluZyBpbnB1dCBidWZmZXIiKTsKLQlyZXR1cm4oTlVMTCk7CisgICAgcmV0ID0geG1sQWxsb2NQYXJzZXJJbnB1dEJ1ZmZlcihlbmMpOworICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgY3R4dCA9IHhtbE1hbGxvYyhzaXplb2YoKmN0eHQpKTsKKyAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihyZXQpOworICAgICAgICByZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAsIChzaXplX3QpIHNpemVvZih4bWxQYXJzZXJJbnB1dEJ1ZmZlcikpOwotICAgIHJldC0+YnVmZmVyID0geG1sQnVmQ3JlYXRlU3RhdGljKCh2b2lkICopbWVtLCAoc2l6ZV90KSBzaXplKTsKLSAgICBpZiAocmV0LT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICB4bWxGcmVlKHJldCk7Ci0JcmV0dXJuKE5VTEwpOworICAgIGN0eHQtPm1lbSA9IE5VTEw7CisgICAgY3R4dC0+Y3VyID0gbWVtOworICAgIGN0eHQtPnNpemUgPSBzaXplOworCisgICAgcmV0LT5jb250ZXh0ID0gY3R4dDsKKyAgICByZXQtPnJlYWRjYWxsYmFjayA9IHhtbE1lbVJlYWQ7CisgICAgcmV0LT5jbG9zZWNhbGxiYWNrID0geG1sTWVtQ2xvc2U7CisKKyAgICByZXR1cm4ocmV0KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IHhtbENoYXIgKnN0cjsKK30geG1sU3RyaW5nSU9DdHh0OworCitzdGF0aWMgaW50Cit4bWxTdHJpbmdSZWFkKHZvaWQgKnZjdHh0LCBjaGFyICpidWYsIGludCBzaXplKSB7CisgICAgeG1sU3RyaW5nSU9DdHh0ICpjdHh0ID0gdmN0eHQ7CisgICAgY29uc3QgeG1sQ2hhciAqemVybzsKKyAgICBzaXplX3QgbGVuOworCisgICAgemVybyA9IG1lbWNocihjdHh0LT5zdHIsIDAsIHNpemUpOworICAgIGxlbiA9IHplcm8gPyB6ZXJvIC0gY3R4dC0+c3RyIDogc2l6ZTsKKworICAgIG1lbWNweShidWYsIGN0eHQtPnN0ciwgbGVuKTsKKyAgICBjdHh0LT5zdHIgKz0gbGVuOworCisgICAgcmV0dXJuKGxlbik7Cit9CisKK3N0YXRpYyBpbnQKK3htbFN0cmluZ0Nsb3NlKHZvaWQgKnZjdHh0KSB7CisgICAgeG1sRnJlZSh2Y3R4dCk7CisgICAgcmV0dXJuKDApOworfQorCisvKioKKyAqIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RyaW5nOgorICogQHN0cjogIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZworICoKKyAqIENyZWF0ZSBhIGJ1ZmZlcmVkIHBhcnNlciBpbnB1dCBmb3IgdGhlIHByb2dyZXNzaXZlIHBhcnNpbmcgZm9yIHRoZSBpbnB1dAorICogZnJvbSBhIG51bGwtdGVybWluYXRlZCBDIHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXcgcGFyc2VyIGlucHV0IG9yIE5VTEwKKyAqLworeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIKK3htbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RyaW5nKGNvbnN0IHhtbENoYXIgKnN0cikgeworICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIHJldDsKKyAgICB4bWxTdHJpbmdJT0N0eHQgKmN0eHQ7CisKKyAgICBpZiAoc3RyID09IE5VTEwpIHJldHVybihOVUxMKTsKKworICAgIHJldCA9IHhtbEFsbG9jUGFyc2VySW5wdXRCdWZmZXIoWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVMTCk7CisKKyAgICBjdHh0ID0geG1sTWFsbG9jKHNpemVvZigqY3R4dCkpOworICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKHJldCk7CisgICAgICAgIHJldHVybihOVUxMKTsKICAgICB9Ci0gICAgcmV0LT5lbmNvZGVyID0geG1sR2V0Q2hhckVuY29kaW5nSGFuZGxlcihlbmMpOwotICAgIGlmIChyZXQtPmVuY29kZXIgIT0gTlVMTCkKLSAgICAgICAgcmV0LT5yYXcgPSB4bWxCdWZDcmVhdGVTaXplKDIgKiB4bWxEZWZhdWx0QnVmZmVyU2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXQtPnJhdyA9IE5VTEw7Ci0gICAgcmV0LT5jb21wcmVzc2VkID0gLTE7Ci0gICAgcmV0LT5jb250ZXh0ID0gKHZvaWQgKikgbWVtOwotICAgIHJldC0+cmVhZGNhbGxiYWNrID0gTlVMTDsKLSAgICByZXQtPmNsb3NlY2FsbGJhY2sgPSBOVUxMOworICAgIGN0eHQtPnN0ciA9IHN0cjsKKworICAgIHJldC0+Y29udGV4dCA9IGN0eHQ7CisgICAgcmV0LT5yZWFkY2FsbGJhY2sgPSB4bWxTdHJpbmdSZWFkOworICAgIHJldC0+Y2xvc2VjYWxsYmFjayA9IHhtbFN0cmluZ0Nsb3NlOwogCiAgICAgcmV0dXJuKHJldCk7CiB9CkBAIC0zMTU5LDQwICszMTYyLDM2IEBACiAgICAgaWYgKGxlbiA8IDApIHJldHVybigwKTsKICAgICBpZiAoKGluID09IE5VTEwpIHx8IChpbi0+ZXJyb3IpKSByZXR1cm4oLTEpOwogICAgIGlmIChpbi0+ZW5jb2RlciAhPSBOVUxMKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCB1c2U7Ci0KICAgICAgICAgLyoKIAkgKiBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgaW5jb21pbmcgcmF3IGJ1ZmZlcgogCSAqLwogICAgICAgICBpZiAoaW4tPnJhdyA9PSBOVUxMKSB7CiAJICAgIGluLT5yYXcgPSB4bWxCdWZDcmVhdGUoKTsKKyAgICAgICAgICAgIGlmIChpbi0+cmF3ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpbi0+ZXJyb3IgPSBYTUxfRVJSX05PX01FTU9SWTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQogCX0KIAlyZXQgPSB4bWxCdWZBZGQoaW4tPnJhdywgKGNvbnN0IHhtbENoYXIgKikgYnVmLCBsZW4pOwotCWlmIChyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgIGluLT5lcnJvciA9IFhNTF9FUlJfTk9fTUVNT1JZOwogCSAgICByZXR1cm4oLTEpOworICAgICAgICB9CiAKIAkvKgogCSAqIGNvbnZlcnQgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byB0aGUgcGFyc2VyIHJlYWRpbmcgYnVmZmVyLgogCSAqLwotCXVzZSA9IHhtbEJ1ZlVzZShpbi0+cmF3KTsKLQluYmNoYXJzID0geG1sQ2hhckVuY0lucHV0KGluLCAxKTsKLQlpZiAobmJjaGFycyA8IDApIHsKLQkgICAgeG1sSU9FcnIoWE1MX0lPX0VOQ09ERVIsIE5VTEwpOwotCSAgICBpbi0+ZXJyb3IgPSBYTUxfSU9fRU5DT0RFUjsKKwluYmNoYXJzID0geG1sQ2hhckVuY0lucHV0KGluKTsKKwlpZiAobmJjaGFycyA8IDApCiAJICAgIHJldHVybigtMSk7Ci0JfQotCWluLT5yYXdjb25zdW1lZCArPSAodXNlIC0geG1sQnVmVXNlKGluLT5yYXcpKTsKICAgICB9IGVsc2UgewogCW5iY2hhcnMgPSBsZW47CiAgICAgICAgIHJldCA9IHhtbEJ1ZkFkZChpbi0+YnVmZmVyLCAoeG1sQ2hhciAqKSBidWYsIG5iY2hhcnMpOwotCWlmIChyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgIGluLT5lcnJvciA9IFhNTF9FUlJfTk9fTUVNT1JZOwogCSAgICByZXR1cm4oLTEpOworICAgICAgICB9CiAgICAgfQotI2lmZGVmIERFQlVHX0lOUFVUCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJJL086IHB1c2hlZCAlZCBjaGFycywgYnVmZmVyICVkLyVkXG4iLAotICAgICAgICAgICAgbmJjaGFycywgeG1sQnVmVXNlKGluLT5idWZmZXIpLCB4bWxCdWZMZW5ndGgoaW4tPmJ1ZmZlcikpOwotI2VuZGlmCiAgICAgcmV0dXJuKG5iY2hhcnMpOwogfQogCkBAIC0zMjI2LDQxICszMjI1LDQ1IEBACiAgKi8KIGludAogeG1sUGFyc2VySW5wdXRCdWZmZXJHcm93KHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGluLCBpbnQgbGVuKSB7Ci0gICAgY2hhciAqYnVmZmVyID0gTlVMTDsKKyAgICB4bWxCdWZQdHIgYnVmOwogICAgIGludCByZXMgPSAwOwotICAgIGludCBuYmNoYXJzID0gMDsKIAogICAgIGlmICgoaW4gPT0gTlVMTCkgfHwgKGluLT5lcnJvcikpIHJldHVybigtMSk7CiAgICAgaWYgKChsZW4gPD0gTUlOTEVOKSAmJiAobGVuICE9IDQpKQogICAgICAgICBsZW4gPSBNSU5MRU47CiAKLSAgICBpZiAoeG1sQnVmQXZhaWwoaW4tPmJ1ZmZlcikgPD0gMCkgewotCXhtbElPRXJyKFhNTF9JT19CVUZGRVJfRlVMTCwgTlVMTCk7Ci0JaW4tPmVycm9yID0gWE1MX0lPX0JVRkZFUl9GVUxMOwotCXJldHVybigtMSk7CisgICAgaWYgKGluLT5lbmNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGluLT5yZWFkY2FsbGJhY2sgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgYnVmID0gaW4tPmJ1ZmZlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaW4tPnJhdyA9PSBOVUxMKSB7CisJICAgIGluLT5yYXcgPSB4bWxCdWZDcmVhdGUoKTsKKwl9CisgICAgICAgIGJ1ZiA9IGluLT5yYXc7CiAgICAgfQogCi0gICAgaWYgKHhtbEJ1Zkdyb3coaW4tPmJ1ZmZlciwgbGVuICsgMSkgPCAwKSB7Ci0gICAgICAgIHhtbElPRXJyTWVtb3J5KCJncm93aW5nIGlucHV0IGJ1ZmZlciIpOwotICAgICAgICBpbi0+ZXJyb3IgPSBYTUxfRVJSX05PX01FTU9SWTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgYnVmZmVyID0gKGNoYXIgKil4bWxCdWZFbmQoaW4tPmJ1ZmZlcik7Ci0KICAgICAvKgogICAgICAqIENhbGwgdGhlIHJlYWQgbWV0aG9kIGZvciB0aGlzIEkvTyB0eXBlLgogICAgICAqLwogICAgIGlmIChpbi0+cmVhZGNhbGxiYWNrICE9IE5VTEwpIHsKLQlyZXMgPSBpbi0+cmVhZGNhbGxiYWNrKGluLT5jb250ZXh0LCAmYnVmZmVyWzBdLCBsZW4pOworICAgICAgICBpZiAoeG1sQnVmR3JvdyhidWYsIGxlbiArIDEpIDwgMCkgeworICAgICAgICAgICAgaW4tPmVycm9yID0gWE1MX0VSUl9OT19NRU1PUlk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisKKwlyZXMgPSBpbi0+cmVhZGNhbGxiYWNrKGluLT5jb250ZXh0LCAoY2hhciAqKXhtbEJ1ZkVuZChidWYpLCBsZW4pOwogCWlmIChyZXMgPD0gMCkKIAkgICAgaW4tPnJlYWRjYWxsYmFjayA9IGVuZE9mSW5wdXQ7Ci0gICAgfSBlbHNlIHsKLQl4bWxJT0VycihYTUxfSU9fTk9fSU5QVVQsIE5VTEwpOwotCWluLT5lcnJvciA9IFhNTF9JT19OT19JTlBVVDsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAocmVzIDwgMCkgewotCXJldHVybigtMSk7CisgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICBpbi0+ZXJyb3IgPSBYTUxfSU9fVU5LTk9XTjsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeG1sQnVmQWRkTGVuKGJ1ZiwgcmVzKSA8IDApIHsKKyAgICAgICAgICAgIGluLT5lcnJvciA9IFhNTF9FUlJfTk9fTUVNT1JZOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qCkBAIC0zMjczLDQxICszMjc2LDEyIEBACiAjZW5kaWYKICAgICB9CiAKLSAgICBsZW4gPSByZXM7CiAgICAgaWYgKGluLT5lbmNvZGVyICE9IE5VTEwpIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHVzZTsKLQotICAgICAgICAvKgotCSAqIFN0b3JlIHRoZSBkYXRhIGluIHRoZSBpbmNvbWluZyByYXcgYnVmZmVyCi0JICovCi0gICAgICAgIGlmIChpbi0+cmF3ID09IE5VTEwpIHsKLQkgICAgaW4tPnJhdyA9IHhtbEJ1ZkNyZWF0ZSgpOwotCX0KLQlyZXMgPSB4bWxCdWZBZGQoaW4tPnJhdywgKGNvbnN0IHhtbENoYXIgKikgYnVmZmVyLCBsZW4pOwotCWlmIChyZXMgIT0gMCkKKwlyZXMgPSB4bWxDaGFyRW5jSW5wdXQoaW4pOworCWlmIChyZXMgPCAwKQogCSAgICByZXR1cm4oLTEpOwotCi0JLyoKLQkgKiBjb252ZXJ0IGFzIG11Y2ggYXMgcG9zc2libGUgdG8gdGhlIHBhcnNlciByZWFkaW5nIGJ1ZmZlci4KLQkgKi8KLQl1c2UgPSB4bWxCdWZVc2UoaW4tPnJhdyk7Ci0JbmJjaGFycyA9IHhtbENoYXJFbmNJbnB1dChpbiwgMSk7Ci0JaWYgKG5iY2hhcnMgPCAwKSB7Ci0JICAgIHhtbElPRXJyKFhNTF9JT19FTkNPREVSLCBOVUxMKTsKLQkgICAgaW4tPmVycm9yID0gWE1MX0lPX0VOQ09ERVI7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWluLT5yYXdjb25zdW1lZCArPSAodXNlIC0geG1sQnVmVXNlKGluLT5yYXcpKTsKLSAgICB9IGVsc2UgewotCW5iY2hhcnMgPSBsZW47Ci0gICAgICAgIHhtbEJ1ZkFkZExlbihpbi0+YnVmZmVyLCBuYmNoYXJzKTsKICAgICB9Ci0jaWZkZWYgREVCVUdfSU5QVVQKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIkkvTzogcmVhZCAlZCBjaGFycywgYnVmZmVyICVkXG4iLAotICAgICAgICAgICAgbmJjaGFycywgeG1sQnVmVXNlKGluLT5idWZmZXIpKTsKLSNlbmRpZgotICAgIHJldHVybihuYmNoYXJzKTsKKyAgICByZXR1cm4ocmVzKTsKIH0KIAogLyoqCkBAIC0zMzI0LDEzICszMjk4LDcgQEAKICAqLwogaW50CiB4bWxQYXJzZXJJbnB1dEJ1ZmZlclJlYWQoeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW4sIGludCBsZW4pIHsKLSAgICBpZiAoKGluID09IE5VTEwpIHx8IChpbi0+ZXJyb3IpKSByZXR1cm4oLTEpOwotICAgIGlmIChpbi0+cmVhZGNhbGxiYWNrICE9IE5VTEwpCi0JcmV0dXJuKHhtbFBhcnNlcklucHV0QnVmZmVyR3JvdyhpbiwgbGVuKSk7Ci0gICAgZWxzZSBpZiAoeG1sQnVmR2V0QWxsb2NhdGlvblNjaGVtZShpbi0+YnVmZmVyKSA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkKLQlyZXR1cm4oMCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oLTEpOworICAgIHJldHVybih4bWxQYXJzZXJJbnB1dEJ1ZmZlckdyb3coaW4sIGxlbikpOwogfQogCiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECkBAIC0zNDM4LDEwICszNDA2LDYgQEAKICAgICB9IHdoaWxlIChsZW4gPiAwKTsKIAogZG9uZToKLSNpZmRlZiBERUJVR19JTlBVVAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiSS9POiB3cm90ZSAlZCBjaGFyc1xuIiwgd3JpdHRlbik7Ci0jZW5kaWYKICAgICByZXR1cm4od3JpdHRlbik7CiB9CiAKQEAgLTM0OTYsNyArMzQ2MCw3IEBACiAJICAgICpvdXQrKyA9ICczJzsKIAkgICAgKm91dCsrID0gJzsnOwogCX0gZWxzZSB7Ci0JICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSAqaW47CisJICAgICpvdXQrKyA9ICppbjsKIAl9CiAJKytpbjsKICAgICB9CkBAIC0zNTMyLDggKzM0OTYsNyBAQAogICAgIGludCBjb25zOyAgICAgICAgLyogYnl0ZSBmcm9tIHN0ciBjb25zdW1lZCAqLwogCiAgICAgaWYgKChvdXQgPT0gTlVMTCkgfHwgKG91dC0+ZXJyb3IpIHx8IChzdHIgPT0gTlVMTCkgfHwKLSAgICAgICAgKG91dC0+YnVmZmVyID09IE5VTEwpIHx8Ci0JKHhtbEJ1ZkdldEFsbG9jYXRpb25TY2hlbWUob3V0LT5idWZmZXIpID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSkKKyAgICAgICAgKG91dC0+YnVmZmVyID09IE5VTEwpKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIGxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKXN0cik7CiAgICAgaWYgKGxlbiA8IDApIHJldHVybigwKTsKQEAgLTM2MzksMTAgKzM2MDIsNiBAQAogICAgIH0gd2hpbGUgKChsZW4gPiAwKSAmJiAob2xkd3JpdHRlbiAhPSB3cml0dGVuKSk7CiAKIGRvbmU6Ci0jaWZkZWYgREVCVUdfSU5QVVQKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIkkvTzogd3JvdGUgJWQgY2hhcnNcbiIsIHdyaXR0ZW4pOwotI2VuZGlmCiAgICAgcmV0dXJuKHdyaXR0ZW4pOwogfQogCkBAIC0zNzMwLDEwICszNjg5LDYgQEAKICAgICBlbHNlCiAgICAgICAgIG91dC0+d3JpdHRlbiArPSByZXQ7CiAKLSNpZmRlZiBERUJVR19JTlBVVAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiSS9POiBmbHVzaGVkICVkIGNoYXJzXG4iLCByZXQpOwotI2VuZGlmCiAgICAgcmV0dXJuKHJldCk7CiB9CiAjZW5kaWYgLyogTElCWE1MX09VVFBVVF9FTkFCTEVEICovCkBAIC0zODQzLDggKzM3OTgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBlbmNvZGluZyAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBRF9DQVNUIGVuY29kaW5nLCBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocmV0LT5lbmNvZGluZyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0LT5lbmNvZGluZyA9IHhtbFN0cmR1cChCQURfQ0FTVCBlbmNvZGluZyk7CiAgICAgICAgICAgICAgICAgfQogI2lmIDAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoeG1sU3Ryc3RyKEJBRF9DQVNUIG1pbWUsIEJBRF9DQVNUICJodG1sIikpIHsKQEAgLTM5ODYsMTAgKzM5MzksNiBAQAogICAgIHhtbFBhcnNlcklucHV0UHRyIHJldCA9IE5VTEw7CiAgICAgeG1sQ2hhciAqcmVzb3VyY2UgPSBOVUxMOwogCi0jaWZkZWYgREVCVUdfRVhURVJOQUxfRU5USVRJRVMKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgInhtbERlZmF1bHRFeHRlcm5hbEVudGl0eUxvYWRlciglcywgeHh4KVxuIiwgVVJMKTsKLSNlbmRpZgogICAgIGlmICgoY3R4dCAhPSBOVUxMKSAmJiAoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9OT05FVCkpIHsKICAgICAgICAgaW50IG9wdGlvbnMgPSBjdHh0LT5vcHRpb25zOwogCkBAIC00MDYzLDcgKzQwMTIsNyBAQAogCiAJY2Fub25pY0ZpbGVuYW1lID0gKGNoYXIgKikgeG1sQ2Fub25pY1BhdGgoKGNvbnN0IHhtbENoYXIgKikgVVJMKTsKIAlpZiAoY2Fub25pY0ZpbGVuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHhtbElPRXJyTWVtb3J5KCJidWlsZGluZyBjYW5vbmljYWwgcGF0aFxuIik7CisgICAgICAgICAgICB4bWxFcnJNZW1vcnkoY3R4dCwgImJ1aWxkaW5nIGNhbm9uaWNhbCBwYXRoXG4iKTsKIAkgICAgcmV0dXJuKE5VTEwpOwogCX0KIApkaWZmIC0tZ2l0IGEveG1sY2F0YWxvZy5jIGIveG1sY2F0YWxvZy5jCmluZGV4IDlkOTI2MTEuLjU4ODgwMmIgMTAwNjQ0Ci0tLSBhL3htbGNhdGFsb2cuYworKysgYi94bWxjYXRhbG9nLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+CiAjaW5jbHVkZSA8bGlieG1sL2NhdGFsb2cuaD4KICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+Ci0jaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KIAogI2lmIGRlZmluZWQoTElCWE1MX0NBVEFMT0dfRU5BQkxFRCkgJiYgZGVmaW5lZChMSUJYTUxfT1VUUFVUX0VOQUJMRUQpCiBzdGF0aWMgaW50IHNoZWxsID0gMDsKQEAgLTUwOSw2ICs1MDgsOSBAQAogCQkgICAgeG1sQUNhdGFsb2dEdW1wKGNhdGFsLCBzdGRvdXQpOwogCQl9CiAJCWkgKz0gMjsKKworICAgICAgICAgICAgICAgIHhtbEZyZWVDYXRhbG9nKGNhdGFsKTsKKyAgICAgICAgICAgICAgICB4bWxGcmVlQ2F0YWxvZyhzdXBlcik7CiAJICAgIH0gZWxzZSB7CiAJCWlmICgoIXN0cmNtcChhcmd2W2ldLCAiLWFkZCIpKSB8fAogCQkgICAgKCFzdHJjbXAoYXJndltpXSwgIi0tYWRkIikpKSB7CkBAIC01OTUsNyArNTk3LDYgQEAKICAgICAgKiBDbGVhbnVwIGFuZCBjaGVjayBmb3IgbWVtb3J5IGxlYWtzCiAgICAgICovCiAgICAgeG1sQ2xlYW51cFBhcnNlcigpOwotICAgIHhtbE1lbW9yeUR1bXAoKTsKICAgICByZXR1cm4oZXhpdF92YWx1ZSk7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEveG1sbGludC5jIGIveG1sbGludC5jCmluZGV4IGI1ZGZiZDAuLjIxZGJlN2QgMTAwNjQ0Ci0tLSBhL3htbGxpbnQuYworKysgYi94bWxsaW50LmMKQEAgLTEwLDkgKzEwLDEyIEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogCiAjaWZkZWYgSEFWRV9TWVNfVElNRV9ICiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTIwLDkgKzIzLDYgQEAKICNpZmRlZiBIQVZFX1NZU19USU1FQl9ICiAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CiAjZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCkBAIC0zMSw2ICszMSw4IEBACiAjZW5kaWYKICNpZmRlZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxpZiBkZWZpbmVkIChfV0lOMzIpCisjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfU1lTX01NQU5fSAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CkBAIC02MSw3ICs2Myw2IEBACiAjaWZkZWYgTElCWE1MX0NBVEFMT0dfRU5BQkxFRAogI2luY2x1ZGUgPGxpYnhtbC9jYXRhbG9nLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxyZWFkZXIuaD4KICNpZmRlZiBMSUJYTUxfU0NIRU1BVFJPTl9FTkFCTEVECiAjaW5jbHVkZSA8bGlieG1sL3NjaGVtYXRyb24uaD4KQEAgLTExMiw4ICsxMTMsOCBAQAogc3RhdGljIGludCBub2JsYW5rcyA9IDA7CiBzdGF0aWMgaW50IG5vb3V0ID0gMDsKIHN0YXRpYyBpbnQgbm93cmFwID0gMDsKLSNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKIHN0YXRpYyBpbnQgZm9ybWF0ID0gMDsKKyNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKIHN0YXRpYyBjb25zdCBjaGFyICpvdXRwdXQgPSBOVUxMOwogc3RhdGljIGludCBjb21wcmVzcyA9IDA7CiBzdGF0aWMgaW50IG9sZG91dCA9IDA7CkBAIC0xOTIsNiArMTkzLDcgQEAKIHN0YXRpYyBpbnQgb3B0aW9ucyA9IFhNTF9QQVJTRV9DT01QQUNUIHwgWE1MX1BBUlNFX0JJR19MSU5FUzsKIHN0YXRpYyBpbnQgc2F4ID0gMDsKIHN0YXRpYyBpbnQgb2xkeG1sMTAgPSAwOworc3RhdGljIHVuc2lnbmVkIG1heEFtcGwgPSAwOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJCQkJCSoKQEAgLTM1MiwxNyArMzU0LDE0IEBACiBzdGF0aWMgdm9pZCAqCiBteVJlYWxsb2NGdW5jKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCAqcmV0OworICAgIHNpemVfdCBvbGRzaXplID0geG1sTWVtU2l6ZShtZW0pOwogCi0gICAgcmV0ID0geG1sTWVtUmVhbGxvYyhtZW0sIHNpemUpOwotICAgIGlmIChyZXQgIT0gTlVMTCkgewotICAgICAgICBpZiAoeG1sTWVtVXNlZCgpID4gbWF4bWVtKSB7Ci0gICAgICAgICAgICBPT00oKTsKLSAgICAgICAgICAgIHhtbE1lbUZyZWUocmV0KTsKLSAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgICAgIH0KKyAgICBpZiAoeG1sTWVtVXNlZCgpICsgc2l6ZSAtIG9sZHNpemUgPiAoc2l6ZV90KSBtYXhtZW0pIHsKKyAgICAgICAgT09NKCk7CisgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgfQotICAgIHJldHVybiAocmV0KTsKKworICAgIHJldHVybiAoeG1sTWVtUmVhbGxvYyhtZW0sIHNpemUpKTsKIH0KIHN0YXRpYyBjaGFyICoKIG15U3RyZHVwRnVuYyhjb25zdCBjaGFyICpzdHIpCkBAIC00MjgsNyArNDI3LDcgQEAKICAqICAgICAgICAgICBtZXNzYWdlIGFib3V0IHRoZSB0aW1pbmcgcGVyZm9ybWVkOyBmb3JtYXQgaXMgYSBwcmludGYKICAqICAgICAgICAgICB0eXBlIGFyZ3VtZW50CiAgKi8KLXN0YXRpYyB2b2lkIFhNTENERUNMIExJQlhNTF9BVFRSX0ZPUk1BVCgxLDIpCitzdGF0aWMgdm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMSwyKQogZW5kVGltZXIoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgbG9uZyBtc2VjOwpAQCAtNDYxLDcgKzQ2MCw3IEBACiB7CiAgICAgYmVnaW4gPSBjbG9jaygpOwogfQotc3RhdGljIHZvaWQgWE1MQ0RFQ0wgTElCWE1MX0FUVFJfRk9STUFUKDEsMikKK3N0YXRpYyB2b2lkIExJQlhNTF9BVFRSX0ZPUk1BVCgxLDIpCiBlbmRUaW1lcihjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgICBsb25nIG1zZWM7CkBAIC01ODMsNyArNTgyLDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhbiBlcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwgcG9zaXRpb24gYW5kCiAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQorc3RhdGljIHZvaWQgTElCWE1MX0FUVFJfRk9STUFUKDIsMykKIHhtbEhUTUxFcnJvcih2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CkBAIC02MjAsNyArNjE5LDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhIHdhcm5pbmcgbWVzc2FnZXMsIGdpdmVzIGZpbGUsIGxpbmUsIHBvc2l0aW9uIGFuZAogICogZXh0cmEgcGFyYW1ldGVycy4KICAqLwotc3RhdGljIHZvaWQgWE1MQ0RFQ0wgTElCWE1MX0FUVFJfRk9STUFUKDIsMykKK3N0YXRpYyB2b2lkIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpCiB4bWxIVE1MV2FybmluZyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9ICh4bWxQYXJzZXJDdHh0UHRyKSBjdHg7CkBAIC02NTgsNyArNjU3LDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhbiB2YWxpZGl0eSBlcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwKICAqIGxpbmUsIHBvc2l0aW9uIGFuZCBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQorc3RhdGljIHZvaWQgTElCWE1MX0FUVFJfRk9STUFUKDIsMykKIHhtbEhUTUxWYWxpZGl0eUVycm9yKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbXNnLCAuLi4pCiB7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKQEAgLTY5NSw3ICs2OTQsNyBAQAogICogRGlzcGxheSBhbmQgZm9ybWF0IGEgdmFsaWRpdHkgd2FybmluZyBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwKICAqIHBvc2l0aW9uIGFuZCBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQorc3RhdGljIHZvaWQgTElCWE1MX0FUVFJfRk9STUFUKDIsMykKIHhtbEhUTUxWYWxpZGl0eVdhcm5pbmcodm9pZCAqY3R4LCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwpAQCAtMTM2MSw3ICsxMzYwLDcgQEAKICAqIERpc3BsYXkgYW5kIGZvcm1hdCBhIHdhcm5pbmcgbWVzc2FnZXMsIGdpdmVzIGZpbGUsIGxpbmUsIHBvc2l0aW9uIGFuZAogICogZXh0cmEgcGFyYW1ldGVycy4KICAqLwotc3RhdGljIHZvaWQgWE1MQ0RFQ0wgTElCWE1MX0FUVFJfRk9STUFUKDIsMykKK3N0YXRpYyB2b2lkIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpCiB3YXJuaW5nRGVidWcodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHZhX2xpc3QgYXJnczsKQEAgLTEzODQsNyArMTM4Myw3IEBACiAgKiBEaXNwbGF5IGFuZCBmb3JtYXQgYSBlcnJvciBtZXNzYWdlcywgZ2l2ZXMgZmlsZSwgbGluZSwgcG9zaXRpb24gYW5kCiAgKiBleHRyYSBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBYTUxDREVDTCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQorc3RhdGljIHZvaWQgTElCWE1MX0FUVFJfRk9STUFUKDIsMykKIGVycm9yRGVidWcodm9pZCAqY3R4IEFUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHZhX2xpc3QgYXJnczsKQEAgLTE0MDcsNyArMTQwNiw3IEBACiAgKiBEaXNwbGF5IGFuZCBmb3JtYXQgYSBmYXRhbEVycm9yIG1lc3NhZ2VzLCBnaXZlcyBmaWxlLCBsaW5lLCBwb3NpdGlvbiBhbmQKICAqIGV4dHJhIHBhcmFtZXRlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIFhNTENERUNMIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpCitzdGF0aWMgdm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQogZmF0YWxFcnJvckRlYnVnKHZvaWQgKmN0eCBBVFRSSUJVVEVfVU5VU0VELCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB2YV9saXN0IGFyZ3M7CkBAIC0xNTg2LDEwICsxNTg1LDYgQEAKIHRlc3RTQVgoY29uc3QgY2hhciAqZmlsZW5hbWUpIHsKICAgICB4bWxTQVhIYW5kbGVyUHRyIGhhbmRsZXI7CiAgICAgY29uc3QgY2hhciAqdXNlcl9kYXRhID0gInVzZXJfZGF0YSI7IC8qIG1vc3RseSBmb3IgZGVidWdnaW5nICovCi0gICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmID0gTlVMTDsKLSAgICB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dFN0cmVhbTsKLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSBOVUxMOwotICAgIHhtbFNBWEhhbmRsZXJQdHIgb2xkX3NheCA9IE5VTEw7CiAKICAgICBjYWxsYmFja3MgPSAwOwogCkBAIC0xNjAzLDI0ICsxNTk4LDIyIEBACiAgICAgICAgIGhhbmRsZXIgPSBkZWJ1Z1NBWDJIYW5kbGVyOwogICAgIH0KIAotICAgIC8qCi0gICAgICogaXQncyBub3QgdGhlIHNpbXBsZXN0IGNvZGUgYnV0IHRoZSBtb3N0IGdlbmVyaWMgaW4gdGVybSBvZiBJL08KLSAgICAgKi8KLSAgICBidWYgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lKGZpbGVuYW1lLCBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KICNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECiAgICAgaWYgKHd4c2NoZW1hcyAhPSBOVUxMKSB7CiAgICAgICAgIGludCByZXQ7CiAJeG1sU2NoZW1hVmFsaWRDdHh0UHRyIHZjdHh0OworICAgICAgICB4bWxQYXJzZXJJbnB1dEJ1ZmZlclB0ciBidWY7CisKKyAgICAgICAgYnVmID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZShmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuOwogCiAJdmN0eHQgPSB4bWxTY2hlbWFOZXdWYWxpZEN0eHQod3hzY2hlbWFzKTsKICAgICAgICAgaWYgKHZjdHh0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHByb2dyZXN1bHQgPSBYTUxMSU5UX0VSUl9NRU07CiAgICAgICAgICAgICB4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoYnVmKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAl4bWxTY2hlbWFTZXRWYWxpZEVycm9ycyh2Y3R4dCwgeG1sR2VuZXJpY0Vycm9yLCB4bWxHZW5lcmljRXJyb3IsIE5VTEwpOwogCXhtbFNjaGVtYVZhbGlkYXRlU2V0RmlsZW5hbWUodmN0eHQsIGZpbGVuYW1lKTsKQEAgLTE2NDUsMzggKzE2MzgsMjUgQEAKICAgICB9IGVsc2UKICNlbmRpZgogICAgIHsKKyAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gTlVMTDsKKwogCS8qCiAJICogQ3JlYXRlIHRoZSBwYXJzZXIgY29udGV4dCBhbWQgaG9vayB0aGUgaW5wdXQKIAkgKi8KLQljdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworCWN0eHQgPSB4bWxOZXdTQVhQYXJzZXJDdHh0KGhhbmRsZXIsICh2b2lkICopIHVzZXJfZGF0YSk7CiAJaWYgKGN0eHQgPT0gTlVMTCkgewogICAgICAgICAgICAgcHJvZ3Jlc3VsdCA9IFhNTExJTlRfRVJSX01FTTsKLQkgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGJ1Zik7Ci0JICAgIGdvdG8gZXJyb3I7CisJICAgIHJldHVybjsKIAl9Ci0Jb2xkX3NheCA9IGN0eHQtPnNheDsKLQljdHh0LT5zYXggPSBoYW5kbGVyOwotCWN0eHQtPnVzZXJEYXRhID0gKHZvaWQgKikgdXNlcl9kYXRhOwotCWlucHV0U3RyZWFtID0geG1sTmV3SU9JbnB1dFN0cmVhbShjdHh0LCBidWYsIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOwotCWlmIChpbnB1dFN0cmVhbSA9PSBOVUxMKSB7Ci0JICAgIHhtbEZyZWVQYXJzZXJJbnB1dEJ1ZmZlcihidWYpOwotCSAgICBnb3RvIGVycm9yOwotCX0KLQlpbnB1dFB1c2goY3R4dCwgaW5wdXRTdHJlYW0pOwotCi0JLyogZG8gdGhlIHBhcnNpbmcgKi8KLQl4bWxQYXJzZURvY3VtZW50KGN0eHQpOworICAgICAgICBpZiAobWF4QW1wbCA+IDApCisgICAgICAgICAgICB4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbihjdHh0LCBtYXhBbXBsKTsKKyAgICAgICAgeG1sQ3R4dFJlYWRGaWxlKGN0eHQsIGZpbGVuYW1lLCBOVUxMLCBvcHRpb25zKTsKIAogCWlmIChjdHh0LT5teURvYyAhPSBOVUxMKSB7CiAJICAgIGZwcmludGYoc3RkZXJyLCAiU0FYIGdlbmVyYXRlZCBhIGRvYyAhXG4iKTsKIAkgICAgeG1sRnJlZURvYyhjdHh0LT5teURvYyk7CiAJICAgIGN0eHQtPm15RG9jID0gTlVMTDsKIAl9Ci0gICAgfQotCi1lcnJvcjoKLSAgICBpZiAoY3R4dCAhPSBOVUxMKSB7Ci0gICAgICAgIGN0eHQtPnNheCA9IG9sZF9zYXg7CiAgICAgICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogICAgIH0KIH0KQEAgLTE4MDYsMTUgKzE3ODYsNiBAQAogI2VuZGlmCiAJcmVhZGVyID0geG1sUmVhZGVyRm9yRmlsZShmaWxlbmFtZSwgTlVMTCwgb3B0aW9ucyk7CiAjaWZkZWYgTElCWE1MX1BBVFRFUk5fRU5BQkxFRAotICAgIGlmIChwYXR0ZXJuICE9IE5VTEwpIHsKLSAgICAgICAgcGF0dGVybmMgPSB4bWxQYXR0ZXJuY29tcGlsZSgoY29uc3QgeG1sQ2hhciAqKSBwYXR0ZXJuLCBOVUxMLCAwLCBOVUxMKTsKLQlpZiAocGF0dGVybmMgPT0gTlVMTCkgewotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJQYXR0ZXJuICVzIGZhaWxlZCB0byBjb21waWxlXG4iLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIHByb2dyZXN1bHQgPSBYTUxMSU5UX0VSUl9TQ0hFTUFQQVQ7Ci0JICAgIHBhdHRlcm4gPSBOVUxMOwotCX0KLSAgICB9CiAgICAgaWYgKHBhdHRlcm5jICE9IE5VTEwpIHsKICAgICAgICAgcGF0c3RyZWFtID0geG1sUGF0dGVybkdldFN0cmVhbUN0eHQocGF0dGVybmMpOwogCWlmIChwYXRzdHJlYW0gIT0gTlVMTCkgewpAQCAtMTgzMCw2ICsxODAxLDggQEAKIAogCiAgICAgaWYgKHJlYWRlciAhPSBOVUxMKSB7CisgICAgICAgIGlmIChtYXhBbXBsID4gMCkKKyAgICAgICAgICAgIHhtbFRleHRSZWFkZXJTZXRNYXhBbXBsaWZpY2F0aW9uKHJlYWRlciwgbWF4QW1wbCk7CiAjaWZkZWYgTElCWE1MX1ZBTElEX0VOQUJMRUQKIAlpZiAodmFsaWQpCiAJICAgIHhtbFRleHRSZWFkZXJTZXRQYXJzZXJQcm9wKHJlYWRlciwgWE1MX1BBUlNFUl9WQUxJREFURSwgMSk7CkBAIC0yMDQ2LDggKzIwMTksOSBAQAogICAgICAgICAgICAgeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZjsKIAogICAgICAgICAgICAgaWYgKChjdXItPm5vZGVzZXR2YWwgPT0gTlVMTCkgfHwgKGN1ci0+bm9kZXNldHZhbC0+bm9kZU5yIDw9IDApKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJYUGF0aCBzZXQgaXMgZW1wdHlcbiIpOwotICAgICAgICAgICAgICAgIHByb2dyZXN1bHQgPSBYTUxMSU5UX0VSUl9YUEFUSDsKKyAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWFBhdGggc2V0IGlzIGVtcHR5XG4iKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidWYgPSB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlKHN0ZG91dCwgTlVMTCk7CkBAIC0yMTU2LDM4ICsyMTMwLDM5IEBACiAjaWZkZWYgTElCWE1MX1BVU0hfRU5BQkxFRAogICAgIGVsc2UgaWYgKChodG1sKSAmJiAocHVzaCkpIHsKICAgICAgICAgRklMRSAqZjsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgY2hhciBjaGFyc1s0MDk2XTsKKyAgICAgICAgaHRtbFBhcnNlckN0eHRQdHIgY3R4dDsKIAogICAgICAgICBpZiAoKGZpbGVuYW1lWzBdID09ICctJykgJiYgKGZpbGVuYW1lWzFdID09IDApKSB7CiAgICAgICAgICAgICBmID0gc3RkaW47CiAgICAgICAgIH0gZWxzZSB7CiAJICAgIGYgPSBmb3BlbihmaWxlbmFtZSwgInJiIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGYgIT0gTlVMTCkgewotICAgICAgICAgICAgaW50IHJlczsKLSAgICAgICAgICAgIGNoYXIgY2hhcnNbNDA5Nl07Ci0gICAgICAgICAgICBodG1sUGFyc2VyQ3R4dFB0ciBjdHh0OwotCi0gICAgICAgICAgICByZXMgPSBmcmVhZChjaGFycywgMSwgNCwgZik7Ci0gICAgICAgICAgICBpZiAocmVzID4gMCkgewotICAgICAgICAgICAgICAgIGN0eHQgPSBodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycywgcmVzLCBmaWxlbmFtZSwgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBwcm9ncmVzdWx0ID0gWE1MTElOVF9FUlJfTUVNOwotICAgICAgICAgICAgICAgICAgICBpZiAoZiAhPSBzdGRpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZShmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBodG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChyZXMgPSBmcmVhZChjaGFycywgMSwgcHVzaHNpemUsIGYpKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaHRtbFBhcnNlQ2h1bmsoY3R4dCwgY2hhcnMsIHJlcywgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGh0bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCAwLCAxKTsKLSAgICAgICAgICAgICAgICBkb2MgPSBjdHh0LT5teURvYzsKLSAgICAgICAgICAgICAgICBodG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisgICAgICAgICAgICBpZiAoZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBvcGVuICVzXG4iLCBmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgcHJvZ3Jlc3VsdCA9IFhNTExJTlRfRVJSX1VOQ0xBU1M7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVzID0gZnJlYWQoY2hhcnMsIDEsIDQsIGYpOworICAgICAgICBjdHh0ID0gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgIGNoYXJzLCByZXMsIGZpbGVuYW1lLCBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKyAgICAgICAgaWYgKGN0eHQgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJvZ3Jlc3VsdCA9IFhNTExJTlRfRVJSX01FTTsKICAgICAgICAgICAgIGlmIChmICE9IHN0ZGluKQogICAgICAgICAgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBodG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0aW9ucyk7CisgICAgICAgIHdoaWxlICgocmVzID0gZnJlYWQoY2hhcnMsIDEsIHB1c2hzaXplLCBmKSkgPiAwKSB7CisgICAgICAgICAgICBodG1sUGFyc2VDaHVuayhjdHh0LCBjaGFycywgcmVzLCAwKTsKKyAgICAgICAgfQorICAgICAgICBodG1sUGFyc2VDaHVuayhjdHh0LCBjaGFycywgMCwgMSk7CisgICAgICAgIGRvYyA9IGN0eHQtPm15RG9jOworICAgICAgICBodG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisgICAgICAgIGlmIChmICE9IHN0ZGluKQorICAgICAgICAgICAgZmNsb3NlKGYpOwogICAgIH0KICNlbmRpZiAvKiBMSUJYTUxfUFVTSF9FTkFCTEVEICovCiAjaWZkZWYgSEFWRV9NTUFQCkBAIC0yMjI1LDQ2ICsyMjAwLDQ4IEBACiAJICovCiAJaWYgKHB1c2gpIHsKIAkgICAgRklMRSAqZjsKKyAgICAgICAgICAgIGludCByZXQ7CisgICAgICAgICAgICBpbnQgcmVzLCBzaXplID0gMTAyNDsKKyAgICAgICAgICAgIGNoYXIgY2hhcnNbMTAyNF07CisgICAgICAgICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CiAKIAkgICAgLyogJy0nIFVzdWFsbHkgbWVhbnMgc3RkaW4gLTxzdmVuQHplbi5vcmc+ICovCiAJICAgIGlmICgoZmlsZW5hbWVbMF0gPT0gJy0nKSAmJiAoZmlsZW5hbWVbMV0gPT0gMCkpIHsKIAkgICAgICAgIGYgPSBzdGRpbjsKIAkgICAgfSBlbHNlIHsKIAkJZiA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICAgICAgICAgICAgICBpZiAoZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3Qgb3BlbiAlc1xuIiwgZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgICBwcm9ncmVzdWx0ID0gWE1MTElOVF9FUlJfVU5DTEFTUzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KIAkgICAgfQotCSAgICBpZiAoZiAhPSBOVUxMKSB7Ci0JCWludCByZXQ7Ci0JICAgICAgICBpbnQgcmVzLCBzaXplID0gMTAyNDsKLQkgICAgICAgIGNoYXIgY2hhcnNbMTAyNF07Ci0gICAgICAgICAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OwogCi0JCS8qIGlmIChyZXBlYXQpIHNpemUgPSAxMDI0OyAqLwotCQlyZXMgPSBmcmVhZChjaGFycywgMSwgNCwgZik7Ci0JCWlmIChyZXMgPiAwKSB7Ci0JCSAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwKLQkJICAgICAgICAgICAgICAgIGNoYXJzLCByZXMsIGZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3VsdCA9IFhNTExJTlRfRVJSX01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmICE9IHN0ZGluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZShmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCQkgICAgeG1sQ3R4dFVzZU9wdGlvbnMoY3R4dCwgb3B0aW9ucyk7Ci0JCSAgICB3aGlsZSAoKHJlcyA9IGZyZWFkKGNoYXJzLCAxLCBzaXplLCBmKSkgPiAwKSB7Ci0JCQl4bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCByZXMsIDApOwotCQkgICAgfQotCQkgICAgeG1sUGFyc2VDaHVuayhjdHh0LCBjaGFycywgMCwgMSk7Ci0JCSAgICBkb2MgPSBjdHh0LT5teURvYzsKLQkJICAgIHJldCA9IGN0eHQtPndlbGxGb3JtZWQ7Ci0JCSAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKLQkJICAgIGlmICgoIXJldCkgJiYgKCFyZWNvdmVyeSkpIHsKLQkJCXhtbEZyZWVEb2MoZG9jKTsKLQkJCWRvYyA9IE5VTEw7Ci0JCSAgICB9Ci0JICAgICAgICB9CisgICAgICAgICAgICByZXMgPSBmcmVhZChjaGFycywgMSwgNCwgZik7CisgICAgICAgICAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzLCByZXMsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcm9ncmVzdWx0ID0gWE1MTElOVF9FUlJfTUVNOwogICAgICAgICAgICAgICAgIGlmIChmICE9IHN0ZGluKQogICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZik7Ci0JICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4bWxDdHh0VXNlT3B0aW9ucyhjdHh0LCBvcHRpb25zKTsKKyAgICAgICAgICAgIGlmIChtYXhBbXBsID4gMCkKKyAgICAgICAgICAgICAgICB4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbihjdHh0LCBtYXhBbXBsKTsKKyAgICAgICAgICAgIHdoaWxlICgocmVzID0gZnJlYWQoY2hhcnMsIDEsIHNpemUsIGYpKSA+IDApIHsKKyAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCByZXMsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeG1sUGFyc2VDaHVuayhjdHh0LCBjaGFycywgMCwgMSk7CisgICAgICAgICAgICBkb2MgPSBjdHh0LT5teURvYzsKKyAgICAgICAgICAgIHJldCA9IGN0eHQtPndlbGxGb3JtZWQ7CisgICAgICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKyAgICAgICAgICAgIGlmICgoIXJldCkgJiYgKCFyZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICB4bWxGcmVlRG9jKGRvYyk7CisgICAgICAgICAgICAgICAgZG9jID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmICE9IHN0ZGluKQorICAgICAgICAgICAgICAgIGZjbG9zZShmKTsKIAl9IGVsc2UKICNlbmRpZiAvKiBMSUJYTUxfUFVTSF9FTkFCTEVEICovCiAgICAgICAgIGlmICh0ZXN0SU8pIHsKQEAgLTIyOTMsNiArMjI3MCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHByb2dyZXN1bHQgPSBYTUxMSU5UX0VSUl9NRU07CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1heEFtcGwgPiAwKQorICAgICAgICAgICAgICAgICAgICB4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbihjdHh0LCBtYXhBbXBsKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY3R4dCA9IHJlY3R4dDsKICAgICAgICAgICAgIH0KQEAgLTIzMjMsMTIgKzIzMDIsMjQgQEAKIAkgICAgICAgIHJldHVybjsKIAkgICAgfQogCi0JICAgIGlmIChyZWN0eHQgPT0gTlVMTCkKLQkJZG9jID0geG1sUmVhZE1lbW9yeSgoY2hhciAqKSBiYXNlLCBpbmZvLnN0X3NpemUsCi0JCSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIE5VTEwsIG9wdGlvbnMpOwotCSAgICBlbHNlCisJICAgIGlmIChyZWN0eHQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKworICAgICAgICAgICAgICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgICAgICAgICAgICAgaWYgKGN0eHQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgICAgICAgICBwcm9ncmVzdWx0ID0gWE1MTElOVF9FUlJfTUVNOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtYXhBbXBsID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24oY3R4dCwgbWF4QW1wbCk7CisgICAgICAgICAgICAgICAgZG9jID0geG1sQ3R4dFJlYWRNZW1vcnkoY3R4dCwgYmFzZSwgaW5mby5zdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBOVUxMLCBvcHRpb25zKTsKKyAgICAgICAgICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAJCWRvYyA9IHhtbEN0eHRSZWFkTWVtb3J5KHJlY3R4dCwgKGNoYXIgKikgYmFzZSwgaW5mby5zdF9zaXplLAogCQkJICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBOVUxMLCBvcHRpb25zKTsKKyAgICAgICAgICAgIH0KIAogCSAgICBtdW5tYXAoKGNoYXIgKikgYmFzZSwgaW5mby5zdF9zaXplKTsKIAkgICAgY2xvc2UoZmQpOwpAQCAtMjM0Nyw2ICsyMzM4LDggQEAKIAkgICAgICAgIGN0eHQgPSByZWN0eHQ7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChtYXhBbXBsID4gMCkKKyAgICAgICAgICAgICAgICB4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbihjdHh0LCBtYXhBbXBsKTsKICAgICAgICAgICAgIGRvYyA9IHhtbEN0eHRSZWFkRmlsZShjdHh0LCBmaWxlbmFtZSwgTlVMTCwgb3B0aW9ucyk7CiAKICAgICAgICAgICAgIGlmIChjdHh0LT52YWxpZCA9PSAwKQpAQCAtMjM1NSwxNiArMjM0OCwyMiBAQAogICAgICAgICAgICAgICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOwogI2VuZGlmIC8qIExJQlhNTF9WQUxJRF9FTkFCTEVEICovCiAJfSBlbHNlIHsKLQkgICAgaWYgKHJlY3R4dCAhPSBOVUxMKQorCSAgICBpZiAocmVjdHh0ICE9IE5VTEwpIHsKIAkgICAgICAgIGRvYyA9IHhtbEN0eHRSZWFkRmlsZShyZWN0eHQsIGZpbGVuYW1lLCBOVUxMLCBvcHRpb25zKTsKLQkgICAgZWxzZSB7Ci0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotICAgICAgICAgICAgICAgIGlmIChzYXgxKQotCQkgICAgZG9jID0geG1sUGFyc2VGaWxlKGZpbGVuYW1lKTsKLQkJZWxzZQotI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLQkJZG9jID0geG1sUmVhZEZpbGUoZmlsZW5hbWUsIE5VTEwsIG9wdGlvbnMpOwotCSAgICB9CisJICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworCisgICAgICAgICAgICAgICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgICAgIHByb2dyZXN1bHQgPSBYTUxMSU5UX0VSUl9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1heEFtcGwgPiAwKQorICAgICAgICAgICAgICAgICAgICB4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbihjdHh0LCBtYXhBbXBsKTsKKyAgICAgICAgICAgICAgICBkb2MgPSB4bWxDdHh0UmVhZEZpbGUoY3R4dCwgZmlsZW5hbWUsIE5VTEwsIG9wdGlvbnMpOworICAgICAgICAgICAgICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworICAgICAgICAgICAgfQogCX0KICAgICB9CiAKQEAgLTI0MzUsNiArMjQzNCwxMSBAQAogCSAgICBzdGFydFRpbWVyKCk7CiAJfQogCWRvYyA9IHhtbENvcHlEb2MoZG9jLCAxKTsKKyAgICAgICAgaWYgKGRvYyA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcm9ncmVzdWx0ID0gWE1MTElOVF9FUlJfTUVNOworICAgICAgICAgICAgeG1sRnJlZURvYyh0bXApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAJaWYgKHRpbWluZykgewogCSAgICBlbmRUaW1lcigiQ29weWluZyIpOwogCX0KQEAgLTI3MzgsNyArMjc0Miw2IEBACiAgICAgICAgICAgICAgICAgeG1sRnJlZUR0ZChkdGQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKIAkgICAgfQotCSAgICBjdnAtPnVzZXJEYXRhID0gTlVMTDsKIAkgICAgY3ZwLT5lcnJvciAgICA9IHhtbEdlbmVyaWNFcnJvcjsKIAkgICAgY3ZwLT53YXJuaW5nICA9IHhtbEdlbmVyaWNFcnJvcjsKIApAQCAtMjc3Niw3ICsyNzc5LDYgQEAKIAlpZiAoKHRpbWluZykgJiYgKCFyZXBlYXQpKSB7CiAJICAgIHN0YXJ0VGltZXIoKTsKIAl9Ci0JY3ZwLT51c2VyRGF0YSA9IE5VTEw7CiAJY3ZwLT5lcnJvciAgICA9IHhtbEdlbmVyaWNFcnJvcjsKIAljdnAtPndhcm5pbmcgID0geG1sR2VuZXJpY0Vycm9yOwogCWlmICgheG1sVmFsaWRhdGVEb2N1bWVudChjdnAsIGRvYykpIHsKQEAgLTMwODMsNiArMzA4NSw3IEBACiAjaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKICAgICBmcHJpbnRmKGYsICJcdC0teHBhdGggZXhwcjogZXZhbHVhdGUgdGhlIFhQYXRoIGV4cHJlc3Npb24sIGltcGx5IC0tbm9vdXRcbiIpOwogI2VuZGlmCisgICAgZnByaW50ZihmLCAiXHQtLW1heC1hbXBsIHZhbHVlOiBzZXQgbWF4aW11bSBhbXBsaWZpY2F0aW9uIGZhY3RvclxuIik7CiAKICAgICBmcHJpbnRmKGYsICJcbkxpYnhtbCBwcm9qZWN0IGhvbWUgcGFnZTogaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnhtbDJcbiIpOwogfQpAQCAtMzEwNiwxMiArMzEwOSwzMSBAQAogICAgIG5icmVnaXN0ZXItLTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcKK3BhcnNlSW50ZWdlcihjb25zdCBjaGFyICpjdHh0LCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4KSB7CisgICAgY2hhciAqc3RyRW5kOworICAgIHVuc2lnbmVkIGxvbmcgdmFsOworCisgICAgZXJybm8gPSAwOworICAgIHZhbCA9IHN0cnRvdWwoc3RyLCAmc3RyRW5kLCAxMCk7CisgICAgaWYgKGVycm5vID09IEVJTlZBTCB8fCAqc3RyRW5kICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCBpbnRlZ2VyOiAlc1xuIiwgY3R4dCwgc3RyKTsKKyAgICAgICAgZXhpdChYTUxMSU5UX0VSUl9VTkNMQVNTKTsKKyAgICB9CisgICAgaWYgKGVycm5vICE9IDAgfHwgdmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnRlZ2VyIG91dCBvZiByYW5nZTogJXNcbiIsIGN0eHQsIHN0cik7CisgICAgICAgIGV4aXQoWE1MTElOVF9FUlJfVU5DTEFTUyk7CisgICAgfQorCisgICAgcmV0dXJuKHZhbCk7Cit9CisKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAgICBpbnQgaSwgYWNvdW50OwogICAgIGludCBmaWxlcyA9IDA7CiAgICAgaW50IHZlcnNpb24gPSAwOwotICAgIGNvbnN0IGNoYXIqIGluZGVudDsKIAogICAgIGlmIChhcmdjIDw9IDEpIHsKIAl1c2FnZShzdGRlcnIsIGFyZ3ZbMF0pOwpAQCAtMzEyNSwxMCArMzE0NywxMyBAQAogCiAJaWYgKCghc3RyY21wKGFyZ3ZbaV0sICItbWF4bWVtIikpIHx8CiAJICAgICghc3RyY21wKGFyZ3ZbaV0sICItLW1heG1lbSIpKSkgewotCSAgICAgaSsrOwotCSAgICAgaWYgKChpID49IGFyZ2MpIHx8IChzc2NhbmYoYXJndltpXSwgIiVkIiwgJm1heG1lbSkgIT0gMSkpIHsKLQkgICAgICAgICBtYXhtZW0gPSAwOwotCSAgICAgfQorICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgaWYgKGkgPj0gYXJnYykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWF4bWVtOiBtaXNzaW5nIGludGVnZXIgdmFsdWVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybihYTUxMSU5UX0VSUl9VTkNMQVNTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgIG1heG1lbSA9IHBhcnNlSW50ZWdlcigibWF4bWVtIiwgYXJndltpXSwgMCwgSU5UX01BWCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG1heG1lbSAhPSAwKQpAQCAtMzE2NCw4ICszMTg5LDcgQEAKIAkgICAgb3B0aW9ucyB8PSBYTUxfUEFSU0VfSFVHRTsKIAl9IGVsc2UgaWYgKCghc3RyY21wKGFyZ3ZbaV0sICItbm9lbnQiKSkgfHwKIAkgICAgICAgICAoIXN0cmNtcChhcmd2W2ldLCAiLS1ub2VudCIpKSkgewotCSAgICBub2VudCsrOwotCSAgICBvcHRpb25zIHw9IFhNTF9QQVJTRV9OT0VOVDsKKwkgICAgbm9lbnQgPSAxOwogCX0gZWxzZSBpZiAoKCFzdHJjbXAoYXJndltpXSwgIi1ub2VuYyIpKSB8fAogCSAgICAgICAgICghc3RyY21wKGFyZ3ZbaV0sICItLW5vZW5jIikpKSB7CiAJICAgIG5vZW5jKys7CkBAIC0zMzE4LDIxICszMzQyLDE4IEBACiAjZW5kaWYgLyogTElCWE1MX09VVFBVVF9FTkFCTEVEICovCiAJZWxzZSBpZiAoKCFzdHJjbXAoYXJndltpXSwgIi1ub3dhcm5pbmciKSkgfHwKIAkgICAgICAgICAoIXN0cmNtcChhcmd2W2ldLCAiLS1ub3dhcm5pbmciKSkpIHsKLQkgICAgeG1sR2V0V2FybmluZ3NEZWZhdWx0VmFsdWUgPSAwOwotCSAgICB4bWxQZWRhbnRpY1BhcnNlckRlZmF1bHQoMCk7CiAJICAgIG9wdGlvbnMgfD0gWE1MX1BBUlNFX05PV0FSTklORzsKKyAgICAgICAgICAgIG9wdGlvbnMgJj0gflhNTF9QQVJTRV9QRURBTlRJQzsKICAgICAgICAgfQogCWVsc2UgaWYgKCghc3RyY21wKGFyZ3ZbaV0sICItcGVkYW50aWMiKSkgfHwKIAkgICAgICAgICAoIXN0cmNtcChhcmd2W2ldLCAiLS1wZWRhbnRpYyIpKSkgewotCSAgICB4bWxHZXRXYXJuaW5nc0RlZmF1bHRWYWx1ZSA9IDE7Ci0JICAgIHhtbFBlZGFudGljUGFyc2VyRGVmYXVsdCgxKTsKIAkgICAgb3B0aW9ucyB8PSBYTUxfUEFSU0VfUEVEQU5USUM7CisgICAgICAgICAgICBvcHRpb25zICY9IFhNTF9QQVJTRV9OT1dBUk5JTkc7CiAgICAgICAgIH0KICNpZmRlZiBMSUJYTUxfREVCVUdfRU5BQkxFRAogCWVsc2UgaWYgKCghc3RyY21wKGFyZ3ZbaV0sICItZGVidWdlbnQiKSkgfHwKIAkJICghc3RyY21wKGFyZ3ZbaV0sICItLWRlYnVnZW50IikpKSB7CiAJICAgIGRlYnVnZW50Kys7Ci0JICAgIHhtbFBhcnNlckRlYnVnRW50aXRpZXMgPSAxOwogCX0KICNlbmRpZgogI2lmZGVmIExJQlhNTF9DMTROX0VOQUJMRUQKQEAgLTMzNzIsOSArMzM5Myw3IEBACiAgICAgICAgIH0KIAllbHNlIGlmICgoIXN0cmNtcChhcmd2W2ldLCAiLW5vYmxhbmtzIikpIHx8CiAJICAgICAgICAgKCFzdHJjbXAoYXJndltpXSwgIi0tbm9ibGFua3MiKSkpIHsKLQkgICAgbm9ibGFua3MrKzsKLQkgICAgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCk7Ci0JICAgIG9wdGlvbnMgfD0gWE1MX1BBUlNFX05PQkxBTktTOworCSAgICBub2JsYW5rcyA9IDE7CiAgICAgICAgIH0KIAllbHNlIGlmICgoIXN0cmNtcChhcmd2W2ldLCAiLW1heG1lbSIpKSB8fAogCSAgICAgICAgICghc3RyY21wKGFyZ3ZbaV0sICItLW1heG1lbSIpKSkgewpAQCAtMzM4MiwyMyArMzQwMSwxNiBAQAogICAgICAgICB9CiAJZWxzZSBpZiAoKCFzdHJjbXAoYXJndltpXSwgIi1mb3JtYXQiKSkgfHwKIAkgICAgICAgICAoIXN0cmNtcChhcmd2W2ldLCAiLS1mb3JtYXQiKSkpIHsKLQkgICAgIG5vYmxhbmtzKys7CiAjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECi0JICAgICBmb3JtYXQgPSAxOworCSAgICBmb3JtYXQgPSAxOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwotCSAgICAgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCk7CiAJfQogCWVsc2UgaWYgKCghc3RyY21wKGFyZ3ZbaV0sICItcHJldHR5IikpIHx8CiAJICAgICAgICAgKCFzdHJjbXAoYXJndltpXSwgIi0tcHJldHR5IikpKSB7Ci0JICAgICBpKys7CisJICAgIGkrKzsKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKLSAgICAgICBpZiAoYXJndltpXSAhPSBOVUxMKSB7Ci0JICAgICAgICAgZm9ybWF0ID0gYXRvaShhcmd2W2ldKTsKLQkgICAgICAgICBpZiAoZm9ybWF0ID09IDEpIHsKLQkgICAgICAgICAgICAgbm9ibGFua3MrKzsKLQkgICAgICAgICAgICAgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCk7Ci0JICAgICAgICAgfQotICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmd2W2ldICE9IE5VTEwpCisJICAgICAgICBmb3JtYXQgPSBhdG9pKGFyZ3ZbaV0pOwogI2VuZGlmIC8qIExJQlhNTF9PVVRQVVRfRU5BQkxFRCAqLwogCX0KICNpZmRlZiBMSUJYTUxfUkVBREVSX0VOQUJMRUQKQEAgLTM0MzcsMjAgKzM0NDksMTkgQEAKIAkgICAgICAgICAoIXN0cmNtcChhcmd2W2ldLCAiLS1yZWxheG5nIikpKSB7CiAJICAgIGkrKzsKIAkgICAgcmVsYXhuZyA9IGFyZ3ZbaV07Ci0JICAgIG5vZW50Kys7Ci0JICAgIG9wdGlvbnMgfD0gWE1MX1BBUlNFX05PRU5UOworCSAgICBub2VudCA9IDE7CiAJfSBlbHNlIGlmICgoIXN0cmNtcChhcmd2W2ldLCAiLXNjaGVtYSIpKSB8fAogCSAgICAgICAgICghc3RyY21wKGFyZ3ZbaV0sICItLXNjaGVtYSIpKSkgewogCSAgICBpKys7CiAJICAgIHNjaGVtYSA9IGFyZ3ZbaV07Ci0JICAgIG5vZW50Kys7CisJICAgIG5vZW50ID0gMTsKICNlbmRpZgogI2lmZGVmIExJQlhNTF9TQ0hFTUFUUk9OX0VOQUJMRUQKIAl9IGVsc2UgaWYgKCghc3RyY21wKGFyZ3ZbaV0sICItc2NoZW1hdHJvbiIpKSB8fAogCSAgICAgICAgICghc3RyY21wKGFyZ3ZbaV0sICItLXNjaGVtYXRyb24iKSkpIHsKIAkgICAgaSsrOwogCSAgICBzY2hlbWF0cm9uID0gYXJndltpXTsKLQkgICAgbm9lbnQrKzsKKwkgICAgbm9lbnQgPSAxOwogI2VuZGlmCiAgICAgICAgIH0gZWxzZSBpZiAoKCFzdHJjbXAoYXJndltpXSwgIi1ub25ldCIpKSB8fAogICAgICAgICAgICAgICAgICAgICghc3RyY21wKGFyZ3ZbaV0sICItLW5vbmV0IikpKSB7CkBAIC0zNDc3LDYgKzM0ODgsMTQgQEAKIAkgICAgICAgICAgICghc3RyY21wKGFyZ3ZbaV0sICItLW9sZHhtbDEwIikpKSB7CiAJICAgIG9sZHhtbDEwKys7CiAJICAgIG9wdGlvbnMgfD0gWE1MX1BBUlNFX09MRDEwOworCX0gZWxzZSBpZiAoKCFzdHJjbXAoYXJndltpXSwgIi1tYXgtYW1wbCIpKSB8fAorCSAgICAgICAgICAgKCFzdHJjbXAoYXJndltpXSwgIi0tbWF4LWFtcGwiKSkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGlmIChpID49IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1heC1hbXBsOiBtaXNzaW5nIGludGVnZXIgdmFsdWVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybihYTUxMSU5UX0VSUl9VTkNMQVNTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heEFtcGwgPSBwYXJzZUludGVnZXIoIm1heC1hbXBsIiwgYXJndltpXSwgMSwgVUlOVF9NQVgpOwogCX0gZWxzZSB7CiAJICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gJXNcbiIsIGFyZ3ZbaV0pOwogCSAgICB1c2FnZShzdGRlcnIsIGFyZ3ZbMF0pOwpAQCAtMzQ5OSwzNiArMzUxOCwyNyBAQAogICAgIH0KICNlbmRpZgogCi0jaWZkZWYgTElCWE1MX1NBWDFfRU5BQkxFRAotICAgIGlmIChzYXgxKQotICAgICAgICB4bWxTQVhEZWZhdWx0VmVyc2lvbigxKTsKLSAgICBlbHNlCi0gICAgICAgIHhtbFNBWERlZmF1bHRWZXJzaW9uKDIpOwotI2VuZGlmIC8qIExJQlhNTF9TQVgxX0VOQUJMRUQgKi8KLQogICAgIGlmIChjaGtyZWdpc3RlcikgewogCXhtbFJlZ2lzdGVyTm9kZURlZmF1bHQocmVnaXN0ZXJOb2RlKTsKIAl4bWxEZXJlZ2lzdGVyTm9kZURlZmF1bHQoZGVyZWdpc3Rlck5vZGUpOwogICAgIH0KIAotICAgIGluZGVudCA9IGdldGVudigiWE1MTElOVF9JTkRFTlQiKTsKLSAgICBpZihpbmRlbnQgIT0gTlVMTCkgewotCXhtbFRyZWVJbmRlbnRTdHJpbmcgPSBpbmRlbnQ7CisjaWZkZWYgTElCWE1MX09VVFBVVF9FTkFCTEVECisgICAgeworICAgICAgICBjb25zdCBjaGFyICppbmRlbnQgPSBnZXRlbnYoIlhNTExJTlRfSU5ERU5UIik7CisgICAgICAgIGlmIChpbmRlbnQgIT0gTlVMTCkgeworICAgICAgICAgICAgeG1sVHJlZUluZGVudFN0cmluZyA9IGluZGVudDsKKyAgICAgICAgfQogICAgIH0KLQorI2VuZGlmCiAKICAgICBkZWZhdWx0RW50aXR5TG9hZGVyID0geG1sR2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoKTsKICAgICB4bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcih4bWxsaW50RXh0ZXJuYWxFbnRpdHlMb2FkZXIpOwogCi0gICAgeG1sTGluZU51bWJlcnNEZWZhdWx0KDEpOwotICAgIGlmIChsb2FkZHRkICE9IDApCi0JeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSB8PSBYTUxfREVURUNUX0lEUzsKLSAgICBpZiAoZHRkYXR0cnMpCi0JeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSB8PSBYTUxfQ09NUExFVEVfQVRUUlM7Ci0gICAgaWYgKG5vZW50ICE9IDApIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQoMSk7Ci0jaWZkZWYgTElCWE1MX1ZBTElEX0VOQUJMRUQKLSAgICBpZiAodmFsaWQgIT0gMCkgeG1sRG9WYWxpZGl0eUNoZWNraW5nRGVmYXVsdFZhbHVlID0gMTsKLSNlbmRpZiAvKiBMSUJYTUxfVkFMSURfRU5BQkxFRCAqLworICAgIGlmIChub2VudCAhPSAwKQorICAgICAgICBvcHRpb25zIHw9IFhNTF9QQVJTRV9OT0VOVDsKKyAgICBpZiAoKG5vYmxhbmtzICE9IDApIHx8IChmb3JtYXQgPT0gMSkpCisgICAgICAgIG9wdGlvbnMgfD0gWE1MX1BBUlNFX05PQkxBTktTOwogICAgIGlmICgoaHRtbG91dCkgJiYgKCFub3dyYXApKSB7CiAJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAgICAgICAgICAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTlwiXG4iKTsKQEAgLTM1NTEsNyArMzU2MSw2IEBACiAJeG1sU2NoZW1hdHJvblBhcnNlckN0eHRQdHIgY3R4dDsKIAogICAgICAgICAvKiBmb3JjZXMgbG9hZGluZyB0aGUgRFREcyAqLwotICAgICAgICB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIHw9IDE7CiAJb3B0aW9ucyB8PSBYTUxfUEFSU0VfRFRETE9BRDsKIAlpZiAodGltaW5nKSB7CiAJICAgIHN0YXJ0VGltZXIoKTsKQEAgLTM1ODcsNyArMzU5Niw2IEBACiAJeG1sUmVsYXhOR1BhcnNlckN0eHRQdHIgY3R4dDsKIAogICAgICAgICAvKiBmb3JjZXMgbG9hZGluZyB0aGUgRFREcyAqLwotICAgICAgICB4bWxMb2FkRXh0RHRkRGVmYXVsdFZhbHVlIHw9IDE7CiAJb3B0aW9ucyB8PSBYTUxfUEFSU0VfRFRETE9BRDsKIAlpZiAodGltaW5nKSB7CiAJICAgIHN0YXJ0VGltZXIoKTsKQEAgLTM3MTcsMTIgKzM3MjUsMjUgQEAKIAkgICAgY29udGludWU7CiAJfQogI2VuZGlmCisgICAgICAgIGlmICgoIXN0cmNtcChhcmd2W2ldLCAiLW1heC1hbXBsIikpIHx8CisgICAgICAgICAgICAoIXN0cmNtcChhcmd2W2ldLCAiLS1tYXgtYW1wbCIpKSkgeworCSAgICBpKys7CisJICAgIGNvbnRpbnVlOworICAgICAgICB9CiAJaWYgKCh0aW1pbmcpICYmIChyZXBlYXQpKQogCSAgICBzdGFydFRpbWVyKCk7CiAJLyogUmVtZW1iZXIgZmlsZSBuYW1lcy4gICItIiBtZWFucyBzdGRpbi4gIDxzdmVuQHplbi5vcmc+ICovCiAJaWYgKChhcmd2W2ldWzBdICE9ICctJykgfHwgKHN0cmNtcChhcmd2W2ldLCAiLSIpID09IDApKSB7CiAJICAgIGlmIChyZXBlYXQpIHsKLQkJeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gTlVMTDsKKwkJeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworCisgICAgICAgICAgICAgICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHByb2dyZXN1bHQgPSBYTUxMSU5UX0VSUl9NRU07CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtYXhBbXBsID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24oY3R4dCwgbWF4QW1wbCk7CiAKIAkJZm9yIChhY291bnQgPSAwO2Fjb3VudCA8IHJlcGVhdDthY291bnQrKykgewogI2lmZGVmIExJQlhNTF9SRUFERVJfRU5BQkxFRApAQCAtMzczMywxNiArMzc1NCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNheCkgewogCQkJICAgIHRlc3RTQVgoYXJndltpXSk7CiAJCQl9IGVsc2UgewotCQkJICAgIGlmIChjdHh0ID09IE5VTEwpCi0JCQkJY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKIAkJCSAgICBwYXJzZUFuZFByaW50RmlsZShhcmd2W2ldLCBjdHh0KTsKIAkJCX0KICNpZmRlZiBMSUJYTUxfUkVBREVSX0VOQUJMRUQKIAkJICAgIH0KICNlbmRpZiAvKiBMSUJYTUxfUkVBREVSX0VOQUJMRUQgKi8KIAkJfQotCQlpZiAoY3R4dCAhPSBOVUxMKQotCQkgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisKKwkJeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CiAJICAgIH0gZWxzZSB7CiAJCW5icmVnaXN0ZXIgPSAwOwogCkBAIC0zNzk3LDcgKzM4MTYsNiBAQAogCiBlcnJvcjoKICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7Ci0gICAgeG1sTWVtb3J5RHVtcCgpOwogCiAgICAgcmV0dXJuKHByb2dyZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEveG1sbWVtb3J5LmMgYi94bWxtZW1vcnkuYwppbmRleCA4OTJkNTBjLi4xZTk5OWIxIDEwMDY0NAotLS0gYS94bWxtZW1vcnkuYworKysgYi94bWxtZW1vcnkuYwpAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0vKiAjZGVmaW5lIERFQlVHX01FTU9SWSAqLwotCiAvKioKICAqIE1FTV9MSVNUOgogICoKQEAgLTI2LDE2ICsyNCwxOCBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CS8qIG11c3QgY29tZSBiZWZvcmUgeG1sbWVtb3J5LmggKi8KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC90aHJlYWRzLmg+CiAKLXN0YXRpYyBpbnQgeG1sTWVtSW5pdGlhbGl6ZWQgPSAwOworI2luY2x1ZGUgInByaXZhdGUvbWVtb3J5LmgiCisjaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRzLmgiCisKIHN0YXRpYyB1bnNpZ25lZCBsb25nICBkZWJ1Z01lbVNpemUgPSAwOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgIGRlYnVnTWVtQmxvY2tzID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICBkZWJ1Z01heE1lbVNpemUgPSAwOwotc3RhdGljIHhtbE11dGV4UHRyIHhtbE1lbU11dGV4ID0gTlVMTDsKK3N0YXRpYyB4bWxNdXRleCB4bWxNZW1NdXRleDsKIAogdm9pZCB4bWxNYWxsb2NCcmVha3BvaW50KHZvaWQpOwogCkBAIC0xNDcsMTggKzE0NywxMyBAQAogICAgIE1FTUhEUiAqcDsKICAgICB2b2lkICpyZXQ7CiAKLSAgICBpZiAoIXhtbE1lbUluaXRpYWxpemVkKSB4bWxJbml0TWVtb3J5KCk7Ci0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJNYWxsb2MoJWQpXG4iLHNpemUpOwotI2VuZGlmCisgICAgeG1sSW5pdFBhcnNlcigpOwogCiAgICAgVEVTVF9QT0lOVAogCiAgICAgaWYgKHNpemUgPiAoTUFYX1NJWkVfVCAtIFJFU0VSVkVfU0laRSkpIHsKIAl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKIAkJInhtbE1hbGxvY0xvYyA6IFVuc2lnbmVkIG92ZXJmbG93XG4iKTsKLQl4bWxNZW1vcnlEdW1wKCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtMTY3LDcgKzE2Miw2IEBACiAgICAgaWYgKCFwKSB7CiAJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAJCSJ4bWxNYWxsb2NMb2MgOiBPdXQgb2YgZnJlZSBzcGFjZVxuIik7Ci0JeG1sTWVtb3J5RHVtcCgpOwogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgcC0+bWhfdGFnID0gTUVNVEFHOwpAQCAtMTc1LDcgKzE2OSw3IEBACiAgICAgcC0+bWhfdHlwZSA9IE1BTExPQ19UWVBFOwogICAgIHAtPm1oX2ZpbGUgPSBmaWxlOwogICAgIHAtPm1oX2xpbmUgPSBsaW5lOwotICAgIHhtbE11dGV4TG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxNZW1NdXRleCk7CiAgICAgcC0+bWhfbnVtYmVyID0gKytibG9jazsKICAgICBkZWJ1Z01lbVNpemUgKz0gc2l6ZTsKICAgICBkZWJ1Z01lbUJsb2NrcysrOwpAQCAtMTgzLDEyICsxNzcsNyBAQAogI2lmZGVmIE1FTV9MSVNUCiAgICAgZGVidWdtZW1fbGlzdF9hZGQocCk7CiAjZW5kaWYKLSAgICB4bWxNdXRleFVubG9jayh4bWxNZW1NdXRleCk7Ci0KLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIk1hbGxvYyglZCkgT2tcbiIsc2l6ZSk7Ci0jZW5kaWYKKyAgICB4bWxNdXRleFVubG9jaygmeG1sTWVtTXV0ZXgpOwogCiAgICAgaWYgKHhtbE1lbVN0b3BBdEJsb2NrID09IHAtPm1oX251bWJlcikgeG1sTWFsbG9jQnJlYWtwb2ludCgpOwogCkBAIC0yMjMsMTggKzIxMiwxMyBAQAogICAgIE1FTUhEUiAqcDsKICAgICB2b2lkICpyZXQ7CiAKLSAgICBpZiAoIXhtbE1lbUluaXRpYWxpemVkKSB4bWxJbml0TWVtb3J5KCk7Ci0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJNYWxsb2MoJWQpXG4iLHNpemUpOwotI2VuZGlmCisgICAgeG1sSW5pdFBhcnNlcigpOwogCiAgICAgVEVTVF9QT0lOVAogCiAgICAgaWYgKHNpemUgPiAoTUFYX1NJWkVfVCAtIFJFU0VSVkVfU0laRSkpIHsKIAl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKIAkJInhtbE1hbGxvY0F0b21pY0xvYyA6IFVuc2lnbmVkIG92ZXJmbG93XG4iKTsKLQl4bWxNZW1vcnlEdW1wKCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtMjQzLDcgKzIyNyw2IEBACiAgICAgaWYgKCFwKSB7CiAJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAJCSJ4bWxNYWxsb2NBdG9taWNMb2MgOiBPdXQgb2YgZnJlZSBzcGFjZVxuIik7Ci0JeG1sTWVtb3J5RHVtcCgpOwogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgcC0+bWhfdGFnID0gTUVNVEFHOwpAQCAtMjUxLDcgKzIzNCw3IEBACiAgICAgcC0+bWhfdHlwZSA9IE1BTExPQ19BVE9NSUNfVFlQRTsKICAgICBwLT5taF9maWxlID0gZmlsZTsKICAgICBwLT5taF9saW5lID0gbGluZTsKLSAgICB4bWxNdXRleExvY2soeG1sTWVtTXV0ZXgpOworICAgIHhtbE11dGV4TG9jaygmeG1sTWVtTXV0ZXgpOwogICAgIHAtPm1oX251bWJlciA9ICsrYmxvY2s7CiAgICAgZGVidWdNZW1TaXplICs9IHNpemU7CiAgICAgZGVidWdNZW1CbG9ja3MrKzsKQEAgLTI1OSwxMiArMjQyLDcgQEAKICNpZmRlZiBNRU1fTElTVAogICAgIGRlYnVnbWVtX2xpc3RfYWRkKHApOwogI2VuZGlmCi0gICAgeG1sTXV0ZXhVbmxvY2soeG1sTWVtTXV0ZXgpOwotCi0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJNYWxsb2MoJWQpIE9rXG4iLHNpemUpOwotI2VuZGlmCisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbE1lbU11dGV4KTsKIAogICAgIGlmICh4bWxNZW1TdG9wQXRCbG9jayA9PSBwLT5taF9udW1iZXIpIHhtbE1hbGxvY0JyZWFrcG9pbnQoKTsKIApAQCAtMzEzLDE0ICsyOTEsMTEgQEAKIHsKICAgICBNRU1IRFIgKnAsICp0bXA7CiAgICAgdW5zaWduZWQgbG9uZyBudW1iZXI7Ci0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgc2l6ZV90IG9sZHNpemU7Ci0jZW5kaWYKIAogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKHhtbE1hbGxvY0xvYyhzaXplLCBmaWxlLCBsaW5lKSk7CiAKLSAgICBpZiAoIXhtbE1lbUluaXRpYWxpemVkKSB4bWxJbml0TWVtb3J5KCk7CisgICAgeG1sSW5pdFBhcnNlcigpOwogICAgIFRFU1RfUE9JTlQKIAogICAgIHAgPSBDTElFTlRfMl9IRFIocHRyKTsKQEAgLTMzMSwyMSArMzA2LDE3IEBACiAJIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHAtPm1oX3RhZyA9IH5NRU1UQUc7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbE1lbU11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbE1lbU11dGV4KTsKICAgICBkZWJ1Z01lbVNpemUgLT0gcC0+bWhfc2l6ZTsKICAgICBkZWJ1Z01lbUJsb2Nrcy0tOwotI2lmZGVmIERFQlVHX01FTU9SWQotICAgIG9sZHNpemUgPSBwLT5taF9zaXplOwotI2VuZGlmCiAjaWZkZWYgTUVNX0xJU1QKICAgICBkZWJ1Z21lbV9saXN0X2RlbGV0ZShwKTsKICNlbmRpZgotICAgIHhtbE11dGV4VW5sb2NrKHhtbE1lbU11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sTWVtTXV0ZXgpOwogCiAgICAgaWYgKHNpemUgPiAoTUFYX1NJWkVfVCAtIFJFU0VSVkVfU0laRSkpIHsKIAl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKIAkJInhtbFJlYWxsb2NMb2MgOiBVbnNpZ25lZCBvdmVyZmxvd1xuIik7Ci0JeG1sTWVtb3J5RHVtcCgpOwogCXJldHVybihOVUxMKTsKICAgICB9CiAKQEAgLTM2OCwyMSArMzM5LDE3IEBACiAgICAgcC0+bWhfc2l6ZSA9IHNpemU7CiAgICAgcC0+bWhfZmlsZSA9IGZpbGU7CiAgICAgcC0+bWhfbGluZSA9IGxpbmU7Ci0gICAgeG1sTXV0ZXhMb2NrKHhtbE1lbU11dGV4KTsKKyAgICB4bWxNdXRleExvY2soJnhtbE1lbU11dGV4KTsKICAgICBkZWJ1Z01lbVNpemUgKz0gc2l6ZTsKICAgICBkZWJ1Z01lbUJsb2NrcysrOwogICAgIGlmIChkZWJ1Z01lbVNpemUgPiBkZWJ1Z01heE1lbVNpemUpIGRlYnVnTWF4TWVtU2l6ZSA9IGRlYnVnTWVtU2l6ZTsKICNpZmRlZiBNRU1fTElTVAogICAgIGRlYnVnbWVtX2xpc3RfYWRkKHApOwogI2VuZGlmCi0gICAgeG1sTXV0ZXhVbmxvY2soeG1sTWVtTXV0ZXgpOworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxNZW1NdXRleCk7CiAKICAgICBURVNUX1BPSU5UCiAKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIlJlYWxsb2NlZCglZCB0byAlZCkgT2tcbiIsIG9sZHNpemUsIHNpemUpOwotI2VuZGlmCiAgICAgcmV0dXJuKEhEUl8yX0NMSUVOVChwKSk7CiAKIGVycm9yOgpAQCAtNDE1LDkgKzM4Miw2IEBACiB7CiAgICAgTUVNSERSICpwOwogICAgIGNoYXIgKnRhcmdldDsKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICBzaXplX3Qgc2l6ZTsKLSNlbmRpZgogCiAgICAgaWYgKHB0ciA9PSBOVUxMKQogCXJldHVybjsKQEAgLTQ0NiwyNiArNDEwLDE4IEBACiAgICAgaWYgKHhtbE1lbVN0b3BBdEJsb2NrID09IHAtPm1oX251bWJlcikgeG1sTWFsbG9jQnJlYWtwb2ludCgpOwogICAgIHAtPm1oX3RhZyA9IH5NRU1UQUc7CiAgICAgbWVtc2V0KHRhcmdldCwgLTEsIHAtPm1oX3NpemUpOwotICAgIHhtbE11dGV4TG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxNZW1NdXRleCk7CiAgICAgZGVidWdNZW1TaXplIC09IHAtPm1oX3NpemU7CiAgICAgZGVidWdNZW1CbG9ja3MtLTsKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICBzaXplID0gcC0+bWhfc2l6ZTsKLSNlbmRpZgogI2lmZGVmIE1FTV9MSVNUCiAgICAgZGVidWdtZW1fbGlzdF9kZWxldGUocCk7CiAjZW5kaWYKLSAgICB4bWxNdXRleFVubG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbE1lbU11dGV4KTsKIAogICAgIGZyZWUocCk7CiAKICAgICBURVNUX1BPSU5UCiAKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgIkZyZWVkKCVkKSBPa1xuIiwgc2l6ZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybjsKIAogZXJyb3I6CkBAIC00OTMsMTMgKzQ0OSwxMiBAQAogICAgIHNpemVfdCBzaXplID0gc3RybGVuKHN0cikgKyAxOwogICAgIE1FTUhEUiAqcDsKIAotICAgIGlmICgheG1sTWVtSW5pdGlhbGl6ZWQpIHhtbEluaXRNZW1vcnkoKTsKKyAgICB4bWxJbml0UGFyc2VyKCk7CiAgICAgVEVTVF9QT0lOVAogCiAgICAgaWYgKHNpemUgPiAoTUFYX1NJWkVfVCAtIFJFU0VSVkVfU0laRSkpIHsKIAl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKIAkJInhtbE1lbVN0cmR1cExvYyA6IFVuc2lnbmVkIG92ZXJmbG93XG4iKTsKLQl4bWxNZW1vcnlEdW1wKCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KIApAQCAtNTEyLDcgKzQ2Nyw3IEBACiAgICAgcC0+bWhfdHlwZSA9IFNUUkRVUF9UWVBFOwogICAgIHAtPm1oX2ZpbGUgPSBmaWxlOwogICAgIHAtPm1oX2xpbmUgPSBsaW5lOwotICAgIHhtbE11dGV4TG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxNZW1NdXRleCk7CiAgICAgcC0+bWhfbnVtYmVyID0gKytibG9jazsKICAgICBkZWJ1Z01lbVNpemUgKz0gc2l6ZTsKICAgICBkZWJ1Z01lbUJsb2NrcysrOwpAQCAtNTIwLDcgKzQ3NSw3IEBACiAjaWZkZWYgTUVNX0xJU1QKICAgICBkZWJ1Z21lbV9saXN0X2FkZChwKTsKICNlbmRpZgotICAgIHhtbE11dGV4VW5sb2NrKHhtbE1lbU11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sTWVtTXV0ZXgpOwogCiAgICAgcyA9IChjaGFyICopIEhEUl8yX0NMSUVOVChwKTsKIApAQCAtNTU3LDYgKzUxMiwyNyBAQAogfQogCiAvKioKKyAqIHhtbE1lbVNpemU6CisgKiBAcHRyOiAgcG9pbnRlciB0byB0aGUgbWVtb3J5IGFsbG9jYXRpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIGEgbWVtb3J5IGFsbG9jYXRpb24uCisgKi8KKworc2l6ZV90Cit4bWxNZW1TaXplKHZvaWQgKnB0cikgeworICAgIE1FTUhEUiAqcDsKKworICAgIGlmIChwdHIgPT0gTlVMTCkKKwlyZXR1cm4oMCk7CisKKyAgICBwID0gQ0xJRU5UXzJfSERSKHB0cik7CisgICAgaWYgKHAtPm1oX3RhZyAhPSBNRU1UQUcpCisgICAgICAgIHJldHVybigwKTsKKworICAgIHJldHVybihwLT5taF9zaXplKTsKK30KKworLyoqCiAgKiB4bWxNZW1Vc2VkOgogICoKICAqIFByb3ZpZGVzIHRoZSBhbW91bnQgb2YgbWVtb3J5IGN1cnJlbnRseSBhbGxvY2F0ZWQKQEAgLTU2NiwxMiArNTQyLDcgQEAKIAogaW50CiB4bWxNZW1Vc2VkKHZvaWQpIHsKLSAgICBpbnQgcmVzOwotCi0gICAgeG1sTXV0ZXhMb2NrKHhtbE1lbU11dGV4KTsKLSAgICByZXMgPSBkZWJ1Z01lbVNpemU7Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sTWVtTXV0ZXgpOwotICAgIHJldHVybihyZXMpOworICAgIHJldHVybihkZWJ1Z01lbVNpemUpOwogfQogCiAvKioKQEAgLTU4Niw3NCArNTU3LDEyIEBACiB4bWxNZW1CbG9ja3Modm9pZCkgewogICAgIGludCByZXM7CiAKLSAgICB4bWxNdXRleExvY2soeG1sTWVtTXV0ZXgpOworICAgIHhtbE11dGV4TG9jaygmeG1sTWVtTXV0ZXgpOwogICAgIHJlcyA9IGRlYnVnTWVtQmxvY2tzOwotICAgIHhtbE11dGV4VW5sb2NrKHhtbE1lbU11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sTWVtTXV0ZXgpOwogICAgIHJldHVybihyZXMpOwogfQogCi0jaWZkZWYgTUVNX0xJU1QKLS8qKgotICogeG1sTWVtQ29udGVudFNob3c6Ci0gKiBAZnA6ICBhIEZJTEUgZGVzY3JpcHRvciB1c2VkIGFzIHRoZSBvdXRwdXQgZmlsZQotICogQHA6ICBhIG1lbW9yeSBibG9jayBoZWFkZXIKLSAqCi0gKiB0cmllcyB0byBzaG93IHNvbWUgY29udGVudCBmcm9tIHRoZSBtZW1vcnkgYmxvY2sKLSAqLwotCi1zdGF0aWMgdm9pZAoteG1sTWVtQ29udGVudFNob3coRklMRSAqZnAsIE1FTUhEUiAqcCkKLXsKLSAgICBpbnQgaSxqLGssbGVuOwotICAgIGNvbnN0IGNoYXIgKmJ1ZjsKLQotICAgIGlmIChwID09IE5VTEwpIHsKLQlmcHJpbnRmKGZwLCAiIE5VTEwiKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGxlbiA9IHAtPm1oX3NpemU7Ci0gICAgYnVmID0gKGNvbnN0IGNoYXIgKikgSERSXzJfQ0xJRU5UKHApOwotCi0gICAgZm9yIChpID0gMDtpIDwgbGVuO2krKykgewotICAgICAgICBpZiAoYnVmW2ldID09IDApIGJyZWFrOwotCWlmICghaXNwcmludCgodW5zaWduZWQgY2hhcikgYnVmW2ldKSkgYnJlYWs7Ci0gICAgfQotICAgIGlmICgoaSA8IDQpICYmICgoYnVmW2ldICE9IDApIHx8IChpID09IDApKSkgewotICAgICAgICBpZiAobGVuID49IDQpIHsKLQkgICAgTUVNSERSICpxOwotCSAgICB2b2lkICpjdXI7Ci0KLSAgICAgICAgICAgIGZvciAoaiA9IDA7KGogPCBsZW4gLTMpICYmIChqIDwgNDApO2ogKz0gNCkgewotCQljdXIgPSAqKCh2b2lkICoqKSAmYnVmW2pdKTsKLQkJcSA9IENMSUVOVF8yX0hEUihjdXIpOwotCQlwID0gbWVtbGlzdDsKLQkJayA9IDA7Ci0JCXdoaWxlIChwICE9IE5VTEwpIHsKLQkJICAgIGlmIChwID09IHEpIGJyZWFrOwotCQkgICAgcCA9IHAtPm1oX25leHQ7Ci0JCSAgICBpZiAoaysrID4gMTAwKSBicmVhazsKLQkJfQotCQlpZiAoKHAgIT0gTlVMTCkgJiYgKHAgPT0gcSkpIHsKLQkJICAgIGZwcmludGYoZnAsICIgcG9pbnRlciB0byAjJWx1IGF0IGluZGV4ICVkIiwKLQkJICAgICAgICAgICAgcC0+bWhfbnVtYmVyLCBqKTsKLQkJICAgIHJldHVybjsKLQkJfQotCSAgICB9Ci0JfQotICAgIH0gZWxzZSBpZiAoKGkgPT0gMCkgJiYgKGJ1ZltpXSA9PSAwKSkgewotICAgICAgICBmcHJpbnRmKGZwLCIgbnVsbCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gMCkgZnByaW50ZihmcCwiIFwiJS4yNXNcIiIsIGJ1Zik7Ci0JZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCIgWyIpOwotCSAgICBmb3IgKGogPSAwO2ogPCBpO2orKykKLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIlYyIsIGJ1ZltqXSk7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCJdIik7Ci0JfQotICAgIH0KLX0KLSNlbmRpZgotCiAvKioKICAqIHhtbE1lbURpc3BsYXlMYXN0OgogICogQGZwOiAgYSBGSUxFIGRlc2NyaXB0b3IgdXNlZCBhcyB0aGUgb3V0cHV0IGZpbGUsIGlmIE5VTEwsIHRoZSByZXN1bHQgaXMKQEAgLTY4OCw3ICs1OTcsNyBAQAogICAgICAgICAgICAgbmJCeXRlcywgZGVidWdNZW1TaXplLCBkZWJ1Z01heE1lbVNpemUpOwogICAgIGZwcmludGYoZnAsIkJMT0NLICBOVU1CRVIgICBTSVpFICBUWVBFXG4iKTsKICAgICBpZHggPSAwOwotICAgIHhtbE11dGV4TG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxNZW1NdXRleCk7CiAgICAgcCA9IG1lbWxpc3Q7CiAgICAgd2hpbGUgKChwKSAmJiAobmJCeXRlcyA+IDApKSB7CiAJICBmcHJpbnRmKGZwLCIlLTV1ICAlNmx1ICU2bHUgIixpZHgrKyxwLT5taF9udW1iZXIsCkBAIC03MDEsNyArNjEwLDcgQEAKICAgICAgICAgICAgY2FzZSBSRUFMTE9DX0FUT01JQ19UWVBFOmZwcmludGYoZnAsImF0b21pY3JlYWxsb2MoKSBpbiAiKTticmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKIAkgICAgICAgIGZwcmludGYoZnAsIlVua25vd24gbWVtb3J5IGJsb2NrLCBtYXkgYmUgY29ycnVwdGVkIik7Ci0JCXhtbE11dGV4VW5sb2NrKHhtbE1lbU11dGV4KTsKKwkJeG1sTXV0ZXhVbmxvY2soJnhtbE1lbU11dGV4KTsKIAkJaWYgKG9sZF9mcCA9PSBOVUxMKQogCQkgICAgZmNsb3NlKGZwKTsKIAkJcmV0dXJuOwpAQCAtNzEwLDE2ICs2MTksMTIgQEAKICAgICAgICAgaWYgKHAtPm1oX3RhZyAhPSBNRU1UQUcpCiAJICAgICAgZnByaW50ZihmcCwiICBJTlZBTElEIik7CiAgICAgICAgIG5iKys7Ci0JaWYgKG5iIDwgMTAwKQotCSAgICB4bWxNZW1Db250ZW50U2hvdyhmcCwgcCk7Ci0JZWxzZQotCSAgICBmcHJpbnRmKGZwLCIgc2tpcCIpOwogCiAgICAgICAgIGZwcmludGYoZnAsIlxuIik7CiAJbmJCeXRlcyAtPSAodW5zaWduZWQgbG9uZylwLT5taF9zaXplOwogICAgICAgICBwID0gcC0+bWhfbmV4dDsKICAgICB9Ci0gICAgeG1sTXV0ZXhVbmxvY2soeG1sTWVtTXV0ZXgpOworICAgIHhtbE11dGV4VW5sb2NrKCZ4bWxNZW1NdXRleCk7CiAjZWxzZQogICAgIGZwcmludGYoZnAsIk1lbW9yeSBsaXN0IG5vdCBjb21waWxlZCAoTUVNX0xJU1Qgbm90IGRlZmluZWQgISlcbiIpOwogI2VuZGlmCkBAIC03NjUsNyArNjcwLDcgQEAKICAgICAgICAgICAgIGRlYnVnTWVtU2l6ZSwgZGVidWdNYXhNZW1TaXplKTsKICAgICBmcHJpbnRmKGZwLCJCTE9DSyAgTlVNQkVSICAgU0laRSAgVFlQRVxuIik7CiAgICAgaWR4ID0gMDsKLSAgICB4bWxNdXRleExvY2soeG1sTWVtTXV0ZXgpOworICAgIHhtbE11dGV4TG9jaygmeG1sTWVtTXV0ZXgpOwogICAgIHAgPSBtZW1saXN0OwogICAgIHdoaWxlIChwKSB7CiAJICBmcHJpbnRmKGZwLCIlLTV1ICAlNmx1ICU2bHUgIixpZHgrKyxwLT5taF9udW1iZXIsCkBAIC03NzgsNyArNjgzLDcgQEAKICAgICAgICAgICAgY2FzZSBSRUFMTE9DX0FUT01JQ19UWVBFOmZwcmludGYoZnAsImF0b21pY3JlYWxsb2MoKSBpbiAiKTticmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKIAkgICAgICAgIGZwcmludGYoZnAsIlVua25vd24gbWVtb3J5IGJsb2NrLCBtYXkgYmUgY29ycnVwdGVkIik7Ci0JCXhtbE11dGV4VW5sb2NrKHhtbE1lbU11dGV4KTsKKwkJeG1sTXV0ZXhVbmxvY2soJnhtbE1lbU11dGV4KTsKIAkJaWYgKG9sZF9mcCA9PSBOVUxMKQogCQkgICAgZmNsb3NlKGZwKTsKIAkJcmV0dXJuOwpAQCAtNzg3LDE1ICs2OTIsMTEgQEAKICAgICAgICAgaWYgKHAtPm1oX3RhZyAhPSBNRU1UQUcpCiAJICAgICAgZnByaW50ZihmcCwiICBJTlZBTElEIik7CiAgICAgICAgIG5iKys7Ci0JaWYgKG5iIDwgMTAwKQotCSAgICB4bWxNZW1Db250ZW50U2hvdyhmcCwgcCk7Ci0JZWxzZQotCSAgICBmcHJpbnRmKGZwLCIgc2tpcCIpOwogCiAgICAgICAgIGZwcmludGYoZnAsIlxuIik7CiAgICAgICAgIHAgPSBwLT5taF9uZXh0OwogICAgIH0KLSAgICB4bWxNdXRleFVubG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhVbmxvY2soJnhtbE1lbU11dGV4KTsKICNlbHNlCiAgICAgZnByaW50ZihmcCwiTWVtb3J5IGxpc3Qgbm90IGNvbXBpbGVkIChNRU1fTElTVCBub3QgZGVmaW5lZCAhKVxuIik7CiAjZW5kaWYKQEAgLTgxMSwxMCArNzEyLDYgQEAKICAgICAgcC0+bWhfcHJldiA9IE5VTEw7CiAgICAgIGlmIChtZW1saXN0KSBtZW1saXN0LT5taF9wcmV2ID0gcDsKICAgICAgbWVtbGlzdCA9IHA7Ci0jaWZkZWYgTUVNX0xJU1RfREVCVUcKLSAgICAgaWYgKHN0ZGVycikKLSAgICAgTWVtX0Rpc3BsYXkoc3RkZXJyKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBkZWJ1Z21lbV9saXN0X2RlbGV0ZShNRU1IRFIgKnApCkBAIC04MjQsMTAgKzcyMSw2IEBACiAgICAgIGlmIChwLT5taF9wcmV2KQogICAgICBwLT5taF9wcmV2LT5taF9uZXh0ID0gcC0+bWhfbmV4dDsKICAgICAgZWxzZSBtZW1saXN0ID0gcC0+bWhfbmV4dDsKLSNpZmRlZiBNRU1fTElTVF9ERUJVRwotICAgICBpZiAoc3RkZXJyKQotICAgICBNZW1fRGlzcGxheShzdGRlcnIpOwotI2VuZGlmCiB9CiAKICNlbmRpZgpAQCAtODcyLDcgKzc2NSw3IEBACiAJZnByaW50ZihmcCwiICAgICAgTUVNT1JZIEFMTE9DQVRFRCA6ICVsdSwgTUFYIHdhcyAlbHVcbiIsCiAJCWRlYnVnTWVtU2l6ZSwgZGVidWdNYXhNZW1TaXplKTsKICNpZmRlZiBNRU1fTElTVAotICAgIHhtbE11dGV4TG9jayh4bWxNZW1NdXRleCk7CisgICAgeG1sTXV0ZXhMb2NrKCZ4bWxNZW1NdXRleCk7CiAgICAgaWYgKG5yID4gMCkgewogCWZwcmludGYoZnAsIk5VTUJFUiAgIFNJWkUgIFRZUEUgICBXSEVSRVxuIik7CiAJcCA9IG1lbWxpc3Q7CkBAIC04OTAsMTMgKzc4MywxMiBAQAogCSAgICAgICAgZnByaW50ZihmcCwiJXMoJXUpIiwgcC0+bWhfZmlsZSwgcC0+bWhfbGluZSk7CiAJICAgIGlmIChwLT5taF90YWcgIT0gTUVNVEFHKQogCQlmcHJpbnRmKGZwLCIgIElOVkFMSUQiKTsKLQkgICAgeG1sTWVtQ29udGVudFNob3coZnAsIHApOwogCSAgICBmcHJpbnRmKGZwLCJcbiIpOwogCSAgICBuci0tOwogCSAgICBwID0gcC0+bWhfbmV4dDsKIAl9CiAgICAgfQotICAgIHhtbE11dGV4VW5sb2NrKHhtbE1lbU11dGV4KTsKKyAgICB4bWxNdXRleFVubG9jaygmeG1sTWVtTXV0ZXgpOwogI2VuZGlmIC8qIE1FTV9MSVNUICovCiB9CiAKQEAgLTkzNSwyOCArODI3LDI1IEBACiAvKioKICAqIHhtbEluaXRNZW1vcnk6CiAgKgotICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG1hZGUgcHJpdmF0ZS4gQ2FsbCB4bWxJbml0UGFyc2VyIHRvCi0gKiBpbml0aWFsaXplIHRoZSBsaWJyYXJ5LgorICogREVQUkVDQVRFRDogQWxpYXMgZm9yIHhtbEluaXRQYXJzZXIuCisgKi8KK2ludAoreG1sSW5pdE1lbW9yeSh2b2lkKSB7CisgICAgeG1sSW5pdFBhcnNlcigpOworICAgIHJldHVybigwKTsKK30KKworLyoqCisgKiB4bWxJbml0TWVtb3J5SW50ZXJuYWw6CiAgKgogICogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IGxheWVyLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzCiAgKi8KLWludAoteG1sSW5pdE1lbW9yeSh2b2lkKQotewordm9pZAoreG1sSW5pdE1lbW9yeUludGVybmFsKHZvaWQpIHsKICAgICAgY2hhciAqYnJlYWtwb2ludDsKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICAieG1sSW5pdE1lbW9yeSgpXG4iKTsKLSNlbmRpZgotICAgIC8qCi0gICAgIFRoaXMgaXMgcmVhbGx5IG5vdCBnb29kIGNvZGUgKHNlZSBCdWcgMTMwNDE5KS4gIFN1Z2dlc3Rpb25zIGZvcgotICAgICBpbXByb3ZlbWVudCB3aWxsIGJlIHdlbGNvbWUhCi0gICAgKi8KLSAgICAgaWYgKHhtbE1lbUluaXRpYWxpemVkKSByZXR1cm4oLTEpOwotICAgICB4bWxNZW1Jbml0aWFsaXplZCA9IDE7Ci0gICAgIHhtbE1lbU11dGV4ID0geG1sTmV3TXV0ZXgoKTsKKyAgICAgeG1sSW5pdE11dGV4KCZ4bWxNZW1NdXRleCk7CiAKICAgICAgYnJlYWtwb2ludCA9IGdldGVudigiWE1MX01FTV9CUkVBS1BPSU5UIik7CiAgICAgIGlmIChicmVha3BvaW50ICE9IE5VTEwpIHsKQEAgLTk2NywzOSArODU2LDM3IEBACiAgICAgICAgICBzc2NhbmYoYnJlYWtwb2ludCwgIiVwIiwgJnhtbE1lbVRyYWNlQmxvY2tBdCk7CiAgICAgIH0KIAotI2lmZGVmIERFQlVHX01FTU9SWQotICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgICJ4bWxJbml0TWVtb3J5KCkgT2tcbiIpOwotI2VuZGlmCi0gICAgIHJldHVybigwKTsKIH0KIAogLyoqCiAgKiB4bWxDbGVhbnVwTWVtb3J5OgogICoKLSAqIERFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sQ2xlYW51cFBhcnNlcgorICogREVQUkVDQVRFRDogVGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLiBDYWxsIHhtbENsZWFudXBQYXJzZXIKICAqIHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiB4bWxDbGVhbnVwUGFyc2VyCiAgKiBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24ndAogICogaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC4KKyAqLwordm9pZAoreG1sQ2xlYW51cE1lbW9yeSh2b2lkKSB7Cit9CisKKy8qKgorICogeG1sQ2xlYW51cE1lbW9yeUludGVybmFsOgogICoKICAqIEZyZWUgdXAgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBsaWJyYXJ5IGZvciBpdHMgb3duCiAgKiB1c2UuIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgdXNlciBsZXZlbCBjb2RlLgogICovCiB2b2lkCi14bWxDbGVhbnVwTWVtb3J5KHZvaWQpIHsKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICAieG1sQ2xlYW51cE1lbW9yeSgpXG4iKTsKLSNlbmRpZgotICAgIGlmICh4bWxNZW1Jbml0aWFsaXplZCA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB4bWxGcmVlTXV0ZXgoeG1sTWVtTXV0ZXgpOwotICAgIHhtbE1lbU11dGV4ID0gTlVMTDsKLSAgICB4bWxNZW1Jbml0aWFsaXplZCA9IDA7Ci0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAgInhtbENsZWFudXBNZW1vcnkoKSBPa1xuIik7Cit4bWxDbGVhbnVwTWVtb3J5SW50ZXJuYWwodm9pZCkgeworICAgIC8qCisgICAgICogRG9uJ3QgY2xlYW4gdXAgbXV0ZXggb24gV2luZG93cy4gR2xvYmFsIHN0YXRlIGRlc3RydWN0b3JzIGNhbiBjYWxsCisgICAgICogbWFsbG9jIGZ1bmN0aW9ucyBhZnRlciB4bWxDbGVhbnVwUGFyc2VyIHdhcyBjYWxsZWQuIElmIG1lbW9yeQorICAgICAqIGRlYnVnZ2luZyBpcyBlbmFibGVkLCB4bWxNZW1NdXRleCBjYW4gYmUgdXNlZCBhZnRlciBjbGVhbnVwLgorICAgICAqCisgICAgICogU2VlIHB5dGhvbi90ZXN0cy90aHJlYWQyLnB5CisgICAgICovCisjaWYgIWRlZmluZWQoTElCWE1MX1RIUkVBRF9FTkFCTEVEKSB8fCAhZGVmaW5lZChfV0lOMzIpCisgICAgeG1sQ2xlYW51cE11dGV4KCZ4bWxNZW1NdXRleCk7CiAjZW5kaWYKIH0KIApAQCAtMTAyMSwxMCArOTA4LDYgQEAKIGludAogeG1sTWVtU2V0dXAoeG1sRnJlZUZ1bmMgZnJlZUZ1bmMsIHhtbE1hbGxvY0Z1bmMgbWFsbG9jRnVuYywKICAgICAgICAgICAgIHhtbFJlYWxsb2NGdW5jIHJlYWxsb2NGdW5jLCB4bWxTdHJkdXBGdW5jIHN0cmR1cEZ1bmMpIHsKLSNpZmRlZiBERUJVR19NRU1PUlkKLSAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICAieG1sTWVtU2V0dXAoKVxuIik7Ci0jZW5kaWYKICAgICBpZiAoZnJlZUZ1bmMgPT0gTlVMTCkKIAlyZXR1cm4oLTEpOwogICAgIGlmIChtYWxsb2NGdW5jID09IE5VTEwpCkBAIC0xMDM4LDEwICs5MjEsNiBAQAogICAgIHhtbE1hbGxvY0F0b21pYyA9IG1hbGxvY0Z1bmM7CiAgICAgeG1sUmVhbGxvYyA9IHJlYWxsb2NGdW5jOwogICAgIHhtbE1lbVN0cmR1cCA9IHN0cmR1cEZ1bmM7Ci0jaWZkZWYgREVCVUdfTUVNT1JZCi0gICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAgInhtbE1lbVNldHVwKCkgT2tcbiIpOwotI2VuZGlmCiAgICAgcmV0dXJuKDApOwogfQogCkBAIC0xMDg4LDEwICs5NjcsNiBAQAogeG1sR2NNZW1TZXR1cCh4bWxGcmVlRnVuYyBmcmVlRnVuYywgeG1sTWFsbG9jRnVuYyBtYWxsb2NGdW5jLAogICAgICAgICAgICAgICB4bWxNYWxsb2NGdW5jIG1hbGxvY0F0b21pY0Z1bmMsIHhtbFJlYWxsb2NGdW5jIHJlYWxsb2NGdW5jLAogCSAgICAgIHhtbFN0cmR1cEZ1bmMgc3RyZHVwRnVuYykgewotI2lmZGVmIERFQlVHX01FTU9SWQotICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgICJ4bWxHY01lbVNldHVwKClcbiIpOwotI2VuZGlmCiAgICAgaWYgKGZyZWVGdW5jID09IE5VTEwpCiAJcmV0dXJuKC0xKTsKICAgICBpZiAobWFsbG9jRnVuYyA9PSBOVUxMKQpAQCAtMTEwNywxMCArOTgyLDYgQEAKICAgICB4bWxNYWxsb2NBdG9taWMgPSBtYWxsb2NBdG9taWNGdW5jOwogICAgIHhtbFJlYWxsb2MgPSByZWFsbG9jRnVuYzsKICAgICB4bWxNZW1TdHJkdXAgPSBzdHJkdXBGdW5jOwotI2lmZGVmIERFQlVHX01FTU9SWQotICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgICJ4bWxHY01lbVNldHVwKCkgT2tcbiIpOwotI2VuZGlmCiAgICAgcmV0dXJuKDApOwogfQogCmRpZmYgLS1naXQgYS94bWxtb2R1bGUuYyBiL3htbG1vZHVsZS5jCmluZGV4IDQ0ZWJhMDYuLmQ4YmNlMzIgMTAwNjQ0Ci0tLSBhL3htbG1vZHVsZS5jCisrKyBiL3htbG1vZHVsZS5jCkBAIC0xNywxMCArMTcsMTIgQEAKICNpbmNsdWRlICJsaWJ4bWwuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxtb2R1bGUuaD4KICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+Ci0jaW5jbHVkZSA8bGlieG1sL3htbG1vZHVsZS5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgogCiAjaWZkZWYgTElCWE1MX01PRFVMRVNfRU5BQkxFRAogCkBAIC0zNDAsNyArMzQyLDcgQEAKIHN0YXRpYyBpbnQKIHhtbE1vZHVsZVBsYXRmb3JtU3ltYm9sKHZvaWQgKmhhbmRsZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqKnN5bWJvbCkKIHsKLVhNTF9JR05PUkVfUEVEQU5USUNfV0FSTklOR1MKK1hNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTCiAgICAgKnN5bWJvbCA9IEdldFByb2NBZGRyZXNzKGhhbmRsZSwgbmFtZSk7CiAgICAgcmV0dXJuIChOVUxMID09ICpzeW1ib2wpID8gLTEgOiAwOwogWE1MX1BPUF9XQVJOSU5HUwpAQCAtMzQ4LDExMiArMzUwLDQgQEAKIAogI2VuZGlmIC8qIF9XSU4zMiAqLwogCi0jaWZkZWYgSEFWRV9CRU9TCi0KLSNpbmNsdWRlIDxrZXJuZWwvaW1hZ2UuaD4KLQotLyoKLSAqIHhtbE1vZHVsZVBsYXRmb3JtT3BlbjoKLSAqIGJlb3MgYXBpIGluZm86IGh0dHA6Ly93d3cuYmV1bml0ZWQub3JnL2JlYm9vay9UaGUlMjBLZXJuZWwlMjBLaXQvSW1hZ2VzLmh0bWwKLSAqIHJldHVybnMgYSBoYW5kbGUgb24gc3VjY2VzcywgYW5kIHplcm8gb24gZXJyb3IuCi0gKi8KLQotc3RhdGljIHZvaWQgKgoteG1sTW9kdWxlUGxhdGZvcm1PcGVuKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIGxvYWRfYWRkX29uKG5hbWUpOwotfQotCi0vKgotICogeG1sTW9kdWxlUGxhdGZvcm1DbG9zZToKLSAqIGJlb3MgYXBpIGluZm86IGh0dHA6Ly93d3cuYmV1bml0ZWQub3JnL2JlYm9vay9UaGUlMjBLZXJuZWwlMjBLaXQvSW1hZ2VzLmh0bWwKLSAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgbm9uLXplcm8gb24gZXJyb3IuCi0gKi8KLQotc3RhdGljIGludAoteG1sTW9kdWxlUGxhdGZvcm1DbG9zZSh2b2lkICpoYW5kbGUpCi17Ci0gICAgc3RhdHVzX3QgcmM7Ci0KLSAgICByYyA9IHVubG9hZF9hZGRfb24oKGltYWdlX2lkKSBoYW5kbGUpOwotCi0gICAgaWYgKHJjID09IEJfT0spCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIC0xOwotfQotCi0vKgotICogeG1sTW9kdWxlUGxhdGZvcm1TeW1ib2w6Ci0gKiBiZW9zIGFwaSBpbmZvOiBodHRwOi8vd3d3LmJldW5pdGVkLm9yZy9iZWJvb2svVGhlJTIwS2VybmVsJTIwS2l0L0ltYWdlcy5odG1sCi0gKiByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgdGhlIGxvYWRlZCBzeW1ib2wgaW4gcmVzdWx0LCBhbmQgLTEgb24gZXJyb3IuCi0gKi8KLQotc3RhdGljIGludAoteG1sTW9kdWxlUGxhdGZvcm1TeW1ib2wodm9pZCAqaGFuZGxlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICoqc3ltYm9sKQotewotICAgIHN0YXR1c190IHJjOwotCi0gICAgcmMgPSBnZXRfaW1hZ2Vfc3ltYm9sKChpbWFnZV9pZCkgaGFuZGxlLCBuYW1lLCBCX1NZTUJPTF9UWVBFX0FOWSwgc3ltYm9sKTsKLQotICAgIHJldHVybiAocmMgPT0gQl9PSykgPyAwIDogLTE7Ci19Ci0KLSNlbmRpZiAvKiBIQVZFX0JFT1MgKi8KLQotI2lmZGVmIEhBVkVfT1MyCi0KLSNpbmNsdWRlIDxvczIuaD4KLQotLyoKLSAqIHhtbE1vZHVsZVBsYXRmb3JtT3BlbjoKLSAqIG9zMiBhcGkgaW5mbzogaHR0cDovL3d3dy5lZG0yLmNvbS9vczJhcGkvRG9zL0Rvc0xvYWRNb2R1bGUuaHRtbAotICogcmV0dXJucyBhIGhhbmRsZSBvbiBzdWNjZXNzLCBhbmQgemVybyBvbiBlcnJvci4KLSAqLwotCi1zdGF0aWMgdm9pZCAqCi14bWxNb2R1bGVQbGF0Zm9ybU9wZW4oY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBjaGFyIGVycmJ1ZlsyNTZdOwotICAgIHZvaWQgKmhhbmRsZTsKLSAgICBpbnQgcmM7Ci0KLSAgICByYyA9IERvc0xvYWRNb2R1bGUoZXJyYnVmLCBzaXplb2YoZXJyYnVmKSAtIDEsIG5hbWUsICZoYW5kbGUpOwotCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAoaGFuZGxlKTsKLX0KLQotLyoKLSAqIHhtbE1vZHVsZVBsYXRmb3JtQ2xvc2U6Ci0gKiBvczIgYXBpIGluZm86IGh0dHA6Ly93d3cuZWRtMi5jb20vb3MyYXBpL0Rvcy9Eb3NGcmVlTW9kdWxlLmh0bWwKLSAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgbm9uLXplcm8gb24gZXJyb3IuCi0gKi8KLQotc3RhdGljIGludAoteG1sTW9kdWxlUGxhdGZvcm1DbG9zZSh2b2lkICpoYW5kbGUpCi17Ci0gICAgcmV0dXJuIERvc0ZyZWVNb2R1bGUoaGFuZGxlKTsKLX0KLQotLyoKLSAqIHhtbE1vZHVsZVBsYXRmb3JtU3ltYm9sOgotICogb3MyIGFwaSBpbmZvOiBodHRwOi8vd3d3LmVkbTIuY29tL29zMmFwaS9Eb3MvRG9zUXVlcnlQcm9jQWRkci5odG1sCi0gKiByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgdGhlIGxvYWRlZCBzeW1ib2wgaW4gcmVzdWx0LCBhbmQgLTEgb24gZXJyb3IuCi0gKi8KLQotc3RhdGljIGludAoteG1sTW9kdWxlUGxhdGZvcm1TeW1ib2wodm9pZCAqaGFuZGxlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICoqc3ltYm9sKQotewotICAgIGludCByYzsKLQotICAgIHJjID0gRG9zUXVlcnlQcm9jQWRkcihoYW5kbGUsIDAsIG5hbWUsIHN5bWJvbCk7Ci0KLSAgICByZXR1cm4gKHJjID09IE5PX0VSUk9SKSA/IDAgOiAtMTsKLX0KLQotI2VuZGlmIC8qIEhBVkVfT1MyICovCi0KICNlbmRpZiAvKiBMSUJYTUxfTU9EVUxFU19FTkFCTEVEICovCmRpZmYgLS1naXQgYS94bWxyZWFkZXIuYyBiL3htbHJlYWRlci5jCmluZGV4IGIzMjk5Y2UuLjFmOTAzMzAgMTAwNjQ0Ci0tLSBhL3htbHJlYWRlci5jCisrKyBiL3htbHJlYWRlci5jCkBAIC0zOSw3ICszOSwxMSBAQAogI2luY2x1ZGUgPGxpYnhtbC9wYXR0ZXJuLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgImJ1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvYnVmLmgiCisjaW5jbHVkZSAicHJpdmF0ZS90cmVlLmgiCisjaWZkZWYgTElCWE1MX1hJTkNMVURFX0VOQUJMRUQKKyNpbmNsdWRlICJwcml2YXRlL3hpbmNsdWRlLmgiCisjZW5kaWYKIAogI2RlZmluZSBNQVhfRVJSX01TR19TSVpFIDY0MDAwCiAKQEAgLTczLDkgKzc3LDYgQEAKICAgI2VuZGlmCiAjZW5kaWYKIAotLyogI2RlZmluZSBERUJVR19DQUxMQkFDS1MgKi8KLS8qICNkZWZpbmUgREVCVUdfUkVBREVSICovCi0KIC8qKgogICogVE9ETzoKICAqCkBAIC04NiwxMiArODcsNiBAQAogCSAgICAiVW5pbXBsZW1lbnRlZCBibG9jayBhdCAlczolZFxuIiwJCQkJXAogICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKIAotI2lmZGVmIERFQlVHX1JFQURFUgotI2RlZmluZSBEVU1QX1JFQURFUiB4bWxUZXh0UmVhZGVyRGVidWcocmVhZGVyKTsKLSNlbHNlCi0jZGVmaW5lIERVTVBfUkVBREVSCi0jZW5kaWYKLQogI2RlZmluZSBDSFVOS19TSVpFIDUxMgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCkBAIC01MDEsMzMgKzQ5Niw2IEBACiAgKgkJCVRoZSByZWFkZXIgY29yZSBwYXJzZXIJCQkJKgogICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIERFQlVHX1JFQURFUgotc3RhdGljIHZvaWQKLXhtbFRleHRSZWFkZXJEZWJ1Zyh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcikgewotICAgIGlmICgocmVhZGVyID09IE5VTEwpIHx8IChyZWFkZXItPmN0eHQgPT0gTlVMTCkpIHsKLQlmcHJpbnRmKHN0ZGVyciwgInhtbFRleHRSZWFkZXIgTlVMTFxuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgInhtbFRleHRSZWFkZXI6IHN0YXRlICVkIGRlcHRoICVkICIsCi0JICAgIHJlYWRlci0+c3RhdGUsIHJlYWRlci0+ZGVwdGgpOwotICAgIGlmIChyZWFkZXItPm5vZGUgPT0gTlVMTCkgewotCWZwcmludGYoc3RkZXJyLCAibm9kZSA9IE5VTExcbiIpOwotICAgIH0gZWxzZSB7Ci0JZnByaW50ZihzdGRlcnIsICJub2RlICVzXG4iLCByZWFkZXItPm5vZGUtPm5hbWUpOwotICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgaW5wdXQ6IGJhc2UgJWQsIGN1ciAlZCwgZGVwdGggJWQ6ICIsCi0JICAgIHJlYWRlci0+YmFzZSwgcmVhZGVyLT5jdXIsIHJlYWRlci0+Y3R4dC0+bm9kZU5yKTsKLSAgICBpZiAocmVhZGVyLT5pbnB1dC0+YnVmZmVyID09IE5VTEwpIHsKLQlmcHJpbnRmKHN0ZGVyciwgImJ1ZmZlciBpcyBOVUxMXG4iKTsKLSAgICB9IGVsc2UgewotI2lmZGVmIExJQlhNTF9ERUJVR19FTkFCTEVECi0JeG1sRGVidWdEdW1wU3RyaW5nKHN0ZGVyciwKLQkJJnJlYWRlci0+aW5wdXQtPmJ1ZmZlci0+Y29udGVudFtyZWFkZXItPmN1cl0pOwotI2VuZGlmCi0JZnByaW50ZihzdGRlcnIsICJcbiIpOwotICAgIH0KLX0KLSNlbmRpZgogCiAvKioKICAqIHhtbFRleHRSZWFkZXJFbnRQdXNoOgpAQCAtNTM2LDMwICs1MDQsMjMgQEAKICAqCiAgKiBQdXNoZXMgYSBuZXcgZW50aXR5IHJlZmVyZW5jZSBub2RlIG9uIHRvcCBvZiB0aGUgZW50aXRpZXMgc3RhY2sKICAqCi0gKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGluZGV4IGluIHRoZSBzdGFjayBvdGhlcndpc2UKKyAqIFJldHVybnMgLTEgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGluZGV4IGluIHRoZSBzdGFjayBvdGhlcndpc2UKICAqLwogc3RhdGljIGludAogeG1sVGV4dFJlYWRlckVudFB1c2goeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsIHhtbE5vZGVQdHIgdmFsdWUpCiB7Ci0gICAgaWYgKHJlYWRlci0+ZW50TWF4IDw9IDApIHsKLQlyZWFkZXItPmVudE1heCA9IDEwOwotCXJlYWRlci0+ZW50VGFiID0gKHhtbE5vZGVQdHIgKikgeG1sTWFsbG9jKHJlYWRlci0+ZW50TWF4ICoKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyZWFkZXItPmVudFRhYlswXSkpOwotICAgICAgICBpZiAocmVhZGVyLT5lbnRUYWIgPT0gTlVMTCkgewotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJ4bWxNYWxsb2MgZmFpbGVkICFcbiIpOwotICAgICAgICAgICAgcmV0dXJuICgwKTsKLSAgICAgICAgfQotICAgIH0KICAgICBpZiAocmVhZGVyLT5lbnROciA+PSByZWFkZXItPmVudE1heCkgewotICAgICAgICByZWFkZXItPmVudE1heCAqPSAyOwotICAgICAgICByZWFkZXItPmVudFRhYiA9Ci0gICAgICAgICAgICAoeG1sTm9kZVB0ciAqKSB4bWxSZWFsbG9jKHJlYWRlci0+ZW50VGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXItPmVudE1heCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyZWFkZXItPmVudFRhYlswXSkpOwotICAgICAgICBpZiAocmVhZGVyLT5lbnRUYWIgPT0gTlVMTCkgeworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHJlYWRlci0+ZW50TWF4ID09IDAgPyAxMCA6IHJlYWRlci0+ZW50TWF4ICogMjsKKyAgICAgICAgeG1sTm9kZVB0ciAqdG1wOworCisgICAgICAgIHRtcCA9ICh4bWxOb2RlUHRyICopIHhtbFJlYWxsb2MocmVhZGVyLT5lbnRUYWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2l6ZSAqIHNpemVvZigqdG1wKSk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJ4bWxSZWFsbG9jIGZhaWxlZCAhXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICByZXR1cm4gKC0xKTsKICAgICAgICAgfQorICAgICAgICByZWFkZXItPmVudFRhYiA9IHRtcDsKKyAgICAgICAgcmVhZGVyLT5lbnRNYXggPSBuZXdTaXplOwogICAgIH0KICAgICByZWFkZXItPmVudFRhYltyZWFkZXItPmVudE5yXSA9IHZhbHVlOwogICAgIHJlYWRlci0+ZW50ID0gdmFsdWU7CkBAIC02MDUsOSArNTY2LDYgQEAKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwogICAgIHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyID0gY3R4dC0+X3ByaXZhdGU7CiAKLSNpZmRlZiBERUJVR19DQUxMQkFDS1MKLSAgICBwcmludGYoInhtbFRleHRSZWFkZXJTdGFydEVsZW1lbnQoJXMpXG4iLCBmdWxsbmFtZSk7Ci0jZW5kaWYKICAgICBpZiAoKHJlYWRlciAhPSBOVUxMKSAmJiAocmVhZGVyLT5zdGFydEVsZW1lbnQgIT0gTlVMTCkpIHsKIAlyZWFkZXItPnN0YXJ0RWxlbWVudChjdHgsIGZ1bGxuYW1lLCBhdHRzKTsKIAlpZiAoKGN0eHQtPm5vZGUgIT0gTlVMTCkgJiYgKGN0eHQtPmlucHV0ICE9IE5VTEwpICYmCkBAIC02MzEsOSArNTg5LDYgQEAKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwogICAgIHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyID0gY3R4dC0+X3ByaXZhdGU7CiAKLSNpZmRlZiBERUJVR19DQUxMQkFDS1MKLSAgICBwcmludGYoInhtbFRleHRSZWFkZXJFbmRFbGVtZW50KCVzKVxuIiwgZnVsbG5hbWUpOwotI2VuZGlmCiAgICAgaWYgKChyZWFkZXIgIT0gTlVMTCkgJiYgKHJlYWRlci0+ZW5kRWxlbWVudCAhPSBOVUxMKSkgewogCXJlYWRlci0+ZW5kRWxlbWVudChjdHgsIGZ1bGxuYW1lKTsKICAgICB9CkBAIC02NjgsOSArNjIzLDYgQEAKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwogICAgIHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyID0gY3R4dC0+X3ByaXZhdGU7CiAKLSNpZmRlZiBERUJVR19DQUxMQkFDS1MKLSAgICBwcmludGYoInhtbFRleHRSZWFkZXJTdGFydEVsZW1lbnROcyglcylcbiIsIGxvY2FsbmFtZSk7Ci0jZW5kaWYKICAgICBpZiAoKHJlYWRlciAhPSBOVUxMKSAmJiAocmVhZGVyLT5zdGFydEVsZW1lbnROcyAhPSBOVUxMKSkgewogCXJlYWRlci0+c3RhcnRFbGVtZW50TnMoY3R4LCBsb2NhbG5hbWUsIHByZWZpeCwgVVJJLCBuYl9uYW1lc3BhY2VzLAogCSAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcywgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVsdGVkLApAQCAtNzAyLDkgKzY1NCw2IEBACiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKICAgICB4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciA9IGN0eHQtPl9wcml2YXRlOwogCi0jaWZkZWYgREVCVUdfQ0FMTEJBQ0tTCi0gICAgcHJpbnRmKCJ4bWxUZXh0UmVhZGVyRW5kRWxlbWVudE5zKCVzKVxuIiwgbG9jYWxuYW1lKTsKLSNlbmRpZgogICAgIGlmICgocmVhZGVyICE9IE5VTEwpICYmIChyZWFkZXItPmVuZEVsZW1lbnROcyAhPSBOVUxMKSkgewogCXJlYWRlci0+ZW5kRWxlbWVudE5zKGN0eCwgbG9jYWxuYW1lLCBwcmVmaXgsIFVSSSk7CiAgICAgfQpAQCAtNzI1LDkgKzY3NCw2IEBACiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0ID0gKHhtbFBhcnNlckN0eHRQdHIpIGN0eDsKICAgICB4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciA9IGN0eHQtPl9wcml2YXRlOwogCi0jaWZkZWYgREVCVUdfQ0FMTEJBQ0tTCi0gICAgcHJpbnRmKCJ4bWxUZXh0UmVhZGVyQ2hhcmFjdGVycygpXG4iKTsKLSNlbmRpZgogICAgIGlmICgocmVhZGVyICE9IE5VTEwpICYmIChyZWFkZXItPmNoYXJhY3RlcnMgIT0gTlVMTCkpIHsKIAlyZWFkZXItPmNoYXJhY3RlcnMoY3R4LCBjaCwgbGVuKTsKICAgICB9CkBAIC03NDcsOSArNjkzLDYgQEAKICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4OwogICAgIHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyID0gY3R4dC0+X3ByaXZhdGU7CiAKLSNpZmRlZiBERUJVR19DQUxMQkFDS1MKLSAgICBwcmludGYoInhtbFRleHRSZWFkZXJDRGF0YUJsb2NrKClcbiIpOwotI2VuZGlmCiAgICAgaWYgKChyZWFkZXIgIT0gTlVMTCkgJiYgKHJlYWRlci0+Y2RhdGFCbG9jayAhPSBOVUxMKSkgewogCXJlYWRlci0+Y2RhdGFCbG9jayhjdHgsIGNoLCBsZW4pOwogICAgIH0KQEAgLTc2OSw3ICs3MTIsNiBAQAogICAgIHhtbEJ1ZlB0ciBpbmJ1ZjsKICAgICBpbnQgdmFsLCBzOwogICAgIHhtbFRleHRSZWFkZXJTdGF0ZSBvbGRzdGF0ZTsKLSAgICBpbnQgYWxsb2M7CiAKICAgICBpZiAoKHJlYWRlci0+aW5wdXQgPT0gTlVMTCkgfHwgKHJlYWRlci0+aW5wdXQtPmJ1ZmZlciA9PSBOVUxMKSkKIAlyZXR1cm4oLTEpOwpAQCAtNzc3LDcgKzcxOSw2IEBACiAgICAgb2xkc3RhdGUgPSByZWFkZXItPnN0YXRlOwogICAgIHJlYWRlci0+c3RhdGUgPSBYTUxfVEVYVFJFQURFUl9OT05FOwogICAgIGluYnVmID0gcmVhZGVyLT5pbnB1dC0+YnVmZmVyOwotICAgIGFsbG9jID0geG1sQnVmR2V0QWxsb2NhdGlvblNjaGVtZShpbmJ1Zik7CiAKICAgICB3aGlsZSAocmVhZGVyLT5zdGF0ZSA9PSBYTUxfVEVYVFJFQURFUl9OT05FKSB7CiAJaWYgKHhtbEJ1ZlVzZShpbmJ1ZikgPCByZWFkZXItPmN1ciArIENIVU5LX1NJWkUpIHsKQEAgLTc4NiwyMiArNzI3LDE3IEBACiAJICAgICAqLwogCSAgICBpZiAocmVhZGVyLT5tb2RlICE9IFhNTF9URVhUUkVBREVSX01PREVfRU9GKSB7CiAJCXZhbCA9IHhtbFBhcnNlcklucHV0QnVmZmVyUmVhZChyZWFkZXItPmlucHV0LCA0MDk2KTsKLQkJaWYgKCh2YWwgPT0gMCkgJiYKLQkJICAgIChhbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkpIHsKKwkJaWYgKHZhbCA9PSAwKSB7CiAJCSAgICBpZiAoeG1sQnVmVXNlKGluYnVmKSA9PSByZWFkZXItPmN1cikgewogCQkJcmVhZGVyLT5tb2RlID0gWE1MX1RFWFRSRUFERVJfTU9ERV9FT0Y7Ci0JCQlyZWFkZXItPnN0YXRlID0gb2xkc3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJICAgIH0KIAkJfSBlbHNlIGlmICh2YWwgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFBhcnNlcklucHV0QnVmZmVyUmVhZCBmYWlsZWRcbiIpOwogCQkgICAgcmVhZGVyLT5tb2RlID0gWE1MX1RFWFRSRUFERVJfTU9ERV9FT0Y7CiAJCSAgICByZWFkZXItPnN0YXRlID0gb2xkc3RhdGU7Ci0JCSAgICBpZiAoKG9sZHN0YXRlICE9IFhNTF9URVhUUkVBREVSX1NUQVJUKSB8fAotCQkJKHJlYWRlci0+Y3R4dC0+bXlEb2MgIT0gTlVMTCkpCi0JCQlyZXR1cm4odmFsKTsKLQkJfSBlbHNlIGlmICh2YWwgPT0gMCkgewotCQkgICAgLyogbWFyayB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gYW5kIHByb2Nlc3MgdGhlIHJlbWFpbnMgKi8KLQkJICAgIHJlYWRlci0+bW9kZSA9IFhNTF9URVhUUkVBREVSX01PREVfRU9GOwotCQkgICAgYnJlYWs7CisJCSAgICByZXR1cm4odmFsKTsKIAkJfQogCiAJICAgIH0gZWxzZQpAQCAtODMxLDEyICs3NjcsMTMgQEAKIAkgICAgYnJlYWs7CiAJfQogICAgIH0KKyAgICByZWFkZXItPnN0YXRlID0gb2xkc3RhdGU7CiAKICAgICAvKgogICAgICAqIERpc2NhcmQgdGhlIGNvbnN1bWVkIGlucHV0IHdoZW4gbmVlZGVkIGFuZCBwb3NzaWJsZQogICAgICAqLwogICAgIGlmIChyZWFkZXItPm1vZGUgPT0gWE1MX1RFWFRSRUFERVJfTU9ERV9JTlRFUkFDVElWRSkgewotICAgICAgICBpZiAoYWxsb2MgIT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHsKKyAgICAgICAgaWYgKHJlYWRlci0+aW5wdXQtPnJlYWRjYWxsYmFjayAhPSBOVUxMKSB7CiAJICAgIGlmICgocmVhZGVyLT5jdXIgPj0gNDA5NikgJiYKIAkJKHhtbEJ1ZlVzZShpbmJ1ZikgLSByZWFkZXItPmN1ciA8PSBDSFVOS19TSVpFKSkgewogCQl2YWwgPSB4bWxCdWZTaHJpbmsoaW5idWYsIHJlYWRlci0+Y3VyKTsKQEAgLTg2Nyw3ICs4MDQsNiBAQAogCSAgICB9CiAJfQogICAgIH0KLSAgICByZWFkZXItPnN0YXRlID0gb2xkc3RhdGU7CiAgICAgaWYgKHJlYWRlci0+Y3R4dC0+d2VsbEZvcm1lZCA9PSAwKSB7CiAJcmVhZGVyLT5tb2RlID0gWE1MX1RFWFRSRUFERVJfTU9ERV9FT0Y7CiAgICAgICAgIHJldHVybigtMSk7CkBAIC0xMDM0LDcgKzk3MCwxMSBAQAogCSAgICBpZiAoKG5vZGUtPmNoaWxkcmVuICE9IE5VTEwpICYmCiAJCShub2RlLT5jaGlsZHJlbi0+dHlwZSA9PSBYTUxfRU5USVRZX0RFQ0wpICYmCiAJCShub2RlLT5jaGlsZHJlbi0+Y2hpbGRyZW4gIT0gTlVMTCkpIHsKLQkJeG1sVGV4dFJlYWRlckVudFB1c2gocmVhZGVyLCBub2RlKTsKKwkJaWYgKHhtbFRleHRSZWFkZXJFbnRQdXNoKHJlYWRlciwgbm9kZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09IG9sZG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBza2lwX2NoaWxkcmVuOworICAgICAgICAgICAgICAgIH0KIAkJbm9kZSA9IG5vZGUtPmNoaWxkcmVuLT5jaGlsZHJlbjsKIAkJY29udGludWU7CiAJICAgIH0gZWxzZSB7CkBAIC0xMjMxLDEwICsxMTcxLDYgQEAKICAgICBpZiAocmVhZGVyLT5jdHh0ID09IE5VTEwpCiAJcmV0dXJuKC0xKTsKIAotI2lmZGVmIERFQlVHX1JFQURFUgotICAgIGZwcmludGYoc3RkZXJyLCAiXG5SRUFEICIpOwotICAgIERVTVBfUkVBREVSCi0jZW5kaWYKICAgICBpZiAocmVhZGVyLT5tb2RlID09IFhNTF9URVhUUkVBREVSX01PREVfSU5JVElBTCkgewogCXJlYWRlci0+bW9kZSA9IFhNTF9URVhUUkVBREVSX01PREVfSU5URVJBQ1RJVkU7CiAJLyoKQEAgLTE0MjYsOCArMTM2Miw2IEBACiAgICAgcmVhZGVyLT5zdGF0ZSA9IFhNTF9URVhUUkVBREVSX0JBQ0tUUkFDSzsKIAogbm9kZV9mb3VuZDoKLSAgICBEVU1QX1JFQURFUgotCiAgICAgLyoKICAgICAgKiBJZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHBpZWNlIG9mIENEQVRBIG1ha2Ugc3VyZSBpdCdzIGZpbmlzaGVkCiAgICAgICovCkBAIC0xNDQ0LDYgKzEzNzgsNyBAQAogICAgICAqIEhhbmRsZSBYSW5jbHVkZSBpZiBhc2tlZCBmb3IKICAgICAgKi8KICAgICBpZiAoKHJlYWRlci0+eGluY2x1ZGUpICYmIChyZWFkZXItPmluX3hpbmNsdWRlID09IDApICYmCisgICAgICAgIChyZWFkZXItPnN0YXRlICE9IFhNTF9URVhUUkVBREVSX0JBQ0tUUkFDSykgJiYKICAgICAgICAgKHJlYWRlci0+bm9kZSAhPSBOVUxMKSAmJgogCShyZWFkZXItPm5vZGUtPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkgJiYKIAkocmVhZGVyLT5ub2RlLT5ucyAhPSBOVUxMKSAmJgpAQCAtMTQ1Myw2ICsxMzg4LDcgQEAKIAkgICAgcmVhZGVyLT54aW5jY3R4dCA9IHhtbFhJbmNsdWRlTmV3Q29udGV4dChyZWFkZXItPmN0eHQtPm15RG9jKTsKIAkgICAgeG1sWEluY2x1ZGVTZXRGbGFncyhyZWFkZXItPnhpbmNjdHh0LAogCSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci0+cGFyc2VyRmxhZ3MgJiAoflhNTF9QQVJTRV9OT1hJTkNOT0RFKSk7CisgICAgICAgICAgICB4bWxYSW5jbHVkZVNldFN0cmVhbWluZ01vZGUocmVhZGVyLT54aW5jY3R4dCwgMSk7CiAJfQogCS8qCiAJICogZXhwYW5kIHRoYXQgbm9kZSBhbmQgcHJvY2VzcyBpdApAQCAtMTQ3OSw3ICsxNDE1LDggQEAKIAlpZiAoKHJlYWRlci0+bm9kZS0+Y2hpbGRyZW4gIT0gTlVMTCkgJiYKIAkgICAgKHJlYWRlci0+bm9kZS0+Y2hpbGRyZW4tPnR5cGUgPT0gWE1MX0VOVElUWV9ERUNMKSAmJgogCSAgICAocmVhZGVyLT5ub2RlLT5jaGlsZHJlbi0+Y2hpbGRyZW4gIT0gTlVMTCkpIHsKLQkgICAgeG1sVGV4dFJlYWRlckVudFB1c2gocmVhZGVyLCByZWFkZXItPm5vZGUpOworCSAgICBpZiAoeG1sVGV4dFJlYWRlckVudFB1c2gocmVhZGVyLCByZWFkZXItPm5vZGUpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGdldF9uZXh0X25vZGU7CiAJICAgIHJlYWRlci0+bm9kZSA9IHJlYWRlci0+bm9kZS0+Y2hpbGRyZW4tPmNoaWxkcmVuOwogCX0KICNpZmRlZiBMSUJYTUxfUkVHRVhQX0VOQUJMRUQKQEAgLTM2MTMsNyArMzU1MCw3IEBACiAgICAgaWYgKHJlYWRlciA9PSBOVUxMKQogCXJldHVybigtMSk7CiAgICAgLyogVE9ETyBtYXliZSBsb29rdXAgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBmb3IgIiBmaXJzdCAqLwotICAgIHJldHVybigoaW50KSAnIicpOworICAgIHJldHVybignIicpOwogfQogCiAvKioKQEAgLTM5NzgsMTkgKzM5MTUsMTkgQEAKICNpZmRlZiBMSUJYTUxfU0NIRU1BU19FTkFCTEVECiBzdGF0aWMgY2hhciAqeG1sVGV4dFJlYWRlckJ1aWxkTWVzc2FnZShjb25zdCBjaGFyICptc2csIHZhX2xpc3QgYXApIExJQlhNTF9BVFRSX0ZPUk1BVCgxLDApOwogCi1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIHhtbFRleHRSZWFkZXJWYWxpZGl0eUVycm9yKHZvaWQgKmN0eHQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIAotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiB4bWxUZXh0UmVhZGVyVmFsaWRpdHlXYXJuaW5nKHZvaWQgKmN0eHQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIAotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiB4bWxUZXh0UmVhZGVyVmFsaWRpdHlFcnJvclJlbGF5KHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbXNnLCAuLi4pIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpOwogCi1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIHhtbFRleHRSZWFkZXJWYWxpZGl0eVdhcm5pbmdSZWxheSh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKTsKIAotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiB4bWxUZXh0UmVhZGVyVmFsaWRpdHlFcnJvclJlbGF5KHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbXNnLCAuLi4pCiB7CiAgICAgeG1sVGV4dFJlYWRlclB0ciByZWFkZXIgPSAoeG1sVGV4dFJlYWRlclB0cikgY3R4OwpAQCAtNDAxMyw3ICszOTUwLDcgQEAKICAgICB2YV9lbmQoYXApOwogfQogCi1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIHhtbFRleHRSZWFkZXJWYWxpZGl0eVdhcm5pbmdSZWxheSh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyID0gKHhtbFRleHRSZWFkZXJQdHIpIGN0eDsKQEAgLTQwMzcsMTAgKzM5NzQsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLSAgeG1sVGV4dFJlYWRlclN0cnVjdHVyZWRFcnJvcih2b2lkICpjdHh0LCB4bWxFcnJvclB0ciBlcnJvcik7Cit4bWxUZXh0UmVhZGVyU3RydWN0dXJlZEVycm9yKHZvaWQgKmN0eHQsIGNvbnN0IHhtbEVycm9yICplcnJvcik7CiAKIHN0YXRpYyB2b2lkCi14bWxUZXh0UmVhZGVyVmFsaWRpdHlTdHJ1Y3R1cmVkUmVsYXkodm9pZCAqdXNlckRhdGEsIHhtbEVycm9yUHRyIGVycm9yKQoreG1sVGV4dFJlYWRlclZhbGlkaXR5U3RydWN0dXJlZFJlbGF5KHZvaWQgKnVzZXJEYXRhLCBjb25zdCB4bWxFcnJvciAqZXJyb3IpCiB7CiAgICAgeG1sVGV4dFJlYWRlclB0ciByZWFkZXIgPSAoeG1sVGV4dFJlYWRlclB0cikgdXNlckRhdGE7CiAKQEAgLTQ3NzEsNyArNDcwOCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi14bWxUZXh0UmVhZGVyU3RydWN0dXJlZEVycm9yKHZvaWQgKmN0eHQsIHhtbEVycm9yUHRyIGVycm9yKQoreG1sVGV4dFJlYWRlclN0cnVjdHVyZWRFcnJvcih2b2lkICpjdHh0LCBjb25zdCB4bWxFcnJvciAqZXJyb3IpCiB7CiAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHggPSAoeG1sUGFyc2VyQ3R4dFB0cikgY3R4dDsKIApAQCAtNDc4Miw3ICs0NzE5LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIFhNTENERUNMIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpCitzdGF0aWMgdm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQogeG1sVGV4dFJlYWRlckVycm9yKHZvaWQgKmN0eHQsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICAgIHZhX2xpc3QgYXA7CkBAIC00Nzk1LDcgKzQ3MzIsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIFhNTENERUNMIExJQlhNTF9BVFRSX0ZPUk1BVCgyLDMpCitzdGF0aWMgdm9pZCBMSUJYTUxfQVRUUl9GT1JNQVQoMiwzKQogeG1sVGV4dFJlYWRlcldhcm5pbmcodm9pZCAqY3R4dCwgY29uc3QgY2hhciAqbXNnLCAuLi4pCiB7CiAgICAgdmFfbGlzdCBhcDsKQEAgLTQ4MDcsNyArNDc0NCw3IEBACiAgICAgdmFfZW5kKGFwKTsKIH0KIAotc3RhdGljIHZvaWQgWE1MQ0RFQ0wKK3N0YXRpYyB2b2lkCiB4bWxUZXh0UmVhZGVyVmFsaWRpdHlFcnJvcih2b2lkICpjdHh0LCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB2YV9saXN0IGFwOwpAQCAtNDgyNyw3ICs0NzY0LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIFhNTENERUNMCitzdGF0aWMgdm9pZAogeG1sVGV4dFJlYWRlclZhbGlkaXR5V2FybmluZyh2b2lkICpjdHh0LCBjb25zdCBjaGFyICptc2csIC4uLikKIHsKICAgICB2YV9saXN0IGFwOwpAQCAtNTIzNSw2ICs1MTcyLDE5IEBACiB9CiAKIC8qKgorICogeG1sVGV4dFJlYWRlclNldE1heEFtcGxpZmljYXRpb246CisgKiBAcmVhZGVyOiBhbiBYTUwgcmVhZGVyCisgKiBAbWF4QW1wbDogIG1heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3IKKyAqCisgKiBTZXQgdGhlIG1heGltdW0gYW1wbGlmaWNhdGlvbiBmYWN0b3IuIFNlZSB4bWxDdHh0U2V0TWF4QW1wbGlmaWNhdGlvbi4KKyAqLwordm9pZAoreG1sVGV4dFJlYWRlclNldE1heEFtcGxpZmljYXRpb24oeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsIHVuc2lnbmVkIG1heEFtcGwpCit7CisgICAgeG1sQ3R4dFNldE1heEFtcGxpZmljYXRpb24ocmVhZGVyLT5jdHh0LCBtYXhBbXBsKTsKK30KKworLyoqCiAgKiB4bWxUZXh0UmVhZGVyQnl0ZUNvbnN1bWVkOgogICogQHJlYWRlcjogYW4gWE1MIHJlYWRlcgogICoKQEAgLTUzNjEsOCArNTMxMSw3IEBACiAgICAgeG1sVGV4dFJlYWRlclB0ciByZWFkZXI7CiAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmOwogCi0gICAgYnVmID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMoYnVmZmVyLCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKyAgICBidWYgPSB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbShidWZmZXIsIHNpemUsIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIH0KQEAgLTU1ODgsNyArNTUzNyw3IEBACiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKC0xKTsKIAotICAgIGlucHV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMoYnVmZmVyLCBzaXplLAorICAgIGlucHV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0oYnVmZmVyLCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gKC0xKTsKZGlmZiAtLWdpdCBhL3htbHJlZ2V4cC5jIGIveG1scmVnZXhwLmMKaW5kZXggYTJhMzZjNC4uZjQzNGEwYyAxMDA2NDQKLS0tIGEveG1scmVnZXhwLmMKKysrIGIveG1scmVnZXhwLmMKQEAgLTE5LDggKzE5LDYgQEAKIAogI2lmZGVmIExJQlhNTF9SRUdFWFBfRU5BQkxFRAogCi0vKiAjZGVmaW5lIERFQlVHX0VSUiAqLwotCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTMxLDE3ICsyOSwyNSBAQAogI2luY2x1ZGUgPGxpYnhtbC94bWxhdXRvbWF0YS5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWx1bmljb2RlLmg+CiAKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9yZWdleHAuaCIKKwogI2lmbmRlZiBTSVpFX01BWAogI2RlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCiAjZW5kaWYKIAotLyogI2RlZmluZSBERUJVR19SRUdFWFBfR1JBUEggKi8KLS8qICNkZWZpbmUgREVCVUdfUkVHRVhQX0VYRUMgKi8KLS8qICNkZWZpbmUgREVCVUdfUFVTSCAqLwotLyogI2RlZmluZSBERUJVR19DT01QQUNUSU9OICovCi0KICNkZWZpbmUgTUFYX1BVU0ggMTAwMDAwMDAKIAorLyoKKyAqIC0yIGFuZCAtMyBhcmUgdXNlZCBieSB4bWxWYWxpZGF0ZUVsZW1lbnRUeXBlIGZvciBvdGhlciB0aGluZ3MuCisgKi8KKyNkZWZpbmUgWE1MX1JFR0VYUF9PSyAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgWE1MX1JFR0VYUF9OT1RfRk9VTkQgICAgICAgICgtMSkKKyNkZWZpbmUgWE1MX1JFR0VYUF9JTlRFUk5BTF9FUlJPUiAgICgtNCkKKyNkZWZpbmUgWE1MX1JFR0VYUF9PVVRfT0ZfTUVNT1JZICAgICgtNSkKKyNkZWZpbmUgWE1MX1JFR0VYUF9JTlRFUk5BTF9MSU1JVCAgICgtNikKKyNkZWZpbmUgWE1MX1JFR0VYUF9JTlZBTElEX1VURjggICAgICgtNykKKwogI2lmZGVmIEVSUk9SCiAjdW5kZWYgRVJST1IKICNlbmRpZgpAQCAtNTIsNyArNTgsNiBAQAogI2RlZmluZSBDVVIgKCooY3R4dC0+Y3VyKSkKICNkZWZpbmUgTlhUKGluZGV4KSAoY3R4dC0+Y3VyW2luZGV4XSkKIAotI2RlZmluZSBDVVJfU0NIQVIocywgbCkgeG1sU3RyaW5nQ3VycmVudENoYXIoTlVMTCwgcywgJmwpCiAjZGVmaW5lIE5FWFRMKGwpIGN0eHQtPmN1ciArPSBsOwogI2RlZmluZSBYTUxfUkVHX1NUUklOR19TRVBBUkFUT1IgJ3wnCiAvKgpAQCAtMzYxLDggKzM2Niw2IEBACiBzdGF0aWMgaW50IHhtbFJlZ0NoZWNrQ2hhcmFjdGVyUmFuZ2UoeG1sUmVnQXRvbVR5cGUgdHlwZSwgaW50IGNvZGVwb2ludCwKICAgICAgICAgICAgICAgICAgIGludCBuZWcsIGludCBzdGFydCwgaW50IGVuZCwgY29uc3QgeG1sQ2hhciAqYmxvY2tOYW1lKTsKIAotdm9pZCB4bWxBdXRvbWF0YVNldEZsYWdzKHhtbEF1dG9tYXRhUHRyIGFtLCBpbnQgZmxhZ3MpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJCQkJCSoKICAqCQlSZWdleHAgbWVtb3J5IGVycm9yIGhhbmRsZXIJCQkJKgpAQCAtNDM1LDcgKzQzOCw4IEBACiAgICAgdm9pZCAqcmV0OwogCiAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCi0gICAgaWYgKGRpbTEgPiBTSVpFX01BWCAvIGRpbTIgLyBlbGVtU2l6ZSkKKyAgICBpZiAoKGRpbTIgPT0gMCkgfHwgKGVsZW1TaXplID09IDApIHx8CisgICAgICAgIChkaW0xID4gU0laRV9NQVggLyBkaW0yIC8gZWxlbVNpemUpKQogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgIHRvdGFsU2l6ZSA9IGRpbTEgKiBkaW0yICogZWxlbVNpemU7CiAgICAgcmV0ID0geG1sTWFsbG9jKHRvdGFsU2l6ZSk7CkBAIC00NzIsNyArNDc2LDExIEBACiAgICAgcmV0LT5kZXRlcm1pbmlzdCA9IGN0eHQtPmRldGVybWluaXN0OwogICAgIHJldC0+ZmxhZ3MgPSBjdHh0LT5mbGFnczsKICAgICBpZiAocmV0LT5kZXRlcm1pbmlzdCA9PSAtMSkgewotICAgICAgICB4bWxSZWdleHBJc0RldGVybWluaXN0KHJldCk7CisgICAgICAgIGlmICh4bWxSZWdleHBJc0RldGVybWluaXN0KHJldCkgPCAwKSB7CisgICAgICAgICAgICB4bWxSZWdleHBFcnJNZW1vcnkoY3R4dCwgImNoZWNraW5nIGRldGVybWluaXNtIik7CisgICAgICAgICAgICB4bWxGcmVlKHJldCk7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoKHJldC0+ZGV0ZXJtaW5pc3QgIT0gMCkgJiYKQEAgLTUxMSw5ICs1MTksNiBAQAogCQlzdGF0ZVJlbWFwW2ldID0gLTE7CiAJICAgIH0KIAl9Ci0jaWZkZWYgREVCVUdfQ09NUEFDVElPTgotCXByaW50ZigiRmluYWw6ICVkIHN0YXRlc1xuIiwgbmJzdGF0ZXMpOwotI2VuZGlmCiAJc3RyaW5nTWFwID0geG1sTWFsbG9jKHJldC0+bmJBdG9tcyAqIHNpemVvZihjaGFyICopKTsKIAlpZiAoc3RyaW5nTWFwID09IE5VTEwpIHsKIAkgICAgeG1sUmVnZXhwRXJyTWVtb3J5KGN0eHQsICJjb21waWxpbmcgcmVnZXhwIik7CkBAIC01NjMsOSArNTY4LDYgQEAKIAkJcmV0dXJuKE5VTEwpOwogCSAgICB9CiAJfQotI2lmZGVmIERFQlVHX0NPTVBBQ1RJT04KLQlwcmludGYoIkZpbmFsOiAlZCBhdG9tc1xuIiwgbmJhdG9tcyk7Ci0jZW5kaWYKIAl0cmFuc2l0aW9ucyA9IChpbnQgKikgeG1sUmVnQ2FsbG9jMihuYnN0YXRlcyArIDEsIG5iYXRvbXMgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50KSk7CiAJaWYgKHRyYW5zaXRpb25zID09IE5VTEwpIHsKQEAgLTU5OCw3ICs2MDAsNyBAQAogCiAJICAgIGZvciAoaiA9IDA7aiA8IHN0YXRlLT5uYlRyYW5zO2orKykgewogCQl0cmFucyA9ICYoc3RhdGUtPnRyYW5zW2pdKTsKLQkJaWYgKCh0cmFucy0+dG8gPT0gLTEpIHx8ICh0cmFucy0+YXRvbSA9PSBOVUxMKSkKKwkJaWYgKCh0cmFucy0+dG8gPCAwKSB8fCAodHJhbnMtPmF0b20gPT0gTlVMTCkpCiAJCSAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBhdG9tbm8gPSBzdHJpbmdSZW1hcFt0cmFucy0+YXRvbS0+bm9dOwogCQlpZiAoKHRyYW5zLT5hdG9tLT5kYXRhICE9IE5VTEwpICYmICh0cmFuc2RhdGEgPT0gTlVMTCkpIHsKQEAgLTYxOSwxMSArNjIxLDYgQEAKIAkJaWYgKHByZXYgIT0gMCkgewogCQkgICAgaWYgKHByZXYgIT0gdGFyZ2V0bm8gKyAxKSB7CiAJCQlyZXQtPmRldGVybWluaXN0ID0gMDsKLSNpZmRlZiBERUJVR19DT01QQUNUSU9OCi0JCQlwcmludGYoIkluZGV0OiBzdGF0ZSAlZCB0cmFucyAlZCwgYXRvbSAlZCB0byAlZCA6ICVkIHRvICVkXG4iLAotCQkJICAgICAgIGksIGosIHRyYW5zLT5hdG9tLT5ubywgdHJhbnMtPnRvLCBhdG9tbm8sIHRhcmdldG5vKTsKLQkJCXByaW50ZigiICAgICAgIHByZXZpb3VzIHRvIGlzICVkXG4iLCBwcmV2KTsKLSNlbmRpZgogCQkJaWYgKHRyYW5zZGF0YSAhPSBOVUxMKQogCQkJICAgIHhtbEZyZWUodHJhbnNkYXRhKTsKIAkJCXhtbEZyZWUodHJhbnNpdGlvbnMpOwpAQCAtNjQ4LDE4ICs2NDUsNiBAQAogCSAgICB9CiAJfQogCXJldC0+ZGV0ZXJtaW5pc3QgPSAxOwotI2lmZGVmIERFQlVHX0NPTVBBQ1RJT04KLQkvKgotCSAqIERlYnVnCi0JICovCi0JZm9yIChpID0gMDtpIDwgbmJzdGF0ZXM7aSsrKSB7Ci0JICAgIGZvciAoaiA9IDA7aiA8IG5iYXRvbXMgKyAxO2orKykgewotICAgICAgICAgICAgICAgIHByaW50ZigiJTAyZCAiLCB0cmFuc2l0aW9uc1tpICogKG5iYXRvbXMgKyAxKSArIGpdKTsKLQkgICAgfQotCSAgICBwcmludGYoIlxuIik7Ci0JfQotCXByaW50ZigiXG4iKTsKLSNlbmRpZgogCS8qCiAJICogQ2xlYW51cCBvZiB0aGUgb2xkIGRhdGEKIAkgKi8KQEAgLTExODksNTUgKzExNzQsMTMgQEAKICAgICB9CiB9CiAKLSNpZmRlZiBERUJVR19SRUdFWFBfR1JBUEgKLXN0YXRpYyB2b2lkCi14bWxSZWdQcmludEN0eHQoRklMRSAqb3V0cHV0LCB4bWxSZWdQYXJzZXJDdHh0UHRyIGN0eHQpIHsKLSAgICBpbnQgaTsKLQotICAgIGZwcmludGYob3V0cHV0LCAiIGN0eHQ6ICIpOwotICAgIGlmIChjdHh0ID09IE5VTEwpIHsKLQlmcHJpbnRmKG91dHB1dCwgIk5VTExcbiIpOwotCXJldHVybjsKLSAgICB9Ci0gICAgZnByaW50ZihvdXRwdXQsICInJXMnICIsIGN0eHQtPnN0cmluZyk7Ci0gICAgaWYgKGN0eHQtPmVycm9yKQotCWZwcmludGYob3V0cHV0LCAiZXJyb3IgIik7Ci0gICAgaWYgKGN0eHQtPm5lZykKLQlmcHJpbnRmKG91dHB1dCwgIm5lZyAiKTsKLSAgICBmcHJpbnRmKG91dHB1dCwgIlxuIik7Ci0gICAgZnByaW50ZihvdXRwdXQsICIlZCBhdG9tczpcbiIsIGN0eHQtPm5iQXRvbXMpOwotICAgIGZvciAoaSA9IDA7aSA8IGN0eHQtPm5iQXRvbXM7IGkrKykgewotCWZwcmludGYob3V0cHV0LCAiICUwMmQgIiwgaSk7Ci0JeG1sUmVnUHJpbnRBdG9tKG91dHB1dCwgY3R4dC0+YXRvbXNbaV0pOwotICAgIH0KLSAgICBpZiAoY3R4dC0+YXRvbSAhPSBOVUxMKSB7Ci0JZnByaW50ZihvdXRwdXQsICJjdXJyZW50IGF0b206XG4iKTsKLQl4bWxSZWdQcmludEF0b20ob3V0cHV0LCBjdHh0LT5hdG9tKTsKLSAgICB9Ci0gICAgZnByaW50ZihvdXRwdXQsICIlZCBzdGF0ZXM6IiwgY3R4dC0+bmJTdGF0ZXMpOwotICAgIGlmIChjdHh0LT5zdGFydCAhPSBOVUxMKQotCWZwcmludGYob3V0cHV0LCAiIHN0YXJ0OiAlZCIsIGN0eHQtPnN0YXJ0LT5ubyk7Ci0gICAgaWYgKGN0eHQtPmVuZCAhPSBOVUxMKQotCWZwcmludGYob3V0cHV0LCAiIGVuZDogJWQiLCBjdHh0LT5lbmQtPm5vKTsKLSAgICBmcHJpbnRmKG91dHB1dCwgIlxuIik7Ci0gICAgZm9yIChpID0gMDtpIDwgY3R4dC0+bmJTdGF0ZXM7IGkrKykgewotCXhtbFJlZ1ByaW50U3RhdGUob3V0cHV0LCBjdHh0LT5zdGF0ZXNbaV0pOwotICAgIH0KLSAgICBmcHJpbnRmKG91dHB1dCwgIiVkIGNvdW50ZXJzOlxuIiwgY3R4dC0+bmJDb3VudGVycyk7Ci0gICAgZm9yIChpID0gMDtpIDwgY3R4dC0+bmJDb3VudGVyczsgaSsrKSB7Ci0JZnByaW50ZihvdXRwdXQsICIgJWQ6IG1pbiAlZCBtYXggJWRcbiIsIGksIGN0eHQtPmNvdW50ZXJzW2ldLm1pbiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHh0LT5jb3VudGVyc1tpXS5tYXgpOwotICAgIH0KLX0KLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJCQkJCSoKICAqCQkgRmluaXRlIEF1dG9tYXRhIHN0cnVjdHVyZXMgbWFuaXB1bGF0aW9ucwkJKgogICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZAorc3RhdGljIHhtbFJlZ1JhbmdlUHRyCiB4bWxSZWdBdG9tQWRkUmFuZ2UoeG1sUmVnUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxSZWdBdG9tUHRyIGF0b20sCiAJICAgICAgICAgICBpbnQgbmVnLCB4bWxSZWdBdG9tVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGludCBlbmQsCiAJCSAgIHhtbENoYXIgKmJsb2NrTmFtZSkgewpAQCAtMTI0NSwxMSArMTE4OCwxMSBAQAogCiAgICAgaWYgKGF0b20gPT0gTlVMTCkgewogCUVSUk9SKCJhZGQgcmFuZ2U6IGF0b20gaXMgTlVMTCIpOwotCXJldHVybjsKKwlyZXR1cm4oTlVMTCk7CiAgICAgfQogICAgIGlmIChhdG9tLT50eXBlICE9IFhNTF9SRUdFWFBfUkFOR0VTKSB7CiAJRVJST1IoImFkZCByYW5nZTogYXRvbSBpcyBub3QgcmFuZ2VzIik7Ci0JcmV0dXJuOworCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgaWYgKGF0b20tPm1heFJhbmdlcyA9PSAwKSB7CiAJYXRvbS0+bWF4UmFuZ2VzID0gNDsKQEAgLTEyNTgsNyArMTIwMSw3IEBACiAJaWYgKGF0b20tPnJhbmdlcyA9PSBOVUxMKSB7CiAJICAgIHhtbFJlZ2V4cEVyck1lbW9yeShjdHh0LCAiYWRkaW5nIHJhbmdlcyIpOwogCSAgICBhdG9tLT5tYXhSYW5nZXMgPSAwOwotCSAgICByZXR1cm47CisJICAgIHJldHVybihOVUxMKTsKIAl9CiAgICAgfSBlbHNlIGlmIChhdG9tLT5uYlJhbmdlcyA+PSBhdG9tLT5tYXhSYW5nZXMpIHsKIAl4bWxSZWdSYW5nZVB0ciAqdG1wOwpAQCAtMTI2OCwxNiArMTIxMSwxNyBAQAogCWlmICh0bXAgPT0gTlVMTCkgewogCSAgICB4bWxSZWdleHBFcnJNZW1vcnkoY3R4dCwgImFkZGluZyByYW5nZXMiKTsKIAkgICAgYXRvbS0+bWF4UmFuZ2VzIC89IDI7Ci0JICAgIHJldHVybjsKKwkgICAgcmV0dXJuKE5VTEwpOwogCX0KIAlhdG9tLT5yYW5nZXMgPSB0bXA7CiAgICAgfQogICAgIHJhbmdlID0geG1sUmVnTmV3UmFuZ2UoY3R4dCwgbmVnLCB0eXBlLCBzdGFydCwgZW5kKTsKICAgICBpZiAocmFuZ2UgPT0gTlVMTCkKLQlyZXR1cm47CisJcmV0dXJuKE5VTEwpOwogICAgIHJhbmdlLT5ibG9ja05hbWUgPSBibG9ja05hbWU7CiAgICAgYXRvbS0+cmFuZ2VzW2F0b20tPm5iUmFuZ2VzKytdID0gcmFuZ2U7CiAKKyAgICByZXR1cm4ocmFuZ2UpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMzE0LDI2ICsxMjU4LDE3IEBACiAJRVJST1IoImF0b20gcHVzaDogYXRvbSBpcyBOVUxMIik7CiAJcmV0dXJuKC0xKTsKICAgICB9Ci0gICAgaWYgKGN0eHQtPm1heEF0b21zID09IDApIHsKLQljdHh0LT5tYXhBdG9tcyA9IDQ7Ci0JY3R4dC0+YXRvbXMgPSAoeG1sUmVnQXRvbVB0ciAqKSB4bWxNYWxsb2MoY3R4dC0+bWF4QXRvbXMgKgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih4bWxSZWdBdG9tUHRyKSk7Ci0JaWYgKGN0eHQtPmF0b21zID09IE5VTEwpIHsKLQkgICAgeG1sUmVnZXhwRXJyTWVtb3J5KGN0eHQsICJwdXNoaW5nIGF0b20iKTsKLQkgICAgY3R4dC0+bWF4QXRvbXMgPSAwOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9IGVsc2UgaWYgKGN0eHQtPm5iQXRvbXMgPj0gY3R4dC0+bWF4QXRvbXMpIHsKKyAgICBpZiAoY3R4dC0+bmJBdG9tcyA+PSBjdHh0LT5tYXhBdG9tcykgeworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGN0eHQtPm1heEF0b21zID8gY3R4dC0+bWF4QXRvbXMgKiAyIDogNDsKIAl4bWxSZWdBdG9tUHRyICp0bXA7Ci0JY3R4dC0+bWF4QXRvbXMgKj0gMjsKLQl0bXAgPSAoeG1sUmVnQXRvbVB0ciAqKSB4bWxSZWFsbG9jKGN0eHQtPmF0b21zLCBjdHh0LT5tYXhBdG9tcyAqCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHhtbFJlZ0F0b21QdHIpKTsKKworCXRtcCA9IHhtbFJlYWxsb2MoY3R4dC0+YXRvbXMsIG5ld1NpemUgKiBzaXplb2YoeG1sUmVnQXRvbVB0cikpOwogCWlmICh0bXAgPT0gTlVMTCkgewogCSAgICB4bWxSZWdleHBFcnJNZW1vcnkoY3R4dCwgImFsbG9jYXRpbmcgY291bnRlciIpOwotCSAgICBjdHh0LT5tYXhBdG9tcyAvPSAyOwogCSAgICByZXR1cm4oLTEpOwogCX0KIAljdHh0LT5hdG9tcyA9IHRtcDsKKyAgICAgICAgY3R4dC0+bWF4QXRvbXMgPSBuZXdTaXplOwogICAgIH0KICAgICBhdG9tLT5ubyA9IGN0eHQtPm5iQXRvbXM7CiAgICAgY3R4dC0+YXRvbXNbY3R4dC0+bmJBdG9tcysrXSA9IGF0b207CkBAIC0xMzk1LDEwICsxMzMwLDYgQEAKIAkgICAgKHRyYW5zLT50byA9PSB0YXJnZXQtPm5vKSAmJgogCSAgICAodHJhbnMtPmNvdW50ZXIgPT0gY291bnRlcikgJiYKIAkgICAgKHRyYW5zLT5jb3VudCA9PSBjb3VudCkpIHsKLSNpZmRlZiBERUJVR19SRUdFWFBfR1JBUEgKLQkgICAgcHJpbnRmKCJJZ25vcmluZyBkdXBsaWNhdGUgdHJhbnNpdGlvbiBmcm9tICVkIHRvICVkXG4iLAotCQkgICAgc3RhdGUtPm5vLCB0YXJnZXQtPm5vKTsKLSNlbmRpZgogCSAgICByZXR1cm47CiAJfQogICAgIH0KQEAgLTE0MjQsMTkgKzEzNTUsNiBAQAogCX0KIAlzdGF0ZS0+dHJhbnMgPSB0bXA7CiAgICAgfQotI2lmZGVmIERFQlVHX1JFR0VYUF9HUkFQSAotICAgIHByaW50ZigiQWRkIHRyYW5zIGZyb20gJWQgdG8gJWQgIiwgc3RhdGUtPm5vLCB0YXJnZXQtPm5vKTsKLSAgICBpZiAoY291bnQgPT0gUkVHRVhQX0FMTF9DT1VOVEVSKQotCXByaW50ZigiYWxsIHRyYW5zaXRpb25cbiIpOwotICAgIGVsc2UgaWYgKGNvdW50ID49IDApCi0JcHJpbnRmKCJjb3VudCBiYXNlZCAlZFxuIiwgY291bnQpOwotICAgIGVsc2UgaWYgKGNvdW50ZXIgPj0gMCkKLQlwcmludGYoImNvdW50ZWQgJWRcbiIsIGNvdW50ZXIpOwotICAgIGVsc2UgaWYgKGF0b20gPT0gTlVMTCkKLQlwcmludGYoImVwc2lsb24gdHJhbnNpdGlvblxuIik7Ci0gICAgZWxzZSBpZiAoYXRvbSAhPSBOVUxMKQotICAgICAgICB4bWxSZWdQcmludEF0b20oc3Rkb3V0LCBhdG9tKTsKLSNlbmRpZgogCiAgICAgc3RhdGUtPnRyYW5zW3N0YXRlLT5uYlRyYW5zXS5hdG9tID0gYXRvbTsKICAgICBzdGF0ZS0+dHJhbnNbc3RhdGUtPm5iVHJhbnNdLnRvID0gdGFyZ2V0LT5ubzsKQEAgLTE0NDcsMzMgKzEzNjUsMzEgQEAKICAgICB4bWxSZWdTdGF0ZUFkZFRyYW5zVG8oY3R4dCwgdGFyZ2V0LCBzdGF0ZS0+bm8pOwogfQogCi1zdGF0aWMgaW50Ci14bWxSZWdTdGF0ZVB1c2goeG1sUmVnUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxSZWdTdGF0ZVB0ciBzdGF0ZSkgewotICAgIGlmIChzdGF0ZSA9PSBOVUxMKSByZXR1cm4oLTEpOwotICAgIGlmIChjdHh0LT5tYXhTdGF0ZXMgPT0gMCkgewotCWN0eHQtPm1heFN0YXRlcyA9IDQ7Ci0JY3R4dC0+c3RhdGVzID0gKHhtbFJlZ1N0YXRlUHRyICopIHhtbE1hbGxvYyhjdHh0LT5tYXhTdGF0ZXMgKgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih4bWxSZWdTdGF0ZVB0cikpOwotCWlmIChjdHh0LT5zdGF0ZXMgPT0gTlVMTCkgewotCSAgICB4bWxSZWdleHBFcnJNZW1vcnkoY3R4dCwgImFkZGluZyBzdGF0ZSIpOwotCSAgICBjdHh0LT5tYXhTdGF0ZXMgPSAwOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9IGVsc2UgaWYgKGN0eHQtPm5iU3RhdGVzID49IGN0eHQtPm1heFN0YXRlcykgeworc3RhdGljIHhtbFJlZ1N0YXRlUHRyCit4bWxSZWdTdGF0ZVB1c2goeG1sUmVnUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CisgICAgeG1sUmVnU3RhdGVQdHIgc3RhdGU7CisKKyAgICBpZiAoY3R4dC0+bmJTdGF0ZXMgPj0gY3R4dC0+bWF4U3RhdGVzKSB7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gY3R4dC0+bWF4U3RhdGVzID8gY3R4dC0+bWF4U3RhdGVzICogMiA6IDQ7CiAJeG1sUmVnU3RhdGVQdHIgKnRtcDsKLQljdHh0LT5tYXhTdGF0ZXMgKj0gMjsKLQl0bXAgPSAoeG1sUmVnU3RhdGVQdHIgKikgeG1sUmVhbGxvYyhjdHh0LT5zdGF0ZXMsIGN0eHQtPm1heFN0YXRlcyAqCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHhtbFJlZ1N0YXRlUHRyKSk7CisKKwl0bXAgPSB4bWxSZWFsbG9jKGN0eHQtPnN0YXRlcywgbmV3U2l6ZSAqIHNpemVvZih0bXBbMF0pKTsKIAlpZiAodG1wID09IE5VTEwpIHsKIAkgICAgeG1sUmVnZXhwRXJyTWVtb3J5KGN0eHQsICJhZGRpbmcgc3RhdGUiKTsKLQkgICAgY3R4dC0+bWF4U3RhdGVzIC89IDI7Ci0JICAgIHJldHVybigtMSk7CisJICAgIHJldHVybihOVUxMKTsKIAl9CiAJY3R4dC0+c3RhdGVzID0gdG1wOworCWN0eHQtPm1heFN0YXRlcyA9IG5ld1NpemU7CiAgICAgfQorCisgICAgc3RhdGUgPSB4bWxSZWdOZXdTdGF0ZShjdHh0KTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCiAgICAgc3RhdGUtPm5vID0gY3R4dC0+bmJTdGF0ZXM7CiAgICAgY3R4dC0+c3RhdGVzW2N0eHQtPm5iU3RhdGVzKytdID0gc3RhdGU7Ci0gICAgcmV0dXJuKDApOworCisgICAgcmV0dXJuKHN0YXRlKTsKIH0KIAogLyoqCkBAIC0xNDg0LDE5ICsxNDAwLDIxIEBACiAgKiBAbGF4OgogICoKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHhtbEZBR2VuZXJhdGVBbGxUcmFuc2l0aW9uKHhtbFJlZ1BhcnNlckN0eHRQdHIgY3R4dCwKIAkJCSAgIHhtbFJlZ1N0YXRlUHRyIGZyb20sIHhtbFJlZ1N0YXRlUHRyIHRvLAogCQkJICAgaW50IGxheCkgewogICAgIGlmICh0byA9PSBOVUxMKSB7Ci0JdG8gPSB4bWxSZWdOZXdTdGF0ZShjdHh0KTsKLQl4bWxSZWdTdGF0ZVB1c2goY3R4dCwgdG8pOworCXRvID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgICAgICBpZiAodG8gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CiAJY3R4dC0+c3RhdGUgPSB0bzsKICAgICB9CiAgICAgaWYgKGxheCkKIAl4bWxSZWdTdGF0ZUFkZFRyYW5zKGN0eHQsIGZyb20sIE5VTEwsIHRvLCAtMSwgUkVHRVhQX0FMTF9MQVhfQ09VTlRFUik7CiAgICAgZWxzZQogCXhtbFJlZ1N0YXRlQWRkVHJhbnMoY3R4dCwgZnJvbSwgTlVMTCwgdG8sIC0xLCBSRUdFWFBfQUxMX0NPVU5URVIpOworICAgIHJldHVybigwKTsKIH0KIAogLyoqCkBAIC0xNTA2LDE1ICsxNDI0LDE3IEBACiAgKiBAdG86ICB0aGUgdGFyZ2V0IHN0YXRlIG9yIE5VTEwgZm9yIGJ1aWxkaW5nIGEgbmV3IG9uZQogICoKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHhtbEZBR2VuZXJhdGVFcHNpbG9uVHJhbnNpdGlvbih4bWxSZWdQYXJzZXJDdHh0UHRyIGN0eHQsCiAJCQkgICAgICAgeG1sUmVnU3RhdGVQdHIgZnJvbSwgeG1sUmVnU3RhdGVQdHIgdG8pIHsKICAgICBpZiAodG8gPT0gTlVMTCkgewotCXRvID0geG1sUmVnTmV3U3RhdGUoY3R4dCk7Ci0JeG1sUmVnU3RhdGVQdXNoKGN0eHQsIHRvKTsKKwl0byA9IHhtbFJlZ1N0YXRlUHVzaChjdHh0KTsKKyAgICAgICAgaWYgKHRvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4oLTEpOwogCWN0eHQtPnN0YXRlID0gdG87CiAgICAgfQogICAgIHhtbFJlZ1N0YXRlQWRkVHJhbnMoY3R4dCwgZnJvbSwgTlVMTCwgdG8sIC0xLCAtMSk7CisgICAgcmV0dXJuKDApOwogfQogCiAvKioKQEAgLTE1MjUsMTUgKzE0NDUsMTcgQEAKICAqIGNvdW50ZXI6ICB0aGUgY291bnRlciBmb3IgdGhhdCB0cmFuc2l0aW9uCiAgKgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogeG1sRkFHZW5lcmF0ZUNvdW50ZWRFcHNpbG9uVHJhbnNpdGlvbih4bWxSZWdQYXJzZXJDdHh0UHRyIGN0eHQsCiAJICAgIHhtbFJlZ1N0YXRlUHRyIGZyb20sIHhtbFJlZ1N0YXRlUHRyIHRvLCBpbnQgY291bnRlcikgewogICAgIGlmICh0byA9PSBOVUxMKSB7Ci0JdG8gPSB4bWxSZWdOZXdTdGF0ZShjdHh0KTsKLQl4bWxSZWdTdGF0ZVB1c2goY3R4dCwgdG8pOworCXRvID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgICAgICBpZiAodG8gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CiAJY3R4dC0+c3RhdGUgPSB0bzsKICAgICB9CiAgICAgeG1sUmVnU3RhdGVBZGRUcmFucyhjdHh0LCBmcm9tLCBOVUxMLCB0bywgY291bnRlciwgLTEpOworICAgIHJldHVybigwKTsKIH0KIAogLyoqCkBAIC0xNTQ0LDE1ICsxNDY2LDE3IEBACiAgKiBjb3VudGVyOiAgdGhlIGNvdW50ZXIgZm9yIHRoYXQgdHJhbnNpdGlvbgogICoKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHhtbEZBR2VuZXJhdGVDb3VudGVkVHJhbnNpdGlvbih4bWxSZWdQYXJzZXJDdHh0UHRyIGN0eHQsCiAJICAgIHhtbFJlZ1N0YXRlUHRyIGZyb20sIHhtbFJlZ1N0YXRlUHRyIHRvLCBpbnQgY291bnRlcikgewogICAgIGlmICh0byA9PSBOVUxMKSB7Ci0JdG8gPSB4bWxSZWdOZXdTdGF0ZShjdHh0KTsKLQl4bWxSZWdTdGF0ZVB1c2goY3R4dCwgdG8pOworCXRvID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgICAgICBpZiAodG8gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CiAJY3R4dC0+c3RhdGUgPSB0bzsKICAgICB9CiAgICAgeG1sUmVnU3RhdGVBZGRUcmFucyhjdHh0LCBmcm9tLCBOVUxMLCB0bywgLTEsIGNvdW50ZXIpOworICAgIHJldHVybigwKTsKIH0KIAogLyoqCkBAIC0xNTc5LDkgKzE1MDMsNiBAQAogCSAqIHRoaXMgaXMgYSBzdWJleHByZXNzaW9uIGhhbmRsaW5nIG9uZSBzaG91bGQgbm90IG5lZWQgdG8KIAkgKiBjcmVhdGUgYSBuZXcgbm9kZSBleGNlcHQgZm9yIFhNTF9SRUdFWFBfUVVBTlRfUkFOR0UuCiAJICovCi0JaWYgKHhtbFJlZ0F0b21QdXNoKGN0eHQsIGF0b20pIDwgMCkgewotCSAgICByZXR1cm4oLTEpOwotCX0KIAlpZiAoKHRvICE9IE5VTEwpICYmIChhdG9tLT5zdG9wICE9IHRvKSAmJgogCSAgICAoYXRvbS0+cXVhbnQgIT0gWE1MX1JFR0VYUF9RVUFOVF9SQU5HRSkpIHsKIAkgICAgLyoKQEAgLTE1OTEsOCArMTUxMiw5IEBACiAjaWZkZWYgRFYKIAl9IGVsc2UgaWYgKCh0byA9PSBOVUxMKSAmJiAoYXRvbS0+cXVhbnQgIT0gWE1MX1JFR0VYUF9RVUFOVF9SQU5HRSkgJiYKIAkJICAgKGF0b20tPnF1YW50ICE9IFhNTF9SRUdFWFBfUVVBTlRfT05DRSkpIHsKLQkgICAgdG8gPSB4bWxSZWdOZXdTdGF0ZShjdHh0KTsKLQkgICAgeG1sUmVnU3RhdGVQdXNoKGN0eHQsIHRvKTsKKwkgICAgdG8gPSB4bWxSZWdTdGF0ZVB1c2goY3R4dCwgdG8pOworICAgICAgICAgICAgaWYgKHRvID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKIAkgICAgY3R4dC0+c3RhdGUgPSB0bzsKIAkgICAgeG1sRkFHZW5lcmF0ZUVwc2lsb25UcmFuc2l0aW9uKGN0eHQsIGF0b20tPnN0b3AsIHRvKTsKICNlbmRpZgpAQCAtMTYzMiw4ICsxNTU0LDkgQEAKIAkJaWYgKHRvICE9IE5VTEwpIHsKIAkJICAgIG5ld3N0YXRlID0gdG87CiAJCX0gZWxzZSB7Ci0JCSAgICBuZXdzdGF0ZSA9IHhtbFJlZ05ld1N0YXRlKGN0eHQpOwotCQkgICAgeG1sUmVnU3RhdGVQdXNoKGN0eHQsIG5ld3N0YXRlKTsKKwkJICAgIG5ld3N0YXRlID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAobmV3c3RhdGUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CiAJCX0KIAogCQkvKgpAQCAtMTY2MSwxMCArMTU4NCwxNCBAQAogCQkgICAgY29weS0+bWF4ID0gMDsKIAogCQkgICAgaWYgKHhtbEZBR2VuZXJhdGVUcmFuc2l0aW9ucyhjdHh0LCBhdG9tLT5zdGFydCwgTlVMTCwgY29weSkKLQkJICAgICAgICA8IDApCisJCSAgICAgICAgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4bWxSZWdGcmVlQXRvbShjb3B5KTsKIAkJCXJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICAgIH0KIAkJICAgIGludGVyID0gY3R4dC0+c3RhdGU7CiAJCSAgICBjb3VudGVyID0geG1sUmVnR2V0Q291bnRlcihjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKIAkJICAgIGN0eHQtPmNvdW50ZXJzW2NvdW50ZXJdLm1pbiA9IGF0b20tPm1pbiAtIDE7CiAJCSAgICBjdHh0LT5jb3VudGVyc1tjb3VudGVyXS5tYXggPSBhdG9tLT5tYXggLSAxOwogCQkgICAgLyogY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBzZWUgaXQgYWdhaW4gKi8KQEAgLTE2ODMsNiArMTYxMCw4IEBACiAJCSAgICAgKiBlcHNpbG9uIHRyYW5zaXRpb24uCiAJCSAgICAgKi8KIAkJICAgIGNvdW50ZXIgPSB4bWxSZWdHZXRDb3VudGVyKGN0eHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwogCQkgICAgY3R4dC0+Y291bnRlcnNbY291bnRlcl0ubWluID0gYXRvbS0+bWluIC0gMTsKIAkJICAgIGN0eHQtPmNvdW50ZXJzW2NvdW50ZXJdLm1heCA9IGF0b20tPm1heCAtIDE7CiAJCSAgICAvKiBhbGxvdyBhIHdheSBvdXQgYmFzZWQgb24gdGhlIGNvdW50ICovCkBAIC0xNzA1LDYgKzE2MzQsOCBAQAogCSAgICBkZWZhdWx0OgogCQlicmVhazsKIAl9CisJaWYgKHhtbFJlZ0F0b21QdXNoKGN0eHQsIGF0b20pIDwgMCkKKwkgICAgcmV0dXJuKC0xKTsKIAlyZXR1cm4oMCk7CiAgICAgfQogICAgIGlmICgoYXRvbS0+bWluID09IDApICYmIChhdG9tLT5tYXggPT0gMCkgJiYKQEAgLTE3MTMsMTIgKzE2NDQsOSBAQAogCSAqIHdlIGNhbiBkaXNjYXJkIHRoZSBhdG9tIGFuZCBnZW5lcmF0ZSBhbiBlcHNpbG9uIHRyYW5zaXRpb24gaW5zdGVhZAogCSAqLwogCWlmICh0byA9PSBOVUxMKSB7Ci0JICAgIHRvID0geG1sUmVnTmV3U3RhdGUoY3R4dCk7Ci0JICAgIGlmICh0byAhPSBOVUxMKQotCQl4bWxSZWdTdGF0ZVB1c2goY3R4dCwgdG8pOwotCSAgICBlbHNlIHsKKwkgICAgdG8gPSB4bWxSZWdTdGF0ZVB1c2goY3R4dCk7CisJICAgIGlmICh0byA9PSBOVUxMKQogCQlyZXR1cm4oLTEpOwotCSAgICB9CiAJfQogCXhtbEZBR2VuZXJhdGVFcHNpbG9uVHJhbnNpdGlvbihjdHh0LCBmcm9tLCB0byk7CiAJY3R4dC0+c3RhdGUgPSB0bzsKQEAgLTE3MjYsMTIgKzE2NTQsOSBAQAogCXJldHVybigwKTsKICAgICB9CiAgICAgaWYgKHRvID09IE5VTEwpIHsKLQl0byA9IHhtbFJlZ05ld1N0YXRlKGN0eHQpOwotCWlmICh0byAhPSBOVUxMKQotCSAgICB4bWxSZWdTdGF0ZVB1c2goY3R4dCwgdG8pOwotCWVsc2UgeworCXRvID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworCWlmICh0byA9PSBOVUxMKQogCSAgICByZXR1cm4oLTEpOwotCX0KICAgICB9CiAgICAgZW5kID0gdG87CiAgICAgaWYgKChhdG9tLT5xdWFudCA9PSBYTUxfUkVHRVhQX1FVQU5UX01VTFQpIHx8CkBAIC0xNzQzLDE4ICsxNjY4LDEyIEBACiAJICovCiAgICAgICAgIHhtbFJlZ1N0YXRlUHRyIHRtcDsKIAotCXRtcCA9IHhtbFJlZ05ld1N0YXRlKGN0eHQpOwotCWlmICh0bXAgIT0gTlVMTCkKLQkgICAgeG1sUmVnU3RhdGVQdXNoKGN0eHQsIHRtcCk7Ci0JZWxzZSB7CisJdG1wID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgICAgICBpZiAodG1wID09IE5VTEwpCiAJICAgIHJldHVybigtMSk7Ci0JfQogCXhtbEZBR2VuZXJhdGVFcHNpbG9uVHJhbnNpdGlvbihjdHh0LCB0bXAsIHRvKTsKIAl0byA9IHRtcDsKICAgICB9Ci0gICAgaWYgKHhtbFJlZ0F0b21QdXNoKGN0eHQsIGF0b20pIDwgMCkgewotCXJldHVybigtMSk7Ci0gICAgfQogICAgIGlmICgoYXRvbS0+cXVhbnQgPT0gWE1MX1JFR0VYUF9RVUFOVF9SQU5HRSkgJiYKICAgICAgICAgKGF0b20tPm1pbiA9PSAwKSAmJiAoYXRvbS0+bWF4ID4gMCkpIHsKIAludWxsYWJsZSA9IDE7CkBAIC0xNzg1LDYgKzE3MDQsOCBAQAogCWRlZmF1bHQ6CiAJICAgIGJyZWFrOwogICAgIH0KKyAgICBpZiAoeG1sUmVnQXRvbVB1c2goY3R4dCwgYXRvbSkgPCAwKQorCXJldHVybigtMSk7CiAgICAgcmV0dXJuKDApOwogfQogCkBAIC0xODAzLDkgKzE3MjQsNiBAQAogICAgIHhtbFJlZ1N0YXRlUHRyIGZyb207CiAgICAgeG1sUmVnU3RhdGVQdHIgdG87CiAKLSNpZmRlZiBERUJVR19SRUdFWFBfR1JBUEgKLSAgICBwcmludGYoInhtbEZBUmVkdWNlRXBzaWxvblRyYW5zaXRpb25zKCVkLCAlZClcbiIsIGZyb21uciwgdG9ucik7Ci0jZW5kaWYKICAgICBmcm9tID0gY3R4dC0+c3RhdGVzW2Zyb21ucl07CiAgICAgaWYgKGZyb20gPT0gTlVMTCkKIAlyZXR1cm47CkBAIC0xODE4LDU2ICsxNzM2LDY3IEBACiAKICAgICB0by0+bWFyayA9IFhNTF9SRUdFWFBfTUFSS19WSVNJVEVEOwogICAgIGlmICh0by0+dHlwZSA9PSBYTUxfUkVHRVhQX0ZJTkFMX1NUQVRFKSB7Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0dSQVBICi0JcHJpbnRmKCJTdGF0ZSAlZCBpcyBmaW5hbCwgc28gJWQgYmVjb21lcyBmaW5hbFxuIiwgdG9uciwgZnJvbW5yKTsKLSNlbmRpZgogCWZyb20tPnR5cGUgPSBYTUxfUkVHRVhQX0ZJTkFMX1NUQVRFOwogICAgIH0KICAgICBmb3IgKHRyYW5zbnIgPSAwO3RyYW5zbnIgPCB0by0+bmJUcmFuczt0cmFuc25yKyspIHsKLSAgICAgICAgaWYgKHRvLT50cmFuc1t0cmFuc25yXS50byA8IDApCisgICAgICAgIHhtbFJlZ1RyYW5zUHRyIHQxID0gJnRvLT50cmFuc1t0cmFuc25yXTsKKyAgICAgICAgaW50IHRjb3VudGVyOworCisgICAgICAgIGlmICh0MS0+dG8gPCAwKQogCSAgICBjb250aW51ZTsKLQlpZiAodG8tPnRyYW5zW3RyYW5zbnJdLmF0b20gPT0gTlVMTCkgeworICAgICAgICBpZiAodDEtPmNvdW50ZXIgPj0gMCkgeworICAgICAgICAgICAgLyogYXNzZXJ0KGNvdW50ZXIgPCAwKTsgKi8KKyAgICAgICAgICAgIHRjb3VudGVyID0gdDEtPmNvdW50ZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0Y291bnRlciA9IGNvdW50ZXI7CisgICAgICAgIH0KKwlpZiAodDEtPmF0b20gPT0gTlVMTCkgewogCSAgICAvKgogCSAgICAgKiBEb24ndCByZW1vdmUgY291bnRlZCB0cmFuc2l0aW9ucwogCSAgICAgKiBEb24ndCBsb29wIGVpdGhlcgogCSAgICAgKi8KLQkgICAgaWYgKHRvLT50cmFuc1t0cmFuc25yXS50byAhPSBmcm9tbnIpIHsKLQkJaWYgKHRvLT50cmFuc1t0cmFuc25yXS5jb3VudCA+PSAwKSB7Ci0JCSAgICBpbnQgbmV3dG8gPSB0by0+dHJhbnNbdHJhbnNucl0udG87Ci0KLQkJICAgIHhtbFJlZ1N0YXRlQWRkVHJhbnMoY3R4dCwgZnJvbSwgTlVMTCwKLQkJCQkJY3R4dC0+c3RhdGVzW25ld3RvXSwKLQkJCQkJLTEsIHRvLT50cmFuc1t0cmFuc25yXS5jb3VudCk7CisJICAgIGlmICh0MS0+dG8gIT0gZnJvbW5yKSB7CisJCWlmICh0MS0+Y291bnQgPj0gMCkgeworCQkgICAgeG1sUmVnU3RhdGVBZGRUcmFucyhjdHh0LCBmcm9tLCBOVUxMLCBjdHh0LT5zdGF0ZXNbdDEtPnRvXSwKKwkJCQkJLTEsIHQxLT5jb3VudCk7CiAJCX0gZWxzZSB7Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0dSQVBICi0JCSAgICBwcmludGYoIkZvdW5kIGVwc2lsb24gdHJhbnMgJWQgZnJvbSAlZCB0byAlZFxuIiwKLQkJCSAgIHRyYW5zbnIsIHRvbnIsIHRvLT50cmFuc1t0cmFuc25yXS50byk7Ci0jZW5kaWYKLQkJICAgIGlmICh0by0+dHJhbnNbdHJhbnNucl0uY291bnRlciA+PSAwKSB7Ci0JCQl4bWxGQVJlZHVjZUVwc2lsb25UcmFuc2l0aW9ucyhjdHh0LCBmcm9tbnIsCi0JCQkJCSAgICAgIHRvLT50cmFuc1t0cmFuc25yXS50bywKLQkJCQkJICAgICAgdG8tPnRyYW5zW3RyYW5zbnJdLmNvdW50ZXIpOwotCQkgICAgfSBlbHNlIHsKLQkJCXhtbEZBUmVkdWNlRXBzaWxvblRyYW5zaXRpb25zKGN0eHQsIGZyb21uciwKLQkJCQkJICAgICAgdG8tPnRyYW5zW3RyYW5zbnJdLnRvLAotCQkJCQkgICAgICBjb3VudGVyKTsKLQkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeG1sRkFSZWR1Y2VFcHNpbG9uVHJhbnNpdGlvbnMoY3R4dCwgZnJvbW5yLCB0MS0+dG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjb3VudGVyKTsKIAkJfQogCSAgICB9CiAJfSBlbHNlIHsKLQkgICAgaW50IG5ld3RvID0gdG8tPnRyYW5zW3RyYW5zbnJdLnRvOwotCi0JICAgIGlmICh0by0+dHJhbnNbdHJhbnNucl0uY291bnRlciA+PSAwKSB7Ci0JCXhtbFJlZ1N0YXRlQWRkVHJhbnMoY3R4dCwgZnJvbSwgdG8tPnRyYW5zW3RyYW5zbnJdLmF0b20sCi0JCQkJICAgIGN0eHQtPnN0YXRlc1tuZXd0b10sCi0JCQkJICAgIHRvLT50cmFuc1t0cmFuc25yXS5jb3VudGVyLCAtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXhtbFJlZ1N0YXRlQWRkVHJhbnMoY3R4dCwgZnJvbSwgdG8tPnRyYW5zW3RyYW5zbnJdLmF0b20sCi0JCQkJICAgIGN0eHQtPnN0YXRlc1tuZXd0b10sIGNvdW50ZXIsIC0xKTsKLQkgICAgfQorICAgICAgICAgICAgeG1sUmVnU3RhdGVBZGRUcmFucyhjdHh0LCBmcm9tLCB0MS0+YXRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC0+c3RhdGVzW3QxLT50b10sIHRjb3VudGVyLCAtMSk7CiAJfQogICAgIH0KK30KKworLyoqCisgKiB4bWxGQUZpbmlzaFJlZHVjZUVwc2lsb25UcmFuc2l0aW9uczoKKyAqIEBjdHh0OiAgYSByZWdleHAgcGFyc2VyIGNvbnRleHQKKyAqIEBmcm9tbnI6ICB0aGUgZnJvbSBzdGF0ZQorICogQHRvbnI6ICB0aGUgdG8gc3RhdGUKKyAqIEBjb3VudGVyOiAgc2hvdWxkIHRoYXQgdHJhbnNpdGlvbiBiZSBhc3NvY2lhdGVkIHRvIGEgY291bnRlZAorICoKKyAqLworc3RhdGljIHZvaWQKK3htbEZBRmluaXNoUmVkdWNlRXBzaWxvblRyYW5zaXRpb25zKHhtbFJlZ1BhcnNlckN0eHRQdHIgY3R4dCwgaW50IHRvbnIpIHsKKyAgICBpbnQgdHJhbnNucjsKKyAgICB4bWxSZWdTdGF0ZVB0ciB0bzsKKworICAgIHRvID0gY3R4dC0+c3RhdGVzW3RvbnJdOworICAgIGlmICh0byA9PSBOVUxMKQorCXJldHVybjsKKyAgICBpZiAoKHRvLT5tYXJrID09IFhNTF9SRUdFWFBfTUFSS19TVEFSVCkgfHwKKwkodG8tPm1hcmsgPT0gWE1MX1JFR0VYUF9NQVJLX05PUk1BTCkpCisJcmV0dXJuOworCiAgICAgdG8tPm1hcmsgPSBYTUxfUkVHRVhQX01BUktfTk9STUFMOworICAgIGZvciAodHJhbnNuciA9IDA7dHJhbnNuciA8IHRvLT5uYlRyYW5zO3RyYW5zbnIrKykgeworCXhtbFJlZ1RyYW5zUHRyIHQxID0gJnRvLT50cmFuc1t0cmFuc25yXTsKKwlpZiAoKHQxLT50byA+PSAwKSAmJiAodDEtPmF0b20gPT0gTlVMTCkpCisgICAgICAgICAgICB4bWxGQUZpbmlzaFJlZHVjZUVwc2lsb25UcmFuc2l0aW9ucyhjdHh0LCB0MS0+dG8pOworICAgIH0KIH0KIAogLyoqCkBAIC0xOTE0LDIzICsxODQzLDExIEBACiAJICAgIG5ld3RvID0gc3RhdGUtPnRyYW5zWzBdLnRvOwogCiAgICAgICAgICAgICBpZiAoc3RhdGUtPnR5cGUgPT0gWE1MX1JFR0VYUF9TVEFSVF9TVEFURSkgewotI2lmZGVmIERFQlVHX1JFR0VYUF9HUkFQSAotCQlwcmludGYoIkZvdW5kIHNpbXBsZSBlcHNpbG9uIHRyYW5zIGZyb20gc3RhcnQgJWQgdG8gJWRcbiIsCi0JCSAgICAgICBzdGF0ZW5yLCBuZXd0byk7Ci0jZW5kaWYKICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0dSQVBICi0JCXByaW50ZigiRm91bmQgc2ltcGxlIGVwc2lsb24gdHJhbnMgZnJvbSAlZCB0byAlZFxuIiwKLQkJICAgICAgIHN0YXRlbnIsIG5ld3RvKTsKLSNlbmRpZgogCSAgICAgICAgZm9yIChpID0gMDtpIDwgc3RhdGUtPm5iVHJhbnNUbztpKyspIHsKIAkJICAgIHRtcCA9IGN0eHQtPnN0YXRlc1tzdGF0ZS0+dHJhbnNUb1tpXV07CiAJCSAgICBmb3IgKGogPSAwO2ogPCB0bXAtPm5iVHJhbnM7aisrKSB7CiAJCQlpZiAodG1wLT50cmFuc1tqXS50byA9PSBzdGF0ZW5yKSB7Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0dSQVBICi0JCQkgICAgcHJpbnRmKCJDaGFuZ2VkIHRyYW5zaXRpb24gJWQgb24gJWQgdG8gZ28gdG8gJWRcbiIsCi0JCQkJICAgaiwgdG1wLT5ubywgbmV3dG8pOwotI2VuZGlmCiAJCQkgICAgdG1wLT50cmFuc1tqXS50byA9IC0xOwogCQkJICAgIHhtbFJlZ1N0YXRlQWRkVHJhbnMoY3R4dCwgdG1wLCB0bXAtPnRyYW5zW2pdLmF0b20sCiAJCQkJCQljdHh0LT5zdGF0ZXNbbmV3dG9dLApAQCAtMTk3Miw5ICsxODg5LDYgQEAKICAgICBmb3IgKHN0YXRlbnIgPSAwO3N0YXRlbnIgPCBjdHh0LT5uYlN0YXRlcztzdGF0ZW5yKyspIHsKIAlzdGF0ZSA9IGN0eHQtPnN0YXRlc1tzdGF0ZW5yXTsKIAlpZiAoKHN0YXRlICE9IE5VTEwpICYmIChzdGF0ZS0+dHlwZSA9PSBYTUxfUkVHRVhQX1VOUkVBQ0hfU1RBVEUpKSB7Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0dSQVBICi0JICAgIHByaW50ZigiUmVtb3ZlZCB1bnJlYWNoYWJsZSBzdGF0ZSAlZFxuIiwgc3RhdGVucik7Ci0jZW5kaWYKIAkgICAgeG1sUmVnRnJlZVN0YXRlKHN0YXRlKTsKIAkgICAgY3R4dC0+c3RhdGVzW3N0YXRlbnJdID0gTlVMTDsKIAl9CkBAIC0yMDAzLDI4ICsxOTE3LDE2IEBACiAJCShzdGF0ZS0+dHJhbnNbdHJhbnNucl0udG8gPj0gMCkpIHsKIAkJaWYgKHN0YXRlLT50cmFuc1t0cmFuc25yXS50byA9PSBzdGF0ZW5yKSB7CiAJCSAgICBzdGF0ZS0+dHJhbnNbdHJhbnNucl0udG8gPSAtMTsKLSNpZmRlZiBERUJVR19SRUdFWFBfR1JBUEgKLQkJICAgIHByaW50ZigiUmVtb3ZlZCBsb29wYmFjayBlcHNpbG9uIHRyYW5zICVkIG9uICVkXG4iLAotCQkJICAgdHJhbnNuciwgc3RhdGVucik7Ci0jZW5kaWYKIAkJfSBlbHNlIGlmIChzdGF0ZS0+dHJhbnNbdHJhbnNucl0uY291bnQgPCAwKSB7CiAJCSAgICBpbnQgbmV3dG8gPSBzdGF0ZS0+dHJhbnNbdHJhbnNucl0udG87CiAKLSNpZmRlZiBERUJVR19SRUdFWFBfR1JBUEgKLQkJICAgIHByaW50ZigiRm91bmQgZXBzaWxvbiB0cmFucyAlZCBmcm9tICVkIHRvICVkXG4iLAotCQkJICAgdHJhbnNuciwgc3RhdGVuciwgbmV3dG8pOwotI2VuZGlmCiAJCSAgICBoYXNfZXBzaWxvbiA9IDE7CiAJCSAgICBzdGF0ZS0+dHJhbnNbdHJhbnNucl0udG8gPSAtMjsKIAkJICAgIHN0YXRlLT5tYXJrID0gWE1MX1JFR0VYUF9NQVJLX1NUQVJUOwogCQkgICAgeG1sRkFSZWR1Y2VFcHNpbG9uVHJhbnNpdGlvbnMoY3R4dCwgc3RhdGVuciwKIAkJCQkgICAgICBuZXd0bywgc3RhdGUtPnRyYW5zW3RyYW5zbnJdLmNvdW50ZXIpOworCQkgICAgeG1sRkFGaW5pc2hSZWR1Y2VFcHNpbG9uVHJhbnNpdGlvbnMoY3R4dCwgbmV3dG8pOwogCQkgICAgc3RhdGUtPm1hcmsgPSBYTUxfUkVHRVhQX01BUktfTk9STUFMOwotI2lmZGVmIERFQlVHX1JFR0VYUF9HUkFQSAotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKCJGb3VuZCBjb3VudGVkIHRyYW5zaXRpb24gJWQgb24gJWRcbiIsCi0JCQkgICB0cmFuc25yLCBzdGF0ZW5yKTsKLSNlbmRpZgogCSAgICAgICAgfQogCSAgICB9CiAJfQpAQCAtMjA5OCw5ICsyMDAwLDYgQEAKICAgICBmb3IgKHN0YXRlbnIgPSAwO3N0YXRlbnIgPCBjdHh0LT5uYlN0YXRlcztzdGF0ZW5yKyspIHsKIAlzdGF0ZSA9IGN0eHQtPnN0YXRlc1tzdGF0ZW5yXTsKIAlpZiAoKHN0YXRlICE9IE5VTEwpICYmIChzdGF0ZS0+cmVhY2hlZCA9PSBYTUxfUkVHRVhQX01BUktfTk9STUFMKSkgewotI2lmZGVmIERFQlVHX1JFR0VYUF9HUkFQSAotCSAgICBwcmludGYoIlJlbW92ZWQgdW5yZWFjaGFibGUgc3RhdGUgJWRcbiIsIHN0YXRlbnIpOwotI2VuZGlmCiAJICAgIHhtbFJlZ0ZyZWVTdGF0ZShzdGF0ZSk7CiAJICAgIGN0eHQtPnN0YXRlc1tzdGF0ZW5yXSA9IE5VTEw7CiAJfQpAQCAtMjYyNiw3ICsyNTI1LDcgQEAKICAqLwogc3RhdGljIGludAogeG1sRkFSZWN1cnNlRGV0ZXJtaW5pc20oeG1sUmVnUGFyc2VyQ3R4dFB0ciBjdHh0LCB4bWxSZWdTdGF0ZVB0ciBzdGF0ZSwKLQkgICAgICAgICAgICAgICAgIGludCB0bywgeG1sUmVnQXRvbVB0ciBhdG9tKSB7CisJICAgICAgICAgICAgICAgIGludCBmcm9tbnIsIGludCB0b25yLCB4bWxSZWdBdG9tUHRyIGF0b20pIHsKICAgICBpbnQgcmV0ID0gMTsKICAgICBpbnQgcmVzOwogICAgIGludCB0cmFuc25yLCBuYlRyYW5zOwpAQCAtMjY1MSwyMiArMjU1MCwyMyBAQAogCS8qCiAJICogY2hlY2sgdHJhbnNpdGlvbnMgY29uZmxpY3Rpbmcgd2l0aCB0aGUgb25lIGxvb2tlZCBhdAogCSAqLworICAgICAgICBpZiAoKHQxLT50byA8IDApIHx8ICh0MS0+dG8gPT0gZnJvbW5yKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCWlmICh0MS0+YXRvbSA9PSBOVUxMKSB7Ci0JICAgIGlmICh0MS0+dG8gPCAwKQotCQljb250aW51ZTsKIAkgICAgc3RhdGUtPm1hcmtkID0gWE1MX1JFR0VYUF9NQVJLX1ZJU0lURUQ7CiAJICAgIHJlcyA9IHhtbEZBUmVjdXJzZURldGVybWluaXNtKGN0eHQsIGN0eHQtPnN0YXRlc1t0MS0+dG9dLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICB0bywgYXRvbSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbW5yLCB0b25yLCBhdG9tKTsKIAkgICAgaWYgKHJlcyA9PSAwKSB7CiAJICAgICAgICByZXQgPSAwOwogCQkvKiB0MS0+bmQgPSAxOyAqLwogCSAgICB9CiAJICAgIGNvbnRpbnVlOwogCX0KLQlpZiAodDEtPnRvICE9IHRvKQotCSAgICBjb250aW51ZTsKIAlpZiAoeG1sRkFDb21wYXJlQXRvbXModDEtPmF0b20sIGF0b20sIGRlZXApKSB7Ci0JICAgIHJldCA9IDA7CisgICAgICAgICAgICAvKiBUcmVhdCBlcXVhbCB0cmFuc2l0aW9ucyBhcyBkZXRlcm1pbmlzdGljLiAqLworICAgICAgICAgICAgaWYgKCh0MS0+dG8gIT0gdG9ucikgfHwKKyAgICAgICAgICAgICAgICAoIXhtbEZBRXF1YWxBdG9tcyh0MS0+YXRvbSwgYXRvbSwgZGVlcCkpKQorICAgICAgICAgICAgICAgIHJldCA9IDA7CiAJICAgIC8qIG1hcmsgdGhlIHRyYW5zaXRpb24gYXMgbm9uLWRldGVybWluaXN0aWMgKi8KIAkgICAgdDEtPm5kID0gMTsKIAl9CkBAIC0yNzE1LDEwICsyNjE1LDYgQEAKICAgICBpbnQgcmV0ID0gMTsKICAgICBpbnQgZGVlcCA9IDE7CiAKLSNpZmRlZiBERUJVR19SRUdFWFBfR1JBUEgKLSAgICBwcmludGYoInhtbEZBQ29tcHV0ZXNEZXRlcm1pbmlzbVxuIik7Ci0gICAgeG1sUmVnUHJpbnRDdHh0KHN0ZG91dCwgY3R4dCk7Ci0jZW5kaWYKICAgICBpZiAoY3R4dC0+ZGV0ZXJtaW5pc3QgIT0gLTEpCiAJcmV0dXJuKGN0eHQtPmRldGVybWluaXN0KTsKIApAQCAtMjc0NCwxMSArMjY0MCwxMSBAQAogCQkvKiB0MS0+bmQgPSAxOyAqLwogCQljb250aW51ZTsKIAkgICAgfQotCSAgICBpZiAodDEtPnRvID09IC0xKSAvKiBlbGltaW5hdGVkICovCisJICAgIGlmICh0MS0+dG8gPCAwKSAvKiBlbGltaW5hdGVkICovCiAJCWNvbnRpbnVlOwogCSAgICBmb3IgKGkgPSAwO2kgPCB0cmFuc25yO2krKykgewogCQl0MiA9ICYoc3RhdGUtPnRyYW5zW2ldKTsKLQkJaWYgKHQyLT50byA9PSAtMSkgLyogZWxpbWluYXRlZCAqLworCQlpZiAodDItPnRvIDwgMCkgLyogZWxpbWluYXRlZCAqLwogCQkgICAgY29udGludWU7CiAJCWlmICh0Mi0+YXRvbSAhPSBOVUxMKSB7CiAJCSAgICBpZiAodDEtPnRvID09IHQyLT50bykgewpAQCAtMjc4NiwxMSArMjY4MiwxMSBAQAogCSAgICBpZiAodDEtPmF0b20gPT0gTlVMTCkgewogCQljb250aW51ZTsKIAkgICAgfQotCSAgICBpZiAodDEtPnRvID09IC0xKSAvKiBlbGltaW5hdGVkICovCisJICAgIGlmICh0MS0+dG8gPCAwKSAvKiBlbGltaW5hdGVkICovCiAJCWNvbnRpbnVlOwogCSAgICBmb3IgKGkgPSAwO2kgPCB0cmFuc25yO2krKykgewogCQl0MiA9ICYoc3RhdGUtPnRyYW5zW2ldKTsKLQkJaWYgKHQyLT50byA9PSAtMSkgLyogZWxpbWluYXRlZCAqLworCQlpZiAodDItPnRvIDwgMCkgLyogZWxpbWluYXRlZCAqLwogCQkgICAgY29udGludWU7CiAJCWlmICh0Mi0+YXRvbSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC0yNzk4LDI5ICsyNjk0LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAqIGZpbmQgdHJhbnNpdGlvbnMgd2hpY2ggaW5kaWNhdGUgYSBjb25mbGljdAogICAgICAgICAgICAgICAgICAgICAgKi8KIAkJICAgIGlmICh4bWxGQUNvbXBhcmVBdG9tcyh0MS0+YXRvbSwgdDItPmF0b20sIDEpKSB7Ci0JCQlyZXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIFRyZWF0IGVxdWFsIGNvdW50ZXIgdHJhbnNpdGlvbnMgdGhhdCBjb3VsZG4ndCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICogZWxpbWluYXRlZCBhcyBkZXRlcm1pbmlzdGljLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQxLT50byAhPSB0Mi0+dG8pIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQxLT5jb3VudGVyID09IHQyLT5jb3VudGVyKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgheG1sRkFFcXVhbEF0b21zKHQxLT5hdG9tLCB0Mi0+YXRvbSwgZGVlcCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IDA7CiAJCQkvKiBtYXJrIHRoZSB0cmFuc2l0aW9ucyBhcyBub24tZGV0ZXJtaW5pc3RpYyBvbmVzICovCiAJCQl0MS0+bmQgPSAxOwogCQkJdDItPm5kID0gMTsKIAkJCWxhc3QgPSB0MTsKIAkJICAgIH0KLQkJfSBlbHNlIGlmICh0MS0+dG8gIT0gLTEpIHsKKwkJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKKwogCQkgICAgLyoKIAkJICAgICAqIGRvIHRoZSBjbG9zdXJlIGluIGNhc2Ugb2YgcmVtYWluaW5nIHNwZWNpZmljCiAJCSAgICAgKiBlcHNpbG9uIHRyYW5zaXRpb25zIGxpa2UgY2hvaWNlcyBvciBhbGwKIAkJICAgICAqLwotCQkgICAgcmV0ID0geG1sRkFSZWN1cnNlRGV0ZXJtaW5pc20oY3R4dCwgY3R4dC0+c3RhdGVzW3QxLT50b10sCi0JCQkJCQkgICB0Mi0+dG8sIHQyLT5hdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgeG1sRkFGaW5pc2hSZWN1cnNlRGV0ZXJtaW5pc20oY3R4dCwgY3R4dC0+c3RhdGVzW3QxLT50b10pOworCQkgICAgcmVzID0geG1sRkFSZWN1cnNlRGV0ZXJtaW5pc20oY3R4dCwgY3R4dC0+c3RhdGVzW3QyLT50b10sCisJCQkJCQkgIHN0YXRlbnIsIHQxLT50bywgdDEtPmF0b20pOworICAgICAgICAgICAgICAgICAgICB4bWxGQUZpbmlzaFJlY3Vyc2VEZXRlcm1pbmlzbShjdHh0LCBjdHh0LT5zdGF0ZXNbdDItPnRvXSk7CiAJCSAgICAvKiBkb24ndCBzaG9ydGN1dCB0aGUgY29tcHV0YXRpb24gc28gYWxsIG5vbiBkZXRlcm1pbmlzdGljCiAJCSAgICAgICB0cmFuc2l0aW9uIGdldCBtYXJrZWQgZG93bgogCQkgICAgaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuKDApOwogCQkgICAgICovCi0JCSAgICBpZiAocmV0ID09IDApIHsKKwkJICAgIGlmIChyZXMgPT0gMCkgewogCQkJdDEtPm5kID0gMTsKIAkJCS8qIHQyLT5uZCA9IDE7ICovCiAJCQlsYXN0ID0gdDE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOwogCQkgICAgfQogCQl9CiAJICAgIH0KQEAgLTMxMzksMzMgKzMwNDUsMTEgQEAKICAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi1zdGF0aWMgdm9pZAoteG1sRkFSZWdEZWJ1Z0V4ZWMoeG1sUmVnRXhlY0N0eHRQdHIgZXhlYykgewotICAgIHByaW50Zigic3RhdGU6ICVkOiVkOmlkeCAlZCIsIGV4ZWMtPnN0YXRlLT5ubywgZXhlYy0+dHJhbnNubywgZXhlYy0+aW5kZXgpOwotICAgIGlmIChleGVjLT5pbnB1dFN0YWNrICE9IE5VTEwpIHsKLQlpbnQgaTsKLQlwcmludGYoIjogIik7Ci0JZm9yIChpID0gMDsoaSA8IDMpICYmIChpIDwgZXhlYy0+aW5wdXRTdGFja05yKTtpKyspCi0JICAgIHByaW50ZigiJXMgIiwgKGNvbnN0IGNoYXIgKikKLQkgICAgICAgICAgIGV4ZWMtPmlucHV0U3RhY2tbZXhlYy0+aW5wdXRTdGFja05yIC0gKGkgKyAxKV0udmFsdWUpOwotICAgIH0gZWxzZSB7Ci0JcHJpbnRmKCI6ICVzIiwgJihleGVjLT5pbnB1dFN0cmluZ1tleGVjLT5pbmRleF0pKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkCiB4bWxGQVJlZ0V4ZWNTYXZlKHhtbFJlZ0V4ZWNDdHh0UHRyIGV4ZWMpIHsKLSNpZmRlZiBERUJVR19SRUdFWFBfRVhFQwotICAgIHByaW50Zigic2F2aW5nICIpOwotICAgIGV4ZWMtPnRyYW5zbm8rKzsKLSAgICB4bWxGQVJlZ0RlYnVnRXhlYyhleGVjKTsKLSAgICBleGVjLT50cmFuc25vLS07Ci0jZW5kaWYKICNpZmRlZiBNQVhfUFVTSAogICAgIGlmIChleGVjLT5uYlB1c2ggPiBNQVhfUFVTSCkgeworICAgICAgICBleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX0lOVEVSTkFMX0xJTUlUOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGV4ZWMtPm5iUHVzaCsrOwpAQCAtMzE3OCw2ICszMDYyLDcgQEAKIAlpZiAoZXhlYy0+cm9sbGJhY2tzID09IE5VTEwpIHsKIAkgICAgeG1sUmVnZXhwRXJyTWVtb3J5KE5VTEwsICJzYXZpbmcgcmVnZXhwIik7CiAJICAgIGV4ZWMtPm1heFJvbGxiYWNrcyA9IDA7CisgICAgICAgICAgICBleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX09VVF9PRl9NRU1PUlk7CiAJICAgIHJldHVybjsKIAl9CiAJbWVtc2V0KGV4ZWMtPnJvbGxiYWNrcywgMCwKQEAgLTMxOTIsNiArMzA3Nyw3IEBACiAJaWYgKHRtcCA9PSBOVUxMKSB7CiAJICAgIHhtbFJlZ2V4cEVyck1lbW9yeShOVUxMLCAic2F2aW5nIHJlZ2V4cCIpOwogCSAgICBleGVjLT5tYXhSb2xsYmFja3MgLz0gMjsKKyAgICAgICAgICAgIGV4ZWMtPnN0YXR1cyA9IFhNTF9SRUdFWFBfT1VUX09GX01FTU9SWTsKIAkgICAgcmV0dXJuOwogCX0KIAlleGVjLT5yb2xsYmFja3MgPSB0bXA7CkBAIC0zMjA3LDcgKzMwOTMsNyBAQAogCQl4bWxNYWxsb2MoZXhlYy0+Y29tcC0+bmJDb3VudGVycyAqIHNpemVvZihpbnQpKTsKIAkgICAgaWYgKGV4ZWMtPnJvbGxiYWNrc1tleGVjLT5uYlJvbGxiYWNrc10uY291bnRzID09IE5VTEwpIHsKIAkJeG1sUmVnZXhwRXJyTWVtb3J5KE5VTEwsICJzYXZpbmcgcmVnZXhwIik7Ci0JCWV4ZWMtPnN0YXR1cyA9IC01OworCQlleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX09VVF9PRl9NRU1PUlk7CiAJCXJldHVybjsKIAkgICAgfQogCX0KQEAgLTMyMTksMTEgKzMxMDUsMTAgQEAKIAogc3RhdGljIHZvaWQKIHhtbEZBUmVnRXhlY1JvbGxCYWNrKHhtbFJlZ0V4ZWNDdHh0UHRyIGV4ZWMpIHsKKyAgICBpZiAoZXhlYy0+c3RhdHVzICE9IFhNTF9SRUdFWFBfT0spCisgICAgICAgIHJldHVybjsKICAgICBpZiAoZXhlYy0+bmJSb2xsYmFja3MgPD0gMCkgewotCWV4ZWMtPnN0YXR1cyA9IC0xOwotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0JcHJpbnRmKCJyb2xsYmFjayBmYWlsZWQgb24gZW1wdHkgc3RhY2tcbiIpOwotI2VuZGlmCisJZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9OT1RfRk9VTkQ7CiAJcmV0dXJuOwogICAgIH0KICAgICBleGVjLT5uYlJvbGxiYWNrcy0tOwpAQCAtMzIzMyw3ICszMTE4LDcgQEAKICAgICBpZiAoZXhlYy0+Y29tcC0+bmJDb3VudGVycyA+IDApIHsKIAlpZiAoZXhlYy0+cm9sbGJhY2tzW2V4ZWMtPm5iUm9sbGJhY2tzXS5jb3VudHMgPT0gTlVMTCkgewogCSAgICBmcHJpbnRmKHN0ZGVyciwgImV4ZWMgc2F2ZTogYWxsb2NhdGlvbiBmYWlsZWQiKTsKLQkgICAgZXhlYy0+c3RhdHVzID0gLTY7CisJICAgIGV4ZWMtPnN0YXR1cyA9IFhNTF9SRUdFWFBfSU5URVJOQUxfRVJST1I7CiAJICAgIHJldHVybjsKIAl9CiAJaWYgKGV4ZWMtPmNvdW50cykgewpAQCAtMzI0MSwxMSArMzEyNiw2IEBACiAJICAgICAgIGV4ZWMtPmNvbXAtPm5iQ291bnRlcnMgKiBzaXplb2YoaW50KSk7CiAJfQogICAgIH0KLQotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0gICAgcHJpbnRmKCJyZXN0b3JlZCAiKTsKLSAgICB4bWxGQVJlZ0RlYnVnRXhlYyhleGVjKTsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMjY3LDcgKzMxNDcsNyBAQAogICAgIGV4ZWMtPm1heFJvbGxiYWNrcyA9IDA7CiAgICAgZXhlYy0+bmJSb2xsYmFja3MgPSAwOwogICAgIGV4ZWMtPnJvbGxiYWNrcyA9IE5VTEw7Ci0gICAgZXhlYy0+c3RhdHVzID0gMDsKKyAgICBleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX09LOwogICAgIGV4ZWMtPmNvbXAgPSBjb21wOwogICAgIGV4ZWMtPnN0YXRlID0gY29tcC0+c3RhdGVzWzBdOwogICAgIGV4ZWMtPnRyYW5zbm8gPSAwOwpAQCAtMzI3OCwxMiArMzE1OCwxMiBAQAogCWV4ZWMtPmNvdW50cyA9IChpbnQgKikgeG1sTWFsbG9jKGNvbXAtPm5iQ291bnRlcnMgKiBzaXplb2YoaW50KSk7CiAJaWYgKGV4ZWMtPmNvdW50cyA9PSBOVUxMKSB7CiAJICAgIHhtbFJlZ2V4cEVyck1lbW9yeShOVUxMLCAicnVubmluZyByZWdleHAiKTsKLQkgICAgcmV0dXJuKC0xKTsKKwkgICAgcmV0dXJuKFhNTF9SRUdFWFBfT1VUX09GX01FTU9SWSk7CiAJfQogICAgICAgICBtZW1zZXQoZXhlYy0+Y291bnRzLCAwLCBjb21wLT5uYkNvdW50ZXJzICogc2l6ZW9mKGludCkpOwogICAgIH0gZWxzZQogCWV4ZWMtPmNvdW50cyA9IE5VTEw7Ci0gICAgd2hpbGUgKChleGVjLT5zdGF0dXMgPT0gMCkgJiYgKGV4ZWMtPnN0YXRlICE9IE5VTEwpICYmCisgICAgd2hpbGUgKChleGVjLT5zdGF0dXMgPT0gWE1MX1JFR0VYUF9PSykgJiYgKGV4ZWMtPnN0YXRlICE9IE5VTEwpICYmCiAJICAgKChleGVjLT5pbnB1dFN0cmluZ1tleGVjLT5pbmRleF0gIT0gMCkgfHwKIAkgICAgKChleGVjLT5zdGF0ZSAhPSBOVUxMKSAmJgogCSAgICAgKGV4ZWMtPnN0YXRlLT50eXBlICE9IFhNTF9SRUdFWFBfRklOQUxfU1RBVEUpKSkpIHsKQEAgLTMzMjcsNyArMzIwNyw3IEBACiAJCXhtbFJlZ0NvdW50ZXJQdHIgY291bnRlcjsKIAogCQlpZiAoZXhlYy0+Y291bnRzID09IE5VTEwpIHsKLQkJICAgIGV4ZWMtPnN0YXR1cyA9IC0xOworCQkgICAgZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9JTlRFUk5BTF9FUlJPUjsKIAkJICAgIGdvdG8gZXJyb3I7CiAJCX0KIAkJLyoKQEAgLTMzMzYsMTkgKzMyMTYsMjEgQEAKIAogCQljb3VudCA9IGV4ZWMtPmNvdW50c1t0cmFucy0+Y291bnRdOwogCQljb3VudGVyID0gJmV4ZWMtPmNvbXAtPmNvdW50ZXJzW3RyYW5zLT5jb3VudF07Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0VYRUMKLQkJcHJpbnRmKCJ0ZXN0aW5nIGNvdW50ICVkOiB2YWwgJWQsIG1pbiAlZCwgbWF4ICVkXG4iLAotCQkgICAgICAgdHJhbnMtPmNvdW50LCBjb3VudCwgY291bnRlci0+bWluLCAgY291bnRlci0+bWF4KTsKLSNlbmRpZgogCQlyZXQgPSAoKGNvdW50ID49IGNvdW50ZXItPm1pbikgJiYgKGNvdW50IDw9IGNvdW50ZXItPm1heCkpOwogCQlpZiAoKHJldCkgJiYgKGNvdW50ZXItPm1pbiAhPSBjb3VudGVyLT5tYXgpKQogCQkgICAgZGV0ZXIgPSAwOwogCSAgICB9IGVsc2UgaWYgKGF0b20gPT0gTlVMTCkgewogCQlmcHJpbnRmKHN0ZGVyciwgImVwc2lsb24gdHJhbnNpdGlvbiBsZWZ0IGF0IHJ1bnRpbWVcbiIpOwotCQlleGVjLT5zdGF0dXMgPSAtMjsKKwkJZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9JTlRFUk5BTF9FUlJPUjsKIAkJYnJlYWs7CiAJICAgIH0gZWxzZSBpZiAoZXhlYy0+aW5wdXRTdHJpbmdbZXhlYy0+aW5kZXhdICE9IDApIHsKLSAgICAgICAgICAgICAgICBjb2RlcG9pbnQgPSBDVVJfU0NIQVIoJihleGVjLT5pbnB1dFN0cmluZ1tleGVjLT5pbmRleF0pLCBsZW4pOworICAgICAgICAgICAgICAgIGxlbiA9IDQ7CisgICAgICAgICAgICAgICAgY29kZXBvaW50ID0geG1sR2V0VVRGOENoYXIoJmV4ZWMtPmlucHV0U3RyaW5nW2V4ZWMtPmluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoY29kZXBvaW50IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX0lOVkFMSURfVVRGODsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CiAJCXJldCA9IHhtbFJlZ0NoZWNrQ2hhcmFjdGVyKGF0b20sIGNvZGVwb2ludCk7CiAJCWlmICgocmV0ID09IDEpICYmIChhdG9tLT5taW4gPj0gMCkgJiYgKGF0b20tPm1heCA+IDApKSB7CiAJCSAgICB4bWxSZWdTdGF0ZVB0ciB0byA9IGNvbXAtPnN0YXRlc1t0cmFucy0+dG9dOwpAQCAtMzM2NSw3ICszMjQ3LDcgQEAKIAkJCWlmICgoZXhlYy0+Y291bnRzID09IE5VTEwpIHx8CiAJCQkgICAgKGV4ZWMtPmNvbXAgPT0gTlVMTCkgfHwKIAkJCSAgICAoZXhlYy0+Y29tcC0+Y291bnRlcnMgPT0gTlVMTCkpIHsKLQkJCSAgICBleGVjLT5zdGF0dXMgPSAtMTsKKwkJCSAgICBleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX0lOVEVSTkFMX0VSUk9SOwogCQkJICAgIGdvdG8gZXJyb3I7CiAJCQl9CiAJCQljb3VudGVyID0gJmV4ZWMtPmNvbXAtPmNvdW50ZXJzW3RyYW5zLT5jb3VudGVyXTsKQEAgLTMzNzUsMTEgKzMyNTcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBiZWZvcmUgaW5jcmVtZW50aW5nICovCiAJCSAgICBpZiAoZXhlYy0+c3RhdGUtPm5iVHJhbnMgPiBleGVjLT50cmFuc25vICsgMSkgewogCQkJeG1sRkFSZWdFeGVjU2F2ZShleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5zdGF0dXMgIT0gWE1MX1JFR0VYUF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCQkgICAgfQogCQkgICAgaWYgKHRyYW5zLT5jb3VudGVyID49IDApIHsKLSNpZmRlZiBERUJVR19SRUdFWFBfRVhFQwotCQkJcHJpbnRmKCJJbmNyZWFzaW5nIGNvdW50ICVkXG4iLCB0cmFucy0+Y291bnRlcik7Ci0jZW5kaWYKIAkJCWV4ZWMtPmNvdW50c1t0cmFucy0+Y291bnRlcl0rKzsKIAkJICAgIH0KIAkJICAgIGV4ZWMtPnRyYW5zY291bnQgPSAxOwpAQCAtMzQwOCwxMSArMzI4OSwxOCBAQAogCQkJICAgIGV4ZWMtPnRyYW5zbm8gPSAtMTsgLyogdHJpY2sgKi8KIAkJCSAgICBleGVjLT5zdGF0ZSA9IHRvOwogCQkJICAgIHhtbEZBUmVnRXhlY1NhdmUoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPnN0YXR1cyAhPSBYTUxfUkVHRVhQX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCQkJICAgIGV4ZWMtPnRyYW5zbm8gPSB0cmFuc25vOwogCQkJICAgIGV4ZWMtPnN0YXRlID0gc3RhdGU7CiAJCQl9Ci0JCQljb2RlcG9pbnQgPSBDVVJfU0NIQVIoJihleGVjLT5pbnB1dFN0cmluZ1tleGVjLT5pbmRleF0pLAotCQkJCSAgICAgICAgICAgICAgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcG9pbnQgPSB4bWxHZXRVVEY4Q2hhcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4ZWMtPmlucHV0U3RyaW5nW2V4ZWMtPmluZGV4XSwgJmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZXBvaW50IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnN0YXR1cyA9IFhNTF9SRUdFWFBfSU5WQUxJRF9VVEY4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAJCQlyZXQgPSB4bWxSZWdDaGVja0NoYXJhY3RlcihhdG9tLCBjb2RlcG9pbnQpOwogCQkJZXhlYy0+dHJhbnNjb3VudCsrOwogCQkgICAgfSB3aGlsZSAocmV0ID09IDEpOwpAQCAtMzQzMCwxMiArMzMxOCw5IEBACiAJCSAgICB9CiAJCSAgICBpZiAodHJhbnMtPmNvdW50ZXIgPj0gMCkgewogCQkJaWYgKGV4ZWMtPmNvdW50cyA9PSBOVUxMKSB7Ci0JCQkgICAgZXhlYy0+c3RhdHVzID0gLTE7CisJCQkgICAgZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9JTlRFUk5BTF9FUlJPUjsKIAkJCSAgICBnb3RvIGVycm9yOwogCQkJfQotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0JCQlwcmludGYoIkRlY3JlYXNpbmcgY291bnQgJWRcbiIsIHRyYW5zLT5jb3VudGVyKTsKLSNlbmRpZgogCQkJZXhlYy0+Y291bnRzW3RyYW5zLT5jb3VudGVyXS0tOwogCQkgICAgfQogCQl9IGVsc2UgaWYgKChyZXQgPT0gMCkgJiYgKGF0b20tPm1pbiA9PSAwKSAmJiAoYXRvbS0+bWF4ID4gMCkpIHsKQEAgLTM0NTgsMTUgKzMzNDMsOSBAQAogCQlpZiAoKHRyYW5zLT5uZCA9PSAxKSB8fAogCQkgICAgKCh0cmFucy0+Y291bnQgPj0gMCkgJiYgKGRldGVyID09IDApICYmCiAJCSAgICAgKGV4ZWMtPnN0YXRlLT5uYlRyYW5zID4gZXhlYy0+dHJhbnNubyArIDEpKSkgewotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0JCSAgICBpZiAodHJhbnMtPm5kID09IDEpCi0JCSAgICAgICAgcHJpbnRmKCJTYXZpbmcgb24gbmQgdHJhbnNpdGlvbiBhdG9tICVkIGZvciAlYyBhdCAlZFxuIiwKLQkJCSAgICAgICB0cmFucy0+YXRvbS0+bm8sIGNvZGVwb2ludCwgZXhlYy0+aW5kZXgpOwotCQkgICAgZWxzZQotCQkgICAgICAgIHByaW50ZigiU2F2aW5nIG9uIGNvdW50ZWQgdHJhbnNpdGlvbiBjb3VudCAlZCBmb3IgJWMgYXQgJWRcbiIsCi0JCQkgICAgICAgdHJhbnMtPmNvdW50LCBjb2RlcG9pbnQsIGV4ZWMtPmluZGV4KTsKLSNlbmRpZgogCQkgICAgeG1sRkFSZWdFeGVjU2F2ZShleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPnN0YXR1cyAhPSBYTUxfUkVHRVhQX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAkJfQogCQlpZiAodHJhbnMtPmNvdW50ZXIgPj0gMCkgewogCQkgICAgeG1sUmVnQ291bnRlclB0ciBjb3VudGVyOwpAQCAtMzQ3NSwzMiArMzM1NCwyMiBAQAogCQkgICAgaWYgKChleGVjLT5jb3VudHMgPT0gTlVMTCkgfHwKIAkJCShleGVjLT5jb21wID09IE5VTEwpIHx8CiAJCQkoZXhlYy0+Y29tcC0+Y291bnRlcnMgPT0gTlVMTCkpIHsKLQkJCWV4ZWMtPnN0YXR1cyA9IC0xOworCQkJZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9JTlRFUk5BTF9FUlJPUjsKIAkJCWdvdG8gZXJyb3I7CiAJCSAgICB9CiAJCSAgICBjb3VudGVyID0gJmV4ZWMtPmNvbXAtPmNvdW50ZXJzW3RyYW5zLT5jb3VudGVyXTsKIAkJICAgIGlmIChleGVjLT5jb3VudHNbdHJhbnMtPmNvdW50ZXJdID49IGNvdW50ZXItPm1heCkKIAkJCWNvbnRpbnVlOyAvKiBmb3IgbG9vcCBvbiB0cmFuc2l0aW9ucyAqLwotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0JCSAgICBwcmludGYoIkluY3JlYXNpbmcgY291bnQgJWRcbiIsIHRyYW5zLT5jb3VudGVyKTsKLSNlbmRpZgogCQkgICAgZXhlYy0+Y291bnRzW3RyYW5zLT5jb3VudGVyXSsrOwogCQl9CiAJCWlmICgodHJhbnMtPmNvdW50ID49IDApICYmCiAJCSAgICAodHJhbnMtPmNvdW50IDwgUkVHRVhQX0FMTF9DT1VOVEVSKSkgewogCQkgICAgaWYgKGV4ZWMtPmNvdW50cyA9PSBOVUxMKSB7Ci0JCSAgICAgICAgZXhlYy0+c3RhdHVzID0gLTE7CisJCSAgICAgICAgZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9JTlRFUk5BTF9FUlJPUjsKIAkJCWdvdG8gZXJyb3I7CiAJCSAgICB9Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0VYRUMKLQkJICAgIHByaW50ZigicmVzZXR0aW5nIGNvdW50ICVkIG9uIHRyYW5zaXRpb25cbiIsCi0JCSAgICAgICAgICAgdHJhbnMtPmNvdW50KTsKLSNlbmRpZgogCQkgICAgZXhlYy0+Y291bnRzW3RyYW5zLT5jb3VudF0gPSAwOwogCQl9Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0VYRUMKLQkJcHJpbnRmKCJlbnRlcmluZyBzdGF0ZSAlZFxuIiwgdHJhbnMtPnRvKTsKLSNlbmRpZgogCQlleGVjLT5zdGF0ZSA9IGNvbXAtPnN0YXRlc1t0cmFucy0+dG9dOwogCQlleGVjLT50cmFuc25vID0gMDsKIAkJaWYgKHRyYW5zLT5hdG9tICE9IE5VTEwpIHsKQEAgLTM1MDgsNyArMzM3Nyw3IEBACiAJCX0KIAkJZ290byBwcm9ncmVzczsKIAkgICAgfSBlbHNlIGlmIChyZXQgPCAwKSB7Ci0JCWV4ZWMtPnN0YXR1cyA9IC00OworCQlleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX0lOVEVSTkFMX0VSUk9SOwogCQlicmVhazsKIAkgICAgfQogCX0KQEAgLTM1MTgsMTAgKzMzODcsNiBAQAogCSAgICAgKiBGYWlsZWQgdG8gZmluZCBhIHdheSBvdXQKIAkgICAgICovCiAJICAgIGV4ZWMtPmRldGVybWluaXN0ID0gMDsKLSNpZmRlZiBERUJVR19SRUdFWFBfRVhFQwotCSAgICBwcmludGYoInJvbGxiYWNrIGZyb20gc3RhdGUgJWQgb24gJWQ6JWNcbiIsIGV4ZWMtPnN0YXRlLT5ubywKLQkgICAgICAgICAgIGNvZGVwb2ludCxjb2RlcG9pbnQpOwotI2VuZGlmCiAJICAgIHhtbEZBUmVnRXhlY1JvbGxCYWNrKGV4ZWMpOwogCX0KIHByb2dyZXNzOgpAQCAtMzUzOSwxNiArMzQwNCwxMyBAQAogCXhtbEZyZWUoZXhlYy0+cm9sbGJhY2tzKTsKICAgICB9CiAgICAgaWYgKGV4ZWMtPnN0YXRlID09IE5VTEwpCi0gICAgICAgIHJldHVybigtMSk7CisgICAgICAgIHJldHVybihYTUxfUkVHRVhQX0lOVEVSTkFMX0VSUk9SKTsKICAgICBpZiAoZXhlYy0+Y291bnRzICE9IE5VTEwpCiAJeG1sRnJlZShleGVjLT5jb3VudHMpOwotICAgIGlmIChleGVjLT5zdGF0dXMgPT0gMCkKKyAgICBpZiAoZXhlYy0+c3RhdHVzID09IFhNTF9SRUdFWFBfT0spCiAJcmV0dXJuKDEpOwotICAgIGlmIChleGVjLT5zdGF0dXMgPT0gLTEpIHsKLQlpZiAoZXhlYy0+bmJQdXNoID4gTUFYX1BVU0gpCi0JICAgIHJldHVybigtMSk7CisgICAgaWYgKGV4ZWMtPnN0YXR1cyA9PSBYTUxfUkVHRVhQX05PVF9GT1VORCkKIAlyZXR1cm4oMCk7Ci0gICAgfQogICAgIHJldHVybihleGVjLT5zdGF0dXMpOwogfQogCkBAIC0zNTU3LDkgKzM0MTksNiBAQAogICoJUHJvZ3Jlc3NpdmUgaW50ZXJmYWNlIHRvIHRoZSB2ZXJpZmllciBvbmUgYXRvbSBhdCBhIHRpbWUJKgogICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIERFQlVHX0VSUgotc3RhdGljIHZvaWQgdGVzdGVycih4bWxSZWdFeGVjQ3R4dFB0ciBleGVjKTsKLSNlbmRpZgogCiAvKioKICAqIHhtbFJlZ05ld0V4ZWNDdHh0OgpAQCAtMzU5Miw3ICszNDUxLDcgQEAKICAgICBleGVjLT5tYXhSb2xsYmFja3MgPSAwOwogICAgIGV4ZWMtPm5iUm9sbGJhY2tzID0gMDsKICAgICBleGVjLT5yb2xsYmFja3MgPSBOVUxMOwotICAgIGV4ZWMtPnN0YXR1cyA9IDA7CisgICAgZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9PSzsKICAgICBleGVjLT5jb21wID0gY29tcDsKICAgICBpZiAoY29tcC0+Y29tcGFjdCA9PSBOVUxMKQogCWV4ZWMtPnN0YXRlID0gY29tcC0+c3RhdGVzWzBdOwpAQCAtMzY2Nyw5ICszNTI2LDYgQEAKIHN0YXRpYyB2b2lkCiB4bWxGQVJlZ0V4ZWNTYXZlSW5wdXRTdHJpbmcoeG1sUmVnRXhlY0N0eHRQdHIgZXhlYywgY29uc3QgeG1sQ2hhciAqdmFsdWUsCiAJICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKSB7Ci0jaWZkZWYgREVCVUdfUFVTSAotICAgIHByaW50Zigic2F2aW5nIHZhbHVlOiAlZDolc1xuIiwgZXhlYy0+aW5wdXRTdGFja05yLCB2YWx1ZSk7Ci0jZW5kaWYKICAgICBpZiAoZXhlYy0+aW5wdXRTdGFja01heCA9PSAwKSB7CiAJZXhlYy0+aW5wdXRTdGFja01heCA9IDQ7CiAJZXhlYy0+aW5wdXRTdGFjayA9ICh4bWxSZWdJbnB1dFRva2VuUHRyKQpAQCAtMzc4MiwxMCArMzYzOCw2IEBACiAJcmV0dXJuKDApOwogICAgIH0KIAotI2lmZGVmIERFQlVHX1BVU0gKLSAgICBwcmludGYoInZhbHVlIHB1c2hlZDogJXNcbiIsIHZhbHVlKTsKLSNlbmRpZgotCiAgICAgLyoKICAgICAgKiBFeGFtaW5lIGFsbCBvdXRzaWRlIHRyYW5zaXRpb25zIGZyb20gY3VycmVudCBzdGF0ZQogICAgICAqLwpAQCAtMzc5OSw5ICszNjUxLDYgQEAKIAkJICAgIGV4ZWMtPmNhbGxiYWNrKGV4ZWMtPmRhdGEsIHZhbHVlLAogCQkJICBjb21wLT50cmFuc2RhdGFbc3RhdGUgKiBjb21wLT5uYnN0cmluZ3MgKyBpXSwgZGF0YSk7CiAJCX0KLSNpZmRlZiBERUJVR19QVVNICi0JCXByaW50ZigiZW50ZXJpbmcgc3RhdGUgJWRcbiIsIHRhcmdldCk7Ci0jZW5kaWYKIAkJaWYgKGNvbXAtPmNvbXBhY3RbdGFyZ2V0ICogKGNvbXAtPm5ic3RyaW5ncyArIDEpXSA9PQogCQkgICAgWE1MX1JFR0VYUF9TSU5LX1NUQVRFKQogCQkgICAgZ290byBlcnJvcjsKQEAgLTM4MTcsMTkgKzM2NjYsMTMgQEAKICAgICAgKiBGYWlsZWQgdG8gZmluZCBhbiBleGl0IHRyYW5zaXRpb24gb3V0IGZyb20gY3VycmVudCBzdGF0ZSBmb3IgdGhlCiAgICAgICogY3VycmVudCB0b2tlbgogICAgICAqLwotI2lmZGVmIERFQlVHX1BVU0gKLSAgICBwcmludGYoImZhaWxlZCB0byBmaW5kIGEgdHJhbnNpdGlvbiBmb3IgJXMgb24gc3RhdGUgJWRcbiIsIHZhbHVlLCBzdGF0ZSk7Ci0jZW5kaWYKIGVycm9yOgogICAgIGlmIChleGVjLT5lcnJTdHJpbmcgIT0gTlVMTCkKICAgICAgICAgeG1sRnJlZShleGVjLT5lcnJTdHJpbmcpOwogICAgIGV4ZWMtPmVyclN0cmluZyA9IHhtbFN0cmR1cCh2YWx1ZSk7CiAgICAgZXhlYy0+ZXJyU3RhdGVObyA9IHN0YXRlOwotICAgIGV4ZWMtPnN0YXR1cyA9IC0xOwotI2lmZGVmIERFQlVHX0VSUgotICAgIHRlc3RlcnIoZXhlYyk7Ci0jZW5kaWYKLSAgICByZXR1cm4oLTEpOworICAgIGV4ZWMtPnN0YXR1cyA9IFhNTF9SRUdFWFBfTk9UX0ZPVU5EOworICAgIHJldHVybihYTUxfUkVHRVhQX05PVF9GT1VORCk7CiB9CiAKIC8qKgpAQCAtMzg1Nyw3ICszNzAwLDcgQEAKIAlyZXR1cm4oLTEpOwogICAgIGlmIChleGVjLT5jb21wID09IE5VTEwpCiAJcmV0dXJuKC0xKTsKLSAgICBpZiAoZXhlYy0+c3RhdHVzICE9IDApCisgICAgaWYgKGV4ZWMtPnN0YXR1cyAhPSBYTUxfUkVHRVhQX09LKQogCXJldHVybihleGVjLT5zdGF0dXMpOwogCiAgICAgaWYgKGV4ZWMtPmNvbXAtPmNvbXBhY3QgIT0gTlVMTCkKQEAgLTM4NjksOSArMzcxMiw2IEBACiAJZmluYWwgPSAxOwogICAgIH0KIAotI2lmZGVmIERFQlVHX1BVU0gKLSAgICBwcmludGYoInZhbHVlIHB1c2hlZDogJXNcbiIsIHZhbHVlKTsKLSNlbmRpZgogICAgIC8qCiAgICAgICogSWYgd2UgaGF2ZSBhbiBhY3RpdmUgcm9sbGJhY2sgc3RhY2sgcHVzaCB0aGUgbmV3IHZhbHVlIHRoZXJlCiAgICAgICogYW5kIGdldCBiYWNrIHRvIHdoZXJlIHdlIHdlcmUgbGVmdApAQCAtMzg4MCwxMiArMzcyMCw5IEBACiAJeG1sRkFSZWdFeGVjU2F2ZUlucHV0U3RyaW5nKGV4ZWMsIHZhbHVlLCBkYXRhKTsKIAl2YWx1ZSA9IGV4ZWMtPmlucHV0U3RhY2tbZXhlYy0+aW5kZXhdLnZhbHVlOwogCWRhdGEgPSBleGVjLT5pbnB1dFN0YWNrW2V4ZWMtPmluZGV4XS5kYXRhOwotI2lmZGVmIERFQlVHX1BVU0gKLQlwcmludGYoInZhbHVlIGxvYWRlZDogJXNcbiIsIHZhbHVlKTsKLSNlbmRpZgogICAgIH0KIAotICAgIHdoaWxlICgoZXhlYy0+c3RhdHVzID09IDApICYmCisgICAgd2hpbGUgKChleGVjLT5zdGF0dXMgPT0gWE1MX1JFR0VYUF9PSykgJiYKIAkgICAoKHZhbHVlICE9IE5VTEwpIHx8CiAJICAgICgoZmluYWwgPT0gMSkgJiYKIAkgICAgIChleGVjLT5zdGF0ZS0+dHlwZSAhPSBYTUxfUkVHRVhQX0ZJTkFMX1NUQVRFKSkpKSB7CkBAIC0zOTEzLDkgKzM3NTAsNiBAQAogCiAJCXJldCA9IDA7CiAKLSNpZmRlZiBERUJVR19QVVNICi0JCXByaW50ZigidGVzdGluZyBhbGwgbGF4ICVkXG4iLCB0cmFucy0+Y291bnQpOwotI2VuZGlmCiAJCS8qCiAJCSAqIENoZWNrIGFsbCBjb3VudGVkIHRyYW5zaXRpb25zIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUKIAkJICovCkBAIC0zOTUxLDkgKzM3ODUsNiBAQAogCiAJCXJldCA9IDE7CiAKLSNpZmRlZiBERUJVR19QVVNICi0JCXByaW50ZigidGVzdGluZyBhbGwgJWRcbiIsIHRyYW5zLT5jb3VudCk7Ci0jZW5kaWYKIAkJLyoKIAkJICogQ2hlY2sgYWxsIGNvdW50ZWQgdHJhbnNpdGlvbnMgZnJvbSB0aGUgY3VycmVudCBzdGF0ZQogCQkgKi8KQEAgLTM5NzgsMTQgKzM4MDksMTAgQEAKIAogCQljb3VudCA9IGV4ZWMtPmNvdW50c1t0cmFucy0+Y291bnRdOwogCQljb3VudGVyID0gJmV4ZWMtPmNvbXAtPmNvdW50ZXJzW3RyYW5zLT5jb3VudF07Ci0jaWZkZWYgREVCVUdfUFVTSAotCQlwcmludGYoInRlc3RpbmcgY291bnQgJWQ6IHZhbCAlZCwgbWluICVkLCBtYXggJWRcbiIsCi0JCSAgICAgICB0cmFucy0+Y291bnQsIGNvdW50LCBjb3VudGVyLT5taW4sICBjb3VudGVyLT5tYXgpOwotI2VuZGlmCiAJCXJldCA9ICgoY291bnQgPj0gY291bnRlci0+bWluKSAmJiAoY291bnQgPD0gY291bnRlci0+bWF4KSk7CiAJICAgIH0gZWxzZSBpZiAoYXRvbSA9PSBOVUxMKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiZXBzaWxvbiB0cmFuc2l0aW9uIGxlZnQgYXQgcnVudGltZVxuIik7Ci0JCWV4ZWMtPnN0YXR1cyA9IC0yOworCQlleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX0lOVEVSTkFMX0VSUk9SOwogCQlicmVhazsKIAkgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBOVUxMKSB7CiAJCXJldCA9IHhtbFJlZ1N0ckVxdWFsV2lsZGNhcmQoYXRvbS0+dmFsdWVwLCB2YWx1ZSk7CkBAIC00MDI3LDkgKzM4NTQsNiBAQAogCQkJZXhlYy0+aW5kZXgrKzsKIAkJCXZhbHVlID0gZXhlYy0+aW5wdXRTdGFja1tleGVjLT5pbmRleF0udmFsdWU7CiAJCQlkYXRhID0gZXhlYy0+aW5wdXRTdGFja1tleGVjLT5pbmRleF0uZGF0YTsKLSNpZmRlZiBERUJVR19QVVNICi0JCQlwcmludGYoInZhbHVlIGxvYWRlZDogJXNcbiIsIHZhbHVlKTsKLSNlbmRpZgogCiAJCQkvKgogCQkJICogRW5kIG9mIGlucHV0OiBzdG9wIGhlcmUKQEAgLTQwODQsMjIgKzM5MDgsMTIgQEAKIAkJICAgIHhtbEZBUmVnRXhlY1NhdmUoZXhlYyk7CiAJCX0KIAkJaWYgKHRyYW5zLT5jb3VudGVyID49IDApIHsKLSNpZmRlZiBERUJVR19QVVNICi0JCSAgICBwcmludGYoIkluY3JlYXNpbmcgY291bnQgJWRcbiIsIHRyYW5zLT5jb3VudGVyKTsKLSNlbmRpZgogCQkgICAgZXhlYy0+Y291bnRzW3RyYW5zLT5jb3VudGVyXSsrOwogCQl9CiAJCWlmICgodHJhbnMtPmNvdW50ID49IDApICYmCiAJCSAgICAodHJhbnMtPmNvdW50IDwgUkVHRVhQX0FMTF9DT1VOVEVSKSkgewotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0JCSAgICBwcmludGYoInJlc2V0dGluZyBjb3VudCAlZCBvbiB0cmFuc2l0aW9uXG4iLAotCQkgICAgICAgICAgIHRyYW5zLT5jb3VudCk7Ci0jZW5kaWYKIAkJICAgIGV4ZWMtPmNvdW50c1t0cmFucy0+Y291bnRdID0gMDsKIAkJfQotI2lmZGVmIERFQlVHX1BVU0gKLQkJcHJpbnRmKCJlbnRlcmluZyBzdGF0ZSAlZFxuIiwgdHJhbnMtPnRvKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIGlmICgoZXhlYy0+Y29tcC0+c3RhdGVzW3RyYW5zLT50b10gIT0gTlVMTCkgJiYKIAkJICAgIChleGVjLT5jb21wLT5zdGF0ZXNbdHJhbnMtPnRvXS0+dHlwZSA9PQogCQkgICAgIFhNTF9SRUdFWFBfU0lOS19TVEFURSkpIHsKQEAgLTQxMjIsMjcgKzM5MzYsMTggQEAKIAkJCWlmIChleGVjLT5pbmRleCA8IGV4ZWMtPmlucHV0U3RhY2tOcikgewogCQkJICAgIHZhbHVlID0gZXhlYy0+aW5wdXRTdGFja1tleGVjLT5pbmRleF0udmFsdWU7CiAJCQkgICAgZGF0YSA9IGV4ZWMtPmlucHV0U3RhY2tbZXhlYy0+aW5kZXhdLmRhdGE7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkJICAgIHByaW50ZigidmFsdWUgbG9hZGVkOiAlc1xuIiwgdmFsdWUpOwotI2VuZGlmCiAJCQl9IGVsc2UgewogCQkJICAgIHZhbHVlID0gTlVMTDsKIAkJCSAgICBkYXRhID0gTlVMTDsKLSNpZmRlZiBERUJVR19QVVNICi0JCQkgICAgcHJpbnRmKCJlbmQgb2YgaW5wdXRcbiIpOwotI2VuZGlmCiAJCQl9CiAJCSAgICB9IGVsc2UgewogCQkJdmFsdWUgPSBOVUxMOwogCQkJZGF0YSA9IE5VTEw7Ci0jaWZkZWYgREVCVUdfUFVTSAotCQkJcHJpbnRmKCJlbmQgb2YgaW5wdXRcbiIpOwotI2VuZGlmCiAJCSAgICB9CiAJCX0KIAkJZ290byBwcm9ncmVzczsKIAkgICAgfSBlbHNlIGlmIChyZXQgPCAwKSB7Ci0JCWV4ZWMtPnN0YXR1cyA9IC00OworCQlleGVjLT5zdGF0dXMgPSBYTUxfUkVHRVhQX0lOVEVSTkFMX0VSUk9SOwogCQlicmVhazsKIAkgICAgfQogCX0KQEAgLTQxNjksMTIgKzM5NzQsMTAgQEAKIAkgICAgICovCiAJICAgIGV4ZWMtPmRldGVybWluaXN0ID0gMDsKIAkgICAgeG1sRkFSZWdFeGVjUm9sbEJhY2soZXhlYyk7Ci0JICAgIGlmICgoZXhlYy0+aW5wdXRTdGFjayAhPSBOVUxMICkgJiYgKGV4ZWMtPnN0YXR1cyA9PSAwKSkgeworCSAgICBpZiAoKGV4ZWMtPmlucHV0U3RhY2sgIT0gTlVMTCApICYmCisgICAgICAgICAgICAgICAgKGV4ZWMtPnN0YXR1cyA9PSBYTUxfUkVHRVhQX09LKSkgewogCQl2YWx1ZSA9IGV4ZWMtPmlucHV0U3RhY2tbZXhlYy0+aW5kZXhdLnZhbHVlOwogCQlkYXRhID0gZXhlYy0+aW5wdXRTdGFja1tleGVjLT5pbmRleF0uZGF0YTsKLSNpZmRlZiBERUJVR19QVVNICi0JCXByaW50ZigidmFsdWUgbG9hZGVkOiAlc1xuIiwgdmFsdWUpOwotI2VuZGlmCiAJICAgIH0KIAl9CiAJY29udGludWU7CkBAIC00MTgyLDE0ICszOTg1LDkgQEAKICAgICAgICAgcHJvZ3Jlc3MgPSAxOwogCWNvbnRpbnVlOwogICAgIH0KLSAgICBpZiAoZXhlYy0+c3RhdHVzID09IDApIHsKKyAgICBpZiAoZXhlYy0+c3RhdHVzID09IFhNTF9SRUdFWFBfT0spIHsKICAgICAgICAgcmV0dXJuKGV4ZWMtPnN0YXRlLT50eXBlID09IFhNTF9SRUdFWFBfRklOQUxfU1RBVEUpOwogICAgIH0KLSNpZmRlZiBERUJVR19FUlIKLSAgICBpZiAoZXhlYy0+c3RhdHVzIDwgMCkgewotCXRlc3RlcnIoZXhlYyk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuKGV4ZWMtPnN0YXR1cyk7CiB9CiAKQEAgLTQyMzMsNyArNDAzMSw3IEBACiAJcmV0dXJuKC0xKTsKICAgICBpZiAoZXhlYy0+Y29tcCA9PSBOVUxMKQogCXJldHVybigtMSk7Ci0gICAgaWYgKGV4ZWMtPnN0YXR1cyAhPSAwKQorICAgIGlmIChleGVjLT5zdGF0dXMgIT0gWE1MX1JFR0VYUF9PSykKIAlyZXR1cm4oZXhlYy0+c3RhdHVzKTsKIAogICAgIGlmICh2YWx1ZTIgPT0gTlVMTCkKQEAgLTQyNDUsNyArNDA0Myw3IEBACiAgICAgaWYgKDE1MCA8IGxlbm4gKyBsZW5wICsgMikgewogCXN0ciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhsZW5uICsgbGVucCArIDIpOwogCWlmIChzdHIgPT0gTlVMTCkgewotCSAgICBleGVjLT5zdGF0dXMgPSAtMTsKKwkgICAgZXhlYy0+c3RhdHVzID0gWE1MX1JFR0VYUF9PVVRfT0ZfTUVNT1JZOwogCSAgICByZXR1cm4oLTEpOwogCX0KICAgICB9IGVsc2UgewpAQCAtNDQ3NCw3ICs0MjcyLDcgQEAKICAgICBpZiAoZXhlYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIGlmIChzdHJpbmcgIT0gTlVMTCkgewotICAgICAgICBpZiAoZXhlYy0+c3RhdHVzICE9IDApCisgICAgICAgIGlmIChleGVjLT5zdGF0dXMgIT0gWE1MX1JFR0VYUF9PSykKIAkgICAgKnN0cmluZyA9IGV4ZWMtPmVyclN0cmluZzsKIAllbHNlCiAJICAgICpzdHJpbmcgPSBOVUxMOwpAQCAtNDQ4MiwxNyArNDI4MCw2IEBACiAgICAgcmV0dXJuKHhtbFJlZ0V4ZWNHZXRWYWx1ZXMoZXhlYywgMSwgbmJ2YWwsIG5ibmVnLCB2YWx1ZXMsIHRlcm1pbmFsKSk7CiB9CiAKLSNpZmRlZiBERUJVR19FUlIKLXN0YXRpYyB2b2lkIHRlc3RlcnIoeG1sUmVnRXhlY0N0eHRQdHIgZXhlYykgewotICAgIGNvbnN0IHhtbENoYXIgKnN0cmluZzsKLSAgICB4bWxDaGFyICp2YWx1ZXNbNV07Ci0gICAgaW50IG5iID0gNTsKLSAgICBpbnQgbmJuZWc7Ci0gICAgaW50IHRlcm1pbmFsOwotICAgIHhtbFJlZ0V4ZWNFcnJJbmZvKGV4ZWMsICZzdHJpbmcsICZuYiwgJm5ibmVnLCAmdmFsdWVzWzBdLCAmdGVybWluYWwpOwotfQotI2VuZGlmCi0KICNpZiAwCiBzdGF0aWMgaW50CiB4bWxSZWdFeGVjUHVzaENoYXIoeG1sUmVnRXhlY0N0eHRQdHIgZXhlYywgaW50IFVDUykgewpAQCAtNDUwMywxMCArNDI5MCwxMCBAQAogCiAgICAgaWYgKGV4ZWMgPT0gTlVMTCkKIAlyZXR1cm4oLTEpOwotICAgIGlmIChleGVjLT5zdGF0dXMgIT0gMCkKKyAgICBpZiAoZXhlYy0+c3RhdHVzICE9IFhNTF9SRUdFWFBfT0spCiAJcmV0dXJuKGV4ZWMtPnN0YXR1cyk7CiAKLSAgICB3aGlsZSAoKGV4ZWMtPnN0YXR1cyA9PSAwKSAmJgorICAgIHdoaWxlICgoZXhlYy0+c3RhdHVzID09IFhNTF9SRUdFWFBfT0spICYmCiAJICAgKChleGVjLT5pbnB1dFN0cmluZ1tleGVjLT5pbmRleF0gIT0gMCkgfHwKIAkgICAgKGV4ZWMtPnN0YXRlLT50eXBlICE9IFhNTF9SRUdFWFBfRklOQUxfU1RBVEUpKSkgewogCkBAIC00NTM1LDE0ICs0MzIyLDEwIEBACiAKIAkJY291bnQgPSBleGVjLT5jb3VudHNbdHJhbnMtPmNvdW50XTsKIAkJY291bnRlciA9ICZleGVjLT5jb21wLT5jb3VudGVyc1t0cmFucy0+Y291bnRdOwotI2lmZGVmIERFQlVHX1JFR0VYUF9FWEVDCi0JCXByaW50ZigidGVzdGluZyBjb3VudCAlZDogdmFsICVkLCBtaW4gJWQsIG1heCAlZFxuIiwKLQkJICAgICAgIHRyYW5zLT5jb3VudCwgY291bnQsIGNvdW50ZXItPm1pbiwgIGNvdW50ZXItPm1heCk7Ci0jZW5kaWYKIAkJcmV0ID0gKChjb3VudCA+PSBjb3VudGVyLT5taW4pICYmIChjb3VudCA8PSBjb3VudGVyLT5tYXgpKTsKIAkgICAgfSBlbHNlIGlmIChhdG9tID09IE5VTEwpIHsKIAkJZnByaW50ZihzdGRlcnIsICJlcHNpbG9uIHRyYW5zaXRpb24gbGVmdCBhdCBydW50aW1lXG4iKTsKLQkJZXhlYy0+c3RhdHVzID0gLTI7CisJCWV4ZWMtPnN0YXR1cyA9IFhNTF9SRUdFWFBfSU5URVJOQUxfRVJST1I7CiAJCWJyZWFrOwogCSAgICB9IGVsc2UgaWYgKGV4ZWMtPmlucHV0U3RyaW5nW2V4ZWMtPmluZGV4XSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgY29kZXBvaW50ID0gQ1VSX1NDSEFSKCYoZXhlYy0+aW5wdXRTdHJpbmdbZXhlYy0+aW5kZXhdKSwgbGVuKTsKQEAgLTQ2MTIsMjAgKzQzOTUsMTEgQEAKIAkJICogcmVzdGFydCBjb3VudCBmb3IgZXhwcmVzc2lvbnMgbGlrZSB0aGlzICgoYWJjKXsyfSkqCiAJCSAqLwogCQlpZiAodHJhbnMtPmNvdW50ID49IDApIHsKLSNpZmRlZiBERUJVR19SRUdFWFBfRVhFQwotCQkgICAgcHJpbnRmKCJSZXNldCBjb3VudCAlZFxuIiwgdHJhbnMtPmNvdW50KTsKLSNlbmRpZgogCQkgICAgZXhlYy0+Y291bnRzW3RyYW5zLT5jb3VudF0gPSAwOwogCQl9CiAJCWlmICh0cmFucy0+Y291bnRlciA+PSAwKSB7Ci0jaWZkZWYgREVCVUdfUkVHRVhQX0VYRUMKLQkJICAgIHByaW50ZigiSW5jcmVhc2luZyBjb3VudCAlZFxuIiwgdHJhbnMtPmNvdW50ZXIpOwotI2VuZGlmCiAJCSAgICBleGVjLT5jb3VudHNbdHJhbnMtPmNvdW50ZXJdKys7CiAJCX0KLSNpZmRlZiBERUJVR19SRUdFWFBfRVhFQwotCQlwcmludGYoImVudGVyaW5nIHN0YXRlICVkXG4iLCB0cmFucy0+dG8pOwotI2VuZGlmCiAJCWV4ZWMtPnN0YXRlID0gZXhlYy0+Y29tcC0+c3RhdGVzW3RyYW5zLT50b107CiAJCWV4ZWMtPnRyYW5zbm8gPSAwOwogCQlpZiAodHJhbnMtPmF0b20gIT0gTlVMTCkgewpAQCAtNDYzMyw3ICs0NDA3LDcgQEAKIAkJfQogCQlnb3RvIHByb2dyZXNzOwogCSAgICB9IGVsc2UgaWYgKHJldCA8IDApIHsKLQkJZXhlYy0+c3RhdHVzID0gLTQ7CisJCWV4ZWMtPnN0YXR1cyA9IFhNTF9SRUdFWFBfSU5URVJOQUxfRVJST1I7CiAJCWJyZWFrOwogCSAgICB9CiAJfQpAQCAtNDY2OCw3ICs0NDQyLDEyIEBACiAgICAgaW50IGN1cjsKICAgICBpbnQgbGVuOwogCi0gICAgY3VyID0gQ1VSX1NDSEFSKGN0eHQtPmN1ciwgbGVuKTsKKyAgICBsZW4gPSA0OworICAgIGN1ciA9IHhtbEdldFVURjhDaGFyKGN0eHQtPmN1ciwgJmxlbik7CisgICAgaWYgKGN1ciA8IDApIHsKKyAgICAgICAgRVJST1IoIkludmFsaWQgVVRGLTgiKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KICAgICBpZiAoKGN1ciA9PSAnLicpIHx8IChjdXIgPT0gJ1xcJykgfHwgKGN1ciA9PSAnPycpIHx8CiAJKGN1ciA9PSAnKicpIHx8IChjdXIgPT0gJysnKSB8fCAoY3VyID09ICcoJykgfHwKIAkoY3VyID09ICcpJykgfHwgKGN1ciA9PSAnfCcpIHx8IChjdXIgPT0gMHg1QikgfHwKQEAgLTQ4OTIsMTEgKzQ2NzEsMTYgQEAKICAgICB9CiAgICAgaWYgKGN0eHQtPmF0b20gPT0gTlVMTCkgewogCWN0eHQtPmF0b20gPSB4bWxSZWdOZXdBdG9tKGN0eHQsIHR5cGUpOwotCWlmIChjdHh0LT5hdG9tICE9IE5VTEwpCi0JICAgIGN0eHQtPmF0b20tPnZhbHVlcCA9IGJsb2NrTmFtZTsKKyAgICAgICAgaWYgKGN0eHQtPmF0b20gPT0gTlVMTCkgeworICAgICAgICAgICAgeG1sRnJlZShibG9ja05hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJY3R4dC0+YXRvbS0+dmFsdWVwID0gYmxvY2tOYW1lOwogICAgIH0gZWxzZSBpZiAoY3R4dC0+YXRvbS0+dHlwZSA9PSBYTUxfUkVHRVhQX1JBTkdFUykgewotICAgICAgICB4bWxSZWdBdG9tQWRkUmFuZ2UoY3R4dCwgY3R4dC0+YXRvbSwgY3R4dC0+bmVnLAotCQkgICAgICAgICAgIHR5cGUsIDAsIDAsIGJsb2NrTmFtZSk7CisgICAgICAgIGlmICh4bWxSZWdBdG9tQWRkUmFuZ2UoY3R4dCwgY3R4dC0+YXRvbSwgY3R4dC0+bmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIDAsIDAsIGJsb2NrTmFtZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgeG1sRnJlZShibG9ja05hbWUpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC01MTUxLDcgKzQ5MzUsMTIgQEAKIAllbmQgPSBzdGFydDsKICAgICAgICAgbGVuID0gMTsKICAgICB9IGVsc2UgaWYgKChjdXIgIT0gMHg1QikgJiYgKGN1ciAhPSAweDVEKSkgewotICAgICAgICBlbmQgPSBzdGFydCA9IENVUl9TQ0hBUihjdHh0LT5jdXIsIGxlbik7CisgICAgICAgIGxlbiA9IDQ7CisgICAgICAgIGVuZCA9IHN0YXJ0ID0geG1sR2V0VVRGOENoYXIoY3R4dC0+Y3VyLCAmbGVuKTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgRVJST1IoIkludmFsaWQgVVRGLTgiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAJRVJST1IoIkV4cGVjdGluZyBhIGNoYXIgcmFuZ2UiKTsKIAlyZXR1cm47CkBAIC01MTkwLDcgKzQ5NzksMTIgQEAKIAl9CiAgICAgICAgIGxlbiA9IDE7CiAgICAgfSBlbHNlIGlmICgoY3VyICE9ICdcMCcpICYmIChjdXIgIT0gMHg1QikgJiYgKGN1ciAhPSAweDVEKSkgewotICAgICAgICBlbmQgPSBDVVJfU0NIQVIoY3R4dC0+Y3VyLCBsZW4pOworICAgICAgICBsZW4gPSA0OworICAgICAgICBlbmQgPSB4bWxHZXRVVEY4Q2hhcihjdHh0LT5jdXIsICZsZW4pOworICAgICAgICBpZiAoZW5kIDwgMCkgeworICAgICAgICAgICAgRVJST1IoIkludmFsaWQgVVRGLTgiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAJRVJST1IoIkV4cGVjdGluZyB0aGUgZW5kIG9mIGEgY2hhciByYW5nZSIpOwogCXJldHVybjsKQEAgLTU0MDUsNyArNTE5OSwxMiBAQAogCWN0eHQtPmF0b20gPSB4bWxSZWdOZXdBdG9tKGN0eHQsIFhNTF9SRUdFWFBfQ0hBUlZBTCk7CiAJaWYgKGN0eHQtPmF0b20gPT0gTlVMTCkKIAkgICAgcmV0dXJuKC0xKTsKLQljb2RlcG9pbnQgPSBDVVJfU0NIQVIoY3R4dC0+Y3VyLCBsZW4pOworICAgICAgICBsZW4gPSA0OworICAgICAgICBjb2RlcG9pbnQgPSB4bWxHZXRVVEY4Q2hhcihjdHh0LT5jdXIsICZsZW4pOworICAgICAgICBpZiAoY29kZXBvaW50IDwgMCkgeworICAgICAgICAgICAgRVJST1IoIkludmFsaWQgVVRGLTgiKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KIAljdHh0LT5hdG9tLT5jb2RlcG9pbnQgPSBjb2RlcG9pbnQ7CiAJTkVYVEwobGVuKTsKIAlyZXR1cm4oMSk7CkBAIC01NTAwLDggKzUyOTksMTIgQEAKIAl4bWxGQUdlbmVyYXRlRXBzaWxvblRyYW5zaXRpb24oY3R4dCwgcHJldmlvdXMsIHRvKTsKICAgICB9IGVsc2UgewogCWlmICh4bWxGQUdlbmVyYXRlVHJhbnNpdGlvbnMoY3R4dCwgcHJldmlvdXMsCi0JICAgICAgICAoQ1VSPT0nfCcgfHwgQ1VSPT0nKScgfHwgQ1VSPT0wKSA/IHRvIDogTlVMTCwgY3R4dC0+YXRvbSkgPCAwKQorCSAgICAgICAgKENVUj09J3wnIHx8IENVUj09JyknIHx8IENVUj09MCkgPyB0byA6IE5VTEwsCisgICAgICAgICAgICAgICAgY3R4dC0+YXRvbSkgPCAwKSB7CisgICAgICAgICAgICB4bWxSZWdGcmVlQXRvbShjdHh0LT5hdG9tKTsKKyAgICAgICAgICAgIGN0eHQtPmF0b20gPSBOVUxMOwogCSAgICByZXR1cm4oLTEpOworICAgICAgICB9CiAJcHJldmlvdXMgPSBjdHh0LT5zdGF0ZTsKIAljdHh0LT5hdG9tID0gTlVMTDsKICAgICB9CkBAIC01NTEwLDggKzUzMTMsMTEgQEAKIAlpZiAocmV0ICE9IDApIHsKIAkgICAgaWYgKHhtbEZBR2VuZXJhdGVUcmFuc2l0aW9ucyhjdHh0LCBwcmV2aW91cywKIAkgICAgICAgICAgICAoQ1VSPT0nfCcgfHwgQ1VSPT0nKScgfHwgQ1VSPT0wKSA/IHRvIDogTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgY3R4dC0+YXRvbSkgPCAwKQotCQkgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4dC0+YXRvbSkgPCAwKSB7CisgICAgICAgICAgICAgICAgeG1sUmVnRnJlZUF0b20oY3R4dC0+YXRvbSk7CisgICAgICAgICAgICAgICAgY3R4dC0+YXRvbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KIAkgICAgcHJldmlvdXMgPSBjdHh0LT5zdGF0ZTsKIAkgICAgY3R4dC0+YXRvbSA9IE5VTEw7CiAJfQpAQCAtNTUzNSw5ICs1MzQxLDYgQEAKICAgICBjdHh0LT5lbmQgPSBOVUxMOwogICAgIHhtbEZBUGFyc2VCcmFuY2goY3R4dCwgTlVMTCk7CiAgICAgaWYgKHRvcCkgewotI2lmZGVmIERFQlVHX1JFR0VYUF9HUkFQSAotCXByaW50ZigiU3RhdGUgJWQgaXMgZmluYWxcbiIsIGN0eHQtPnN0YXRlLT5ubyk7Ci0jZW5kaWYKIAljdHh0LT5zdGF0ZS0+dHlwZSA9IFhNTF9SRUdFWFBfRklOQUxfU1RBVEU7CiAgICAgfQogICAgIGlmIChDVVIgIT0gJ3wnKSB7CkBAIC01NjEyLDI3ICs1NDE1LDMwIEBACiAgKi8KIHhtbFJlZ2V4cFB0cgogeG1sUmVnZXhwQ29tcGlsZShjb25zdCB4bWxDaGFyICpyZWdleHApIHsKLSAgICB4bWxSZWdleHBQdHIgcmV0OworICAgIHhtbFJlZ2V4cFB0ciByZXQgPSBOVUxMOwogICAgIHhtbFJlZ1BhcnNlckN0eHRQdHIgY3R4dDsKIAorICAgIGlmIChyZWdleHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCiAgICAgY3R4dCA9IHhtbFJlZ05ld1BhcnNlckN0eHQocmVnZXhwKTsKICAgICBpZiAoY3R4dCA9PSBOVUxMKQogCXJldHVybihOVUxMKTsKIAogICAgIC8qIGluaXRpYWxpemUgdGhlIHBhcnNlciAqLworICAgIGN0eHQtPnN0YXRlID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgIGlmIChjdHh0LT5zdGF0ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGN0eHQtPnN0YXJ0ID0gY3R4dC0+c3RhdGU7CiAgICAgY3R4dC0+ZW5kID0gTlVMTDsKLSAgICBjdHh0LT5zdGFydCA9IGN0eHQtPnN0YXRlID0geG1sUmVnTmV3U3RhdGUoY3R4dCk7Ci0gICAgeG1sUmVnU3RhdGVQdXNoKGN0eHQsIGN0eHQtPnN0YXJ0KTsKIAogICAgIC8qIHBhcnNlIHRoZSBleHByZXNzaW9uIGJ1aWxkaW5nIGFuIGF1dG9tYXRhICovCiAgICAgeG1sRkFQYXJzZVJlZ0V4cChjdHh0LCAxKTsKICAgICBpZiAoQ1VSICE9IDApIHsKIAlFUlJPUigieG1sRkFQYXJzZVJlZ0V4cDogZXh0cmEgY2hhcmFjdGVycyIpOwogICAgIH0KLSAgICBpZiAoY3R4dC0+ZXJyb3IgIT0gMCkgewotCXhtbFJlZ0ZyZWVQYXJzZXJDdHh0KGN0eHQpOwotCXJldHVybihOVUxMKTsKLSAgICB9CisgICAgaWYgKGN0eHQtPmVycm9yICE9IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgY3R4dC0+ZW5kID0gY3R4dC0+c3RhdGU7CiAgICAgY3R4dC0+c3RhcnQtPnR5cGUgPSBYTUxfUkVHRVhQX1NUQVJUX1NUQVRFOwogICAgIGN0eHQtPmVuZC0+dHlwZSA9IFhNTF9SRUdFWFBfRklOQUxfU1RBVEU7CkBAIC01NjQxLDExICs1NDQ3LDExIEBACiAgICAgeG1sRkFFbGltaW5hdGVFcHNpbG9uVHJhbnNpdGlvbnMoY3R4dCk7CiAKIAotICAgIGlmIChjdHh0LT5lcnJvciAhPSAwKSB7Ci0JeG1sUmVnRnJlZVBhcnNlckN0eHQoY3R4dCk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KKyAgICBpZiAoY3R4dC0+ZXJyb3IgIT0gMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICByZXQgPSB4bWxSZWdFcHhGcm9tUGFyc2UoY3R4dCk7CisKK2Vycm9yOgogICAgIHhtbFJlZ0ZyZWVQYXJzZXJDdHh0KGN0eHQpOwogICAgIHJldHVybihyZXQpOwogfQpAQCAtNTc3MCwxOCArNTU3NiwxNSBAQAogCXJldHVybihOVUxMKTsKIAogICAgIC8qIGluaXRpYWxpemUgdGhlIHBhcnNlciAqLworICAgIGN0eHQtPnN0YXRlID0geG1sUmVnU3RhdGVQdXNoKGN0eHQpOworICAgIGlmIChjdHh0LT5zdGF0ZSA9PSBOVUxMKSB7CisJeG1sRnJlZUF1dG9tYXRhKGN0eHQpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgY3R4dC0+c3RhcnQgPSBjdHh0LT5zdGF0ZTsKICAgICBjdHh0LT5lbmQgPSBOVUxMOwotICAgIGN0eHQtPnN0YXJ0ID0gY3R4dC0+c3RhdGUgPSB4bWxSZWdOZXdTdGF0ZShjdHh0KTsKLSAgICBpZiAoY3R4dC0+c3RhcnQgPT0gTlVMTCkgewotCXhtbEZyZWVBdXRvbWF0YShjdHh0KTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQorCiAgICAgY3R4dC0+c3RhcnQtPnR5cGUgPSBYTUxfUkVHRVhQX1NUQVJUX1NUQVRFOwotICAgIGlmICh4bWxSZWdTdGF0ZVB1c2goY3R4dCwgY3R4dC0+c3RhcnQpIDwgMCkgewotICAgICAgICB4bWxSZWdGcmVlU3RhdGUoY3R4dC0+c3RhcnQpOwotCXhtbEZyZWVBdXRvbWF0YShjdHh0KTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQogICAgIGN0eHQtPmZsYWdzID0gMDsKIAogICAgIHJldHVybihjdHh0KTsKQEAgLTYwNDQsNiArNTg0Nyw4IEBACiAJcmV0dXJuKE5VTEwpOwogICAgIGlmICgodG9rZW4yID09IE5VTEwpIHx8ICgqdG9rZW4yID09IDApKSB7CiAJYXRvbS0+dmFsdWVwID0geG1sU3RyZHVwKHRva2VuKTsKKyAgICAgICAgaWYgKGF0b20tPnZhbHVlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IGVsc2UgewogCWludCBsZW5uLCBsZW5wOwogCXhtbENoYXIgKnN0cjsKQEAgLTYwNTIsMTAgKzU4NTcsOCBAQAogCWxlbnAgPSBzdHJsZW4oKGNoYXIgKikgdG9rZW4pOwogCiAJc3RyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKGxlbm4gKyBsZW5wICsgMik7Ci0JaWYgKHN0ciA9PSBOVUxMKSB7Ci0JICAgIHhtbFJlZ0ZyZWVBdG9tKGF0b20pOwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQorCWlmIChzdHIgPT0gTlVMTCkKKwkgICAgZ290byBlcnJvcjsKIAltZW1jcHkoJnN0clswXSwgdG9rZW4sIGxlbnApOwogCXN0cltsZW5wXSA9ICd8JzsKIAltZW1jcHkoJnN0cltsZW5wICsgMV0sIHRva2VuMiwgbGVubik7CkBAIC02MDc0LDE2ICs1ODc3LDIwIEBACiAgICAgICogYXNzb2NpYXRlIGEgY291bnRlciB0byB0aGUgdHJhbnNpdGlvbi4KICAgICAgKi8KICAgICBjb3VudGVyID0geG1sUmVnR2V0Q291bnRlcihhbSk7CisgICAgaWYgKGNvdW50ZXIgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGFtLT5jb3VudGVyc1tjb3VudGVyXS5taW4gPSBtaW47CiAgICAgYW0tPmNvdW50ZXJzW2NvdW50ZXJdLm1heCA9IG1heDsKIAogICAgIC8qIHhtbEZBR2VuZXJhdGVUcmFuc2l0aW9ucyhhbSwgZnJvbSwgdG8sIGF0b20pOyAqLwogICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIHRvID0geG1sUmVnTmV3U3RhdGUoYW0pOwotCXhtbFJlZ1N0YXRlUHVzaChhbSwgdG8pOworCXRvID0geG1sUmVnU3RhdGVQdXNoKGFtKTsKKyAgICAgICAgaWYgKHRvID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICB4bWxSZWdTdGF0ZUFkZFRyYW5zKGFtLCBmcm9tLCBhdG9tLCB0bywgY291bnRlciwgLTEpOwotICAgIHhtbFJlZ0F0b21QdXNoKGFtLCBhdG9tKTsKKyAgICBpZiAoeG1sUmVnQXRvbVB1c2goYW0sIGF0b20pIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBhbS0+c3RhdGUgPSB0bzsKIAogICAgIGlmICh0byA9PSBOVUxMKQpAQCAtNjA5Myw2ICs1OTAwLDEwIEBACiAgICAgaWYgKG1pbiA9PSAwKQogCXhtbEZBR2VuZXJhdGVFcHNpbG9uVHJhbnNpdGlvbihhbSwgZnJvbSwgdG8pOwogICAgIHJldHVybih0byk7CisKK2Vycm9yOgorICAgIHhtbFJlZ0ZyZWVBdG9tKGF0b20pOworICAgIHJldHVybihOVUxMKTsKIH0KIAogLyoqCkBAIC02MTI5LDYgKzU5NDAsOCBAQAogICAgIGlmIChhdG9tID09IE5VTEwpCiAJcmV0dXJuKE5VTEwpOwogICAgIGF0b20tPnZhbHVlcCA9IHhtbFN0cmR1cCh0b2tlbik7CisgICAgaWYgKGF0b20tPnZhbHVlcCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGF0b20tPmRhdGEgPSBkYXRhOwogICAgIGlmIChtaW4gPT0gMCkKIAlhdG9tLT5taW4gPSAxOwpAQCAtNjE0MCwxNiArNTk1MywyMCBAQAogICAgICAqIGFzc29jaWF0ZSBhIGNvdW50ZXIgdG8gdGhlIHRyYW5zaXRpb24uCiAgICAgICovCiAgICAgY291bnRlciA9IHhtbFJlZ0dldENvdW50ZXIoYW0pOworICAgIGlmIChjb3VudGVyIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBhbS0+Y291bnRlcnNbY291bnRlcl0ubWluID0gbWluOwogICAgIGFtLT5jb3VudGVyc1tjb3VudGVyXS5tYXggPSBtYXg7CiAKICAgICAvKiB4bWxGQUdlbmVyYXRlVHJhbnNpdGlvbnMoYW0sIGZyb20sIHRvLCBhdG9tKTsgKi8KICAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICB0byA9IHhtbFJlZ05ld1N0YXRlKGFtKTsKLQl4bWxSZWdTdGF0ZVB1c2goYW0sIHRvKTsKKwl0byA9IHhtbFJlZ1N0YXRlUHVzaChhbSk7CisgICAgICAgIGlmICh0byA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgeG1sUmVnU3RhdGVBZGRUcmFucyhhbSwgZnJvbSwgYXRvbSwgdG8sIGNvdW50ZXIsIC0xKTsKLSAgICB4bWxSZWdBdG9tUHVzaChhbSwgYXRvbSk7CisgICAgaWYgKHhtbFJlZ0F0b21QdXNoKGFtLCBhdG9tKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgYW0tPnN0YXRlID0gdG87CiAKICAgICBpZiAodG8gPT0gTlVMTCkKQEAgLTYxNTksNiArNTk3NiwxMCBAQAogICAgIGlmIChtaW4gPT0gMCkKIAl4bWxGQUdlbmVyYXRlRXBzaWxvblRyYW5zaXRpb24oYW0sIGZyb20sIHRvKTsKICAgICByZXR1cm4odG8pOworCitlcnJvcjoKKyAgICB4bWxSZWdGcmVlQXRvbShhdG9tKTsKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIC8qKgpAQCAtNjE5OSw2ICs2MDIwLDggQEAKIAlyZXR1cm4oTlVMTCk7CiAgICAgaWYgKCh0b2tlbjIgPT0gTlVMTCkgfHwgKCp0b2tlbjIgPT0gMCkpIHsKIAlhdG9tLT52YWx1ZXAgPSB4bWxTdHJkdXAodG9rZW4pOworICAgICAgICBpZiAoYXRvbS0+dmFsdWVwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0gZWxzZSB7CiAJaW50IGxlbm4sIGxlbnA7CiAJeG1sQ2hhciAqc3RyOwpAQCAtNjIwNywxMCArNjAzMCw4IEBACiAJbGVucCA9IHN0cmxlbigoY2hhciAqKSB0b2tlbik7CiAKIAlzdHIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMobGVubiArIGxlbnAgKyAyKTsKLQlpZiAoc3RyID09IE5VTEwpIHsKLQkgICAgeG1sUmVnRnJlZUF0b20oYXRvbSk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9CisJaWYgKHN0ciA9PSBOVUxMKQorCSAgICBnb3RvIGVycm9yOwogCW1lbWNweSgmc3RyWzBdLCB0b2tlbiwgbGVucCk7CiAJc3RyW2xlbnBdID0gJ3wnOwogCW1lbWNweSgmc3RyW2xlbnAgKyAxXSwgdG9rZW4yLCBsZW5uKTsKQEAgLTYyMjYsMTggKzYwNDcsMjYgQEAKICAgICAgKiBhc3NvY2lhdGUgYSBjb3VudGVyIHRvIHRoZSB0cmFuc2l0aW9uLgogICAgICAqLwogICAgIGNvdW50ZXIgPSB4bWxSZWdHZXRDb3VudGVyKGFtKTsKKyAgICBpZiAoY291bnRlciA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgYW0tPmNvdW50ZXJzW2NvdW50ZXJdLm1pbiA9IDE7CiAgICAgYW0tPmNvdW50ZXJzW2NvdW50ZXJdLm1heCA9IDE7CiAKICAgICAvKiB4bWxGQUdlbmVyYXRlVHJhbnNpdGlvbnMoYW0sIGZyb20sIHRvLCBhdG9tKTsgKi8KICAgICBpZiAodG8gPT0gTlVMTCkgewotCXRvID0geG1sUmVnTmV3U3RhdGUoYW0pOwotCXhtbFJlZ1N0YXRlUHVzaChhbSwgdG8pOworCXRvID0geG1sUmVnU3RhdGVQdXNoKGFtKTsKKyAgICAgICAgaWYgKHRvID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICB4bWxSZWdTdGF0ZUFkZFRyYW5zKGFtLCBmcm9tLCBhdG9tLCB0bywgY291bnRlciwgLTEpOwotICAgIHhtbFJlZ0F0b21QdXNoKGFtLCBhdG9tKTsKKyAgICBpZiAoeG1sUmVnQXRvbVB1c2goYW0sIGF0b20pIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBhbS0+c3RhdGUgPSB0bzsKICAgICByZXR1cm4odG8pOworCitlcnJvcjoKKyAgICB4bWxSZWdGcmVlQXRvbShhdG9tKTsKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIApAQCAtNjI4NSwxOCArNjExNCwyNiBAQAogICAgICAqIGFzc29jaWF0ZSBhIGNvdW50ZXIgdG8gdGhlIHRyYW5zaXRpb24uCiAgICAgICovCiAgICAgY291bnRlciA9IHhtbFJlZ0dldENvdW50ZXIoYW0pOworICAgIGlmIChjb3VudGVyIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBhbS0+Y291bnRlcnNbY291bnRlcl0ubWluID0gMTsKICAgICBhbS0+Y291bnRlcnNbY291bnRlcl0ubWF4ID0gMTsKIAogICAgIC8qIHhtbEZBR2VuZXJhdGVUcmFuc2l0aW9ucyhhbSwgZnJvbSwgdG8sIGF0b20pOyAqLwogICAgIGlmICh0byA9PSBOVUxMKSB7Ci0JdG8gPSB4bWxSZWdOZXdTdGF0ZShhbSk7Ci0JeG1sUmVnU3RhdGVQdXNoKGFtLCB0byk7CisJdG8gPSB4bWxSZWdTdGF0ZVB1c2goYW0pOworICAgICAgICBpZiAodG8gPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHhtbFJlZ1N0YXRlQWRkVHJhbnMoYW0sIGZyb20sIGF0b20sIHRvLCBjb3VudGVyLCAtMSk7Ci0gICAgeG1sUmVnQXRvbVB1c2goYW0sIGF0b20pOworICAgIGlmICh4bWxSZWdBdG9tUHVzaChhbSwgYXRvbSkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGFtLT5zdGF0ZSA9IHRvOwogICAgIHJldHVybih0byk7CisKK2Vycm9yOgorICAgIHhtbFJlZ0ZyZWVBdG9tKGF0b20pOworICAgIHJldHVybihOVUxMKTsKIH0KIAogLyoqCkBAIC02MzA5LDEzICs2MTQ2LDkgQEAKICAqLwogeG1sQXV0b21hdGFTdGF0ZVB0cgogeG1sQXV0b21hdGFOZXdTdGF0ZSh4bWxBdXRvbWF0YVB0ciBhbSkgewotICAgIHhtbEF1dG9tYXRhU3RhdGVQdHIgdG87Ci0KICAgICBpZiAoYW0gPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7Ci0gICAgdG8gPSB4bWxSZWdOZXdTdGF0ZShhbSk7Ci0gICAgeG1sUmVnU3RhdGVQdXNoKGFtLCB0byk7Ci0gICAgcmV0dXJuKHRvKTsKKyAgICByZXR1cm4oeG1sUmVnU3RhdGVQdXNoKGFtKSk7CiB9CiAKIC8qKgpAQCAtNjU3Miw4ICs2NDA1LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIE1BWF9OT0RFUyAxMDAwMAogCi0vKiAjZGVmaW5lIERFQlVHX0RFUklWICovCi0KIC8qCiAgKiBUT0RPOgogICogLSBXaWxkY2FyZHMKQEAgLTcyNDgsMTQgKzcwNzksOCBAQAogCSAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKIAljYXNlIFhNTF9FWFBfQVRPTToKIAkgICAgaWYgKGV4cC0+ZXhwX3N0ciA9PSBzdHIpIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQlwcmludGYoImRlcml2IGF0b206IGVxdWFsID0+IEVtcHR5XG4iKTsKLSNlbmRpZgogCSAgICAgICAgcmV0ID0gZW1wdHlFeHA7CiAJICAgIH0gZWxzZSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJcHJpbnRmKCJkZXJpdiBhdG9tOiBtaXNtYXRjaCA9PiBmb3JiaWRcbiIpOwotI2VuZGlmCiAJICAgICAgICAvKiBUT0RPIHdpbGRjYXJkcyBoZXJlICovCiAJCXJldCA9IGZvcmJpZGRlbkV4cDsKIAkgICAgfQpAQCAtNzI2Myw5ICs3MDg4LDYgQEAKIAljYXNlIFhNTF9FWFBfT1I6IHsKIAkgICAgeG1sRXhwTm9kZVB0ciB0bXA7CiAKLSNpZmRlZiBERUJVR19ERVJJVgotCSAgICBwcmludGYoImRlcml2IG9yOiA9PiBvcihkZXJpdnMpXG4iKTsKLSNlbmRpZgogCSAgICB0bXAgPSB4bWxFeHBTdHJpbmdEZXJpdmVJbnQoY3R4dCwgZXhwLT5leHBfbGVmdCwgc3RyKTsKIAkgICAgaWYgKHRtcCA9PSBOVUxMKSB7CiAJCXJldHVybihOVUxMKTsKQEAgLTcyODAsMjMgKzcxMDIsMTQgQEAKIAkgICAgcmV0dXJuKHJldCk7CiAJfQogCWNhc2UgWE1MX0VYUF9TRVE6Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkgICAgcHJpbnRmKCJkZXJpdiBzZXE6IHN0YXJ0aW5nIHdpdGggbGVmdFxuIik7Ci0jZW5kaWYKIAkgICAgcmV0ID0geG1sRXhwU3RyaW5nRGVyaXZlSW50KGN0eHQsIGV4cC0+ZXhwX2xlZnQsIHN0cik7CiAJICAgIGlmIChyZXQgPT0gTlVMTCkgewogCSAgICAgICAgcmV0dXJuKE5VTEwpOwogCSAgICB9IGVsc2UgaWYgKHJldCA9PSBmb3JiaWRkZW5FeHApIHsKIAkgICAgICAgIGlmIChJU19OSUxMQUJMRShleHAtPmV4cF9sZWZ0KSkgewotI2lmZGVmIERFQlVHX0RFUklWCi0JCSAgICBwcmludGYoImRlcml2IHNlcTogbGVmdCBmYWlsZWQgYnV0IG5pbGxhYmxlXG4iKTsKLSNlbmRpZgogCQkgICAgcmV0ID0geG1sRXhwU3RyaW5nRGVyaXZlSW50KGN0eHQsIGV4cC0+ZXhwX3JpZ2h0LCBzdHIpOwogCQl9CiAJICAgIH0gZWxzZSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJcHJpbnRmKCJkZXJpdiBzZXE6IGxlZnQgbWF0Y2ggPT4gc2VxdWVuY2VcbiIpOwotI2VuZGlmCiAJICAgICAgICBleHAtPmV4cF9yaWdodC0+cmVmKys7CiAJICAgICAgICByZXQgPSB4bWxFeHBIYXNoR2V0RW50cnkoY3R4dCwgWE1MX0VYUF9TRVEsIHJldCwgZXhwLT5leHBfcmlnaHQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAwKTsKQEAgLTczMTIsOSArNzEyNSw2IEBACiAJICAgIGlmIChyZXQgPT0gTlVMTCkKIAkgICAgICAgIHJldHVybihOVUxMKTsKIAkgICAgaWYgKHJldCA9PSBmb3JiaWRkZW5FeHApIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQlwcmludGYoImRlcml2IGNvdW50OiBwYXR0ZXJuIG1pc21hdGNoID0+IGZvcmJpZFxuIik7Ci0jZW5kaWYKIAkgICAgICAgIHJldHVybihyZXQpOwogCSAgICB9CiAJICAgIGlmIChleHAtPmV4cF9tYXggPT0gMSkKQEAgLTczMzEsMTQgKzcxNDEsOCBAQAogCSAgICB0bXAgPSB4bWxFeHBIYXNoR2V0RW50cnkoY3R4dCwgWE1MX0VYUF9DT1VOVCwgZXhwLT5leHBfbGVmdCwgTlVMTCwKIAkJCQkgICAgIE5VTEwsIG1pbiwgbWF4KTsKIAkgICAgaWYgKHJldCA9PSBlbXB0eUV4cCkgewotI2lmZGVmIERFQlVHX0RFUklWCi0JCXByaW50ZigiZGVyaXYgY291bnQ6IG1hdGNoIHRvIGVtcHR5ID0+IG5ldyBjb3VudFxuIik7Ci0jZW5kaWYKIAkgICAgICAgIHJldHVybih0bXApOwogCSAgICB9Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkgICAgcHJpbnRmKCJkZXJpdiBjb3VudDogbWF0Y2ggPT4gc2VxdWVuY2Ugd2l0aCBuZXcgY291bnRcbiIpOwotI2VuZGlmCiAJICAgIHJldHVybih4bWxFeHBIYXNoR2V0RW50cnkoY3R4dCwgWE1MX0VYUF9TRVEsIHJldCwgdG1wLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIDApKTsKIAl9CkBAIC03NDQ3LDE3ICs3MjUxLDExIEBACiAJICAgICAgICAqbXVsdCA9IHRtcDsKIAkgICAgZWxzZQogCSAgICAgICAgeG1sRXhwRnJlZShjdHh0LCB0bXApOwotI2lmZGVmIERFQlVHX0RFUklWCi0JICAgIHByaW50ZigiRGl2aWRlIHN1Y2NlZWRlZCAlZFxuIiwgaSk7Ci0jZW5kaWYKIAkgICAgcmV0dXJuKGkpOwogCX0KIAl4bWxFeHBGcmVlKGN0eHQsIHRtcCk7CiAJeG1sRXhwRnJlZShjdHh0LCB0bXAyKTsKICAgICB9Ci0jaWZkZWYgREVCVUdfREVSSVYKLSAgICBwcmludGYoIkRpdmlkZSBmYWlsZWRcbiIpOwotI2VuZGlmCiAgICAgcmV0dXJuKDApOwogfQogCkBAIC03NDgzLDI1ICs3MjgxLDE2IEBACiAgICAgICogYW1vdW50LCB0aGVuIHRoZSBkZXJpdmF0aW9uIGlzIGVtcHR5CiAgICAgICovCiAgICAgaWYgKChleHAgPT0gc3ViKSAmJiAoZXhwLT5jX21heCA+PSAwKSkgewotI2lmZGVmIERFQlVHX0RFUklWCi0gICAgICAgIHByaW50ZigiRXF1YWwoZXhwLCBzdWIpIGFuZCBmaW5pdGUgLT4gRW1wdHlcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybihlbXB0eUV4cCk7CiAgICAgfQogICAgIC8qCiAgICAgICogZGVjb21wb3NlIHN1YiBzZXF1ZW5jZSBmaXJzdAogICAgICAqLwogICAgIGlmIChzdWItPnR5cGUgPT0gWE1MX0VYUF9FTVBUWSkgewotI2lmZGVmIERFQlVHX0RFUklWCi0gICAgICAgIHByaW50ZigiRW1wdHkoc3ViKSAtPiBFbXB0eVxuIik7Ci0jZW5kaWYKIAlleHAtPnJlZisrOwogICAgICAgICByZXR1cm4oZXhwKTsKICAgICB9CiAgICAgaWYgKHN1Yi0+dHlwZSA9PSBYTUxfRVhQX1NFUSkgewotI2lmZGVmIERFQlVHX0RFUklWCi0gICAgICAgIHByaW50ZigiU2VxKHN1YikgLT4gZGVjb21wb3NlXG4iKTsKLSNlbmRpZgogICAgICAgICB0bXAgPSB4bWxFeHBFeHBEZXJpdmVJbnQoY3R4dCwgZXhwLCBzdWItPmV4cF9sZWZ0KTsKIAlpZiAodG1wID09IE5VTEwpCiAJICAgIHJldHVybihOVUxMKTsKQEAgLTc1MTIsOSArNzMwMSw2IEBACiAJcmV0dXJuKHJldCk7CiAgICAgfQogICAgIGlmIChzdWItPnR5cGUgPT0gWE1MX0VYUF9PUikgewotI2lmZGVmIERFQlVHX0RFUklWCi0gICAgICAgIHByaW50ZigiT3Ioc3ViKSAtPiBkZWNvbXBvc2VcbiIpOwotI2VuZGlmCiAgICAgICAgIHRtcCA9IHhtbEV4cEV4cERlcml2ZUludChjdHh0LCBleHAsIHN1Yi0+ZXhwX2xlZnQpOwogCWlmICh0bXAgPT0gZm9yYmlkZGVuRXhwKQogCSAgICByZXR1cm4odG1wKTsKQEAgLTc1MjgsMzYgKzczMTQsMjEgQEAKIAlyZXR1cm4oeG1sRXhwSGFzaEdldEVudHJ5KGN0eHQsIFhNTF9FWFBfT1IsIHRtcCwgcmV0LCBOVUxMLCAwLCAwKSk7CiAgICAgfQogICAgIGlmICgheG1sRXhwQ2hlY2tDYXJkKGV4cCwgc3ViKSkgewotI2lmZGVmIERFQlVHX0RFUklWCi0gICAgICAgIHByaW50ZigiQ2hlY2tDYXJkKGV4cCwgc3ViKSBmYWlsZWQgLT4gRm9yYmlkXG4iKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKICAgICB9CiAgICAgc3dpdGNoIChleHAtPnR5cGUpIHsKICAgICAgICAgY2FzZSBYTUxfRVhQX0VNUFRZOgogCSAgICBpZiAoc3ViID09IGVtcHR5RXhwKQogCSAgICAgICAgcmV0dXJuKGVtcHR5RXhwKTsKLSNpZmRlZiBERUJVR19ERVJJVgotCSAgICBwcmludGYoIkVtcHR5KGV4cCkgLT4gRm9yYmlkXG4iKTsKLSNlbmRpZgogCSAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKICAgICAgICAgY2FzZSBYTUxfRVhQX0ZPUkJJRDoKLSNpZmRlZiBERUJVR19ERVJJVgotCSAgICBwcmludGYoIkZvcmJpZChleHApIC0+IEZvcmJpZFxuIik7Ci0jZW5kaWYKIAkgICAgcmV0dXJuKGZvcmJpZGRlbkV4cCk7CiAgICAgICAgIGNhc2UgWE1MX0VYUF9BVE9NOgogCSAgICBpZiAoc3ViLT50eXBlID09IFhNTF9FWFBfQVRPTSkgewogCSAgICAgICAgLyogVE9ETzogaGFuZGxlIHdpbGRjYXJkcyAqLwogCSAgICAgICAgaWYgKGV4cC0+ZXhwX3N0ciA9PSBzdWItPmV4cF9zdHIpIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQkgICAgcHJpbnRmKCJBdG9tIG1hdGNoIC0+IEVtcHR5XG4iKTsKLSNlbmRpZgogCQkgICAgcmV0dXJuKGVtcHR5RXhwKTsKICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJcHJpbnRmKCJBdG9tIG1pc21hdGNoIC0+IEZvcmJpZFxuIik7Ci0jZW5kaWYKIAkgICAgICAgIHJldHVybihmb3JiaWRkZW5FeHApOwogCSAgICB9CiAJICAgIGlmICgoc3ViLT50eXBlID09IFhNTF9FWFBfQ09VTlQpICYmCkBAIC03NTY1LDMyICs3MzM2LDE3IEBACiAJICAgICAgICAoc3ViLT5leHBfbGVmdC0+dHlwZSA9PSBYTUxfRVhQX0FUT00pKSB7CiAJICAgICAgICAvKiBUT0RPOiBoYW5kbGUgd2lsZGNhcmRzICovCiAJICAgICAgICBpZiAoZXhwLT5leHBfc3RyID09IHN1Yi0+ZXhwX2xlZnQtPmV4cF9zdHIpIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQkgICAgcHJpbnRmKCJBdG9tIG1hdGNoIC0+IEVtcHR5XG4iKTsKLSNlbmRpZgogCQkgICAgcmV0dXJuKGVtcHR5RXhwKTsKIAkJfQotI2lmZGVmIERFQlVHX0RFUklWCi0JCXByaW50ZigiQXRvbSBtaXNtYXRjaCAtPiBGb3JiaWRcbiIpOwotI2VuZGlmCiAJICAgICAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKIAkgICAgfQotI2lmZGVmIERFQlVHX0RFUklWCi0JICAgIHByaW50ZigiQ29tcGxleCBleHAgdnMgQXRvbSAtPiBGb3JiaWRcbiIpOwotI2VuZGlmCiAJICAgIHJldHVybihmb3JiaWRkZW5FeHApOwogICAgICAgICBjYXNlIFhNTF9FWFBfU0VROgogCSAgICAvKiB0cnkgdG8gZ2V0IHRoZSBzZXF1ZW5jZSBjb25zdW1lZCBvbmx5IGlmIHBvc3NpYmxlICovCiAJICAgIGlmICh4bWxFeHBDaGVja0NhcmQoZXhwLT5leHBfbGVmdCwgc3ViKSkgewogCQkvKiBTZWUgaWYgdGhlIHNlcXVlbmNlIGNhbiBiZSBjb25zdW1lZCBkaXJlY3RseSAqLwotI2lmZGVmIERFQlVHX0RFUklWCi0JCXByaW50ZigiU2VxIHRyeWluZyBsZWZ0IG9ubHlcbiIpOwotI2VuZGlmCiAJCXJldCA9IHhtbEV4cEV4cERlcml2ZUludChjdHh0LCBleHAtPmV4cF9sZWZ0LCBzdWIpOwogCQlpZiAoKHJldCAhPSBmb3JiaWRkZW5FeHApICYmIChyZXQgIT0gTlVMTCkpIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQkgICAgcHJpbnRmKCJTZXEgdHJ5aW5nIGxlZnQgb25seSB3b3JrZWRcbiIpOwotI2VuZGlmCiAJCSAgICAvKgogCQkgICAgICogVE9ETzogYXNzdW1wdGlvbiBoZXJlIHRoYXQgd2UgYXJlIGRldGVybWluaXN0CiAJCSAgICAgKiAgICAgICBpLmUuIHdlIHdvbid0IGdldCB0byBhIG5pbGxhYmxlIGV4cCBsZWZ0CkBAIC03NjAyLDI1ICs3MzU4LDE1IEBACiAJCSAgICByZXR1cm4oeG1sRXhwSGFzaEdldEVudHJ5KGN0eHQsIFhNTF9FWFBfU0VRLCByZXQsCiAJCQkJCSAgICAgIGV4cC0+ZXhwX3JpZ2h0LCBOVUxMLCAwLCAwKSk7CiAJCX0KLSNpZmRlZiBERUJVR19ERVJJVgotCSAgICB9IGVsc2UgewotCQlwcmludGYoIlNlcTogbGVmdCB0b28gc2hvcnRcbiIpOwotI2VuZGlmCiAJICAgIH0KIAkgICAgLyogVHJ5IGluc3RlYWQgdG8gZGVjb21wb3NlICovCiAJICAgIGlmIChzdWItPnR5cGUgPT0gWE1MX0VYUF9DT1VOVCkgewogCQlpbnQgbWluLCBtYXg7CiAKLSNpZmRlZiBERUJVR19ERVJJVgotCQlwcmludGYoIlNlcTogc3ViIGlzIGEgY291bnRcbiIpOwotI2VuZGlmCiAJICAgICAgICByZXQgPSB4bWxFeHBFeHBEZXJpdmVJbnQoY3R4dCwgZXhwLT5leHBfbGVmdCwgc3ViLT5leHBfbGVmdCk7CiAJCWlmIChyZXQgPT0gTlVMTCkKIAkJICAgIHJldHVybihOVUxMKTsKIAkJaWYgKHJldCAhPSBmb3JiaWRkZW5FeHApIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQkgICAgcHJpbnRmKCJTZXEgLCBDb3VudCBtYXRjaCBvbiBsZWZ0XG4iKTsKLSNlbmRpZgogCQkgICAgaWYgKHN1Yi0+ZXhwX21heCA8IDApCiAJCSAgICAgICAgbWF4ID0gLTE7CiAJICAgICAgICAgICAgZWxzZQpAQCAtNzY1MSw5ICs3Mzk3LDYgQEAKIAkgICAgLyogd2UgbWFkZSBubyBwcm9ncmVzcyBvbiBzdHJ1Y3R1cmVkIG9wZXJhdGlvbnMgKi8KIAkgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWE1MX0VYUF9PUjoKLSNpZmRlZiBERUJVR19ERVJJVgotCSAgICBwcmludGYoIk9yICwgdHJ5aW5nIGJvdGggc2lkZVxuIik7Ci0jZW5kaWYKIAkgICAgcmV0ID0geG1sRXhwRXhwRGVyaXZlSW50KGN0eHQsIGV4cC0+ZXhwX2xlZnQsIHN1Yik7CiAJICAgIGlmIChyZXQgPT0gTlVMTCkKIAkgICAgICAgIHJldHVybihOVUxMKTsKQEAgLTc2NzYsMTUgKzc0MTksOSBAQAogCQlpZiAodG1wID09IGZvcmJpZGRlbkV4cCkgewogCQkgICAgaW50IG11bHQ7CiAKLSNpZmRlZiBERUJVR19ERVJJVgotCQkgICAgcHJpbnRmKCJDb3VudCwgQ291bnQgaW5uZXIgZG9uJ3Qgc3Vic3VtZVxuIik7Ci0jZW5kaWYKIAkJICAgIG11bHQgPSB4bWxFeHBEaXZpZGUoY3R4dCwgc3ViLT5leHBfbGVmdCwgZXhwLT5leHBfbGVmdCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnRtcCk7CiAJCSAgICBpZiAobXVsdCA8PSAwKSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJCXByaW50ZigiQ291bnQsIENvdW50IG5vdCBtdWx0aXBsZSA9PiBmb3JiaWRkZW5cbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKIAkJICAgIH0KIAkJICAgIGlmIChzdWItPmV4cF9tYXggPT0gLTEpIHsKQEAgLTc2OTUsMTcgKzc0MzIsMTEgQEAKIAkJCSAgICBlbHNlCiAJCQkgICAgICAgIG1pbiA9IGV4cC0+ZXhwX21pbiAtIHN1Yi0+ZXhwX21pbiAqIG11bHQ7CiAJCQl9IGVsc2UgewotI2lmZGVmIERFQlVHX0RFUklWCi0JCQkgICAgcHJpbnRmKCJDb3VudCwgQ291bnQgZmluaXRlIGNhbid0IHN1YnN1bWUgaW5maW5pdGVcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sRXhwRnJlZShjdHh0LCB0bXApOwogCQkJICAgIHJldHVybihmb3JiaWRkZW5FeHApOwogCQkJfQogCQkgICAgfSBlbHNlIHsKIAkJCWlmIChleHAtPmV4cF9tYXggPT0gLTEpIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQkJICAgIHByaW50ZigiSW5maW5pdGUgbG9vcCBjb25zdW1lIG11bHQgZmluaXRlIGxvb3BcbiIpOwotI2VuZGlmCiAJCQkgICAgaWYgKGV4cC0+ZXhwX21pbiA+IHN1Yi0+ZXhwX21pbiAqIG11bHQpIHsKIAkJCQltYXggPSAtMTsKIAkJCQltaW4gPSBleHAtPmV4cF9taW4gLSBzdWItPmV4cF9taW4gKiBtdWx0OwpAQCAtNzcxNSw5ICs3NDQ2LDYgQEAKIAkJCSAgICB9CiAJCQl9IGVsc2UgewogCQkJICAgIGlmIChleHAtPmV4cF9tYXggPCBzdWItPmV4cF9tYXggKiBtdWx0KSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJCQlwcmludGYoImxvb3BzIG1heCBtdWx0IG1pc21hdGNoID0+IGZvcmJpZGRlblxuIik7Ci0jZW5kaWYKIAkJCQl4bWxFeHBGcmVlKGN0eHQsIHRtcCk7CiAJCQkJcmV0dXJuKGZvcmJpZGRlbkV4cCk7CiAJCQkgICAgfQpAQCAtNzczMywzMCArNzQ2MSwxOCBAQAogCQkgICAgICogVE9ETzogbG9vcCBoZXJlIHRvIHRyeSB0byBncm93IGlmIHdvcmtpbmcgb24gZmluaXRlCiAJCSAgICAgKiAgICAgICBibG9ja3MuCiAJCSAgICAgKi8KLSNpZmRlZiBERUJVR19ERVJJVgotCQkgICAgcHJpbnRmKCJDb3VudCwgQ291bnQgcmVtYWluIG5vdCBuaWxsYWJsZSA9PiBmb3JiaWRkZW5cbiIpOwotI2VuZGlmCiAJCSAgICB4bWxFeHBGcmVlKGN0eHQsIHRtcCk7CiAJCSAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKIAkJfSBlbHNlIGlmIChzdWItPmV4cF9tYXggPT0gLTEpIHsKIAkJICAgIGlmIChleHAtPmV4cF9tYXggPT0gLTEpIHsKIAkJICAgICAgICBpZiAoZXhwLT5leHBfbWluIDw9IHN1Yi0+ZXhwX21pbikgewotI2lmZGVmIERFQlVHX0RFUklWCi0JCQkgICAgcHJpbnRmKCJJbmZpbml0ZSBsb29wcyBPa2F5ID0+IENPVU5UKDAsSW5mKVxuIik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSAtMTsKIAkJCSAgICBtaW4gPSAwOwogCQkJfSBlbHNlIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCQkJICAgIHByaW50ZigiSW5maW5pdGUgbG9vcHMgbWluID0+IENvdW50KFgsSW5mKVxuIik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSAtMTsKIAkJCSAgICBtaW4gPSBleHAtPmV4cF9taW4gLSBzdWItPmV4cF9taW47CiAJCQl9CiAJCSAgICB9IGVsc2UgaWYgKGV4cC0+ZXhwX21pbiA+IHN1Yi0+ZXhwX21pbikgewotI2lmZGVmIERFQlVHX0RFUklWCi0JCQlwcmludGYoImxvb3BzIG1pbiBtaXNtYXRjaCAxID0+IGZvcmJpZGRlbiA/Pz9cbiIpOwotI2VuZGlmCiAJCSAgICAgICAgeG1sRXhwRnJlZShjdHh0LCB0bXApOwogCQkgICAgICAgIHJldHVybihmb3JiaWRkZW5FeHApOwogCQkgICAgfSBlbHNlIHsKQEAgLTc3NjUsOSArNzQ4MSw2IEBACiAJCSAgICB9CiAJCX0gZWxzZSB7CiAJCSAgICBpZiAoZXhwLT5leHBfbWF4ID09IC0xKSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJCXByaW50ZigiSW5maW5pdGUgbG9vcCBjb25zdW1lIGZpbml0ZSBsb29wXG4iKTsKLSNlbmRpZgogCQkgICAgICAgIGlmIChleHAtPmV4cF9taW4gPiBzdWItPmV4cF9taW4pIHsKIAkJCSAgICBtYXggPSAtMTsKIAkJCSAgICBtaW4gPSBleHAtPmV4cF9taW4gLSBzdWItPmV4cF9taW47CkBAIC03Nzc3LDkgKzc0OTAsNiBAQAogCQkJfQogCQkgICAgfSBlbHNlIHsKIAkJICAgICAgICBpZiAoZXhwLT5leHBfbWF4IDwgc3ViLT5leHBfbWF4KSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQkJCSAgICBwcmludGYoImxvb3BzIG1heCBtaXNtYXRjaCA9PiBmb3JiaWRkZW5cbiIpOwotI2VuZGlmCiAJCQkgICAgeG1sRXhwRnJlZShjdHh0LCB0bXApOwogCQkJICAgIHJldHVybihmb3JiaWRkZW5FeHApOwogCQkJfQpAQCAtNzc5MCw5ICs3NTAwLDYgQEAKIAkJCW1heCA9IGV4cC0+ZXhwX21heCAtIHN1Yi0+ZXhwX21heDsKIAkJICAgIH0KIAkJfQotI2lmZGVmIERFQlVHX0RFUklWCi0JCXByaW50ZigibG9vcHMgbWF0Y2ggPT4gU0VRKENPVU5UKCkpXG4iKTsKLSNlbmRpZgogCQlleHAtPmV4cF9sZWZ0LT5yZWYrKzsKIAkJdG1wMiA9IHhtbEV4cEhhc2hHZXRFbnRyeShjdHh0LCBYTUxfRVhQX0NPVU5ULCBleHAtPmV4cF9sZWZ0LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG1pbiwgbWF4KTsKQEAgLTc4MDcsOSArNzUxNCw2IEBACiAJICAgIGlmICh0bXAgPT0gTlVMTCkKIAkJcmV0dXJuKE5VTEwpOwogCSAgICBpZiAodG1wID09IGZvcmJpZGRlbkV4cCkgewotI2lmZGVmIERFQlVHX0RFUklWCi0JCXByaW50ZigibG9vcCBtaXNtYXRjaCA9PiBmb3JiaWRkZW5cbiIpOwotI2VuZGlmCiAJCXJldHVybihmb3JiaWRkZW5FeHApOwogCSAgICB9CiAJICAgIGlmIChleHAtPmV4cF9taW4gPiAwKQpAQCAtNzgyMSw5ICs3NTI1LDYgQEAKIAkgICAgZWxzZQogCQltYXggPSBleHAtPmV4cF9tYXggLSAxOwogCi0jaWZkZWYgREVCVUdfREVSSVYKLQkgICAgcHJpbnRmKCJsb29wIG1hdGNoID0+IFNFUShDT1VOVCgpKVxuIik7Ci0jZW5kaWYKIAkgICAgZXhwLT5leHBfbGVmdC0+cmVmKys7CiAJICAgIHRtcDIgPSB4bWxFeHBIYXNoR2V0RW50cnkoY3R4dCwgWE1MX0VYUF9DT1VOVCwgZXhwLT5leHBfbGVmdCwKIAkJCQkgICAgICBOVUxMLCBOVUxMLCBtaW4sIG1heCk7CkBAIC03ODM1LDkgKzc1MzYsNiBAQAogCX0KICAgICB9CiAKLSNpZmRlZiBERUJVR19ERVJJVgotICAgIHByaW50ZigiRmFsbGJhY2sgdG8gZGVyaXZhdGl2ZVxuIik7Ci0jZW5kaWYKICAgICBpZiAoSVNfTklMTEFCTEUoc3ViKSkgewogICAgICAgICBpZiAoIShJU19OSUxMQUJMRShleHApKSkKIAkgICAgcmV0dXJuKGZvcmJpZGRlbkV4cCk7CkBAIC03OTM1LDE1ICs3NjMzLDkgQEAKICAgICAgKiBPKDEpIHNwZWVkdXBzCiAgICAgICovCiAgICAgaWYgKElTX05JTExBQkxFKHN1YikgJiYgKCFJU19OSUxMQUJMRShleHApKSkgewotI2lmZGVmIERFQlVHX0RFUklWCi0JcHJpbnRmKCJTdWIgbmlsbGFibGUgYW5kIG5vdCBleHAgOiBjYW4ndCBzdWJzdW1lXG4iKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4oZm9yYmlkZGVuRXhwKTsKICAgICB9CiAgICAgaWYgKHhtbEV4cENoZWNrQ2FyZChleHAsIHN1YikgPT0gMCkgewotI2lmZGVmIERFQlVHX0RFUklWCi0JcHJpbnRmKCJzdWIgZ2VuZXJhdGUgbG9uZ2VyIHNlcXVlbmNlcyB0aGFuIGV4cCA6IGNhbid0IHN1YnN1bWVcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybihmb3JiaWRkZW5FeHApOwogICAgIH0KICAgICByZXR1cm4oeG1sRXhwRXhwRGVyaXZlSW50KGN0eHQsIGV4cCwgc3ViKSk7CkBAIC03OTc1LDIyICs3NjY3LDEyIEBACiAgICAgICogTygxKSBzcGVlZHVwcwogICAgICAqLwogICAgIGlmIChJU19OSUxMQUJMRShzdWIpICYmICghSVNfTklMTEFCTEUoZXhwKSkpIHsKLSNpZmRlZiBERUJVR19ERVJJVgotCXByaW50ZigiU3ViIG5pbGxhYmxlIGFuZCBub3QgZXhwIDogY2FuJ3Qgc3Vic3VtZVxuIik7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuKDApOwogICAgIH0KICAgICBpZiAoeG1sRXhwQ2hlY2tDYXJkKGV4cCwgc3ViKSA9PSAwKSB7Ci0jaWZkZWYgREVCVUdfREVSSVYKLQlwcmludGYoInN1YiBnZW5lcmF0ZSBsb25nZXIgc2VxdWVuY2VzIHRoYW4gZXhwIDogY2FuJ3Qgc3Vic3VtZVxuIik7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuKDApOwogICAgIH0KICAgICB0bXAgPSB4bWxFeHBFeHBEZXJpdmVJbnQoY3R4dCwgZXhwLCBzdWIpOwotI2lmZGVmIERFQlVHX0RFUklWCi0gICAgcHJpbnRmKCJSZXN1bHQgZGVyaXZhdGlvbiA6XG4iKTsKLSAgICBQUklOVF9FWFAodG1wKTsKLSNlbmRpZgogICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICBpZiAodG1wID09IGZvcmJpZGRlbkV4cCkKZGlmZiAtLWdpdCBhL3htbHNhdmUuYyBiL3htbHNhdmUuYwppbmRleCA5YjQyYzY2Li4xMjU4NTNmIDEwMDY0NAotLS0gYS94bWxzYXZlLmMKKysrIGIveG1sc2F2ZS5jCkBAIC0xOSw1NyArMTksMTUgQEAKIAogI2luY2x1ZGUgPGxpYnhtbC9IVE1MdHJlZS5oPgogCi0jaW5jbHVkZSAiYnVmLmgiCi0jaW5jbHVkZSAiZW5jLmgiCi0jaW5jbHVkZSAic2F2ZS5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQkJCQkJCSoKLSAqCQkJWEhUTUwgZGV0ZWN0aW9uCQkJCQkqCi0gKgkJCQkJCQkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhIVE1MX1NUUklDVF9QVUJMSUNfSUQgQkFEX0NBU1QgXAotICAgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgotI2RlZmluZSBYSFRNTF9TVFJJQ1RfU1lTVEVNX0lEIEJBRF9DQVNUIFwKLSAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIgotI2RlZmluZSBYSFRNTF9GUkFNRV9QVUJMSUNfSUQgQkFEX0NBU1QgXAotICAgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iCi0jZGVmaW5lIFhIVE1MX0ZSQU1FX1NZU1RFTV9JRCBCQURfQ0FTVCBcCi0gICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtZnJhbWVzZXQuZHRkIgotI2RlZmluZSBYSFRNTF9UUkFOU19QVUJMSUNfSUQgQkFEX0NBU1QgXAotICAgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotI2RlZmluZSBYSFRNTF9UUkFOU19TWVNURU1fSUQgQkFEX0NBU1QgXAotICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiCi0KLSNkZWZpbmUgWEhUTUxfTlNfTkFNRSBCQURfQ0FTVCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKLS8qKgotICogeG1sSXNYSFRNTDoKLSAqIEBzeXN0ZW1JRDogIHRoZSBzeXN0ZW0gaWRlbnRpZmllcgotICogQHB1YmxpY0lEOiAgdGhlIHB1YmxpYyBpZGVudGlmaWVyCi0gKgotICogVHJ5IHRvIGZpbmQgaWYgdGhlIGRvY3VtZW50IGNvcnJlc3BvbmQgdG8gYW4gWEhUTUwgRFRECi0gKgotICogUmV0dXJucyAxIGlmIHRydWUsIDAgaWYgbm90IGFuZCAtMSBpbiBjYXNlIG9mIGVycm9yCi0gKi8KLWludAoteG1sSXNYSFRNTChjb25zdCB4bWxDaGFyICpzeXN0ZW1JRCwgY29uc3QgeG1sQ2hhciAqcHVibGljSUQpIHsKLSAgICBpZiAoKHN5c3RlbUlEID09IE5VTEwpICYmIChwdWJsaWNJRCA9PSBOVUxMKSkKLQlyZXR1cm4oLTEpOwotICAgIGlmIChwdWJsaWNJRCAhPSBOVUxMKSB7Ci0JaWYgKHhtbFN0ckVxdWFsKHB1YmxpY0lELCBYSFRNTF9TVFJJQ1RfUFVCTElDX0lEKSkgcmV0dXJuKDEpOwotCWlmICh4bWxTdHJFcXVhbChwdWJsaWNJRCwgWEhUTUxfRlJBTUVfUFVCTElDX0lEKSkgcmV0dXJuKDEpOwotCWlmICh4bWxTdHJFcXVhbChwdWJsaWNJRCwgWEhUTUxfVFJBTlNfUFVCTElDX0lEKSkgcmV0dXJuKDEpOwotICAgIH0KLSAgICBpZiAoc3lzdGVtSUQgIT0gTlVMTCkgewotCWlmICh4bWxTdHJFcXVhbChzeXN0ZW1JRCwgWEhUTUxfU1RSSUNUX1NZU1RFTV9JRCkpIHJldHVybigxKTsKLQlpZiAoeG1sU3RyRXF1YWwoc3lzdGVtSUQsIFhIVE1MX0ZSQU1FX1NZU1RFTV9JRCkpIHJldHVybigxKTsKLQlpZiAoeG1sU3RyRXF1YWwoc3lzdGVtSUQsIFhIVE1MX1RSQU5TX1NZU1RFTV9JRCkpIHJldHVybigxKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQorI2luY2x1ZGUgInByaXZhdGUvYnVmLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9lbmMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9zYXZlLmgiCiAKICNpZmRlZiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQKIAorI2RlZmluZSBYSFRNTF9OU19OQU1FIEJBRF9DQVNUICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCiAjZGVmaW5lIFRPRE8JCQkJCQkJCVwKICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwJCQkJXAogCSAgICAiVW5pbXBsZW1lbnRlZCBibG9jayBhdCAlczolZFxuIiwJCQkJXApAQCAtNDYzLDcgKzQyMSw3IEBACiAgKgogICogVGhpcyB3aWxsIGR1bXAgdGhlIGNvbnRlbnQgb2YgdGhlIG5vdGF0aW9uIHRhYmxlIGFzIGFuIFhNTCBEVEQgZGVmaW5pdGlvbgogICovCi12b2lkCitzdGF0aWMgdm9pZAogeG1sQnVmRHVtcE5vdGF0aW9uVGFibGUoeG1sQnVmUHRyIGJ1ZiwgeG1sTm90YXRpb25UYWJsZVB0ciB0YWJsZSkgewogICAgIHhtbEJ1ZmZlclB0ciBidWZmZXI7CiAKQEAgLTQ4Nyw3ICs0NDUsNyBAQAogICogVGhpcyB3aWxsIGR1bXAgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQgZGVjbGFyYXRpb24gYXMgYW4gWE1MCiAgKiBEVEQgZGVmaW5pdGlvbgogICovCi12b2lkCitzdGF0aWMgdm9pZAogeG1sQnVmRHVtcEVsZW1lbnREZWNsKHhtbEJ1ZlB0ciBidWYsIHhtbEVsZW1lbnRQdHIgZWxlbSkgewogICAgIHhtbEJ1ZmZlclB0ciBidWZmZXI7CiAKQEAgLTUxMSw3ICs0NjksNyBAQAogICogVGhpcyB3aWxsIGR1bXAgdGhlIGNvbnRlbnQgb2YgdGhlIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBhcyBhbiBYTUwKICAqIERURCBkZWZpbml0aW9uCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiB4bWxCdWZEdW1wQXR0cmlidXRlRGVjbCh4bWxCdWZQdHIgYnVmLCB4bWxBdHRyaWJ1dGVQdHIgYXR0cikgewogICAgIHhtbEJ1ZmZlclB0ciBidWZmZXI7CiAKQEAgLTUzNCw3ICs0OTIsNyBAQAogICoKICAqIFRoaXMgd2lsbCBkdW1wIHRoZSBjb250ZW50IG9mIHRoZSBlbnRpdHkgdGFibGUgYXMgYW4gWE1MIERURCBkZWZpbml0aW9uCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiB4bWxCdWZEdW1wRW50aXR5RGVjbCh4bWxCdWZQdHIgYnVmLCB4bWxFbnRpdHlQdHIgZW50KSB7CiAgICAgeG1sQnVmZmVyUHRyIGJ1ZmZlcjsKIApAQCAtNTk1LDcgKzU1Myw2IEBACiB4aHRtbE5vZGVEdW1wT3V0cHV0KHhtbFNhdmVDdHh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgY3VyKTsKICNlbmRpZgogc3RhdGljIHZvaWQgeG1sTm9kZUR1bXBPdXRwdXRJbnRlcm5hbCh4bWxTYXZlQ3R4dFB0ciBjdHh0LCB4bWxOb2RlUHRyIGN1cik7Ci12b2lkIHhtbE5zTGlzdER1bXBPdXRwdXQoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwgeG1sTnNQdHIgY3VyKTsKIHN0YXRpYyBpbnQgeG1sRG9jQ29udGVudER1bXBPdXRwdXQoeG1sU2F2ZUN0eHRQdHIgY3R4dCwgeG1sRG9jUHRyIGN1cik7CiAKIC8qKgpAQCAtMTg5MCw3ICsxODQ3LDcgQEAKIC8qKgogICogeG1sU2F2ZVRyZWU6CiAgKiBAY3R4dDogIGEgZG9jdW1lbnQgc2F2aW5nIGNvbnRleHQKLSAqIEBub2RlOiAgdGhlIHRvcCBub2RlIG9mIHRoZSBzdWJ0cmVlIHRvIHNhdmUKKyAqIEBjdXI6ICB0aGUgdG9wIG5vZGUgb2YgdGhlIHN1YnRyZWUgdG8gc2F2ZQogICoKICAqIFNhdmUgYSBzdWJ0cmVlIHN0YXJ0aW5nIGF0IHRoZSBub2RlIHBhcmFtZXRlciB0byBhIHNhdmluZyBjb250ZXh0CiAgKiBUT0RPOiBUaGUgZnVuY3Rpb24gaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIHlldCBhcyBpdCBkb2VzIG5vdCByZXR1cm4gdGhlCkBAIC0yMTc4LDcgKzIxMzUsNyBAQAogICAgIHhtbEJ1ZkJhY2tUb0J1ZmZlcihidWZmZXIpOwogICAgIGlmIChyZXQgPiBJTlRfTUFYKQogICAgICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybigoaW50KSByZXQpOworICAgIHJldHVybihyZXQpOwogfQogCiAvKioKQEAgLTIyMDksMTcgKzIxNjYsOSBAQAogICAgIHhtbEluaXRQYXJzZXIoKTsKIAogICAgIGlmIChjdXIgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAieG1sTm9kZUR1bXAgOiBub2RlID09IE5VTExcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiAoLTEpOwogICAgIH0KICAgICBpZiAoYnVmID09IE5VTEwpIHsKLSNpZmRlZiBERUJVR19UUkVFCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgInhtbE5vZGVEdW1wIDogYnVmID09IE5VTExcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiAoLTEpOwogICAgIH0KICAgICBvdXRidWYgPSAoeG1sT3V0cHV0QnVmZmVyUHRyKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbE91dHB1dEJ1ZmZlcikpOwpAQCAtMjI2MSwxOCArMjIxMCw4IEBACiAgICAgeG1sSW5pdFBhcnNlcigpOwogCiAgICAgaWYgKGN1ciA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfVFJFRQotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxFbGVtRHVtcCA6IGN1ciA9PSBOVUxMXG4iKTsKLSNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQotI2lmZGVmIERFQlVHX1RSRUUKLSAgICBpZiAoZG9jID09IE5VTEwpIHsKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAieG1sRWxlbUR1bXAgOiBkb2MgPT0gTlVMTFxuIik7Ci0gICAgfQotI2VuZGlmCiAKICAgICBvdXRidWYgPSB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlKGYsIE5VTEwpOwogICAgIGlmIChvdXRidWYgPT0gTlVMTCkKQEAgLTIzMTcsNiArMjI1Niw4IEBACiAgICAgaW50IGlzX3hodG1sID0gMDsKICNlbmRpZgogCisgICAgKHZvaWQpIGRvYzsKKwogICAgIHhtbEluaXRQYXJzZXIoKTsKIAogICAgIGlmICgoYnVmID09IE5VTEwpIHx8IChjdXIgPT0gTlVMTCkpIHJldHVybjsKQEAgLTI0MDYsNiArMjM0Nyw3IEBACiAKICAgICBpZiAoKG91dF9idWZmID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoY29udl9oZGxyKSkgPT0gTlVMTCApIHsKICAgICAgICAgeG1sU2F2ZUVyck1lbW9yeSgiY3JlYXRpbmcgYnVmZmVyIik7CisgICAgICAgIHhtbENoYXJFbmNDbG9zZUZ1bmMoY29udl9oZGxyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjUwOSwxMCArMjQ1MSw2IEBACiAgICAgaW50IHJldDsKIAogICAgIGlmIChjdXIgPT0gTlVMTCkgewotI2lmZGVmIERFQlVHX1RSRUUKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJ4bWxEb2NEdW1wIDogZG9jdW1lbnQgPT0gTlVMTFxuIik7Ci0jZW5kaWYKIAlyZXR1cm4oLTEpOwogICAgIH0KICAgICBlbmNvZGluZyA9IChjb25zdCBjaGFyICopIGN1ci0+ZW5jb2Rpbmc7CmRpZmYgLS1naXQgYS94bWxzY2hlbWFzLmMgYi94bWxzY2hlbWFzLmMKaW5kZXggZjMxZDNkMS4uZDI3NmZhZiAxMDA2NDQKLS0tIGEveG1sc2NoZW1hcy5jCisrKyBiL3htbHNjaGVtYXMuYwpAQCAtNzYsMjggKzc2LDExIEBACiAjaW5jbHVkZSA8bGlieG1sL3htbHJlYWRlci5oPgogI2VuZGlmCiAKLS8qICNkZWZpbmUgREVCVUcgMSAqLwotCi0vKiAjZGVmaW5lIERFQlVHX0NPTlRFTlQgMSAqLwotCi0vKiAjZGVmaW5lIERFQlVHX1RZUEUgMSAqLwotCi0vKiAjZGVmaW5lIERFQlVHX0NPTlRFTlRfUkVHRVhQIDEgKi8KLQotLyogI2RlZmluZSBERUJVR19BVVRPTUFUQSAxICovCi0KLS8qICNkZWZpbmUgREVCVUdfSURDICovCi0KLS8qICNkZWZpbmUgREVCVUdfSURDX05PREVfVEFCTEUgKi8KKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9zdHJpbmcuaCIKIAogLyogI2RlZmluZSBXWFNfRUxFTV9ERUNMX0NPTlNfRU5BQkxFRCAqLwogCi0jaWZkZWYgREVCVUdfSURDCi0gI2lmbmRlZiBERUJVR19JRENfTk9ERV9UQUJMRQotICAjZGVmaW5lIERFQlVHX0lEQ19OT0RFX1RBQkxFCi0gI2VuZGlmCi0jZW5kaWYKLQogLyogI2RlZmluZSBFTkFCTEVfUEFSVElDTEVfUkVTVFJJQ1RJT04gMSAqLwogCiAjZGVmaW5lIEVOQUJMRV9SRURFRklORQpAQCAtMzA1LDEwICsyODgsMjAgQEAKICNkZWZpbmUgV1hTX1NDSEVNQShjdHgpIChjdHgpLT5zY2hlbWEKIAogI2RlZmluZSBXWFNfQUREX0xPQ0FMKGN0eCwgaXRlbSkgXAotICAgIHhtbFNjaGVtYUFkZEl0ZW1TaXplKCYoV1hTX0JVQ0tFVChjdHgpLT5sb2NhbHMpLCAxMCwgaXRlbSkKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKHhtbFNjaGVtYUFkZEl0ZW1TaXplKCYoV1hTX0JVQ0tFVChjdHgpLT5sb2NhbHMpLCAxMCwgaXRlbSkgPCAwKSB7IFwKKyAgICAgICAgICAgIHhtbEZyZWUoaXRlbSk7IFwKKyAgICAgICAgICAgIGl0ZW0gPSBOVUxMOyBcCisgICAgICAgIH0gXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgV1hTX0FERF9HTE9CQUwoY3R4LCBpdGVtKSBcCi0gICAgeG1sU2NoZW1hQWRkSXRlbVNpemUoJihXWFNfQlVDS0VUKGN0eCktPmdsb2JhbHMpLCA1LCBpdGVtKQorICAgIGRvIHsgXAorICAgICAgICBpZiAoeG1sU2NoZW1hQWRkSXRlbVNpemUoJihXWFNfQlVDS0VUKGN0eCktPmdsb2JhbHMpLCA1LCBpdGVtKSA8IDApIHsgXAorICAgICAgICAgICAgeG1sRnJlZShpdGVtKTsgXAorICAgICAgICAgICAgaXRlbSA9IE5VTEw7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBXWFNfQUREX1BFTkRJTkcoY3R4LCBpdGVtKSBcCiAgICAgeG1sU2NoZW1hQWRkSXRlbVNpemUoJigoY3R4KS0+Y29uc3RydWN0b3ItPnBlbmRpbmcpLCAxMCwgaXRlbSkKQEAgLTIxMzAsOCArMjEyMywxNCBAQAogCQkgICAgKHZjdHh0LT5wYXJzZXJDdHh0ICE9IE5VTEwpICYmCiAJCSAgICAodmN0eHQtPnBhcnNlckN0eHQtPmlucHV0ICE9IE5VTEwpKSB7CiAJCSAgICBmaWxlID0gdmN0eHQtPnBhcnNlckN0eHQtPmlucHV0LT5maWxlbmFtZTsKLQkJICAgIGxpbmUgPSB2Y3R4dC0+cGFyc2VyQ3R4dC0+aW5wdXQtPmxpbmU7Ci0JCSAgICBjb2wgPSB2Y3R4dC0+cGFyc2VyQ3R4dC0+aW5wdXQtPmNvbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZjdHh0LT5pbm9kZSAhPSBOVUxMKSB7CisJCSAgICAgICAgbGluZSA9IHZjdHh0LT5pbm9kZS0+bm9kZUxpbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBpbmFjY3VyYXRlLiAqLworCQkgICAgICAgIGxpbmUgPSB2Y3R4dC0+cGFyc2VyQ3R4dC0+aW5wdXQtPmxpbmU7CisJCSAgICAgICAgY29sID0gdmN0eHQtPnBhcnNlckN0eHQtPmlucHV0LT5jb2w7CisgICAgICAgICAgICAgICAgICAgIH0KIAkJfQogCSAgICB9IGVsc2UgewogCQkvKgpAQCAtMzQwNywyMyArMzQwNiwxNyBAQAogc3RhdGljIGludAogeG1sU2NoZW1hSXRlbUxpc3RBZGQoeG1sU2NoZW1hSXRlbUxpc3RQdHIgbGlzdCwgdm9pZCAqaXRlbSkKIHsKLSAgICBpZiAobGlzdC0+aXRlbXMgPT0gTlVMTCkgewotCWxpc3QtPml0ZW1zID0gKHZvaWQgKiopIHhtbE1hbGxvYygKLQkgICAgMjAgKiBzaXplb2Yodm9pZCAqKSk7Ci0JaWYgKGxpc3QtPml0ZW1zID09IE5VTEwpIHsKLQkgICAgeG1sU2NoZW1hUEVyck1lbW9yeShOVUxMLCAiYWxsb2NhdGluZyBuZXcgaXRlbSBsaXN0IiwgTlVMTCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWxpc3QtPnNpemVJdGVtcyA9IDIwOwotICAgIH0gZWxzZSBpZiAobGlzdC0+c2l6ZUl0ZW1zIDw9IGxpc3QtPm5iSXRlbXMpIHsKLQlsaXN0LT5zaXplSXRlbXMgKj0gMjsKLQlsaXN0LT5pdGVtcyA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLAotCSAgICBsaXN0LT5zaXplSXRlbXMgKiBzaXplb2Yodm9pZCAqKSk7Ci0JaWYgKGxpc3QtPml0ZW1zID09IE5VTEwpIHsKKyAgICBpZiAobGlzdC0+c2l6ZUl0ZW1zIDw9IGxpc3QtPm5iSXRlbXMpIHsKKyAgICAgICAgdm9pZCAqKnRtcDsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBsaXN0LT5zaXplSXRlbXMgPT0gMCA/IDIwIDogbGlzdC0+c2l6ZUl0ZW1zICogMjsKKworCXRtcCA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLCBuZXdTaXplICogc2l6ZW9mKHZvaWQgKikpOworCWlmICh0bXAgPT0gTlVMTCkgewogCSAgICB4bWxTY2hlbWFQRXJyTWVtb3J5KE5VTEwsICJncm93aW5nIGl0ZW0gbGlzdCIsIE5VTEwpOwotCSAgICBsaXN0LT5zaXplSXRlbXMgPSAwOwogCSAgICByZXR1cm4oLTEpOwogCX0KKyAgICAgICAgbGlzdC0+aXRlbXMgPSB0bXA7CisJbGlzdC0+c2l6ZUl0ZW1zID0gbmV3U2l6ZTsKICAgICB9CiAgICAgbGlzdC0+aXRlbXNbbGlzdC0+bmJJdGVtcysrXSA9IGl0ZW07CiAgICAgcmV0dXJuKDApOwpAQCAtMzQ0NSwxNCArMzQzOCwxNyBAQAogCX0KIAlsaXN0LT5zaXplSXRlbXMgPSBpbml0aWFsU2l6ZTsKICAgICB9IGVsc2UgaWYgKGxpc3QtPnNpemVJdGVtcyA8PSBsaXN0LT5uYkl0ZW1zKSB7CisgICAgICAgIHZvaWQgKip0bXA7CisKIAlsaXN0LT5zaXplSXRlbXMgKj0gMjsKLQlsaXN0LT5pdGVtcyA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLAorCXRtcCA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLAogCSAgICBsaXN0LT5zaXplSXRlbXMgKiBzaXplb2Yodm9pZCAqKSk7Ci0JaWYgKGxpc3QtPml0ZW1zID09IE5VTEwpIHsKKwlpZiAodG1wID09IE5VTEwpIHsKIAkgICAgeG1sU2NoZW1hUEVyck1lbW9yeShOVUxMLCAiZ3Jvd2luZyBpdGVtIGxpc3QiLCBOVUxMKTsKLQkgICAgbGlzdC0+c2l6ZUl0ZW1zID0gMDsKKwkgICAgbGlzdC0+c2l6ZUl0ZW1zIC89IDI7CiAJICAgIHJldHVybigtMSk7CiAJfQorICAgICAgICBsaXN0LT5pdGVtcyA9IHRtcDsKICAgICB9CiAgICAgbGlzdC0+aXRlbXNbbGlzdC0+bmJJdGVtcysrXSA9IGl0ZW07CiAgICAgcmV0dXJuKDApOwpAQCAtMzQ2MSwyMyArMzQ1NywxNyBAQAogc3RhdGljIGludAogeG1sU2NoZW1hSXRlbUxpc3RJbnNlcnQoeG1sU2NoZW1hSXRlbUxpc3RQdHIgbGlzdCwgdm9pZCAqaXRlbSwgaW50IGlkeCkKIHsKLSAgICBpZiAobGlzdC0+aXRlbXMgPT0gTlVMTCkgewotCWxpc3QtPml0ZW1zID0gKHZvaWQgKiopIHhtbE1hbGxvYygKLQkgICAgMjAgKiBzaXplb2Yodm9pZCAqKSk7Ci0JaWYgKGxpc3QtPml0ZW1zID09IE5VTEwpIHsKLQkgICAgeG1sU2NoZW1hUEVyck1lbW9yeShOVUxMLCAiYWxsb2NhdGluZyBuZXcgaXRlbSBsaXN0IiwgTlVMTCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWxpc3QtPnNpemVJdGVtcyA9IDIwOwotICAgIH0gZWxzZSBpZiAobGlzdC0+c2l6ZUl0ZW1zIDw9IGxpc3QtPm5iSXRlbXMpIHsKLQlsaXN0LT5zaXplSXRlbXMgKj0gMjsKLQlsaXN0LT5pdGVtcyA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLAotCSAgICBsaXN0LT5zaXplSXRlbXMgKiBzaXplb2Yodm9pZCAqKSk7Ci0JaWYgKGxpc3QtPml0ZW1zID09IE5VTEwpIHsKKyAgICBpZiAobGlzdC0+c2l6ZUl0ZW1zIDw9IGxpc3QtPm5iSXRlbXMpIHsKKyAgICAgICAgdm9pZCAqKnRtcDsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBsaXN0LT5zaXplSXRlbXMgPT0gMCA/IDIwIDogbGlzdC0+c2l6ZUl0ZW1zICogMjsKKworCXRtcCA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLCBuZXdTaXplICogc2l6ZW9mKHZvaWQgKikpOworCWlmICh0bXAgPT0gTlVMTCkgewogCSAgICB4bWxTY2hlbWFQRXJyTWVtb3J5KE5VTEwsICJncm93aW5nIGl0ZW0gbGlzdCIsIE5VTEwpOwotCSAgICBsaXN0LT5zaXplSXRlbXMgPSAwOwogCSAgICByZXR1cm4oLTEpOwogCX0KKyAgICAgICAgbGlzdC0+aXRlbXMgPSB0bXA7CisJbGlzdC0+c2l6ZUl0ZW1zID0gbmV3U2l6ZTsKICAgICB9CiAgICAgLyoKICAgICAqIEp1c3QgYXBwZW5kIGlmIHRoZSBpbmRleCBpcyBncmVhdGVyL2VxdWFsIHRoYW4gdGhlIGl0ZW0gY291bnQuCkBAIC0zNjQ1LDEyICszNjM1LDEyIEBACiAgICAgcmV0LT50eXBlID0gdHlwZTsKICAgICByZXQtPmdsb2JhbHMgPSB4bWxTY2hlbWFJdGVtTGlzdENyZWF0ZSgpOwogICAgIGlmIChyZXQtPmdsb2JhbHMgPT0gTlVMTCkgewotCXhtbEZyZWUocmV0KTsKKwl4bWxTY2hlbWFCdWNrZXRGcmVlKHJldCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICByZXQtPmxvY2FscyA9IHhtbFNjaGVtYUl0ZW1MaXN0Q3JlYXRlKCk7CiAgICAgaWYgKHJldC0+bG9jYWxzID09IE5VTEwpIHsKLQl4bWxGcmVlKHJldCk7CisJeG1sU2NoZW1hQnVja2V0RnJlZShyZXQpOwogCXJldHVybihOVUxMKTsKICAgICB9CiAgICAgLyoKQEAgLTM3MzksNyArMzcyOSwxMCBAQAogCQlyZXR1cm4oTlVMTCk7CiAJICAgIH0KIAl9Ci0JeG1sU2NoZW1hSXRlbUxpc3RBZGQobWFpblNjaGVtYS0+aW5jbHVkZXMsIHJldCk7CisJaWYgKHhtbFNjaGVtYUl0ZW1MaXN0QWRkKG1haW5TY2hlbWEtPmluY2x1ZGVzLCByZXQpIDwgMCkgeworCSAgICB4bWxTY2hlbWFCdWNrZXRGcmVlKHJldCk7CisJICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgfQogICAgIH0KICAgICAvKgogICAgICogQWRkIHRvIGxpc3Qgb2YgYWxsIGJ1Y2tldHM7IHRoaXMgaXMgdXNlZCBmb3IgbG9va3VwCkBAIC0zNzU4LDggKzM3NTEsNyBAQAogCWlmICgqbGlzdCA9PSBOVUxMKQogCSAgICByZXR1cm4oLTEpOwogICAgIH0KLSAgICB4bWxTY2hlbWFJdGVtTGlzdEFkZFNpemUoKmxpc3QsIGluaXRpYWxTaXplLCBpdGVtKTsKLSAgICByZXR1cm4oMCk7CisgICAgcmV0dXJuKHhtbFNjaGVtYUl0ZW1MaXN0QWRkU2l6ZSgqbGlzdCwgaW5pdGlhbFNpemUsIGl0ZW0pKTsKIH0KIAogLyoqCkBAIC0zNzk3LDYgKzM3ODksOCBAQAogewogICAgIGlmIChub3RhID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAobm90YS0+YW5ub3QgIT0gTlVMTCkKKwl4bWxTY2hlbWFGcmVlQW5ub3Qobm90YS0+YW5ub3QpOwogICAgIHhtbEZyZWUobm90YSk7CiB9CiAKQEAgLTQ2MDYsODMgKzQ2MDAsNiBAQAogICAgIHhtbEhhc2hTY2FuRnVsbChzY2hlbWEtPmVsZW1EZWNsLCB4bWxTY2hlbWFFbGVtZW50RHVtcCwgb3V0cHV0KTsKIH0KIAotI2lmZGVmIERFQlVHX0lEQ19OT0RFX1RBQkxFCi0vKioKLSAqIHhtbFNjaGVtYURlYnVnRHVtcElEQ1RhYmxlOgotICogQHZjdHh0OiB0aGUgV1hTIHZhbGlkYXRpb24gY29udGV4dAotICoKLSAqIERpc3BsYXlzIHRoZSBjdXJyZW50IElEQyB0YWJsZSBmb3IgZGVidWcgcHVycG9zZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi14bWxTY2hlbWFEZWJ1Z0R1bXBJRENUYWJsZShGSUxFICogb3V0cHV0LAotCQkJICAgY29uc3QgeG1sQ2hhciAqbmFtZXNwYWNlTmFtZSwKLQkJCSAgIGNvbnN0IHhtbENoYXIgKmxvY2FsTmFtZSwKLQkJCSAgIHhtbFNjaGVtYVBTVklJRENCaW5kaW5nUHRyIGJpbmQpCi17Ci0gICAgeG1sQ2hhciAqc3RyID0gTlVMTDsKLSAgICBjb25zdCB4bWxDaGFyICp2YWx1ZTsKLSAgICB4bWxTY2hlbWFQU1ZJSURDTm9kZVB0ciB0YWI7Ci0gICAgeG1sU2NoZW1hUFNWSUlEQ0tleVB0ciBrZXk7Ci0gICAgaW50IGksIGosIHJlczsKLQotICAgIGZwcmludGYob3V0cHV0LCAiSURDOiBUQUJMRVMgb24gJyVzJ1xuIiwKLQl4bWxTY2hlbWFGb3JtYXRRTmFtZSgmc3RyLCBuYW1lc3BhY2VOYW1lLCBsb2NhbE5hbWUpKTsKLSAgICBGUkVFX0FORF9OVUxMKHN0cikKLQotICAgIGlmIChiaW5kID09IE5VTEwpCi0JcmV0dXJuOwotICAgIGRvIHsKLQlmcHJpbnRmKG91dHB1dCwgIklEQzogICBCSU5ESU5HICclcycgKCVkKVxuIiwKLQkgICAgeG1sU2NoZW1hR2V0Q29tcG9uZW50UU5hbWUoJnN0ciwKLQkJYmluZC0+ZGVmaW5pdGlvbiksIGJpbmQtPm5iTm9kZXMpOwotCUZSRUVfQU5EX05VTEwoc3RyKQotCWZvciAoaSA9IDA7IGkgPCBiaW5kLT5uYk5vZGVzOyBpKyspIHsKLQkgICAgdGFiID0gYmluZC0+bm9kZVRhYmxlW2ldOwotCSAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAgICAgICggIik7Ci0JICAgIGZvciAoaiA9IDA7IGogPCBiaW5kLT5kZWZpbml0aW9uLT5uYkZpZWxkczsgaisrKSB7Ci0JCWtleSA9IHRhYi0+a2V5c1tqXTsKLQkJaWYgKChrZXkgIT0gTlVMTCkgJiYgKGtleS0+dmFsICE9IE5VTEwpKSB7Ci0JCSAgICByZXMgPSB4bWxTY2hlbWFHZXRDYW5vblZhbHVlKGtleS0+dmFsLCAmdmFsdWUpOwotCQkgICAgaWYgKHJlcyA+PSAwKQotCQkJZnByaW50ZihvdXRwdXQsICInJXMnICIsIHZhbHVlKTsKLQkJICAgIGVsc2UKLQkJCWZwcmludGYob3V0cHV0LCAiQ0FOT04tVkFMVUUtRkFJTEVEICIpOwotCQkgICAgaWYgKHJlcyA9PSAwKQotCQkJRlJFRV9BTkRfTlVMTCh2YWx1ZSkKLQkJfSBlbHNlIGlmIChrZXkgIT0gTlVMTCkKLQkJICAgIGZwcmludGYob3V0cHV0LCAiKG5vIHZhbCksICIpOwotCQllbHNlCi0JCSAgICBmcHJpbnRmKG91dHB1dCwgIihrZXkgbWlzc2luZyksICIpOwotCSAgICB9Ci0JICAgIGZwcmludGYob3V0cHV0LCAiKVxuIik7Ci0JfQotCWlmIChiaW5kLT5kdXBscyAmJiBiaW5kLT5kdXBscy0+bmJJdGVtcykgewotCSAgICBmcHJpbnRmKG91dHB1dCwgIklEQzogICAgIGR1cGxzICglZCk6XG4iLCBiaW5kLT5kdXBscy0+bmJJdGVtcyk7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBiaW5kLT5kdXBscy0+bmJJdGVtczsgaSsrKSB7Ci0JCXRhYiA9IGJpbmQtPmR1cGxzLT5pdGVtc1tpXTsKLQkJZnByaW50ZihvdXRwdXQsICIgICAgICAgICAoICIpOwotCQlmb3IgKGogPSAwOyBqIDwgYmluZC0+ZGVmaW5pdGlvbi0+bmJGaWVsZHM7IGorKykgewotCQkgICAga2V5ID0gdGFiLT5rZXlzW2pdOwotCQkgICAgaWYgKChrZXkgIT0gTlVMTCkgJiYgKGtleS0+dmFsICE9IE5VTEwpKSB7Ci0JCQlyZXMgPSB4bWxTY2hlbWFHZXRDYW5vblZhbHVlKGtleS0+dmFsLCAmdmFsdWUpOwotCQkJaWYgKHJlcyA+PSAwKQotCQkJICAgIGZwcmludGYob3V0cHV0LCAiJyVzJyAiLCB2YWx1ZSk7Ci0JCQllbHNlCi0JCQkgICAgZnByaW50ZihvdXRwdXQsICJDQU5PTi1WQUxVRS1GQUlMRUQgIik7Ci0JCQlpZiAocmVzID09IDApCi0JCQkgICAgRlJFRV9BTkRfTlVMTCh2YWx1ZSkKLQkJICAgIH0gZWxzZSBpZiAoa2V5ICE9IE5VTEwpCi0JCSAgICBmcHJpbnRmKG91dHB1dCwgIihubyB2YWwpLCAiKTsKLQkJCWVsc2UKLQkJCSAgICBmcHJpbnRmKG91dHB1dCwgIihrZXkgbWlzc2luZyksICIpOwotCQl9Ci0JCWZwcmludGYob3V0cHV0LCAiKVxuIik7Ci0JICAgIH0KLQl9Ci0JYmluZCA9IGJpbmQtPm5leHQ7Ci0gICAgfSB3aGlsZSAoYmluZCAhPSBOVUxMKTsKLX0KLSNlbmRpZiAvKiBERUJVR19JREMgKi8KICNlbmRpZiAvKiBMSUJYTUxfT1VUUFVUX0VOQUJMRUQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDc1Nyw2ICs0Njc0LDggQEAKIAl2YWwgPSB4bWxTdHJkdXAoKHhtbENoYXIgKikiIik7CiAgICAgcmV0ID0geG1sRGljdExvb2t1cChjdHh0LT5kaWN0LCB2YWwsIC0xKTsKICAgICB4bWxGcmVlKHZhbCk7CisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICB4bWxTY2hlbWFQRXJyTWVtb3J5KGN0eHQsICJnZXR0aW5nIG5vZGUgY29udGVudCIsIG5vZGUpOwogICAgIHJldHVybihyZXQpOwogfQogCkBAIC00ODM2LDE1ICs0NzU1LDYgQEAKIAlXWFNfRklORF9HTE9CQUxfSVRFTShlbGVtRGVjbCkKICAgICB9CiBleGl0OgotI2lmZGVmIERFQlVHCi0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChuc05hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvb2t1cCBlbGVtZW50IGRlY2wuICVzIiwgbmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvb2t1cCBlbGVtZW50IGRlY2wuICVzOiVzIiwgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgbnNOYW1lKTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gKHJldCk7CiB9CiAKQEAgLTQ4ODMsMTUgKzQ3OTMsNiBAQAogICAgIH0KIGV4aXQ6CiAKLSNpZmRlZiBERUJVRwotICAgIGlmIChyZXQgPT0gTlVMTCkgewotICAgICAgICBpZiAobnNOYW1lID09IE5VTEwpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBsb29rdXAgdHlwZSAlcyIsIG5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBsb29rdXAgdHlwZSAlczolcyIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG5zTmFtZSk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC00OTE3LDE1ICs0ODE4LDYgQEAKIAlXWFNfRklORF9HTE9CQUxfSVRFTShhdHRyRGVjbCkKICAgICB9CiBleGl0OgotI2lmZGVmIERFQlVHCi0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChuc05hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvb2t1cCBhdHRyaWJ1dGUgJXMiLCBuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gbG9va3VwIGF0dHJpYnV0ZSAlczolcyIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG5zTmFtZSk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC00OTU3LDE1ICs0ODQ5LDYgQEAKIAlyZXQgPSByZXQtPnJlZGVmOwogICAgIH0KICAgICAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChuc05hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvb2t1cCBhdHRyaWJ1dGUgZ3JvdXAgJXMiLCBuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gbG9va3VwIGF0dHJpYnV0ZSBncm91cCAlczolcyIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG5zTmFtZSk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC00OTkyLDE1ICs0ODc1LDYgQEAKICAgICB9CiBleGl0OgogCi0jaWZkZWYgREVCVUcKLSAgICBpZiAocmV0ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKG5zTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gbG9va3VwIGdyb3VwICVzIiwgbmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvb2t1cCBncm91cCAlczolcyIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG5zTmFtZSk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIChyZXQpOwogfQogCkBAIC01NTkwLDkgKzU0NjQsNiBAQAogICAgIGlmIChjdHh0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAKLSNpZmRlZiBERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAiQWRkaW5nIHBhcnRpY2xlIGNvbXBvbmVudFxuIik7Ci0jZW5kaWYKICAgICByZXQgPSAoeG1sU2NoZW1hUGFydGljbGVQdHIpCiAJeG1sTWFsbG9jKHNpemVvZih4bWxTY2hlbWFQYXJ0aWNsZSkpOwogICAgIGlmIChyZXQgPT0gTlVMTCkgewpAQCAtNjEwMCw2ICs1OTcxLDggQEAKICAgICBpZiAoYXR0ciA9PSBOVUxMKQogCXJldHVybiAoZGVmKTsKICAgICB2YWwgPSB4bWxTY2hlbWFHZXROb2RlQ29udGVudChjdHh0LCAoeG1sTm9kZVB0cikgYXR0cik7CisgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKGRlZik7CiAKICAgICBpZiAoeG1sU3RyRXF1YWwodmFsLCAoY29uc3QgeG1sQ2hhciAqKSAidW5ib3VuZGVkIikpIHsKIAlpZiAobWF4ICE9IFVOQk9VTkRFRCkgewpAQCAtNjE3NCw2ICs2MDQ3LDggQEAKICAgICBpZiAoYXR0ciA9PSBOVUxMKQogCXJldHVybiAoZGVmKTsKICAgICB2YWwgPSB4bWxTY2hlbWFHZXROb2RlQ29udGVudChjdHh0LCAoeG1sTm9kZVB0cikgYXR0cik7CisgICAgaWYgKHZhbCA9PSBOVUxMKQorCXJldHVybiAoZGVmKTsKICAgICBjdXIgPSB2YWw7CiAgICAgd2hpbGUgKElTX0JMQU5LX0NIKCpjdXIpKQogICAgICAgICBjdXIrKzsKQEAgLTY4NDYsNiArNjcyMSw4IEBACiAgICAgICovCiAgICAgYXR0ciA9IHhtbFNjaGVtYUdldFByb3BOb2RlKG5vZGUsICJuYW1lc3BhY2UiKTsKICAgICBucyA9IHhtbFNjaGVtYUdldE5vZGVDb250ZW50KGN0eHQsICh4bWxOb2RlUHRyKSBhdHRyKTsKKyAgICBpZiAobnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgaWYgKChhdHRyID09IE5VTEwpIHx8ICh4bWxTdHJFcXVhbChucywgQkFEX0NBU1QgIiMjYW55IikpKQogCXdpbGRjLT5hbnkgPSAxOwogICAgIGVsc2UgaWYgKHhtbFN0ckVxdWFsKG5zLCBCQURfQ0FTVCAiIyNvdGhlciIpKSB7CkBAIC04OTk0LDYgKzg4NzEsOCBAQAogCXhtbFNjaGVtYVFOYW1lUmVmUHRyIHJlZjsKIAogCWN1ciA9IHhtbFNjaGVtYUdldE5vZGVDb250ZW50KGN0eHQsICh4bWxOb2RlUHRyKSBhdHRyKTsKKyAgICAgICAgaWYgKGN1ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAJdHlwZS0+YmFzZSA9IGN1cjsKIAlkbyB7CiAJICAgIHdoaWxlIChJU19CTEFOS19DSCgqY3VyKSkKQEAgLTkwMDQsNiArODg4MywxMSBAQAogCSAgICBpZiAoZW5kID09IGN1cikKIAkJYnJlYWs7CiAJICAgIHRtcCA9IHhtbFN0cm5kdXAoY3VyLCBlbmQgLSBjdXIpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgeG1sU2NoZW1hUEVyck1lbW9yeShjdHh0LCAieG1sU2NoZW1hUGFyc2VVbmlvbiwgIgorICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRpbmcgdHlwZSBuYW1lIiwgTlVMTCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICB9CiAJICAgIGlmICh4bWxTY2hlbWFQVmFsQXR0ck5vZGVRTmFtZVZhbHVlKGN0eHQsIHNjaGVtYSwKIAkJTlVMTCwgYXR0ciwgQkFEX0NBU1QgdG1wLCAmbnNOYW1lLCAmbG9jYWxOYW1lKSA9PSAwKSB7CiAJCS8qCkBAIC05MDE0LDYgKzg4OTgsNyBAQAogCQlpZiAobGluayA9PSBOVUxMKSB7CiAJCSAgICB4bWxTY2hlbWFQRXJyTWVtb3J5KGN0eHQsICJ4bWxTY2hlbWFQYXJzZVVuaW9uLCAiCiAJCQkiYWxsb2NhdGluZyBhIHR5cGUgbGluayIsIE5VTEwpOworCSAgICAgICAgICAgIEZSRUVfQU5EX05VTEwodG1wKQogCQkgICAgcmV0dXJuICgtMSk7CiAJCX0KIAkJbGluay0+dHlwZSA9IE5VTEw7CkBAIC0xMDY2MCw3ICsxMDU0NSw3IEBACiAJKiBUT0RPOiAoMi4yKSBpcyBub3Qgc3VwcG9ydGVkLgogCSovCiAJaWYgKGRvYyA9PSBOVUxMKSB7Ci0JICAgIHhtbEVycm9yUHRyIGxlcnI7CisJICAgIGNvbnN0IHhtbEVycm9yICpsZXJyOwogCSAgICBsZXJyID0geG1sR2V0TGFzdEVycm9yKCk7CiAJICAgIC8qCiAJICAgICogQ2hlY2sgaWYgdGhpcyBhIHBhcnNlciBlcnJvciwgb3IgaWYgdGhlIGRvY3VtZW50IGNvdWxkCkBAIC0xMTE0OSwxNyArMTEwMzQsNiBAQAogCSAgICAqIGRpZmZlciBmcm9tIHRoZSByZXN1bHRpbmcgbmFtZXNwYWNlLgogCSAgICAqLwogCSAgICBpc0NoYW1lbGVvbiA9IDE7Ci0JICAgIGlmIChidWNrZXQtPnBhcnNlZCAmJgotCQlidWNrZXQtPm9yaWdUYXJnZXROYW1lc3BhY2UgIT0gTlVMTCkgewotCQl4bWxTY2hlbWFDdXN0b21FcnIoQUNUWFRfQ0FTVCBwY3R4dCwKLQkJICAgIFhNTF9TQ0hFTUFQX1NSQ19JTkNMVURFLAotCQkgICAgbm9kZSwgTlVMTCwKLQkJICAgICJUaGUgdGFyZ2V0IG5hbWVzcGFjZSBvZiB0aGUgaW5jbHVkZWQvcmVkZWZpbmVkIHNjaGVtYSAiCi0JCSAgICAiJyVzJyBoYXMgdG8gYmUgYWJzZW50IG9yIHRoZSBzYW1lIGFzIHRoZSAiCi0JCSAgICAiaW5jbHVkaW5nL3JlZGVmaW5pbmcgc2NoZW1hJ3MgdGFyZ2V0IG5hbWVzcGFjZSIsCi0JCSAgICBzY2hlbWFMb2NhdGlvbiwgTlVMTCk7Ci0JCWdvdG8gZXhpdF9lcnJvcjsKLQkgICAgfQogCSAgICBidWNrZXQtPnRhcmdldE5hbWVzcGFjZSA9IHBjdHh0LT50YXJnZXROYW1lc3BhY2U7CiAJfQogICAgIH0KQEAgLTEzMjQwLDEwICsxMzExNCw2IEBACiAJKHR5cGUtPmNvbnRlbnRUeXBlICE9IFhNTF9TQ0hFTUFfQ09OVEVOVF9NSVhFRCkpKQogCXJldHVybjsKIAotI2lmZGVmIERFQlVHX0NPTlRFTlQKLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIkJ1aWxkaW5nIGNvbnRlbnQgbW9kZWwgZm9yICVzXG4iLCBuYW1lKTsKLSNlbmRpZgogICAgIGN0eHQtPmFtID0gTlVMTDsKICAgICBjdHh0LT5hbSA9IHhtbE5ld0F1dG9tYXRhKCk7CiAgICAgaWYgKGN0eHQtPmFtID09IE5VTEwpIHsKQEAgLTEzMjcwLDExICsxMzE0MCw2IEBACiAJICAgIFdYU19CQVNJQ19DQVNUIHR5cGUsIHR5cGUtPm5vZGUsCiAJICAgICJUaGUgY29udGVudCBtb2RlbCBpcyBub3QgZGV0ZXJtaW5pc3QiLCBOVUxMKTsKICAgICB9IGVsc2UgewotI2lmZGVmIERFQlVHX0NPTlRFTlRfUkVHRVhQCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQgbW9kZWwgb2YgJXM6XG4iLCB0eXBlLT5uYW1lKTsKLSAgICAgICAgeG1sUmVnZXhwUHJpbnQoc3RkZXJyLCB0eXBlLT5jb250TW9kZWwpOwotI2VuZGlmCiAgICAgfQogICAgIGN0eHQtPnN0YXRlID0gTlVMTDsKICAgICB4bWxGcmVlQXV0b21hdGEoY3R4dC0+YW0pOwpAQCAtMTMzNDUsOCArMTMyMTAsMTkgQEAKIAkgICAgKiBkZWNsYXJhdGlvbiBgcmVzb2x2ZWRgIHRvIGJ5IHRoZSBgYWN0dWFsIHZhbHVlYAogCSAgICAqIG9mIHRoZSBzdWJzdGl0dXRpb25Hcm91cCBbYXR0cmlidXRlXSwgaWYgcHJlc2VudCIKIAkgICAgKi8KLQkgICAgaWYgKGVsZW1EZWNsLT5zdWJ0eXBlcyA9PSBOVUxMKQotCQllbGVtRGVjbC0+c3VidHlwZXMgPSBzdWJzdEhlYWQtPnN1YnR5cGVzOworCSAgICBpZiAoZWxlbURlY2wtPnN1YnR5cGVzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Vic3RIZWFkLT5zdWJ0eXBlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgY2FuIGhhcHBlbiB3aXRoIHNlbGYtcmVmZXJlbmNpbmcgc3Vic3RpdHV0aW9uCisgICAgICAgICAgICAgICAgICAgICAqIGdyb3Vwcy4gVGhlIGN5Y2xlIHdpbGwgYmUgZGV0ZWN0ZWQgbGF0ZXIsIGJ1dCB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAqIHRvIHNldCBzdWJ0eXBlcyB0byBhdm9pZCBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICAgKi8KKwkgICAgICAgICAgICBlbGVtRGVjbC0+c3VidHlwZXMgPSB4bWxTY2hlbWFHZXRCdWlsdEluVHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19BTllUWVBFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgZWxlbURlY2wtPnN1YnR5cGVzID0gc3Vic3RIZWFkLT5zdWJ0eXBlczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAJfQogICAgIH0KICAgICAvKgpAQCAtMTQ1MzYsNiArMTQ0MTIsNyBAQAogCSAgICB7CiAJCVBFUlJPUl9JTlQoInhtbFNjaGVtYUZpeHVwVHlwZUF0dHJpYnV0ZVVzZXMiLAogCQkiZmFpbGVkIHRvIGV4cGFuZCBhdHRyaWJ1dGVzIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKIAkgICAgfQogCSAgICBpZiAocGN0eHQtPmF0dHJQcm9oaWJzLT5uYkl0ZW1zICE9IDApCiAJCXByb2hpYnMgPSBwY3R4dC0+YXR0clByb2hpYnM7CkBAIC0xNDU0Niw2ICsxNDQyMyw3IEBACiAJICAgIHsKIAkJUEVSUk9SX0lOVCgieG1sU2NoZW1hRml4dXBUeXBlQXR0cmlidXRlVXNlcyIsCiAJCSJmYWlsZWQgdG8gZXhwYW5kIGF0dHJpYnV0ZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwogCSAgICB9CiAJfQogICAgIH0KQEAgLTE4MTI1LDU5ICsxODAwMyw2IEBACiAgICAgcmV0dXJuKDApOwogfQogCi0jaWZkZWYgREVCVUdfVFlQRQotc3RhdGljIHZvaWQKLXhtbFNjaGVtYURlYnVnRml4ZWRUeXBlKHhtbFNjaGVtYVBhcnNlckN0eHRQdHIgcGN0eHQsCi0JCSAgICAgICB4bWxTY2hlbWFUeXBlUHRyIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUtPm5vZGUgIT0gTlVMTCkgewotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlIG9mICVzIDogJXM6JWQgOiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5ub2RlLT5kb2MtPlVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbEdldExpbmVObyh0eXBlLT5ub2RlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJUeXBlIG9mICVzIDoiLCBuYW1lKTsKLSAgICB9Ci0gICAgaWYgKChXWFNfSVNfU0lNUExFKHR5cGUpKSB8fCAoV1hTX0lTX0NPTVBMRVgodHlwZSkpKSB7Ci0Jc3dpdGNoICh0eXBlLT5jb250ZW50VHlwZSkgewotCSAgICBjYXNlIFhNTF9TQ0hFTUFfQ09OVEVOVF9TSU1QTEU6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAic2ltcGxlXG4iKTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgWE1MX1NDSEVNQV9DT05URU5UX0VMRU1FTlRTOgotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImVsZW1lbnRzXG4iKTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgWE1MX1NDSEVNQV9DT05URU5UX1VOS05PV046Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAidW5rbm93biAhISFcbiIpOwotCQlicmVhazsKLQkgICAgY2FzZSBYTUxfU0NIRU1BX0NPTlRFTlRfRU1QVFk6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiZW1wdHlcbiIpOwotCQlicmVhazsKLQkgICAgY2FzZSBYTUxfU0NIRU1BX0NPTlRFTlRfTUlYRUQ6Ci0JCWlmICh4bWxTY2hlbWFJc1BhcnRpY2xlRW1wdGlhYmxlKCh4bWxTY2hlbWFQYXJ0aWNsZVB0cikKLQkJICAgIHR5cGUtPnN1YnR5cGVzKSkKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIm1peGVkIGFzIGVtcHRpYWJsZSBwYXJ0aWNsZVxuIik7Ci0JCWVsc2UKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAibWl4ZWRcbiIpOwotCQlicmVhazsKLQkJLyogUmVtb3ZlZCwgc2luY2Ugbm90IHVzZWQuICovCi0JCS8qCi0JCWNhc2UgWE1MX1NDSEVNQV9DT05URU5UX01JWEVEX09SX0VMRU1FTlRTOgotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIm1peGVkIG9yIGVsZW1zXG4iKTsKLQkJYnJlYWs7Ci0JCSovCi0JICAgIGNhc2UgWE1MX1NDSEVNQV9DT05URU5UX0JBU0lDOgotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImJhc2ljXG4iKTsKLQkJYnJlYWs7Ci0JICAgIGRlZmF1bHQ6Ci0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIm5vdCByZWdpc3RlcmVkICEhIVxuIik7Ci0JCWJyZWFrOwotCX0KLSAgICB9Ci19Ci0jZW5kaWYKLQogLyoKICogMy4xNC42IENvbnN0cmFpbnRzIG9uIFNpbXBsZSBUeXBlIERlZmluaXRpb24gU2NoZW1hIENvbXBvbmVudHMKICovCkBAIC0xODI2MCwxNyArMTgwODUsMTEgQEAKICAgICB4bWxTY2hlbWFUeXBlRml4dXBPcHRpbUZhY2V0cyh0eXBlKTsKIAogZXhpdF9lcnJvcjoKLSNpZmRlZiBERUJVR19UWVBFCi0gICAgeG1sU2NoZW1hRGVidWdGaXhlZFR5cGUocGN0eHQsIHR5cGUpOwotI2VuZGlmCiAgICAgaWYgKG9sZGVycnMgIT0gcGN0eHQtPm5iZXJyb3JzKQogCXJldHVybihwY3R4dC0+ZXJyKTsKICAgICByZXR1cm4oMCk7CiAKIGV4aXRfZmFpbHVyZToKLSNpZmRlZiBERUJVR19UWVBFCi0gICAgeG1sU2NoZW1hRGVidWdGaXhlZFR5cGUocGN0eHQsIHR5cGUpOwotI2VuZGlmCiAgICAgcmV0dXJuKC0xKTsKIH0KIApAQCAtMTg2MDgsNyArMTg0MjcsNyBAQAogCQkJImFsbG93ZWQgdG8gYXBwZWFyIGluc2lkZSBvdGhlciBtb2RlbCBncm91cHMiLAogCQkJTlVMTCwgTlVMTCk7CiAKLQkJfSBlbHNlIGlmICghIGR1bW15U2VxdWVuY2UpIHsKKwkJfSBlbHNlIGlmICgoIWR1bW15U2VxdWVuY2UpICYmIChiYXNlVHlwZS0+c3VidHlwZXMgIT0gTlVMTCkpIHsKIAkJICAgIHhtbFNjaGVtYVRyZWVJdGVtUHRyIGVmZmVjdGl2ZUNvbnRlbnQgPQogCQkJKHhtbFNjaGVtYVRyZWVJdGVtUHRyKSB0eXBlLT5zdWJ0eXBlczsKIAkJICAgIC8qCkBAIC0xODY5Miw5ICsxODUxMSw2IEBACiAgICAgcmVzID0geG1sU2NoZW1hQ2hlY2tDVENvbXBvbmVudChwY3R4dCwgdHlwZSk7CiAgICAgSEZBSUxVUkUgSEVSUk9SCiAKLSNpZmRlZiBERUJVR19UWVBFCi0gICAgeG1sU2NoZW1hRGVidWdGaXhlZFR5cGUocGN0eHQsIHR5cGUpOwotI2VuZGlmCiAgICAgaWYgKG9sZGVycnMgIT0gcGN0eHQtPm5iZXJyb3JzKQogCXJldHVybihwY3R4dC0+ZXJyKTsKICAgICBlbHNlCkBAIC0xODcwMiwxNiArMTg1MTgsMTAgQEAKIAogZXhpdF9lcnJvcjoKICAgICB0eXBlLT5mbGFncyB8PSBYTUxfU0NIRU1BU19UWVBFX0lOVEVSTkFMX0lOVkFMSUQ7Ci0jaWZkZWYgREVCVUdfVFlQRQotICAgIHhtbFNjaGVtYURlYnVnRml4ZWRUeXBlKHBjdHh0LCB0eXBlKTsKLSNlbmRpZgogICAgIHJldHVybihwY3R4dC0+ZXJyKTsKIAogZXhpdF9mYWlsdXJlOgogICAgIHR5cGUtPmZsYWdzIHw9IFhNTF9TQ0hFTUFTX1RZUEVfSU5URVJOQUxfSU5WQUxJRDsKLSNpZmRlZiBERUJVR19UWVBFCi0gICAgeG1sU2NoZW1hRGVidWdGaXhlZFR5cGUocGN0eHQsIHR5cGUpOwotI2VuZGlmCiAgICAgcmV0dXJuKC0xKTsKIH0KIApAQCAtMTk5NDYsNyArMTk3NTYsOCBAQAogCSAgICAvKgogCSAgICAqIFRoZSBzZXQgb2YgYWxsIHtkZXJpdmF0aW9uIG1ldGhvZH1zIGludm9sdmVkIGluIHRoZSBkZXJpdmF0aW9uCiAJICAgICovCi0JICAgIHdoaWxlICgodHlwZSAhPSBOVUxMKSAmJiAodHlwZSAhPSBoZWFkVHlwZSkpIHsKKwkgICAgd2hpbGUgKCh0eXBlICE9IE5VTEwpICYmICh0eXBlICE9IGhlYWRUeXBlKSAmJgorICAgICAgICAgICAgICAgICAgICh0eXBlICE9IHR5cGUtPmJhc2VUeXBlKSkgewogCQlpZiAoKFdYU19JU19FWFRFTlNJT04odHlwZSkpICYmCiAJCSAgICAoKG1ldGhTZXQgJiBYTUxfU0NIRU1BU19UWVBFX0JMT0NLX1JFU1RSSUNUSU9OKSA9PSAwKSkKIAkJICAgIG1ldGhTZXQgfD0gWE1MX1NDSEVNQVNfVFlQRV9CTE9DS19FWFRFTlNJT047CkBAIC0yMTQzMiw3ICsyMTI0Myw4IEBACiAgICAgKiB0aGUgQVBJOyBpLmUuIG5vdCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB2YWxpZGF0ZWQgaW5zdGFuY2UgZG9jdW1lbnQuCiAgICAgKi8KIAotICAgIHhtbFNjaGVtYUluaXRUeXBlcygpOworICAgIGlmICh4bWxTY2hlbWFJbml0VHlwZXMoKSA8IDApCisgICAgICAgIHJldHVybiAoTlVMTCk7CiAKICAgICBpZiAoY3R4dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKE5VTEwpOwpAQCAtMjE0NTIsNyArMjEyNjQsNyBAQAogICAgIGlmIChjdHh0LT5jb25zdHJ1Y3RvciA9PSBOVUxMKSB7CiAJY3R4dC0+Y29uc3RydWN0b3IgPSB4bWxTY2hlbWFDb25zdHJ1Y3Rpb25DdHh0Q3JlYXRlKGN0eHQtPmRpY3QpOwogCWlmIChjdHh0LT5jb25zdHJ1Y3RvciA9PSBOVUxMKQotCSAgICByZXR1cm4oTlVMTCk7CisJICAgIGdvdG8gZXhpdF9mYWlsdXJlOwogCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBjb25zdHJ1Y3RvciB0byBiZSBhYmxlIHRvIGZyZWUgaXQuICovCiAJY3R4dC0+b3duc0NvbnN0cnVjdG9yID0gMTsKICAgICB9CkBAIC0yMTg2MSw3ICsyMTY3Myw2IEBACiB7CiAgICAgY29uc3QgeG1sQ2hhciAqY3VyLCAqZW5kOwogICAgIGNvbnN0IHhtbENoYXIgKm5zbmFtZSA9IE5VTEwsICpsb2NhdGlvbjsKLSAgICBpbnQgY291bnQgPSAwOwogICAgIGludCByZXQgPSAwOwogICAgIHhtbFNjaGVtYUF0dHJJbmZvUHRyIGlhdHRyOwogCkBAIC0yMTg5Niw3ICsyMTcwNyw3IEBACiAJCWVuZCsrOwogCSAgICBpZiAoZW5kID09IGN1cikKIAkJYnJlYWs7Ci0JICAgIGNvdW50Kys7IC8qIFRPRE86IERvbid0IHVzZSB0aGUgc2NoZW1hJ3MgZGljdC4gKi8KKwkgICAgLyogVE9ETzogRG9uJ3QgdXNlIHRoZSBzY2hlbWEncyBkaWN0LiAqLwogCSAgICBuc25hbWUgPSB4bWxEaWN0TG9va3VwKHZjdHh0LT5zY2hlbWEtPmRpY3QsIGN1ciwgZW5kIC0gY3VyKTsKIAkgICAgY3VyID0gZW5kOwogCX0KQEAgLTIxOTIzLDcgKzIxNzM0LDcgQEAKIAkgICAgfQogCSAgICBicmVhazsKIAl9Ci0JY291bnQrKzsgLyogVE9ETzogRG9uJ3QgdXNlIHRoZSBzY2hlbWEncyBkaWN0LiAqLworCS8qIFRPRE86IERvbid0IHVzZSB0aGUgc2NoZW1hJ3MgZGljdC4gKi8KIAlsb2NhdGlvbiA9IHhtbERpY3RMb29rdXAodmN0eHQtPnNjaGVtYS0+ZGljdCwgY3VyLCBlbmQgLSBjdXIpOwogCWN1ciA9IGVuZDsKIAlyZXQgPSB4bWxTY2hlbWFBc3NlbWJsZUJ5TG9jYXRpb24odmN0eHQsIHZjdHh0LT5zY2hlbWEsCkBAIC0yMjU4OSwxMCArMjI0MDAsNiBAQAogICAgIHN0by0+c2VsID0gc2VsOwogICAgIHN0by0+bmJIaXN0b3J5ID0gMDsKIAotI2lmZGVmIERFQlVHX0lEQwotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiSURDOiAgIFNUTyBwdXNoICclcydcbiIsCi0Jc3RvLT5zZWwtPnhwYXRoKTsKLSNlbmRpZgogICAgIHJldHVybiAoMCk7CiB9CiAKQEAgLTIyNjE4LDMwICsyMjQyNSwxMiBAQAogCiAgICAgaWYgKG5vZGVUeXBlID09IFhNTF9BVFRSSUJVVEVfTk9ERSkKIAlkZXB0aCsrOwotI2lmZGVmIERFQlVHX0lEQwotICAgIHsKLQl4bWxDaGFyICpzdHIgPSBOVUxMOwotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiSURDOiBFVkFMIG9uICVzLCBkZXB0aCAlZCwgdHlwZSAlZFxuIiwKLQkgICAgeG1sU2NoZW1hRm9ybWF0UU5hbWUoJnN0ciwgdmN0eHQtPmlub2RlLT5uc05hbWUsCi0JCXZjdHh0LT5pbm9kZS0+bG9jYWxOYW1lKSwgZGVwdGgsIG5vZGVUeXBlKTsKLQlGUkVFX0FORF9OVUxMKHN0cikKLSAgICB9Ci0jZW5kaWYKICAgICAvKgogICAgICogUHJvY2VzcyBhbGwgYWN0aXZlIFhQYXRoIHN0YXRlIG9iamVjdHMuCiAgICAgKi8KICAgICBmaXJzdCA9IHZjdHh0LT54cGF0aFN0YXRlczsKICAgICBzdG8gPSBmaXJzdDsKICAgICB3aGlsZSAoc3RvICE9IGhlYWQpIHsKLSNpZmRlZiBERUJVR19JREMKLQlpZiAoc3RvLT50eXBlID09IFhQQVRIX1NUQVRFX09CSl9UWVBFX0lEQ19TRUxFQ1RPUikKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJJREM6ICAgWyclcyddIHNlbGVjdG9yICclcydcbiIsCi0JCXN0by0+bWF0Y2hlci0+YWlkYy0+ZGVmLT5uYW1lLCBzdG8tPnNlbC0+eHBhdGgpOwotCWVsc2UKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJJREM6ICAgWyclcyddIGZpZWxkICclcydcbiIsCi0JCXN0by0+bWF0Y2hlci0+YWlkYy0+ZGVmLT5uYW1lLCBzdG8tPnNlbC0+eHBhdGgpOwotI2VuZGlmCiAJaWYgKG5vZGVUeXBlID09IFhNTF9FTEVNRU5UX05PREUpCiAJICAgIHJlcyA9IHhtbFN0cmVhbVB1c2goKHhtbFN0cmVhbUN0eHRQdHIpIHN0by0+eHBhdGhDdHh0LAogCQl2Y3R4dC0+aW5vZGUtPmxvY2FsTmFtZSwgdmN0eHQtPmlub2RlLT5uc05hbWUpOwpAQCAtMjI2NTksMTAgKzIyNDQ4LDYgQEAKIAkvKgogCSogRnVsbCBtYXRjaC4KIAkqLwotI2lmZGVmIERFQlVHX0lEQwotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiSURDOiAgICAgIgotCSAgICAiTUFUQ0hcbiIpOwotI2VuZGlmCiAJLyoKIAkqIFJlZ2lzdGVyIGEgbWF0Y2ggaW4gdGhlIHN0YXRlIG9iamVjdCBoaXN0b3J5LgogCSovCkBAIC0yMjY4NiwyMSArMjI0NzEsMTIgQEAKIAl9CiAJc3RvLT5oaXN0b3J5W3N0by0+bmJIaXN0b3J5KytdID0gZGVwdGg7CiAKLSNpZmRlZiBERUJVR19JREMKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIklEQzogICAgICAgcHVzaCBtYXRjaCAnJWQnXG4iLAotCSAgICB2Y3R4dC0+ZGVwdGgpOwotI2VuZGlmCi0KIAlpZiAoc3RvLT50eXBlID09IFhQQVRIX1NUQVRFX09CSl9UWVBFX0lEQ19TRUxFQ1RPUikgewogCSAgICB4bWxTY2hlbWFJRENTZWxlY3RQdHIgc2VsOwogCSAgICAvKgogCSAgICAqIEFjdGl2YXRlIHN0YXRlIG9iamVjdHMgZm9yIHRoZSBJREMgZmllbGRzIG9mCiAJICAgICogdGhlIElEQyBzZWxlY3Rvci4KIAkgICAgKi8KLSNpZmRlZiBERUJVR19JREMKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJJREM6ICAgICAiCi0JCSJhY3RpdmF0aW5nIGZpZWxkIHN0YXRlc1xuIik7Ci0jZW5kaWYKIAkgICAgc2VsID0gc3RvLT5tYXRjaGVyLT5haWRjLT5kZWYtPmZpZWxkczsKIAkgICAgd2hpbGUgKHNlbCAhPSBOVUxMKSB7CiAJCWlmICh4bWxTY2hlbWFJRENBZGRTdGF0ZU9iamVjdCh2Y3R4dCwgc3RvLT5tYXRjaGVyLApAQCAtMjI3MTIsMTAgKzIyNDg4LDYgQEAKIAkgICAgLyoKIAkgICAgKiBBbiBJREMga2V5IG5vZGUgd2FzIGZvdW5kIGJ5IHRoZSBJREMgZmllbGQuCiAJICAgICovCi0jaWZkZWYgREVCVUdfSURDCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiSURDOiAgICAga2V5IGZvdW5kXG4iKTsKLSNlbmRpZgogCSAgICAvKgogCSAgICAqIE5vdGlmeSB0aGF0IHRoZSBjaGFyYWN0ZXIgdmFsdWUgb2YgdGhpcyBub2RlIGlzCiAJICAgICogbmVlZGVkLgpAQCAtMjI4NDgsMTYgKzIyNjIwLDYgQEAKIAlyZXR1cm4gKDApOwogICAgIHN0byA9IHZjdHh0LT54cGF0aFN0YXRlczsKIAotI2lmZGVmIERFQlVHX0lEQwotICAgIHsKLQl4bWxDaGFyICpzdHIgPSBOVUxMOwotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAiSURDOiBCQUNLIG9uICVzLCBkZXB0aCAlZFxuIiwKLQkgICAgeG1sU2NoZW1hRm9ybWF0UU5hbWUoJnN0ciwgdmN0eHQtPmlub2RlLT5uc05hbWUsCi0JCXZjdHh0LT5pbm9kZS0+bG9jYWxOYW1lKSwgdmN0eHQtPmRlcHRoKTsKLQlGUkVFX0FORF9OVUxMKHN0cikKLSAgICB9Ci0jZW5kaWYKICAgICAvKgogICAgICogRXZhbHVhdGUgdGhlIHN0YXRlIG9iamVjdHMuCiAgICAgKi8KQEAgLTIyODY4LDEwICsyMjYzMCw2IEBACiAJCSJjYWxsaW5nIHhtbFN0cmVhbVBvcCgpIik7CiAJICAgIHJldHVybiAoLTEpOwogCX0KLSNpZmRlZiBERUJVR19JREMKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIklEQzogICBzdHJlYW0gcG9wICclcydcbiIsCi0JICAgIHN0by0+c2VsLT54cGF0aCk7Ci0jZW5kaWYKIAlpZiAoc3RvLT5uYkhpc3RvcnkgPT0gMCkKIAkgICAgZ290byBkZXJlZ2lzdGVyX2NoZWNrOwogCkBAIC0yMjk4Niw3ICsyMjc0NCw3IEBACiAJCX0gZWxzZSBpZiAocG9zID49IG1hdGNoZXItPnNpemVLZXlTZXFzKSB7CiAJCSAgICBpbnQgaSA9IG1hdGNoZXItPnNpemVLZXlTZXFzOwogCi0JCSAgICBtYXRjaGVyLT5zaXplS2V5U2VxcyAqPSAyOworCQkgICAgbWF0Y2hlci0+c2l6ZUtleVNlcXMgPSBwb3MgKiAyOwogCQkgICAgbWF0Y2hlci0+a2V5U2VxcyA9ICh4bWxTY2hlbWFQU1ZJSURDS2V5UHRyICoqKQogCQkJeG1sUmVhbGxvYyhtYXRjaGVyLT5rZXlTZXFzLAogCQkJbWF0Y2hlci0+c2l6ZUtleVNlcXMgKgpAQCAtMjMzMzAsMTAgKzIzMDg4LDYgQEAKIAkqIERlcmVnaXN0ZXIgc3RhdGUgb2JqZWN0cyBpZiB0aGV5IHJlYWNoIHRoZSBkZXB0aCBvZiBjcmVhdGlvbi4KIAkqLwogCWlmICgoc3RvLT5uYkhpc3RvcnkgPT0gMCkgJiYgKHN0by0+ZGVwdGggPT0gZGVwdGgpKSB7Ci0jaWZkZWYgREVCVUdfSURDCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiSURDOiAgIFNUTyBwb3AgJyVzJ1xuIiwKLQkJc3RvLT5zZWwtPnhwYXRoKTsKLSNlbmRpZgogCSAgICBpZiAodmN0eHQtPnhwYXRoU3RhdGVzICE9IHN0bykgewogCQlWRVJST1JfSU5UKCJ4bWxTY2hlbWFYUGF0aFByb2Nlc3NIaXN0b3J5IiwKIAkJICAgICJUaGUgc3RhdGUgb2JqZWN0IHRvIGJlIHJlbW92ZWQgaXMgbm90IHRoZSBmaXJzdCAiCkBAIC0yMzM3OCwxNiArMjMxMzIsNiBAQAogICAgIGlmIChpZGMgPT0gTlVMTCkKIAlyZXR1cm4gKDApOwogCi0jaWZkZWYgREVCVUdfSURDCi0gICAgewotCXhtbENoYXIgKnN0ciA9IE5VTEw7Ci0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JICAgICJJREM6IFJFR0lTVEVSIG9uICVzLCBkZXB0aCAlZFxuIiwKLQkgICAgKGNoYXIgKikgeG1sU2NoZW1hRm9ybWF0UU5hbWUoJnN0ciwgdmN0eHQtPmlub2RlLT5uc05hbWUsCi0JCXZjdHh0LT5pbm9kZS0+bG9jYWxOYW1lKSwgdmN0eHQtPmRlcHRoKTsKLQlGUkVFX0FORF9OVUxMKHN0cikKLSAgICB9Ci0jZW5kaWYKICAgICBpZiAodmN0eHQtPmlub2RlLT5pZGNNYXRjaGVycyAhPSBOVUxMKSB7CiAJVkVSUk9SX0lOVCgieG1sU2NoZW1hSURDUmVnaXN0ZXJNYXRjaGVycyIsCiAJICAgICJUaGUgY2hhaW4gb2YgSURDIG1hdGNoZXJzIGlzIGV4cGVjdGVkIHRvIGJlIGVtcHR5Iik7CkBAIC0yMzQ3Miw5ICsyMzIxNiw2IEBACiAJbWF0Y2hlci0+ZGVwdGggPSB2Y3R4dC0+ZGVwdGg7CiAJbWF0Y2hlci0+YWlkYyA9IGFpZGM7CiAJbWF0Y2hlci0+aWRjVHlwZSA9IGFpZGMtPmRlZi0+dHlwZTsKLSNpZmRlZiBERUJVR19JREMKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIklEQzogICByZWdpc3RlciBtYXRjaGVyXG4iKTsKLSNlbmRpZgogCS8qCiAJKiBJbml0IHRoZSBhdXRvbWF0b24gc3RhdGUgb2JqZWN0LgogCSovCkBAIC0yNjE4NSwyNSArMjU5MjYsNiBAQAogICAgIHhtbFNjaGVtYUVsZW1lbnRQdHIgaXRlbSA9ICh4bWxTY2hlbWFFbGVtZW50UHRyKSB0cmFuc2RhdGE7CiAgICAgeG1sU2NoZW1hTm9kZUluZm9QdHIgaW5vZGUgPSAoeG1sU2NoZW1hTm9kZUluZm9QdHIpIGlucHV0ZGF0YTsKICAgICBpbm9kZS0+ZGVjbCA9IGl0ZW07Ci0jaWZkZWYgREVCVUdfQ09OVEVOVAotICAgIHsKLQl4bWxDaGFyICpzdHIgPSBOVUxMOwotCi0JaWYgKGl0ZW0tPnR5cGUgPT0gWE1MX1NDSEVNQV9UWVBFX0VMRU1FTlQpIHsKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJBVVRPTUFUT04gY2FsbGJhY2sgZm9yICclcycgW2RlY2xhcmF0aW9uXVxuIiwKLQkJeG1sU2NoZW1hRm9ybWF0UU5hbWUoJnN0ciwKLQkJaW5vZGUtPmxvY2FsTmFtZSwgaW5vZGUtPm5zTmFtZSkpOwotCX0gZWxzZSB7Ci0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkFVVE9NQVRPTiBjYWxsYmFjayBmb3IgJyVzJyBbd2lsZGNhcmRdXG4iLAotCQkgICAgeG1sU2NoZW1hRm9ybWF0UU5hbWUoJnN0ciwKLQkJICAgIGlub2RlLT5sb2NhbE5hbWUsIGlub2RlLT5uc05hbWUpKTsKLQotCX0KLQlGUkVFX0FORF9OVUxMKHN0cikKLSAgICB9Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludApAQCAtMjYyOTQsMTAgKzI2MDE2LDYgQEAKIAkJCSJmYWlsZWQgdG8gY3JlYXRlIGEgcmVnZXggY29udGV4dCIpOwogCQkgICAgZ290byBpbnRlcm5hbF9lcnJvcjsKIAkJfQotI2lmZGVmIERFQlVHX0FVVE9NQVRBCi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIkFVVE9NQVRPTiBjcmVhdGUgb24gJyVzJ1xuIiwgaW5vZGUtPmxvY2FsTmFtZSk7Ci0jZW5kaWYKIAkgICAgfQogCiAJICAgIC8qCkBAIC0yNjMwNSwxMSArMjYwMjMsNiBAQAogCSAgICAgKi8KIAkgICAgaWYgKElOT0RFX05JTExFRChpbm9kZSkpIHsKIAkJcmV0ID0gMDsKLSNpZmRlZiBERUJVR19BVVRPTUFUQQotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJBVVRPTUFUT04gc3VjY2VlZGVkIG9uIG5pbGxlZCAnJXMnXG4iLAotCQkgICAgaW5vZGUtPmxvY2FsTmFtZSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBnb3RvIHNraXBfbmlsbGVkOwogCSAgICB9CiAKQEAgLTI2MzMxLDIxICsyNjA0NCwxMSBAQAogCQkgICAgWE1MX1NDSEVNQVZfRUxFTUVOVF9DT05URU5ULCBOVUxMLCBOVUxMLAogCQkgICAgIk1pc3NpbmcgY2hpbGQgZWxlbWVudChzKSIsCiAJCSAgICBuYnZhbCwgbmJuZWcsIHZhbHVlcyk7Ci0jaWZkZWYgREVCVUdfQVVUT01BVEEKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiQVVUT01BVE9OIG1pc3NpbmcgRVJST1Igb24gJyVzJ1xuIiwKLQkJICAgIGlub2RlLT5sb2NhbE5hbWUpOwotI2VuZGlmCiAJICAgIH0gZWxzZSB7CiAJCS8qCiAJCSogQ29udGVudCBtb2RlbCBpcyBzYXRpc2ZpZWQuCiAJCSovCiAJCXJldCA9IDA7Ci0jaWZkZWYgREVCVUdfQVVUT01BVEEKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSAgICAiQVVUT01BVE9OIHN1Y2NlZWRlZCBvbiAnJXMnXG4iLAotCQkgICAgaW5vZGUtPmxvY2FsTmFtZSk7Ci0jZW5kaWYKIAkgICAgfQogCiAJfQpAQCAtMjY2NDgsMTIgKzI2MzUxLDYgQEAKICAgICAqIE1lcmdlL2ZyZWUgdGhlIElEQyB0YWJsZS4KICAgICAqLwogICAgIGlmIChpbm9kZS0+aWRjVGFibGUgIT0gTlVMTCkgewotI2lmZGVmIERFQlVHX0lEQ19OT0RFX1RBQkxFCi0JeG1sU2NoZW1hRGVidWdEdW1wSURDVGFibGUoc3Rkb3V0LAotCSAgICBpbm9kZS0+bnNOYW1lLAotCSAgICBpbm9kZS0+bG9jYWxOYW1lLAotCSAgICBpbm9kZS0+aWRjVGFibGUpOwotI2VuZGlmCiAJaWYgKCh2Y3R4dC0+ZGVwdGggPiAwKSAmJgogCSAgICAodmN0eHQtPmhhc0tleXJlZnMgfHwgdmN0eHQtPmNyZWF0ZUlEQ05vZGVUYWJsZXMpKQogCXsKQEAgLTI2ODQ1LDEwICsyNjU0Miw2IEBACiAJCSAgICByZXR1cm4gKC0xKTsKIAkJfQogCQlwaWVsZW0tPnJlZ2V4Q3R4dCA9IHJlZ2V4Q3R4dDsKLSNpZmRlZiBERUJVR19BVVRPTUFUQQotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkFVVE9NQVRBIGNyZWF0ZSBvbiAnJXMnXG4iLAotCQkgICAgcGllbGVtLT5sb2NhbE5hbWUpOwotI2VuZGlmCiAJICAgIH0KIAogCSAgICAvKgpAQCAtMjY4NjMsMTYgKzI2NTU2LDYgQEAKIAkJdmN0eHQtPmlub2RlLT5sb2NhbE5hbWUsCiAJCXZjdHh0LT5pbm9kZS0+bnNOYW1lLAogCQl2Y3R4dC0+aW5vZGUpOwotI2lmZGVmIERFQlVHX0FVVE9NQVRBCi0JICAgIGlmIChyZXQgPCAwKQotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJIkFVVE9NQVRPTiBwdXNoIEVSUk9SIGZvciAnJXMnIG9uICclcydcbiIsCi0JCXZjdHh0LT5pbm9kZS0+bG9jYWxOYW1lLCBwaWVsZW0tPmxvY2FsTmFtZSk7Ci0JICAgIGVsc2UKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJBVVRPTUFUT04gcHVzaCBPSyBmb3IgJyVzJyBvbiAnJXMnXG4iLAotCQl2Y3R4dC0+aW5vZGUtPmxvY2FsTmFtZSwgcGllbGVtLT5sb2NhbE5hbWUpOwotI2VuZGlmCiAJICAgIGlmICh2Y3R4dC0+ZXJyID09IFhNTF9TQ0hFTUFWX0lOVEVSTkFMKSB7CiAJCVZFUlJPUl9JTlQoInhtbFNjaGVtYVZhbGlkYXRlQ2hpbGRFbGVtIiwKIAkJICAgICJjYWxsaW5nIHhtbFJlZ0V4ZWNQdXNoU3RyaW5nMigpIik7CkBAIC0yODY5MSw3ICsyODM3NCw3IEBACiAgKiBWYXJhcmdzIGVycm9yIGNhbGxiYWNrcyB0byB0aGUgdXNlciBhcHBsaWNhdGlvbiwgaGFyZGVyIC4uLgogICovCiAKLXN0YXRpYyB2b2lkIFhNTENERUNMCitzdGF0aWMgdm9pZAogd2FybmluZ1NwbGl0KHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbXNnIEFUVFJJQlVURV9VTlVTRUQsIC4uLikgewogICAgIHhtbFNjaGVtYVNBWFBsdWdQdHIgY3R4dCA9ICh4bWxTY2hlbWFTQVhQbHVnUHRyKSBjdHg7CiAgICAgaWYgKChjdHh0ICE9IE5VTEwpICYmIChjdHh0LT51c2VyX3NheCAhPSBOVUxMKSAmJgpAQCAtMjg2OTksNyArMjgzODIsNyBAQAogCVRPRE8KICAgICB9CiB9Ci1zdGF0aWMgdm9pZCBYTUxDREVDTAorc3RhdGljIHZvaWQKIGVycm9yU3BsaXQodm9pZCAqY3R4LCBjb25zdCBjaGFyICptc2cgQVRUUklCVVRFX1VOVVNFRCwgLi4uKSB7CiAgICAgeG1sU2NoZW1hU0FYUGx1Z1B0ciBjdHh0ID0gKHhtbFNjaGVtYVNBWFBsdWdQdHIpIGN0eDsKICAgICBpZiAoKGN0eHQgIT0gTlVMTCkgJiYgKGN0eHQtPnVzZXJfc2F4ICE9IE5VTEwpICYmCkBAIC0yODcwNyw3ICsyODM5MCw3IEBACiAJVE9ETwogICAgIH0KIH0KLXN0YXRpYyB2b2lkIFhNTENERUNMCitzdGF0aWMgdm9pZAogZmF0YWxFcnJvclNwbGl0KHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbXNnIEFUVFJJQlVURV9VTlVTRUQsIC4uLikgewogICAgIHhtbFNjaGVtYVNBWFBsdWdQdHIgY3R4dCA9ICh4bWxTY2hlbWFTQVhQbHVnUHRyKSBjdHg7CiAgICAgaWYgKChjdHh0ICE9IE5VTEwpICYmIChjdHh0LT51c2VyX3NheCAhPSBOVUxMKSAmJgpAQCAtMjkwNDMsNiArMjg3MjYsNTUgQEAKIH0KIAogLyoqCisgKiB4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbUludGVybmFsOgorICogQGN0eHQ6ICBhIHNjaGVtYSB2YWxpZGF0aW9uIGNvbnRleHQKKyAqIEBwY3R4dDogIGEgcGFyc2VyIGNvbnRleHQKKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIGRvY3VtZW50IGlzIHNjaGVtYXMgdmFsaWQsIGEgcG9zaXRpdmUgZXJyb3IgY29kZQorICogICAgIG51bWJlciBvdGhlcndpc2UgYW5kIC0xIGluIGNhc2Ugb2YgaW50ZXJuYWwgb3IgQVBJIGVycm9yLgorICovCitzdGF0aWMgaW50Cit4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbUludGVybmFsKHhtbFNjaGVtYVZhbGlkQ3R4dFB0ciBjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBwY3R4dCkgeworICAgIHhtbFNjaGVtYVNBWFBsdWdQdHIgcGx1ZyA9IE5VTEw7CisgICAgaW50IHJldDsKKworICAgIHBjdHh0LT5saW5lbnVtYmVycyA9IDE7CisgICAgeG1sU2NoZW1hVmFsaWRhdGVTZXRMb2NhdG9yKGN0eHQsIHhtbFNjaGVtYVZhbGlkYXRlU3RyZWFtTG9jYXRvciwgcGN0eHQpOworCisgICAgY3R4dC0+cGFyc2VyQ3R4dCA9IHBjdHh0OworICAgIGN0eHQtPmlucHV0ID0gcGN0eHQtPmlucHV0LT5idWY7CisKKyAgICAvKgorICAgICAqIFBsdWcgdGhlIHZhbGlkYXRpb24gYW5kIGxhdW5jaCB0aGUgcGFyc2luZworICAgICAqLworICAgIHBsdWcgPSB4bWxTY2hlbWFTQVhQbHVnKGN0eHQsICYocGN0eHQtPnNheCksICYocGN0eHQtPnVzZXJEYXRhKSk7CisgICAgaWYgKHBsdWcgPT0gTlVMTCkgeworICAgICAgICByZXQgPSAtMTsKKwlnb3RvIGRvbmU7CisgICAgfQorICAgIGN0eHQtPmlucHV0ID0gcGN0eHQtPmlucHV0LT5idWY7CisgICAgY3R4dC0+c2F4ID0gcGN0eHQtPnNheDsKKyAgICBjdHh0LT5mbGFncyB8PSBYTUxfU0NIRU1BX1ZBTElEX0NUWFRfRkxBR19TVFJFQU07CisgICAgcmV0ID0geG1sU2NoZW1hVlN0YXJ0KGN0eHQpOworCisgICAgaWYgKChyZXQgPT0gMCkgJiYgKCEgY3R4dC0+cGFyc2VyQ3R4dC0+d2VsbEZvcm1lZCkpIHsKKwlyZXQgPSBjdHh0LT5wYXJzZXJDdHh0LT5lcnJObzsKKwlpZiAocmV0ID09IDApCisJICAgIHJldCA9IDE7CisgICAgfQorCitkb25lOgorICAgIGN0eHQtPnBhcnNlckN0eHQgPSBOVUxMOworICAgIGN0eHQtPnNheCA9IE5VTEw7CisgICAgY3R4dC0+aW5wdXQgPSBOVUxMOworICAgIGlmIChwbHVnICE9IE5VTEwpIHsKKyAgICAgICAgeG1sU2NoZW1hU0FYVW5wbHVnKHBsdWcpOworICAgIH0KKyAgICByZXR1cm4gKHJldCk7Cit9CisKKy8qKgogICogeG1sU2NoZW1hVmFsaWRhdGVTdHJlYW06CiAgKiBAY3R4dDogIGEgc2NoZW1hIHZhbGlkYXRpb24gY29udGV4dAogICogQGlucHV0OiAgdGhlIGlucHV0IHRvIHVzZSBmb3IgcmVhZGluZyB0aGUgZGF0YQpAQCAtMjkwNjIsOCArMjg3OTQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQsIHhtbENoYXJFbmNvZGluZyBlbmMsCiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxTQVhIYW5kbGVyUHRyIHNheCwgdm9pZCAqdXNlcl9kYXRhKQogewotICAgIHhtbFNjaGVtYVNBWFBsdWdQdHIgcGx1ZyA9IE5VTEw7Ci0gICAgeG1sU0FYSGFuZGxlclB0ciBvbGRfc2F4ID0gTlVMTDsKICAgICB4bWxQYXJzZXJDdHh0UHRyIHBjdHh0ID0gTlVMTDsKICAgICB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dFN0cmVhbSA9IE5VTEw7CiAgICAgaW50IHJldDsKQEAgLTI5MDc0LDE4ICsyODgwNCwyMiBAQAogICAgIC8qCiAgICAgICogcHJlcGFyZSB0aGUgcGFyc2VyCiAgICAgICovCi0gICAgcGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7Ci0gICAgaWYgKHBjdHh0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAoLTEpOwotICAgIG9sZF9zYXggPSBwY3R4dC0+c2F4OwotICAgIHBjdHh0LT5zYXggPSBzYXg7Ci0gICAgcGN0eHQtPnVzZXJEYXRhID0gdXNlcl9kYXRhOworICAgIGlmIChzYXggIT0gTlVMTCkgeworICAgICAgICBwY3R4dCA9IHhtbE5ld1NBWFBhcnNlckN0eHQoc2F4LCB1c2VyX2RhdGEpOworICAgICAgICBpZiAocGN0eHQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgICAgICBpZiAocGN0eHQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAvKiBXZSByZWFsbHkgd2FudCBwY3R4dC0+c2F4IHRvIGJlIE5VTEwgaGVyZS4gKi8KKyAgICAgICAgeG1sRnJlZShwY3R4dC0+c2F4KTsKKyAgICAgICAgcGN0eHQtPnNheCA9IE5VTEw7CisgICAgfQogI2lmIDAKICAgICBpZiAob3B0aW9ucykKICAgICAgICAgeG1sQ3R4dFVzZU9wdGlvbnMocGN0eHQsIG9wdGlvbnMpOwogI2VuZGlmCi0gICAgcGN0eHQtPmxpbmVudW1iZXJzID0gMTsKLSAgICB4bWxTY2hlbWFWYWxpZGF0ZVNldExvY2F0b3IoY3R4dCwgeG1sU2NoZW1hVmFsaWRhdGVTdHJlYW1Mb2NhdG9yLCBwY3R4dCk7CiAKICAgICBpbnB1dFN0cmVhbSA9IHhtbE5ld0lPSW5wdXRTdHJlYW0ocGN0eHQsIGlucHV0LCBlbmMpOzsKICAgICBpZiAoaW5wdXRTdHJlYW0gPT0gTlVMTCkgewpAQCAtMjkwOTMsMzkgKzI4ODI3LDE0IEBACiAJZ290byBkb25lOwogICAgIH0KICAgICBpbnB1dFB1c2gocGN0eHQsIGlucHV0U3RyZWFtKTsKLSAgICBjdHh0LT5wYXJzZXJDdHh0ID0gcGN0eHQ7Ci0gICAgY3R4dC0+aW5wdXQgPSBpbnB1dDsKIAotICAgIC8qCi0gICAgICogUGx1ZyB0aGUgdmFsaWRhdGlvbiBhbmQgbGF1bmNoIHRoZSBwYXJzaW5nCi0gICAgICovCi0gICAgcGx1ZyA9IHhtbFNjaGVtYVNBWFBsdWcoY3R4dCwgJihwY3R4dC0+c2F4KSwgJihwY3R4dC0+dXNlckRhdGEpKTsKLSAgICBpZiAocGx1ZyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldCA9IC0xOwotCWdvdG8gZG9uZTsKLSAgICB9Ci0gICAgY3R4dC0+aW5wdXQgPSBpbnB1dDsKICAgICBjdHh0LT5lbmMgPSBlbmM7Ci0gICAgY3R4dC0+c2F4ID0gcGN0eHQtPnNheDsKLSAgICBjdHh0LT5mbGFncyB8PSBYTUxfU0NIRU1BX1ZBTElEX0NUWFRfRkxBR19TVFJFQU07Ci0gICAgcmV0ID0geG1sU2NoZW1hVlN0YXJ0KGN0eHQpOwogCi0gICAgaWYgKChyZXQgPT0gMCkgJiYgKCEgY3R4dC0+cGFyc2VyQ3R4dC0+d2VsbEZvcm1lZCkpIHsKLQlyZXQgPSBjdHh0LT5wYXJzZXJDdHh0LT5lcnJObzsKLQlpZiAocmV0ID09IDApCi0JICAgIHJldCA9IDE7Ci0gICAgfQorICAgIHJldCA9IHhtbFNjaGVtYVZhbGlkYXRlU3RyZWFtSW50ZXJuYWwoY3R4dCwgcGN0eHQpOwogCiBkb25lOgotICAgIGN0eHQtPnBhcnNlckN0eHQgPSBOVUxMOwotICAgIGN0eHQtPnNheCA9IE5VTEw7Ci0gICAgY3R4dC0+aW5wdXQgPSBOVUxMOwotICAgIGlmIChwbHVnICE9IE5VTEwpIHsKLSAgICAgICAgeG1sU2NoZW1hU0FYVW5wbHVnKHBsdWcpOwotICAgIH0KICAgICAvKiBjbGVhbnVwICovCiAgICAgaWYgKHBjdHh0ICE9IE5VTEwpIHsKLQlwY3R4dC0+c2F4ID0gb2xkX3NheDsKIAl4bWxGcmVlUGFyc2VyQ3R4dChwY3R4dCk7CiAgICAgfQogICAgIHJldHVybiAocmV0KTsKQEAgLTI5MTQ5LDE3ICsyODg1OCwxOSBAQAogCQkgICAgICBpbnQgb3B0aW9ucyBBVFRSSUJVVEVfVU5VU0VEKQogewogICAgIGludCByZXQ7Ci0gICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQ7CisgICAgeG1sUGFyc2VyQ3R4dFB0ciBwY3R4dCA9IE5VTEw7CiAKICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGZpbGVuYW1lID09IE5VTEwpKQogICAgICAgICByZXR1cm4gKC0xKTsKIAotICAgIGlucHV0ID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVGaWxlbmFtZShmaWxlbmFtZSwKLQlYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkKKyAgICBwY3R4dCA9IHhtbENyZWF0ZVVSTFBhcnNlckN0eHQoZmlsZW5hbWUsIDApOworICAgIGlmIChwY3R4dCA9PSBOVUxMKQogCXJldHVybiAoLTEpOwotICAgIHJldCA9IHhtbFNjaGVtYVZhbGlkYXRlU3RyZWFtKGN0eHQsIGlucHV0LCBYTUxfQ0hBUl9FTkNPRElOR19OT05FLAotCU5VTEwsIE5VTEwpOworICAgIC8qIFdlIHJlYWxseSB3YW50IHBjdHh0LT5zYXggdG8gYmUgTlVMTCBoZXJlLiAqLworICAgIHhtbEZyZWUocGN0eHQtPnNheCk7CisgICAgcGN0eHQtPnNheCA9IE5VTEw7CisgICAgcmV0ID0geG1sU2NoZW1hVmFsaWRhdGVTdHJlYW1JbnRlcm5hbChjdHh0LCBwY3R4dCk7CisgICAgeG1sRnJlZVBhcnNlckN0eHQocGN0eHQpOwogICAgIHJldHVybiAocmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEveG1sc2NoZW1hc3R5cGVzLmMgYi94bWxzY2hlbWFzdHlwZXMuYwppbmRleCAyNmMwMzNkLi5kZTk1ZDk0IDEwMDY0NAotLS0gYS94bWxzY2hlbWFzdHlwZXMuYworKysgYi94bWxzY2hlbWFzdHlwZXMuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaWZkZWYgTElCWE1MX1NDSEVNQVNfRU5BQkxFRAogCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPGZsb2F0Lmg+CkBAIC0yNSw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KICNpbmNsdWRlIDxsaWJ4bWwvaGFzaC5oPgotI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aC5oPgogI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KIApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHNjaGVtYXN0eXBlcy5oPgogCi0jZGVmaW5lIERFQlVHCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgogCiAjaWZuZGVmIExJQlhNTF9YUEFUSF9FTkFCTEVECiBleHRlcm4gZG91YmxlIHhtbFhQYXRoTkFOOwpAQCAtMzgzLDE4ICszODMsNjEgQEAKICAgICByZXR1cm4gKHJldCk7CiB9CiAKK3N0YXRpYyB2b2lkCit4bWxTY2hlbWFGcmVlVHlwZUVudHJ5KHZvaWQgKnR5cGUsIGNvbnN0IHhtbENoYXIgKm5hbWUgQVRUUklCVVRFX1VOVVNFRCkgeworICAgIHhtbFNjaGVtYUZyZWVUeXBlKCh4bWxTY2hlbWFUeXBlUHRyKSB0eXBlKTsKK30KKworLyoqCisgKiB4bWxTY2hlbWFDbGVhbnVwVHlwZXNJbnRlcm5hbDoKKyAqCisgKiBDbGVhbnVwIHRoZSBkZWZhdWx0IFhNTCBTY2hlbWFzIHR5cGUgbGlicmFyeQorICovCitzdGF0aWMgdm9pZAoreG1sU2NoZW1hQ2xlYW51cFR5cGVzSW50ZXJuYWwodm9pZCkgeworICAgIHhtbFNjaGVtYVBhcnRpY2xlUHRyIHBhcnRpY2xlOworCisgICAgLyoKKyAgICAqIEZyZWUgeHM6YW55VHlwZS4KKyAgICAqLworICAgIGlmICh4bWxTY2hlbWFUeXBlQW55VHlwZURlZiAhPSBOVUxMKSB7CisgICAgICAgIC8qIEF0dHJpYnV0ZSB3aWxkY2FyZC4gKi8KKyAgICAgICAgeG1sU2NoZW1hRnJlZVdpbGRjYXJkKHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmLT5hdHRyaWJ1dGVXaWxkY2FyZCk7CisgICAgICAgIC8qIENvbnRlbnQgdHlwZS4gKi8KKyAgICAgICAgcGFydGljbGUgPSAoeG1sU2NoZW1hUGFydGljbGVQdHIpIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmLT5zdWJ0eXBlczsKKyAgICAgICAgLyogV2lsZGNhcmQuICovCisgICAgICAgIHhtbFNjaGVtYUZyZWVXaWxkY2FyZCgoeG1sU2NoZW1hV2lsZGNhcmRQdHIpCisgICAgICAgICAgICBwYXJ0aWNsZS0+Y2hpbGRyZW4tPmNoaWxkcmVuLT5jaGlsZHJlbik7CisgICAgICAgIHhtbEZyZWUoKHhtbFNjaGVtYVBhcnRpY2xlUHRyKSBwYXJ0aWNsZS0+Y2hpbGRyZW4tPmNoaWxkcmVuKTsKKyAgICAgICAgLyogU2VxdWVuY2UgbW9kZWwgZ3JvdXAuICovCisgICAgICAgIHhtbEZyZWUoKHhtbFNjaGVtYU1vZGVsR3JvdXBQdHIpIHBhcnRpY2xlLT5jaGlsZHJlbik7CisgICAgICAgIHhtbEZyZWUoKHhtbFNjaGVtYVBhcnRpY2xlUHRyKSBwYXJ0aWNsZSk7CisgICAgICAgIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmLT5zdWJ0eXBlcyA9IE5VTEw7CisgICAgICAgIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmID0gTlVMTDsKKyAgICB9CisKKyAgICB4bWxIYXNoRnJlZSh4bWxTY2hlbWFUeXBlc0JhbmssIHhtbFNjaGVtYUZyZWVUeXBlRW50cnkpOworICAgIHhtbFNjaGVtYVR5cGVzQmFuayA9IE5VTEw7CisgICAgLyogTm90ZSB0aGF0IHRoZSB4bWxTY2hlbWFUeXBlKkRlZiBwb2ludGVycyBhcmVuJ3Qgc2V0IHRvIE5VTEwuICovCit9CisKIC8qCiAgKiB4bWxTY2hlbWFJbml0VHlwZXM6CiAgKgogICogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBYTUwgU2NoZW1hcyB0eXBlIGxpYnJhcnkKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCiAgKi8KLXZvaWQKK2ludAogeG1sU2NoZW1hSW5pdFR5cGVzKHZvaWQpCiB7CiAgICAgaWYgKHhtbFNjaGVtYVR5cGVzSW5pdGlhbGl6ZWQgIT0gMCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gKDApOwogICAgIHhtbFNjaGVtYVR5cGVzQmFuayA9IHhtbEhhc2hDcmVhdGUoNDApOwotCisgICAgaWYgKHhtbFNjaGVtYVR5cGVzQmFuayA9PSBOVUxMKSB7CisJeG1sU2NoZW1hVHlwZUVyck1lbW9yeShOVUxMLCBOVUxMKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICAvKgogICAgICogMy40LjcgQnVpbHQtaW4gQ29tcGxleCBUeXBlIERlZmluaXRpb24KQEAgLTQwMiw2ICs0NDUsOCBAQAogICAgIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiYW55VHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0FOWVRZUEUsCiAJCQkJCQkgICAgIE5VTEwpOworICAgIGlmICh4bWxTY2hlbWFUeXBlQW55VHlwZURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmLT5iYXNlVHlwZSA9IHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmOwogICAgIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmLT5jb250ZW50VHlwZSA9IFhNTF9TQ0hFTUFfQ09OVEVOVF9NSVhFRDsKICAgICAvKgpAQCAtNDE1LDE0ICs0NjAsMTQgQEAKIAkvKiBGaXJzdCBwYXJ0aWNsZS4gKi8KIAlwYXJ0aWNsZSA9IHhtbFNjaGVtYUFkZFBhcnRpY2xlKCk7CiAJaWYgKHBhcnRpY2xlID09IE5VTEwpCi0JICAgIHJldHVybjsKKwkgICAgZ290byBlcnJvcjsKIAl4bWxTY2hlbWFUeXBlQW55VHlwZURlZi0+c3VidHlwZXMgPSAoeG1sU2NoZW1hVHlwZVB0cikgcGFydGljbGU7CiAJLyogU2VxdWVuY2UgbW9kZWwgZ3JvdXAuICovCiAJc2VxdWVuY2UgPSAoeG1sU2NoZW1hTW9kZWxHcm91cFB0cikKIAkgICAgeG1sTWFsbG9jKHNpemVvZih4bWxTY2hlbWFNb2RlbEdyb3VwKSk7CiAJaWYgKHNlcXVlbmNlID09IE5VTEwpIHsKIAkgICAgeG1sU2NoZW1hVHlwZUVyck1lbW9yeShOVUxMLCAiYWxsb2NhdGluZyBtb2RlbCBncm91cCBjb21wb25lbnQiKTsKLQkgICAgcmV0dXJuOworCSAgICBnb3RvIGVycm9yOwogCX0KIAltZW1zZXQoc2VxdWVuY2UsIDAsIHNpemVvZih4bWxTY2hlbWFNb2RlbEdyb3VwKSk7CiAJc2VxdWVuY2UtPnR5cGUgPSBYTUxfU0NIRU1BX1RZUEVfU0VRVUVOQ0U7CkBAIC00MzAsNyArNDc1LDcgQEAKIAkvKiBTZWNvbmQgcGFydGljbGUuICovCiAJcGFydGljbGUgPSB4bWxTY2hlbWFBZGRQYXJ0aWNsZSgpOwogCWlmIChwYXJ0aWNsZSA9PSBOVUxMKQotCSAgICByZXR1cm47CisJICAgIGdvdG8gZXJyb3I7CiAJcGFydGljbGUtPm1pbk9jY3VycyA9IDA7CiAJcGFydGljbGUtPm1heE9jY3VycyA9IFVOQk9VTkRFRDsKIAlzZXF1ZW5jZS0+Y2hpbGRyZW4gPSAoeG1sU2NoZW1hVHJlZUl0ZW1QdHIpIHBhcnRpY2xlOwpAQCAtNDM4LDcgKzQ4Myw3IEBACiAJd2lsZCA9ICh4bWxTY2hlbWFXaWxkY2FyZFB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxTY2hlbWFXaWxkY2FyZCkpOwogCWlmICh3aWxkID09IE5VTEwpIHsKIAkgICAgeG1sU2NoZW1hVHlwZUVyck1lbW9yeShOVUxMLCAiYWxsb2NhdGluZyB3aWxkY2FyZCBjb21wb25lbnQiKTsKLQkgICAgcmV0dXJuOworCSAgICBnb3RvIGVycm9yOwogCX0KIAltZW1zZXQod2lsZCwgMCwgc2l6ZW9mKHhtbFNjaGVtYVdpbGRjYXJkKSk7CiAJd2lsZC0+dHlwZSA9IFhNTF9TQ0hFTUFfVFlQRV9BTlk7CkBAIC00NTIsNyArNDk3LDcgQEAKIAlpZiAod2lsZCA9PSBOVUxMKSB7CiAJICAgIHhtbFNjaGVtYVR5cGVFcnJNZW1vcnkoTlVMTCwgImNvdWxkIG5vdCBjcmVhdGUgYW4gYXR0cmlidXRlICIKIAkJIndpbGRjYXJkIG9uIGFueVR5cGUiKTsKLQkgICAgcmV0dXJuOworCSAgICBnb3RvIGVycm9yOwogCX0KIAltZW1zZXQod2lsZCwgMCwgc2l6ZW9mKHhtbFNjaGVtYVdpbGRjYXJkKSk7CiAJd2lsZC0+YW55ID0gMTsKQEAgLTQ2Miw2NiArNTA3LDEwNiBAQAogICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiYW55U2ltcGxlVHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0FOWVNJTVBMRVRZUEUsCiAJCQkJCQkJICAgeG1sU2NoZW1hVHlwZUFueVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlQW55U2ltcGxlVHlwZURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIC8qCiAgICAgKiBwcmltaXRpdmUgZGF0YXR5cGVzCiAgICAgKi8KICAgICB4bWxTY2hlbWFUeXBlU3RyaW5nRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19TVFJJTkcsCiAJCQkJCQkgICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlU3RyaW5nRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZURlY2ltYWxEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJkZWNpbWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfREVDSU1BTCwKIAkJCQkJCSAgICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlRGVjaW1hbERlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVEYXRlRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiZGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0RBVEUsCiAJCQkJCQkgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZURhdGVEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlRGF0ZXRpbWVEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJkYXRlVGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19EQVRFVElNRSwKIAkJCQkJCSAgICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZURhdGV0aW1lRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZVRpbWVEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJ0aW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfVElNRSwKIAkJCQkJCSAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlVGltZURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVHWWVhckRlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImdZZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0dZRUFSLAogCQkJCQkJICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlR1llYXJEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlR1llYXJNb250aERlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImdZZWFyTW9udGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19HWUVBUk1PTlRILAogCQkJCQkJCXhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUdZZWFyTW9udGhEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlR01vbnRoRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiZ01vbnRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19HTU9OVEgsCiAJCQkJCQkgICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlR01vbnRoRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZUdNb250aERheURlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImdNb250aERheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfR01PTlRIREFZLAogCQkJCQkJICAgICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUdNb250aERheURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVHRGF5RGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiZ0RheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0dEQVksCiAJCQkJCQkgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUdEYXlEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlRHVyYXRpb25EZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJkdXJhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19EVVJBVElPTiwKIAkJCQkJCSAgICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUR1cmF0aW9uRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZUZsb2F0RGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiZmxvYXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfRkxPQVQsCiAJCQkJCQkgICB4bWxTY2hlbWFUeXBlQW55U2ltcGxlVHlwZURlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVGbG9hdERlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVEb3VibGVEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJkb3VibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0RPVUJMRSwKIAkJCQkJCSAgICB4bWxTY2hlbWFUeXBlQW55U2ltcGxlVHlwZURlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVEb3VibGVEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlQm9vbGVhbkRlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19CT09MRUFOLAogCQkJCQkJICAgICB4bWxTY2hlbWFUeXBlQW55U2ltcGxlVHlwZURlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVCb29sZWFuRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZUFueVVSSURlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImFueVVSSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfQU5ZVVJJLAogCQkJCQkJICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUFueVVSSURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVIZXhCaW5hcnlEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJoZXhCaW5hcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19IRVhCSU5BUlksCiAJCQkJCQkgICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUhleEJpbmFyeURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVCYXNlNjRCaW5hcnlEZWYKICAgICAgICAgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJiYXNlNjRCaW5hcnkiLCBYTUxfU0NIRU1BU19CQVNFNjRCSU5BUlksCiAJeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlQmFzZTY0QmluYXJ5RGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZU5vdGF0aW9uRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiTk9UQVRJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX05PVEFUSU9OLAogCQkJCQkJICAgIHhtbFNjaGVtYVR5cGVBbnlTaW1wbGVUeXBlRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZU5vdGF0aW9uRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZVFOYW1lRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiUU5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfUU5BTUUsCiAJCQkJCQkgICB4bWxTY2hlbWFUeXBlQW55U2ltcGxlVHlwZURlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVRTmFtZURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgLyoKICAgICAgKiBkZXJpdmVkIGRhdGF0eXBlcwpAQCAtNTI5LDY5ICs2MTQsMTEzIEBACiAgICAgeG1sU2NoZW1hVHlwZUludGVnZXJEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfSU5URUdFUiwKIAkJCQkJCSAgICAgeG1sU2NoZW1hVHlwZURlY2ltYWxEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlSW50ZWdlckRlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVOb25Qb3NpdGl2ZUludGVnZXJEZWYgPQogICAgICAgICB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJub25Qb3NpdGl2ZUludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX05QSU5URUdFUiwKIAkJCSAgICAgICB4bWxTY2hlbWFUeXBlSW50ZWdlckRlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVOb25Qb3NpdGl2ZUludGVnZXJEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlTmVnYXRpdmVJbnRlZ2VyRGVmID0KICAgICAgICAgeG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgibmVnYXRpdmVJbnRlZ2VyIiwgWE1MX1NDSEVNQVNfTklOVEVHRVIsCiAJeG1sU2NoZW1hVHlwZU5vblBvc2l0aXZlSW50ZWdlckRlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVOZWdhdGl2ZUludGVnZXJEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlTG9uZ0RlZiA9CiAgICAgICAgIHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImxvbmciLCBYTUxfU0NIRU1BU19MT05HLAogCXhtbFNjaGVtYVR5cGVJbnRlZ2VyRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUxvbmdEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlSW50RGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiaW50IiwgWE1MX1NDSEVNQVNfSU5ULAogCXhtbFNjaGVtYVR5cGVMb25nRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUludERlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVTaG9ydERlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoInNob3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX1NIT1JULAogCQkJCQkJICAgeG1sU2NoZW1hVHlwZUludERlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVTaG9ydERlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVCeXRlRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiYnl0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0JZVEUsCiAJCQkJCQkgIHhtbFNjaGVtYVR5cGVTaG9ydERlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVCeXRlRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZU5vbk5lZ2F0aXZlSW50ZWdlckRlZiA9CiAgICAgICAgIHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoIm5vbk5lZ2F0aXZlSW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfTk5JTlRFR0VSLAogCQkJICAgICAgIHhtbFNjaGVtYVR5cGVJbnRlZ2VyRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZU5vbk5lZ2F0aXZlSW50ZWdlckRlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVVbnNpZ25lZExvbmdEZWYgPQogICAgICAgICB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJ1bnNpZ25lZExvbmciLCBYTUxfU0NIRU1BU19VTE9ORywKIAl4bWxTY2hlbWFUeXBlTm9uTmVnYXRpdmVJbnRlZ2VyRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZVVuc2lnbmVkTG9uZ0RlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVVbnNpZ25lZEludERlZiA9CiAgICAgICAgIHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoInVuc2lnbmVkSW50IiwgWE1MX1NDSEVNQVNfVUlOVCwKIAl4bWxTY2hlbWFUeXBlVW5zaWduZWRMb25nRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZVVuc2lnbmVkSW50RGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZVVuc2lnbmVkU2hvcnREZWYgPQogICAgICAgICB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJ1bnNpZ25lZFNob3J0IiwgWE1MX1NDSEVNQVNfVVNIT1JULAogCXhtbFNjaGVtYVR5cGVVbnNpZ25lZEludERlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVVbnNpZ25lZFNob3J0RGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZVVuc2lnbmVkQnl0ZURlZiA9CiAgICAgICAgIHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoInVuc2lnbmVkQnl0ZSIsIFhNTF9TQ0hFTUFTX1VCWVRFLAogCXhtbFNjaGVtYVR5cGVVbnNpZ25lZFNob3J0RGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZVVuc2lnbmVkQnl0ZURlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVQb3NpdGl2ZUludGVnZXJEZWYgPQogICAgICAgICB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJwb3NpdGl2ZUludGVnZXIiLCBYTUxfU0NIRU1BU19QSU5URUdFUiwKIAl4bWxTY2hlbWFUeXBlTm9uTmVnYXRpdmVJbnRlZ2VyRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZVBvc2l0aXZlSW50ZWdlckRlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVOb3JtU3RyaW5nRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgibm9ybWFsaXplZFN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX05PUk1TVFJJTkcsCiAJCQkJCQkJeG1sU2NoZW1hVHlwZVN0cmluZ0RlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVOb3JtU3RyaW5nRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZVRva2VuRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgidG9rZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfVE9LRU4sCiAJCQkJCQkgICB4bWxTY2hlbWFUeXBlTm9ybVN0cmluZ0RlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVUb2tlbkRlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVMYW5ndWFnZURlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoImxhbmd1YWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0xBTkdVQUdFLAogCQkJCQkJICAgICAgeG1sU2NoZW1hVHlwZVRva2VuRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZUxhbmd1YWdlRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZU5hbWVEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJOYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NDSEVNQVNfTkFNRSwKIAkJCQkJCSAgeG1sU2NoZW1hVHlwZVRva2VuRGVmKTsKKyAgICBpZiAoeG1sU2NoZW1hVHlwZU5hbWVEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlTm10b2tlbkRlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoIk5NVE9LRU4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19OTVRPS0VOLAogCQkJCQkJICAgICB4bWxTY2hlbWFUeXBlVG9rZW5EZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlTm10b2tlbkRlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHhtbFNjaGVtYVR5cGVOQ05hbWVEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJOQ05hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX05DTkFNRSwKIAkJCQkJCSAgICB4bWxTY2hlbWFUeXBlTmFtZURlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVOQ05hbWVEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlSWREZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJJRCIsIFhNTF9TQ0hFTUFTX0lELAogCQkJCQkJICAgIHhtbFNjaGVtYVR5cGVOQ05hbWVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlSWREZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlSWRyZWZEZWYgPSB4bWxTY2hlbWFJbml0QmFzaWNUeXBlKCJJRFJFRiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19JRFJFRiwKIAkJCQkJCSAgIHhtbFNjaGVtYVR5cGVOQ05hbWVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlSWRyZWZEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlRW50aXR5RGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiRU5USVRZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19FTlRJVFksCiAJCQkJCQkgICAgeG1sU2NoZW1hVHlwZU5DTmFtZURlZik7CisgICAgaWYgKHhtbFNjaGVtYVR5cGVFbnRpdHlEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICAvKgogICAgICogRGVyaXZlZCBsaXN0IHR5cGVzLgogICAgICovCkBAIC01OTksMjUgKzcyOCwzMSBAQAogICAgIHhtbFNjaGVtYVR5cGVFbnRpdGllc0RlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoIkVOVElUSUVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX0VOVElUSUVTLAogCQkJCQkJICAgICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlRW50aXRpZXNEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlRW50aXRpZXNEZWYtPnN1YnR5cGVzID0geG1sU2NoZW1hVHlwZUVudGl0eURlZjsKICAgICAvKiBJRFJFRlMgKi8KICAgICB4bWxTY2hlbWFUeXBlSWRyZWZzRGVmID0geG1sU2NoZW1hSW5pdEJhc2ljVHlwZSgiSURSRUZTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU0NIRU1BU19JRFJFRlMsCiAJCQkJCQkgICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlSWRyZWZzRGVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgeG1sU2NoZW1hVHlwZUlkcmVmc0RlZi0+c3VidHlwZXMgPSB4bWxTY2hlbWFUeXBlSWRyZWZEZWY7CiAKICAgICAvKiBOTVRPS0VOUyAqLwogICAgIHhtbFNjaGVtYVR5cGVObXRva2Vuc0RlZiA9IHhtbFNjaGVtYUluaXRCYXNpY1R5cGUoIk5NVE9LRU5TIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TQ0hFTUFTX05NVE9LRU5TLAogCQkJCQkJICAgICAgeG1sU2NoZW1hVHlwZUFueVNpbXBsZVR5cGVEZWYpOworICAgIGlmICh4bWxTY2hlbWFUeXBlTm10b2tlbnNEZWYgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB4bWxTY2hlbWFUeXBlTm10b2tlbnNEZWYtPnN1YnR5cGVzID0geG1sU2NoZW1hVHlwZU5tdG9rZW5EZWY7CiAKICAgICB4bWxTY2hlbWFUeXBlc0luaXRpYWxpemVkID0gMTsKLX0KKyAgICByZXR1cm4gKDApOwogCi1zdGF0aWMgdm9pZAoteG1sU2NoZW1hRnJlZVR5cGVFbnRyeSh2b2lkICp0eXBlLCBjb25zdCB4bWxDaGFyICpuYW1lIEFUVFJJQlVURV9VTlVTRUQpIHsKLSAgICB4bWxTY2hlbWFGcmVlVHlwZSgoeG1sU2NoZW1hVHlwZVB0cikgdHlwZSk7CitlcnJvcjoKKyAgICB4bWxTY2hlbWFDbGVhbnVwVHlwZXNJbnRlcm5hbCgpOworICAgIHJldHVybiAoLTEpOwogfQogCiAvKioKQEAgLTYyNiwzNCArNzYxLDE2IEBACiAgKiBERVBSRUNBVEVEOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgbWFkZSBwcml2YXRlLiBDYWxsIHhtbENsZWFudXBQYXJzZXIKICAqIHRvIGZyZWUgZ2xvYmFsIHN0YXRlIGJ1dCBzZWUgdGhlIHdhcm5pbmdzIHRoZXJlLiB4bWxDbGVhbnVwUGFyc2VyCiAgKiBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSBhdCBwcm9ncmFtIGV4aXQuIEluIG1vc3QgY2FzZXMsIHlvdSBkb24ndAotICogaGF2ZSBjYWxsIGNsZWFudXAgZnVuY3Rpb25zIGF0IGFsbC4KKyAqIGhhdmUgdG8gY2FsbCBjbGVhbnVwIGZ1bmN0aW9ucyBhdCBhbGwuCiAgKgogICogQ2xlYW51cCB0aGUgZGVmYXVsdCBYTUwgU2NoZW1hcyB0eXBlIGxpYnJhcnkKICAqLwogdm9pZAogeG1sU2NoZW1hQ2xlYW51cFR5cGVzKHZvaWQpIHsKLSAgICBpZiAoeG1sU2NoZW1hVHlwZXNJbml0aWFsaXplZCA9PSAwKQotCXJldHVybjsKLSAgICAvKgotICAgICogRnJlZSB4czphbnlUeXBlLgotICAgICovCi0gICAgewotCXhtbFNjaGVtYVBhcnRpY2xlUHRyIHBhcnRpY2xlOwotCS8qIEF0dHJpYnV0ZSB3aWxkY2FyZC4gKi8KLQl4bWxTY2hlbWFGcmVlV2lsZGNhcmQoeG1sU2NoZW1hVHlwZUFueVR5cGVEZWYtPmF0dHJpYnV0ZVdpbGRjYXJkKTsKLQkvKiBDb250ZW50IHR5cGUuICovCi0JcGFydGljbGUgPSAoeG1sU2NoZW1hUGFydGljbGVQdHIpIHhtbFNjaGVtYVR5cGVBbnlUeXBlRGVmLT5zdWJ0eXBlczsKLQkvKiBXaWxkY2FyZC4gKi8KLQl4bWxTY2hlbWFGcmVlV2lsZGNhcmQoKHhtbFNjaGVtYVdpbGRjYXJkUHRyKQotCSAgICBwYXJ0aWNsZS0+Y2hpbGRyZW4tPmNoaWxkcmVuLT5jaGlsZHJlbik7Ci0JeG1sRnJlZSgoeG1sU2NoZW1hUGFydGljbGVQdHIpIHBhcnRpY2xlLT5jaGlsZHJlbi0+Y2hpbGRyZW4pOwotCS8qIFNlcXVlbmNlIG1vZGVsIGdyb3VwLiAqLwotCXhtbEZyZWUoKHhtbFNjaGVtYU1vZGVsR3JvdXBQdHIpIHBhcnRpY2xlLT5jaGlsZHJlbik7Ci0JeG1sRnJlZSgoeG1sU2NoZW1hUGFydGljbGVQdHIpIHBhcnRpY2xlKTsKLQl4bWxTY2hlbWFUeXBlQW55VHlwZURlZi0+c3VidHlwZXMgPSBOVUxMOworICAgIGlmICh4bWxTY2hlbWFUeXBlc0luaXRpYWxpemVkICE9IDApIHsKKyAgICAgICAgeG1sU2NoZW1hQ2xlYW51cFR5cGVzSW50ZXJuYWwoKTsKKyAgICAgICAgeG1sU2NoZW1hVHlwZXNJbml0aWFsaXplZCA9IDA7CiAgICAgfQotICAgIHhtbEhhc2hGcmVlKHhtbFNjaGVtYVR5cGVzQmFuaywgeG1sU2NoZW1hRnJlZVR5cGVFbnRyeSk7Ci0gICAgeG1sU2NoZW1hVHlwZXNJbml0aWFsaXplZCA9IDA7CiB9CiAKIC8qKgpAQCAtNzQ4LDggKzg2NSw5IEBACiB4bWxTY2hlbWFUeXBlUHRyCiB4bWxTY2hlbWFHZXRCdWlsdEluVHlwZSh4bWxTY2hlbWFWYWxUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKHhtbFNjaGVtYVR5cGVzSW5pdGlhbGl6ZWQgPT0gMCkKLQl4bWxTY2hlbWFJbml0VHlwZXMoKTsKKyAgICBpZiAoKHhtbFNjaGVtYVR5cGVzSW5pdGlhbGl6ZWQgPT0gMCkgJiYKKwkoeG1sU2NoZW1hSW5pdFR5cGVzKCkgPCAwKSkKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKIAogCWNhc2UgWE1MX1NDSEVNQVNfQU5ZU0lNUExFVFlQRToKQEAgLTEwODEsOCArMTE5OSw5IEBACiAgKi8KIHhtbFNjaGVtYVR5cGVQdHIKIHhtbFNjaGVtYUdldFByZWRlZmluZWRUeXBlKGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKm5zKSB7Ci0gICAgaWYgKHhtbFNjaGVtYVR5cGVzSW5pdGlhbGl6ZWQgPT0gMCkKLQl4bWxTY2hlbWFJbml0VHlwZXMoKTsKKyAgICBpZiAoKHhtbFNjaGVtYVR5cGVzSW5pdGlhbGl6ZWQgPT0gMCkgJiYKKwkoeG1sU2NoZW1hSW5pdFR5cGVzKCkgPCAwKSkKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICBpZiAobmFtZSA9PSBOVUxMKQogCXJldHVybihOVUxMKTsKICAgICByZXR1cm4oKHhtbFNjaGVtYVR5cGVQdHIpIHhtbEhhc2hMb29rdXAyKHhtbFNjaGVtYVR5cGVzQmFuaywgbmFtZSwgbnMpKTsKQEAgLTExNzgsMjUgKzEyOTcsNiBAQAogICAgICAgICAgICAgICAgIGRheUluTGVhcFllYXJCeU1vbnRoW21vbnRoIC0gMV0gOgkJXAogICAgICAgICAgICAgICAgIGRheUluWWVhckJ5TW9udGhbbW9udGggLSAxXSkgKyBkYXkpCiAKLSNpZmRlZiBERUJVRwotI2RlZmluZSBERUJVR19EQVRFKGR0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAidHlwZT0lbyAlMDRsZC0lMDJ1LSUwMnVUJTAydTolMDJ1OiUwM2YiLCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkdC0+dHlwZSxkdC0+dmFsdWUuZGF0ZS55ZWFyLGR0LT52YWx1ZS5kYXRlLm1vbiwgICAgICAgICAgICAgICAgXAotICAgICAgICBkdC0+dmFsdWUuZGF0ZS5kYXksZHQtPnZhbHVlLmRhdGUuaG91cixkdC0+dmFsdWUuZGF0ZS5taW4sICAgICAgXAotICAgICAgICBkdC0+dmFsdWUuZGF0ZS5zZWMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChkdC0+dmFsdWUuZGF0ZS50el9mbGFnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZHQtPnZhbHVlLmRhdGUudHpvICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIlKzA1ZFxuIixkdC0+dmFsdWUuZGF0ZS50em8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJaXG4iKTsgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwiXG4iKQotI2Vsc2UKLSNkZWZpbmUgREVCVUdfREFURShkdCkKLSNlbmRpZgotCiAvKioKICAqIF94bWxTY2hlbWFQYXJzZUdZZWFyOgogICogQGR0OiAgcG9pbnRlciB0byBhIGRhdGUgc3RydWN0dXJlCkBAIC0yMjUxLDggKzIzNTEsOSBAQAogICAgIHhtbENoYXIgKm5vcm0gPSBOVUxMOwogICAgIGludCByZXQgPSAwOwogCi0gICAgaWYgKHhtbFNjaGVtYVR5cGVzSW5pdGlhbGl6ZWQgPT0gMCkKLSAgICAgICAgeG1sU2NoZW1hSW5pdFR5cGVzKCk7CisgICAgaWYgKCh4bWxTY2hlbWFUeXBlc0luaXRpYWxpemVkID09IDApICYmCisJKHhtbFNjaGVtYUluaXRUeXBlcygpIDwgMCkpCisgICAgICAgIHJldHVybiAoLTEpOwogICAgIGlmICh0eXBlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoLTEpOwogCkBAIC0zMDM0LDYgKzMxMzUsOCBAQAogCQkJICAgIHZhbHVlID0gbm9ybTsKIAkJICAgIH0KIAkJICAgIHRtcHZhbCA9IHhtbFN0cmR1cCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXB2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAJCSAgICBmb3IgKGN1ciA9IHRtcHZhbDsgKmN1cjsgKytjdXIpIHsKIAkJCWlmICgqY3VyIDwgMzIgfHwgKmN1ciA+PSAxMjcgfHwgKmN1ciA9PSAnICcgfHwKIAkJCSAgICAqY3VyID09ICc8JyB8fCAqY3VyID09ICc+JyB8fCAqY3VyID09ICciJyB8fApAQCAtMzIyMCw4ICszMzIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIGJhc2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKChpICsgcGFkICsgMSkgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih4bWxDaGFyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoaSArIHBhZCArIDEpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSBOVUxMKSB7CiAJCSAgICAgICAgeG1sU2NoZW1hVHlwZUVyck1lbW9yeShub2RlLCAiYWxsb2NhdGluZyBiYXNlNjQgZGF0YSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgeG1sRnJlZSh2KTsKQEAgLTQxNDEsOSArNDI0MywxNSBAQAogCiAgICAgICAgIGlmICgheS0+dmFsdWUuZGF0ZS50el9mbGFnKSB7CiAgICAgICAgICAgICBwMSA9IHhtbFNjaGVtYURhdGVOb3JtYWxpemUoeCwgMCk7CisgICAgICAgICAgICBpZiAocDEgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgICAgICBwMWQgPSBfeG1sU2NoZW1hRGF0ZUNhc3RZTVRvRGF5cyhwMSkgKyBwMS0+dmFsdWUuZGF0ZS5kYXk7CiAgICAgICAgICAgICAvKiBub3JtYWxpemUgeSArIDE0OjAwICovCiAgICAgICAgICAgICBxMSA9IHhtbFNjaGVtYURhdGVOb3JtYWxpemUoeSwgKDE0ICogU0VDU19QRVJfSE9VUikpOworICAgICAgICAgICAgaWYgKHExID09IE5VTEwpIHsKKwkJeG1sU2NoZW1hRnJlZVZhbHVlKHAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHExZCA9IF94bWxTY2hlbWFEYXRlQ2FzdFlNVG9EYXlzKHExKSArIHExLT52YWx1ZS5kYXRlLmRheTsKICAgICAgICAgICAgIGlmIChwMWQgPCBxMWQpIHsKQEAgLTQxNjIsNiArNDI3MCwxMSBAQAogCQkgICAgaW50IHJldCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIC8qIG5vcm1hbGl6ZSB5IC0gMTQ6MDAgKi8KICAgICAgICAgICAgICAgICAgICAgcTIgPSB4bWxTY2hlbWFEYXRlTm9ybWFsaXplKHksIC0oMTQgKiBTRUNTX1BFUl9IT1VSKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChxMiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4bWxTY2hlbWFGcmVlVmFsdWUocDEpOworICAgICAgICAgICAgICAgICAgICAgICAgeG1sU2NoZW1hRnJlZVZhbHVlKHExKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBxMmQgPSBfeG1sU2NoZW1hRGF0ZUNhc3RZTVRvRGF5cyhxMikgKyBxMi0+dmFsdWUuZGF0ZS5kYXk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwMWQgPiBxMmQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAxOwpAQCAtNDE4NSwxMCArNDI5OCwxNiBAQAogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh5LT52YWx1ZS5kYXRlLnR6X2ZsYWcpIHsKICAgICAgICAgcTEgPSB4bWxTY2hlbWFEYXRlTm9ybWFsaXplKHksIDApOworICAgICAgICBpZiAocTEgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICAgcTFkID0gX3htbFNjaGVtYURhdGVDYXN0WU1Ub0RheXMocTEpICsgcTEtPnZhbHVlLmRhdGUuZGF5OwogCiAgICAgICAgIC8qIG5vcm1hbGl6ZSB4IC0gMTQ6MDAgKi8KICAgICAgICAgcDEgPSB4bWxTY2hlbWFEYXRlTm9ybWFsaXplKHgsIC0oMTQgKiBTRUNTX1BFUl9IT1VSKSk7CisgICAgICAgIGlmIChwMSA9PSBOVUxMKSB7CisJICAgIHhtbFNjaGVtYUZyZWVWYWx1ZShxMSk7CisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KICAgICAgICAgcDFkID0gX3htbFNjaGVtYURhdGVDYXN0WU1Ub0RheXMocDEpICsgcDEtPnZhbHVlLmRhdGUuZGF5OwogCiAgICAgICAgIGlmIChwMWQgPCBxMWQpIHsKQEAgLTQyMDcsNiArNDMyNiwxMSBAQAogCSAgICAgICAgaW50IHJldCA9IDA7CiAgICAgICAgICAgICAgICAgLyogbm9ybWFsaXplIHggKyAxNDowMCAqLwogICAgICAgICAgICAgICAgIHAyID0geG1sU2NoZW1hRGF0ZU5vcm1hbGl6ZSh4LCAoMTQgKiBTRUNTX1BFUl9IT1VSKSk7CisgICAgICAgICAgICAgICAgaWYgKHAyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgeG1sU2NoZW1hRnJlZVZhbHVlKHAxKTsKKyAgICAgICAgICAgICAgICAgICAgeG1sU2NoZW1hRnJlZVZhbHVlKHExKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwMmQgPSBfeG1sU2NoZW1hRGF0ZUNhc3RZTVRvRGF5cyhwMikgKyBwMi0+dmFsdWUuZGF0ZS5kYXk7CiAKICAgICAgICAgICAgICAgICBpZiAocDJkID4gcTFkKSB7CkBAIC00MjM2LDkgKzQzNjAsMTUgQEAKICAgICBpZiAoeC0+dHlwZSA9PSB5LT50eXBlKSB7CiAgICAgICAgIGludCByZXQgPSAwOwogICAgICAgICBxMSA9IHhtbFNjaGVtYURhdGVOb3JtYWxpemUoeSwgMCk7CisgICAgICAgIGlmIChxMSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0yOwogICAgICAgICBxMWQgPSBfeG1sU2NoZW1hRGF0ZUNhc3RZTVRvRGF5cyhxMSkgKyBxMS0+dmFsdWUuZGF0ZS5kYXk7CiAKICAgICAgICAgcDEgPSB4bWxTY2hlbWFEYXRlTm9ybWFsaXplKHgsIDApOworICAgICAgICBpZiAocDEgPT0gTlVMTCkgeworCSAgICB4bWxTY2hlbWFGcmVlVmFsdWUocTEpOworICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CiAgICAgICAgIHAxZCA9IF94bWxTY2hlbWFEYXRlQ2FzdFlNVG9EYXlzKHAxKSArIHAxLT52YWx1ZS5kYXRlLmRheTsKIAogICAgICAgICBpZiAocDFkIDwgcTFkKSB7CmRpZmYgLS1naXQgYS94bWxzdHJpbmcuYyBiL3htbHN0cmluZy5jCmluZGV4IDQ2MzAxYzMuLmQ5ZTE2ZDcgMTAwNjQ0Ci0tLSBhL3htbHN0cmluZy5jCisrKyBiL3htbHN0cmluZy5jCkBAIC0yMyw2ICsyMyw5IEBACiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvcGFyc2VyLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9zdHJpbmcuaCIKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgQ29tbW9kaXR5IGZ1bmN0aW9ucyB0byBoYW5kbGUgeG1sQ2hhcnMgICAgICAgICAgICAgICAgKgpAQCAtNDMsMTIgKzQ2LDExIEBACiAgICAgeG1sQ2hhciAqcmV0OwogCiAgICAgaWYgKChjdXIgPT0gTlVMTCkgfHwgKGxlbiA8IDApKSByZXR1cm4oTlVMTCk7Ci0gICAgcmV0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKCgoc2l6ZV90KSBsZW4gKyAxKSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgcmV0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKChzaXplX3QpIGxlbiArIDEpOwogICAgIGlmIChyZXQgPT0gTlVMTCkgewotICAgICAgICB4bWxFcnJNZW1vcnkoTlVMTCwgTlVMTCk7CiAgICAgICAgIHJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtY3B5KHJldCwgY3VyLCBsZW4gKiBzaXplb2YoeG1sQ2hhcikpOworICAgIG1lbWNweShyZXQsIGN1ciwgbGVuKTsKICAgICByZXRbbGVuXSA9IDA7CiAgICAgcmV0dXJuKHJldCk7CiB9CkBAIC04OCwxMiArOTAsMTIgQEAKICAgICB4bWxDaGFyICpyZXQ7CiAKICAgICBpZiAoKGN1ciA9PSBOVUxMKSB8fCAobGVuIDwgMCkpIHJldHVybihOVUxMKTsKLSAgICByZXQgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoKChzaXplX3QpIGxlbiArIDEpICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICByZXQgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoKHNpemVfdCkgbGVuICsgMSk7CiAgICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIHhtbEVyck1lbW9yeShOVUxMLCBOVUxMKTsKICAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgIH0KICAgICBmb3IgKGkgPSAwO2kgPCBsZW47aSsrKSB7CisgICAgICAgIC8qIEV4cGxpY2l0IHNpZ24gY2hhbmdlICovCiAgICAgICAgIHJldFtpXSA9ICh4bWxDaGFyKSBjdXJbaV07CiAgICAgICAgIGlmIChyZXRbaV0gPT0gMCkgcmV0dXJuKHJldCk7CiAgICAgfQpAQCAtNDU3LDEyICs0NTksMTEgQEAKICAgICBzaXplID0geG1sU3RybGVuKGN1cik7CiAgICAgaWYgKChzaXplIDwgMCkgfHwgKHNpemUgPiBJTlRfTUFYIC0gbGVuKSkKICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIHJldCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoY3VyLCAoKHNpemVfdCkgc2l6ZSArIGxlbiArIDEpICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICByZXQgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGN1ciwgKHNpemVfdCkgc2l6ZSArIGxlbiArIDEpOwogICAgIGlmIChyZXQgPT0gTlVMTCkgewotICAgICAgICB4bWxFcnJNZW1vcnkoTlVMTCwgTlVMTCk7CiAgICAgICAgIHJldHVybihjdXIpOwogICAgIH0KLSAgICBtZW1jcHkoJnJldFtzaXplXSwgYWRkLCBsZW4gKiBzaXplb2YoeG1sQ2hhcikpOworICAgIG1lbWNweSgmcmV0W3NpemVdLCBhZGQsIGxlbik7CiAgICAgcmV0W3NpemUgKyBsZW5dID0gMDsKICAgICByZXR1cm4ocmV0KTsKIH0KQEAgLTQ5NywxMyArNDk4LDEyIEBACiAgICAgc2l6ZSA9IHhtbFN0cmxlbihzdHIxKTsKICAgICBpZiAoKHNpemUgPCAwKSB8fCAoc2l6ZSA+IElOVF9NQVggLSBsZW4pKQogICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgcmV0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jKCgoc2l6ZV90KSBzaXplICsgbGVuICsgMSkgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIHJldCA9ICh4bWxDaGFyICopIHhtbE1hbGxvYygoc2l6ZV90KSBzaXplICsgbGVuICsgMSk7CiAgICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIHhtbEVyck1lbW9yeShOVUxMLCBOVUxMKTsKICAgICAgICAgcmV0dXJuKHhtbFN0cm5kdXAoc3RyMSwgc2l6ZSkpOwogICAgIH0KLSAgICBtZW1jcHkocmV0LCBzdHIxLCBzaXplICogc2l6ZW9mKHhtbENoYXIpKTsKLSAgICBtZW1jcHkoJnJldFtzaXplXSwgc3RyMiwgbGVuICogc2l6ZW9mKHhtbENoYXIpKTsKKyAgICBtZW1jcHkocmV0LCBzdHIxLCBzaXplKTsKKyAgICBtZW1jcHkoJnJldFtzaXplXSwgc3RyMiwgbGVuKTsKICAgICByZXRbc2l6ZSArIGxlbl0gPSAwOwogICAgIHJldHVybihyZXQpOwogfQpAQCAtNTQzLDcgKzU0Myw3IEBACiAgKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBAYnVmIG9yIC0xIGlmIGFuIGVycm9yIG9jY3Vycy4KICAqLwotaW50IFhNTENERUNMCitpbnQKIHhtbFN0clByaW50Zih4bWxDaGFyICpidWYsIGludCBsZW4sIGNvbnN0IGNoYXIgKm1zZywgLi4uKSB7CiAgICAgdmFfbGlzdCBhcmdzOwogICAgIGludCByZXQ7CkBAIC03MTIsNDcgKzcxMiw0NyBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmIChsZW4gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoKmxlbiA8IDEpCi0gICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBjID0gdXRmWzBdOwotICAgIGlmIChjICYgMHg4MCkgewotICAgICAgICBpZiAoKmxlbiA8IDIpCisgICAgaWYgKGMgPCAweDgwKSB7CisgICAgICAgIGlmICgqbGVuIDwgMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICgodXRmWzFdICYgMHhjMCkgIT0gMHg4MCkKKyAgICAgICAgLyogMS1ieXRlIGNvZGUgKi8KKyAgICAgICAgKmxlbiA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCgqbGVuIDwgMikgfHwgKCh1dGZbMV0gJiAweGMwKSAhPSAweDgwKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICgoYyAmIDB4ZTApID09IDB4ZTApIHsKLSAgICAgICAgICAgIGlmICgqbGVuIDwgMykKKyAgICAgICAgaWYgKGMgPCAweGUwKSB7CisgICAgICAgICAgICBpZiAoYyA8IDB4YzIpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIGlmICgodXRmWzJdICYgMHhjMCkgIT0gMHg4MCkKKyAgICAgICAgICAgIC8qIDItYnl0ZSBjb2RlICovCisgICAgICAgICAgICAqbGVuID0gMjsKKyAgICAgICAgICAgIGMgPSAoYyAmIDB4MWYpIDw8IDY7CisgICAgICAgICAgICBjIHw9IHV0ZlsxXSAmIDB4M2Y7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKCpsZW4gPCAzKSB8fCAoKHV0ZlsyXSAmIDB4YzApICE9IDB4ODApKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBpZiAoKGMgJiAweGYwKSA9PSAweGYwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpsZW4gPCA0KQorICAgICAgICAgICAgaWYgKGMgPCAweGYwKSB7CisgICAgICAgICAgICAgICAgLyogMy1ieXRlIGNvZGUgKi8KKyAgICAgICAgICAgICAgICAqbGVuID0gMzsKKyAgICAgICAgICAgICAgICBjID0gKGMgJiAweGYpIDw8IDEyOworICAgICAgICAgICAgICAgIGMgfD0gKHV0ZlsxXSAmIDB4M2YpIDw8IDY7CisgICAgICAgICAgICAgICAgYyB8PSB1dGZbMl0gJiAweDNmOworICAgICAgICAgICAgICAgIGlmICgoYyA8IDB4ODAwKSB8fCAoKGMgPj0gMHhkODAwKSAmJiAoYyA8IDB4ZTAwMCkpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIGlmICgoYyAmIDB4ZjgpICE9IDB4ZjAgfHwgKHV0ZlszXSAmIDB4YzApICE9IDB4ODApCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoKmxlbiA8IDQpIHx8ICgodXRmWzNdICYgMHhjMCkgIT0gMHg4MCkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgKmxlbiA9IDQ7CiAgICAgICAgICAgICAgICAgLyogNC1ieXRlIGNvZGUgKi8KLSAgICAgICAgICAgICAgICBjID0gKHV0ZlswXSAmIDB4NykgPDwgMTg7CisgICAgICAgICAgICAgICAgYyA9IChjICYgMHg3KSA8PCAxODsKICAgICAgICAgICAgICAgICBjIHw9ICh1dGZbMV0gJiAweDNmKSA8PCAxMjsKICAgICAgICAgICAgICAgICBjIHw9ICh1dGZbMl0gJiAweDNmKSA8PCA2OwogICAgICAgICAgICAgICAgIGMgfD0gdXRmWzNdICYgMHgzZjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8qIDMtYnl0ZSBjb2RlICovCi0gICAgICAgICAgICAgICAgKmxlbiA9IDM7Ci0gICAgICAgICAgICAgICAgYyA9ICh1dGZbMF0gJiAweGYpIDw8IDEyOwotICAgICAgICAgICAgICAgIGMgfD0gKHV0ZlsxXSAmIDB4M2YpIDw8IDY7Ci0gICAgICAgICAgICAgICAgYyB8PSB1dGZbMl0gJiAweDNmOworICAgICAgICAgICAgICAgIGlmICgoYyA8IDB4MTAwMDApIHx8IChjID49IDB4MTEwMDAwKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiAyLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgKmxlbiA9IDI7Ci0gICAgICAgICAgICBjID0gKHV0ZlswXSAmIDB4MWYpIDw8IDY7Ci0gICAgICAgICAgICBjIHw9IHV0ZlsxXSAmIDB4M2Y7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvKiAxLWJ5dGUgY29kZSAqLwotICAgICAgICAqbGVuID0gMTsKICAgICB9CiAgICAgcmV0dXJuKGMpOwogCkBAIC04NzEsMTEgKzg3MSwxMSBAQAogCiAgICAgaWYgKCh1dGYgPT0gTlVMTCkgfHwgKGxlbiA8IDApKSByZXR1cm4oTlVMTCk7CiAgICAgaSA9IHhtbFVURjhTdHJzaXplKHV0ZiwgbGVuKTsKLSAgICByZXQgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMoKChzaXplX3QpIGkgKyAxKSAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgcmV0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKChzaXplX3QpIGkgKyAxKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBtZW1jcHkocmV0LCB1dGYsIGkgKiBzaXplb2YoeG1sQ2hhcikpOworICAgIG1lbWNweShyZXQsIHV0ZiwgaSk7CiAgICAgcmV0W2ldID0gMDsKICAgICByZXR1cm4ocmV0KTsKIH0KQEAgLTEwMjIsMTMgKzEwMjIsMTIgQEAKICAgICBpZiAoKGNvdW50ID4gSU5UX01BWCkgfHwgKG1zZ0xlbiA+IElOVF9NQVggLSBjb3VudCkpCiAgICAgICAgIHJldHVybihOVUxMKTsKICAgICByZXN1bHRMZW4gPSBtc2dMZW4gKyBjb3VudCArIDE7Ci0gICAgcmVzdWx0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHJlc3VsdExlbiAqIHNpemVvZih4bWxDaGFyKSk7CisgICAgcmVzdWx0ID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKHJlc3VsdExlbik7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgIC8qIENsZWFyICptc2cgdG8gcHJldmVudCBmb3JtYXQgc3RyaW5nIHZ1bG5lcmFiaWxpdGllcyBpbgogICAgICAgICAgICBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMuICovCiAgICAgICAgIHhtbEZyZWUoKm1zZyk7CiAgICAgICAgICptc2cgPSBOVUxMOwotICAgICAgICB4bWxFcnJNZW1vcnkoTlVMTCwgTlVMTCk7CiAgICAgICAgIHJldHVybihOVUxMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3htbHdyaXRlci5jIGIveG1sd3JpdGVyLmMKaW5kZXggODVjMTk1NS4uYWQ2ZTAwYyAxMDA2NDQKLS0tIGEveG1sd3JpdGVyLmMKKysrIGIveG1sd3JpdGVyLmMKQEAgLTE2LDE0ICsxNiwxNiBAQAogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+CiAjaW5jbHVkZSA8bGlieG1sL0hUTUx0cmVlLmg+CisjaW5jbHVkZSA8bGlieG1sL1NBWDIuaD4KIAogI2lmZGVmIExJQlhNTF9XUklURVJfRU5BQkxFRAogCiAjaW5jbHVkZSA8bGlieG1sL3htbHdyaXRlci5oPgogCi0jaW5jbHVkZSAiYnVmLmgiCi0jaW5jbHVkZSAiZW5jLmgiCi0jaW5jbHVkZSAic2F2ZS5oIgorI2luY2x1ZGUgInByaXZhdGUvYnVmLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9lbmMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Vycm9yLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9zYXZlLmgiCiAKICNkZWZpbmUgQjY0TElORUxFTiA3MgogI2RlZmluZSBCNjRDUkxGICJcclxuIgpAQCAtMTg4LDcgKzE5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAieG1sTmV3VGV4dFdyaXRlciA6IG91dCBvZiBtZW1vcnkhXG4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAsIChzaXplX3QpIHNpemVvZih4bWxUZXh0V3JpdGVyKSk7CisgICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKHhtbFRleHRXcml0ZXIpKTsKIAogICAgIHJldC0+bm9kZXMgPSB4bWxMaXN0Q3JlYXRlKHhtbEZyZWVUZXh0V3JpdGVyU3RhY2tFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxDbXBUZXh0V3JpdGVyU3RhY2tFbnRyeSk7CkBAIC03MDgsNyArNzEwLDExIEBACiAgICAgICAgIHN1bSArPSBjb3VudDsKICAgICB9CiAKLSAgICBzdW0gKz0geG1sVGV4dFdyaXRlckZsdXNoKHdyaXRlcik7CisgICAgY291bnQgPSB4bWxUZXh0V3JpdGVyRmx1c2god3JpdGVyKTsKKyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3VtICs9IGNvdW50OworCiAKICAgICByZXR1cm4gc3VtOwogfQpAQCAtODYzLDcgKzg2OSw3IEBACiAgKgogICogUmV0dXJucyB0aGUgYnl0ZXMgd3JpdHRlbiAobWF5IGJlIDAgYmVjYXVzZSBvZiBidWZmZXJpbmcpIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotaW50IFhNTENERUNMCitpbnQKIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdENvbW1lbnQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewpAQCAtMTI5MSw3ICsxMjk3LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBieXRlcyB3cml0dGVuIChtYXkgYmUgMCBiZWNhdXNlIG9mIGJ1ZmZlcmluZykgb3IgLTEgaW4gY2FzZSBvZiBlcnJvcgogICovCi1pbnQgWE1MQ0RFQ0wKK2ludAogeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0UmF3KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLCBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQogewpAQCAtMTQxNyw3ICsxNDIzLDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBieXRlcyB3cml0dGVuIChtYXkgYmUgMCBiZWNhdXNlIG9mIGJ1ZmZlcmluZykgb3IgLTEgaW4gY2FzZSBvZiBlcnJvcgogICovCi1pbnQgWE1MQ0RFQ0wKK2ludAogeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0U3RyaW5nKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLCBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQogewpAQCAtMTk2Myw3ICsxOTY5LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBieXRlcyB3cml0dGVuIChtYXkgYmUgMCBiZWNhdXNlIG9mIGJ1ZmZlcmluZykgb3IgLTEgaW4gY2FzZSBvZiBlcnJvcgogICovCi1pbnQgWE1MQ0RFQ0wKK2ludAogeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0QXR0cmlidXRlKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQpAQCAtMjA1OCw3ICsyMDY0LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBieXRlcyB3cml0dGVuIChtYXkgYmUgMCBiZWNhdXNlIG9mIGJ1ZmZlcmluZykgb3IgLTEgaW4gY2FzZSBvZiBlcnJvcgogICovCi1pbnQgWE1MQ0RFQ0wKK2ludAogeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0QXR0cmlidXRlTlMoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCkBAIC0yMTY2LDcgKzIxNzIsNyBAQAogICoKICAqIFJldHVybnMgdGhlIGJ5dGVzIHdyaXR0ZW4gKG1heSBiZSAwIGJlY2F1c2Ugb2YgYnVmZmVyaW5nKSBvciAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KLWludCBYTUxDREVDTAoraW50CiB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRFbGVtZW50KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCkBAIC0yMjYzLDcgKzIyNjksNyBAQAogICoKICAqIFJldHVybnMgdGhlIGJ5dGVzIHdyaXR0ZW4gKG1heSBiZSAwIGJlY2F1c2Ugb2YgYnVmZmVyaW5nKSBvciAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KLWludCBYTUxDREVDTAoraW50CiB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRFbGVtZW50TlMoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICogbmFtZSwKQEAgLTI1MjAsNyArMjUyNiw3IEBACiAgKgogICogUmV0dXJucyB0aGUgYnl0ZXMgd3JpdHRlbiAobWF5IGJlIDAgYmVjYXVzZSBvZiBidWZmZXJpbmcpIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotaW50IFhNTENERUNMCitpbnQKIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdFBJKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLCBjb25zdCB4bWxDaGFyICogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CkBAIC0yNzM1LDcgKzI3NDEsNyBAQAogICoKICAqIFJldHVybnMgdGhlIGJ5dGVzIHdyaXR0ZW4gKG1heSBiZSAwIGJlY2F1c2Ugb2YgYnVmZmVyaW5nKSBvciAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KLWludCBYTUxDREVDTAoraW50CiB4bWxUZXh0V3JpdGVyV3JpdGVGb3JtYXRDREFUQSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQogewpAQCAtMzA0NCw3ICszMDUwLDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBieXRlcyB3cml0dGVuIChtYXkgYmUgMCBiZWNhdXNlIG9mIGJ1ZmZlcmluZykgb3IgLTEgaW4gY2FzZSBvZiBlcnJvcgogICovCi1pbnQgWE1MQ0RFQ0wKK2ludAogeG1sVGV4dFdyaXRlcldyaXRlRm9ybWF0RFREKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBwdWJpZCwKQEAgLTMyODgsNyArMzI5NCw3IEBACiAgKgogICogUmV0dXJucyB0aGUgYnl0ZXMgd3JpdHRlbiAobWF5IGJlIDAgYmVjYXVzZSBvZiBidWZmZXJpbmcpIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotaW50IFhNTENERUNMCitpbnQKIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdERUREVsZW1lbnQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKQEAgLTM1MjUsNyArMzUzMSw3IEBACiAgKgogICogUmV0dXJucyB0aGUgYnl0ZXMgd3JpdHRlbiAobWF5IGJlIDAgYmVjYXVzZSBvZiBidWZmZXJpbmcpIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotaW50IFhNTENERUNMCitpbnQKIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdERUREF0dGxpc3QoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKQEAgLTM3ODMsNyArMzc4OSw3IEBACiAgKgogICogUmV0dXJucyB0aGUgYnl0ZXMgd3JpdHRlbiAobWF5IGJlIDAgYmVjYXVzZSBvZiBidWZmZXJpbmcpIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IKICAqLwotaW50IFhNTENERUNMCitpbnQKIHhtbFRleHRXcml0ZXJXcml0ZUZvcm1hdERUREludGVybmFsRW50aXR5KHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqIG5hbWUsCmRpZmYgLS1naXQgYS94cGF0aC5jIGIveHBhdGguYwppbmRleCBmYmVlNmE1Li44M2UwNjUyIDEwMDY0NAotLS0gYS94cGF0aC5jCisrKyBiL3hwYXRoLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGxpYnhtbC94bWxtZW1vcnkuaD4KICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPGxpYnhtbC92YWxpZC5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aC5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aEludGVybmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KQEAgLTQ0LDEyICs0MywxMyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+CiAjaW5jbHVkZSA8bGlieG1sL3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaWJ4bWwvZ2xvYmFscy5oPgogI2lmZGVmIExJQlhNTF9QQVRURVJOX0VOQUJMRUQKICNpbmNsdWRlIDxsaWJ4bWwvcGF0dGVybi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJidWYuaCIKKyNpbmNsdWRlICJwcml2YXRlL2J1Zi5oIgorI2luY2x1ZGUgInByaXZhdGUvZXJyb3IuaCIKKyNpbmNsdWRlICJwcml2YXRlL3hwYXRoLmgiCiAKICNpZmRlZiBMSUJYTUxfUEFUVEVSTl9FTkFCTEVECiAjZGVmaW5lIFhQQVRIX1NUUkVBTUlORwpAQCAtODgsMTMgKzg4LDYgQEAKICNkZWZpbmUgWFBfT1BUSU1JWkVEX0ZJTFRFUl9GSVJTVAogCiAvKgotKiBYUF9ERUJVR19PQkpfVVNBR0U6Ci0qIEludGVybmFsIGZsYWcgdG8gZW5hYmxlIHRyYWNraW5nIG9mIGhvdyBtdWNoIFhQYXRoIG9iamVjdHMgaGF2ZSBiZWVuCi0qIGNyZWF0ZWQuCi0qLwotLyogI2RlZmluZSBYUF9ERUJVR19PQkpfVVNBR0UgKi8KLQotLyoKICAqIFhQQVRIX01BWF9TVEVQUzoKICAqIHdoZW4gY29tcGlsaW5nIGFuIFhQYXRoIGV4cHJlc3Npb24gd2UgYXJiaXRyYXJ5IGxpbWl0IHRoZSBtYXhpbXVtCiAgKiBudW1iZXIgb2Ygc3RlcCBvcGVyYXRpb24gaW4gdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uIDEwMDAwMDAgaXMKQEAgLTEyOSw2ICsxMjIsOSBAQAogICovCiAjaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgogI2RlZmluZSBYUEFUSF9NQVhfUkVDVVJTSU9OX0RFUFRIIDUwMAorI2VsaWYgZGVmaW5lZChfV0lOMzIpCisvKiBXaW5kb3dzIHR5cGljYWxseSBsaW1pdHMgc3RhY2sgc2l6ZSB0byAxTUIuICovCisjZGVmaW5lIFhQQVRIX01BWF9SRUNVUlNJT05fREVQVEggMTAwMAogI2Vsc2UKICNkZWZpbmUgWFBBVEhfTUFYX1JFQ1VSU0lPTl9ERVBUSCA1MDAwCiAjZW5kaWYKQEAgLTE0MCw2ICsxMzYsMTE2IEBACiAgKiBhbnkgdXNlIG9mIHRoZSBtYWNyb3MgSVNfQVNDSUlfQ0hBUkFDVEVSIGFuZCBJU19BU0NJSV9ESUdJVCkKICAqLwogCisjaWYgZGVmaW5lZChMSUJYTUxfWFBBVEhfRU5BQkxFRCkgfHwgZGVmaW5lZChMSUJYTUxfU0NIRU1BU19FTkFCTEVEKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkJCSoKKyAqCQkJRmxvYXRpbmcgcG9pbnQgc3R1ZmYJCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkb3VibGUgeG1sWFBhdGhOQU4gPSAwLjA7Citkb3VibGUgeG1sWFBhdGhQSU5GID0gMC4wOworZG91YmxlIHhtbFhQYXRoTklORiA9IDAuMDsKKworLyoqCisgKiB4bWxYUGF0aEluaXQ6CisgKgorICogREVQUkVDQVRFRDogQWxpYXMgZm9yIHhtbEluaXRQYXJzZXIuCisgKi8KK3ZvaWQKK3htbFhQYXRoSW5pdCh2b2lkKSB7CisgICAgeG1sSW5pdFBhcnNlcigpOworfQorCisvKioKKyAqIHhtbEluaXRYUGF0aEludGVybmFsOgorICoKKyAqIEluaXRpYWxpemUgdGhlIFhQYXRoIGVudmlyb25tZW50CisgKi8KK0FUVFJJQlVURV9OT19TQU5JVElaRSgiZmxvYXQtZGl2aWRlLWJ5LXplcm8iKQordm9pZAoreG1sSW5pdFhQYXRoSW50ZXJuYWwodm9pZCkgeworI2lmIGRlZmluZWQoTkFOKSAmJiBkZWZpbmVkKElORklOSVRZKQorICAgIHhtbFhQYXRoTkFOID0gTkFOOworICAgIHhtbFhQYXRoUElORiA9IElORklOSVRZOworICAgIHhtbFhQYXRoTklORiA9IC1JTkZJTklUWTsKKyNlbHNlCisgICAgLyogTVNWQyBkb2Vzbid0IGFsbG93IGRpdmlzaW9uIGJ5IHplcm8gaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuICovCisgICAgZG91YmxlIHplcm8gPSAwLjA7CisgICAgeG1sWFBhdGhOQU4gPSAwLjAgLyB6ZXJvOworICAgIHhtbFhQYXRoUElORiA9IDEuMCAvIHplcm87CisgICAgeG1sWFBhdGhOSU5GID0gLXhtbFhQYXRoUElORjsKKyNlbmRpZgorfQorCisvKioKKyAqIHhtbFhQYXRoSXNOYU46CisgKiBAdmFsOiAgYSBkb3VibGUgdmFsdWUKKyAqCisgKiBDaGVja3Mgd2hldGhlciBhIGRvdWJsZSBpcyBhIE5hTi4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIHZhbHVlIGlzIGEgTmFOLCAwIG90aGVyd2lzZQorICovCitpbnQKK3htbFhQYXRoSXNOYU4oZG91YmxlIHZhbCkgeworI2lmZGVmIGlzbmFuCisgICAgcmV0dXJuIGlzbmFuKHZhbCk7CisjZWxzZQorICAgIHJldHVybiAhKHZhbCA9PSB2YWwpOworI2VuZGlmCit9CisKKy8qKgorICogeG1sWFBhdGhJc0luZjoKKyAqIEB2YWw6ICBhIGRvdWJsZSB2YWx1ZQorICoKKyAqIENoZWNrcyB3aGV0aGVyIGEgZG91YmxlIGlzIGFuIGluZmluaXR5LgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgdmFsdWUgaXMgK0luZmluaXRlLCAtMSBpZiAtSW5maW5pdGUsIDAgb3RoZXJ3aXNlCisgKi8KK2ludAoreG1sWFBhdGhJc0luZihkb3VibGUgdmFsKSB7CisjaWZkZWYgaXNpbmYKKyAgICByZXR1cm4gaXNpbmYodmFsKSA/ICh2YWwgPiAwID8gMSA6IC0xKSA6IDA7CisjZWxzZQorICAgIGlmICh2YWwgPj0geG1sWFBhdGhQSU5GKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAodmFsIDw9IC14bWxYUGF0aFBJTkYpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogU0NIRU1BUyBvciBYUEFUSCAqLworCisjaWZkZWYgTElCWE1MX1hQQVRIX0VOQUJMRUQKKworLyoKKyAqIFRPRE86IHdoZW4gY29tcGF0aWJpbGl0eSBhbGxvd3MgcmVtb3ZlIGFsbCAiZmFrZSBub2RlIGxpYnhzbHQiIHN0cmluZ3MKKyAqICAgICAgIHRoZSB0ZXN0IHNob3VsZCBqdXN0IGJlIG5hbWVbMF0gPSAnICcKKyAqLworCitzdGF0aWMgeG1sTnMgeG1sWFBhdGhYTUxOYW1lc3BhY2VTdHJ1Y3QgPSB7CisgICAgTlVMTCwKKyAgICBYTUxfTkFNRVNQQUNFX0RFQ0wsCisgICAgWE1MX1hNTF9OQU1FU1BBQ0UsCisgICAgQkFEX0NBU1QgInhtbCIsCisgICAgTlVMTCwKKyAgICBOVUxMCit9Oworc3RhdGljIHhtbE5zUHRyIHhtbFhQYXRoWE1MTmFtZXNwYWNlID0gJnhtbFhQYXRoWE1MTmFtZXNwYWNlU3RydWN0OworI2lmbmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKKy8qCisgKiBPcHRpbWl6ZXIgaXMgZGlzYWJsZWQgb25seSB3aGVuIHRocmVhZGVkIGFwcHMgYXJlIGRldGVjdGVkIHdoaWxlCisgKiB0aGUgbGlicmFyeSBhaW4ndCBjb21waWxlZCBmb3IgdGhyZWFkIHNhZmV0eS4KKyAqLworc3RhdGljIGludCB4bWxYUGF0aERpc2FibGVPcHRpbWl6ZXIgPSAwOworI2VuZGlmCisKK3N0YXRpYyB2b2lkCit4bWxYUGF0aE5vZGVTZXRDbGVhcih4bWxOb2RlU2V0UHRyIHNldCwgaW50IGhhc05zTm9kZXMpOworCiAjaWZkZWYgWFBfT1BUSU1JWkVEX05PTl9FTEVNX0NPTVBBUklTT04KIC8qKgogICogeG1sWFBhdGhDbXBOb2Rlc0V4dDoKQEAgLTQ2NywxMDcgKzU3Myw2IEBACiAjaW5jbHVkZSAidGltc29ydC5oIgogI2VuZGlmIC8qIFdJVEhfVElNX1NPUlQgKi8KIAotI2lmIGRlZmluZWQoTElCWE1MX1hQQVRIX0VOQUJMRUQpIHx8IGRlZmluZWQoTElCWE1MX1NDSEVNQVNfRU5BQkxFRCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCi0gKgkJCUZsb2F0aW5nIHBvaW50IHN0dWZmCQkJCSoKLSAqCQkJCQkJCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotZG91YmxlIHhtbFhQYXRoTkFOID0gMC4wOwotZG91YmxlIHhtbFhQYXRoUElORiA9IDAuMDsKLWRvdWJsZSB4bWxYUGF0aE5JTkYgPSAwLjA7Ci0KLS8qKgotICogeG1sWFBhdGhJbml0OgotICoKLSAqIERFUFJFQ0FURUQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBtYWRlIHByaXZhdGUuIENhbGwgeG1sSW5pdFBhcnNlciB0bwotICogaW5pdGlhbGl6ZSB0aGUgbGlicmFyeS4KLSAqCi0gKiBJbml0aWFsaXplIHRoZSBYUGF0aCBlbnZpcm9ubWVudAotICovCi1BVFRSSUJVVEVfTk9fU0FOSVRJWkUoImZsb2F0LWRpdmlkZS1ieS16ZXJvIikKLXZvaWQKLXhtbFhQYXRoSW5pdCh2b2lkKSB7Ci0jaWYgZGVmaW5lZChOQU4pICYmIGRlZmluZWQoSU5GSU5JVFkpCi0gICAgeG1sWFBhdGhOQU4gPSBOQU47Ci0gICAgeG1sWFBhdGhQSU5GID0gSU5GSU5JVFk7Ci0gICAgeG1sWFBhdGhOSU5GID0gLUlORklOSVRZOwotI2Vsc2UKLSAgICAvKiBNU1ZDIGRvZXNuJ3QgYWxsb3cgZGl2aXNpb24gYnkgemVybyBpbiBjb25zdGFudCBleHByZXNzaW9ucy4gKi8KLSAgICBkb3VibGUgemVybyA9IDAuMDsKLSAgICB4bWxYUGF0aE5BTiA9IDAuMCAvIHplcm87Ci0gICAgeG1sWFBhdGhQSU5GID0gMS4wIC8gemVybzsKLSAgICB4bWxYUGF0aE5JTkYgPSAteG1sWFBhdGhQSU5GOwotI2VuZGlmCi19Ci0KLS8qKgotICogeG1sWFBhdGhJc05hTjoKLSAqIEB2YWw6ICBhIGRvdWJsZSB2YWx1ZQotICoKLSAqIFJldHVybnMgMSBpZiB0aGUgdmFsdWUgaXMgYSBOYU4sIDAgb3RoZXJ3aXNlCi0gKi8KLWludAoteG1sWFBhdGhJc05hTihkb3VibGUgdmFsKSB7Ci0jaWZkZWYgaXNuYW4KLSAgICByZXR1cm4gaXNuYW4odmFsKTsKLSNlbHNlCi0gICAgcmV0dXJuICEodmFsID09IHZhbCk7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiB4bWxYUGF0aElzSW5mOgotICogQHZhbDogIGEgZG91YmxlIHZhbHVlCi0gKgotICogUmV0dXJucyAxIGlmIHRoZSB2YWx1ZSBpcyArSW5maW5pdGUsIC0xIGlmIC1JbmZpbml0ZSwgMCBvdGhlcndpc2UKLSAqLwotaW50Ci14bWxYUGF0aElzSW5mKGRvdWJsZSB2YWwpIHsKLSNpZmRlZiBpc2luZgotICAgIHJldHVybiBpc2luZih2YWwpID8gKHZhbCA+IDAgPyAxIDogLTEpIDogMDsKLSNlbHNlCi0gICAgaWYgKHZhbCA+PSB4bWxYUGF0aFBJTkYpCi0gICAgICAgIHJldHVybiAxOwotICAgIGlmICh2YWwgPD0gLXhtbFhQYXRoUElORikKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvKiBTQ0hFTUFTIG9yIFhQQVRIICovCi0KLSNpZmRlZiBMSUJYTUxfWFBBVEhfRU5BQkxFRAotCi0vKgotICogVE9ETzogd2hlbiBjb21wYXRpYmlsaXR5IGFsbG93cyByZW1vdmUgYWxsICJmYWtlIG5vZGUgbGlieHNsdCIgc3RyaW5ncwotICogICAgICAgdGhlIHRlc3Qgc2hvdWxkIGp1c3QgYmUgbmFtZVswXSA9ICcgJwotICovCi0jaWZkZWYgREVCVUdfWFBBVEhfRVhQUkVTU0lPTgotI2RlZmluZSBERUJVR19TVEVQCi0jZGVmaW5lIERFQlVHX0VYUFIKLSNkZWZpbmUgREVCVUdfRVZBTF9DT1VOVFMKLSNlbmRpZgotCi1zdGF0aWMgeG1sTnMgeG1sWFBhdGhYTUxOYW1lc3BhY2VTdHJ1Y3QgPSB7Ci0gICAgTlVMTCwKLSAgICBYTUxfTkFNRVNQQUNFX0RFQ0wsCi0gICAgWE1MX1hNTF9OQU1FU1BBQ0UsCi0gICAgQkFEX0NBU1QgInhtbCIsCi0gICAgTlVMTCwKLSAgICBOVUxMCi19Owotc3RhdGljIHhtbE5zUHRyIHhtbFhQYXRoWE1MTmFtZXNwYWNlID0gJnhtbFhQYXRoWE1MTmFtZXNwYWNlU3RydWN0OwotI2lmbmRlZiBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKLS8qCi0gKiBPcHRpbWl6ZXIgaXMgZGlzYWJsZWQgb25seSB3aGVuIHRocmVhZGVkIGFwcHMgYXJlIGRldGVjdGVkIHdoaWxlCi0gKiB0aGUgbGlicmFyeSBhaW4ndCBjb21waWxlZCBmb3IgdGhyZWFkIHNhZmV0eS4KLSAqLwotc3RhdGljIGludCB4bWxYUGF0aERpc2FibGVPcHRpbWl6ZXIgPSAwOwotI2VuZGlmCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkJCQkJKgogICoJCQlFcnJvciBoYW5kbGluZyByb3V0aW5lcwkJCQkqCkBAIC03MDAsNiArNzA1LDkgQEAKIAkJCSIlcyIsIHhtbFhQYXRoRXJyb3JNZXNzYWdlc1tlcnJvcl0pOwogCXJldHVybjsKICAgICB9CisgICAgLyogT25seSByZXBvcnQgdGhlIGZpcnN0IGVycm9yICovCisgICAgaWYgKGN0eHQtPmVycm9yICE9IDApCisgICAgICAgIHJldHVybjsKICAgICBjdHh0LT5lcnJvciA9IGVycm9yOwogICAgIGlmIChjdHh0LT5jb250ZXh0ID09IE5VTEwpIHsKIAlfX3htbFJhaXNlRXJyb3IoTlVMTCwgTlVMTCwgTlVMTCwKQEAgLTgwNSwzMiArODEzLDMwIEBACiAJCSAgICAgICB2b2lkICppdGVtLAogCQkgICAgICAgaW50IGluaXRpYWxTaXplKQogewotICAgIGlmIChsaXN0LT5pdGVtcyA9PSBOVUxMKSB7Ci0JaWYgKGluaXRpYWxTaXplIDw9IDApCi0JICAgIGluaXRpYWxTaXplID0gMTsKLQlsaXN0LT5pdGVtcyA9ICh2b2lkICoqKSB4bWxNYWxsb2MoaW5pdGlhbFNpemUgKiBzaXplb2Yodm9pZCAqKSk7Ci0JaWYgKGxpc3QtPml0ZW1zID09IE5VTEwpIHsKLQkgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwKLQkJInhtbFBvaW50ZXJMaXN0Q3JlYXRlOiBhbGxvY2F0aW5nIGl0ZW1cbiIpOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlsaXN0LT5udW1iZXIgPSAwOwotCWxpc3QtPnNpemUgPSBpbml0aWFsU2l6ZTsKLSAgICB9IGVsc2UgaWYgKGxpc3QtPnNpemUgPD0gbGlzdC0+bnVtYmVyKSB7Ci0gICAgICAgIGlmIChsaXN0LT5zaXplID4gNTAwMDAwMDApIHsKLQkgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwKLQkJInhtbFBvaW50ZXJMaXN0QWRkU2l6ZTogcmUtYWxsb2NhdGluZyBpdGVtXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgaWYgKGxpc3QtPnNpemUgPD0gbGlzdC0+bnVtYmVyKSB7CisgICAgICAgIHZvaWQgKip0bXA7CisgICAgICAgIHNpemVfdCBuZXdTaXplOworCisgICAgICAgIGlmIChsaXN0LT5zaXplID09IDApIHsKKyAgICAgICAgICAgIGlmIChpbml0aWFsU2l6ZSA8PSAwKQorICAgICAgICAgICAgICAgIGluaXRpYWxTaXplID0gMTsKKyAgICAgICAgICAgIG5ld1NpemUgPSBpbml0aWFsU2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsaXN0LT5zaXplID4gNTAwMDAwMDApIHsKKyAgICAgICAgICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLAorICAgICAgICAgICAgICAgICAgICAieG1sUG9pbnRlckxpc3RBZGRTaXplOiByZS1hbGxvY2F0aW5nIGl0ZW1cbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisJICAgIG5ld1NpemUgPSBsaXN0LT5zaXplICogMjsKICAgICAgICAgfQotCWxpc3QtPnNpemUgKj0gMjsKLQlsaXN0LT5pdGVtcyA9ICh2b2lkICoqKSB4bWxSZWFsbG9jKGxpc3QtPml0ZW1zLAotCSAgICBsaXN0LT5zaXplICogc2l6ZW9mKHZvaWQgKikpOwotCWlmIChsaXN0LT5pdGVtcyA9PSBOVUxMKSB7CisJdG1wID0gKHZvaWQgKiopIHhtbFJlYWxsb2MobGlzdC0+aXRlbXMsIG5ld1NpemUgKiBzaXplb2Yodm9pZCAqKSk7CisJaWYgKHRtcCA9PSBOVUxMKSB7CiAJICAgIHhtbFhQYXRoRXJyTWVtb3J5KE5VTEwsCiAJCSJ4bWxQb2ludGVyTGlzdEFkZFNpemU6IHJlLWFsbG9jYXRpbmcgaXRlbVxuIik7Ci0JICAgIGxpc3QtPnNpemUgPSAwOwogCSAgICByZXR1cm4oLTEpOwogCX0KKyAgICAgICAgbGlzdC0+aXRlbXMgPSB0bXA7CisgICAgICAgIGxpc3QtPnNpemUgPSBuZXdTaXplOwogICAgIH0KICAgICBsaXN0LT5pdGVtc1tsaXN0LT5udW1iZXIrK10gPSBpdGVtOwogICAgIHJldHVybigwKTsKQEAgLTk2NiwxMCArOTcyLDYgQEAKICAgICBpbnQgbGFzdDsJCQkvKiBpbmRleCBvZiBsYXN0IHN0ZXAgaW4gZXhwcmVzc2lvbiAqLwogICAgIHhtbENoYXIgKmV4cHI7CQkvKiB0aGUgZXhwcmVzc2lvbiBiZWluZyBjb21wdXRlZCAqLwogICAgIHhtbERpY3RQdHIgZGljdDsJCS8qIHRoZSBkaWN0aW9uYXJ5IHRvIHVzZSBpZiBhbnkgKi8KLSNpZmRlZiBERUJVR19FVkFMX0NPVU5UUwotICAgIGludCBuYjsKLSAgICB4bWxDaGFyICpzdHJpbmc7Ci0jZW5kaWYKICNpZmRlZiBYUEFUSF9TVFJFQU1JTkcKICAgICB4bWxQYXR0ZXJuUHRyIHN0cmVhbTsKICNlbmRpZgpAQCAtMTAyOCw5ICsxMDMwLDYgQEAKICAgICB9CiAgICAgbWVtc2V0KGN1ci0+c3RlcHMsIDAsIGN1ci0+bWF4U3RlcCAqIHNpemVvZih4bWxYUGF0aFN0ZXBPcCkpOwogICAgIGN1ci0+bGFzdCA9IC0xOwotI2lmZGVmIERFQlVHX0VWQUxfQ09VTlRTCi0gICAgY3VyLT5uYiA9IDA7Ci0jZW5kaWYKICAgICByZXR1cm4oY3VyKTsKIH0KIApAQCAtMTA3MywxMSArMTA3Miw2IEBACiAgICAgaWYgKGNvbXAtPnN0ZXBzICE9IE5VTEwpIHsKICAgICAgICAgeG1sRnJlZShjb21wLT5zdGVwcyk7CiAgICAgfQotI2lmZGVmIERFQlVHX0VWQUxfQ09VTlRTCi0gICAgaWYgKGNvbXAtPnN0cmluZyAhPSBOVUxMKSB7Ci0gICAgICAgIHhtbEZyZWUoY29tcC0+c3RyaW5nKTsKLSAgICB9Ci0jZW5kaWYKICNpZmRlZiBYUEFUSF9TVFJFQU1JTkcKICAgICBpZiAoY29tcC0+c3RyZWFtICE9IE5VTEwpIHsKICAgICAgICAgeG1sRnJlZVBhdHRlcm5MaXN0KGNvbXAtPnN0cmVhbSk7CkBAIC0xMjI0LDMzICsxMjE4LDYgQEAKICAgICBpbnQgbWF4Qm9vbGVhbjsKICAgICBpbnQgbWF4TnVtYmVyOwogICAgIGludCBtYXhNaXNjOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIGludCBkYmdDYWNoZWRBbGw7Ci0gICAgaW50IGRiZ0NhY2hlZE5vZGVzZXQ7Ci0gICAgaW50IGRiZ0NhY2hlZFN0cmluZzsKLSAgICBpbnQgZGJnQ2FjaGVkQm9vbDsKLSAgICBpbnQgZGJnQ2FjaGVkTnVtYmVyOwotICAgIGludCBkYmdDYWNoZWRQb2ludDsKLSAgICBpbnQgZGJnQ2FjaGVkUmFuZ2U7Ci0gICAgaW50IGRiZ0NhY2hlZExvY3NldDsKLSAgICBpbnQgZGJnQ2FjaGVkVXNlcnM7Ci0gICAgaW50IGRiZ0NhY2hlZFhTTFRUcmVlOwotICAgIGludCBkYmdDYWNoZWRVbmRlZmluZWQ7Ci0KLQotICAgIGludCBkYmdSZXVzZWRBbGw7Ci0gICAgaW50IGRiZ1JldXNlZE5vZGVzZXQ7Ci0gICAgaW50IGRiZ1JldXNlZFN0cmluZzsKLSAgICBpbnQgZGJnUmV1c2VkQm9vbDsKLSAgICBpbnQgZGJnUmV1c2VkTnVtYmVyOwotICAgIGludCBkYmdSZXVzZWRQb2ludDsKLSAgICBpbnQgZGJnUmV1c2VkUmFuZ2U7Ci0gICAgaW50IGRiZ1JldXNlZExvY3NldDsKLSAgICBpbnQgZGJnUmV1c2VkVXNlcnM7Ci0gICAgaW50IGRiZ1JldXNlZFhTTFRUcmVlOwotICAgIGludCBkYmdSZXVzZWRVbmRlZmluZWQ7Ci0KLSNlbmRpZgogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTcwNyw0NzggKzE2NzQsNiBAQAogICAgIH0KIH0KIAotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCi0vKgotKiBYUGF0aCBvYmplY3QgdXNhZ2UgcmVsYXRlZCBkZWJ1Z2dpbmcgdmFyaWFibGVzLgotKi8KLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVbmRlZmluZWQgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqQ291bnRlck5vZGVzZXQgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqQ291bnRlckJvb2wgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqQ291bnRlck51bWJlciA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpDb3VudGVyU3RyaW5nID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJQb2ludCA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpDb3VudGVyUmFuZ2UgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqQ291bnRlckxvY3NldCA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpDb3VudGVyVXNlcnMgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqQ291bnRlclhTTFRUcmVlID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJBbGwgPSAwOwotCi1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpUb3RhbFVuZGVmaW5lZCA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpUb3RhbE5vZGVzZXQgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqVG90YWxCb29sID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09ialRvdGFsTnVtYmVyID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09ialRvdGFsU3RyaW5nID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09ialRvdGFsUG9pbnQgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqVG90YWxSYW5nZSA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpUb3RhbExvY3NldCA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpUb3RhbFVzZXJzID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09ialRvdGFsWFNMVFRyZWUgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqVG90YWxBbGwgPSAwOwotCi1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpNYXhVbmRlZmluZWQgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqTWF4Tm9kZXNldCA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpNYXhCb29sID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iak1heE51bWJlciA9IDA7Ci1zdGF0aWMgaW50IHhtbFhQYXRoRGVidWdPYmpNYXhTdHJpbmcgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqTWF4UG9pbnQgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqTWF4UmFuZ2UgPSAwOwotc3RhdGljIGludCB4bWxYUGF0aERlYnVnT2JqTWF4TG9jc2V0ID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iak1heFVzZXJzID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iak1heFhTTFRUcmVlID0gMDsKLXN0YXRpYyBpbnQgeG1sWFBhdGhEZWJ1Z09iak1heEFsbCA9IDA7Ci0KLXN0YXRpYyB2b2lkCi14bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXNldCh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCkKLXsKLSAgICBpZiAoY3R4dCAhPSBOVUxMKSB7Ci0JaWYgKGN0eHQtPmNhY2hlICE9IE5VTEwpIHsKLQkgICAgeG1sWFBhdGhDb250ZXh0Q2FjaGVQdHIgY2FjaGUgPQotCQkoeG1sWFBhdGhDb250ZXh0Q2FjaGVQdHIpIGN0eHQtPmNhY2hlOwotCi0JICAgIGNhY2hlLT5kYmdDYWNoZWRBbGwgPSAwOwotCSAgICBjYWNoZS0+ZGJnQ2FjaGVkTm9kZXNldCA9IDA7Ci0JICAgIGNhY2hlLT5kYmdDYWNoZWRTdHJpbmcgPSAwOwotCSAgICBjYWNoZS0+ZGJnQ2FjaGVkQm9vbCA9IDA7Ci0JICAgIGNhY2hlLT5kYmdDYWNoZWROdW1iZXIgPSAwOwotCSAgICBjYWNoZS0+ZGJnQ2FjaGVkUG9pbnQgPSAwOwotCSAgICBjYWNoZS0+ZGJnQ2FjaGVkUmFuZ2UgPSAwOwotCSAgICBjYWNoZS0+ZGJnQ2FjaGVkTG9jc2V0ID0gMDsKLQkgICAgY2FjaGUtPmRiZ0NhY2hlZFVzZXJzID0gMDsKLQkgICAgY2FjaGUtPmRiZ0NhY2hlZFhTTFRUcmVlID0gMDsKLQkgICAgY2FjaGUtPmRiZ0NhY2hlZFVuZGVmaW5lZCA9IDA7Ci0KLQkgICAgY2FjaGUtPmRiZ1JldXNlZEFsbCA9IDA7Ci0JICAgIGNhY2hlLT5kYmdSZXVzZWROb2Rlc2V0ID0gMDsKLQkgICAgY2FjaGUtPmRiZ1JldXNlZFN0cmluZyA9IDA7Ci0JICAgIGNhY2hlLT5kYmdSZXVzZWRCb29sID0gMDsKLQkgICAgY2FjaGUtPmRiZ1JldXNlZE51bWJlciA9IDA7Ci0JICAgIGNhY2hlLT5kYmdSZXVzZWRQb2ludCA9IDA7Ci0JICAgIGNhY2hlLT5kYmdSZXVzZWRSYW5nZSA9IDA7Ci0JICAgIGNhY2hlLT5kYmdSZXVzZWRMb2NzZXQgPSAwOwotCSAgICBjYWNoZS0+ZGJnUmV1c2VkVXNlcnMgPSAwOwotCSAgICBjYWNoZS0+ZGJnUmV1c2VkWFNMVFRyZWUgPSAwOwotCSAgICBjYWNoZS0+ZGJnUmV1c2VkVW5kZWZpbmVkID0gMDsKLQl9Ci0gICAgfQotCi0gICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVbmRlZmluZWQgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyTm9kZXNldCA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJCb29sID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlck51bWJlciA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJTdHJpbmcgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyUG9pbnQgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyUmFuZ2UgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyTG9jc2V0ID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclVzZXJzID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclhTTFRUcmVlID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlckFsbCA9IDA7Ci0KLSAgICB4bWxYUGF0aERlYnVnT2JqVG90YWxVbmRlZmluZWQgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpUb3RhbE5vZGVzZXQgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpUb3RhbEJvb2wgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpUb3RhbE51bWJlciA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09ialRvdGFsU3RyaW5nID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqVG90YWxQb2ludCA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09ialRvdGFsUmFuZ2UgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpUb3RhbExvY3NldCA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09ialRvdGFsVXNlcnMgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpUb3RhbFhTTFRUcmVlID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqVG90YWxBbGwgPSAwOwotCi0gICAgeG1sWFBhdGhEZWJ1Z09iak1heFVuZGVmaW5lZCA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09iak1heE5vZGVzZXQgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpNYXhCb29sID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqTWF4TnVtYmVyID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqTWF4U3RyaW5nID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqTWF4UG9pbnQgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpNYXhSYW5nZSA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09iak1heExvY3NldCA9IDA7Ci0gICAgeG1sWFBhdGhEZWJ1Z09iak1heFVzZXJzID0gMDsKLSAgICB4bWxYUGF0aERlYnVnT2JqTWF4WFNMVFRyZWUgPSAwOwotICAgIHhtbFhQYXRoRGVidWdPYmpNYXhBbGwgPSAwOwotCi19Ci0KLXN0YXRpYyB2b2lkCi14bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsCi0JCQkgICAgICB4bWxYUGF0aE9iamVjdFR5cGUgb2JqVHlwZSkKLXsKLSAgICBpbnQgaXNDYWNoZWQgPSAwOwotCi0gICAgaWYgKGN0eHQgIT0gTlVMTCkgewotCWlmIChjdHh0LT5jYWNoZSAhPSBOVUxMKSB7Ci0JICAgIHhtbFhQYXRoQ29udGV4dENhY2hlUHRyIGNhY2hlID0KLQkJKHhtbFhQYXRoQ29udGV4dENhY2hlUHRyKSBjdHh0LT5jYWNoZTsKLQotCSAgICBpc0NhY2hlZCA9IDE7Ci0KLQkgICAgY2FjaGUtPmRiZ1JldXNlZEFsbCsrOwotCSAgICBzd2l0Y2ggKG9ialR5cGUpIHsKLQkJY2FzZSBYUEFUSF9VTkRFRklORUQ6Ci0JCSAgICBjYWNoZS0+ZGJnUmV1c2VkVW5kZWZpbmVkKys7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBYUEFUSF9OT0RFU0VUOgotCQkgICAgY2FjaGUtPmRiZ1JldXNlZE5vZGVzZXQrKzsKLQkJICAgIGJyZWFrOwotCQljYXNlIFhQQVRIX0JPT0xFQU46Ci0JCSAgICBjYWNoZS0+ZGJnUmV1c2VkQm9vbCsrOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgWFBBVEhfTlVNQkVSOgotCQkgICAgY2FjaGUtPmRiZ1JldXNlZE51bWJlcisrOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgWFBBVEhfU1RSSU5HOgotCQkgICAgY2FjaGUtPmRiZ1JldXNlZFN0cmluZysrOwotCQkgICAgYnJlYWs7Ci0jaWZkZWYgTElCWE1MX1hQVFJfTE9DU19FTkFCTEVECi0JCWNhc2UgWFBBVEhfUE9JTlQ6Ci0JCSAgICBjYWNoZS0+ZGJnUmV1c2VkUG9pbnQrKzsKLQkJICAgIGJyZWFrOwotCQljYXNlIFhQQVRIX1JBTkdFOgotCQkgICAgY2FjaGUtPmRiZ1JldXNlZFJhbmdlKys7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBYUEFUSF9MT0NBVElPTlNFVDoKLQkJICAgIGNhY2hlLT5kYmdSZXVzZWRMb2NzZXQrKzsKLQkJICAgIGJyZWFrOwotI2VuZGlmIC8qIExJQlhNTF9YUFRSX0xPQ1NfRU5BQkxFRCAqLwotCQljYXNlIFhQQVRIX1VTRVJTOgotCQkgICAgY2FjaGUtPmRiZ1JldXNlZFVzZXJzKys7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBYUEFUSF9YU0xUX1RSRUU6Ci0JCSAgICBjYWNoZS0+ZGJnUmV1c2VkWFNMVFRyZWUrKzsKLQkJICAgIGJyZWFrOwotCQlkZWZhdWx0OgotCQkgICAgYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotCi0gICAgc3dpdGNoIChvYmpUeXBlKSB7Ci0JY2FzZSBYUEFUSF9VTkRFRklORUQ6Ci0JICAgIGlmICghIGlzQ2FjaGVkKQotCQl4bWxYUGF0aERlYnVnT2JqVG90YWxVbmRlZmluZWQrKzsKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVbmRlZmluZWQrKzsKLQkgICAgaWYgKHhtbFhQYXRoRGVidWdPYmpDb3VudGVyVW5kZWZpbmVkID4KLQkJeG1sWFBhdGhEZWJ1Z09iak1heFVuZGVmaW5lZCkKLQkJeG1sWFBhdGhEZWJ1Z09iak1heFVuZGVmaW5lZCA9Ci0JCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclVuZGVmaW5lZDsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYUEFUSF9OT0RFU0VUOgotCSAgICBpZiAoISBpc0NhY2hlZCkKLQkJeG1sWFBhdGhEZWJ1Z09ialRvdGFsTm9kZXNldCsrOwotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlck5vZGVzZXQrKzsKLQkgICAgaWYgKHhtbFhQYXRoRGVidWdPYmpDb3VudGVyTm9kZXNldCA+Ci0JCXhtbFhQYXRoRGVidWdPYmpNYXhOb2Rlc2V0KQotCQl4bWxYUGF0aERlYnVnT2JqTWF4Tm9kZXNldCA9Ci0JCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlck5vZGVzZXQ7Ci0JICAgIGJyZWFrOwotCWNhc2UgWFBBVEhfQk9PTEVBTjoKLQkgICAgaWYgKCEgaXNDYWNoZWQpCi0JCXhtbFhQYXRoRGVidWdPYmpUb3RhbEJvb2wrKzsKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJCb29sKys7Ci0JICAgIGlmICh4bWxYUGF0aERlYnVnT2JqQ291bnRlckJvb2wgPgotCQl4bWxYUGF0aERlYnVnT2JqTWF4Qm9vbCkKLQkJeG1sWFBhdGhEZWJ1Z09iak1heEJvb2wgPQotCQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJCb29sOwotCSAgICBicmVhazsKLQljYXNlIFhQQVRIX05VTUJFUjoKLQkgICAgaWYgKCEgaXNDYWNoZWQpCi0JCXhtbFhQYXRoRGVidWdPYmpUb3RhbE51bWJlcisrOwotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlck51bWJlcisrOwotCSAgICBpZiAoeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJOdW1iZXIgPgotCQl4bWxYUGF0aERlYnVnT2JqTWF4TnVtYmVyKQotCQl4bWxYUGF0aERlYnVnT2JqTWF4TnVtYmVyID0KLQkJICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyTnVtYmVyOwotCSAgICBicmVhazsKLQljYXNlIFhQQVRIX1NUUklORzoKLQkgICAgaWYgKCEgaXNDYWNoZWQpCi0JCXhtbFhQYXRoRGVidWdPYmpUb3RhbFN0cmluZysrOwotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclN0cmluZysrOwotCSAgICBpZiAoeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJTdHJpbmcgPgotCQl4bWxYUGF0aERlYnVnT2JqTWF4U3RyaW5nKQotCQl4bWxYUGF0aERlYnVnT2JqTWF4U3RyaW5nID0KLQkJICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyU3RyaW5nOwotCSAgICBicmVhazsKLSNpZmRlZiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQKLQljYXNlIFhQQVRIX1BPSU5UOgotCSAgICBpZiAoISBpc0NhY2hlZCkKLQkJeG1sWFBhdGhEZWJ1Z09ialRvdGFsUG9pbnQrKzsKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJQb2ludCsrOwotCSAgICBpZiAoeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJQb2ludCA+Ci0JCXhtbFhQYXRoRGVidWdPYmpNYXhQb2ludCkKLQkJeG1sWFBhdGhEZWJ1Z09iak1heFBvaW50ID0KLQkJICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyUG9pbnQ7Ci0JICAgIGJyZWFrOwotCWNhc2UgWFBBVEhfUkFOR0U6Ci0JICAgIGlmICghIGlzQ2FjaGVkKQotCQl4bWxYUGF0aERlYnVnT2JqVG90YWxSYW5nZSsrOwotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclJhbmdlKys7Ci0JICAgIGlmICh4bWxYUGF0aERlYnVnT2JqQ291bnRlclJhbmdlID4KLQkJeG1sWFBhdGhEZWJ1Z09iak1heFJhbmdlKQotCQl4bWxYUGF0aERlYnVnT2JqTWF4UmFuZ2UgPQotCQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJSYW5nZTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYUEFUSF9MT0NBVElPTlNFVDoKLQkgICAgaWYgKCEgaXNDYWNoZWQpCi0JCXhtbFhQYXRoRGVidWdPYmpUb3RhbExvY3NldCsrOwotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlckxvY3NldCsrOwotCSAgICBpZiAoeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJMb2NzZXQgPgotCQl4bWxYUGF0aERlYnVnT2JqTWF4TG9jc2V0KQotCQl4bWxYUGF0aERlYnVnT2JqTWF4TG9jc2V0ID0KLQkJICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyTG9jc2V0OwotCSAgICBicmVhazsKLSNlbmRpZiAvKiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQgKi8KLQljYXNlIFhQQVRIX1VTRVJTOgotCSAgICBpZiAoISBpc0NhY2hlZCkKLQkJeG1sWFBhdGhEZWJ1Z09ialRvdGFsVXNlcnMrKzsKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVc2VycysrOwotCSAgICBpZiAoeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVc2VycyA+Ci0JCXhtbFhQYXRoRGVidWdPYmpNYXhVc2VycykKLQkJeG1sWFBhdGhEZWJ1Z09iak1heFVzZXJzID0KLQkJICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyVXNlcnM7Ci0JICAgIGJyZWFrOwotCWNhc2UgWFBBVEhfWFNMVF9UUkVFOgotCSAgICBpZiAoISBpc0NhY2hlZCkKLQkJeG1sWFBhdGhEZWJ1Z09ialRvdGFsWFNMVFRyZWUrKzsKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJYU0xUVHJlZSsrOwotCSAgICBpZiAoeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJYU0xUVHJlZSA+Ci0JCXhtbFhQYXRoRGVidWdPYmpNYXhYU0xUVHJlZSkKLQkJeG1sWFBhdGhEZWJ1Z09iak1heFhTTFRUcmVlID0KLQkJICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyWFNMVFRyZWU7Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoISBpc0NhY2hlZCkKLQl4bWxYUGF0aERlYnVnT2JqVG90YWxBbGwrKzsKLSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlckFsbCsrOwotICAgIGlmICh4bWxYUGF0aERlYnVnT2JqQ291bnRlckFsbCA+Ci0JeG1sWFBhdGhEZWJ1Z09iak1heEFsbCkKLQl4bWxYUGF0aERlYnVnT2JqTWF4QWxsID0KLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJBbGw7Ci19Ci0KLXN0YXRpYyB2b2lkCi14bWxYUGF0aERlYnVnT2JqVXNhZ2VSZWxlYXNlZCh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCwKLQkJCSAgICAgIHhtbFhQYXRoT2JqZWN0VHlwZSBvYmpUeXBlKQotewotICAgIGludCBpc0NhY2hlZCA9IDA7Ci0KLSAgICBpZiAoY3R4dCAhPSBOVUxMKSB7Ci0JaWYgKGN0eHQtPmNhY2hlICE9IE5VTEwpIHsKLQkgICAgeG1sWFBhdGhDb250ZXh0Q2FjaGVQdHIgY2FjaGUgPQotCQkoeG1sWFBhdGhDb250ZXh0Q2FjaGVQdHIpIGN0eHQtPmNhY2hlOwotCi0JICAgIGlzQ2FjaGVkID0gMTsKLQotCSAgICBjYWNoZS0+ZGJnQ2FjaGVkQWxsKys7Ci0JICAgIHN3aXRjaCAob2JqVHlwZSkgewotCQljYXNlIFhQQVRIX1VOREVGSU5FRDoKLQkJICAgIGNhY2hlLT5kYmdDYWNoZWRVbmRlZmluZWQrKzsKLQkJICAgIGJyZWFrOwotCQljYXNlIFhQQVRIX05PREVTRVQ6Ci0JCSAgICBjYWNoZS0+ZGJnQ2FjaGVkTm9kZXNldCsrOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgWFBBVEhfQk9PTEVBTjoKLQkJICAgIGNhY2hlLT5kYmdDYWNoZWRCb29sKys7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBYUEFUSF9OVU1CRVI6Ci0JCSAgICBjYWNoZS0+ZGJnQ2FjaGVkTnVtYmVyKys7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBYUEFUSF9TVFJJTkc6Ci0JCSAgICBjYWNoZS0+ZGJnQ2FjaGVkU3RyaW5nKys7Ci0JCSAgICBicmVhazsKLSNpZmRlZiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQKLQkJY2FzZSBYUEFUSF9QT0lOVDoKLQkJICAgIGNhY2hlLT5kYmdDYWNoZWRQb2ludCsrOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgWFBBVEhfUkFOR0U6Ci0JCSAgICBjYWNoZS0+ZGJnQ2FjaGVkUmFuZ2UrKzsKLQkJICAgIGJyZWFrOwotCQljYXNlIFhQQVRIX0xPQ0FUSU9OU0VUOgotCQkgICAgY2FjaGUtPmRiZ0NhY2hlZExvY3NldCsrOwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTElCWE1MX1hQVFJfTE9DU19FTkFCTEVEICovCi0JCWNhc2UgWFBBVEhfVVNFUlM6Ci0JCSAgICBjYWNoZS0+ZGJnQ2FjaGVkVXNlcnMrKzsKLQkJICAgIGJyZWFrOwotCQljYXNlIFhQQVRIX1hTTFRfVFJFRToKLQkJICAgIGNhY2hlLT5kYmdDYWNoZWRYU0xUVHJlZSsrOwotCQkgICAgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCSAgICBicmVhazsKLQkgICAgfQotCi0JfQotICAgIH0KLSAgICBzd2l0Y2ggKG9ialR5cGUpIHsKLQljYXNlIFhQQVRIX1VOREVGSU5FRDoKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVbmRlZmluZWQtLTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYUEFUSF9OT0RFU0VUOgotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlck5vZGVzZXQtLTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYUEFUSF9CT09MRUFOOgotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlckJvb2wtLTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYUEFUSF9OVU1CRVI6Ci0JICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyTnVtYmVyLS07Ci0JICAgIGJyZWFrOwotCWNhc2UgWFBBVEhfU1RSSU5HOgotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclN0cmluZy0tOwotCSAgICBicmVhazsKLSNpZmRlZiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQKLQljYXNlIFhQQVRIX1BPSU5UOgotCSAgICB4bWxYUGF0aERlYnVnT2JqQ291bnRlclBvaW50LS07Ci0JICAgIGJyZWFrOwotCWNhc2UgWFBBVEhfUkFOR0U6Ci0JICAgIHhtbFhQYXRoRGVidWdPYmpDb3VudGVyUmFuZ2UtLTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBYUEFUSF9MT0NBVElPTlNFVDoKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJMb2NzZXQtLTsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTElCWE1MX1hQVFJfTE9DU19FTkFCTEVEICovCi0JY2FzZSBYUEFUSF9VU0VSUzoKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJVc2Vycy0tOwotCSAgICBicmVhazsKLQljYXNlIFhQQVRIX1hTTFRfVFJFRToKLQkgICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJYU0xUVHJlZS0tOwotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKLSAgICB9Ci0gICAgeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJBbGwtLTsKLX0KLQotc3RhdGljIHZvaWQKLXhtbFhQYXRoRGVidWdPYmpVc2FnZURpc3BsYXkoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQpCi17Ci0gICAgaW50IHJlcUFsbCwgcmVxTm9kZXNldCwgcmVxU3RyaW5nLCByZXFCb29sLCByZXFOdW1iZXIsCi0JcmVxWFNMVFRyZWUsIHJlcVVuZGVmaW5lZDsKLSAgICBpbnQgY2FBbGwgPSAwLCBjYU5vZGVzZXQgPSAwLCBjYVN0cmluZyA9IDAsIGNhQm9vbCA9IDAsCi0JY2FOdW1iZXIgPSAwLCBjYVhTTFRUcmVlID0gMCwgY2FVbmRlZmluZWQgPSAwOwotICAgIGludCByZUFsbCA9IDAsIHJlTm9kZXNldCA9IDAsIHJlU3RyaW5nID0gMCwgcmVCb29sID0gMCwKLQlyZU51bWJlciA9IDAsIHJlWFNMVFRyZWUgPSAwLCByZVVuZGVmaW5lZCA9IDA7Ci0gICAgaW50IGxlZnRPYmpzID0geG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJBbGw7Ci0KLSAgICByZXFBbGwgPSB4bWxYUGF0aERlYnVnT2JqVG90YWxBbGw7Ci0gICAgcmVxTm9kZXNldCA9IHhtbFhQYXRoRGVidWdPYmpUb3RhbE5vZGVzZXQ7Ci0gICAgcmVxU3RyaW5nID0geG1sWFBhdGhEZWJ1Z09ialRvdGFsU3RyaW5nOwotICAgIHJlcUJvb2wgPSB4bWxYUGF0aERlYnVnT2JqVG90YWxCb29sOwotICAgIHJlcU51bWJlciA9IHhtbFhQYXRoRGVidWdPYmpUb3RhbE51bWJlcjsKLSAgICByZXFYU0xUVHJlZSA9IHhtbFhQYXRoRGVidWdPYmpUb3RhbFhTTFRUcmVlOwotICAgIHJlcVVuZGVmaW5lZCA9IHhtbFhQYXRoRGVidWdPYmpUb3RhbFVuZGVmaW5lZDsKLQotICAgIHByaW50ZigiIyBYUGF0aCBvYmplY3QgdXNhZ2U6XG4iKTsKLQotICAgIGlmIChjdHh0ICE9IE5VTEwpIHsKLQlpZiAoY3R4dC0+Y2FjaGUgIT0gTlVMTCkgewotCSAgICB4bWxYUGF0aENvbnRleHRDYWNoZVB0ciBjYWNoZSA9Ci0JCSh4bWxYUGF0aENvbnRleHRDYWNoZVB0cikgY3R4dC0+Y2FjaGU7Ci0KLQkgICAgcmVBbGwgPSBjYWNoZS0+ZGJnUmV1c2VkQWxsOwotCSAgICByZXFBbGwgKz0gcmVBbGw7Ci0JICAgIHJlTm9kZXNldCA9IGNhY2hlLT5kYmdSZXVzZWROb2Rlc2V0OwotCSAgICByZXFOb2Rlc2V0ICs9IHJlTm9kZXNldDsKLQkgICAgcmVTdHJpbmcgPSBjYWNoZS0+ZGJnUmV1c2VkU3RyaW5nOwotCSAgICByZXFTdHJpbmcgKz0gcmVTdHJpbmc7Ci0JICAgIHJlQm9vbCA9IGNhY2hlLT5kYmdSZXVzZWRCb29sOwotCSAgICByZXFCb29sICs9IHJlQm9vbDsKLQkgICAgcmVOdW1iZXIgPSBjYWNoZS0+ZGJnUmV1c2VkTnVtYmVyOwotCSAgICByZXFOdW1iZXIgKz0gcmVOdW1iZXI7Ci0JICAgIHJlWFNMVFRyZWUgPSBjYWNoZS0+ZGJnUmV1c2VkWFNMVFRyZWU7Ci0JICAgIHJlcVhTTFRUcmVlICs9IHJlWFNMVFRyZWU7Ci0JICAgIHJlVW5kZWZpbmVkID0gY2FjaGUtPmRiZ1JldXNlZFVuZGVmaW5lZDsKLQkgICAgcmVxVW5kZWZpbmVkICs9IHJlVW5kZWZpbmVkOwotCi0JICAgIGNhQWxsID0gY2FjaGUtPmRiZ0NhY2hlZEFsbDsKLQkgICAgY2FCb29sID0gY2FjaGUtPmRiZ0NhY2hlZEJvb2w7Ci0JICAgIGNhTm9kZXNldCA9IGNhY2hlLT5kYmdDYWNoZWROb2Rlc2V0OwotCSAgICBjYVN0cmluZyA9IGNhY2hlLT5kYmdDYWNoZWRTdHJpbmc7Ci0JICAgIGNhTnVtYmVyID0gY2FjaGUtPmRiZ0NhY2hlZE51bWJlcjsKLQkgICAgY2FYU0xUVHJlZSA9IGNhY2hlLT5kYmdDYWNoZWRYU0xUVHJlZTsKLQkgICAgY2FVbmRlZmluZWQgPSBjYWNoZS0+ZGJnQ2FjaGVkVW5kZWZpbmVkOwotCi0JICAgIGlmIChjYWNoZS0+bm9kZXNldE9ianMpCi0JCWxlZnRPYmpzIC09IGNhY2hlLT5ub2Rlc2V0T2Jqcy0+bnVtYmVyOwotCSAgICBpZiAoY2FjaGUtPnN0cmluZ09ianMpCi0JCWxlZnRPYmpzIC09IGNhY2hlLT5zdHJpbmdPYmpzLT5udW1iZXI7Ci0JICAgIGlmIChjYWNoZS0+Ym9vbGVhbk9ianMpCi0JCWxlZnRPYmpzIC09IGNhY2hlLT5ib29sZWFuT2Jqcy0+bnVtYmVyOwotCSAgICBpZiAoY2FjaGUtPm51bWJlck9ianMpCi0JCWxlZnRPYmpzIC09IGNhY2hlLT5udW1iZXJPYmpzLT5udW1iZXI7Ci0JICAgIGlmIChjYWNoZS0+bWlzY09ianMpCi0JCWxlZnRPYmpzIC09IGNhY2hlLT5taXNjT2Jqcy0+bnVtYmVyOwotCX0KLSAgICB9Ci0KLSAgICBwcmludGYoIiMgYWxsXG4iKTsKLSAgICBwcmludGYoIiMgICB0b3RhbCAgOiAlZFxuIiwgcmVxQWxsKTsKLSAgICBwcmludGYoIiMgICBsZWZ0ICA6ICVkXG4iLCBsZWZ0T2Jqcyk7Ci0gICAgcHJpbnRmKCIjICAgY3JlYXRlZDogJWRcbiIsIHhtbFhQYXRoRGVidWdPYmpUb3RhbEFsbCk7Ci0gICAgcHJpbnRmKCIjICAgcmV1c2VkIDogJWRcbiIsIHJlQWxsKTsKLSAgICBwcmludGYoIiMgICBtYXggICAgOiAlZFxuIiwgeG1sWFBhdGhEZWJ1Z09iak1heEFsbCk7Ci0KLSAgICBwcmludGYoIiMgbm9kZS1zZXRzXG4iKTsKLSAgICBwcmludGYoIiMgICB0b3RhbCAgOiAlZFxuIiwgcmVxTm9kZXNldCk7Ci0gICAgcHJpbnRmKCIjICAgY3JlYXRlZDogJWRcbiIsIHhtbFhQYXRoRGVidWdPYmpUb3RhbE5vZGVzZXQpOwotICAgIHByaW50ZigiIyAgIHJldXNlZCA6ICVkXG4iLCByZU5vZGVzZXQpOwotICAgIHByaW50ZigiIyAgIG1heCAgICA6ICVkXG4iLCB4bWxYUGF0aERlYnVnT2JqTWF4Tm9kZXNldCk7Ci0KLSAgICBwcmludGYoIiMgc3RyaW5nc1xuIik7Ci0gICAgcHJpbnRmKCIjICAgdG90YWwgIDogJWRcbiIsIHJlcVN0cmluZyk7Ci0gICAgcHJpbnRmKCIjICAgY3JlYXRlZDogJWRcbiIsIHhtbFhQYXRoRGVidWdPYmpUb3RhbFN0cmluZyk7Ci0gICAgcHJpbnRmKCIjICAgcmV1c2VkIDogJWRcbiIsIHJlU3RyaW5nKTsKLSAgICBwcmludGYoIiMgICBtYXggICAgOiAlZFxuIiwgeG1sWFBhdGhEZWJ1Z09iak1heFN0cmluZyk7Ci0KLSAgICBwcmludGYoIiMgYm9vbGVhbnNcbiIpOwotICAgIHByaW50ZigiIyAgIHRvdGFsICA6ICVkXG4iLCByZXFCb29sKTsKLSAgICBwcmludGYoIiMgICBjcmVhdGVkOiAlZFxuIiwgeG1sWFBhdGhEZWJ1Z09ialRvdGFsQm9vbCk7Ci0gICAgcHJpbnRmKCIjICAgcmV1c2VkIDogJWRcbiIsIHJlQm9vbCk7Ci0gICAgcHJpbnRmKCIjICAgbWF4ICAgIDogJWRcbiIsIHhtbFhQYXRoRGVidWdPYmpNYXhCb29sKTsKLQotICAgIHByaW50ZigiIyBudW1iZXJzXG4iKTsKLSAgICBwcmludGYoIiMgICB0b3RhbCAgOiAlZFxuIiwgcmVxTnVtYmVyKTsKLSAgICBwcmludGYoIiMgICBjcmVhdGVkOiAlZFxuIiwgeG1sWFBhdGhEZWJ1Z09ialRvdGFsTnVtYmVyKTsKLSAgICBwcmludGYoIiMgICByZXVzZWQgOiAlZFxuIiwgcmVOdW1iZXIpOwotICAgIHByaW50ZigiIyAgIG1heCAgICA6ICVkXG4iLCB4bWxYUGF0aERlYnVnT2JqTWF4TnVtYmVyKTsKLQotICAgIHByaW50ZigiIyBYU0xUIHJlc3VsdCB0cmVlIGZyYWdtZW50c1xuIik7Ci0gICAgcHJpbnRmKCIjICAgdG90YWwgIDogJWRcbiIsIHJlcVhTTFRUcmVlKTsKLSAgICBwcmludGYoIiMgICBjcmVhdGVkOiAlZFxuIiwgeG1sWFBhdGhEZWJ1Z09ialRvdGFsWFNMVFRyZWUpOwotICAgIHByaW50ZigiIyAgIHJldXNlZCA6ICVkXG4iLCByZVhTTFRUcmVlKTsKLSAgICBwcmludGYoIiMgICBtYXggICAgOiAlZFxuIiwgeG1sWFBhdGhEZWJ1Z09iak1heFhTTFRUcmVlKTsKLQotICAgIHByaW50ZigiIyB1bmRlZmluZWRcbiIpOwotICAgIHByaW50ZigiIyAgIHRvdGFsICA6ICVkXG4iLCByZXFVbmRlZmluZWQpOwotICAgIHByaW50ZigiIyAgIGNyZWF0ZWQ6ICVkXG4iLCB4bWxYUGF0aERlYnVnT2JqVG90YWxVbmRlZmluZWQpOwotICAgIHByaW50ZigiIyAgIHJldXNlZCA6ICVkXG4iLCByZVVuZGVmaW5lZCk7Ci0gICAgcHJpbnRmKCIjICAgbWF4ICAgIDogJWRcbiIsIHhtbFhQYXRoRGVidWdPYmpNYXhVbmRlZmluZWQpOwotCi19Ci0KLSNlbmRpZiAvKiBYUF9ERUJVR19PQkpfVVNBR0UgKi8KLQogI2VuZGlmIC8qIExJQlhNTF9ERUJVR19FTkFCTEVEICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIyMDQsNyArMTY5OSw3IEBACiAgICAgICAgIHhtbFhQYXRoRXJyTWVtb3J5KE5VTEwsICJjcmVhdGluZyBvYmplY3QgY2FjaGVcbiIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aENvbnRleHRDYWNoZSkpOworICAgIG1lbXNldChyZXQsIDAgLCBzaXplb2YoeG1sWFBhdGhDb250ZXh0Q2FjaGUpKTsKICAgICByZXQtPm1heE5vZGVzZXQgPSAxMDA7CiAgICAgcmV0LT5tYXhTdHJpbmcgPSAxMDA7CiAgICAgcmV0LT5tYXhCb29sZWFuID0gMTAwOwpAQCAtMjIzNCw5ICsxNzI5LDYgQEAKIAkgICAgeG1sRnJlZShvYmotPm5vZGVzZXR2YWwpOwogCX0KIAl4bWxGcmVlKG9iaik7Ci0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0JeG1sWFBhdGhEZWJ1Z09iakNvdW50ZXJBbGwtLTsKLSNlbmRpZgogICAgIH0KICAgICB4bWxQb2ludGVyTGlzdEZyZWUobGlzdCk7CiB9CkBAIC0yMzIzLDYgKzE4MTUsOCBAQAogICogV3JhcCB0aGUgTm9kZXNldCBAdmFsIGluIGEgbmV3IHhtbFhQYXRoT2JqZWN0UHRyCiAgKgogICogUmV0dXJucyB0aGUgY3JlYXRlZCBvciByZXVzZWQgb2JqZWN0LgorICoKKyAqIEluIGNhc2Ugb2YgZXJyb3IgdGhlIG5vZGUgc2V0IGlzIGRlc3Ryb3llZCBhbmQgTlVMTCBpcyByZXR1cm5lZC4KICAqLwogc3RhdGljIHhtbFhQYXRoT2JqZWN0UHRyCiB4bWxYUGF0aENhY2hlV3JhcE5vZGVTZXQoeG1sWFBhdGhDb250ZXh0UHRyIGN0eHQsIHhtbE5vZGVTZXRQdHIgdmFsKQpAQCAtMjM0MCw5ICsxODM0LDYgQEAKIAkJY2FjaGUtPm1pc2NPYmpzLT5pdGVtc1stLWNhY2hlLT5taXNjT2Jqcy0+bnVtYmVyXTsKIAkgICAgcmV0LT50eXBlID0gWFBBVEhfTk9ERVNFVDsKIAkgICAgcmV0LT5ub2Rlc2V0dmFsID0gdmFsOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoY3R4dCwgWFBBVEhfTk9ERVNFVCk7Ci0jZW5kaWYKIAkgICAgcmV0dXJuKHJldCk7CiAJfQogICAgIH0KQEAgLTIzNzcsOSArMTg2OCw2IEBACiAJCWNhY2hlLT5zdHJpbmdPYmpzLT5pdGVtc1stLWNhY2hlLT5zdHJpbmdPYmpzLT5udW1iZXJdOwogCSAgICByZXQtPnR5cGUgPSBYUEFUSF9TVFJJTkc7CiAJICAgIHJldC0+c3RyaW5ndmFsID0gdmFsOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoY3R4dCwgWFBBVEhfU1RSSU5HKTsKLSNlbmRpZgogCSAgICByZXR1cm4ocmV0KTsKIAl9IGVsc2UgaWYgKChjYWNoZS0+bWlzY09ianMgIT0gTlVMTCkgJiYKIAkgICAgKGNhY2hlLT5taXNjT2Jqcy0+bnVtYmVyICE9IDApKQpAQCAtMjM5Myw5ICsxODgxLDYgQEAKIAogCSAgICByZXQtPnR5cGUgPSBYUEFUSF9TVFJJTkc7CiAJICAgIHJldC0+c3RyaW5ndmFsID0gdmFsOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoY3R4dCwgWFBBVEhfU1RSSU5HKTsKLSNlbmRpZgogCSAgICByZXR1cm4ocmV0KTsKIAl9CiAgICAgfQpAQCAtMjQ0MSwzMiArMTkyNiwyOSBAQAogCQkgICAgcmV0LT5ub2Rlc2V0dmFsLT5ub2RlTnIgPSAxOwogCQl9CiAJICAgIH0KLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLQkgICAgeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVxdWVzdGVkKGN0eHQsIFhQQVRIX05PREVTRVQpOwotI2VuZGlmCiAJICAgIHJldHVybihyZXQpOwogCX0gZWxzZSBpZiAoKGNhY2hlLT5taXNjT2JqcyAhPSBOVUxMKSAmJgogCSAgICAoY2FjaGUtPm1pc2NPYmpzLT5udW1iZXIgIT0gMCkpCiAJewogCSAgICB4bWxYUGF0aE9iamVjdFB0ciByZXQ7CisgICAgICAgICAgICB4bWxOb2RlU2V0UHRyIHNldDsKIAkgICAgLyoKIAkgICAgKiBGYWxsYmFjayB0byBtaXNjLWNhY2hlLgogCSAgICAqLwogCisJICAgIHNldCA9IHhtbFhQYXRoTm9kZVNldENyZWF0ZSh2YWwpOworCSAgICBpZiAoc2V0ID09IE5VTEwpIHsKKwkJY3R4dC0+bGFzdEVycm9yLmRvbWFpbiA9IFhNTF9GUk9NX1hQQVRIOworCQljdHh0LT5sYXN0RXJyb3IuY29kZSA9IFhNTF9FUlJfTk9fTUVNT1JZOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0KKwogCSAgICByZXQgPSAoeG1sWFBhdGhPYmplY3RQdHIpCiAJCWNhY2hlLT5taXNjT2Jqcy0+aXRlbXNbLS1jYWNoZS0+bWlzY09ianMtPm51bWJlcl07CiAKIAkgICAgcmV0LT50eXBlID0gWFBBVEhfTk9ERVNFVDsKIAkgICAgcmV0LT5ib29sdmFsID0gMDsKLQkgICAgcmV0LT5ub2Rlc2V0dmFsID0geG1sWFBhdGhOb2RlU2V0Q3JlYXRlKHZhbCk7Ci0JICAgIGlmIChyZXQtPm5vZGVzZXR2YWwgPT0gTlVMTCkgewotCQljdHh0LT5sYXN0RXJyb3IuZG9tYWluID0gWE1MX0ZST01fWFBBVEg7Ci0JCWN0eHQtPmxhc3RFcnJvci5jb2RlID0gWE1MX0VSUl9OT19NRU1PUlk7Ci0JCXJldHVybihOVUxMKTsKLQkgICAgfQotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoY3R4dCwgWFBBVEhfTk9ERVNFVCk7Ci0jZW5kaWYKKwkgICAgcmV0LT5ub2Rlc2V0dmFsID0gc2V0OwogCSAgICByZXR1cm4ocmV0KTsKIAl9CiAgICAgfQpAQCAtMjQ3NCw1NSArMTk1Niw2IEBACiB9CiAKIC8qKgotICogeG1sWFBhdGhDYWNoZU5ld0NTdHJpbmc6Ci0gKiBAY3R4dDogdGhlIFhQYXRoIGNvbnRleHQKLSAqIEB2YWw6ICB0aGUgY2hhciAqIHZhbHVlCi0gKgotICogVGhpcyBpcyB0aGUgY2FjaGVkIHZlcnNpb24gb2YgeG1sWFBhdGhOZXdDU3RyaW5nKCkuCi0gKiBBY3F1aXJlIGFuIHhtbFhQYXRoT2JqZWN0UHRyIG9mIHR5cGUgc3RyaW5nIGFuZCBvZiB2YWx1ZSBAdmFsCi0gKgotICogUmV0dXJucyB0aGUgY3JlYXRlZCBvciByZXVzZWQgb2JqZWN0LgotICovCi1zdGF0aWMgeG1sWFBhdGhPYmplY3RQdHIKLXhtbFhQYXRoQ2FjaGVOZXdDU3RyaW5nKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0LCBjb25zdCBjaGFyICp2YWwpCi17Ci0gICAgaWYgKChjdHh0ICE9IE5VTEwpICYmIChjdHh0LT5jYWNoZSkpIHsKLQl4bWxYUGF0aENvbnRleHRDYWNoZVB0ciBjYWNoZSA9ICh4bWxYUGF0aENvbnRleHRDYWNoZVB0cikgY3R4dC0+Y2FjaGU7Ci0KLQlpZiAoKGNhY2hlLT5zdHJpbmdPYmpzICE9IE5VTEwpICYmCi0JICAgIChjYWNoZS0+c3RyaW5nT2Jqcy0+bnVtYmVyICE9IDApKQotCXsKLQkgICAgeG1sWFBhdGhPYmplY3RQdHIgcmV0OwotCi0JICAgIHJldCA9ICh4bWxYUGF0aE9iamVjdFB0cikKLQkJY2FjaGUtPnN0cmluZ09ianMtPml0ZW1zWy0tY2FjaGUtPnN0cmluZ09ianMtPm51bWJlcl07Ci0KLQkgICAgcmV0LT50eXBlID0gWFBBVEhfU1RSSU5HOwotCSAgICByZXQtPnN0cmluZ3ZhbCA9IHhtbFN0cmR1cChCQURfQ0FTVCB2YWwpOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoY3R4dCwgWFBBVEhfU1RSSU5HKTsKLSNlbmRpZgotCSAgICByZXR1cm4ocmV0KTsKLQl9IGVsc2UgaWYgKChjYWNoZS0+bWlzY09ianMgIT0gTlVMTCkgJiYKLQkgICAgKGNhY2hlLT5taXNjT2Jqcy0+bnVtYmVyICE9IDApKQotCXsKLQkgICAgeG1sWFBhdGhPYmplY3RQdHIgcmV0OwotCi0JICAgIHJldCA9ICh4bWxYUGF0aE9iamVjdFB0cikKLQkJY2FjaGUtPm1pc2NPYmpzLT5pdGVtc1stLWNhY2hlLT5taXNjT2Jqcy0+bnVtYmVyXTsKLQotCSAgICByZXQtPnR5cGUgPSBYUEFUSF9TVFJJTkc7Ci0JICAgIHJldC0+c3RyaW5ndmFsID0geG1sU3RyZHVwKEJBRF9DQVNUIHZhbCk7Ci0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0JICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChjdHh0LCBYUEFUSF9TVFJJTkcpOwotI2VuZGlmCi0JICAgIHJldHVybihyZXQpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHhtbFhQYXRoTmV3Q1N0cmluZyh2YWwpKTsKLX0KLQotLyoqCiAgKiB4bWxYUGF0aENhY2hlTmV3U3RyaW5nOgogICogQGN0eHQ6IHRoZSBYUGF0aCBjb250ZXh0CiAgKiBAdmFsOiAgdGhlIHhtbENoYXIgKiB2YWx1ZQpAQCAtMjU0MiwzNCArMTk3NSw0MCBAQAogCSAgICAoY2FjaGUtPnN0cmluZ09ianMtPm51bWJlciAhPSAwKSkKIAl7CiAJICAgIHhtbFhQYXRoT2JqZWN0UHRyIHJldDsKKyAgICAgICAgICAgIHhtbENoYXIgKmNvcHk7CisKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB2YWwgPSBCQURfQ0FTVCAiIjsKKyAgICAgICAgICAgIGNvcHkgPSB4bWxTdHJkdXAodmFsKTsKKyAgICAgICAgICAgIGlmIChjb3B5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShjdHh0LCBOVUxMKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICB9CiAKIAkgICAgcmV0ID0gKHhtbFhQYXRoT2JqZWN0UHRyKQogCQljYWNoZS0+c3RyaW5nT2Jqcy0+aXRlbXNbLS1jYWNoZS0+c3RyaW5nT2Jqcy0+bnVtYmVyXTsKIAkgICAgcmV0LT50eXBlID0gWFBBVEhfU1RSSU5HOwotCSAgICBpZiAodmFsICE9IE5VTEwpCi0JCXJldC0+c3RyaW5ndmFsID0geG1sU3RyZHVwKHZhbCk7Ci0JICAgIGVsc2UKLQkJcmV0LT5zdHJpbmd2YWwgPSB4bWxTdHJkdXAoKGNvbnN0IHhtbENoYXIgKikiIik7Ci0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0JICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChjdHh0LCBYUEFUSF9TVFJJTkcpOwotI2VuZGlmCisgICAgICAgICAgICByZXQtPnN0cmluZ3ZhbCA9IGNvcHk7CiAJICAgIHJldHVybihyZXQpOwogCX0gZWxzZSBpZiAoKGNhY2hlLT5taXNjT2JqcyAhPSBOVUxMKSAmJgogCSAgICAoY2FjaGUtPm1pc2NPYmpzLT5udW1iZXIgIT0gMCkpCiAJewogCSAgICB4bWxYUGF0aE9iamVjdFB0ciByZXQ7CisgICAgICAgICAgICB4bWxDaGFyICpjb3B5OworCisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgdmFsID0gQkFEX0NBU1QgIiI7CisgICAgICAgICAgICBjb3B5ID0geG1sU3RyZHVwKHZhbCk7CisgICAgICAgICAgICBpZiAoY29weSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICAgICAgfQogCiAJICAgIHJldCA9ICh4bWxYUGF0aE9iamVjdFB0cikKIAkJY2FjaGUtPm1pc2NPYmpzLT5pdGVtc1stLWNhY2hlLT5taXNjT2Jqcy0+bnVtYmVyXTsKIAogCSAgICByZXQtPnR5cGUgPSBYUEFUSF9TVFJJTkc7Ci0JICAgIGlmICh2YWwgIT0gTlVMTCkKLQkJcmV0LT5zdHJpbmd2YWwgPSB4bWxTdHJkdXAodmFsKTsKLQkgICAgZWxzZQotCQlyZXQtPnN0cmluZ3ZhbCA9IHhtbFN0cmR1cCgoY29uc3QgeG1sQ2hhciAqKSIiKTsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLQkgICAgeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVxdWVzdGVkKGN0eHQsIFhQQVRIX1NUUklORyk7Ci0jZW5kaWYKKyAgICAgICAgICAgIHJldC0+c3RyaW5ndmFsID0gY29weTsKIAkgICAgcmV0dXJuKHJldCk7CiAJfQogICAgIH0KQEAgLTI1NzcsNiArMjAxNiwyMiBAQAogfQogCiAvKioKKyAqIHhtbFhQYXRoQ2FjaGVOZXdDU3RyaW5nOgorICogQGN0eHQ6IHRoZSBYUGF0aCBjb250ZXh0CisgKiBAdmFsOiAgdGhlIGNoYXIgKiB2YWx1ZQorICoKKyAqIFRoaXMgaXMgdGhlIGNhY2hlZCB2ZXJzaW9uIG9mIHhtbFhQYXRoTmV3Q1N0cmluZygpLgorICogQWNxdWlyZSBhbiB4bWxYUGF0aE9iamVjdFB0ciBvZiB0eXBlIHN0cmluZyBhbmQgb2YgdmFsdWUgQHZhbAorICoKKyAqIFJldHVybnMgdGhlIGNyZWF0ZWQgb3IgcmV1c2VkIG9iamVjdC4KKyAqLworc3RhdGljIHhtbFhQYXRoT2JqZWN0UHRyCit4bWxYUGF0aENhY2hlTmV3Q1N0cmluZyh4bWxYUGF0aENvbnRleHRQdHIgY3R4dCwgY29uc3QgY2hhciAqdmFsKQoreworICAgIHJldHVybiB4bWxYUGF0aENhY2hlTmV3U3RyaW5nKGN0eHQsIEJBRF9DQVNUIHZhbCk7Cit9CisKKy8qKgogICogeG1sWFBhdGhDYWNoZU5ld0Jvb2xlYW46CiAgKiBAY3R4dDogdGhlIFhQYXRoIGNvbnRleHQKICAqIEB2YWw6ICB0aGUgYm9vbGVhbiB2YWx1ZQpAQCAtMjYwMSw5ICsyMDU2LDYgQEAKIAkJY2FjaGUtPmJvb2xlYW5PYmpzLT5pdGVtc1stLWNhY2hlLT5ib29sZWFuT2Jqcy0+bnVtYmVyXTsKIAkgICAgcmV0LT50eXBlID0gWFBBVEhfQk9PTEVBTjsKIAkgICAgcmV0LT5ib29sdmFsID0gKHZhbCAhPSAwKTsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLQkgICAgeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVxdWVzdGVkKGN0eHQsIFhQQVRIX0JPT0xFQU4pOwotI2VuZGlmCiAJICAgIHJldHVybihyZXQpOwogCX0gZWxzZSBpZiAoKGNhY2hlLT5taXNjT2JqcyAhPSBOVUxMKSAmJgogCSAgICAoY2FjaGUtPm1pc2NPYmpzLT5udW1iZXIgIT0gMCkpCkBAIC0yNjE1LDkgKzIwNjcsNiBAQAogCiAJICAgIHJldC0+dHlwZSA9IFhQQVRIX0JPT0xFQU47CiAJICAgIHJldC0+Ym9vbHZhbCA9ICh2YWwgIT0gMCk7Ci0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0JICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChjdHh0LCBYUEFUSF9CT09MRUFOKTsKLSNlbmRpZgogCSAgICByZXR1cm4ocmV0KTsKIAl9CiAgICAgfQpAQCAtMjY0OSw5ICsyMDk4LDYgQEAKIAkJY2FjaGUtPm51bWJlck9ianMtPml0ZW1zWy0tY2FjaGUtPm51bWJlck9ianMtPm51bWJlcl07CiAJICAgIHJldC0+dHlwZSA9IFhQQVRIX05VTUJFUjsKIAkgICAgcmV0LT5mbG9hdHZhbCA9IHZhbDsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLQkgICAgeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVxdWVzdGVkKGN0eHQsIFhQQVRIX05VTUJFUik7Ci0jZW5kaWYKIAkgICAgcmV0dXJuKHJldCk7CiAJfSBlbHNlIGlmICgoY2FjaGUtPm1pc2NPYmpzICE9IE5VTEwpICYmCiAJICAgIChjYWNoZS0+bWlzY09ianMtPm51bWJlciAhPSAwKSkKQEAgLTI2NjMsOSArMjEwOSw2IEBACiAKIAkgICAgcmV0LT50eXBlID0gWFBBVEhfTlVNQkVSOwogCSAgICByZXQtPmZsb2F0dmFsID0gdmFsOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotCSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoY3R4dCwgWFBBVEhfTlVNQkVSKTsKLSNlbmRpZgogCSAgICByZXR1cm4ocmV0KTsKIAl9CiAgICAgfQpAQCAtMjY5Myw5ICsyMTM2LDYgQEAKIAogICAgIHN3aXRjaCAodmFsLT50eXBlKSB7CiAgICAgY2FzZSBYUEFUSF9VTkRFRklORUQ6Ci0jaWZkZWYgREVCVUdfRVhQUgotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiU1RSSU5HOiB1bmRlZmluZWRcbiIpOwotI2VuZGlmCiAJYnJlYWs7CiAgICAgY2FzZSBYUEFUSF9OT0RFU0VUOgogICAgIGNhc2UgWFBBVEhfWFNMVF9UUkVFOgpAQCAtMjgxMyw0MiArMjI1Myw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKioKLSAqIHhtbFhQYXRoU2V0RnJhbWU6Ci0gKiBAY3R4dDogYW4gWFBhdGggcGFyc2VyIGNvbnRleHQKLSAqCi0gKiBTZXQgdGhlIGNhbGxlZSBldmFsdWF0aW9uIGZyYW1lCi0gKgotICogUmV0dXJucyB0aGUgcHJldmlvdXMgZnJhbWUgdmFsdWUgdG8gYmUgcmVzdG9yZWQgb25jZSBkb25lCi0gKi8KLXN0YXRpYyBpbnQKLXhtbFhQYXRoU2V0RnJhbWUoeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQpIHsKLSAgICBpbnQgcmV0OwotCi0gICAgaWYgKGN0eHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuKDApOwotICAgIHJldCA9IGN0eHQtPnZhbHVlRnJhbWU7Ci0gICAgY3R4dC0+dmFsdWVGcmFtZSA9IGN0eHQtPnZhbHVlTnI7Ci0gICAgcmV0dXJuKHJldCk7Ci19Ci0KLS8qKgotICogeG1sWFBhdGhQb3BGcmFtZToKLSAqIEBjdHh0OiBhbiBYUGF0aCBwYXJzZXIgY29udGV4dAotICogQGZyYW1lOiB0aGUgcHJldmlvdXMgZnJhbWUgdmFsdWUKLSAqCi0gKiBSZW1vdmUgdGhlIGNhbGxlZSBldmFsdWF0aW9uIGZyYW1lCi0gKi8KLXN0YXRpYyB2b2lkCi14bWxYUGF0aFBvcEZyYW1lKHhtbFhQYXRoUGFyc2VyQ29udGV4dFB0ciBjdHh0LCBpbnQgZnJhbWUpIHsKLSAgICBpZiAoY3R4dCA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGN0eHQtPnZhbHVlTnIgPCBjdHh0LT52YWx1ZUZyYW1lKSB7Ci0gICAgICAgIHhtbFhQYXRoZXJyb3IoY3R4dCwgX19GSUxFX18sIF9fTElORV9fLCBYUEFUSF9TVEFDS19FUlJPUik7Ci0gICAgfQotICAgIGN0eHQtPnZhbHVlRnJhbWUgPSBmcmFtZTsKLX0KLQotLyoqCiAgKiB2YWx1ZVBvcDoKICAqIEBjdHh0OiBhbiBYUGF0aCBldmFsdWF0aW9uIGNvbnRleHQKICAqCkBAIC0yODY0LDExICsyMjY4LDYgQEAKICAgICBpZiAoKGN0eHQgPT0gTlVMTCkgfHwgKGN0eHQtPnZhbHVlTnIgPD0gMCkpCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAKLSAgICBpZiAoY3R4dC0+dmFsdWVOciA8PSBjdHh0LT52YWx1ZUZyYW1lKSB7Ci0gICAgICAgIHhtbFhQYXRoZXJyb3IoY3R4dCwgX19GSUxFX18sIF9fTElORV9fLCBYUEFUSF9TVEFDS19FUlJPUik7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotCiAgICAgY3R4dC0+dmFsdWVOci0tOwogICAgIGlmIChjdHh0LT52YWx1ZU5yID4gMCkKICAgICAgICAgY3R4dC0+dmFsdWUgPSBjdHh0LT52YWx1ZVRhYltjdHh0LT52YWx1ZU5yIC0gMV07CkBAIC0yODg3LDYgKzIyODYsOCBAQAogICogYSBtZW1vcnkgZXJyb3IgaXMgcmVjb3JkZWQgaW4gdGhlIHBhcnNlciBjb250ZXh0LgogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgdmFsdWUgc3RhY2ssIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisgKgorICogVGhlIG9iamVjdCBpcyBkZXN0cm95ZWQgaW4gY2FzZSBvZiBlcnJvci4KICAqLwogaW50CiB2YWx1ZVB1c2goeG1sWFBhdGhQYXJzZXJDb250ZXh0UHRyIGN0eHQsIHhtbFhQYXRoT2JqZWN0UHRyIHZhbHVlKQpAQCAtMjkwNSw2ICsyMzA2LDcgQEAKIAogICAgICAgICBpZiAoY3R4dC0+dmFsdWVNYXggPj0gWFBBVEhfTUFYX1NUQUNLX0RFUFRIKSB7CiAgICAgICAgICAgICB4bWxYUGF0aFBFcnJNZW1vcnkoY3R4dCwgIlhQYXRoIHN0YWNrIGRlcHRoIGxpbWl0IHJlYWNoZWRcbiIpOworICAgICAgICAgICAgeG1sWFBhdGhGcmVlT2JqZWN0KHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiAoLTEpOwogICAgICAgICB9CiAgICAgICAgIHRtcCA9ICh4bWxYUGF0aE9iamVjdFB0ciAqKSB4bWxSZWFsbG9jKGN0eHQtPnZhbHVlVGFiLApAQCAtMjkxMiw2ICsyMzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdHh0LT52YWx1ZVRhYlswXSkpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIHsKICAgICAgICAgICAgIHhtbFhQYXRoUEVyck1lbW9yeShjdHh0LCAicHVzaGluZyB2YWx1ZVxuIik7CisgICAgICAgICAgICB4bWxYUGF0aEZyZWVPYmplY3QodmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgIH0KICAgICAgICAgY3R4dC0+dmFsdWVNYXggKj0gMjsKQEAgLTMwOTcsNyArMjUwMCw3IEBACiAjZGVmaW5lIENVUl9DSEFSKGwpIHhtbFhQYXRoQ3VycmVudENoYXIoY3R4dCwgJmwpCiAKICNkZWZpbmUgQ09QWV9CVUYobCxiLGksdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsID09IDEpIGJbaSsrXSA9ICh4bWxDaGFyKSB2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGwgPT0gMSkgYltpKytdID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIGkgKz0geG1sQ29weUNoYXIobCwmYltpXSx2KQogCiAjZGVmaW5lIE5FWFRMKGwpICBjdHh0LT5jdXIgKz0gbApAQCAtMzMwNCw3ICsyNzA3LDcgQEAKIAkgICAgfQogCX0gd2hpbGUgKGN1ciAhPSBOVUxMKTsKICAgICB9Ci0gICAgcmV0dXJuKChsb25nKSBjb3VudCk7CisgICAgcmV0dXJuKGNvdW50KTsKIH0KIAogLyoqCkBAIC0zNTgwLDcgKzI5ODMsNyBAQAogICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAiY3JlYXRpbmcgbm9kZXNldFxuIik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBtZW1zZXQocmV0LCAwICwgKHNpemVfdCkgc2l6ZW9mKHhtbE5vZGVTZXQpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbE5vZGVTZXQpKTsKICAgICBpZiAodmFsICE9IE5VTEwpIHsKICAgICAgICAgcmV0LT5ub2RlVGFiID0gKHhtbE5vZGVQdHIgKikgeG1sTWFsbG9jKFhNTF9OT0RFU0VUX0RFRkFVTFQgKgogCQkJCQkgICAgIHNpemVvZih4bWxOb2RlUHRyKSk7CkBAIC0zNTkwLDE0ICsyOTkzLDE3IEBACiAJICAgIHJldHVybihOVUxMKTsKIAl9CiAJbWVtc2V0KHJldC0+bm9kZVRhYiwgMCAsCi0JICAgICAgIFhNTF9OT0RFU0VUX0RFRkFVTFQgKiAoc2l6ZV90KSBzaXplb2YoeG1sTm9kZVB0cikpOworCSAgICAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKICAgICAgICAgcmV0LT5ub2RlTWF4ID0gWE1MX05PREVTRVRfREVGQVVMVDsKIAlpZiAodmFsLT50eXBlID09IFhNTF9OQU1FU1BBQ0VfREVDTCkgewogCSAgICB4bWxOc1B0ciBucyA9ICh4bWxOc1B0cikgdmFsOworICAgICAgICAgICAgeG1sTm9kZVB0ciBuc05vZGUgPSB4bWxYUGF0aE5vZGVTZXREdXBOcygoeG1sTm9kZVB0cikgbnMtPm5leHQsIG5zKTsKIAotICAgICAgICAgICAgLyogVE9ETzogQ2hlY2sgbWVtb3J5IGVycm9yLiAqLwotCSAgICByZXQtPm5vZGVUYWJbcmV0LT5ub2RlTnIrK10gPQotCQl4bWxYUGF0aE5vZGVTZXREdXBOcygoeG1sTm9kZVB0cikgbnMtPm5leHQsIG5zKTsKKyAgICAgICAgICAgIGlmIChuc05vZGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHhtbFhQYXRoRnJlZU5vZGVTZXQocmV0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICB9CisJICAgIHJldC0+bm9kZVRhYltyZXQtPm5vZGVOcisrXSA9IG5zTm9kZTsKIAl9IGVsc2UKIAkgICAgcmV0LT5ub2RlVGFiW3JldC0+bm9kZU5yKytdID0gdmFsOwogICAgIH0KQEAgLTM2NTQsNyArMzA2MCw3IEBACiBpbnQKIHhtbFhQYXRoTm9kZVNldEFkZE5zKHhtbE5vZGVTZXRQdHIgY3VyLCB4bWxOb2RlUHRyIG5vZGUsIHhtbE5zUHRyIG5zKSB7CiAgICAgaW50IGk7Ci0KKyAgICB4bWxOb2RlUHRyIG5zTm9kZTsKIAogICAgIGlmICgoY3VyID09IE5VTEwpIHx8IChucyA9PSBOVUxMKSB8fCAobm9kZSA9PSBOVUxMKSB8fAogICAgICAgICAobnMtPnR5cGUgIT0gWE1MX05BTUVTUEFDRV9ERUNMKSB8fApAQCAtMzY4NCw3ICszMDkwLDcgQEAKIAkgICAgcmV0dXJuKC0xKTsKIAl9CiAJbWVtc2V0KGN1ci0+bm9kZVRhYiwgMCAsCi0JICAgICAgIFhNTF9OT0RFU0VUX0RFRkFVTFQgKiAoc2l6ZV90KSBzaXplb2YoeG1sTm9kZVB0cikpOworCSAgICAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKICAgICAgICAgY3VyLT5ub2RlTWF4ID0gWE1MX05PREVTRVRfREVGQVVMVDsKICAgICB9IGVsc2UgaWYgKGN1ci0+bm9kZU5yID09IGN1ci0+bm9kZU1heCkgewogICAgICAgICB4bWxOb2RlUHRyICp0ZW1wOwpAQCAtMzcwMiw4ICszMTA4LDEwIEBACiAgICAgICAgIGN1ci0+bm9kZU1heCAqPSAyOwogCWN1ci0+bm9kZVRhYiA9IHRlbXA7CiAgICAgfQotICAgIC8qIFRPRE86IENoZWNrIG1lbW9yeSBlcnJvci4gKi8KLSAgICBjdXItPm5vZGVUYWJbY3VyLT5ub2RlTnIrK10gPSB4bWxYUGF0aE5vZGVTZXREdXBOcyhub2RlLCBucyk7CisgICAgbnNOb2RlID0geG1sWFBhdGhOb2RlU2V0RHVwTnMobm9kZSwgbnMpOworICAgIGlmKG5zTm9kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oLTEpOworICAgIGN1ci0+bm9kZVRhYltjdXItPm5vZGVOcisrXSA9IG5zTm9kZTsKICAgICByZXR1cm4oMCk7CiB9CiAKQEAgLTM3NDAsNyArMzE0OCw3IEBACiAJICAgIHJldHVybigtMSk7CiAJfQogCW1lbXNldChjdXItPm5vZGVUYWIsIDAgLAotCSAgICAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogKHNpemVfdCkgc2l6ZW9mKHhtbE5vZGVQdHIpKTsKKwkgICAgICAgWE1MX05PREVTRVRfREVGQVVMVCAqIHNpemVvZih4bWxOb2RlUHRyKSk7CiAgICAgICAgIGN1ci0+bm9kZU1heCA9IFhNTF9OT0RFU0VUX0RFRkFVTFQ7CiAgICAgfSBlbHNlIGlmIChjdXItPm5vZGVOciA9PSBjdXItPm5vZGVNYXgpIHsKICAgICAgICAgeG1sTm9kZVB0ciAqdGVtcDsKQEAgLTM3NjAsMTAgKzMxNjgsMTEgQEAKICAgICB9CiAgICAgaWYgKHZhbC0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpIHsKIAl4bWxOc1B0ciBucyA9ICh4bWxOc1B0cikgdmFsOworICAgICAgICB4bWxOb2RlUHRyIG5zTm9kZSA9IHhtbFhQYXRoTm9kZVNldER1cE5zKCh4bWxOb2RlUHRyKSBucy0+bmV4dCwgbnMpOwogCi0gICAgICAgIC8qIFRPRE86IENoZWNrIG1lbW9yeSBlcnJvci4gKi8KLQljdXItPm5vZGVUYWJbY3VyLT5ub2RlTnIrK10gPQotCSAgICB4bWxYUGF0aE5vZGVTZXREdXBOcygoeG1sTm9kZVB0cikgbnMtPm5leHQsIG5zKTsKKyAgICAgICAgaWYgKG5zTm9kZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuKC0xKTsKKwljdXItPm5vZGVUYWJbY3VyLT5ub2RlTnIrK10gPSBuc05vZGU7CiAgICAgfSBlbHNlCiAJY3VyLT5ub2RlVGFiW2N1ci0+bm9kZU5yKytdID0gdmFsOwogICAgIHJldHVybigwKTsKQEAgLTM3OTUsNyArMzIwNCw3IEBACiAJICAgIHJldHVybigtMSk7CiAJfQogCW1lbXNldChjdXItPm5vZGVUYWIsIDAgLAotCSAgICAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogKHNpemVfdCkgc2l6ZW9mKHhtbE5vZGVQdHIpKTsKKwkgICAgICAgWE1MX05PREVTRVRfREVGQVVMVCAqIHNpemVvZih4bWxOb2RlUHRyKSk7CiAgICAgICAgIGN1ci0+bm9kZU1heCA9IFhNTF9OT0RFU0VUX0RFRkFVTFQ7CiAgICAgfSBlbHNlIGlmIChjdXItPm5vZGVOciA9PSBjdXItPm5vZGVNYXgpIHsKICAgICAgICAgeG1sTm9kZVB0ciAqdGVtcDsKQEAgLTM4MTUsMTAgKzMyMjQsMTEgQEAKICAgICB9CiAgICAgaWYgKHZhbC0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpIHsKIAl4bWxOc1B0ciBucyA9ICh4bWxOc1B0cikgdmFsOworICAgICAgICB4bWxOb2RlUHRyIG5zTm9kZSA9IHhtbFhQYXRoTm9kZVNldER1cE5zKCh4bWxOb2RlUHRyKSBucy0+bmV4dCwgbnMpOwogCi0gICAgICAgIC8qIFRPRE86IENoZWNrIG1lbW9yeSBlcnJvci4gKi8KLQljdXItPm5vZGVUYWJbY3VyLT5ub2RlTnIrK10gPQotCSAgICB4bWxYUGF0aE5vZGVTZXREdXBOcygoeG1sTm9kZVB0cikgbnMtPm5leHQsIG5zKTsKKyAgICAgICAgaWYgKG5zTm9kZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuKC0xKTsKKwljdXItPm5vZGVUYWJbY3VyLT5ub2RlTnIrK10gPSBuc05vZGU7CiAgICAgfSBlbHNlCiAJY3VyLT5ub2RlVGFiW2N1ci0+bm9kZU5yKytdID0gdmFsOwogICAgIHJldHVybigwKTsKQEAgLTM4MzMsNiArMzI0Myw4IEBACiAgKiBpZiBAdmFsMSBpcyBOVUxMLCBhIG5ldyBzZXQgaXMgY3JlYXRlZCBhbmQgY29waWVkIGZyb20gQHZhbDIKICAqCiAgKiBSZXR1cm5zIEB2YWwxIG9uY2UgZXh0ZW5kZWQgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICoKKyAqIEZyZWVzIEB2YWwxIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KIHhtbE5vZGVTZXRQdHIKIHhtbFhQYXRoTm9kZVNldE1lcmdlKHhtbE5vZGVTZXRQdHIgdmFsMSwgeG1sTm9kZVNldFB0ciB2YWwyKSB7CkBAIC0zODQyLDM1ICszMjU0LDggQEAKICAgICBpZiAodmFsMiA9PSBOVUxMKSByZXR1cm4odmFsMSk7CiAgICAgaWYgKHZhbDEgPT0gTlVMTCkgewogCXZhbDEgPSB4bWxYUGF0aE5vZGVTZXRDcmVhdGUoTlVMTCk7Ci0gICAgaWYgKHZhbDEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIChOVUxMKTsKLSNpZiAwCi0JLyoKLQkqIFRPRE86IFRoZSBvcHRpbWl6YXRpb24gd29uJ3Qgd29yayBpbiBldmVyeSBjYXNlLCBzaW5jZQotCSogIHRob3NlIG5hc3R5IG5hbWVzcGFjZSBub2RlcyBuZWVkIHRvIGJlIGFkZGVkIHdpdGgKLQkqICB4bWxYUGF0aE5vZGVTZXREdXBOcygpIHRvIHRoZSBzZXQ7IHRodXMgYSBwdXJlCi0JKiAgbWVtY3B5IGlzIG5vdCBwb3NzaWJsZS4KLQkqICBJZiB0aGVyZSB3YXMgYSBmbGFnIG9uIHRoZSBub2Rlc2V0dmFsLCBpbmRpY2F0aW5nIHRoYXQKLQkqICBzb21lIHRlbXBvcmFyeSBub2RlcyBhcmUgaW4sIHRoYXQgd291bGQgYmUgaGVscGZ1bC4KLQkqLwotCS8qCi0JKiBPcHRpbWl6YXRpb246IENyZWF0ZSBhbiBlcXVhbGx5IHNpemVkIG5vZGUtc2V0Ci0JKiBhbmQgbWVtY3B5IHRoZSBjb250ZW50LgotCSovCi0JdmFsMSA9IHhtbFhQYXRoTm9kZVNldENyZWF0ZVNpemUodmFsMi0+bm9kZU5yKTsKLQlpZiAodmFsMSA9PSBOVUxMKQotCSAgICByZXR1cm4oTlVMTCk7Ci0JaWYgKHZhbDItPm5vZGVOciAhPSAwKSB7Ci0JICAgIGlmICh2YWwyLT5ub2RlTnIgPT0gMSkKLQkJKih2YWwxLT5ub2RlVGFiKSA9ICoodmFsMi0+bm9kZVRhYik7Ci0JICAgIGVsc2UgewotCQltZW1jcHkodmFsMS0+bm9kZVRhYiwgdmFsMi0+bm9kZVRhYiwKLQkJICAgIHZhbDItPm5vZGVOciAqIHNpemVvZih4bWxOb2RlUHRyKSk7Ci0JICAgIH0KLQkgICAgdmFsMS0+bm9kZU5yID0gdmFsMi0+bm9kZU5yOwotCX0KLQlyZXR1cm4odmFsMSk7Ci0jZW5kaWYKKyAgICAgICAgaWYgKHZhbDEgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgfQogCiAgICAgLyogQEAgd2l0aF9ucyB0byBjaGVjayB3aGV0aGVyIG5hbWVzcGFjZSBub2RlcyBzaG91bGQgYmUgbG9va2VkIGF0IEBAICovCkBAIC0zOTA5LDM4ICszMjk0LDQzIEBACiAJCQkJCQkgICAgc2l6ZW9mKHhtbE5vZGVQdHIpKTsKIAkgICAgaWYgKHZhbDEtPm5vZGVUYWIgPT0gTlVMTCkgewogCSAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgIm1lcmdpbmcgbm9kZXNldFxuIik7Ci0JCXJldHVybihOVUxMKTsKKwkJZ290byBlcnJvcjsKIAkgICAgfQogCSAgICBtZW1zZXQodmFsMS0+bm9kZVRhYiwgMCAsCi0JCSAgIFhNTF9OT0RFU0VUX0RFRkFVTFQgKiAoc2l6ZV90KSBzaXplb2YoeG1sTm9kZVB0cikpOworCQkgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKIAkgICAgdmFsMS0+bm9kZU1heCA9IFhNTF9OT0RFU0VUX0RFRkFVTFQ7CiAJfSBlbHNlIGlmICh2YWwxLT5ub2RlTnIgPT0gdmFsMS0+bm9kZU1heCkgewogCSAgICB4bWxOb2RlUHRyICp0ZW1wOwogCiAgICAgICAgICAgICBpZiAodmFsMS0+bm9kZU1heCA+PSBYUEFUSF9NQVhfTk9ERVNFVF9MRU5HVEgpIHsKICAgICAgICAgICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAibWVyZ2luZyBub2Rlc2V0IGhpdCBsaW1pdFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAJICAgIHRlbXAgPSAoeG1sTm9kZVB0ciAqKSB4bWxSZWFsbG9jKHZhbDEtPm5vZGVUYWIsIHZhbDEtPm5vZGVNYXggKiAyICoKIAkJCQkJICAgICBzaXplb2YoeG1sTm9kZVB0cikpOwogCSAgICBpZiAodGVtcCA9PSBOVUxMKSB7CiAJICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAibWVyZ2luZyBub2Rlc2V0XG4iKTsKLQkJcmV0dXJuKE5VTEwpOworCQlnb3RvIGVycm9yOwogCSAgICB9CiAJICAgIHZhbDEtPm5vZGVUYWIgPSB0ZW1wOwogCSAgICB2YWwxLT5ub2RlTWF4ICo9IDI7CiAJfQogCWlmIChuMi0+dHlwZSA9PSBYTUxfTkFNRVNQQUNFX0RFQ0wpIHsKIAkgICAgeG1sTnNQdHIgbnMgPSAoeG1sTnNQdHIpIG4yOworICAgICAgICAgICAgeG1sTm9kZVB0ciBuc05vZGUgPSB4bWxYUGF0aE5vZGVTZXREdXBOcygoeG1sTm9kZVB0cikgbnMtPm5leHQsIG5zKTsKIAotICAgICAgICAgICAgLyogVE9ETzogQ2hlY2sgbWVtb3J5IGVycm9yLiAqLwotCSAgICB2YWwxLT5ub2RlVGFiW3ZhbDEtPm5vZGVOcisrXSA9Ci0JCXhtbFhQYXRoTm9kZVNldER1cE5zKCh4bWxOb2RlUHRyKSBucy0+bmV4dCwgbnMpOworICAgICAgICAgICAgaWYgKG5zTm9kZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisJICAgIHZhbDEtPm5vZGVUYWJbdmFsMS0+bm9kZU5yKytdID0gbnNOb2RlOwogCX0gZWxzZQogCSAgICB2YWwxLT5ub2RlVGFiW3ZhbDEtPm5vZGVOcisrXSA9IG4yOwogICAgIH0KIAogICAgIHJldHVybih2YWwxKTsKKworZXJyb3I6CisgICAgeG1sWFBhdGhGcmVlTm9kZVNldCh2YWwxKTsKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIApAQCAtMzk1Myw2ICszMzQzLDggQEAKICAqIENoZWNrcyBmb3IgZHVwbGljYXRlIG5vZGVzLiBDbGVhcnMgc2V0Mi4KICAqCiAgKiBSZXR1cm5zIEBzZXQxIG9uY2UgZXh0ZW5kZWQgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICoKKyAqIEZyZWVzIEBzZXQxIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KIHN0YXRpYyB4bWxOb2RlU2V0UHRyCiB4bWxYUGF0aE5vZGVTZXRNZXJnZUFuZENsZWFyKHhtbE5vZGVTZXRQdHIgc2V0MSwgeG1sTm9kZVNldFB0ciBzZXQyKQpAQCAtMzk4MSw3ICszMzczLDYgQEAKIAkJCS8qCiAJCQkqIEZyZWUgdGhlIG5hbWVzcGFjZSBub2RlLgogCQkJKi8KLQkJCXNldDItPm5vZGVUYWJbaV0gPSBOVUxMOwogCQkJeG1sWFBhdGhOb2RlU2V0RnJlZU5zKCh4bWxOc1B0cikgbjIpOwogCQkJZ290byBza2lwX25vZGU7CiAJCSAgICB9CkBAIC0zOTk1LDM0ICszMzg2LDM5IEBACiAJCSAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKIAkJaWYgKHNldDEtPm5vZGVUYWIgPT0gTlVMTCkgewogCQkgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgIm1lcmdpbmcgbm9kZXNldFxuIik7Ci0JCSAgICByZXR1cm4oTlVMTCk7CisJCSAgICBnb3RvIGVycm9yOwogCQl9CiAJCW1lbXNldChzZXQxLT5ub2RlVGFiLCAwLAotCQkgICAgWE1MX05PREVTRVRfREVGQVVMVCAqIChzaXplX3QpIHNpemVvZih4bWxOb2RlUHRyKSk7CisJCSAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKIAkJc2V0MS0+bm9kZU1heCA9IFhNTF9OT0RFU0VUX0RFRkFVTFQ7CiAJICAgIH0gZWxzZSBpZiAoc2V0MS0+bm9kZU5yID49IHNldDEtPm5vZGVNYXgpIHsKIAkJeG1sTm9kZVB0ciAqdGVtcDsKIAogICAgICAgICAgICAgICAgIGlmIChzZXQxLT5ub2RlTWF4ID49IFhQQVRIX01BWF9OT0RFU0VUX0xFTkdUSCkgewogICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAibWVyZ2luZyBub2Rlc2V0IGhpdCBsaW1pdFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAJCXRlbXAgPSAoeG1sTm9kZVB0ciAqKSB4bWxSZWFsbG9jKAogCQkgICAgc2V0MS0+bm9kZVRhYiwgc2V0MS0+bm9kZU1heCAqIDIgKiBzaXplb2YoeG1sTm9kZVB0cikpOwogCQlpZiAodGVtcCA9PSBOVUxMKSB7CiAJCSAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAibWVyZ2luZyBub2Rlc2V0XG4iKTsKLQkJICAgIHJldHVybihOVUxMKTsKKwkJICAgIGdvdG8gZXJyb3I7CiAJCX0KIAkJc2V0MS0+bm9kZVRhYiA9IHRlbXA7CiAJCXNldDEtPm5vZGVNYXggKj0gMjsKIAkgICAgfQogCSAgICBzZXQxLT5ub2RlVGFiW3NldDEtPm5vZGVOcisrXSA9IG4yOwogc2tpcF9ub2RlOgotCSAgICB7fQorICAgICAgICAgICAgc2V0Mi0+bm9kZVRhYltpXSA9IE5VTEw7CiAJfQogICAgIH0KICAgICBzZXQyLT5ub2RlTnIgPSAwOwogICAgIHJldHVybihzZXQxKTsKKworZXJyb3I6CisgICAgeG1sWFBhdGhGcmVlTm9kZVNldChzZXQxKTsKKyAgICB4bWxYUGF0aE5vZGVTZXRDbGVhcihzZXQyLCAxKTsKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIC8qKgpAQCAtNDAzNCw2ICszNDMwLDggQEAKICAqIERvZXNuJ3QgY2hlY2sgZm9yIGR1cGxpY2F0ZSBub2Rlcy4gQ2xlYXJzIHNldDIuCiAgKgogICogUmV0dXJucyBAc2V0MSBvbmNlIGV4dGVuZGVkIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqCisgKiBGcmVlcyBAc2V0MSBpbiBjYXNlIG9mIGVycm9yLgogICovCiBzdGF0aWMgeG1sTm9kZVNldFB0cgogeG1sWFBhdGhOb2RlU2V0TWVyZ2VBbmRDbGVhck5vRHVwbHMoeG1sTm9kZVNldFB0ciBzZXQxLCB4bWxOb2RlU2V0UHRyIHNldDIpCkBAIC00MDQ5LDMyICszNDQ3LDM4IEBACiAJCSAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKIAkJaWYgKHNldDEtPm5vZGVUYWIgPT0gTlVMTCkgewogCQkgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgIm1lcmdpbmcgbm9kZXNldFxuIik7Ci0JCSAgICByZXR1cm4oTlVMTCk7CisJCSAgICBnb3RvIGVycm9yOwogCQl9CiAJCW1lbXNldChzZXQxLT5ub2RlVGFiLCAwLAotCQkgICAgWE1MX05PREVTRVRfREVGQVVMVCAqIChzaXplX3QpIHNpemVvZih4bWxOb2RlUHRyKSk7CisJCSAgICBYTUxfTk9ERVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbE5vZGVQdHIpKTsKIAkJc2V0MS0+bm9kZU1heCA9IFhNTF9OT0RFU0VUX0RFRkFVTFQ7CiAJICAgIH0gZWxzZSBpZiAoc2V0MS0+bm9kZU5yID49IHNldDEtPm5vZGVNYXgpIHsKIAkJeG1sTm9kZVB0ciAqdGVtcDsKIAogICAgICAgICAgICAgICAgIGlmIChzZXQxLT5ub2RlTWF4ID49IFhQQVRIX01BWF9OT0RFU0VUX0xFTkdUSCkgewogICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAibWVyZ2luZyBub2Rlc2V0IGhpdCBsaW1pdFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAJCXRlbXAgPSAoeG1sTm9kZVB0ciAqKSB4bWxSZWFsbG9jKAogCQkgICAgc2V0MS0+bm9kZVRhYiwgc2V0MS0+bm9kZU1heCAqIDIgKiBzaXplb2YoeG1sTm9kZVB0cikpOwogCQlpZiAodGVtcCA9PSBOVUxMKSB7CiAJCSAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAibWVyZ2luZyBub2Rlc2V0XG4iKTsKLQkJICAgIHJldHVybihOVUxMKTsKKwkJICAgIGdvdG8gZXJyb3I7CiAJCX0KIAkJc2V0MS0+bm9kZVRhYiA9IHRlbXA7CiAJCXNldDEtPm5vZGVNYXggKj0gMjsKIAkgICAgfQogCSAgICBzZXQxLT5ub2RlVGFiW3NldDEtPm5vZGVOcisrXSA9IG4yOworICAgICAgICAgICAgc2V0Mi0+bm9kZVRhYltpXSA9IE5VTEw7CiAJfQogICAgIH0KICAgICBzZXQyLT5ub2RlTnIgPSAwOwogICAgIHJldHVybihzZXQxKTsKKworZXJyb3I6CisgICAgeG1sWFBhdGhGcmVlTm9kZVNldChzZXQxKTsKKyAgICB4bWxYUGF0aE5vZGVTZXRDbGVhcihzZXQyLCAxKTsKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIC8qKgpAQCAtNDA5OCwxMSArMzUwMiw2IEBACiAgICAgICAgIGlmIChjdXItPm5vZGVUYWJbaV0gPT0gdmFsKSBicmVhazsKIAogICAgIGlmIChpID49IGN1ci0+bm9kZU5yKSB7CS8qIG5vdCBmb3VuZCAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSAgICAgICAgInhtbFhQYXRoTm9kZVNldERlbDogTm9kZSAlcyB3YXNuJ3QgZm91bmQgaW4gTm9kZUxpc3RcbiIsCi0JCXZhbC0+bmFtZSk7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoKGN1ci0+bm9kZVRhYltpXSAhPSBOVUxMKSAmJgpAQCAtNDI1Miw0NyArMzY1MSw2IEBACiAgICAgeG1sRnJlZShvYmopOwogfQogCi0jaWYgZGVmaW5lZChERUJVRykgfHwgZGVmaW5lZChERUJVR19TVEVQKQotLyoqCi0gKiB4bWxHZW5lcmljRXJyb3JDb250ZXh0Tm9kZVNldDoKLSAqIEBvdXRwdXQ6ICBhIEZJTEUgKiBmb3IgdGhlIG91dHB1dAotICogQG9iajogIHRoZSB4bWxOb2RlU2V0UHRyIHRvIGRpc3BsYXkKLSAqCi0gKiBRdWljayBkaXNwbGF5IG9mIGEgTm9kZVNldAotICovCi12b2lkCi14bWxHZW5lcmljRXJyb3JDb250ZXh0Tm9kZVNldChGSUxFICpvdXRwdXQsIHhtbE5vZGVTZXRQdHIgb2JqKSB7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAob3V0cHV0ID09IE5VTEwpIG91dHB1dCA9IHhtbEdlbmVyaWNFcnJvckNvbnRleHQ7Ci0gICAgaWYgKG9iaiA9PSBOVUxMKSAgewotICAgICAgICBmcHJpbnRmKG91dHB1dCwgIk5vZGVTZXQgPT0gTlVMTCAhXG4iKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmIChvYmotPm5vZGVOciA9PSAwKSB7Ci0gICAgICAgIGZwcmludGYob3V0cHV0LCAiTm9kZVNldCBpcyBlbXB0eVxuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2JqLT5ub2RlVGFiID09IE5VTEwpIHsKLQlmcHJpbnRmKG91dHB1dCwgIiBub2RlVGFiID09IE5VTEwgIVxuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLT5ub2RlTnI7IGkrKykgewotICAgICAgICBpZiAob2JqLT5ub2RlVGFiW2ldID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihvdXRwdXQsICIgTlVMTCAhXG4iKTsKLQkgICAgcmV0dXJuOwotICAgICAgICB9Ci0JaWYgKChvYmotPm5vZGVUYWJbaV0tPnR5cGUgPT0gWE1MX0RPQ1VNRU5UX05PREUpIHx8Ci0JICAgIChvYmotPm5vZGVUYWJbaV0tPnR5cGUgPT0gWE1MX0hUTUxfRE9DVU1FTlRfTk9ERSkpCi0JICAgIGZwcmludGYob3V0cHV0LCAiIC8iKTsKLQllbHNlIGlmIChvYmotPm5vZGVUYWJbaV0tPm5hbWUgPT0gTlVMTCkKLQkgICAgZnByaW50ZihvdXRwdXQsICIgbm9uYW1lISIpOwotCWVsc2UgZnByaW50ZihvdXRwdXQsICIgJXMiLCBvYmotPm5vZGVUYWJbaV0tPm5hbWUpOwotICAgIH0KLSAgICBmcHJpbnRmKG91dHB1dCwgIlxuIik7Ci19Ci0jZW5kaWYKLQogLyoqCiAgKiB4bWxYUGF0aE5ld05vZGVTZXQ6CiAgKiBAdmFsOiAgdGhlIE5vZGVQdHIgdmFsdWUKQEAgLTQzMTEsMTUgKzM2NjksMTIgQEAKICAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgImNyZWF0aW5nIG5vZGVzZXRcbiIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOworICAgIG1lbXNldChyZXQsIDAgLCBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKICAgICByZXQtPnR5cGUgPSBYUEFUSF9OT0RFU0VUOwogICAgIHJldC0+Ym9vbHZhbCA9IDA7CiAgICAgLyogVE9ETzogQ2hlY2sgbWVtb3J5IGVycm9yLiAqLwogICAgIHJldC0+bm9kZXNldHZhbCA9IHhtbFhQYXRoTm9kZVNldENyZWF0ZSh2YWwpOwogICAgIC8qIEBAIHdpdGhfbnMgdG8gY2hlY2sgd2hldGhlciBuYW1lc3BhY2Ugbm9kZXMgc2hvdWxkIGJlIGxvb2tlZCBhdCBAQCAqLwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChOVUxMLCBYUEFUSF9OT0RFU0VUKTsKLSNlbmRpZgogICAgIHJldHVybihyZXQpOwogfQogCkBAIC00MzQxLDE0ICszNjk2LDExIEBACiAgICAgICAgIHhtbFhQYXRoRXJyTWVtb3J5KE5VTEwsICJjcmVhdGluZyByZXN1bHQgdmFsdWUgdHJlZVxuIik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBtZW1zZXQocmV0LCAwICwgKHNpemVfdCkgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CisgICAgbWVtc2V0KHJldCwgMCAsIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOwogICAgIHJldC0+dHlwZSA9IFhQQVRIX1hTTFRfVFJFRTsKICAgICByZXQtPmJvb2x2YWwgPSAxOwogICAgIHJldC0+dXNlciA9ICh2b2lkICopIHZhbDsKICAgICByZXQtPm5vZGVzZXR2YWwgPSB4bWxYUGF0aE5vZGVTZXRDcmVhdGUodmFsKTsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoTlVMTCwgWFBBVEhfWFNMVF9UUkVFKTsKLSNlbmRpZgogICAgIHJldHVybihyZXQpOwogfQogCkBAIC00MzkyLDYgKzM3NDQsOCBAQAogICogV3JhcCB0aGUgTm9kZXNldCBAdmFsIGluIGEgbmV3IHhtbFhQYXRoT2JqZWN0UHRyCiAgKgogICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuCisgKgorICogSW4gY2FzZSBvZiBlcnJvciB0aGUgbm9kZSBzZXQgaXMgZGVzdHJveWVkIGFuZCBOVUxMIGlzIHJldHVybmVkLgogICovCiB4bWxYUGF0aE9iamVjdFB0cgogeG1sWFBhdGhXcmFwTm9kZVNldCh4bWxOb2RlU2V0UHRyIHZhbCkgewpAQCAtNDQwMCwxNCArMzc1NCwxMiBAQAogICAgIHJldCA9ICh4bWxYUGF0aE9iamVjdFB0cikgeG1sTWFsbG9jKHNpemVvZih4bWxYUGF0aE9iamVjdCkpOwogICAgIGlmIChyZXQgPT0gTlVMTCkgewogICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAiY3JlYXRpbmcgbm9kZSBzZXQgb2JqZWN0XG4iKTsKKyAgICAgICAgeG1sWFBhdGhGcmVlTm9kZVNldCh2YWwpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOworICAgIG1lbXNldChyZXQsIDAgLCBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKICAgICByZXQtPnR5cGUgPSBYUEFUSF9OT0RFU0VUOwogICAgIHJldC0+bm9kZXNldHZhbCA9IHZhbDsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoTlVMTCwgWFBBVEhfTk9ERVNFVCk7Ci0jZW5kaWYKICAgICByZXR1cm4ocmV0KTsKIH0KIApAQCAtNDQyMSw5ICszNzczLDYgQEAKIHZvaWQKIHhtbFhQYXRoRnJlZU5vZGVTZXRMaXN0KHhtbFhQYXRoT2JqZWN0UHRyIG9iaikgewogICAgIGlmIChvYmogPT0gTlVMTCkgcmV0dXJuOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlbGVhc2VkKE5VTEwsIG9iai0+dHlwZSk7Ci0jZW5kaWYKICAgICB4bWxGcmVlKG9iaik7CiB9CiAKQEAgLTQ1MzIsMTYgKzM4ODEsMjMgQEAKIAljdXIgPSB4bWxYUGF0aE5vZGVTZXRJdGVtKG5vZGVzLCBpKTsKIAlzdHJ2YWwgPSB4bWxYUGF0aENhc3ROb2RlVG9TdHJpbmcoY3VyKTsKIAlpZiAoeG1sSGFzaExvb2t1cChoYXNoLCBzdHJ2YWwpID09IE5VTEwpIHsKLQkgICAgeG1sSGFzaEFkZEVudHJ5KGhhc2gsIHN0cnZhbCwgc3RydmFsKTsKLSAgICAgICAgICAgIC8qIFRPRE86IFByb3BhZ2F0ZSBtZW1vcnkgZXJyb3IuICovCisJICAgIGlmICh4bWxIYXNoQWRkRW50cnkoaGFzaCwgc3RydmFsLCBzdHJ2YWwpIDwgMCkgeworICAgICAgICAgICAgICAgIHhtbEZyZWUoc3RydmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogCSAgICBpZiAoeG1sWFBhdGhOb2RlU2V0QWRkVW5pcXVlKHJldCwgY3VyKSA8IDApCi0JICAgICAgICBicmVhazsKKwkgICAgICAgIGdvdG8gZXJyb3I7CiAJfSBlbHNlIHsKIAkgICAgeG1sRnJlZShzdHJ2YWwpOwogCX0KICAgICB9CiAgICAgeG1sSGFzaEZyZWUoaGFzaCwgeG1sSGFzaERlZmF1bHREZWFsbG9jYXRvcik7CiAgICAgcmV0dXJuKHJldCk7CisKK2Vycm9yOgorICAgIHhtbEhhc2hGcmVlKGhhc2gsIHhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IpOworICAgIHhtbFhQYXRoRnJlZU5vZGVTZXQocmV0KTsKKyAgICByZXR1cm4oTlVMTCk7CiB9CiAKIC8qKgpAQCAtNDg1NCw3ICs0MjEwLDcgQEAKIAlyZXR1cm4oLTEpOwogICAgIGlmIChmID09IE5VTEwpCiAgICAgICAgIHJldHVybih4bWxIYXNoUmVtb3ZlRW50cnkyKGN0eHQtPmZ1bmNIYXNoLCBuYW1lLCBuc191cmksIE5VTEwpKTsKLVhNTF9JR05PUkVfUEVEQU5USUNfV0FSTklOR1MKK1hNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTCiAgICAgcmV0dXJuKHhtbEhhc2hBZGRFbnRyeTIoY3R4dC0+ZnVuY0hhc2gsIG5hbWUsIG5zX3VyaSwgKHZvaWQgKikgZikpOwogWE1MX1BPUF9XQVJOSU5HUwogfQpAQCAtNDkzNyw3ICs0MjkzLDcgQEAKICAgICBpZiAoY3R4dC0+ZnVuY0hhc2ggPT0gTlVMTCkKIAlyZXR1cm4oTlVMTCk7CiAKLVhNTF9JR05PUkVfUEVEQU5USUNfV0FSTklOR1MKK1hNTF9JR05PUkVfRlBUUl9DQVNUX1dBUk5JTkdTCiAgICAgcmV0ID0gKHhtbFhQYXRoRnVuY3Rpb24pIHhtbEhhc2hMb29rdXAyKGN0eHQtPmZ1bmNIYXNoLCBuYW1lLCBuc191cmkpOwogWE1MX1BPUF9XQVJOSU5HUwogICAgIHJldHVybihyZXQpOwpAQCAtNTExOCw2ICs0NDc0LDggQEAKIGludAogeG1sWFBhdGhSZWdpc3Rlck5zKHhtbFhQYXRoQ29udGV4dFB0ciBjdHh0LCBjb25zdCB4bWxDaGFyICpwcmVmaXgsCiAJCQkgICBjb25zdCB4bWxDaGFyICpuc191cmkpIHsKKyAgICB4bWxDaGFyICpjb3B5OworCiAgICAgaWYgKGN0eHQgPT0gTlVMTCkKIAlyZXR1cm4oLTEpOwogICAgIGlmIChwcmVmaXggPT0gTlVMTCkKQEAgLTUxMzIsOCArNDQ5MCwxNyBAQAogICAgIGlmIChuc191cmkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKHhtbEhhc2hSZW1vdmVFbnRyeShjdHh0LT5uc0hhc2gsIHByZWZpeCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IpKTsKLSAgICByZXR1cm4oeG1sSGFzaFVwZGF0ZUVudHJ5KGN0eHQtPm5zSGFzaCwgcHJlZml4LCAodm9pZCAqKSB4bWxTdHJkdXAobnNfdXJpKSwKLQkJCSAgICAgIHhtbEhhc2hEZWZhdWx0RGVhbGxvY2F0b3IpKTsKKworICAgIGNvcHkgPSB4bWxTdHJkdXAobnNfdXJpKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oLTEpOworICAgIGlmICh4bWxIYXNoVXBkYXRlRW50cnkoY3R4dC0+bnNIYXNoLCBwcmVmaXgsIGNvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxIYXNoRGVmYXVsdERlYWxsb2NhdG9yKSA8IDApIHsKKyAgICAgICAgeG1sRnJlZShjb3B5KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4oMCk7CiB9CiAKIC8qKgpAQCAtNTIxMSwxMiArNDU3OCw5IEBACiAgICAgICAgIHhtbFhQYXRoRXJyTWVtb3J5KE5VTEwsICJjcmVhdGluZyBmbG9hdCBvYmplY3RcbiIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOworICAgIG1lbXNldChyZXQsIDAgLCBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKICAgICByZXQtPnR5cGUgPSBYUEFUSF9OVU1CRVI7CiAgICAgcmV0LT5mbG9hdHZhbCA9IHZhbDsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoTlVMTCwgWFBBVEhfTlVNQkVSKTsKLSNlbmRpZgogICAgIHJldHVybihyZXQpOwogfQogCkBAIC01MjM3LDEyICs0NjAxLDkgQEAKICAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgImNyZWF0aW5nIGJvb2xlYW4gb2JqZWN0XG4iKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAgLCAoc2l6ZV90KSBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CiAgICAgcmV0LT50eXBlID0gWFBBVEhfQk9PTEVBTjsKICAgICByZXQtPmJvb2x2YWwgPSAodmFsICE9IDApOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChOVUxMLCBYUEFUSF9CT09MRUFOKTsKLSNlbmRpZgogICAgIHJldHVybihyZXQpOwogfQogCkBAIC01MjYzLDE1ICs0NjI0LDE1IEBACiAgICAgICAgIHhtbFhQYXRoRXJyTWVtb3J5KE5VTEwsICJjcmVhdGluZyBzdHJpbmcgb2JqZWN0XG4iKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAgLCAoc2l6ZV90KSBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CiAgICAgcmV0LT50eXBlID0gWFBBVEhfU1RSSU5HOwotICAgIGlmICh2YWwgIT0gTlVMTCkKLQlyZXQtPnN0cmluZ3ZhbCA9IHhtbFN0cmR1cCh2YWwpOwotICAgIGVsc2UKLQlyZXQtPnN0cmluZ3ZhbCA9IHhtbFN0cmR1cCgoY29uc3QgeG1sQ2hhciAqKSIiKTsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoTlVMTCwgWFBBVEhfU1RSSU5HKTsKLSNlbmRpZgorICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgdmFsID0gQkFEX0NBU1QgIiI7CisgICAgcmV0LT5zdHJpbmd2YWwgPSB4bWxTdHJkdXAodmFsKTsKKyAgICBpZiAocmV0LT5zdHJpbmd2YWwgPT0gTlVMTCkgeworICAgICAgICB4bWxGcmVlKHJldCk7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CiAgICAgcmV0dXJuKHJldCk7CiB9CiAKQEAgLTUyODIsNiArNDY0Myw4IEBACiAgKiBXcmFwcyB0aGUgQHZhbCBzdHJpbmcgaW50byBhbiBYUGF0aCBvYmplY3QuCiAgKgogICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuCisgKgorICogRnJlZXMgQHZhbCBpbiBjYXNlIG9mIGVycm9yLgogICovCiB4bWxYUGF0aE9iamVjdFB0cgogeG1sWFBhdGhXcmFwU3RyaW5nICh4bWxDaGFyICp2YWwpIHsKQEAgLTUyOTAsMTQgKzQ2NTMsMTIgQEAKICAgICByZXQgPSAoeG1sWFBhdGhPYmplY3RQdHIpIHhtbE1hbGxvYyhzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKICAgICBpZiAocmV0ID09IE5VTEwpIHsKICAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgImNyZWF0aW5nIHN0cmluZyBvYmplY3RcbiIpOworICAgICAgICB4bWxGcmVlKHZhbCk7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBtZW1zZXQocmV0LCAwICwgKHNpemVfdCkgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CisgICAgbWVtc2V0KHJldCwgMCAsIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOwogICAgIHJldC0+dHlwZSA9IFhQQVRIX1NUUklORzsKICAgICByZXQtPnN0cmluZ3ZhbCA9IHZhbDsKLSNpZmRlZiBYUF9ERUJVR19PQkpfVVNBR0UKLSAgICB4bWxYUGF0aERlYnVnT2JqVXNhZ2VSZXF1ZXN0ZWQoTlVMTCwgWFBBVEhfU1RSSU5HKTsKLSNlbmRpZgogICAgIHJldHVybihyZXQpOwogfQogCkBAIC01MzExLDIwICs0NjcyLDcgQEAKICAqLwogeG1sWFBhdGhPYmplY3RQdHIKIHhtbFhQYXRoTmV3Q1N0cmluZyhjb25zdCBjaGFyICp2YWwpIHsKLSAgICB4bWxYUGF0aE9iamVjdFB0ciByZXQ7Ci0KLSAgICByZXQgPSAoeG1sWFBhdGhPYmplY3RQdHIpIHhtbE1hbGxvYyhzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKLSAgICBpZiAocmV0ID09IE5VTEwpIHsKLSAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgImNyZWF0aW5nIHN0cmluZyBvYmplY3RcbiIpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOwotICAgIHJldC0+dHlwZSA9IFhQQVRIX1NUUklORzsKLSAgICByZXQtPnN0cmluZ3ZhbCA9IHhtbFN0cmR1cChCQURfQ0FTVCB2YWwpOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChOVUxMLCBYUEFUSF9TVFJJTkcpOwotI2VuZGlmCi0gICAgcmV0dXJuKHJldCk7CisgICAgcmV0dXJuKHhtbFhQYXRoTmV3U3RyaW5nKEJBRF9DQVNUIHZhbCkpOwogfQogCiAvKioKQEAgLTUzNTcsMTIgKzQ3MDUsOSBAQAogICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShOVUxMLCAiY3JlYXRpbmcgdXNlciBvYmplY3RcbiIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOworICAgIG1lbXNldChyZXQsIDAgLCBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKICAgICByZXQtPnR5cGUgPSBYUEFUSF9VU0VSUzsKICAgICByZXQtPnVzZXIgPSB2YWw7Ci0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0gICAgeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVxdWVzdGVkKE5VTEwsIFhQQVRIX1VTRVJTKTsKLSNlbmRpZgogICAgIHJldHVybihyZXQpOwogfQogCkBAIC01Mzg2LDEwICs0NzMxLDcgQEAKICAgICAgICAgeG1sWFBhdGhFcnJNZW1vcnkoTlVMTCwgImNvcHlpbmcgb2JqZWN0XG4iKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbWNweShyZXQsIHZhbCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOwotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlcXVlc3RlZChOVUxMLCB2YWwtPnR5cGUpOwotI2VuZGlmCisgICAgbWVtY3B5KHJldCwgdmFsICwgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CiAgICAgc3dpdGNoICh2YWwtPnR5cGUpIHsKIAljYXNlIFhQQVRIX0JPT0xFQU46CiAJY2FzZSBYUEFUSF9OVU1CRVI6CkBAIC01NDAwLDYgKzQ3NDIsMTAgQEAKIAkgICAgYnJlYWs7CiAJY2FzZSBYUEFUSF9TVFJJTkc6CiAJICAgIHJldC0+c3RyaW5ndmFsID0geG1sU3RyZHVwKHZhbC0+c3RyaW5ndmFsKTsKKyAgICAgICAgICAgIGlmIChyZXQtPnN0cmluZ3ZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgeG1sRnJlZShyZXQpOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KIAkgICAgYnJlYWs7CiAJY2FzZSBYUEFUSF9YU0xUX1RSRUU6CiAjaWYgMApAQCAtNTQ5Myw5ICs0ODM5LDYgQEAKIAlpZiAob2JqLT5zdHJpbmd2YWwgIT0gTlVMTCkKIAkgICAgeG1sRnJlZShvYmotPnN0cmluZ3ZhbCk7CiAgICAgfQotI2lmZGVmIFhQX0RFQlVHX09CSl9VU0FHRQotICAgIHhtbFhQYXRoRGVidWdPYmpVc2FnZVJlbGVhc2VkKE5VTEwsIG9iai0+dHlwZSk7Ci0jZW5kaWYKICAgICB4bWxGcmVlKG9iaik7CiB9CiAKQEAgLTU1OTQsMTEgKzQ5MzcsNiBAQAogCSAgICBnb3RvIGZyZWVfb2JqOwogCiBvYmpfY2FjaGVkOgotCi0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0JeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVsZWFzZWQoY3R4dCwgb2JqLT50eXBlKTsKLSNlbmRpZgotCiAJaWYgKG9iai0+bm9kZXNldHZhbCAhPSBOVUxMKSB7CiAJICAgIHhtbE5vZGVTZXRQdHIgdG1wc2V0ID0gb2JqLT5ub2Rlc2V0dmFsOwogCkBAIC01NjM5LDkgKzQ5NzcsNiBAQAogCSovCiAJaWYgKG9iai0+bm9kZXNldHZhbCAhPSBOVUxMKQogCSAgICB4bWxYUGF0aEZyZWVOb2RlU2V0KG9iai0+bm9kZXNldHZhbCk7Ci0jaWZkZWYgWFBfREVCVUdfT0JKX1VTQUdFCi0JeG1sWFBhdGhEZWJ1Z09ialVzYWdlUmVsZWFzZWQoTlVMTCwgb2JqLT50eXBlKTsKLSNlbmRpZgogCXhtbEZyZWUob2JqKTsKICAgICB9CiAgICAgcmV0dXJuOwpAQCAtNTc1OCw5ICs1MDkzLDYgQEAKIAlyZXR1cm4oeG1sU3RyZHVwKChjb25zdCB4bWxDaGFyICopICIiKSk7CiAgICAgc3dpdGNoICh2YWwtPnR5cGUpIHsKIAljYXNlIFhQQVRIX1VOREVGSU5FRDoKLSNpZmRlZiBERUJVR19FWFBSCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiU3RyaW5nOiB1bmRlZmluZWRcbiIpOwotI2VuZGlmCiAJICAgIHJldCA9IHhtbFN0cmR1cCgoY29uc3QgeG1sQ2hhciAqKSAiIik7CiAJICAgIGJyZWFrOwogICAgICAgICBjYXNlIFhQQVRIX05PREVTRVQ6CkBAIC01ODA3LDkgKzUxMzksNiBAQAogCiAgICAgc3dpdGNoICh2YWwtPnR5cGUpIHsKICAgICBjYXNlIFhQQVRIX1VOREVGSU5FRDoKLSNpZmRlZiBERUJVR19FWFBSCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJTVFJJTkc6IHVuZGVmaW5lZFxuIik7Ci0jZW5kaWYKIAlicmVhazsKICAgICBjYXNlIFhQQVRIX05PREVTRVQ6CiAgICAgY2FzZSBYUEFUSF9YU0xUX1RSRUU6CkBAIC01OTI3LDkgKzUyNTYsNiBAQAogCXJldHVybih4bWxYUGF0aE5BTik7CiAgICAgc3dpdGNoICh2YWwtPnR5cGUpIHsKICAgICBjYXNlIFhQQVRIX1VOREVGSU5FRDoKLSNpZmRlZiBERUJVR19FWFBSCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJOVU1CRVI6IHVuZGVmaW5lZFxuIik7Ci0jZW5kaWYKIAlyZXQgPSB4bWxYUGF0aE5BTjsKIAlicmVhazsKICAgICBjYXNlIFhQQVRIX05PREVTRVQ6CkBAIC02MDQxLDkgKzUzNjcsNiBAQAogCXJldHVybigwKTsKICAgICBzd2l0Y2ggKHZhbC0+dHlwZSkgewogICAgIGNhc2UgWFBBVEhfVU5ERUZJTkVEOgotI2lmZGVmIERFQlVHX0VYUFIKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkJPT0xFQU46IHVuZGVmaW5lZFxuIik7Ci0jZW5kaWYKIAlyZXQgPSAwOwogCWJyZWFrOwogICAgIGNhc2UgWFBBVEhfTk9ERVNFVDoKQEAgLTYxMTgsNyArNTQ0MSw3IEBACiAgICAgICAgIHhtbFhQYXRoRXJyTWVtb3J5KE5VTEwsICJjcmVhdGluZyBjb250ZXh0XG4iKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAgLCAoc2l6ZV90KSBzaXplb2YoeG1sWFBhdGhDb250ZXh0KSk7CisgICAgbWVtc2V0KHJldCwgMCAsIHNpemVvZih4bWxYUGF0aENvbnRleHQpKTsKICAgICByZXQtPmRvYyA9IGRvYzsKICAgICByZXQtPm5vZGUgPSBOVUxMOwogCkBAIC02MjI2LDcgKzU1NDksNyBAQAogICAgICAgICB4bWxYUGF0aEVyck1lbW9yeShjdHh0LCAiY3JlYXRpbmcgcGFyc2VyIGNvbnRleHRcbiIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aFBhcnNlckNvbnRleHQpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbFhQYXRoUGFyc2VyQ29udGV4dCkpOwogICAgIHJldC0+Y3VyID0gcmV0LT5iYXNlID0gc3RyOwogICAgIHJldC0+Y29udGV4dCA9IGN0eHQ7CiAKQEAgLTYyNjIsNyArNTU4NSw3IEBACiAgICAgICAgIHhtbFhQYXRoRXJyTWVtb3J5KGN0eHQsICJjcmVhdGluZyBldmFsdWF0aW9uIGNvbnRleHRcbiIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aFBhcnNlckNvbnRleHQpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbFhQYXRoUGFyc2VyQ29udGV4dCkpOwogCiAgICAgLyogQWxsb2NhdGUgdGhlIHZhbHVlIHN0YWNrICovCiAgICAgcmV0LT52YWx1ZVRhYiA9ICh4bWxYUGF0aE9iamVjdFB0ciAqKQpAQCAtNjI3NSw3ICs1NTk4LDYgQEAKICAgICByZXQtPnZhbHVlTnIgPSAwOwogICAgIHJldC0+dmFsdWVNYXggPSAxMDsKICAgICByZXQtPnZhbHVlID0gTlVMTDsKLSAgICByZXQtPnZhbHVlRnJhbWUgPSAwOwogCiAgICAgcmV0LT5jb250ZXh0ID0gY3R4dDsKICAgICByZXQtPmNvbXAgPSBjb21wOwpAQCAtNjM2MCwxNiArNTY4MiwxNCBAQAogCQlyZXR1cm4oMCk7CiAJICAgIGlmIChzdHJpbmdbMF0gPT0gMCkKIAkJcmV0dXJuKDApOwotCSAgICByZXR1cm4oKCh1bnNpZ25lZCBpbnQpIHN0cmluZ1swXSkgKwotCQkgICAoKCh1bnNpZ25lZCBpbnQpIHN0cmluZ1sxXSkgPDwgOCkpOworCSAgICByZXR1cm4oc3RyaW5nWzBdICsgKHN0cmluZ1sxXSA8PCA4KSk7CiAJY2FzZSBYTUxfTkFNRVNQQUNFX0RFQ0w6CiAJICAgIHN0cmluZyA9ICgoeG1sTnNQdHIpbm9kZSktPmhyZWY7CiAJICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKIAkJcmV0dXJuKDApOwogCSAgICBpZiAoc3RyaW5nWzBdID09IDApCiAJCXJldHVybigwKTsKLQkgICAgcmV0dXJuKCgodW5zaWduZWQgaW50KSBzdHJpbmdbMF0pICsKLQkJICAgKCgodW5zaWduZWQgaW50KSBzdHJpbmdbMV0pIDw8IDgpKTsKKwkgICAgcmV0dXJuKHN0cmluZ1swXSArIChzdHJpbmdbMV0gPDwgOCkpOwogCWNhc2UgWE1MX0FUVFJJQlVURV9OT0RFOgogCSAgICB0bXAgPSAoKHhtbEF0dHJQdHIpIG5vZGUpLT5jaGlsZHJlbjsKIAkgICAgYnJlYWs7CkBAIC02MzkxLDI0ICs1NzExLDI0IEBACiAJfQogCWlmICgoc3RyaW5nICE9IE5VTEwpICYmIChzdHJpbmdbMF0gIT0gMCkpIHsKIAkgICAgaWYgKGxlbiA9PSAxKSB7Ci0JCXJldHVybihyZXQgKyAoKCh1bnNpZ25lZCBpbnQpIHN0cmluZ1swXSkgPDwgOCkpOworCQlyZXR1cm4ocmV0ICsgKHN0cmluZ1swXSA8PCA4KSk7CiAJICAgIH0KIAkgICAgaWYgKHN0cmluZ1sxXSA9PSAwKSB7CiAJCWxlbiA9IDE7Ci0JCXJldCA9ICh1bnNpZ25lZCBpbnQpIHN0cmluZ1swXTsKKwkJcmV0ID0gc3RyaW5nWzBdOwogCSAgICB9IGVsc2UgewotCQlyZXR1cm4oKCh1bnNpZ25lZCBpbnQpIHN0cmluZ1swXSkgKwotCQkgICAgICAgKCgodW5zaWduZWQgaW50KSBzdHJpbmdbMV0pIDw8IDgpKTsKKwkJcmV0dXJuKHN0cmluZ1swXSArIChzdHJpbmdbMV0gPDwgOCkpOwogCSAgICB9CiAJfQogCS8qCiAJICogU2tpcCB0byBuZXh0IG5vZGUKIAkgKi8KLQlpZiAoKHRtcC0+Y2hpbGRyZW4gIT0gTlVMTCkgJiYgKHRtcC0+dHlwZSAhPSBYTUxfRFREX05PREUpKSB7Ci0JICAgIGlmICh0bXAtPmNoaWxkcmVuLT50eXBlICE9IFhNTF9FTlRJVFlfREVDTCkgewotCQl0bXAgPSB0bXAtPmNoaWxkcmVuOwotCQljb250aW51ZTsKLQkgICAgfQorICAgICAgICBpZiAoKHRtcC0+Y2hpbGRyZW4gIT0gTlVMTCkgJiYKKyAgICAgICAgICAgICh0bXAtPnR5cGUgIT0gWE1MX0RURF9OT0RFKSAmJgorICAgICAgICAgICAgKHRtcC0+dHlwZSAhPSBYTUxfRU5USVRZX1JFRl9OT0RFKSAmJgorICAgICAgICAgICAgKHRtcC0+Y2hpbGRyZW4tPnR5cGUgIT0gWE1MX0VOVElUWV9ERUNMKSkgeworICAgICAgICAgICAgdG1wID0gdG1wLT5jaGlsZHJlbjsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCX0KIAlpZiAodG1wID09IG5vZGUpCiAJICAgIGJyZWFrOwpAQCAtNjQ0NywxMSArNTc2NywxMCBAQAogc3RhdGljIHVuc2lnbmVkIGludAogeG1sWFBhdGhTdHJpbmdIYXNoKGNvbnN0IHhtbENoYXIgKiBzdHJpbmcpIHsKICAgICBpZiAoc3RyaW5nID09IE5VTEwpCi0JcmV0dXJuKCh1bnNpZ25lZCBpbnQpIDApOworCXJldHVybigwKTsKICAgICBpZiAoc3RyaW5nWzBdID09IDApCiAJcmV0dXJuKDApOwotICAgIHJldHVybigoKHVuc2lnbmVkIGludCkgc3RyaW5nWzBdKSArCi0JICAgKCgodW5zaWduZWQgaW50KSBzdHJpbmdbMV0pIDw8IDgpKTsKKyAgICByZXR1cm4oc3RyaW5nWzBdICsgKHN0cmluZ1sxXSA8PCA4KSk7CiB9CiAKIC8qKgpAQCAtNjgxNCw2ICs2MTMzLDcgQEAKIAkJdmFsdWVQdXNoKGN0eHQsIHhtbFhQYXRoQ2FjaGVOZXdTdHJpbmcoY3R4dC0+Y29udGV4dCwgc3RyMikpOwogCQl4bWxGcmVlKHN0cjIpOwogCQl4bWxYUGF0aE51bWJlckZ1bmN0aW9uKGN0eHQsIDEpOworICAgICAgICAgICAgICAgIENIRUNLX0VSUk9SMDsKIAkJdmFsID0gdmFsdWVQb3AoY3R4dCk7CiAJCXYgPSB2YWwtPmZsb2F0dmFsOwogCQl4bWxYUGF0aFJlbGVhc2VPYmplY3QoY3R4dC0+Y29udGV4dCwgdmFsKTsKQEAgLTY5NjgsMjUgKzYyODgsMTIgQEAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZzEtPnR5cGUpIHsKICAgICAgICAgY2FzZSBYUEFUSF9VTkRFRklORUQ6Ci0jaWZkZWYgREVCVUdfRVhQUgotCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJICAgICJFcXVhbDogdW5kZWZpbmVkXG4iKTsKLSNlbmRpZgogCSAgICBicmVhazsKICAgICAgICAgY2FzZSBYUEFUSF9CT09MRUFOOgogCSAgICBzd2l0Y2ggKGFyZzItPnR5cGUpIHsKIAkgICAgICAgIGNhc2UgWFBBVEhfVU5ERUZJTkVEOgotI2lmZGVmIERFQlVHX0VYUFIKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJFcXVhbDogdW5kZWZpbmVkXG4iKTsKLSNlbmRpZgogCQkgICAgYnJlYWs7CiAJCWNhc2UgWFBBVEhfQk9PTEVBTjoKLSNpZmRlZiBERUJVR19FWFBSCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiRXF1YWw6ICVkIGJvb2xlYW4gJWQgXG4iLAotCQkJICAgIGFyZzEtPmJvb2x2YWwsIGFyZzItPmJvb2x2YWwpOwotI2VuZGlmCiAJCSAgICByZXQgPSAoYXJnMS0+Ym9vbHZhbCA9PSBhcmcyLT5ib29sdmFsKTsKIAkJICAgIGJyZWFrOwogCQljYXNlIFhQQVRIX05VTUJFUjoKQEAgLTcwMTYsMTAgKzYzMjMsNiBAQAogICAgICAgICBjYXNlIFhQQVRIX05VTUJFUjoKIAkgICAgc3dpdGNoIChhcmcyLT50eXBlKSB7CiAJICAgICAgICBjYXNlIFhQQVRIX1VOREVGSU5FRDoKLSNpZmRlZiBERUJVR19FWFBSCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiRXF1YWw6IHVuZGVmaW5lZFxuIik7Ci0jZW5kaWYKIAkJICAgIGJyZWFrOwogCQljYXNlIFhQQVRIX0JPT0xFQU46CiAJCSAgICByZXQgPSAoYXJnMi0+Ym9vbHZhbD09CkBAIC03MDI5LDYgKzYzMzIsOCBAQAogCQkgICAgdmFsdWVQdXNoKGN0eHQsIGFyZzIpOwogCQkgICAgeG1sWFBhdGhOdW1iZXJGdW5jdGlvbihjdHh0LCAxKTsKIAkJICAgIGFyZzIgPSB2YWx1ZVBvcChjdHh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8qIEZhbGxzIHRocm91Z2guICovCiAJCWNhc2UgWFBBVEhfTlVNQkVSOgogCQkgICAgLyogSGFuZCBjaGVjayBOYU4gYW5kIEluZmluaXR5IGVxdWFsaXRpZXMgKi8KQEAgLTcwNzUsMTAgKzYzODAsNiBAQAogICAgICAgICBjYXNlIFhQQVRIX1NUUklORzoKIAkgICAgc3dpdGNoIChhcmcyLT50eXBlKSB7CiAJICAgICAgICBjYXNlIFhQQVRIX1VOREVGSU5FRDoKLSNpZmRlZiBERUJVR19FWFBSCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiRXF1YWw6IHVuZGVmaW5lZFxuIik7Ci0jZW5kaWYKIAkJICAgIGJyZWFrOwogCQljYXNlIFhQQVRIX0JPT0xFQU46CiAJCSAgICBpZiAoKGFyZzEtPnN0cmluZ3ZhbCA9PSBOVUxMKSB8fApAQCAtNzA5NCw2ICs2Mzk1LDggQEAKIAkJICAgIHZhbHVlUHVzaChjdHh0LCBhcmcxKTsKIAkJICAgIHhtbFhQYXRoTnVtYmVyRnVuY3Rpb24oY3R4dCwgMSk7CiAJCSAgICBhcmcxID0gdmFsdWVQb3AoY3R4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHh0LT5lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCQkgICAgLyogSGFuZCBjaGVjayBOYU4gYW5kIEluZmluaXR5IGVxdWFsaXRpZXMgKi8KIAkJICAgIGlmICh4bWxYUGF0aElzTmFOKGFyZzEtPmZsb2F0dmFsKSB8fAogCQkJICAgIHhtbFhQYXRoSXNOYU4oYXJnMi0+ZmxvYXR2YWwpKSB7CkBAIC03MTc3LDEwICs2NDgwLDYgQEAKICAgICB9CiAKICAgICBpZiAoYXJnMSA9PSBhcmcyKSB7Ci0jaWZkZWYgREVCVUdfRVhQUgotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJIkVxdWFsOiBieSBwb2ludGVyXG4iKTsKLSNlbmRpZgogCXhtbFhQYXRoRnJlZU9iamVjdChhcmcxKTsKICAgICAgICAgcmV0dXJuKDEpOwogICAgIH0KQEAgLTcyMDAsMTAgKzY0OTksNiBAQAogCX0KIAlzd2l0Y2ggKGFyZzItPnR5cGUpIHsKIAkgICAgY2FzZSBYUEFUSF9VTkRFRklORUQ6Ci0jaWZkZWYgREVCVUdfRVhQUgotCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSJFcXVhbDogdW5kZWZpbmVkXG4iKTsKLSNlbmRpZgogCQlicmVhazsKIAkgICAgY2FzZSBYUEFUSF9OT0RFU0VUOgogCSAgICBjYXNlIFhQQVRIX1hTTFRfVFJFRToKQEAgLTcyNjQsMTAgKzY1NTksNiBAQAogICAgIH0KIAogICAgIGlmIChhcmcxID09IGFyZzIpIHsKLSNpZmRlZiBERUJVR19FWFBSCi0gICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkiTm90RXF1YWw6IGJ5IHBvaW50ZXJcbiIpOwotI2VuZGlmCiAJeG1sWFBhdGhSZWxlYXNlT2JqZWN0KGN0eHQtPmNvbnRleHQsIGFyZzEpOwogICAgICAgICByZXR1cm4oMCk7CiAgICAgfQpAQCAtNzI4NywxMCArNjU3OCw2IEBACiAJfQogCXN3aXRjaCAoYXJnMi0+dHlwZSkgewogCSAgICBjYXNlIFhQQVRIX1VOREVGSU5FRDoKLSNpZmRlZiBERUJVR19FWFBSCi0JCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJIk5vdEVxdWFsOiB1bmRlZmluZWRcbiIpOwotI2VuZGlmCiAJCWJyZWFrOwogCSAgICBjYXNlIFhQQVRIX05PREVTRVQ6CiAJICAgIGNhc2UgWFBBVEhfWFNMVF9UUkVFOgpAQCAtNzM5MywyMSArNjY4MCwxMyBAQAogCXhtbFhQYXRoTnVtYmVyRnVuY3Rpb24oY3R4dCwgMSk7CiAJYXJnMSA9IHZhbHVlUG9wKGN0eHQpOwogICAgIH0KLSAgICBpZiAoYXJnMS0+dHlwZSAhPSBYUEFUSF9OVU1CRVIpIHsKLQl4bWxYUGF0aEZyZWVPYmplY3QoYXJnMSk7Ci0JeG1sWFBhdGhGcmVlT2JqZWN0KGFyZzIpOwotCVhQX0VSUk9SMChYUEFUSF9JTlZBTElEX09QRVJBTkQpOwotICAgIH0KICAgICBpZiAoYXJnMi0+dHlwZSAhPSBYUEFUSF9OVU1CRVIpIHsKIAl2YWx1ZVB1c2goY3R4dCwgYXJnMik7CiAJeG1sWFBhdGhOdW1iZXJGdW5jdGlvbihjdHh0LCAxKTsKIAlhcmcyID0gdmFsdWVQb3AoY3R4dCk7CiAgICAgfQotICAgIGlmIChhcmcyLT50eXBlICE9IFhQQVRIX05VTUJFUikgewotCXhtbFhQYXRoUmVsZWFzZU9iamVjdChjdHh0LT5jb250ZXh0LCBhcmcxKTsKLQl4bWxYUGF0aFJlbGVhc2VPYmplY3QoY3R4dC0+Y29udGV4dCwgYXJnMik7Ci0JWFBfRVJST1IwKFhQQVRIX0lOVkFMSURfT1BFUkFORCk7Ci0gICAgfQorICAgIGlmIChjdHh0LT5lcnJvcikKKyAgICAgICAgZ290byBlcnJvcjsKICAgICAvKgogICAgICAqIEFkZCB0ZXN0cyBmb3IgaW5maW5pdHkgYW5kIG5hbgogICAgICAqID0+IGZlZWRiYWNrIG9uIDMuNCBmb3IgSW5mIGFuZCBOYU4KQEAgLTc0NTcsNiArNjczNiw3IEBACiAJICAgIH0KIAl9CiAgICAgfQorZXJyb3I6CiAgICAgeG1sWFBhdGhSZWxlYXNlT2JqZWN0KGN0eHQtPmNvbnRleHQsIGFyZzEpOwogICAgIHhtbFhQYXRoUmVsZWFzZU9iamVjdChjdHh0LT5jb250ZXh0LCBhcmcyKTsKICAgICByZXR1cm4ocmV0KTsKQEAgLTg0ODksMTAgKzc3NjksNiBAQAogCXZhbHVlUHVzaChjdHh0LAogCSAgICB4bWxYUGF0aENhY2hlTmV3RmxvYXQoY3R4dC0+Y29udGV4dCwKIAkJKGRvdWJsZSkgY3R4dC0+Y29udGV4dC0+Y29udGV4dFNpemUpKTsKLSNpZmRlZiBERUJVR19FWFBSCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJsYXN0KCkgOiAlZFxuIiwgY3R4dC0+Y29udGV4dC0+Y29udGV4dFNpemUpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKIAlYUF9FUlJPUihYUEFUSF9JTlZBTElEX0NUWFRfU0laRSk7CiAgICAgfQpAQCAtODUxNiwxMCArNzc5Miw2IEBACiAJdmFsdWVQdXNoKGN0eHQsCiAJICAgICAgeG1sWFBhdGhDYWNoZU5ld0Zsb2F0KGN0eHQtPmNvbnRleHQsCiAJCShkb3VibGUpIGN0eHQtPmNvbnRleHQtPnByb3hpbWl0eVBvc2l0aW9uKSk7Ci0jaWZkZWYgREVCVUdfRVhQUgotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAicG9zaXRpb24oKSA6ICVkXG4iLAotCQljdHh0LT5jb250ZXh0LT5wcm94aW1pdHlQb3NpdGlvbik7Ci0jZW5kaWYKICAgICB9IGVsc2UgewogCVhQX0VSUk9SKFhQQVRIX0lOVkFMSURfQ1RYVF9QT1NJVElPTik7CiAgICAgfQpAQCAtODg0Miw5ICs4MTE0LDggQEAKIAkJCQkgICAgIE5VTEwsIDApOwogCQkgICAgaWYgKGZ1bGxuYW1lID09IGN1ci0+bm9kZXNldHZhbC0+bm9kZVRhYltpXS0+bmFtZSkKIAkJCWZ1bGxuYW1lID0geG1sU3RyZHVwKGN1ci0+bm9kZXNldHZhbC0+bm9kZVRhYltpXS0+bmFtZSk7Ci0JCSAgICBpZiAoZnVsbG5hbWUgPT0gTlVMTCkgewotCQkJWFBfRVJST1IoWFBBVEhfTUVNT1JZX0VSUk9SKTsKLQkJICAgIH0KKwkJICAgIGlmIChmdWxsbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgeG1sWFBhdGhQRXJyTWVtb3J5KGN0eHQsIE5VTEwpOwogCQkgICAgdmFsdWVQdXNoKGN0eHQsIHhtbFhQYXRoQ2FjaGVXcmFwU3RyaW5nKAogCQkJY3R4dC0+Y29udGV4dCwgZnVsbG5hbWUpKTsKICAgICAgICAgICAgICAgICB9CkBAIC05MTk2LDcgKzg0NjcsNyBAQAogICBpZiAodGFyZ2V0KSB7CiAgICAgcG9pbnQgPSB4bWxTdHJzdHIoc3RyLT5zdHJpbmd2YWwsIGZpbmQtPnN0cmluZ3ZhbCk7CiAgICAgaWYgKHBvaW50KSB7Ci0gICAgICBvZmZzZXQgPSAoaW50KShwb2ludCAtIHN0ci0+c3RyaW5ndmFsKTsKKyAgICAgIG9mZnNldCA9IHBvaW50IC0gc3RyLT5zdHJpbmd2YWw7CiAgICAgICB4bWxCdWZBZGQodGFyZ2V0LCBzdHItPnN0cmluZ3ZhbCwgb2Zmc2V0KTsKICAgICB9CiAgICAgdmFsdWVQdXNoKGN0eHQsIHhtbFhQYXRoQ2FjaGVOZXdTdHJpbmcoY3R4dC0+Y29udGV4dCwKQEAgLTkyMzksNyArODUxMCw3IEBACiAgIGlmICh0YXJnZXQpIHsKICAgICBwb2ludCA9IHhtbFN0cnN0cihzdHItPnN0cmluZ3ZhbCwgZmluZC0+c3RyaW5ndmFsKTsKICAgICBpZiAocG9pbnQpIHsKLSAgICAgIG9mZnNldCA9IChpbnQpKHBvaW50IC0gc3RyLT5zdHJpbmd2YWwpICsgeG1sU3RybGVuKGZpbmQtPnN0cmluZ3ZhbCk7CisgICAgICBvZmZzZXQgPSBwb2ludCAtIHN0ci0+c3RyaW5ndmFsICsgeG1sU3RybGVuKGZpbmQtPnN0cmluZ3ZhbCk7CiAgICAgICB4bWxCdWZBZGQodGFyZ2V0LCAmc3RyLT5zdHJpbmd2YWxbb2Zmc2V0XSwKIAkJICAgeG1sU3RybGVuKHN0ci0+c3RyaW5ndmFsKSAtIG9mZnNldCk7CiAgICAgfQpAQCAtOTMzNiw3ICs4NjA3LDcgQEAKICAgICB4bWxYUGF0aE9iamVjdFB0ciB0bzsKICAgICB4bWxCdWZQdHIgdGFyZ2V0OwogICAgIGludCBvZmZzZXQsIG1heDsKLSAgICB4bWxDaGFyIGNoOworICAgIGludCBjaDsKICAgICBjb25zdCB4bWxDaGFyICpwb2ludDsKICAgICB4bWxDaGFyICpjcHRyOwogCkBAIC05NzQyLDcgKzkwMTMsNyBAQAogICAgIH0gZWxzZSB7CiAJLyogMS1ieXRlIGNvZGUgKi8KIAkqbGVuID0gMTsKLQlyZXR1cm4oKGludCkgKmN1cik7CisJcmV0dXJuKCpjdXIpOwogICAgIH0KIGVuY29kaW5nX2Vycm9yOgogICAgIC8qCkBAIC05OTI0LDcgKzkxOTUsNyBAQAogICAgICAgICAgICAgaWYgKGxlbiA+IFhNTF9NQVhfTkFNRV9MRU5HVEgpIHsKICAgICAgICAgICAgICAgICBYUF9FUlJPUk5VTEwoWFBBVEhfRVhQUl9FUlJPUik7CiAgICAgICAgICAgICB9Ci0JICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhtYXggKiBzaXplb2YoeG1sQ2hhcikpOworCSAgICBidWZmZXIgPSAoeG1sQ2hhciAqKSB4bWxNYWxsb2NBdG9taWMobWF4KTsKIAkgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCVhQX0VSUk9STlVMTChYUEFUSF9NRU1PUllfRVJST1IpOwogCSAgICB9CkBAIC05OTQxLDggKzkyMTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgWFBfRVJST1JOVUxMKFhQQVRIX0VYUFJfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICB9CiAJCSAgICBtYXggKj0gMjsKLQkJICAgIHRtcCA9ICh4bWxDaGFyICopIHhtbFJlYWxsb2MoYnVmZmVyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIG1heCAqIHNpemVvZih4bWxDaGFyKSk7CisJCSAgICB0bXAgPSAoeG1sQ2hhciAqKSB4bWxSZWFsbG9jKGJ1ZmZlciwgbWF4KTsKIAkJICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgeG1sRnJlZShidWZmZXIpOwogCQkJWFBfRVJST1JOVUxMKFhQQVRIX01FTU9SWV9FUlJPUik7CkBAIC05OTk0LDEzICs5MjY0LDEzIEBACiAjZW5kaWYKICAgICBpZiAoY3VyID09IE5VTEwpIHJldHVybigwKTsKICAgICB3aGlsZSAoSVNfQkxBTktfQ0goKmN1cikpIGN1cisrOwotICAgIGlmICgoKmN1ciAhPSAnLicpICYmICgoKmN1ciA8ICcwJykgfHwgKCpjdXIgPiAnOScpKSAmJiAoKmN1ciAhPSAnLScpKSB7Ci0gICAgICAgIHJldHVybih4bWxYUGF0aE5BTik7Ci0gICAgfQogICAgIGlmICgqY3VyID09ICctJykgewogCWlzbmVnID0gMTsKIAljdXIrKzsKICAgICB9CisgICAgaWYgKCgqY3VyICE9ICcuJykgJiYgKCgqY3VyIDwgJzAnKSB8fCAoKmN1ciA+ICc5JykpKSB7CisgICAgICAgIHJldHVybih4bWxYUGF0aE5BTik7CisgICAgfQogCiAjaWZkZWYgX19HTlVDX18KICAgICAvKgpAQCAtMTAyNTcsNyArOTUyNywxMCBAQAogICAgIH0gZWxzZSB7CiAJWFBfRVJST1IoWFBBVEhfU1RBUlRfTElURVJBTF9FUlJPUik7CiAgICAgfQotICAgIGlmIChyZXQgPT0gTlVMTCkgcmV0dXJuOworICAgIGlmIChyZXQgPT0gTlVMTCkgeworICAgICAgICB4bWxYUGF0aFBFcnJNZW1vcnkoY3R4dCwgTlVMTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbGl0ID0geG1sWFBhdGhDYWNoZU5ld1N0cmluZyhjdHh0LT5jb250ZXh0LCByZXQpOwogICAgIGlmIChsaXQgPT0gTlVMTCkgewogCWN0eHQtPmVycm9yID0gWFBBVEhfTUVNT1JZX0VSUk9SOwpAQCAtMTAzNjMsMTQgKzk2MzYsNiBAQAogCVhQX0VSUk9SKFhQQVRIX0VYUFJfRVJST1IpOwogICAgIH0KICAgICBTS0lQX0JMQU5LUzsKLSNpZmRlZiBERUJVR19FWFBSCi0gICAgaWYgKHByZWZpeCA9PSBOVUxMKQotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiQ2FsbGluZyBmdW5jdGlvbiAlc1xuIiwKLQkJCW5hbWUpOwotICAgIGVsc2UKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkNhbGxpbmcgZnVuY3Rpb24gJXM6JXNcbiIsCi0JCQlwcmVmaXgsIG5hbWUpOwotI2VuZGlmCiAKICAgICBpZiAoQ1VSICE9ICcoJykgewogCXhtbEZyZWUobmFtZSk7CkBAIC0xMDU4NywxMCArOTg1Miw2IEBACiAJU0tJUF9CTEFOS1M7CiAJbmFtZSA9IHhtbFhQYXRoU2Nhbk5hbWUoY3R4dCk7CiAJaWYgKChuYW1lICE9IE5VTEwpICYmICh4bWxTdHJzdHIobmFtZSwgKHhtbENoYXIgKikgIjo6IikgIT0gTlVMTCkpIHsKLSNpZmRlZiBERUJVR19TVEVQCi0JICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkgICAgIlBhdGhFeHByOiBBeGlzXG4iKTsKLSNlbmRpZgogCSAgICBsYyA9IDE7CiAJICAgIHhtbEZyZWUobmFtZSk7CiAJfSBlbHNlIGlmIChuYW1lICE9IE5VTEwpIHsKQEAgLTEwNjAwLDI5ICs5ODYxLDE3IEBACiAJICAgIHdoaWxlIChOWFQobGVuKSAhPSAwKSB7CiAJCWlmIChOWFQobGVuKSA9PSAnLycpIHsKIAkJICAgIC8qIGVsZW1lbnQgbmFtZSAqLwotI2lmZGVmIERFQlVHX1NURVAKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJICAgICJQYXRoRXhwcjogQWJiclJlbExvY2F0aW9uXG4iKTsKLSNlbmRpZgogCQkgICAgbGMgPSAxOwogCQkgICAgYnJlYWs7CiAJCX0gZWxzZSBpZiAoSVNfQkxBTktfQ0goTlhUKGxlbikpKSB7CiAJCSAgICAvKiBpZ25vcmUgYmxhbmtzICovCiAJCSAgICA7CiAJCX0gZWxzZSBpZiAoTlhUKGxlbikgPT0gJzonKSB7Ci0jaWZkZWYgREVCVUdfU1RFUAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBhdGhFeHByOiBBYmJyUmVsTG9jYXRpb25cbiIpOwotI2VuZGlmCiAJCSAgICBsYyA9IDE7CiAJCSAgICBicmVhazsKIAkJfSBlbHNlIGlmICgoTlhUKGxlbikgPT0gJygnKSkgewogCQkgICAgLyogTm9kZSBUeXBlIG9yIEZ1bmN0aW9uICovCiAJCSAgICBpZiAoeG1sWFBhdGhJc05vZGVUeXBlKG5hbWUpKSB7Ci0jaWZkZWYgREVCVUdfU1RFUAotCQkgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCQkJCSJQYXRoRXhwcjogVHlwZSBzZWFyY2hcbiIpOwotI2VuZGlmCiAJCQlsYyA9IDE7CiAjaWZkZWYgTElCWE1MX1hQVFJfTE9DU19FTkFCTEVECiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4dC0+eHB0ciAmJgpAQCAtMTA2MzAsMTkgKzk4NzksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxjID0gMTsKICNlbmRpZgogCQkgICAgfSBlbHNlIHsKLSNpZmRlZiBERUJVR19TVEVQCi0JCSAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkJIlBhdGhFeHByOiBmdW5jdGlvbiBjYWxsXG4iKTsKLSNlbmRpZgogCQkJbGMgPSAwOwogCQkgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJfSBlbHNlIGlmICgoTlhUKGxlbikgPT0gJ1snKSkgewogCQkgICAgLyogZWxlbWVudCBuYW1lICovCi0jaWZkZWYgREVCVUdfU1RFUAotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgIlBhdGhFeHByOiBBYmJyUmVsTG9jYXRpb25cbiIpOwotI2VuZGlmCiAJCSAgICBsYyA9IDE7CiAJCSAgICBicmVhazsKIAkJfSBlbHNlIGlmICgoTlhUKGxlbikgPT0gJzwnKSB8fCAoTlhUKGxlbikgPT0gJz4nKSB8fApAQCAtMTA2NTYsMTAgKzk4OTcsNiBAQAogCQlsZW4rKzsKIAkgICAgfQogCSAgICBpZiAoTlhUKGxlbikgPT0gMCkgewotI2lmZGVmIERFQlVHX1NURVAKLQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkiUGF0aEV4cHI6IEFiYnJSZWxMb2NhdGlvblxuIik7Ci0jZW5kaWYKIAkJLyogZWxlbWVudCBuYW1lICovCiAJCWxjID0gMTsKIAkgICAgfQpAQCAtMTEzNzAsMjAgKzEwNjA3LDYgQEAKIAkJeG1sWFBhdGhFcnIoY3R4dCwgWFBBVEhfVU5ERUZfUFJFRklYX0VSUk9SKTsKIAkgICAgfQogCX0KLSNpZmRlZiBERUJVR19TVEVQCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJCYXNpcyA6IGNvbXB1dGluZyBuZXcgc2V0XG4iKTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfU1RFUAotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiQmFzaXMgOiAiKTsKLQlpZiAoY3R4dC0+dmFsdWUgPT0gTlVMTCkKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJubyB2YWx1ZVxuIik7Ci0JZWxzZSBpZiAoY3R4dC0+dmFsdWUtPm5vZGVzZXR2YWwgPT0gTlVMTCkKLQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJFbXB0eVxuIik7Ci0JZWxzZQotCSAgICB4bWxHZW5lcmljRXJyb3JDb250ZXh0Tm9kZVNldChzdGRvdXQsIGN0eHQtPnZhbHVlLT5ub2Rlc2V0dmFsKTsKLSNlbmRpZgogCiAjaWZkZWYgTElCWE1MX1hQVFJfTE9DU19FTkFCTEVECiBldmFsX3ByZWRpY2F0ZXM6CkBAIC0xMTQwNywxNiArMTA2MzAsNiBAQAogICAgICAgICAgICAgeG1sRnJlZShuYW1lKTsKICAgICAgICAgfQogICAgIH0KLSNpZmRlZiBERUJVR19TVEVQCi0gICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJTdGVwIDogIik7Ci0gICAgaWYgKGN0eHQtPnZhbHVlID09IE5VTEwpCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJubyB2YWx1ZVxuIik7Ci0gICAgZWxzZSBpZiAoY3R4dC0+dmFsdWUtPm5vZGVzZXR2YWwgPT0gTlVMTCkKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIkVtcHR5XG4iKTsKLSAgICBlbHNlCi0JeG1sR2VuZXJpY0Vycm9yQ29udGV4dE5vZGVTZXQoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJY3R4dC0+dmFsdWUtPm5vZGVzZXR2YWwpOwotI2VuZGlmCiB9CiAKIC8qKgpAQCAtMTE1MTgsOTMgKzEwNzMxLDYgQEAKIHN0YXRpYyBpbnQKIHhtbFhQYXRoQ29tcE9wRXZhbCh4bWxYUGF0aFBhcnNlckNvbnRleHRQdHIgY3R4dCwgeG1sWFBhdGhTdGVwT3BQdHIgb3ApOwogCi0jaWZkZWYgREVCVUdfU1RFUAotc3RhdGljIHZvaWQKLXhtbFhQYXRoRGVidWdEdW1wU3RlcEF4aXMoeG1sWFBhdGhTdGVwT3BQdHIgb3AsCi0JCQkgIGludCBuYk5vZGVzKQotewotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAibmV3IHN0ZXAgOiAiKTsKLSAgICBzd2l0Y2ggKG9wLT52YWx1ZSkgewotICAgICAgICBjYXNlIEFYSVNfQU5DRVNUT1I6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImF4aXMgJ2FuY2VzdG9ycycgIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBWElTX0FOQ0VTVE9SX09SX1NFTEY6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXhpcyAnYW5jZXN0b3JzLW9yLXNlbGYnICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVhJU19BVFRSSUJVVEU6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImF4aXMgJ2F0dHJpYnV0ZXMnICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVhJU19DSElMRDoKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiYXhpcyAnY2hpbGQnICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVhJU19ERVNDRU5EQU5UOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJheGlzICdkZXNjZW5kYW50JyAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFYSVNfREVTQ0VOREFOVF9PUl9TRUxGOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImF4aXMgJ2Rlc2NlbmRhbnQtb3Itc2VsZicgIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBWElTX0ZPTExPV0lORzoKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiYXhpcyAnZm9sbG93aW5nJyAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFYSVNfRk9MTE9XSU5HX1NJQkxJTkc6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXhpcyAnZm9sbG93aW5nLXNpYmxpbmdzJyAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFYSVNfTkFNRVNQQUNFOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJheGlzICduYW1lc3BhY2UnICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVhJU19QQVJFTlQ6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgImF4aXMgJ3BhcmVudCcgIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBWElTX1BSRUNFRElORzoKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiYXhpcyAncHJlY2VkaW5nJyAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFYSVNfUFJFQ0VESU5HX1NJQkxJTkc6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXhpcyAncHJlY2VkaW5nLXNpYmxpbmcnICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVhJU19TRUxGOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJheGlzICdzZWxmJyAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkiIGNvbnRleHQgY29udGFpbnMgJWQgbm9kZXNcbiIsIG5iTm9kZXMpOwotICAgIHN3aXRjaCAob3AtPnZhbHVlMikgewotICAgICAgICBjYXNlIE5PREVfVEVTVF9OT05FOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgc2VhcmNoaW5nIGZvciBub25lICEhIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOT0RFX1RFU1RfVFlQRToKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIHNlYXJjaGluZyBmb3IgdHlwZSAlZFxuIiwgb3AtPnZhbHVlMyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOT0RFX1RFU1RfUEk6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICBzZWFyY2hpbmcgZm9yIFBJICEhIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOT0RFX1RFU1RfQUxMOgotICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgc2VhcmNoaW5nIGZvciAqXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5PREVfVEVTVF9OUzoKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIHNlYXJjaGluZyBmb3IgbmFtZXNwYWNlICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLT52YWx1ZTUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTk9ERV9URVNUX05BTUU6Ci0gICAgICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICBzZWFyY2hpbmcgZm9yIG5hbWUgJXNcbiIsIG9wLT52YWx1ZTUpOwotICAgICAgICAgICAgaWYgKG9wLT52YWx1ZTQpCi0gICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIHdpdGggbmFtZXNwYWNlICVzXG4iLCBvcC0+dmFsdWU0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlRlc3RpbmcgOiAiKTsKLX0KLSNlbmRpZiAvKiBERUJVR19TVEVQICovCi0KIC8qKgogICogeG1sWFBhdGhOb2RlU2V0RmlsdGVyOgogICogQGN0eHQ6ICB0aGUgWFBhdGggUGFyc2VyIGNvbnRleHQKQEAgLTExOTk1LDkgKzExMTIxLDYgQEAKICAgICBjb25zdCB4bWxDaGFyICpuYW1lID0gb3AtPnZhbHVlNTsKICAgICBjb25zdCB4bWxDaGFyICpVUkkgPSBOVUxMOwogCi0jaWZkZWYgREVCVUdfU1RFUAotICAgIGludCBuYk1hdGNoZXMgPSAwLCBwcmV2TWF0Y2hlcyA9IDA7Ci0jZW5kaWYKICAgICBpbnQgdG90YWwgPSAwLCBoYXNOc05vZGVzID0gMDsKICAgICAvKiBUaGUgcG9wcGVkIG9iamVjdCBob2xkaW5nIHRoZSBjb250ZXh0IG5vZGVzICovCiAgICAgeG1sWFBhdGhPYmplY3RQdHIgb2JqOwpAQCAtMTIxMjIsMTEgKzExMjQ1LDYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotI2lmZGVmIERFQlVHX1NURVAKLSAgICB4bWxYUGF0aERlYnVnRHVtcFN0ZXBBeGlzKG9wLAotCShvYmotPm5vZGVzZXR2YWwgIT0gTlVMTCkgPyBvYmotPm5vZGVzZXR2YWwtPm5vZGVOciA6IDApOwotI2VuZGlmCi0KICAgICBpZiAobmV4dCA9PSBOVUxMKSB7CiAJeG1sWFBhdGhSZWxlYXNlT2JqZWN0KHhwY3R4dCwgb2JqKTsKICAgICAgICAgcmV0dXJuKDApOwpAQCAtMTIyNjAsMTAgKzExMzc4LDYgQEAKIAogICAgICAgICAgICAgdG90YWwrKzsKIAotI2lmZGVmIERFQlVHX1NURVAKLSAgICAgICAgICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiICVzIiwgY3VyLT5uYW1lKTsKLSNlbmRpZgotCiAJICAgIHN3aXRjaCAodGVzdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTk9ERV9URVNUX05PTkU6CiAJCSAgICB0b3RhbCA9IDA7CkBAIC0xMjQ1MCwxMSArMTE1NjQsNiBAQAogCSAgICBvdXRTZXEgPSBtZXJnZUFuZENsZWFyKG91dFNlcSwgc2VxKTsKIAlicmVhazsKIAotI2lmZGVmIERFQlVHX1NURVAKLQlpZiAoc2VxICE9IE5VTEwpCi0JICAgIG5iTWF0Y2hlcyArPSBzZXEtPm5vZGVOcjsKLSNlbmRpZgotCiBhcHBseV9wcmVkaWNhdGVzOiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgICAgICAgaWYgKGN0eHQtPmVycm9yICE9IFhQQVRIX0VYUFJFU1NJT05fT0spCiAJICAgIGdvdG8gZXJyb3I7CkBAIC0xMjU2NiwxMiArMTE2NzUsNiBAQAogICAgICAgICB4cGN0eHQtPnRtcE5zTGlzdCA9IE5VTEw7CiAgICAgfQogCi0jaWZkZWYgREVCVUdfU1RFUAotICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LAotCSJcbkV4YW1pbmVkICVkIG5vZGVzLCBmb3VuZCAlZCBub2RlcyBhdCB0aGF0IHN0ZXBcbiIsCi0JdG90YWwsIG5iTWF0Y2hlcyk7Ci0jZW5kaWYKLQogICAgIHJldHVybih0b3RhbCk7CiB9CiAKQEAgLTEyODYyLDYgKzExOTY1LDcgQEAKIHsKICAgICBpbnQgdG90YWwgPSAwOwogICAgIHhtbFhQYXRoQ29tcEV4cHJQdHIgY29tcDsKKyAgICB4bWxYUGF0aE9iamVjdFB0ciBvYmo7CiAgICAgeG1sTm9kZVNldFB0ciBzZXQ7CiAKICAgICBDSEVDS19FUlJPUjA7CkBAIC0xMjkyOSwxMyArMTIwMzMsMjAgQEAKICAgICB9CiAjZW5kaWYgLyogTElCWE1MX1hQVFJfTE9DU19FTkFCTEVEICovCiAKKyAgICAvKgorICAgICAqIEluIGNhc2Ugb2YgZXJyb3JzLCB4bWxYUGF0aE5vZGVTZXRGaWx0ZXIgY2FuIHBvcCBhZGRpdGlvbmFsIG5vZGVzIGZyb20KKyAgICAgKiB0aGUgc3RhY2suIFdlIGhhdmUgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBub2Rlc2V0IG9iamVjdCBmcm9tIHRoZQorICAgICAqIHN0YWNrIHRvIGF2b2lkIGZyZWVpbmcgaXQgcHJlbWF0dXJlbHkuCisgICAgICovCiAgICAgQ0hFQ0tfVFlQRTAoWFBBVEhfTk9ERVNFVCk7Ci0gICAgc2V0ID0gY3R4dC0+dmFsdWUtPm5vZGVzZXR2YWw7CisgICAgb2JqID0gdmFsdWVQb3AoY3R4dCk7CisgICAgc2V0ID0gb2JqLT5ub2Rlc2V0dmFsOwogICAgIGlmIChzZXQgIT0gTlVMTCkgewogICAgICAgICB4bWxYUGF0aE5vZGVTZXRGaWx0ZXIoY3R4dCwgc2V0LCBvcC0+Y2gyLCAxLCAxLCAxKTsKICAgICAgICAgaWYgKHNldC0+bm9kZU5yID4gMCkKICAgICAgICAgICAgICpmaXJzdCA9IHNldC0+bm9kZVRhYlswXTsKICAgICB9CisgICAgdmFsdWVQdXNoKGN0eHQsIG9iaik7CiAKICAgICByZXR1cm4gKHRvdGFsKTsKIH0KQEAgLTEzMTUyLDIwICsxMjI2MywxNyBAQAogCQlpbnQgaTsKICAgICAgICAgICAgICAgICBpbnQgZnJhbWU7CiAKLSAgICAgICAgICAgICAgICBmcmFtZSA9IHhtbFhQYXRoU2V0RnJhbWUoY3R4dCk7CisgICAgICAgICAgICAgICAgZnJhbWUgPSBjdHh0LT52YWx1ZU5yOwogICAgICAgICAgICAgICAgIGlmIChvcC0+Y2gxICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9CiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aENvbXBPcEV2YWwoY3R4dCwgJmNvbXAtPnN0ZXBzW29wLT5jaDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0eHQtPmVycm9yICE9IFhQQVRIX0VYUFJFU1NJT05fT0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbFhQYXRoUG9wRnJhbWUoY3R4dCwgZnJhbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4dC0+ZXJyb3IgIT0gWFBBVEhfRVhQUkVTU0lPTl9PSykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotCQlpZiAoY3R4dC0+dmFsdWVOciA8IGN0eHQtPnZhbHVlRnJhbWUgKyBvcC0+dmFsdWUpIHsKKwkJaWYgKGN0eHQtPnZhbHVlTnIgPCBmcmFtZSArIG9wLT52YWx1ZSkgewogCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAJCQkgICAgInhtbFhQYXRoQ29tcE9wRXZhbDogcGFyYW1ldGVyIGVycm9yXG4iKTsKIAkJICAgIGN0eHQtPmVycm9yID0gWFBBVEhfSU5WQUxJRF9PUEVSQU5EOwotICAgICAgICAgICAgICAgICAgICB4bWxYUGF0aFBvcEZyYW1lKGN0eHQsIGZyYW1lKTsKIAkJICAgIGJyZWFrOwogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBvcC0+dmFsdWU7IGkrKykgewpAQCAtMTMxNzMsNyArMTIyODEsNiBAQAogCQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAJCQkJInhtbFhQYXRoQ29tcE9wRXZhbDogcGFyYW1ldGVyIGVycm9yXG4iKTsKIAkJCWN0eHQtPmVycm9yID0gWFBBVEhfSU5WQUxJRF9PUEVSQU5EOwotICAgICAgICAgICAgICAgICAgICAgICAgeG1sWFBhdGhQb3BGcmFtZShjdHh0LCBmcmFtZSk7CiAJCQlicmVhazsKIAkJICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMzE5Miw3ICsxMjI5OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCiAgICAgICAgICAgICAieG1sWFBhdGhDb21wT3BFdmFsOiBmdW5jdGlvbiAlcyBib3VuZCB0byB1bmRlZmluZWQgcHJlZml4ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilvcC0+dmFsdWU0LCAoY2hhciAqKW9wLT52YWx1ZTUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFhQYXRoUG9wRnJhbWUoY3R4dCwgZnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQtPmVycm9yID0gWFBBVEhfVU5ERUZfUFJFRklYX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTMyMTYsOSArMTIzMjIsOCBAQAogICAgICAgICAgICAgICAgIGN0eHQtPmNvbnRleHQtPmZ1bmN0aW9uID0gb2xkRnVuYzsKICAgICAgICAgICAgICAgICBjdHh0LT5jb250ZXh0LT5mdW5jdGlvblVSSSA9IG9sZEZ1bmNVUkk7CiAgICAgICAgICAgICAgICAgaWYgKChjdHh0LT5lcnJvciA9PSBYUEFUSF9FWFBSRVNTSU9OX09LKSAmJgotICAgICAgICAgICAgICAgICAgICAoY3R4dC0+dmFsdWVOciAhPSBjdHh0LT52YWx1ZUZyYW1lICsgMSkpCisgICAgICAgICAgICAgICAgICAgIChjdHh0LT52YWx1ZU5yICE9IGZyYW1lICsgMSkpCiAgICAgICAgICAgICAgICAgICAgIFhQX0VSUk9SMChYUEFUSF9TVEFDS19FUlJPUik7Ci0gICAgICAgICAgICAgICAgeG1sWFBhdGhQb3BGcmFtZShjdHh0LCBmcmFtZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgWFBBVEhfT1BfQVJHOgpAQCAtMTMyMzMsNiArMTIzMzgsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWFBBVEhfT1BfUFJFRElDQVRFOgogICAgICAgICBjYXNlIFhQQVRIX09QX0ZJTFRFUjp7CisgICAgICAgICAgICAgICAgeG1sWFBhdGhPYmplY3RQdHIgb2JqOwogICAgICAgICAgICAgICAgIHhtbE5vZGVTZXRQdHIgc2V0OwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTEzMzQ3LDExICsxMjQ1MywxOSBAQAogICAgICAgICAgICAgICAgIH0KICNlbmRpZiAvKiBMSUJYTUxfWFBUUl9MT0NTX0VOQUJMRUQgKi8KIAorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogSW4gY2FzZSBvZiBlcnJvcnMsIHhtbFhQYXRoTm9kZVNldEZpbHRlciBjYW4gcG9wIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgKiBub2RlcyBmcm9tIHRoZSBzdGFjay4gV2UgaGF2ZSB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlCisgICAgICAgICAgICAgICAgICogbm9kZXNldCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgdG8gYXZvaWQgZnJlZWluZyBpdAorICAgICAgICAgICAgICAgICAqIHByZW1hdHVyZWx5LgorICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIENIRUNLX1RZUEUwKFhQQVRIX05PREVTRVQpOwotICAgICAgICAgICAgICAgIHNldCA9IGN0eHQtPnZhbHVlLT5ub2Rlc2V0dmFsOworICAgICAgICAgICAgICAgIG9iaiA9IHZhbHVlUG9wKGN0eHQpOworICAgICAgICAgICAgICAgIHNldCA9IG9iai0+bm9kZXNldHZhbDsKICAgICAgICAgICAgICAgICBpZiAoc2V0ICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHhtbFhQYXRoTm9kZVNldEZpbHRlcihjdHh0LCBzZXQsIG9wLT5jaDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBzZXQtPm5vZGVOciwgMSk7CisgICAgICAgICAgICAgICAgdmFsdWVQdXNoKGN0eHQsIG9iaik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgWFBBVEhfT1BfU09SVDoKQEAgLTEzNjQ1LDggKzEyNzU5LDYgQEAKICAgICB4bWxOb2RlUHRyIGN1ciA9IE5VTEwsIGxpbWl0ID0gTlVMTDsKICAgICB4bWxTdHJlYW1DdHh0UHRyIHBhdHN0cmVhbSA9IE5VTEw7CiAKLSAgICBpbnQgbmJfbm9kZXMgPSAwOwotCiAgICAgaWYgKChjdHh0ID09IE5VTEwpIHx8IChjb21wID09IE5VTEwpKQogICAgICAgICByZXR1cm4oLTEpOwogICAgIG1heF9kZXB0aCA9IHhtbFBhdHRlcm5NYXhEZXB0aChjb21wKTsKQEAgLTEzNzYzLDggKzEyODc1LDYgQEAKICAgICAgICAgICAgIGN0eHQtPm9wQ291bnQrKzsKICAgICAgICAgfQogCi0gICAgICAgIG5iX25vZGVzKys7Ci0KIAlzd2l0Y2ggKGN1ci0+dHlwZSkgewogCSAgICBjYXNlIFhNTF9FTEVNRU5UX05PREU6CiAJICAgIGNhc2UgWE1MX1RFWFRfTk9ERToKQEAgLTEzODU2LDExICsxMjk2Niw2IEBACiAKIGRvbmU6CiAKLSNpZiAwCi0gICAgcHJpbnRmKCJzdHJlYW0gZXZhbDogY2hlY2tlZCAlZCBub2RlcyBzZWxlY3RlZCAlZFxuIiwKLSAgICAgICAgICAgbmJfbm9kZXMsIHJldE9iai0+bm9kZXNldHZhbC0+bm9kZU5yKTsKLSNlbmRpZgotCiAgICAgaWYgKHBhdHN0cmVhbSkKIAl4bWxGcmVlU3RyZWFtQ3R4dChwYXRzdHJlYW0pOwogICAgIHJldHVybigwKTsKQEAgLTEzODk5LDcgKzEzMDA0LDYgQEAKIAljdHh0LT52YWx1ZU5yID0gMDsKIAljdHh0LT52YWx1ZU1heCA9IDEwOwogCWN0eHQtPnZhbHVlID0gTlVMTDsKLSAgICAgICAgY3R4dC0+dmFsdWVGcmFtZSA9IDA7CiAgICAgfQogI2lmZGVmIFhQQVRIX1NUUkVBTUlORwogICAgIGlmIChjdHh0LT5jb21wLT5zdHJlYW0pIHsKQEAgLTE0MTE0LDYgKzEzMjE4LDcgQEAKIAkgICAgY29tcCA9IHhtbFhQYXRoTmV3Q29tcEV4cHIoKTsKIAkgICAgaWYgKGNvbXAgPT0gTlVMTCkgewogCQl4bWxYUGF0aEVyck1lbW9yeShjdHh0LCAiYWxsb2NhdGluZyBzdHJlYW1hYmxlIGV4cHJlc3Npb25cbiIpOworCSAgICAgICAgeG1sRnJlZVBhdHRlcm4oc3RyZWFtKTsKIAkJcmV0dXJuKE5VTEwpOwogCSAgICB9CiAJICAgIGNvbXAtPnN0cmVhbSA9IHN0cmVhbTsKQEAgLTE0MjY3LDEwICsxMzM3Miw2IEBACiAKICAgICBpZiAoY29tcCAhPSBOVUxMKSB7CiAJY29tcC0+ZXhwciA9IHhtbFN0cmR1cChzdHIpOwotI2lmZGVmIERFQlVHX0VWQUxfQ09VTlRTCi0JY29tcC0+c3RyaW5nID0geG1sU3RyZHVwKHN0cik7Ci0JY29tcC0+bmIgPSAwOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybihjb21wKTsKIH0KQEAgLTE0MzI3LDE0ICsxMzQyOCw5IEBACiAJeG1sWFBhdGhEaXNhYmxlT3B0aW1pemVyID0gMTsKICNlbmRpZgogCi0jaWZkZWYgREVCVUdfRVZBTF9DT1VOVFMKLSAgICBjb21wLT5uYisrOwotICAgIGlmICgoY29tcC0+c3RyaW5nICE9IE5VTEwpICYmIChjb21wLT5uYiA+IDEwMCkpIHsKLQlmcHJpbnRmKHN0ZGVyciwgIjEwMCB4ICVzXG4iLCBjb21wLT5zdHJpbmcpOwotCWNvbXAtPm5iID0gMDsKLSAgICB9Ci0jZW5kaWYKICAgICBwY3R4dCA9IHhtbFhQYXRoQ29tcFBhcnNlckNvbnRleHQoY29tcCwgY3R4dCk7CisgICAgaWYgKHBjdHh0ID09IE5VTEwpCisgICAgICAgIHJldHVybigtMSk7CiAgICAgcmVzID0geG1sWFBhdGhSdW5FdmFsKHBjdHh0LCB0b0Jvb2wpOwogCiAgICAgaWYgKHBjdHh0LT5lcnJvciAhPSBYUEFUSF9FWFBSRVNTSU9OX09LKSB7CmRpZmYgLS1naXQgYS94cG9pbnRlci5jIGIveHBvaW50ZXIuYwppbmRleCBiYTFlMzFlLi42ZTFlNWY0IDEwMDY0NAotLS0gYS94cG9pbnRlci5jCisrKyBiL3hwb2ludGVyLmMKQEAgLTM4LDE5ICszOCwxMyBAQAogI2luY2x1ZGUgPGxpYnhtbC94cGF0aC5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aEludGVybmFscy5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgotI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CiAKICNpZmRlZiBMSUJYTUxfWFBUUl9FTkFCTEVECiAKIC8qIEFkZCBzdXBwb3J0IG9mIHRoZSB4bWxucygpIHhwb2ludGVyIHNjaGVtZSB0byBpbml0aWFsaXplIHRoZSBuYW1lc3BhY2VzICovCiAjZGVmaW5lIFhQVFJfWE1MTlNfU0NIRU1FCiAKLS8qICNkZWZpbmUgREVCVUdfUkFOR0VTICovCi0jaWZkZWYgREVCVUdfUkFOR0VTCi0jaWZkZWYgTElCWE1MX0RFQlVHX0VOQUJMRUQKLSNpbmNsdWRlIDxsaWJ4bWwvZGVidWdYTUwuaD4KLSNlbmRpZgotI2VuZGlmCisjaW5jbHVkZSAicHJpdmF0ZS9lcnJvci5oIgogCiAjZGVmaW5lIFRPRE8JCQkJCQkJCVwKICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwJCQkJXApAQCAtMjY2LDcgKzI2MCw3IEBACiAgICAgICAgIHhtbFhQdHJFcnJNZW1vcnkoImFsbG9jYXRpbmcgcG9pbnQiKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAgLCAoc2l6ZV90KSBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CiAgICAgcmV0LT50eXBlID0gWFBBVEhfUE9JTlQ7CiAgICAgcmV0LT51c2VyID0gKHZvaWQgKikgbm9kZTsKICAgICByZXQtPmluZGV4ID0gaW5keDsKQEAgLTU4Niw3ICs1ODAsNyBAQAogICAgICAgICB4bWxYUHRyRXJyTWVtb3J5KCJhbGxvY2F0aW5nIGxvY2F0aW9uc2V0Iik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBtZW1zZXQocmV0LCAwICwgKHNpemVfdCkgc2l6ZW9mKHhtbExvY2F0aW9uU2V0KSk7CisgICAgbWVtc2V0KHJldCwgMCAsIHNpemVvZih4bWxMb2NhdGlvblNldCkpOwogICAgIGlmICh2YWwgIT0gTlVMTCkgewogICAgICAgICByZXQtPmxvY1RhYiA9ICh4bWxYUGF0aE9iamVjdFB0ciAqKSB4bWxNYWxsb2MoWE1MX1JBTkdFU0VUX0RFRkFVTFQgKgogCQkJCQkgICAgIHNpemVvZih4bWxYUGF0aE9iamVjdFB0cikpOwpAQCAtNTk2LDcgKzU5MCw3IEBACiAJICAgIHJldHVybihOVUxMKTsKIAl9CiAJbWVtc2V0KHJldC0+bG9jVGFiLCAwICwKLQkgICAgICAgWE1MX1JBTkdFU0VUX0RFRkFVTFQgKiAoc2l6ZV90KSBzaXplb2YoeG1sWFBhdGhPYmplY3RQdHIpKTsKKwkgICAgICAgWE1MX1JBTkdFU0VUX0RFRkFVTFQgKiBzaXplb2YoeG1sWFBhdGhPYmplY3RQdHIpKTsKICAgICAgICAgcmV0LT5sb2NNYXggPSBYTUxfUkFOR0VTRVRfREVGQVVMVDsKIAlyZXQtPmxvY1RhYltyZXQtPmxvY05yKytdID0gdmFsOwogICAgIH0KQEAgLTYzOCw3ICs2MzIsNyBAQAogCSAgICByZXR1cm47CiAJfQogCW1lbXNldChjdXItPmxvY1RhYiwgMCAsCi0JICAgICAgIFhNTF9SQU5HRVNFVF9ERUZBVUxUICogKHNpemVfdCkgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0UHRyKSk7CisJICAgICAgIFhNTF9SQU5HRVNFVF9ERUZBVUxUICogc2l6ZW9mKHhtbFhQYXRoT2JqZWN0UHRyKSk7CiAgICAgICAgIGN1ci0+bG9jTWF4ID0gWE1MX1JBTkdFU0VUX0RFRkFVTFQ7CiAgICAgfSBlbHNlIGlmIChjdXItPmxvY05yID09IGN1ci0+bG9jTWF4KSB7CiAgICAgICAgIHhtbFhQYXRoT2JqZWN0UHRyICp0ZW1wOwpAQCAtNzAzLDEwICs2OTcsNiBAQAogICAgICAgICBpZiAoY3VyLT5sb2NUYWJbaV0gPT0gdmFsKSBicmVhazsKIAogICAgIGlmIChpID49IGN1ci0+bG9jTnIpIHsKLSNpZmRlZiBERUJVRwotICAgICAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkgICAgICAgICJ4bWxYUHRyTG9jYXRpb25TZXREZWw6IFJhbmdlIHdhc24ndCBmb3VuZCBpbiBSYW5nZUxpc3RcbiIpOwotI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY3VyLT5sb2NOci0tOwpAQCAtNzcxLDcgKzc2MSw3IEBACiAgICAgICAgIHhtbFhQdHJFcnJNZW1vcnkoImFsbG9jYXRpbmcgbG9jYXRpb25zZXQiKTsKIAlyZXR1cm4oTlVMTCk7CiAgICAgfQotICAgIG1lbXNldChyZXQsIDAgLCAoc2l6ZV90KSBzaXplb2YoeG1sWFBhdGhPYmplY3QpKTsKKyAgICBtZW1zZXQocmV0LCAwICwgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CiAgICAgcmV0LT50eXBlID0gWFBBVEhfTE9DQVRJT05TRVQ7CiAgICAgaWYgKGVuZCA9PSBOVUxMKQogCXJldC0+dXNlciA9IHhtbFhQdHJMb2NhdGlvblNldENyZWF0ZSh4bWxYUHRyTmV3Q29sbGFwc2VkUmFuZ2Uoc3RhcnQpKTsKQEAgLTc5OCw3ICs3ODgsNyBAQAogICAgICAgICB4bWxYUHRyRXJyTWVtb3J5KCJhbGxvY2F0aW5nIGxvY2F0aW9uc2V0Iik7CiAJcmV0dXJuKE5VTEwpOwogICAgIH0KLSAgICBtZW1zZXQocmV0LCAwICwgKHNpemVfdCkgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CisgICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKHhtbFhQYXRoT2JqZWN0KSk7CiAgICAgcmV0LT50eXBlID0gWFBBVEhfTE9DQVRJT05TRVQ7CiAgICAgaWYgKHNldCAhPSBOVUxMKSB7CiAJaW50IGk7CkBAIC04MzQsNyArODI0LDcgQEAKICAgICAgICAgeG1sWFB0ckVyck1lbW9yeSgiYWxsb2NhdGluZyBsb2NhdGlvbnNldCIpOwogCXJldHVybihOVUxMKTsKICAgICB9Ci0gICAgbWVtc2V0KHJldCwgMCAsIChzaXplX3QpIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOworICAgIG1lbXNldChyZXQsIDAsIHNpemVvZih4bWxYUGF0aE9iamVjdCkpOwogICAgIHJldC0+dHlwZSA9IFhQQVRIX0xPQ0FUSU9OU0VUOwogICAgIHJldC0+dXNlciA9ICh2b2lkICopIHZhbDsKICAgICByZXR1cm4ocmV0KTsKQEAgLTk2Nyw3ICs5NTcsNyBAQAogCiAgICAgbGVuID0geG1sU3RybGVuKGN0eHQtPmN1cik7CiAgICAgbGVuKys7Ci0gICAgYnVmZmVyID0gKHhtbENoYXIgKikgeG1sTWFsbG9jQXRvbWljKGxlbiAqIHNpemVvZiAoeG1sQ2hhcikpOworICAgIGJ1ZmZlciA9ICh4bWxDaGFyICopIHhtbE1hbGxvY0F0b21pYyhsZW4pOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogICAgICAgICB4bWxYUHRyRXJyTWVtb3J5KCJhbGxvY2F0aW5nIGJ1ZmZlciIpOwogICAgICAgICB4bWxGcmVlKG5hbWUpOwpAQCAtMTI0Niw3ICsxMjM2LDYgQEAKIAljdHh0LT52YWx1ZU5yID0gMDsKIAljdHh0LT52YWx1ZU1heCA9IDEwOwogCWN0eHQtPnZhbHVlID0gTlVMTDsKLQljdHh0LT52YWx1ZUZyYW1lID0gMDsKICAgICB9CiAgICAgU0tJUF9CTEFOS1M7CiAgICAgaWYgKENVUiA9PSAnLycpIHsKQEAgLTI0MjMsMTMgKzI0MTIsNiBAQAogCSAgICBpZiAobGVuID49IHBvcyArIHN0cmluZ2xlbikgewogCQltYXRjaCA9ICgheG1sU3RybmNtcCgmY3VyLT5jb250ZW50W3Bvc10sIHN0cmluZywgc3RyaW5nbGVuKSk7CiAJCWlmIChtYXRjaCkgewotI2lmZGVmIERFQlVHX1JBTkdFUwotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkgICAgImZvdW5kIHJhbmdlICVkIGJ5dGVzIGF0IGluZGV4ICVkIG9mIC0+IiwKLQkJCSAgICBzdHJpbmdsZW4sIHBvcyArIDEpOwotCQkgICAgeG1sRGVidWdEdW1wU3RyaW5nKHN0ZG91dCwgY3VyLT5jb250ZW50KTsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiXG4iKTsKLSNlbmRpZgogCQkgICAgKmVuZCA9IGN1cjsKIAkJICAgICplbmRpbmRleCA9IHBvcyArIHN0cmluZ2xlbjsKIAkJICAgIHJldHVybigxKTsKQEAgLTI0NDAsMTMgKzI0MjIsNiBAQAogICAgICAgICAgICAgICAgIGludCBzdWIgPSBsZW4gLSBwb3M7CiAJCW1hdGNoID0gKCF4bWxTdHJuY21wKCZjdXItPmNvbnRlbnRbcG9zXSwgc3RyaW5nLCBzdWIpKTsKIAkJaWYgKG1hdGNoKSB7Ci0jaWZkZWYgREVCVUdfUkFOR0VTCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiZm91bmQgc3VicmFuZ2UgJWQgYnl0ZXMgYXQgaW5kZXggJWQgb2YgLT4iLAotCQkJICAgIHN1YiwgcG9zICsgMSk7Ci0JCSAgICB4bWxEZWJ1Z0R1bXBTdHJpbmcoc3Rkb3V0LCBjdXItPmNvbnRlbnQpOwotCQkgICAgeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJcbiIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9ICZzdHJpbmdbc3ViXTsKIAkJICAgIHN0cmluZ2xlbiAtPSBzdWI7CiAJCX0gZWxzZSB7CkBAIC0yNTA2LDEzICsyNDgxLDYgQEAKIAkJICAgIHN0ciA9IHhtbFN0cmNocigmY3VyLT5jb250ZW50W3Bvc10sIGZpcnN0KTsKIAkJICAgIGlmIChzdHIgIT0gTlVMTCkgewogCQkJcG9zID0gKHN0ciAtICh4bWxDaGFyICopKGN1ci0+Y29udGVudCkpOwotI2lmZGVmIERFQlVHX1JBTkdFUwotCQkJeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCQkJImZvdW5kICclYycgYXQgaW5kZXggJWQgb2YgLT4iLAotCQkJCWZpcnN0LCBwb3MgKyAxKTsKLQkJCXhtbERlYnVnRHVtcFN0cmluZyhzdGRvdXQsIGN1ci0+Y29udGVudCk7Ci0JCQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwgIlxuIik7Ci0jZW5kaWYKIAkJCWlmICh4bWxYUHRyTWF0Y2hTdHJpbmcoc3RyaW5nLCBjdXIsIHBvcyArIDEsCiAJCQkJCSAgICAgICBlbmQsIGVuZGluZGV4KSkgewogCQkJICAgICpzdGFydCA9IGN1cjsKQEAgLTI1MjksMTMgKzI0OTcsNiBAQAogCQkgICAgICogY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmctdmFsdWUgYW5kIGFmdGVyIHRoZSBmaW5hbAogCQkgICAgICogY2hhcmFjdGVyLgogCQkgICAgICovCi0jaWZkZWYgREVCVUdfUkFOR0VTCi0JCSAgICB4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJCSAgICAiZm91bmQgJycgYXQgaW5kZXggJWQgb2YgLT4iLAotCQkJICAgIHBvcyArIDEpOwotCQkgICAgeG1sRGVidWdEdW1wU3RyaW5nKHN0ZG91dCwgY3VyLT5jb250ZW50KTsKLQkJICAgIHhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiXG4iKTsKLSNlbmRpZgogCQkgICAgKnN0YXJ0ID0gY3VyOwogCQkgICAgKnN0YXJ0aW5kZXggPSBwb3MgKyAxOwogCQkgICAgKmVuZCA9IGN1cjsKQEAgLTI3ODUsMjUgKzI3NDYsMTIgQEAKICAgICAgKiB0aGUgbGlzdCBvZiBsb2NhdGlvbiBzZXQgY29ycmVzcG9uZGluZyB0byB0aGF0IHNlYXJjaAogICAgICAqLwogICAgIGZvciAoaSA9IDA7aSA8IG9sZHNldC0+bG9jTnI7aSsrKSB7Ci0jaWZkZWYgREVCVUdfUkFOR0VTCi0JeG1sWFBhdGhEZWJ1Z0R1bXBPYmplY3Qoc3Rkb3V0LCBvbGRzZXQtPmxvY1RhYltpXSwgMCk7Ci0jZW5kaWYKIAogCXhtbFhQdHJHZXRTdGFydFBvaW50KG9sZHNldC0+bG9jVGFiW2ldLCAmc3RhcnQsICZzdGFydGluZGV4KTsKIAl4bWxYUHRyR2V0RW5kUG9pbnQob2xkc2V0LT5sb2NUYWJbaV0sICZlbmQsICZlbmRpbmRleCk7CiAJeG1sWFB0ckFkdmFuY2VDaGFyKCZzdGFydCwgJnN0YXJ0aW5kZXgsIDApOwogCXhtbFhQdHJHZXRMYXN0Q2hhcigmZW5kLCAmZW5kaW5kZXgpOwogCi0jaWZkZWYgREVCVUdfUkFOR0VTCi0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsCi0JCSJmcm9tIGluZGV4ICVkIG9mIC0+Iiwgc3RhcnRpbmRleCk7Ci0JeG1sRGVidWdEdW1wU3RyaW5nKHN0ZG91dCwgc3RhcnQtPmNvbnRlbnQpOwotCXhtbEdlbmVyaWNFcnJvcih4bWxHZW5lcmljRXJyb3JDb250ZXh0LCAiXG4iKTsKLQl4bWxHZW5lcmljRXJyb3IoeG1sR2VuZXJpY0Vycm9yQ29udGV4dCwKLQkJInRvIGluZGV4ICVkIG9mIC0+IiwgZW5kaW5kZXgpOwotCXhtbERlYnVnRHVtcFN0cmluZyhzdGRvdXQsIGVuZC0+Y29udGVudCk7Ci0JeG1sR2VuZXJpY0Vycm9yKHhtbEdlbmVyaWNFcnJvckNvbnRleHQsICJcbiIpOwotI2VuZGlmCiAJZG8gewogICAgICAgICAgICAgZmVuZCA9IGVuZDsKICAgICAgICAgICAgIGZlbmRpbmRleCA9IGVuZGluZGV4OwpkaWZmIC0tZ2l0IGEveHN0Yy8uZ2l0aWdub3JlIGIveHN0Yy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzUxZmQKLS0tIC9kZXYvbnVsbAorKysgYi94c3RjLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvKi10ZXN0LnB5CisvVGVzdHMKKy94c3RzLSoudGFyLmd6CmRpZmYgLS1naXQgYS94c3RjL2ZpeHVwLXRlc3RzLnB5IGIveHN0Yy9maXh1cC10ZXN0cy5weQppbmRleCA5MjE4MjBiLi4wOTQ5MGQxIDEwMDc1NQotLS0gYS94c3RjL2ZpeHVwLXRlc3RzLnB5CisrKyBiL3hzdGMvZml4dXAtdGVzdHMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHN5cywgb3MKIGltcG9ydCBsaWJ4bWwyCkBAIC0xMSw3ICsxMSw3IEBACiBzaWduYXR1cmUgPSBzdHIoKQogZGljdFhTRCA9IGRpY3QoKQogCi1kZWYgZ2F0aGVyRmlsZXMoKToJCitkZWYgZ2F0aGVyRmlsZXMoKToKICAgICBmb3IgZmlsZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgIGlmIChmaWxlWy01XSBpbiBbImEiLCAiYiIsICJjIl0pIGFuZCAoZmlsZVstMzpdID09ICd4c2QnKToKICAgICAgICAgICAgICMgbmV3ZmlsZW5hbWUgPSBzdHJpbmcucmVwbGFjZShmaWxlbmFtZSwgJyAnLCAnXycpCkBAIC0yNiw3NCArMjYsNzMgQEAKIAogZGVmIGRlYnVnTXNnKHRleHQpOgogICAgICNwYXNzCi0gICAgcHJpbnQgIkRFQlVHOiIsIHRleHQKLSAgICAKLSAgICAKLWRlZiBmaXh1cCgpOiAgICAgIAorICAgIHByaW50KCJERUJVRzoiLCB0ZXh0KQorCisKK2RlZiBmaXh1cCgpOgogICAgIGZvciBtYWluWFNEIGluIGRpY3RYU0Q6Ci0gICAgICAgIGRlYnVnTXNnKCJmaXhpbmcgJyVzJy4uLiIgJSBtYWluWFNEKQkKLQlzY2hlbWFEb2MgPSBOb25lCi0JeHBtYWluQ3R4ID0gTm9uZQkKKyAgICAgICAgZGVidWdNc2coImZpeGluZyAnJXMnLi4uIiAlIG1haW5YU0QpCisgICAgICAgIHNjaGVtYURvYyA9IE5vbmUKKyAgICAgICAgeHBtYWluQ3R4ID0gTm9uZQogICAgICAgICAjIExvYWQgdGhlIHNjaGVtYSBkb2N1bWVudC4KICAgICAgICAgc2NoZW1hRmlsZSA9IG9zLnBhdGguam9pbihiYXNlRGlyLCBtYWluWFNEKQogICAgICAgICBzY2hlbWFEb2MgPSBsaWJ4bWwyLnBhcnNlRmlsZShzY2hlbWFGaWxlKQotCWlmIChzY2hlbWFEb2MgaXMgTm9uZSk6Ci0JICAgIHByaW50ICJFUlJPUjogZG9jICclcycgbm90IGZvdW5kIiAlIG1haW5YU0QKKyAgICAgICAgaWYgKHNjaGVtYURvYyBpcyBOb25lKToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogZG9jICclcycgbm90IGZvdW5kIiAlIG1haW5YU0QpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQotCXRyeTogICAgCi0JICAgIHhwbWFpbkN0eCA9IHNjaGVtYURvYy54cGF0aE5ld0NvbnRleHQoKQotICAgICAgICAgICAgeHBtYWluQ3R4LnhwYXRoUmVnaXN0ZXJOcygieHMiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsJCQorICAgICAgICB0cnk6CisgICAgICAgICAgICB4cG1haW5DdHggPSBzY2hlbWFEb2MueHBhdGhOZXdDb250ZXh0KCkKKyAgICAgICAgICAgIHhwbWFpbkN0eC54cGF0aFJlZ2lzdGVyTnMoInhzIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIikKICAgICAgICAgICAgIHhwcmVzID0geHBtYWluQ3R4LnhwYXRoRXZhbCgiL3hzOnNjaGVtYSIpCiAgICAgICAgICAgICBpZiBsZW4oeHByZXMpID09IDA6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkVSUk9SOiBkb2MgJyVzJyBoYXMgbm8gPHNjaGVtYT4gZWxlbWVudCIgJSBtYWluWFNECisgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBkb2MgJyVzJyBoYXMgbm8gPHNjaGVtYT4gZWxlbWVudCIgJSBtYWluWFNEKQogICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0JICAgIHNjaGVtYUVsZW0gPSB4cHJlc1swXSAgCi0JICAgIHNjaGVtYU5zID0gc2NoZW1hRWxlbS5ucygpCi0JICAgICMgU2VsZWN0IGFsbCA8aW1wb3J0PnMuCi0JICAgIHhwcmVzID0geHBtYWluQ3R4LnhwYXRoRXZhbCgiL3hzOnNjaGVtYS94czppbXBvcnQiKQkKLQkgICAgaWYgbGVuKHhwcmVzKSAhPSAwOgotCSAgICAgICAgZm9yIGVsZW0gaW4geHByZXM6Ci0JICAgICAgICAgICAgbG9jID0gZWxlbS5ub05zUHJvcCgic2NoZW1hTG9jYXRpb24iKQotCSAgICAgICAgICAgIGlmIChsb2MgaXMgbm90IE5vbmUpOgotCSAgICAgICAgICAgICAgICBkZWJ1Z01zZygiICBpbXBvcnRzICclcyciICUgbG9jKQotCSAgICAgICAgICAgICAgICBpZiBsb2MgaW4gZGljdFhTRFttYWluWFNEXToKLQkgICAgICAgICAgICAgICAgICAgIGRpY3RYU0RbbWFpblhTRF0ucmVtb3ZlKGxvYykJCQkKLQkgICAgZm9yIGxvYyBpbiBkaWN0WFNEW21haW5YU0RdOgkgICAgCi0JICAgICAgICAjIFJlYWQgb3V0IHRoZSB0YXJnZXROYW1lc3BhY2UuCi0JICAgICAgICBpbXBUYXJnZXROcyA9IE5vbmUKLQkgICAgICAgIGltcEZpbGUgPSBvcy5wYXRoLmpvaW4oYmFzZURpciwgbG9jKQotCSAgICAgICAgaW1wRG9jID0gbGlieG1sMi5wYXJzZUZpbGUoaW1wRmlsZSkKLQkJdHJ5OgorICAgICAgICAgICAgc2NoZW1hRWxlbSA9IHhwcmVzWzBdCisgICAgICAgICAgICBzY2hlbWFOcyA9IHNjaGVtYUVsZW0ubnMoKQorICAgICAgICAgICAgIyBTZWxlY3QgYWxsIDxpbXBvcnQ+cy4KKyAgICAgICAgICAgIHhwcmVzID0geHBtYWluQ3R4LnhwYXRoRXZhbCgiL3hzOnNjaGVtYS94czppbXBvcnQiKQorICAgICAgICAgICAgaWYgbGVuKHhwcmVzKSAhPSAwOgorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHhwcmVzOgorICAgICAgICAgICAgICAgICAgICBsb2MgPSBlbGVtLm5vTnNQcm9wKCJzY2hlbWFMb2NhdGlvbiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChsb2MgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdNc2coIiAgaW1wb3J0cyAnJXMnIiAlIGxvYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvYyBpbiBkaWN0WFNEW21haW5YU0RdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RYU0RbbWFpblhTRF0ucmVtb3ZlKGxvYykKKyAgICAgICAgICAgIGZvciBsb2MgaW4gZGljdFhTRFttYWluWFNEXToKKyAgICAgICAgICAgICAgICAjIFJlYWQgb3V0IHRoZSB0YXJnZXROYW1lc3BhY2UuCisgICAgICAgICAgICAgICAgaW1wVGFyZ2V0TnMgPSBOb25lCisgICAgICAgICAgICAgICAgaW1wRmlsZSA9IG9zLnBhdGguam9pbihiYXNlRGlyLCBsb2MpCisgICAgICAgICAgICAgICAgaW1wRG9jID0gbGlieG1sMi5wYXJzZUZpbGUoaW1wRmlsZSkKKyAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHhwaW1wQ3R4ID0gaW1wRG9jLnhwYXRoTmV3Q29udGV4dCgpCi0JCSAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHhwaW1wQ3R4LnNldENvbnRleHREb2MoaW1wRG9jKQotCSAgICAgICAgICAgICAgICB4cGltcEN0eC54cGF0aFJlZ2lzdGVyTnMoInhzIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7ICAKLQkgICAgICAgICAgICAgICAgeHByZXMgPSB4cGltcEN0eC54cGF0aEV2YWwoIi94czpzY2hlbWEiKQotCSAgICAgICAgICAgICAgICBpbXBUYXJnZXROcyA9IHhwcmVzWzBdLm5vTnNQcm9wKCJ0YXJnZXROYW1lc3BhY2UiKQotCSAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICB4cGltcEN0eC54cGF0aFJlZ2lzdGVyTnMoInhzIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHhwcmVzID0geHBpbXBDdHgueHBhdGhFdmFsKCIveHM6c2NoZW1hIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcFRhcmdldE5zID0geHByZXNbMF0ubm9Oc1Byb3AoInRhcmdldE5hbWVzcGFjZSIpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICAgICB4cGltcEN0eC54cGF0aEZyZWVDb250ZXh0KCkKLQkgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgaW1wRG9jLmZyZWVEb2MoKQotCSAgICAgICAgICAgICAgICAKLQkgICAgICAgICMgQWRkIHRoZSA8aW1wb3J0Pi4KLQkgICAgICAgIGRlYnVnTXNnKCIgIGFkZGluZyA8aW1wb3J0IG5hbWVzcGFjZT0nJXMnIHNjaGVtYUxvY2F0aW9uPSclcycvPiIgJSAoaW1wVGFyZ2V0TnMsIGxvYykpCi0JICAgICAgICBuZXdFbGVtID0gc2NoZW1hRG9jLm5ld0RvY05vZGUoc2NoZW1hTnMsICJpbXBvcnQiLCBOb25lKQotCSAgICAgICAgaWYgKGltcFRhcmdldE5zIGlzIG5vdCBOb25lKToKKworICAgICAgICAgICAgICAgICMgQWRkIHRoZSA8aW1wb3J0Pi4KKyAgICAgICAgICAgICAgICBkZWJ1Z01zZygiICBhZGRpbmcgPGltcG9ydCBuYW1lc3BhY2U9JyVzJyBzY2hlbWFMb2NhdGlvbj0nJXMnLz4iICUgKGltcFRhcmdldE5zLCBsb2MpKQorICAgICAgICAgICAgICAgIG5ld0VsZW0gPSBzY2hlbWFEb2MubmV3RG9jTm9kZShzY2hlbWFOcywgImltcG9ydCIsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgKGltcFRhcmdldE5zIGlzIG5vdCBOb25lKToKICAgICAgICAgICAgICAgICAgICAgbmV3RWxlbS5uZXdQcm9wKCJuYW1lc3BhY2UiLCBpbXBUYXJnZXROcykKLQkgICAgICAgIG5ld0VsZW0ubmV3UHJvcCgic2NoZW1hTG9jYXRpb24iLCBsb2MpCi0JICAgICAgICBpZiBzY2hlbWFFbGVtLmNoaWxkcmVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5ld0VsZW0ubmV3UHJvcCgic2NoZW1hTG9jYXRpb24iLCBsb2MpCisgICAgICAgICAgICAgICAgaWYgc2NoZW1hRWxlbS5jaGlsZHJlbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2NoZW1hRWxlbS5jaGlsZHJlbi5hZGRQcmV2U2libGluZyhuZXdFbGVtKQogICAgICAgICAgICAgICAgIHNjaGVtYURvYy5zYXZlRmlsZShzY2hlbWFGaWxlKQotCWZpbmFsbHk6CisgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB4cG1haW5DdHgueHBhdGhGcmVlQ29udGV4dCgpCiAgICAgICAgICAgICBzY2hlbWFEb2MuZnJlZURvYygpCi0JICAgIAorCiB0cnk6CiAgICAgZ2F0aGVyRmlsZXMoKQogICAgIGZpeHVwKCkKIGZpbmFsbHk6CiAgICAgbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKICAgICBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpICE9IDA6Ci0gICAgICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKLSAgICAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKKyAgICAgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKIApkaWZmIC0tZ2l0IGEveHN0Yy94c3RjLnB5IGIveHN0Yy94c3RjLnB5CmluZGV4IDdiMTE5YmQuLmNmNGE4YTEgMTAwNzU1Ci0tLSBhL3hzdGMveHN0Yy5weQorKysgYi94c3RjL3hzdGMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIwogIyBUaGlzIGlzIHRoZSBNUyBzdWJzZXQgb2YgdGhlIFczQyB0ZXN0IHN1aXRlIGZvciBYTUwgU2NoZW1hcy4KZGlmZiAtLWdpdCBhL3h6bGliLmMgYi94emxpYi5jCmluZGV4IGMxM2UxN2QuLmI1ZDM1ZGEgMTAwNjQ0Ci0tLSBhL3h6bGliLmMKKysrIGIveHpsaWIuYwpAQCAtMTQsOSArMTQsNiBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpZmRlZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VuZGlmCkBAIC0yNSw2ICsyMiw4IEBACiAjZW5kaWYKICNpZmRlZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxpZiBkZWZpbmVkIChfV0lOMzIpCisjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgogI2lmZGVmIExJQlhNTF9aTElCX0VOQUJMRUQKICNpbmNsdWRlIDx6bGliLmg+CkBAIC0zMyw3ICszMiw3IEBACiAjaW5jbHVkZSA8bHptYS5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJ4emxpYi5oIgorI2luY2x1ZGUgInByaXZhdGUveHpsaWIuaCIKICNpbmNsdWRlIDxsaWJ4bWwveG1sbWVtb3J5Lmg+CiAKIC8qIHZhbHVlcyBmb3IgeHpfc3RhdGUgaG93ICovCkBAIC0xMzQsNiArMTMzLDcgQEAKIHh6X29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlIEFUVFJJQlVURV9VTlVTRUQpCiB7CiAgICAgeHpfc3RhdGVwIHN0YXRlOworICAgIG9mZl90IG9mZnNldDsKIAogICAgIC8qIGFsbG9jYXRlIHh6RmlsZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuICovCiAgICAgc3RhdGUgPSB4bWxNYWxsb2Moc2l6ZW9mKHh6X3N0YXRlKSk7CkBAIC0xNjgsOSArMTY4LDExIEBACiAgICAgfQogCiAgICAgLyogc2F2ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBmb3IgcmV3aW5kaW5nIChvbmx5IGlmIHJlYWRpbmcpICovCi0gICAgc3RhdGUtPnN0YXJ0ID0gbHNlZWsoc3RhdGUtPmZkLCAwLCBTRUVLX0NVUik7Ci0gICAgaWYgKHN0YXRlLT5zdGFydCA9PSAodWludDY0X3QpIC0gMSkKKyAgICBvZmZzZXQgPSBsc2VlayhzdGF0ZS0+ZmQsIDAsIFNFRUtfQ1VSKTsKKyAgICBpZiAob2Zmc2V0ID09IC0xKQogICAgICAgICBzdGF0ZS0+c3RhcnQgPSAwOworICAgIGVsc2UKKyAgICAgICAgc3RhdGUtPnN0YXJ0ID0gb2Zmc2V0OwogCiAgICAgLyogaW5pdGlhbGl6ZSBzdHJlYW0gKi8KICAgICB4el9yZXNldChzdGF0ZSk7CkBAIC0yMTQsMTEgKzIxNiwxMiBAQAogX19saWJ4bWwyX3h6ZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQogewogICAgIGNoYXIgKnBhdGg7ICAgICAgICAgICAgICAgICAvKiBpZGVudGlmaWVyIGZvciBlcnJvciBtZXNzYWdlcyAqLworICAgIHNpemVfdCBwYXRoX3NpemUgPSA3ICsgMyAqIHNpemVvZihpbnQpOwogICAgIHh6RmlsZSB4ejsKIAotICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IHhtbE1hbGxvYyg3ICsgMyAqIHNpemVvZihpbnQpKSkgPT0gTlVMTCkKKyAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSB4bWxNYWxsb2MocGF0aF9zaXplKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3ByaW50ZihwYXRoLCAiPGZkOiVkPiIsIGZkKTsgICAgICAgLyogZm9yIGRlYnVnZ2luZyAqLworICAgIHNucHJpbnRmKHBhdGgsIHBhdGhfc2l6ZSwgIjxmZDolZD4iLCBmZCk7ICAgICAgIC8qIGZvciBkZWJ1Z2dpbmcgKi8KICAgICB4eiA9IHh6X29wZW4ocGF0aCwgZmQsIG1vZGUpOwogICAgIHhtbEZyZWUocGF0aCk7CiAgICAgcmV0dXJuIHh6OwpkaWZmIC0tZ2l0IGEveHpsaWIuaCBiL3h6bGliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMWRmMTUuLjAwMDAwMDAKLS0tIGEveHpsaWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKgotICogeHpsaWIuaDogaGVhZGVyIGZvciB0aGUgZnJvbnQgZW5kIGZvciB0aGUgdHJhbnNwYXJlbnQgc3VwcG9ydCBvZiBsem1hCi0gKiAgICAgICAgICBjb21wcmVzc2lvbiBhdCB0aGUgSS9PIGxheWVyCi0gKgotICogU2VlIENvcHlyaWdodCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIEFuZGVycyBGIEJqb3JrbHVuZCA8YWZiQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSAqLwotCi0jaWZuZGVmIExJQlhNTDJfWFpMSUJfSAotI2RlZmluZSBMSUJYTUwyX1haTElCX0gKLXR5cGVkZWYgdm9pZCAqeHpGaWxlOyAgICAgICAgICAgLyogb3BhcXVlIGx6bWEgZmlsZSBkZXNjcmlwdG9yICovCi0KLXh6RmlsZSBfX2xpYnhtbDJfeHpvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOwoteHpGaWxlIF9fbGlieG1sMl94emRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSk7Ci1pbnQgX19saWJ4bWwyX3h6cmVhZCh4ekZpbGUgZmlsZSwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsZW4pOwotaW50IF9fbGlieG1sMl94emNsb3NlKHh6RmlsZSBmaWxlKTsKLWludCBfX2xpYnhtbDJfeHpjb21wcmVzc2VkKHh6RmlsZSBmKTsKLSNlbmRpZiAvKiBMSUJYTUwyX1haTElCX0ggKi8K